projects/guix·blob sysadmin-team · refs

43759 lines · 1.6 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2026 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-2026 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 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;;; Copyright © 2026 Kevin Deldycke <[email protected]>
188;;; Copyright © 2026 Ryan Desfosses <[email protected]>
189;;; Copyright © 2026 nick <[email protected]>
190;;;
191;;; This file is part of GNU Guix.
192;;;
193;;; GNU Guix is free software; you can redistribute it and/or modify it
194;;; under the terms of the GNU General Public License as published by
195;;; the Free Software Foundation; either version 3 of the License, or (at
196;;; your option) any later version.
197;;;
198;;; GNU Guix is distributed in the hope that it will be useful, but
199;;; WITHOUT ANY WARRANTY; without even the implied warranty of
200;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
201;;; GNU General Public License for more details.
202;;;
203;;; You should have received a copy of the GNU General Public License
204;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
205
206(define-module (gnu packages python-xyz)
207 #:use-module (gnu packages algebra)
208 #:use-module (gnu packages attr)
209 #:use-module (gnu packages autotools)
210 #:use-module (gnu packages backup)
211 #:use-module (gnu packages base)
212 #:use-module (gnu packages bash)
213 #:use-module (gnu packages bdw-gc)
214 #:use-module (gnu packages bioinformatics)
215 #:use-module (gnu packages boost)
216 #:use-module (gnu packages build-tools)
217 #:use-module (gnu packages c)
218 #:use-module (gnu packages check)
219 #:use-module (gnu packages cmake)
220 #:use-module (gnu packages compression)
221 #:use-module (gnu packages cpp)
222 #:use-module (gnu packages crypto)
223 #:use-module (gnu packages databases)
224 #:use-module (gnu packages dbm)
225 #:use-module (gnu packages dictionaries)
226 #:use-module (gnu packages digest)
227 #:use-module (gnu packages django)
228 #:use-module (gnu packages djvu)
229 #:use-module (gnu packages dns)
230 #:use-module (gnu packages documentation)
231 #:use-module (gnu packages duckdb)
232 #:use-module (gnu packages elf)
233 #:use-module (gnu packages emulators)
234 #:use-module (gnu packages enchant)
235 #:use-module (gnu packages file)
236 #:use-module (gnu packages fonts)
237 #:use-module (gnu packages fontutils)
238 #:use-module (gnu packages freedesktop)
239 #:use-module (gnu packages gcc)
240 #:use-module (gnu packages gdb)
241 #:use-module (gnu packages geo)
242 #:use-module (gnu packages ghostscript)
243 #:use-module (gnu packages glib)
244 #:use-module (gnu packages gnome)
245 #:use-module (gnu packages gnupg)
246 #:use-module (gnu packages graphviz)
247 #:use-module (gnu packages gsasl)
248 #:use-module (gnu packages gtk)
249 #:use-module (gnu packages guile-xyz)
250 #:use-module (gnu packages haskell-xyz)
251 #:use-module (gnu packages icu4c)
252 #:use-module (gnu packages image)
253 #:use-module (gnu packages image-processing)
254 #:use-module (gnu packages imagemagick)
255 #:use-module (gnu packages inkscape)
256 #:use-module (gnu packages iso-codes)
257 #:use-module (gnu packages java)
258 #:use-module (gnu packages javascript)
259 #:use-module (gnu packages jupyter)
260 #:use-module (gnu packages kerberos)
261 #:use-module (gnu packages less)
262 #:use-module (gnu packages libevent)
263 #:use-module (gnu packages libffi)
264 #:use-module (gnu packages libusb)
265 #:use-module (gnu packages linux)
266 #:use-module (gnu packages llvm)
267 #:use-module (gnu packages machine-learning)
268 #:use-module (gnu packages man)
269 #:use-module (gnu packages markup)
270 #:use-module (gnu packages maths)
271 #:use-module (gnu packages messaging)
272 #:use-module (gnu packages monitoring)
273 #:use-module (gnu packages mpi)
274 #:use-module (gnu packages multiprecision)
275 #:use-module (gnu packages ncurses)
276 #:use-module (gnu packages networking)
277 #:use-module (gnu packages node)
278 #:use-module (gnu packages nss)
279 #:use-module (gnu packages openstack)
280 #:use-module (gnu packages pcre)
281 #:use-module (gnu packages pdf)
282 #:use-module (gnu packages perl)
283 #:use-module (gnu packages photo)
284 #:use-module (gnu packages pkg-config)
285 #:use-module (gnu packages protobuf)
286 #:use-module (gnu packages python)
287 #:use-module (gnu packages python-build)
288 #:use-module (gnu packages python-check)
289 #:use-module (gnu packages python-compression)
290 #:use-module (gnu packages python-crypto)
291 #:use-module (gnu packages python-science)
292 #:use-module (gnu packages python-web)
293 #:use-module (gnu packages qt)
294 #:use-module (gnu packages rdf)
295 #:use-module (gnu packages readline)
296 #:use-module (gnu packages regex)
297 #:use-module (gnu packages rpc)
298 #:use-module (gnu packages rust)
299 #:use-module (gnu packages scanner)
300 #:use-module (gnu packages search)
301 #:use-module (gnu packages serialization)
302 #:use-module (gnu packages shells)
303 #:use-module (gnu packages specifications)
304 #:use-module (gnu packages sphinx)
305 #:use-module (gnu packages ssh)
306 #:use-module (gnu packages statistics)
307 #:use-module (gnu packages task-management)
308 #:use-module (gnu packages tcl)
309 #:use-module (gnu packages tex)
310 #:use-module (gnu packages texinfo)
311 #:use-module (gnu packages time)
312 #:use-module (gnu packages tls)
313 #:use-module (gnu packages tree-sitter)
314 #:use-module (gnu packages valgrind)
315 #:use-module (gnu packages version-control)
316 #:use-module (gnu packages video)
317 #:use-module (gnu packages web)
318 #:use-module (gnu packages wxwidgets)
319 #:use-module (gnu packages xdisorg)
320 #:use-module (gnu packages xml)
321 #:use-module (gnu packages xorg)
322 #:use-module (gnu packages)
323 #:use-module (guix build-system cargo)
324 #:use-module (guix build-system cmake)
325 #:use-module (guix build-system copy)
326 #:use-module (guix build-system gnu)
327 #:use-module (guix build-system meson)
328 #:use-module (guix build-system pyproject)
329 #:use-module (guix deprecation)
330 #:use-module (guix download)
331 #:use-module (guix gexp)
332 #:use-module (guix git-download)
333 #:use-module (guix hg-download)
334 #:use-module ((guix licenses) #:prefix license:)
335 #:use-module (guix packages)
336 #:use-module (guix utils)
337 #:use-module (ice-9 match)
338 #:use-module (srfi srfi-1)
339 #:use-module (srfi srfi-26))
340
341(define-public python-aenum
342 (package
343 (name "python-aenum")
344 (version "3.1.17")
345 (source
346 (origin
347 (method git-fetch)
348 (uri (git-reference
349 (url "https://github.com/ethanfurman/aenum")
350 (commit version)))
351 (file-name (git-file-name name version))
352 (sha256
353 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
354 (build-system pyproject-build-system)
355 (arguments
356 (list
357 #:phases
358 #~(modify-phases %standard-phases
359 (add-after 'unpack 'fix
360 (lambda _
361 (substitute* "aenum/_py2.py"
362 (("raise exc.*")
363 "raise exc.with_traceback(tb)")))))
364 #:tests? #f)) ;no tests
365 (native-inputs (list python-setuptools))
366 (home-page "https://github.com/ethanfurman/aenum")
367 (synopsis
368 "Support for advanced enumerations, namedtuples and namedconstants")
369 (description
370 "AEnum is a set of symbolic names (members) bound to unique, constant
371values. Within an enumeration, the members can be compared by identity, and
372the enumeration itself can be iterated over. There is built-in support for
373unique values, multiple values, auto-numbering, and suspension of aliasing
374(members with the same value are not identical), plus the ability to have
375values automatically bound to attributes.")
376 (license license:bsd-3)))
377
378(define-public python-accumulation-tree
379 ;; Only minor releases (0.x) are tagged, not patch versions.
380 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
381 (revision "0"))
382 (package
383 (name "python-accumulation-tree")
384 (version (git-version "0.6.4" revision commit))
385 (source
386 (origin
387 (method git-fetch)
388 (uri (git-reference
389 (url "https://github.com/tkluck/accumulation_tree")
390 (commit commit)))
391 (file-name (git-file-name name version))
392 (sha256
393 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
394 (modules '((guix build utils)))
395 (snippet ;use src layout for isolated tests
396 #~(let* ((src "src/")
397 (old "accumulation_tree/")
398 (new (string-append src old)))
399 (mkdir src)
400 (rename-file old new)
401 (substitute* "setup.py"
402 (("packages=" all)
403 (string-append "package_dir={'': '" src "'}, " all))
404 ((old)
405 new))))))
406 (build-system pyproject-build-system)
407 (arguments
408 (list #:test-backend #~'custom
409 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
410 (native-inputs (list python-cloudpickle python-cython python-setuptools))
411 (home-page "https://github.com/tkluck/accumulation_tree")
412 (synopsis "Red-black tree with fast value accumulation in a key range")
413 (description
414 "This Python package implements a red-black tree which also stores
415partial aggregations at each node, making getting aggregations
416of key range slices an O(log(N)) operation.
417
418This data structure is very similar to a binary indexed tree,
419with heap allocation instead of a flat array to represent a tree.")
420 (license license:expat))))
421
422(define-public python-anaconda-cli-base
423 (package
424 (name "python-anaconda-cli-base")
425 (version "0.8.2")
426 (source
427 (origin
428 (method git-fetch)
429 (uri (git-reference
430 (url "https://github.com/anaconda/anaconda-cli-base")
431 (commit (string-append "v" version))))
432 (file-name (git-file-name name version))
433 (sha256
434 (base32 "1vsbxcgn05d7mlwl17f0bfq25lydl7i8n4x0a95hmjdl45n1q9wx"))))
435 (build-system pyproject-build-system)
436 (arguments
437 (list
438 #:test-flags
439 #~(list "--deselect=tests/test_cli.py::test_cli_version"
440 "--deselect=tests/test_cli.py::test_load_plugin")))
441 (native-inputs
442 (list python-hatch-vcs
443 python-hatchling
444 python-pytest
445 python-pytest-mock
446 python-setuptools-scm
447 python-types-requests))
448 (propagated-inputs
449 (list python-click
450 python-packaging
451 python-pydantic
452 python-pydantic-settings
453 python-readchar
454 python-rich
455 python-tomli
456 python-tomlkit
457 python-typer))
458 (home-page "https://anaconda.github.io/anaconda-cli-base/")
459 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
460 (description
461 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
462 (license license:bsd-3)))
463
464(define-public python-annexremote
465 (package
466 (name "python-annexremote")
467 (version "1.6.6")
468 (source
469 (origin
470 (method git-fetch)
471 (uri (git-reference
472 (url "https://github.com/Lykos153/AnnexRemote")
473 (commit (string-append "v" version))))
474 (file-name (git-file-name name version))
475 (sha256
476 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
477 (build-system pyproject-build-system)
478 (native-inputs
479 (list python-pytest
480 python-setuptools
481 python-setuptools-scm))
482 (home-page "https://github.com/Lykos153/AnnexRemote")
483 (synopsis "Helper module to easily develop git-annex special remotes")
484 (description
485 "This package provides a helper module to develop special remotes for
486git-annex. AnnexRemote implements the line-based external special remote
487protocol of git-annex, while leaving the behavior of the remote up to the
488user.")
489 (license license:gpl3)))
490
491(define-public python-annotated-doc
492 (package
493 (name "python-annotated-doc")
494 (version "0.0.4")
495 (source
496 (origin
497 (method git-fetch)
498 (uri (git-reference
499 (url "https://github.com/fastapi/annotated-doc")
500 (commit version)))
501 (file-name (git-file-name name version))
502 (sha256
503 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
504 (build-system pyproject-build-system)
505 (native-inputs
506 (list python-pytest
507 python-pdm-backend))
508 (home-page "https://github.com/fastapi/annotated-doc")
509 (synopsis "Annotated for some Python objects")
510 (description
511 "This package implements a functionality for document parameters, class
512attributes, return types, and variables inline, with
513Annotated.")
514 (license license:expat)))
515
516(define-public python-archspec
517 (package
518 (name "python-archspec")
519 (version "0.2.5")
520 (source
521 (origin
522 (method git-fetch)
523 (uri (git-reference
524 (url "https://github.com/archspec/archspec")
525 (commit (string-append "v" version))
526 (recursive? #t)))
527 (file-name (git-file-name name version))
528 (sha256
529 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
530 (build-system pyproject-build-system)
531 (native-inputs
532 (list python-jsonschema
533 python-poetry-core
534 python-pytest))
535 (home-page "https://github.com/archspec/archspec")
536 (synopsis "Library to query system architecture")
537 (description
538 "Archspec offers human-readable labels for system architecture aspects.
539These aspects include CPU, network fabrics, etc. In addition, it offers
540APIs to detect, query, and compare them.")
541 (license license:expat)))
542
543(define-public python-astar
544 ;; The Git repository has no tag.
545 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
546 (revision "0"))
547 (package
548 (name "python-astar")
549 (version (git-version "0.99" revision commit))
550 (source
551 (origin
552 (method git-fetch)
553 (uri (git-reference
554 (url "https://github.com/jrialland/python-astar")
555 (commit commit)))
556 (file-name (git-file-name name version))
557 (sha256
558 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
559 (build-system pyproject-build-system)
560 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
561 ;; the test suite has been written for unittest.
562 (native-inputs (list python-poetry-core))
563 (home-page "https://github.com/jrialland/python-astar")
564 (synopsis "Implementation of the A* search algorithm")
565 (description
566 "The @code{astar} Python package provide a generic implementation
567of the A* graph traversal and pathfinding algorithm.")
568 (license license:bsd-3))))
569
570(define-public python-asyncclick
571 (package
572 (name "python-asyncclick")
573 (version "8.3.0.3")
574 (source
575 (origin
576 (method url-fetch)
577 (uri (pypi-uri "asyncclick" version))
578 (sha256
579 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
580 (build-system pyproject-build-system)
581 ;; tests: 1418 passed, 21 skipped, 1 xfailed
582 (native-inputs
583 (list less
584 python-flit-core
585 python-pytest
586 python-trio))
587 (propagated-inputs
588 (list python-anyio))
589 (home-page "https://github.com/python-trio/asyncclick")
590 (synopsis "Python composable command line utility, trio-compatible version ")
591 (description
592 "AsyncClick is a fork of Click that works well with anyio, Trio, or
593asyncio.")
594 (license license:bsd-3)))
595
596(define-public python-asyncstdlib
597 (package
598 (name "python-asyncstdlib")
599 (version "3.13.0")
600 (source
601 (origin
602 (method url-fetch)
603 (uri (pypi-uri "asyncstdlib" version))
604 (sha256
605 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
606 (build-system pyproject-build-system)
607 (native-inputs (list python-flit-core python-pytest))
608 (home-page "https://asyncstdlib.readthedocs.io")
609 (synopsis "Compatibility layer between the Python stdlib and @code{async}
610callables")
611 (description
612 "The @code{asyncstdlib} library re-implements functions and classes of
613the Python standard library to make them compatible with @code{async}
614callables, iterables and context managers. It is fully agnostic to
615@code{async} event loops and seamlessly works with @code{asyncio}, third-party
616libraries such as @code{trio}, as well as any custom @code{async} event
617loop.")
618 (license license:expat)))
619
620(define-public python-awesomeversion
621 (package
622 (name "python-awesomeversion")
623 (version "24.6.0")
624 (source
625 (origin
626 (method git-fetch)
627 (uri (git-reference
628 (url "https://github.com/ludeeus/awesomeversion")
629 (commit version)))
630 (file-name (git-file-name name version))
631 (sha256
632 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
633 (modules '((guix build utils)))
634 (snippet #~(substitute* "pyproject.toml"
635 (("version = \"0\"")
636 (format #f "version = \"~a\"" #$version))))))
637 (build-system pyproject-build-system)
638 (native-inputs
639 (list python-poetry-core
640 python-pytest
641 python-pytest-snapshot))
642 (home-page "https://github.com/ludeeus/awesomeversion")
643 (synopsis "Create and compare version objects")
644 (description
645 "This package provides a way to make anything a version object, and
646compare against a vast section of other version formats.")
647 (license license:expat)))
648
649(define-public python-awkward-cpp
650 (package
651 (name "python-awkward-cpp")
652 ;; TODO: any higher versions need pybind11 >= 3, see:
653 ;; <https://codeberg.org/guix/guix/pulls/4696>.
654 (version "47")
655 (source
656 (origin
657 (method url-fetch)
658 (uri (pypi-uri "awkward_cpp" version))
659 (sha256
660 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
661 (build-system pyproject-build-system)
662 ;; tests: 22304 passed, 524 skipped
663 (native-inputs
664 (list cmake-minimal
665 pybind11-2
666 python-pytest
667 python-scikit-build-core))
668 (propagated-inputs
669 (list python-numpy))
670 (home-page "https://awkward-array.org/")
671 (synopsis "CPU kernels and compiled extensions for Awkward Array")
672 (description "Awkward CPP provides precompiled routines for the awkward
673package. It is not useful on its own, only as a dependency for awkward.")
674 (license license:bsd-3)))
675
676(define-public python-awkward
677 (package
678 (name "python-awkward")
679 (version "2.8.5")
680 (source
681 (origin
682 (method url-fetch)
683 (uri (pypi-uri "awkward" version))
684 (sha256
685 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
686 (build-system pyproject-build-system)
687 (arguments
688 (list
689 ;; tests: 2798 passed, 156 skipped
690 #:test-flags
691 ;; CUDA is and requires proprietary software.
692 #~(list "--ignore=tests-cuda-kernels/"
693 "--ignore=tests-cuda/")))
694 (native-inputs
695 (list python-hatch-fancy-pypi-readme
696 python-hatchling
697 python-pytest))
698 (propagated-inputs
699 (list python-awkward-cpp
700 python-fsspec
701 python-importlib-metadata
702 python-numpy
703 python-packaging))
704 (home-page "https://awkward-array.org/")
705 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
706 (description "Awkward Array is a library for nested, variable-sized data,
707including arbitrary-length lists, records, mixed types, and missing data,
708using NumPy-like idioms.")
709 (license license:bsd-3)))
710
711(define-public python-bracex
712 (package
713 (name "python-bracex")
714 (version "2.6")
715 (source
716 (origin
717 (method git-fetch)
718 (uri (git-reference
719 (url "https://github.com/facelessuser/bracex")
720 (commit version)))
721 (file-name (git-file-name name version))
722 (sha256
723 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
724 (build-system pyproject-build-system)
725 (native-inputs
726 (list python-hatchling
727 python-pytest))
728 (home-page "https://facelessuser.github.io/bracex/")
729 (synopsis "Bash-style brace expansion for Python")
730 (description
731 "Bracex is a brace expansion library for Python that implements
732Bash-style brace expansion. It can generate strings from patterns like
733@code{@{a,b,c@}} or @code{@{1..10@}}.")
734 (license license:expat)))
735
736(define-public python-bresenham
737 (package
738 (name "python-bresenham")
739 (version "0.2.1")
740 (source
741 (origin
742 (method git-fetch)
743 (uri (git-reference
744 (url "https://github.com/encukou/bresenham")
745 (commit (string-append "v" version))))
746 (file-name (git-file-name name version))
747 (sha256
748 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
749 (build-system pyproject-build-system)
750 (native-inputs
751 (list python-pytest
752 python-setuptools
753 python-wheel))
754 (home-page "https://github.com/encukou/bresenham")
755 (synopsis "Implementation of Bresenham's line drawing algorithm")
756 (description
757 "This package provides a Python implementation of
758@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
759line drawing algorithm}.")
760 (license license:expat)))
761
762(define-public python-cachey
763 (package
764 (name "python-cachey")
765 (version "0.2.1")
766 (source
767 (origin
768 (method git-fetch)
769 (uri (git-reference
770 (url "https://github.com/dask/cachey/")
771 (commit version)))
772 (file-name (git-file-name name version))
773 (sha256
774 (base32 "12rkn4cvdwlpjhlmyxi1glvn1nzlx147xs96h9k6pbgbwyxaci75"))))
775 (build-system pyproject-build-system)
776 (native-inputs
777 (list python-pytest
778 python-setuptools))
779 (propagated-inputs
780 (list python-heapdict))
781 (home-page "https://github.com/dask/cachey/")
782 (synopsis "Caching based on computation time and storage space")
783 (description
784 "This package provides a Python module for caching mindful of
785computation/storage costs.")
786 (license license:bsd-3)))
787
788(define-public python-catalogus
789 (package
790 (name "python-catalogus")
791 (version "0.1.0")
792 (source
793 (origin
794 (method git-fetch)
795 (uri (git-reference
796 (url "https://github.com/breezy-team/catalogus")
797 (commit (string-append "v" version))))
798 (file-name (git-file-name name version))
799 (sha256
800 (base32 "0l34anf0h4rcsimq78q6y1s2m91605pxwpzfzxr2vh2hl45sy4w5"))))
801 (build-system pyproject-build-system)
802 (native-inputs
803 (list python-pytest
804 python-setuptools
805 python-setuptools-scm))
806 (home-page "https://github.com/breezy-team/catalogus")
807 (synopsis "Classes to provide name-to-object registry-like support")
808 (description
809 "This package provides classes to provide name-to-object registry-like
810support.")
811 (license license:gpl2+)))
812
813(define-public python-catppuccin
814 (package
815 (name "python-catppuccin")
816 (version "2.5.0")
817 (source
818 (origin
819 (method url-fetch)
820 (uri (pypi-uri "catppuccin" version))
821 (sha256
822 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
823 (build-system pyproject-build-system)
824 (native-inputs
825 (list python-hatchling python-pytest
826 ;; These are optional dependencies but required for tests.
827 python-matplotlib python-pygments python-rich))
828 (home-page "https://github.com/catppuccin/python")
829 (synopsis "Pastel palette for Python libraries")
830 (description "Catppuccin for Python is a soothing pastel palette for Python
831libraries. It aims to be the middle ground between low and high contrast
832themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
833 (license license:expat)))
834
835(define-public python-calmjs-parse
836 (package
837 (name "python-calmjs-parse")
838 (version "1.3.3")
839 (source
840 (origin
841 (method git-fetch)
842 (uri (git-reference
843 (url "https://github.com/calmjs/calmjs.parse/")
844 (commit version)))
845 (file-name (git-file-name name version))
846 (sha256
847 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
848 (build-system pyproject-build-system)
849 ;; tests: 797 passed, 1 warning
850 (native-inputs (list python-pytest python-setuptools))
851 (propagated-inputs (list python-ply))
852 (home-page "https://github.com/calmjs/calmjs.parse/")
853 (synopsis "Parsers for ECMA standards")
854 (description
855 "@code{Calmjs-parse} is a collection of helper libraries for
856understanding ECMA script.")
857 (license license:expat)))
858
859(define-public python-chameleon
860 (package
861 (name "python-chameleon")
862 (version "4.6.0")
863 (source
864 (origin
865 (method url-fetch)
866 (uri (pypi-uri "Chameleon" version))
867 (sha256
868 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
869 (build-system pyproject-build-system)
870 (native-inputs
871 (list python-pytest
872 python-setuptools))
873 (home-page "https://chameleon.readthedocs.io")
874 (synopsis "Fast HTML/XML Template Compiler")
875 (description
876 "Chameleon is an HTML/XML template engine for Python. It uses the page
877templates language.")
878 ;; Project is duo licensed, see: LICENSE.txt.
879 (license (list license:zpl2.1
880 license:psfl))))
881
882(define-public python-click-extra
883 (package
884 (name "python-click-extra")
885 (version "8.8.1")
886 (source
887 (origin
888 (method git-fetch)
889 (uri (git-reference
890 (url "https://github.com/kdeldycke/click-extra")
891 (commit (string-append "v" version))))
892 (file-name (git-file-name name version))
893 (sha256
894 (base32 "0i22as7f22qhnp69c7zwdh7k4pzl45ywa0hdj71j0n07lqdmdqc7"))))
895 (build-system pyproject-build-system)
896 (arguments
897 (list
898 ;; Upstream uses uv-build which is not yet available in Guix.
899 #:build-backend "setuptools.build_meta"
900 ;; tets: 3659 passed, 509 skipped, 4 deselected, 4 xfailed, 1267 warnings
901 #:test-flags
902 ;; Skip the network tests.
903 #~(list "-m" "not network"
904 ;; Prevent adding python-sphinx into scope.
905 (string-append "--deselect=tests/test_blocks.py"
906 "::test_blocks_reexported_from_sphinx_package"))))
907 (native-inputs
908 ;; Optional libraries imported at module level by the test suite.
909 (list python-hjson
910 python-jsonschema
911 python-pygments
912 python-pytest
913 python-pytest-httpserver
914 python-pyyaml
915 python-requests
916 python-setuptools
917 python-tomlkit
918 python-xmltodict))
919 (propagated-inputs
920 (list python-boltons
921 python-click
922 python-cloup
923 python-deepmerge
924 python-extra-platforms
925 python-tabulate
926 python-wcmatch
927 python-wcwidth))
928 (home-page "https://kdeldycke.github.io/click-extra/")
929 (synopsis "Drop-in replacement for Click to build colorful CLIs")
930 (description
931 "Click Extra extends the Click framework with colored help screens,
932configuration file support, table rendering, and platform detection. It
933serves as a drop-in replacement adding features for user-friendly command-line
934interfaces.")
935 (license license:gpl2+)))
936
937(define-public python-comrak
938 (package
939 (name "python-comrak")
940 (version "0.0.16")
941 (source
942 (origin
943 (method url-fetch)
944 (uri (pypi-uri "comrak" version))
945 (sha256
946 (base32 "1nzr1d957vac16kvy4si3hykx5cbcm73vpy94nm74rf66hgpx8m3"))))
947 (build-system pyproject-build-system)
948 (arguments
949 (list
950 #:imported-modules (append %cargo-build-system-modules
951 %pyproject-build-system-modules)
952 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
953 (guix build pyproject-build-system)
954 (guix build utils))
955 #:phases
956 #~(modify-phases %standard-phases
957 (add-after 'unpack 'prepare-cargo-build-system
958 (lambda args
959 (for-each (lambda (phase)
960 (format #t "Running cargo phase: ~a~%" phase)
961 (apply (assoc-ref cargo:%standard-phases phase)
962 #:cargo-target #$(cargo-triplet)
963 args))
964 '(prepare-rust-crates
965 unpack-rust-crates
966 configure
967 check-for-pregenerated-files
968 patch-cargo-checksums)))))))
969 (native-inputs
970 (append
971 (list maturin
972 python-pytest
973 rust
974 `(,rust "cargo"))
975 (or (and=> (%current-target-system)
976 (compose list make-rust-sysroot))
977 '())))
978 (inputs (cargo-inputs 'python-comrak))
979 (home-page "https://github.com/lmmx/comrak")
980 (synopsis "Python bindings for the Comrak Rust library")
981 (description
982 "This package provides Python bindings for the Comrak Rust library, a
983fast @code{CommonMark/GFM} parser.")
984 (license license:expat)))
985
986(define-public python-conda-content-trust
987 (package
988 (name "python-conda-content-trust")
989 (version "0.2.0")
990 (source
991 (origin
992 (method git-fetch)
993 (uri (git-reference
994 (url "https://github.com/conda/conda-content-trust")
995 (commit version)))
996 (file-name (git-file-name name version))
997 (sha256
998 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
999 (build-system pyproject-build-system)
1000 (arguments
1001 (list
1002 #:test-flags
1003 ;; XXX: Not packaged yet:
1004 ;; <https://github.com/secure-systems-lab/securesystemslib>.
1005 ;;
1006 ;; ImportError: The securesystemslib library is required, which appears
1007 ;; to be unavailable.
1008 #~(list #$@(map (lambda (test) (string-append "--deselect="
1009 "tests/test_root.py::"
1010 test))
1011 (list "test_sign_root_metadata_dict_via_gpg"
1012 "test_sign_root_metadata_via_gpg"
1013 "test_gpg_pubkey_in_ssl_format")))))
1014 (native-inputs
1015 (list python-hatch-vcs
1016 python-hatchling
1017 python-pytest))
1018 (propagated-inputs
1019 (list python-cryptography))
1020 (home-page "https://github.com/conda/conda-content-trust")
1021 (synopsis "Signing and verification tools for Conda")
1022 (description
1023 "This package implements a functionalit of signing and verification tools
1024for Conda. @url{https://theupdateframework.io/, Based on The Update
1025Framework (TUF)}, conda-content-trust is intended to ensure that when users in
1026the conda ecosystem obtain a package or data about that package, they can know
1027whether or not it is trustworthy (e.g. originally comes from a reliable source
1028and has not been tampered with). A basic library and basic CLI are included
1029to provide signing, verification, and trust delegation functionality.")
1030 (license license:bsd-3)))
1031
1032(define-public python-conda-inject
1033 (package
1034 (name "python-conda-inject")
1035 (version "1.3.2")
1036 (source
1037 (origin
1038 (method git-fetch)
1039 (uri (git-reference
1040 (url "https://github.com/koesterlab/conda-inject")
1041 (commit (string-append "v" version))))
1042 (file-name (git-file-name name version))
1043 (sha256
1044 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
1045 (build-system pyproject-build-system)
1046 (arguments
1047 (list #:tests? #f)) ; tests require setting up Conda
1048 (native-inputs
1049 (list python-poetry-core))
1050 (propagated-inputs
1051 (list python-pyyaml))
1052 (home-page "https://github.com/koesterlab/conda-inject")
1053 (synopsis "Inject a conda environment into the current python environment")
1054 (description
1055 "This package provides helper functions for injecting a conda
1056environment into the current python environment (by modifying @code{sys.path},
1057without actually changing the current python environment).")
1058 (license license:expat)))
1059
1060(define-public python-copydetect
1061 (package
1062 (name "python-copydetect")
1063 (version "0.5.0")
1064 (source
1065 (origin
1066 (method git-fetch)
1067 (uri (git-reference
1068 (url "https://github.com/blingenf/copydetect")
1069 (commit version)))
1070 (sha256
1071 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
1072 (build-system pyproject-build-system)
1073 (propagated-inputs (list python-jinja2
1074 python-matplotlib
1075 python-numpy
1076 python-pygments
1077 python-tqdm))
1078 (native-inputs (list python-setuptools
1079 python-pytest
1080 python-wheel))
1081 (home-page "https://github.com/blingenf/copydetect")
1082 (synopsis "Code plagiarism detection tool")
1083 (description "Copydetect is a tool to detect likely instances of plagiarism
1084based on the winnowing algorithm. It takes a list of directories as input and
1085generates an HTML report displaying copied slices as output.")
1086 (license license:expat)))
1087
1088(define-public python-couleur
1089 (package
1090 (name "python-couleur")
1091 (version "0.7.4")
1092 (source
1093 (origin
1094 (method url-fetch)
1095 (uri (pypi-uri "couleur" version))
1096 (sha256
1097 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
1098 (build-system pyproject-build-system)
1099 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1100 (native-inputs
1101 (list python-setuptools
1102 python-wheel))
1103 (home-page "https://github.com/gabrielfalcao/couleur")
1104 (synopsis "ANSI terminal tool for Python")
1105 (description
1106 "This package provides an ANSI terminal tool for Python, colored shell
1107and other handy fancy features.")
1108 (license license:lgpl3+)))
1109
1110(define-public python-crc
1111 (package
1112 (name "python-crc")
1113 (version "7.1.0")
1114 (source
1115 (origin
1116 (method git-fetch)
1117 (uri (git-reference
1118 (url "https://github.com/Nicoretti/crc/")
1119 (commit version)))
1120 (file-name (git-file-name name version))
1121 (sha256
1122 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1123 (build-system pyproject-build-system)
1124 (native-inputs
1125 (list python-poetry-core
1126 python-pytest
1127 python-wheel))
1128 (home-page "https://nicoretti.github.io/crc/")
1129 (synopsis "Pure Python CRC library")
1130 (description
1131 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1132CRC} checksums, using predefined and custom CRC configurations.
1133
1134Configurations:
1135@table @asis
1136@item CRC8
1137 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1138@item CRC16
1139 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1140@item CRC32
1141 CRC32 AUTOSAR BZIP2 POSIX
1142@item CRC64
1143 CRC64
1144@end table")
1145 (license license:bsd-2)))
1146
1147(define-public python-cron-converter
1148 (package
1149 (name "python-cron-converter")
1150 (version "1.3.1")
1151 (source
1152 (origin
1153 (method git-fetch)
1154 (uri (git-reference
1155 (url "https://github.com/Sonic0/cron-converter")
1156 (commit (string-append "v" version))))
1157 (file-name (git-file-name name version))
1158 (sha256
1159 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1160 (build-system pyproject-build-system)
1161 (arguments
1162 (list #:test-backend #~'unittest
1163 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1164 (native-inputs
1165 (list python-dateutil
1166 python-setuptools))
1167 (propagated-inputs
1168 (list python-dateutil))
1169 (home-page "https://github.com/Sonic0/cron-converter")
1170 (synopsis "Cron string parser and scheduler for Python")
1171 (description
1172 "Cron-converter provides a Cron string parser (from string/lists to
1173string/lists) and iteration for the datetime object with a cron like format.")
1174 (license license:expat)))
1175
1176(define-public python-curtsies
1177 (package
1178 (name "python-curtsies")
1179 (version "0.4.3")
1180 (source
1181 (origin
1182 (method url-fetch)
1183 (uri (pypi-uri "curtsies" version))
1184 (sha256
1185 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1186 (build-system pyproject-build-system)
1187 (native-inputs
1188 (list python-pyte
1189 python-pytest
1190 python-setuptools
1191 python-wheel))
1192 (propagated-inputs
1193 (list python-blessed
1194 python-cwcwidth))
1195 (home-page "https://github.com/bpython/curtsies")
1196 (synopsis "Library for curses-like terminal interaction with colored strings")
1197 (description
1198 "Curtsies is a Python library for interacting with the terminal. It
1199features string-like objects which carry formatting information, per-line
1200fullscreen terminal rendering, and keyboard input event reporting.")
1201 (license license:expat)))
1202
1203(define-public python-customtkinter
1204 (package
1205 (name "python-customtkinter")
1206 (version "5.2.2")
1207 (source
1208 (origin
1209 (method git-fetch)
1210 (uri (git-reference
1211 (url "https://github.com/TomSchimansky/CustomTkinter")
1212 (commit (string-append "v" version))))
1213 (file-name (git-file-name name version))
1214 (sha256
1215 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1216 (build-system pyproject-build-system)
1217 (arguments
1218 (list
1219 #:phases
1220 #~(modify-phases %standard-phases
1221 (add-before 'check 'start-xorg-server
1222 (lambda _
1223 (setenv "HOME" "/tmp")
1224 ;; The test suite requires a running X server.
1225 (system "Xvfb :99 -screen 0 1024x768x24 &")
1226 (setenv "DISPLAY" ":99.0")))
1227 (replace 'check
1228 (lambda* (#:key tests? #:allow-other-keys)
1229 (when tests?
1230 (with-directory-excursion "test"
1231 (invoke "python" "unit_tests/test_all.py"))))))))
1232 (propagated-inputs
1233 (list (list python "tk")
1234 python-darkdetect
1235 python-packaging))
1236 (native-inputs
1237 (list python-setuptools
1238 xorg-server-for-tests))
1239 (home-page "https://customtkinter.tomschimansky.com")
1240 (synopsis
1241 "Python @acronym{User Interface, UI} library based on Tkinter")
1242 (description
1243 "CustomTkinter provides fully customizable widgets, created and used
1244like normal Tkinter widgets, which can also be used in combination with normal
1245Tkinter elements.")
1246 (license license:expat)))
1247
1248(define-public python-cyclopts
1249 (package
1250 (name "python-cyclopts")
1251 (version "4.14.0")
1252 (source
1253 (origin
1254 (method git-fetch)
1255 (uri (git-reference
1256 (url "https://github.com/BrianPugh/cyclopts")
1257 (commit (string-append "v" version))))
1258 (file-name (git-file-name name version))
1259 (sha256
1260 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1261 (build-system pyproject-build-system)
1262 (arguments
1263 (list
1264 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1265 #:test-flags
1266 #~(list #$@(map (lambda (test) (string-append "--deselect="
1267 "tests/completion/"
1268 "test_bash.py::"
1269 test))
1270 (list "test_list_path_multi_positional_default_case"
1271 "test_eq_form_path_completion"
1272 "test_bash_path_completion_reflects_caller_cwd"))
1273 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1274 (native-inputs
1275 (list python-docutils
1276 python-hatch-vcs
1277 python-hatchling
1278 python-mkdocs
1279 python-pexpect
1280 python-pydantic
1281 python-pytest
1282 python-pytest-mock
1283 python-pyyaml
1284 python-sphinx
1285 python-syrupy
1286 python-toml
1287 python-trio))
1288 (propagated-inputs
1289 (list python-attrs
1290 python-docstring-parser
1291 python-rich
1292 python-rich-rst
1293 python-tomli
1294 python-typing-extensions))
1295 (home-page "https://github.com/BrianPugh/cyclopts")
1296 (synopsis "Intuitive, easy CLIs based on type hints")
1297 (description
1298 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1299that aims to provide an intuitive & efficient developer experience.")
1300 (license license:asl2.0)))
1301
1302(define-public python-darkdetect
1303 (package
1304 (name "python-darkdetect")
1305 (version "0.8.0")
1306 (source
1307 (origin
1308 (method url-fetch)
1309 (uri (pypi-uri "darkdetect" version))
1310 (sha256
1311 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1312 (build-system pyproject-build-system)
1313 (arguments
1314 (list
1315 #:tests? #f)) ;no tests in PyPI or Git.
1316 (native-inputs (list python-setuptools))
1317 (home-page "https://github.com/albertosottile/darkdetect")
1318 (synopsis "Detect OS dark mode from Python")
1319 (description
1320 "This package allows to detect if the user is using Dark Mode.")
1321 (license license:bsd-3)))
1322
1323(define-public python-dbus-deviation
1324 (package
1325 (name "python-dbus-deviation")
1326 (version "0.6.1")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "dbus-deviation" version))
1331 (sha256
1332 (base32 "18xp1s6k2x08d7a4ksh4dwf3sikvkdycylfz4lkmv213wbpqhsz0"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 #:phases
1337 #~(modify-phases %standard-phases
1338 (add-after 'unpack 'patch-sources
1339 ;; See: <https://github.com/pwithnall/dbus-deviation/issues/22>.
1340 (lambda _
1341 (with-directory-excursion "dbusapi/tests"
1342 (substitute* '("test_interfaceparser.py" "test_ast.py")
1343 (("assertEquals") "assertEqual"))))))))
1344 (propagated-inputs (list python-lxml))
1345 (native-inputs (list python-pytest python-setuptools))
1346 (home-page "https://tecnocode.co.uk/dbus-deviation/")
1347 (synopsis "D-Bus introspection XML parser")
1348 (description "The @{dbus-deviation} library and utility parses D-Bus
1349introspection XML and processes it in various ways. For example, it can
1350represent a parsed D-Bus API XML description as an @acronym{AST, abstract
1351syntax tree}, or calculate the differences between two D-Bus APIs.")
1352 (license license:lgpl2.1+)))
1353
1354(define-public python-decopatch
1355 (package
1356 (name "python-decopatch")
1357 (version "1.4.10")
1358 (source
1359 (origin
1360 (method url-fetch)
1361 (uri (pypi-uri "decopatch" version))
1362 (sha256
1363 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1364 (build-system pyproject-build-system)
1365 (arguments
1366 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1367 (native-inputs
1368 (list python-setuptools
1369 python-setuptools-scm))
1370 (propagated-inputs
1371 (list python-makefun))
1372 (home-page "https://github.com/smarie/python-decopatch")
1373 (synopsis "Create decorators easily in Python")
1374 (description
1375 "This package provide implements a functionality to simplify writing
1376decorators in Python.")
1377 (license license:bsd-3)))
1378
1379(define-public python-dek
1380 (package
1381 (name "python-dek")
1382 (version "1.6.0")
1383 (source
1384 (origin
1385 (method git-fetch)
1386 (uri (git-reference
1387 (url "https://github.com/rec/dek")
1388 (commit (string-append "v" version))))
1389 (file-name (git-file-name name version))
1390 (sha256
1391 (base32 "14y4d1vv9w13ng12x0gk1y4gfqn2sqz91r6bf4019gpgr6kvqj8v"))))
1392 (build-system pyproject-build-system)
1393 (native-inputs (list python-hatchling python-pytest))
1394 (propagated-inputs (list python-xmod))
1395 (home-page "https://rec.github.io/dek/")
1396 (synopsis "The decorator-decorator")
1397 (description
1398 "This package implements a functionality to write a Python decorator
1399which takes no parameters isn't hard.")
1400 (license license:expat)))
1401
1402(define-public python-discovery
1403 (package
1404 (name "python-discovery")
1405 (version "1.2.1")
1406 (source
1407 (origin
1408 (method git-fetch)
1409 (uri (git-reference
1410 (url "https://github.com/tox-dev/python-discovery")
1411 (commit version)))
1412 (file-name (git-file-name name version))
1413 (sha256
1414 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1415 (build-system pyproject-build-system)
1416 (arguments
1417 (list
1418 #:test-flags
1419 ;; assert []
1420 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1421 (native-inputs
1422 (list python-pytest
1423 python-pytest-mock
1424 python-hatchling
1425 python-hatch-vcs))
1426 (propagated-inputs
1427 (list python-filelock
1428 python-platformdirs))
1429 (home-page "https://github.com/tox-dev/python-discovery")
1430 (synopsis "Python interpreter discovery")
1431 (description
1432 "@code{python-discovery} is a library for discovering Python interpreters
1433installed on the current machine which may have multiple Python versions from
1434system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1435Windows registry (PEP 514). This library finds the right one.")
1436 (license license:expat)))
1437
1438(define-public python-distance
1439 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1440 (revision "0"))
1441 (package
1442 (name "python-distance")
1443 (version (git-version "0.1.3" revision commit))
1444 (source
1445 (origin
1446 (method git-fetch)
1447 (uri (git-reference
1448 (url "https://github.com/doukremt/distance")
1449 (commit commit)))
1450 (file-name (git-file-name name version))
1451 (sha256
1452 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1453 (build-system pyproject-build-system)
1454 (arguments
1455 (list #:test-backend #~'custom
1456 #:test-flags #~(list "tests/tests.py")))
1457 (native-inputs (list python-setuptools))
1458 (home-page "https://github.com/doukremt/distance")
1459 (synopsis "Utilities for comparing sequences")
1460 (description
1461 "This package provides helpers for computing similarities between
1462arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1463Sorensen distance, plus some bonuses. All distance computations are
1464implemented in pure Python, and most of them are also implemented in C.")
1465 (license license:gpl2+))))
1466
1467(define-public python-docopt-ng
1468 (package
1469 (name "python-docopt-ng")
1470 (version "0.9.0")
1471 (source
1472 (origin
1473 (method git-fetch)
1474 (uri (git-reference
1475 (url "https://github.com/jazzband/docopt-ng")
1476 (commit version)))
1477 (file-name (git-file-name name version))
1478 (sha256
1479 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1480 (build-system pyproject-build-system)
1481 (native-inputs
1482 (list python-pdm-backend
1483 python-pytest-8))
1484 (home-page "https://github.com/jazzband/docopt-ng")
1485 (synopsis "Humane command line arguments parser")
1486 (description
1487 "This package provides Jazzband-maintained fork of docopt, the humane
1488command line arguments parser.")
1489 (license license:expat)))
1490
1491(define-public python-doi
1492 (package
1493 (name "python-doi")
1494 (version "0.2.0")
1495 (source
1496 (origin
1497 (method url-fetch)
1498 (uri (pypi-uri "python-doi" version))
1499 (sha256
1500 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1501 (build-system pyproject-build-system)
1502 (arguments
1503 (list #:test-flags
1504 #~(list "-vv"
1505 (string-append "-k not (test_validate_doi "
1506 "or test_get_real_url_from_doi)"))))
1507 (native-inputs
1508 (list python-pytest
1509 python-pytest-xdist
1510 python-setuptools
1511 python-sphinx
1512 python-sphinx-autobuild
1513 python-sphinx-rtd-theme))
1514 (home-page "https://github.com/papis/python-doi")
1515 (synopsis "Python package to work with Document Object Identifier (doi)")
1516 (description
1517 "Python package to work with Document Object Identifier (doi).")
1518 (license license:gpl3)))
1519
1520(define-public python-domdf-python-tools
1521 (package
1522 (name "python-domdf-python-tools")
1523 (version "3.10.0")
1524 (source
1525 (origin
1526 (method url-fetch)
1527 (uri (pypi-uri "domdf_python_tools" version))
1528 (sha256
1529 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1530 (build-system pyproject-build-system)
1531 (native-inputs (list python-hatch-requirements-txt))
1532 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1533 (propagated-inputs
1534 (list python-natsort
1535 python-typing-extensions))
1536 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1537 (synopsis "Helpful functions for Python")
1538 (description
1539 "This package provide helpful functions for Python's testing and
1540packaging tasks.")
1541 (license license:expat)))
1542
1543(define-public python-donfig
1544 (package
1545 (name "python-donfig")
1546 (version "0.8.1.post1")
1547 (source
1548 (origin
1549 (method git-fetch)
1550 (uri (git-reference
1551 (url "https://github.com/pytroll/donfig")
1552 (commit (string-append "v" version))))
1553 (file-name (git-file-name name version))
1554 (sha256
1555 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1556 (build-system pyproject-build-system)
1557 (native-inputs
1558 (list python-cloudpickle
1559 python-pytest
1560 python-setuptools
1561 python-versioneer))
1562 (propagated-inputs
1563 (list python-pyyaml))
1564 (home-page "https://github.com/pytroll/donfig")
1565 (synopsis "Python package for configuring a python package")
1566 (description
1567 "Donfig is a Python library meant to make configuration easier for other
1568python packages. Donfig can be configured programmatically, by environment
1569variables, or from YAML files in standard locations. The below examples show
1570the basics of using donfig.")
1571 (license license:expat)))
1572
1573(define-public python-duet
1574 (package
1575 (name "python-duet")
1576 (version "0.2.9")
1577 (source
1578 (origin
1579 (method git-fetch)
1580 (uri (git-reference
1581 (url "https://github.com/google/duet")
1582 (commit (string-append "v" version))))
1583 (file-name (git-file-name name version))
1584 (sha256
1585 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1586 (build-system pyproject-build-system)
1587 (native-inputs (list python-pytest python-setuptools))
1588 (home-page "https://github.com/google/duet")
1589 (synopsis "Simple future-based async library for Python")
1590 (description
1591 "This package provides a simple @code{Future}-based async library for
1592Python. Duet uses a structured concurrency approach to async programming,
1593relying on the @code{Future} interface for parallelism. Duet also provides
1594a way to run async/await coroutines around those @code{Future}s. Unlike most
1595async libraries, duet is re-entrant.")
1596 (license license:asl2.0)))
1597
1598(define-public python-envs
1599 (package
1600 (name "python-envs")
1601 (version "1.4")
1602 (source
1603 (origin
1604 (method url-fetch)
1605 (uri (pypi-uri "envs" version))
1606 (sha256
1607 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1608 (build-system pyproject-build-system)
1609 (arguments
1610 (list #:test-backend #~'unittest))
1611 (native-inputs
1612 (list python-packaging python-poetry-core))
1613 (propagated-inputs
1614 (list python-click python-jinja2 python-terminaltables))
1615 (home-page "https://github.com/capless/envs")
1616 (synopsis "Easy access of environment variables from Python")
1617 (description
1618 "This package implements a functionality to access of environment
1619variables from Python with support for strings, booleans, list, tuples, and
1620dicts.")
1621 (license license:asl2.0)))
1622
1623(define-public python-exitcode
1624 (package
1625 (name "python-exitcode")
1626 (version "0.1.0")
1627 (source
1628 (origin
1629 (method url-fetch)
1630 (uri (pypi-uri "exitcode" version))
1631 (sha256
1632 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1633 (build-system pyproject-build-system)
1634 (arguments
1635 (list #:tests? #f)) ; no tests in PyPI or Git
1636 (native-inputs
1637 (list python-poetry-core
1638 python-setuptools))
1639 (home-page "https://github.com/rumpelsepp/exitcode")
1640 (synopsis "Preferred system exit codes as defined by sysexits.h")
1641 (description
1642 "This package implements a preferred system exit codes as defined by
1643@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1644Rust's @url{https://docs.rs/exitcode, exitcode}.")
1645 (license license:expat)))
1646
1647(define-public python-exrex
1648 (package
1649 (name "python-exrex")
1650 (version "0.12.0")
1651 (source
1652 (origin
1653 (method git-fetch)
1654 (uri (git-reference
1655 (url "https://github.com/asciimoo/exrex")
1656 (commit (string-append "v" version))))
1657 (file-name (git-file-name name version))
1658 (sha256
1659 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1660 (build-system pyproject-build-system)
1661 (arguments (list #:test-backend #~'custom
1662 #:test-flags #~'("tests.py")))
1663 (native-inputs (list python-setuptools))
1664 (home-page "https://github.com/asciimoo/exrex")
1665 (synopsis "Irregular methods for regular expressions")
1666 (description
1667 "Exrex is a command line tool and Python module that generates all,
1668or random, matching strings to a given regular expression.")
1669 (license license:agpl3+)))
1670
1671(define-public python-extra-platforms
1672 (package
1673 (name "python-extra-platforms")
1674 (version "13.6.0")
1675 (source
1676 (origin
1677 (method git-fetch)
1678 (uri (git-reference
1679 (url "https://github.com/kdeldycke/extra-platforms")
1680 (commit (string-append "v" version))))
1681 (file-name (git-file-name name version))
1682 (sha256
1683 (base32 "0h9bg8dn5zzcm0nnn5wvnc7yrwlglg5yvbxfzwkg4vm123l72zsa"))))
1684 (build-system pyproject-build-system)
1685 (arguments
1686 (list
1687 #:build-backend "setuptools.build_meta"
1688 ;; Skip the network tests.
1689 #:test-flags #~(list "-m" "not network")))
1690 (native-inputs
1691 (list python-pytest
1692 python-setuptools))
1693 (home-page "https://kdeldycke.github.io/extra-platforms/")
1694 (synopsis "Detection of architectures, platforms, and OS families")
1695 (description
1696 "Extra Platforms detects and identifies operating systems, platforms,
1697architectures, and OS families. It groups them by family for conditional
1698logic in cross-platform applications.")
1699 (license license:asl2.0)))
1700
1701(define-public python-ezdxf
1702 (package
1703 (name "python-ezdxf")
1704 (version "1.3.5")
1705 (source
1706 (origin
1707 (method git-fetch)
1708 (uri (git-reference
1709 (url "https://github.com/mozman/ezdxf")
1710 (commit (string-append "v" version))))
1711 (sha256
1712 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1713 (build-system pyproject-build-system)
1714 (native-inputs (list python-cython python-pillow python-pytest
1715 python-setuptools unzip))
1716 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1717 python-typing-extensions))
1718 (home-page "https://ezdxf.mozman.at/")
1719 (synopsis "Python library to read and write DXF drawings")
1720 (description "ezdxf is a Python package to create new DXF files and
1721read/modify/write existing DXF files.")
1722 (license license:expat)))
1723
1724(define-public python-fastnumbers
1725 (package
1726 (name "python-fastnumbers")
1727 (version "5.1.1")
1728 (source
1729 (origin
1730 (method url-fetch)
1731 (uri (pypi-uri "fastnumbers" version))
1732 (sha256
1733 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1734 (build-system pyproject-build-system)
1735 (native-inputs
1736 (list python-numpy
1737 python-pytest
1738 python-setuptools
1739 python-setuptools-scm))
1740 (home-page "https://github.com/SethMMorton/fastnumbers")
1741 (synopsis "Super-fast and clean conversions to numbers")
1742 (description
1743 "This package provides provides drop-in replacements for the Python
1744built-in @code{int} and @code{float} that are on par or faster with the Python
1745equivalents.")
1746 (license license:expat)))
1747
1748(define-public python-findpython
1749 (package
1750 (name "python-findpython")
1751 (version "0.7.0")
1752 (source
1753 (origin
1754 (method url-fetch)
1755 (uri (pypi-uri "findpython" version))
1756 (sha256
1757 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1758 (build-system pyproject-build-system)
1759 (native-inputs
1760 (list python-pdm-backend
1761 python-pytest))
1762 (propagated-inputs
1763 (list python-packaging
1764 python-platformdirs))
1765 (home-page "https://github.com/frostming/findpython")
1766 (synopsis "Find Python versions the system")
1767 (description
1768 "This package provides a utility to find Python versions on the current
1769system.")
1770 (license license:expat)))
1771
1772(define-public python-flexcache
1773 (package
1774 (name "python-flexcache")
1775 (version "0.3")
1776 (source
1777 (origin
1778 (method git-fetch)
1779 (uri (git-reference
1780 (url "https://github.com/hgrecco/flexcache")
1781 (commit version)))
1782 (file-name (git-file-name name version))
1783 (sha256
1784 (base32 "08b1i79q6gxcn6c5gkgscwjnzwlwaaz9vmlgrr7z9kbindxx61ih"))))
1785 (build-system pyproject-build-system)
1786 (native-inputs
1787 (list python-pytest
1788 python-setuptools
1789 python-setuptools-scm))
1790 (propagated-inputs
1791 (list python-typing-extensions))
1792 (home-page "https://github.com/hgrecco/flexcache")
1793 (synopsis "Caching transformed versions of a source object")
1794 (description
1795 "This package implements a functionality to cache on disk the result of
1796expensive calculations. It was started as part of
1797@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1798 (license license:bsd-3)))
1799
1800(define-public python-flexparser
1801 (package
1802 (name "python-flexparser")
1803 (version "0.4")
1804 (source
1805 (origin
1806 (method git-fetch)
1807 (uri (git-reference
1808 (url "https://github.com/hgrecco/flexparser")
1809 (commit version)))
1810 (file-name (git-file-name name version))
1811 (sha256
1812 (base32 "1aj6b2a5w0z814x4gr8z4lmpf4ivp41gikx998lkk7rbdgh2kryh"))))
1813 (build-system pyproject-build-system)
1814 (native-inputs
1815 (list python-pytest
1816 python-setuptools
1817 python-setuptools-scm))
1818 (propagated-inputs
1819 (list python-typing-extensions))
1820 (home-page "https://github.com/hgrecco/flexparser")
1821 (synopsis "Parsing made fun ... using typing")
1822 (description "This project provides a typed parser. It was started as
1823part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1824package. ")
1825 (license license:bsd-3)))
1826
1827(define-public python-fortranformat
1828 (package
1829 (name "python-fortranformat")
1830 (version "2.0.3")
1831 (source
1832 (origin
1833 (method git-fetch)
1834 (uri (git-reference
1835 (url "https://github.com/brendanarnold/py-fortranformat")
1836 (commit (string-append "v" version))))
1837 (file-name (git-file-name name version))
1838 (sha256
1839 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1840 (build-system pyproject-build-system)
1841 (native-inputs
1842 (list python-poetry-core
1843 python-pytest))
1844 (home-page "https://github.com/brendanarnold/py-fortranformat")
1845 (synopsis "FORTRAN format interpreter for Python")
1846 (description
1847 "This package mimics FORTRAN textual IO in Python - generates text from a
1848Python list of variables or will read a line of text into Python variables
1849according to the FORTRAN format statement passed.")
1850 (license license:expat)))
1851
1852(define-public python-gest-api
1853 (package
1854 (name "python-gest-api")
1855 (version "0.1")
1856 (source
1857 (origin
1858 (method url-fetch)
1859 (uri (pypi-uri "gest_api" version))
1860 (sha256
1861 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1862 (build-system pyproject-build-system)
1863 (native-inputs
1864 (list python-pytest
1865 python-setuptools))
1866 (propagated-inputs
1867 (list python-pydantic))
1868 (home-page "https://github.com/campa-consortium/gest-api")
1869 (synopsis "Standardization for generators")
1870 (description
1871 "This package provides a standard for generating test points and
1872exchanging variables, objectives, and constraints in optimization problems.
1873
1874It is an effort to standardize the interface of the generators in optimization
1875libraries such as:
1876@itemize
1877@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1878high-level optimization in Python
1879@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1880scale, powered by @code{libEnsemble}
1881@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1882toolkit for coordinating asynchronous and dynamic ensembles of calculations
1883@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1884and execution of large, black-box optimization problems
1885@end itemize")
1886 (license license:bsd-3)))
1887
1888(define-public python-grapheme
1889 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1890 ;; branch.
1891 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1892 (revision "0"))
1893 (package
1894 (name "python-grapheme")
1895 (version (git-version "0.6.0" revision commit))
1896 (source
1897 (origin
1898 (method git-fetch)
1899 (uri (git-reference
1900 (url "https://github.com/alvinlindstam/grapheme")
1901 (commit commit)))
1902 (file-name (git-file-name name version))
1903 (sha256
1904 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1905 (build-system pyproject-build-system)
1906 (native-inputs
1907 (list python-pytest
1908 python-setuptools))
1909 (home-page "https://github.com/alvinlindstam/grapheme")
1910 (synopsis "Unicode grapheme helpers")
1911 (description
1912 "This package provides a functionality for working with user perceived
1913characters. More specifically, string manipulation and calculation functions
1914for working with grapheme cluster groups (graphemes) as defined by the
1915@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1916 (license license:expat))))
1917
1918(define-public python-halo
1919 (package
1920 (name "python-halo")
1921 (version "0.0.31")
1922 (source
1923 (origin
1924 (method url-fetch)
1925 (uri (pypi-uri "halo" version))
1926 (sha256
1927 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1928 (build-system pyproject-build-system)
1929 (arguments
1930 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1931 (native-inputs
1932 (list python-setuptools))
1933 (propagated-inputs
1934 (list python-colorama
1935 python-log-symbols
1936 python-six
1937 python-spinners
1938 python-termcolor))
1939 (home-page "https://github.com/manrajgrover/halo")
1940 (synopsis "Python library to display graphical spinners in the terminal")
1941 (description
1942 "Halo is a Python library to display graphical spinners in the terminal.
1943It also supports IPython/Jupyter.")
1944 (license license:expat)))
1945
1946(define-public python-hatch-argparse-manpage
1947 (package
1948 (name "python-hatch-argparse-manpage")
1949 (version "1.0.0")
1950 (source
1951 (origin
1952 (method git-fetch)
1953 (uri (git-reference
1954 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1955 (commit (string-append "v" version))))
1956 (file-name (git-file-name name version))
1957 (sha256
1958 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
1959 (build-system pyproject-build-system)
1960 (arguments (list #:tests? #f)) ; No tests upstream.
1961 (native-inputs (list python-hatchling))
1962 (propagated-inputs (list python-argparse-manpage python-rich))
1963 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1964 (synopsis "Hatch build hook plugin to generate manual pages")
1965 (description
1966 "This package provides a build hook plugin for Hatch to automatically
1967 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1968by Pavel Raiskup.")
1969 (license license:gpl3+)))
1970
1971(define-public python-hatch-gettext
1972 (package
1973 (name "python-hatch-gettext")
1974 (version "1.1.0")
1975 (source
1976 (origin
1977 (method git-fetch)
1978 (uri (git-reference
1979 (url "https://github.com/damonlynch/hatch-gettext")
1980 (commit (string-append "v" version))))
1981 (file-name (git-file-name name version))
1982 (sha256
1983 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1984 (build-system pyproject-build-system)
1985 (arguments (list #:tests? #f)) ; No tests upstream.
1986 (native-inputs (list python-hatchling))
1987 (propagated-inputs (list python-rich))
1988 (home-page "https://github.com/damonlynch/hatch-gettext")
1989 (synopsis "Hatch build hook plugin for GNU gettext")
1990 (description
1991 "This package provides a build hook plugin for Hatch that compiles
1992 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1993 (license license:gpl3+)))
1994
1995(define-public python-hatch-nodejs-version
1996 (package
1997 (name "python-hatch-nodejs-version")
1998 (version "0.4.0")
1999 (source
2000 (origin
2001 (method git-fetch)
2002 (uri (git-reference
2003 (url "https://github.com/agoose77/hatch-nodejs-version")
2004 (commit (string-append "v" version))))
2005 (file-name (git-file-name name version))
2006 (sha256
2007 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
2008 (build-system pyproject-build-system)
2009 (propagated-inputs (list python-hatchling))
2010 (native-inputs (list python-hatchling python-pytest))
2011 (home-page "https://github.com/agoose77/hatch-nodejs-version")
2012 (synopsis "Hatch plugin for versioning from a package.json file")
2013 (description "This package provides a hatch plugin for fetching a version
2014from a @code{package.json} file.")
2015 (license license:expat)))
2016
2017(define-public python-hatch-regex-commit
2018 (package
2019 (name "python-hatch-regex-commit")
2020 (version "0.0.4")
2021 (source
2022 (origin
2023 (method git-fetch)
2024 (uri (git-reference
2025 (url "https://github.com/frankie567/hatch-regex-commit")
2026 (commit (string-append "v" version))))
2027 (file-name (git-file-name name version))
2028 (sha256
2029 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
2030 (build-system pyproject-build-system)
2031 (arguments (list #:tests? #f)) ;test directory is empty
2032 (propagated-inputs (list python-hatchling))
2033 (native-inputs (list python-hatchling))
2034 (home-page "https://github.com/frankie567/hatch-regex-commit")
2035 (synopsis "Hatch plugin to create a commit and tag when bumping version")
2036 (description
2037 "This provides a plugin for Hatch that automatically creates a Git commit
2038and tag after version bumping.")
2039 (license license:expat)))
2040
2041;; TODO: Move to ci or task-runners, see:
2042;; <https://codeberg.org/guix/guix/issues/3096>.
2043(define-public python-huey
2044 (package
2045 (name "python-huey")
2046 (version "2.5.3")
2047 (source
2048 (origin
2049 (method git-fetch)
2050 (uri (git-reference
2051 (url "https://github.com/coleifer/huey")
2052 (commit version)))
2053 (file-name (git-file-name name version))
2054 (sha256
2055 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
2056 (build-system pyproject-build-system)
2057 (arguments
2058 (list
2059 #:phases
2060 #~(modify-phases %standard-phases
2061 (add-after 'unpack 'remove-which
2062 (lambda _
2063 (substitute* "huey/tests/test_kt_huey.py"
2064 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
2065 "has_ktserver = False"))))
2066 (replace 'check
2067 (lambda* (#:key tests? #:allow-other-keys)
2068 (when tests?
2069 (spawn "redis-server" '("redis-server"))
2070 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
2071 (native-inputs (list python-setuptools redis tzdata-for-tests))
2072 (propagated-inputs (list python-redis))
2073 (home-page "https://huey.readthedocs.io")
2074 (synopsis "Lightweight task queue for Python")
2075 (description
2076 "Huey is a lightweight task queue for Python applications. Huey
2077supports:
2078@itemize
2079@item Redis, SQLite, file-system, or in-memory storage
2080@item multi-process, multi-thread or greenlet task execution models
2081@item scheduling tasks to execute at a given time, or after a given delay
2082@item scheduling recurring tasks, like a crontab
2083@item automatically retrying tasks that fail
2084@item task prioritization
2085@item task result storage
2086@item task expiration
2087@item task locking
2088@item task pipelines and chains
2089@end itemize")
2090 (license license:expat)))
2091
2092(define-public python-id
2093 (package
2094 (name "python-id")
2095 (version "1.5.0")
2096 (source
2097 (origin
2098 (method url-fetch)
2099 (uri (pypi-uri "id" version))
2100 (sha256
2101 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
2102 (build-system pyproject-build-system)
2103 (native-inputs
2104 (list python-flit-core
2105 python-pretend
2106 python-pytest))
2107 (propagated-inputs
2108 (list python-requests))
2109 (home-page "https://github.com/di/id")
2110 (synopsis "Tool for generating OIDC identities")
2111 (description
2112 "This package provides a tool for generating @code{OIDC, OpenID Connect}
2113identities.")
2114 (license license:asl2.0)))
2115
2116(define-public python-iniparse
2117 (package
2118 (name "python-iniparse")
2119 (version "0.5.1")
2120 (source
2121 (origin
2122 (method git-fetch)
2123 (uri (git-reference
2124 (url "https://github.com/candlepin/python-iniparse")
2125 (commit version)))
2126 (file-name (git-file-name name version))
2127 (sha256
2128 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
2129 (build-system pyproject-build-system)
2130 (arguments
2131 (list
2132 #:test-backend #~'custom
2133 #:test-flags #~(list "runtests.py")
2134 #:phases
2135 #~(modify-phases %standard-phases
2136 (add-before 'check 'disable-tests
2137 (lambda _
2138 ;; XXX: Three tests failed to compare lists.
2139 (substitute* "tests/test_compat.py"
2140 (("test_read_returns_file_list")
2141 "disabled_test_read_returns_file_list")))))))
2142 (native-inputs
2143 (list python-setuptools))
2144 (home-page "https://github.com/candlepin/python-iniparse")
2145 (synopsis "Accessing and Modifying INI files")
2146 (description
2147 "iniparse is a INI parser for Python which is:
2148@itemize
2149@item Compatible with ConfigParser: Backward compatible implementations of
2150ConfigParser, RawConfigParser, and SafeConfigParser are included that are
2151API-compatible with the Python standard library.
2152@item Preserves structure of INI files: Order of sections & options,
2153indentation, comments, and blank lines are preserved as far as possible when
2154data is updated.
2155@item More convenient: Values can be accessed using dotted notation
2156(@code{cfg.user.name}), or using container syntax
2157(@code{cfg['user']['name']}).
2158@end itemize")
2159 (license license:expat)))
2160
2161(define-public python-inotify
2162 (package
2163 (name "python-inotify")
2164 (version "0.2.12")
2165 (source
2166 (origin
2167 (method git-fetch)
2168 (uri (git-reference
2169 (url "https://github.com/dsoprea/PyInotify")
2170 (commit version)))
2171 (file-name (git-file-name name version))
2172 (sha256
2173 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2174 (build-system pyproject-build-system)
2175 (arguments
2176 (list
2177 #:phases
2178 #~(modify-phases %standard-phases
2179 (add-after 'unpack 'fix-requirements
2180 (lambda _
2181 (substitute* "inotify/resources/requirements.txt"
2182 (("build")
2183 "")))))))
2184 (native-inputs (list python-pytest python-setuptools))
2185 (propagated-inputs (list python-pyasyncore))
2186 (home-page "https://github.com/dsoprea/PyInotify")
2187 (synopsis "Linux filesystem activity monitor library for Python")
2188 (description
2189 "This package provides an efficient and elegant inotify (Linux filesystem
2190activity monitor) library for Python.")
2191 (license license:gpl2)))
2192
2193(define-public python-intervaltree
2194 (package
2195 (name "python-intervaltree")
2196 (version "3.1.0")
2197 (source
2198 (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "intervaltree" version))
2201 (sha256
2202 (base32
2203 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2204 (build-system pyproject-build-system)
2205 (arguments
2206 `(#:phases
2207 (modify-phases %standard-phases
2208 ;; pytest seems to have a check to make sure the user is testing
2209 ;; their checked-out code and not an installed, potentially
2210 ;; out-of-date copy. This is harmless here, since we just installed
2211 ;; the package, so we disable the check to avoid skipping tests
2212 ;; entirely.
2213 (add-before 'check 'import-mismatch-error-workaround
2214 (lambda _
2215 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2216 #t)))))
2217 (propagated-inputs
2218 (list python-sortedcontainers))
2219 (native-inputs
2220 (list python-setuptools python-pytest))
2221 (home-page "https://github.com/chaimleib/intervaltree")
2222 (synopsis "Editable interval tree data structure")
2223 (description
2224 "This package provides a mutable, self-balancing interval tree
2225implementation for Python. Queries may be by point, by range overlap, or by
2226range envelopment. This library was designed to allow tagging text and time
2227intervals, where the intervals include the lower bound but not the upper
2228bound.")
2229 (license license:asl2.0)))
2230
2231(define-public python-jschon
2232 (package
2233 (name "python-jschon")
2234 (version "0.11.1")
2235 (source
2236 (origin
2237 (method git-fetch)
2238 (uri (git-reference
2239 (url "https://github.com/marksparkza/jschon/")
2240 (commit (string-append "v" version))
2241 (recursive? #t))) ;required for tests
2242 (sha256
2243 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2244 (file-name (git-file-name name version))))
2245 (build-system pyproject-build-system)
2246 (propagated-inputs
2247 (list python-rfc3986))
2248 (native-inputs
2249 (list python-coverage
2250 python-hypothesis
2251 python-pytest
2252 python-pytest-benchmark
2253 python-pytest-httpserver
2254 python-requests
2255 python-setuptools))
2256 (home-page "https://jschon.readthedocs.io/")
2257 (synopsis "Object-oriented JSON Schema implementation for Python")
2258 (description
2259 "This package provides a JSON toolkit for Python developers.")
2260 (license license:expat)))
2261
2262(define-public python-jsonpath-ng
2263 (package
2264 (name "python-jsonpath-ng")
2265 (version "1.7.0" )
2266 (source
2267 (origin
2268 (method git-fetch)
2269 (uri (git-reference
2270 (url "https://github.com/h2non/jsonpath-ng")
2271 (commit (string-append "v" version))))
2272 (file-name (git-file-name name version))
2273 (sha256
2274 (base32 "0z0qm5sgzal0qzml2fmc9h5nim8m3x6sz55gqhcd9c2jrq8jmwmi"))))
2275 (build-system pyproject-build-system)
2276 (native-inputs
2277 (list python-pytest
2278 python-setuptools))
2279 (propagated-inputs
2280 (list python-ply))
2281 (home-page "https://github.com/h2non/jsonpath-ng")
2282 (synopsis "JSONPath Next-Generation")
2283 (description
2284 "This package provides a final implementation of @code{JSONPath} for
2285Python that aims to be standard compliant, including arithmetic and binary
2286comparison operators, as defined in the original
2287@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2288 (license license:asl2.0)))
2289
2290(define-public python-json-log-formatter
2291 (package
2292 (name "python-json-log-formatter")
2293 (version "1.1.1")
2294 (source
2295 (origin
2296 (method git-fetch)
2297 (uri (git-reference
2298 (url "https://github.com/marselester/json-log-formatter")
2299 (commit (string-append "v" version))))
2300 (file-name (git-file-name name version))
2301 (sha256
2302 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2303 (build-system pyproject-build-system)
2304 (arguments
2305 (list
2306 #:phases
2307 #~(modify-phases %standard-phases
2308 (replace 'check
2309 (lambda* (#:key tests? #:allow-other-keys)
2310 (when tests?
2311 (invoke "pytest" "-s" "tests.py")))))))
2312 (native-inputs (list python-django
2313 python-pytest
2314 python-setuptools
2315 python-simplejson
2316 python-ujson
2317 python-wheel))
2318 (home-page "https://github.com/marselester/json-log-formatter")
2319 (synopsis "JSON log formatter")
2320 (description "The library helps you to store logs in JSON format.")
2321 (license license:expat)))
2322
2323(define-public python-keeper-secrets-manager-core
2324 ;; released from a monorepo with other packages following various versioning
2325 ;; schemes. This commit was selected because some failing tests were fixed
2326 ;; since the most recent release of the Python SDK packages.
2327 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2328 (revision "0"))
2329 (package
2330 (name "python-keeper-secrets-manager-core")
2331 (version (git-version "17.0.0" revision commit))
2332 (source
2333 (origin
2334 (method git-fetch)
2335 (uri (git-reference
2336 (url "https://github.com/Keeper-Security/secrets-manager")
2337 (commit commit)))
2338 (file-name (git-file-name name version))
2339 (sha256
2340 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2341 (build-system pyproject-build-system)
2342 (arguments
2343 (list
2344 #:phases
2345 #~(modify-phases %standard-phases
2346 (add-after 'unpack 'chdir
2347 (lambda _
2348 (chdir "sdk/python/core"))))))
2349 (propagated-inputs
2350 (list python-cryptography
2351 python-importlib-metadata
2352 python-requests))
2353 (native-inputs
2354 (list python-pytest
2355 python-setuptools))
2356 (home-page "https://github.com/Keeper-Security/secrets-manager")
2357 (synopsis "Keeper Secrets Manager for Python SDK")
2358 (description
2359 "The Keeper Secrets Manager Python SDK provides access to
2360@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2361Management} services.")
2362 (license license:expat))))
2363
2364(define-public python-keeper-secrets-manager-helper
2365 ;; released alongside keeper-secrets-manager-core, but with a different
2366 ;; versioning scheme.
2367 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2368 (revision "0"))
2369 (package
2370 (name "python-keeper-secrets-manager-helper")
2371 (version (git-version "1.0.6" revision commit))
2372 (source
2373 (origin
2374 (method git-fetch)
2375 (uri (git-reference
2376 (url "https://github.com/Keeper-Security/secrets-manager")
2377 (commit commit)))
2378 (file-name (git-file-name name version))
2379 (sha256
2380 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2381 (build-system pyproject-build-system)
2382 (arguments
2383 (list
2384 #:phases
2385 #~(modify-phases %standard-phases
2386 (add-after 'unpack 'chdir
2387 (lambda _
2388 (chdir "sdk/python/helper"))))))
2389 (propagated-inputs
2390 (list python-iso8601
2391 python-keeper-secrets-manager-core
2392 python-pyyaml))
2393 (native-inputs
2394 (list python-pytest
2395 python-setuptools))
2396 (home-page "https://github.com/Keeper-Security/secrets-manager")
2397 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2398 (description
2399 "Keeper Secrets Manager SDK helper is for creating and managing secret
2400records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2401 (license license:expat))))
2402
2403(define-public python-language-data
2404 (package
2405 (name "python-language-data")
2406 (version "1.3.0")
2407 (source
2408 (origin
2409 (method url-fetch)
2410 (uri (pypi-uri "language_data" version))
2411 (sha256
2412 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2413 (build-system pyproject-build-system)
2414 (native-inputs
2415 (list python-pytest
2416 python-setuptools
2417 python-setuptools-scm))
2418 (propagated-inputs
2419 (list python-marisa-trie))
2420 (home-page "https://github.com/georgkrause/language_data")
2421 (synopsis "Supplementary data about languages used by the langcodes module")
2422 (description
2423 "language_data is a supplement to the langcodes module, for working with
2424standardized codes for human languages. It stores the more bulky and
2425hard-to-index data about languages, particularly what they are named in
2426various languages.")
2427 (license license:expat)))
2428
2429(define-public python-log-symbols
2430 (package
2431 (name "python-log-symbols")
2432 (version "0.0.14")
2433 (source
2434 (origin
2435 (method url-fetch)
2436 (uri (pypi-uri "log_symbols" version))
2437 (sha256
2438 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2439 (build-system pyproject-build-system)
2440 (arguments
2441 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2442 (native-inputs
2443 (list python-setuptools))
2444 (propagated-inputs
2445 (list python-colorama))
2446 (home-page "https://github.com/manrajgrover/py-log-symbols")
2447 (synopsis "Python library with graphical symbols for logging on the terminal")
2448 (description
2449 "This package provides a Python library with graphical symbols that can
2450be displayed on the terminal, with color if possible, for logging purposes.")
2451 (license license:expat)))
2452
2453(define-public python-lsprotocol
2454 (package
2455 (name "python-lsprotocol")
2456 (version "2025.0.0")
2457 (source
2458 (origin
2459 (method git-fetch)
2460 (uri (git-reference
2461 (url "https://github.com/microsoft/lsprotocol")
2462 (commit version)))
2463 (file-name (git-file-name name version))
2464 (sha256
2465 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2466 (build-system pyproject-build-system)
2467 (arguments
2468 (list
2469 #:tests? #f ;no tests for Python package
2470 #:phases
2471 #~(modify-phases %standard-phases
2472 (add-after 'unpack 'cd-packages-python
2473 (lambda _
2474 (chdir "packages/python"))))))
2475 (native-inputs
2476 (list python-flit-core))
2477 (propagated-inputs
2478 (list python-attrs
2479 python-cattrs))
2480 (home-page "https://github.com/microsoft/lsprotocol")
2481 (synopsis "Python types for Language Server Protocol.")
2482 (description
2483 "@code{lsprotocol} is a Python implementation of object types used in
2484the Language Server Protocol (LSP). This repository contains the code
2485generator and the generated types for LSP.")
2486 (license license:expat)))
2487
2488(define-public python-marisa-trie
2489 (package
2490 (name "python-marisa-trie")
2491 (version "1.3.1")
2492 (source
2493 (origin
2494 (method url-fetch)
2495 (uri (pypi-uri "marisa_trie" version))
2496 (sha256
2497 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2498 (build-system pyproject-build-system)
2499 (native-inputs
2500 (list python-cython
2501 python-hypothesis
2502 python-pytest
2503 python-readme-renderer
2504 python-setuptools))
2505 (home-page "https://github.com/pytries/marisa-trie")
2506 (synopsis "Static memory-efficient Trie-like structures for Python")
2507 (description
2508 "This package provides static memory-efficient and fast Trie-like structures
2509for Python.")
2510 (license license:expat)))
2511
2512(define-public python-materialyoucolor
2513 (package
2514 (name "python-materialyoucolor")
2515 (version "3.0.2")
2516 (source
2517 (origin
2518 (method git-fetch)
2519 (uri (git-reference
2520 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2521 (commit (string-append "v" version))))
2522 (file-name (git-file-name name version))
2523 (sha256
2524 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2525 (build-system pyproject-build-system)
2526 (arguments
2527 (list #:test-backend #~'custom
2528 #:test-flags #~(list "tests/test_all.py")))
2529 (propagated-inputs (list python-pillow))
2530 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2531 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2532 (synopsis "Material You color generation algorithms")
2533 (description
2534 "@code{python-materialyoucolor} provides a tool that generates harmonious
2535color palettes from the dominant colors of an image, based on the
2536@uref{https://m3.material.io/styles/color/system/overview, Material color
2537system}.")
2538 (license license:expat)))
2539
2540(define-public python-menuinst
2541 (package
2542 (name "python-menuinst")
2543 (version "2.4.1")
2544 (source
2545 (origin
2546 (method git-fetch)
2547 (uri (git-reference
2548 (url "https://github.com/conda/menuinst")
2549 (commit version)))
2550 (file-name (git-file-name name version))
2551 (sha256
2552 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2553 (build-system pyproject-build-system)
2554 (arguments
2555 (list
2556 #:tests? #f)) ;tests need conda
2557 (native-inputs
2558 (list python-setuptools
2559 python-setuptools-scm))
2560 (home-page "https://conda.github.io/menuinst/")
2561 (synopsis "Cross platform menu item installation")
2562 (description
2563 "This package provides cross platform menu item installation for conda
2564packages.")
2565 (license license:bsd-3)))
2566
2567(define-public python-multiplex
2568 (package
2569 (name "python-multiplex")
2570 (version "0.6.1")
2571 (source
2572 (origin
2573 (method git-fetch) ;no tests in PyPI archive
2574 (uri (git-reference
2575 (url "https://github.com/dankilman/multiplex")
2576 (commit version)))
2577 (file-name (git-file-name name version))
2578 (sha256
2579 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2580 (build-system pyproject-build-system)
2581 (native-inputs
2582 (list python-poetry-core
2583 python-pytest
2584 python-pytest-asyncio))
2585 (propagated-inputs
2586 (list python-aiofiles
2587 python-aiostream
2588 python-click
2589 python-easy-ansi-0.3
2590 python-pyte))
2591 (home-page "https://github.com/dankilman/multiplex")
2592 (synopsis "Parallel stream of outputs from multiple processes")
2593 (description
2594 "This package provides a functionality to view output of multiple
2595processes, in parallel, in the console, with an interactive TUI.")
2596 (license license:expat)))
2597
2598(define-public python-nrepl
2599 (package
2600 (name "python-nrepl")
2601 (version "0.3.4")
2602 (source
2603 (origin
2604 (method git-fetch)
2605 (uri (git-reference
2606 (url "https://git.sr.ht/~ngraves/nrepl-python")
2607 (commit version)))
2608 (file-name (git-file-name name version))
2609 (sha256
2610 (base32 "12fi4ilkslh9rg5dilqknrr6sm2rhs2v91xhyfi432f0dp5920lp"))))
2611 (build-system pyproject-build-system)
2612 (arguments
2613 (list
2614 #:test-flags
2615 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2616 (native-inputs
2617 (list python-flit-core
2618 python-pytest
2619 python-pytest-asyncio
2620 python-pytest-xdist))
2621 (propagated-inputs
2622 (list python-fastbencode
2623 python-gevent
2624 python-ipython))
2625 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2626 (synopsis "NREPL server for Python")
2627 (description
2628 "This package provides an implementation of the @url{https://nrepl.org,
2629NREPL} protocol for Python.")
2630 (license license:gpl3+)))
2631
2632(define-public python-num2words
2633 (package
2634 (name "python-num2words")
2635 (version "0.5.14")
2636 (source
2637 (origin
2638 (method git-fetch)
2639 (uri (git-reference
2640 (url "https://github.com/savoirfairelinux/num2words")
2641 (commit (string-append "v" version))))
2642 (file-name (git-file-name name version))
2643 (sha256
2644 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2645 (build-system pyproject-build-system)
2646 (arguments
2647 (list
2648 #:test-flags
2649 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2650 (native-inputs (list python-pytest python-setuptools))
2651 (propagated-inputs (list python-docopt))
2652 (home-page "https://github.com/savoirfairelinux/num2words")
2653 (synopsis "Convert numbers to words in multiple languages")
2654 (description
2655 "@code{num2words} is a library that converts numbers like 42 to words like
2656forty-two. It supports multiple languages, and can even generate ordinal
2657numbers like forty-second.")
2658 (license license:lgpl2.1)))
2659
2660(define-public python-orderly-set
2661 (package
2662 (name "python-orderly-set")
2663 (version "5.5.0")
2664 (source
2665 (origin
2666 (method url-fetch)
2667 (uri (pypi-uri "orderly_set" version))
2668 (sha256
2669 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2670 (build-system pyproject-build-system)
2671 (native-inputs (list python-flit-core python-pytest))
2672 (home-page "https://github.com/seperman/orderly-set")
2673 (synopsis "Multiple implementations of Ordered Set")
2674 (description "Orderly Set is a package containing multiple implementations
2675of Ordered Set.")
2676 (license license:expat)))
2677
2678(define-public python-packageurl
2679 (package
2680 (name "python-packageurl")
2681 (version "0.17.6")
2682 (source
2683 (origin
2684 (method git-fetch)
2685 (uri (git-reference
2686 (url "https://github.com/package-url/packageurl-python")
2687 (commit (string-append "v" version))))
2688 (file-name (git-file-name name version))
2689 (sha256
2690 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2691 (modules '((guix build utils)))
2692 ;; Remove bundled virtualenv and license files used only for
2693 ;; development; not needed at build or runtime.
2694 (snippet '(delete-file-recursively "thirdparty"))))
2695 (build-system pyproject-build-system)
2696 (arguments
2697 (list #:test-flags
2698 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2699 ;; submodule at import time; skip it when the submodule is absent.
2700 #~(list "--ignore=tests/test_purl_spec.py")))
2701 (native-inputs
2702 (list python-pytest
2703 python-setuptools))
2704 (home-page "https://www.packageurl.org")
2705 (synopsis "Package URL parser and builder")
2706 (description
2707 "This library parses and builds Package URLs (purls) as defined in the
2708purl specification. It provides a @code{PackageURL} class for creating,
2709parsing, and normalizing package URL strings across different package
2710management ecosystems.")
2711 (license license:expat)))
2712
2713(define-public python-pandocfilters
2714 (package
2715 (name "python-pandocfilters")
2716 (version "1.5.1")
2717 (source
2718 (origin
2719 (method url-fetch)
2720 (uri (pypi-uri "pandocfilters" version))
2721 (sha256
2722 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2723 (build-system pyproject-build-system)
2724 (arguments
2725 (list #:tests? #f)) ;require pandoc to run tests
2726 (native-inputs
2727 (list python-setuptools))
2728 (home-page "https://github.com/jgm/pandocfilters")
2729 (synopsis "Python module for writing Pandoc filters")
2730 (description "Pandoc is a powerful utility to transform various
2731input formats into a wide range of output formats. To alter the
2732exported output document, Pandoc allows the usage of filters, which
2733are pipes that read a JSON serialization of the Pandoc AST from stdin,
2734transform it in some way, and write it to stdout. It allows therefore
2735to alter the processing of Pandoc's supported input formats, for
2736instance one can add new syntax elements to markdown, etc.
2737
2738This package provides Python bindings.")
2739 (license license:bsd-3)))
2740
2741(define-public python-panflute
2742 (package
2743 (name "python-panflute")
2744 (version "2.3.1")
2745 (source
2746 (origin
2747 (method url-fetch)
2748 (uri (pypi-uri "panflute" version))
2749 (sha256
2750 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2751 (build-system pyproject-build-system)
2752 (arguments
2753 (list #:tests? #f)) ;require pandoc to run tests
2754 (native-inputs
2755 (list python-setuptools))
2756 (propagated-inputs
2757 (list python-click
2758 python-pyyaml))
2759 (home-page "http://scorreia.com/software/panflute/")
2760 (synopsis "Pythonic Pandoc filters")
2761 (description
2762 "Panflute is a Python package that makes Pandoc filters fun to write.
2763It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2764is heavily inspired.")
2765 (license license:bsd-3)))
2766
2767(define-public python-pastel
2768 (package
2769 (name "python-pastel")
2770 (version "0.2.1")
2771 (source
2772 (origin
2773 (method git-fetch)
2774 (uri (git-reference
2775 (url "https://github.com/sdispater/pastel")
2776 (commit version)))
2777 (file-name (git-file-name name version))
2778 (sha256
2779 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2780 (build-system pyproject-build-system)
2781 (arguments
2782 (list
2783 #:test-flags
2784 #~(list "pastel" "tests/")
2785 #:phases
2786 #~(modify-phases %standard-phases
2787 (add-after 'unpack 'use-poetry-core
2788 (lambda _
2789 ;; Patch to use the core poetry API.
2790 (substitute* "pyproject.toml"
2791 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2792 (native-inputs (list python-poetry-core python-pytest))
2793 (home-page "https://github.com/sdispater/pastel")
2794 (synopsis "Library to colorize strings in your terminal")
2795 (description
2796 "Pastel is a simple library to help you colorize strings in your
2797terminal.")
2798 (license license:expat)))
2799
2800(define-public python-pathlib-abc
2801 (package
2802 (name "python-pathlib-abc")
2803 (version "0.5.0")
2804 (source
2805 (origin
2806 (method url-fetch)
2807 (uri (pypi-uri "pathlib_abc" version))
2808 (sha256
2809 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2810 (build-system pyproject-build-system)
2811 (native-inputs (list python-pytest python-hatchling))
2812 (home-page "https://github.com/barneygale/pathlib-abc")
2813 (synopsis "Python base classes for rich path objects")
2814 (description
2815 "This package is a preview of pathlib functionality planned for a future
2816release of Python; specifically, it provides three ABCs that can be used to
2817implement path classes for non-local filesystems")
2818 (license license:psfl)))
2819
2820;; XXX: It's for [email protected], remove when no longer required.
2821(define-public python-pathlib-abc-for-python-pathy
2822 (hidden-package
2823 (package
2824 (inherit python-pathlib-abc)
2825 (version "0.1.1")
2826 (source
2827 (origin
2828 (method url-fetch)
2829 (uri (pypi-uri "pathlib_abc" version))
2830 (sha256
2831 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2832
2833(define-public python-pbs-installer
2834 (package
2835 (name "python-pbs-installer")
2836 (version "2025.09.18")
2837 (source
2838 (origin
2839 (method git-fetch)
2840 (uri (git-reference
2841 (url "https://github.com/frostming/pbs-installer")
2842 (commit version)))
2843 (file-name (git-file-name name version))
2844 (sha256
2845 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2846 (build-system pyproject-build-system)
2847 (arguments
2848 (list
2849 #:tests? #f ;no tests provided
2850 #:phases
2851 #~(modify-phases %standard-phases
2852 (add-before 'build 'set-version
2853 (lambda _
2854 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2855 (native-inputs
2856 (list python-pdm-backend
2857 python-pytest))
2858 (propagated-inputs
2859 (list python-httpx
2860 python-zstandard))
2861 (home-page "https://github.com/frostming/pbs-installer")
2862 (synopsis "Installer for Python Build Standalone")
2863 (description
2864 "This package implements an installer for
2865@url{https://github.com/astral-sh/python-build-standalone, Python Build
2866Standalone}.")
2867 (license license:expat)))
2868
2869(define-public python-phply
2870 (package
2871 (name "python-phply")
2872 (version "1.2.6")
2873 (source
2874 (origin
2875 (method url-fetch)
2876 (uri (pypi-uri "phply" version))
2877 (sha256
2878 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2879 (build-system pyproject-build-system)
2880 (native-inputs
2881 (list python-pytest
2882 python-setuptools))
2883 (propagated-inputs
2884 (list python-ply))
2885 (home-page "https://github.com/viraptor/phply")
2886 (synopsis "PHP parser written in Python using PLY")
2887 (description
2888 "@code{phply} is a parser for the PHP programming language written using
2889PLY,a Lex/YACC-style parser generator toolkit for Python.")
2890 (license license:bsd-3)))
2891
2892(define-public python-puccinialin
2893 (package
2894 (name "python-puccinialin")
2895 (version "0.1.5")
2896 (source
2897 (origin
2898 (method url-fetch)
2899 (uri (pypi-uri "puccinialin" version))
2900 (sha256
2901 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2902 (build-system pyproject-build-system)
2903 (arguments
2904 (list #:tests? #f)) ;no tests in PyPI or Git
2905 (native-inputs
2906 (list python-hatchling))
2907 (propagated-inputs
2908 (list python-httpx
2909 python-platformdirs
2910 python-tqdm))
2911 (home-page "https://github.com/konstin/puccinialin")
2912 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2913 (description
2914 "This tool helps to install Rust into a temporary directory, allowing
2915support of Rust-based Python builds. Cargo and rustc are installed into a
2916cache directory, to avoid modifying the host's environment, and further
2917activated using a set of environment variables.")
2918 (license (list license:expat license:asl2.0))))
2919
2920(define-public python-py010parser
2921 (package
2922 (name "python-py010parser")
2923 (version "0.1.18")
2924 (source
2925 (origin
2926 (method git-fetch)
2927 (uri (git-reference
2928 (url "https://github.com/d0c-s4vage/py010parser")
2929 (commit (string-append "v" version))))
2930 (file-name (git-file-name name version))
2931 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2932 (modules '((guix build utils)))
2933 (snippet #~(begin
2934 ;; Unbundle ply.
2935 (substitute* "requirements.txt"
2936 (("^six\\>.*") ""))
2937 (substitute* "setup.py"
2938 (("(packages += \\['py010parser').*\\]" all first)
2939 (string-append first "]")))
2940 (delete-file-recursively "py010parser/ply")
2941 (substitute* (find-files "py010parser" "\\.py$")
2942 ((" .*\\.ply\\>") " ply"))
2943 ;; Avoid regenerating the lex table.
2944 (substitute* '("py010parser/__init__.py"
2945 "py010parser/c_parser.py")
2946 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2947 (string-append open "False" close)))
2948 (substitute* '("py010parser/__init__.py"
2949 "setup.py")
2950 (("\\{\\{VERSION\\}\\}") #$version))
2951 (substitute* "setup.cfg"
2952 (("description-file") "description_file"))))))
2953 (build-system pyproject-build-system)
2954 (arguments (list #:test-backend #~'unittest
2955 #:test-flags #~'("discover" "tests")))
2956 (propagated-inputs (list python-regex python-ply))
2957 (native-inputs (list python-setuptools))
2958 (home-page "https://github.com/d0c-s4vage/py010parser")
2959 (synopsis "Parser of 010 editor's template")
2960 (description
2961 "@code{py010parser} is a Python library for parsing templates
2962for the Sweetscape 010 binary-format editor.")
2963 (license license:bsd-3)))
2964
2965(define-public python-pyasynchat
2966 (package
2967 (name "python-pyasynchat")
2968 (version "1.0.5")
2969 (source
2970 (origin
2971 (method git-fetch)
2972 (uri (git-reference
2973 (url "https://github.com/simonrob/pyasynchat")
2974 (commit (string-append "v" version))))
2975 (file-name (git-file-name name version))
2976 (sha256
2977 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2978 (build-system pyproject-build-system)
2979 (native-inputs
2980 (list python-pytest
2981 python-setuptools))
2982 (propagated-inputs
2983 (list python-pyasyncore))
2984 (home-page "https://github.com/simonrob/pyasynchat")
2985 (synopsis "Make asynchat available for Python 3.12 onwards")
2986 (description
2987 "This package contains the
2988@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2989found in Python versions prior to 3.12. It is provided so that existing code
2990relying on @code{import asynchat} is able to continue being used without
2991significant refactoring.")
2992 (license license:psfl)))
2993
2994(define-public python-pyasyncore
2995 (package
2996 (name "python-pyasyncore")
2997 (version "1.0.5")
2998 (source
2999 (origin
3000 (method git-fetch)
3001 (uri (git-reference
3002 (url "https://github.com/simonrob/pyasyncore")
3003 (commit (string-append "v" version))))
3004 (file-name (git-file-name name version))
3005 (sha256
3006 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
3007 (build-system pyproject-build-system)
3008 (native-inputs (list python-pytest python-setuptools))
3009 (home-page "https://github.com/simonrob/pyasyncore")
3010 (synopsis "Make asyncore available for Python 3.12 onwards")
3011 (description
3012 "This package contains the
3013@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
3014found in Python versions prior to 3.12. It is provided so that existing code
3015relying on @code{import asyncore} is able to continue being used without
3016significant refactoring.")
3017 (license license:psfl)))
3018
3019(define-public python-pyconify
3020 (package
3021 (name "python-pyconify")
3022 (version "0.2.1")
3023 (source
3024 (origin
3025 (method git-fetch)
3026 (uri (git-reference
3027 (url "https://github.com/pyapp-kit/pyconify")
3028 (commit (string-append "v" version))))
3029 (file-name (git-file-name name version))
3030 (sha256
3031 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
3032 (build-system pyproject-build-system)
3033 (arguments
3034 (list #:tests? #f)) ;require netwok access
3035 (native-inputs
3036 (list python-hatch-vcs
3037 python-hatchling))
3038 (propagated-inputs
3039 (list python-requests))
3040 (home-page "https://github.com/pyapp-kit/pyconify")
3041 (synopsis "Python wrapper for the Iconify API")
3042 (description
3043 "This packge provides a Python wrapper for the
3044@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
3045framework that includes 100+ icon sets with more than 100,000 icons from
3046FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
3047Emoji and many other open source icon sets.")
3048 (license license:bsd-3)))
3049
3050(define-public python-pygls
3051 (package
3052 (name "python-pygls")
3053 (version "2.0.0")
3054 (source
3055 (origin
3056 (method git-fetch)
3057 (uri (git-reference
3058 (url "https://github.com/openlawlibrary/pygls")
3059 (commit (string-append "v" version))))
3060 (file-name (git-file-name name version))
3061 (sha256
3062 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
3063 (build-system pyproject-build-system)
3064 ;; tests: 265 passed, 8 skipped
3065 (native-inputs
3066 (list python-pytest
3067 python-pytest-asyncio
3068 python-poetry-core))
3069 (propagated-inputs
3070 (list python-attrs
3071 python-cattrs
3072 python-lsprotocol))
3073 (home-page "https://github.com/openlawlibrary/pygls")
3074 (synopsis "Pythonic generic language server")
3075 (description
3076 "This package provides a pythonic generic language server (pronounced
3077like pie glass').")
3078 (license license:asl2.0)))
3079
3080(define-public python-pyls-spyder
3081 (package
3082 (name "python-pyls-spyder")
3083 (version "0.4.0")
3084 (source
3085 (origin
3086 (method git-fetch)
3087 (uri (git-reference
3088 (url "https://github.com/spyder-ide/pyls-spyder")
3089 (commit (string-append "v" version))))
3090 (file-name (git-file-name name version))
3091 (sha256
3092 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
3093 (build-system pyproject-build-system)
3094 (propagated-inputs (list python-lsp-server))
3095 (native-inputs (list python-pytest python-setuptools))
3096 (home-page "https://github.com/spyder-ide/pyls-spyder")
3097 (synopsis "Spyder extensions for @code{python-lsp-server}")
3098 (description "This package provides Spyder-specific extras for the
3099Language Server Protocol (LSP) on Python, such as document symbol searching
3100and others.")
3101 (license license:expat)))
3102
3103(define-public python-pylsp-rope
3104 (package
3105 (name "python-pylsp-rope")
3106 (version "0.1.17")
3107 (source
3108 (origin
3109 (method git-fetch)
3110 (uri (git-reference
3111 (url "https://github.com/python-rope/pylsp-rope")
3112 (commit version)))
3113 (file-name (git-file-name name version))
3114 (sha256
3115 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
3116 (build-system pyproject-build-system)
3117 (native-inputs
3118 (list python-pytest
3119 python-setuptools))
3120 (propagated-inputs
3121 (list python-lsp-server
3122 python-rope))
3123 (home-page "https://github.com/python-rope/pylsp-rope")
3124 (synopsis
3125 "Extended refactoring capabilities for Python LSP Server using Rope")
3126 (description
3127 "This plugs in to Python LSP Server, adding code actions that refactor
3128using Rope.")
3129 (license license:expat)))
3130
3131(define-public python-pypydispatcher
3132 (package
3133 (name "python-pypydispatcher")
3134 (version "2.1.2")
3135 (source
3136 (origin
3137 (method url-fetch)
3138 (uri (pypi-uri "PyPyDispatcher" version))
3139 (sha256
3140 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
3141 (build-system pyproject-build-system)
3142 (native-inputs
3143 (list python-pytest
3144 python-setuptools
3145 python-setuptools-scm))
3146 (home-page "https://github.com/scrapy/pypydispatcher")
3147 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
3148 (description
3149 "This package implements a functionality of pulti-producer-multi-consumer
3150signal dispatching mechanism. It's a fork of
3151http://pydispatcher.sourceforge.net/ with PyPy support.")
3152 (license license:bsd-3)))
3153
3154(define-public python-pyread-eagle
3155 (package
3156 (name "python-pyread-eagle")
3157 (version "1.0.3")
3158 (source
3159 (origin
3160 (method git-fetch)
3161 (uri (git-reference
3162 (url "https://github.com/kyleaoman/pyread_eagle")
3163 (commit version)))
3164 (file-name (git-file-name name version))
3165 (sha256
3166 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3167 (build-system pyproject-build-system)
3168 (arguments
3169 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3170 (list #:tests? #f))
3171 (native-inputs
3172 (list python-setuptools))
3173 (propagated-inputs
3174 (list python-h5py
3175 python-numpy))
3176 (home-page "https://github.com/kyleaoman/pyread_eagle")
3177 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3178 (description
3179 "This package provides a pure-python port of
3180@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3181 (license license:gpl3)))
3182
3183(define-public python-pyte
3184 (package
3185 (name "python-pyte")
3186 (version "0.8.2")
3187 (source
3188 (origin
3189 (method git-fetch)
3190 (uri (git-reference
3191 (url "https://github.com/selectel/pyte")
3192 (commit version)))
3193 (file-name (git-file-name name version))
3194 (sha256
3195 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3196 (build-system pyproject-build-system)
3197 (propagated-inputs (list python-wcwidth))
3198 (native-inputs (list python-pytest python-setuptools python-wheel))
3199 (home-page "https://pyte.readthedocs.io/")
3200 (synopsis "Simple VTXXX-compatible terminal emulator")
3201 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3202emulator. @var{VTxxx} stands for a series of video terminals, developed by
3203DEC between 1970 and 1995. The first and probably most famous one was the
3204VT100 terminal, which is now a de-facto standard for all virtual terminal
3205emulators.
3206
3207pyte is a fork of vt102, which was an incomplete pure Python implementation
3208of VT100 terminal.")
3209 (license license:lgpl3+)))
3210
3211(define-public python-pytokens
3212 (package
3213 (name "python-pytokens")
3214 (version "0.4.1")
3215 (source
3216 (origin
3217 (method git-fetch)
3218 (uri (git-reference
3219 (url "https://github.com/tusharsadhwani/pytokens")
3220 (commit version)))
3221 (file-name (git-file-name name version))
3222 (sha256
3223 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3224 (build-system pyproject-build-system)
3225 (arguments
3226 (list
3227 #:phases
3228 #~(modify-phases %standard-phases
3229 (add-before 'build 'build-with-cython
3230 (lambda _
3231 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3232 (native-inputs
3233 (list python-cython
3234 python-pytest
3235 python-setuptools))
3236 (home-page "https://github.com/tusharsadhwani/pytokens")
3237 (synopsis "Spec compliant Python 3.14+ tokenizer")
3238 (description
3239 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3240runs on older Pythons.")
3241 (license license:expat)))
3242
3243(define-public python-pyuca
3244 (package
3245 (name "python-pyuca")
3246 (version "1.2")
3247 (source
3248 (origin
3249 (method git-fetch)
3250 (uri (git-reference
3251 (url "https://github.com/jtauber/pyuca")
3252 (commit (string-append "v" version))))
3253 (file-name (git-file-name name version))
3254 (sha256
3255 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3256 (build-system pyproject-build-system)
3257 (arguments
3258 (list #:tests? #f)) ; there are no tests
3259 (native-inputs (list python-setuptools))
3260 (home-page "https://github.com/jtauber/pyuca")
3261 (synopsis "Python implementation of the Unicode Collation Algorithm")
3262 (description "This package provides a Python implementation of the
3263@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3264 (license license:expat)))
3265
3266(define-public python-pyxdameraulevenshtein
3267 (package
3268 (name "python-pyxdameraulevenshtein")
3269 (version "1.8.0")
3270 (source
3271 (origin
3272 (method git-fetch)
3273 (uri (git-reference
3274 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3275 (commit (string-append "v" version))))
3276 (file-name (git-file-name name version))
3277 (sha256
3278 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3279 (build-system pyproject-build-system)
3280 (native-inputs (list python-cython python-pytest python-setuptools))
3281 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3282 (synopsis "Damerau-Levenshtein edit distance algorithm")
3283 (description
3284 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3285edit distance algorithm for Python in Cython for high performance.")
3286 (license license:bsd-3)))
3287
3288(define-public python-qrcodegen
3289 (package
3290 (name "python-qrcodegen")
3291 (version "1.8.0")
3292 (source
3293 (origin
3294 (method git-fetch)
3295 (uri (git-reference
3296 (url "https://github.com/nayuki/QR-Code-generator")
3297 (commit (string-append "v" version))))
3298 (sha256
3299 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3300 (build-system pyproject-build-system)
3301 (arguments
3302 (list
3303 #:tests? #f ;no tests
3304 #:phases
3305 #~(modify-phases %standard-phases
3306 (add-before 'build 'chdir
3307 (lambda _
3308 (chdir "python"))))))
3309 (native-inputs (list python-setuptools))
3310 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3311 (synopsis "QR Code generator")
3312 (description
3313 "@code{python-qrcodegen} is a QR code generator library in Python.")
3314 (license license:expat)))
3315
3316(define-public python-rectpack
3317 (package
3318 (name "python-rectpack")
3319 (version "0.2.2")
3320 (source
3321 (origin
3322 (method git-fetch)
3323 (uri (git-reference
3324 (url "https://github.com/secnot/rectpack/")
3325 (commit version)))
3326 (file-name (git-file-name name version))
3327 (sha256
3328 (base32 "0y6nzpqny2knlq5g53wdnrznv10xv21rbzmlbq5xgf92gi7i6kci"))))
3329 (build-system pyproject-build-system)
3330 (arguments (list #:test-backend #~'unittest))
3331 (native-inputs (list python-setuptools))
3332 (home-page "https://github.com/secnot/rectpack/")
3333 (synopsis "2D Rectangle packing Python library")
3334 (description "Rectpack is a collection of heuristic algorithms for solving
3335the 2D knapsack or bin packing problem, consisting on packing a set of
3336rectangles into the smallest number of bins.")
3337 (license license:asl2.0)))
3338
3339(define-public python-refleak
3340 (package
3341 (name "python-refleak")
3342 (version "0.2.2")
3343 (source
3344 (origin
3345 (method git-fetch)
3346 (uri (git-reference
3347 (url "https://github.com/mne-tools/refleak")
3348 (commit (string-append "v" version))))
3349 (file-name (git-file-name name version))
3350 (sha256
3351 (base32 "1851pxcbvdab1wq64drkw873mis9yqrvamsv0cxj7p6p4l7nfj4h"))))
3352 (build-system pyproject-build-system)
3353 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
3354 (home-page "https://github.com/mne-tools/refleak")
3355 (synopsis "Track down reference leaks in Python")
3356 (description
3357 "This package provides a library to find out what is still holding a
3358reference to an object that should be dead. It is used to track down reference
3359leaks in @code{MNE-Python}, @code{PyVista} and @code{pyvistaqt}.")
3360 (license license:bsd-3)))
3361
3362(define-public python-represent
3363 (package
3364 (name "python-represent")
3365 (version "2.1")
3366 (source
3367 (origin
3368 (method url-fetch)
3369 (uri (pypi-uri "Represent" version))
3370 (sha256
3371 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3372 (build-system pyproject-build-system)
3373 (native-inputs
3374 ;; XXX This might be too much for testing, maybe switch them off as it's
3375 ;; a simple middleware library.
3376 (list python-ipython
3377 python-pytest
3378 python-rich
3379 python-setuptools))
3380 (home-page "https://github.com/RazerM/represent")
3381 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3382 (description
3383 "This package implements a functionality to generate Python
3384@code{__repr__} methods automatically or declaratively.")
3385 (license license:expat)))
3386
3387(define-public python-rich-argparse
3388 (package
3389 (name "python-rich-argparse")
3390 (version "1.8.0")
3391 (source
3392 (origin
3393 (method git-fetch)
3394 (uri (git-reference
3395 (url "https://github.com/hamdanal/rich-argparse")
3396 (commit (string-append "v" version))))
3397 (file-name (git-file-name name version))
3398 (sha256
3399 (base32
3400 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3401 (build-system pyproject-build-system)
3402 (native-inputs
3403 (list python-pytest
3404 python-hatchling))
3405 (propagated-inputs
3406 (list python-rich))
3407 (home-page "https://github.com/hamdanal/rich-argparse")
3408 (synopsis "Format argparse and optparse help using rich")
3409 (description
3410 "This package improves the look and readability of argparse's help while
3411requiring minimal changes to the code.")
3412 (license license:expat)))
3413
3414(define-public python-rich-rst
3415 (package
3416 (name "python-rich-rst")
3417 (version "2.0.1")
3418 (source
3419 (origin
3420 (method git-fetch)
3421 (uri (git-reference
3422 (url "https://github.com/wasi-master/rich-rst")
3423 (commit (string-append "v" version))))
3424 (file-name (git-file-name name version))
3425 (sha256
3426 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3427 (build-system pyproject-build-system)
3428 (native-inputs
3429 (list python-pytest
3430 python-setuptools))
3431 (propagated-inputs
3432 (list python-pygments
3433 python-rich))
3434 (home-page "https://wasi-master.github.io/rich-rst")
3435 (synopsis "Beautiful reStructuredText renderer for Rich")
3436 (description
3437 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3438documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3439renderables.")
3440 (license license:expat)))
3441
3442(define-public python-roman-numerals
3443 (package
3444 (name "python-roman-numerals")
3445 (version "3.1.0")
3446 (source
3447 (origin
3448 (method url-fetch)
3449 (uri (pypi-uri "roman_numerals" version))
3450 (sha256
3451 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3452 (build-system pyproject-build-system)
3453 (native-inputs (list python-flit-core python-pytest))
3454 (home-page "https://pypi.org/project/roman-numbers/")
3455 (synopsis "Python library to manipulate Roman numerals")
3456 (description "This package provides a Python library to manipulate
3457well-formed Roman numerals.")
3458 (license license:expat)))
3459
3460(define-public python-runs
3461 (package
3462 (name "python-runs")
3463 (version "1.3.0")
3464 (source
3465 (origin
3466 (method git-fetch)
3467 (uri (git-reference
3468 (url "https://github.com/rec/runs")
3469 (commit (string-append "v" version))))
3470 (file-name (git-file-name name version))
3471 (sha256
3472 (base32 "0grzfnamxgnpvf3m0c139sknyj31vsvcplvcng6maq60xvnqrbw1"))))
3473 (build-system pyproject-build-system)
3474 (arguments
3475 (list
3476 #:test-flags
3477 ;; Expecting ".git".
3478 #~(list "--deselect=test/test_runs.py::TestRunsActual::test_many")))
3479 (native-inputs (list python-pytest python-tdir python-uv-build))
3480 (propagated-inputs (list python-xmod))
3481 (home-page "https://github.com/rec/runs")
3482 (synopsis "Run a block of text as a subprocess")
3483 (description
3484 "@code{runs} has improved versions of @code{call()}, @code{check_call()},
3485@code{check_output()}, and @code{run()} from Python's subprocess module that
3486handle multiple commands and blocks of text, fix some defects, and add some
3487features.")
3488 (license license:expat)))
3489
3490(define-public python-rush
3491 (package
3492 (name "python-rush")
3493 (version "2021.04.0")
3494 (source
3495 (origin
3496 (method git-fetch)
3497 (uri (git-reference
3498 (url "https://github.com/sigmavirus24/rush")
3499 (commit version)))
3500 (file-name (git-file-name name version))
3501 (sha256
3502 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3503 (build-system pyproject-build-system)
3504 (arguments
3505 (list
3506 #:test-flags
3507 ;; E ValueError: Redis URL must specify one of the following schemes
3508 ;; (redis://, rediss://, unix://)
3509 #~(list "-k" (string-append "not test_valid_url[redis://]"
3510 " and not test_valid_url[rediss://]"))))
3511 (native-inputs
3512 (list python-mock
3513 python-redis
3514 python-rfc3986
3515 python-pytest
3516 python-setuptools))
3517 (propagated-inputs
3518 (list python-attrs))
3519 (home-page "https://github.com/sigmavirus24/rush")
3520 (synopsis "Throttling and rate-limiting algorithms for Python")
3521 (description
3522 "This package provides is a small collection of algorithms that can be
3523reused when throttling user interactions with a resource (e.g., an API).")
3524 (license license:expat)))
3525
3526(define-public python-rustworkx
3527 (package
3528 (name "python-rustworkx")
3529 (version "0.17.1")
3530 (source
3531 (origin
3532 (method git-fetch)
3533 (uri (git-reference
3534 (url "https://github.com/Qiskit/rustworkx")
3535 (commit version)))
3536 (file-name (git-file-name name version))
3537 (sha256
3538 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3539 (build-system pyproject-build-system)
3540 (arguments
3541 (list
3542 #:test-flags #~(list "--test-path" "tests")
3543 #:imported-modules (append %cargo-build-system-modules
3544 %pyproject-build-system-modules)
3545 #:modules '(((guix build cargo-build-system)
3546 #:prefix cargo:)
3547 (guix build pyproject-build-system)
3548 (guix build utils))
3549 #:phases
3550 #~(modify-phases %standard-phases
3551 (add-after 'unpack 'prepare-cargo-build-system
3552 (lambda args
3553 (for-each
3554 (lambda (phase)
3555 (format #t "Running cargo phase: ~a~%" phase)
3556 (apply (assoc-ref cargo:%standard-phases phase)
3557 #:cargo-target #$(cargo-triplet) args))
3558 '(unpack-rust-crates
3559 configure
3560 check-for-pregenerated-files
3561 patch-cargo-checksums))))
3562 (add-before 'check 'pre-check
3563 (lambda _
3564 ;; Delete the source directory to avoid interference.
3565 (delete-file-recursively "rustworkx")
3566 ;; Matplotlib needs to be able to write its configuration file
3567 ;; somewhere.
3568 (setenv "MPLCONFIGDIR" "/tmp")
3569 ;; For fontconfig.
3570 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3571 (propagated-inputs (list python-numpy))
3572 (native-inputs
3573 (append (list graphviz
3574 python-matplotlib
3575 python-networkx
3576 python-pillow
3577 python-setuptools
3578 python-setuptools-rust
3579 python-stestr
3580 rust
3581 `(,rust "cargo"))
3582 (or (and=> (%current-target-system)
3583 (compose list make-rust-sysroot))
3584 '())))
3585 (inputs (cargo-inputs 'python-rustworkx))
3586 (home-page "https://www.rustworkx.org")
3587 (synopsis "High performance graph library for Python")
3588 (description
3589 "@code{rustworkx} is a Python package for working with graphs and complex
3590networks. It enables the creation, interaction with, and study of graphs and
3591networks.")
3592 (license license:asl2.0)))
3593
3594(define-public python-safety-schemas
3595 (package
3596 (name "python-safety-schemas")
3597 (version "0.0.19")
3598 (source
3599 (origin
3600 (method url-fetch)
3601 (uri (pypi-uri "safety_schemas" version))
3602 (sha256
3603 (base32 "13dany62q262l08441aps815nz42k9mcd3lgjs5z592j91nz10a7"))))
3604 (build-system pyproject-build-system)
3605 (arguments
3606 (list
3607 #:test-flags
3608 #~(list "-k" (string-join
3609 ;; These tests are failing for unknown reasons.
3610 ;; (AssertionError).
3611 (list "not test_model[ConfigModel-ConfigModel]"
3612 "test_model[MetadataModel-MetadataModel]"
3613 "test_model[PolicyFileModel-PolicyFileModel]"
3614 "test_model[ProjectModel-ProjectModel]"
3615 "test_model[ReportModel-ReportModel]")
3616 " and not "))))
3617 (propagated-inputs (list python-dparse
3618 python-packaging
3619 python-pydantic
3620 python-ruamel.yaml
3621 python-typing-extensions))
3622 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3623 ;; Source code is not yet published outside of PyPI:
3624 ;; https://github.com/pyupio/safety/issues/494
3625 (home-page "https://pypi.org/project/safety-schemas/")
3626 (synopsis "Schemas for Safety tools")
3627 (description "This package contains models and schemas used by Safety.")
3628 (license license:expat)))
3629
3630(define-public python-scverse-misc
3631 (package
3632 (name "python-scverse-misc")
3633 (version "0.1.1")
3634 (source
3635 (origin
3636 (method git-fetch)
3637 (uri (git-reference
3638 (url "https://github.com/scverse/scverse-misc")
3639 (commit (string-append "v" version))))
3640 (file-name (git-file-name name version))
3641 (sha256
3642 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3643 (build-system pyproject-build-system)
3644 (arguments
3645 (list
3646 #:test-flags
3647 ;; Optinal tests, Pydantic fails to validate inputs.
3648 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3649 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3650 (native-inputs
3651 (list python-hatch-vcs
3652 python-hatchling
3653 python-pytest
3654 python-pyyaml))
3655 (propagated-inputs
3656 (list python-session-info2
3657 python-typing-extensions
3658 ;; [optional]
3659 python-dotenv
3660 python-pydantic-settings))
3661 (home-page "https://github.com/scverse/scverse-misc")
3662 (synopsis "Miscellaneous utility code used by scverse packages")
3663 (description
3664 "This package provides miscellaneous utility code used by scverse
3665packages.")
3666 (license license:bsd-3)))
3667
3668(define-public python-senf
3669 (package
3670 (name "python-senf")
3671 (version "1.5.1")
3672 (source
3673 (origin
3674 (method git-fetch)
3675 (uri (git-reference
3676 (url "https://github.com/quodlibet/senf")
3677 (commit (string-append "v" version))))
3678 (file-name (git-file-name name version))
3679 (sha256
3680 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3681 (build-system pyproject-build-system)
3682 (arguments
3683 (list
3684 #:test-flags
3685 ;; These tests fail due to various home fetching methods during build.
3686 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3687 "--deselect" "tests/test_api.py::test_expanduser_user")))
3688 (native-inputs (list python-pytest python-setuptools))
3689 (home-page "https://github.com/quodlibet/senf")
3690 (synopsis "Text, bytes and paths conversion functions for Python")
3691 (description "Senf introduces a new platform native string type called
3692fsnative. It adds functions to convert text, bytes and paths to and from that
3693new type and helper functions to integrate it nicely with the Python
3694stdlib.")
3695 (license license:expat)))
3696
3697(define-public python-session-info2
3698 (package
3699 (name "python-session-info2")
3700 (version "0.2")
3701 (source
3702 (origin
3703 (method url-fetch)
3704 (uri (pypi-uri "session_info2" version))
3705 (sha256
3706 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3707 (build-system pyproject-build-system)
3708 (arguments
3709 (list
3710 #:test-flags
3711 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3712 ;; Tests require Jupyter Client.
3713 "--ignore=tests/test_subprocess.py")))
3714 (native-inputs
3715 (list python-hatch-docstring-description
3716 python-hatch-vcs
3717 python-hatchling
3718 python-pytest
3719 python-pytest-asyncio))
3720 (home-page "https://session-info2.readthedocs.io/")
3721 (synopsis "Print versions of imported packages")
3722 (description
3723 "This package implements a functionality to print versions of imported
3724Python packages.")
3725 (license license:mpl2.0)))
3726
3727(define-public python-show-in-file-manager
3728 (package
3729 (name "python-show-in-file-manager")
3730 (version "1.1.6")
3731 (source
3732 (origin
3733 (method git-fetch)
3734 (uri (git-reference
3735 (url "https://github.com/damonlynch/showinfilemanager")
3736 (commit (string-append "v" version))))
3737 (file-name (git-file-name name version))
3738 (sha256
3739 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3740 (build-system pyproject-build-system)
3741 (arguments (list #:tests? #f)) ;no tests upstream
3742 (native-inputs
3743 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3744 (propagated-inputs
3745 (list python-packaging python-pyxdg))
3746 (home-page "https://github.com/damonlynch/showinfilemanager")
3747 (synopsis "Open the system file manager and select files in it")
3748 (description
3749 "Show in File Manager is a Python package to open the system file manager
3750and optionally select files in it. The point is not to open the files, but to
3751select them in the file manager, thereby highlighting the files and allowing
3752the user to quickly do something with them.")
3753 (license license:expat)))
3754
3755(define-public python-shxparser
3756 (package
3757 (name "python-shxparser")
3758 (version "0.0.2")
3759 (source
3760 (origin
3761 (method url-fetch)
3762 (uri (pypi-uri "shxparser" version))
3763 (sha256
3764 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3765 (build-system pyproject-build-system)
3766 (arguments (list #:test-backend #~'unittest))
3767 (native-inputs
3768 (list python-svgelements python-setuptools))
3769 (home-page "https://github.com/tatarize/shxparser")
3770 (synopsis "SHX line font parser")
3771 (description
3772 "This is a pure python parser for SHX Hershey font files that are an
3773AutoCad format which can encode single line fonts. This format is used for
3774many CNC and laser operations.")
3775 (license license:expat)))
3776
3777(define-public python-simplify-polyline
3778 (package
3779 (name "python-simplify-polyline")
3780 (version "0.1.0")
3781 (source
3782 (origin
3783 (method url-fetch)
3784 (uri (pypi-uri "simplify_polyline" version))
3785 (sha256
3786 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3787 (build-system pyproject-build-system)
3788 (native-inputs
3789 (list python-pytest
3790 python-setuptools
3791 python-setuptools-scm
3792 python-wheel))
3793 (propagated-inputs
3794 (list python-numpy))
3795 (home-page "https://github.com/ShayHill/simplify_polyline")
3796 (synopsis "Simplify an open or closed polyline")
3797 (description
3798 "This package implements functionality to work with plyline.
3799Features:
3800@itemize
3801@item Visvalingham-Whyatt - removes the smallest triangles formed by
3802three consecutive points in a polyline or polygon
3803@item Douglas-Peucker - gives a better representation of the convex hull
3804@end itemize")
3805 (license license:expat)))
3806
3807(define-public python-siphash24
3808 (package
3809 (name "python-siphash24")
3810 (version "1.8")
3811 (source
3812 (origin
3813 (method git-fetch)
3814 (uri (git-reference
3815 (url "https://github.com/dnicolodi/python-siphash24/")
3816 (commit (string-append "v" version))))
3817 (file-name (git-file-name name version))
3818 (sha256
3819 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3820 (build-system pyproject-build-system)
3821 (arguments
3822 (list
3823 #:test-backend #~'custom
3824 #:test-flags #~(list "test.py")
3825 #:phases
3826 #~(modify-phases %standard-phases
3827 (add-after 'unpack 'patch-pyproject
3828 (lambda _
3829 (substitute* "pyproject.toml"
3830 ;; meson-python: error: Field `project.license` has an invalid
3831 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3832 ;; LGPL-2.1-or-later`)
3833 (("^license = .*")
3834 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3835 (native-inputs
3836 (list pkg-config
3837 python-meson
3838 python-pytest))
3839 (inputs
3840 (list c-siphash))
3841 (home-page "https://github.com/dnicolodi/python-siphash24/")
3842 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3843 (description
3844 "This package provides a C-based implementation of
3845@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3846compatible with the hash functions provided by the hashlib standard library
3847module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3848 ;; They are in LICENSES directory:
3849 (license (list license:asl2.0
3850 license:lgpl2.1+))))
3851
3852(define-public python-snakesay
3853 (package
3854 (name "python-snakesay")
3855 (version "0.10.4")
3856 (source
3857 (origin
3858 (method git-fetch)
3859 (uri (git-reference
3860 (url "https://github.com/pythonanywhere/snakesay")
3861 (commit (string-append "v" version))))
3862 (file-name (git-file-name name version))
3863 (sha256
3864 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3865 (build-system pyproject-build-system)
3866 (native-inputs (list python-pytest python-uv-build))
3867 (home-page "https://github.com/pythonanywhere/snakesay")
3868 (synopsis "Like @command{cowsay} but with Python flavor")
3869 (description
3870 "This package provides a simple ASCII art pictures generator of a
3871Snake with a message.")
3872 (license license:expat)))
3873
3874(define-public python-jaconv
3875 (package
3876 (name "python-jaconv")
3877 ;; Last release is not tagged.
3878 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3879 (revision . "0")))
3880 (version (git-version "0.4.0"
3881 (assoc-ref properties 'revision)
3882 (assoc-ref properties 'commit)))
3883 (source
3884 (origin
3885 (method git-fetch)
3886 (uri (git-reference
3887 (url "https://github.com/ikegami-yukino/jaconv")
3888 (commit (assoc-ref properties 'commit))))
3889 (file-name (git-file-name name version))
3890 (sha256
3891 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3892 (build-system pyproject-build-system)
3893 (native-inputs (list python-setuptools python-pynose))
3894 (home-page "https://github.com/ikegami-yukino/jaconv")
3895 (synopsis
3896 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3897Hankaku, Zenkaku")
3898 (description
3899 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3900Hankaku (half-width character) and Zenkaku (full-width character)")
3901 (license license:expat)))
3902
3903(define-public python-janus
3904 (package
3905 (name "python-janus")
3906 (version "1.0.0")
3907 (source
3908 (origin
3909 (method url-fetch)
3910 (uri (pypi-uri "janus" version))
3911 (sha256
3912 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3913 (build-system pyproject-build-system)
3914 (native-inputs
3915 (list python-pytest python-pytest-asyncio
3916 python-setuptools python-wheel))
3917 (propagated-inputs (list python-typing-extensions))
3918 (home-page "https://github.com/aio-libs/janus/")
3919 (synopsis
3920 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3921 (description
3922 "Mixed sync-async queue, supposed to be used for communicating between
3923classic synchronous (threaded) code and asynchronous (in terms of
3924@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3925@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3926library has two faces: synchronous and asynchronous interface. Synchronous is
3927fully compatible with
3928@url{https://docs.python.org/3/library/queue.html,standard queue},
3929asynchronous one follows
3930@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3931design}.")
3932 (license license:asl2.0)))
3933
3934(define-public python-concurrent-log-handler
3935 (package
3936 (name "python-concurrent-log-handler")
3937 (version "0.9.25")
3938 ;; No tests in the PyPI tarball.
3939 (source
3940 (origin
3941 (method git-fetch)
3942 (uri (git-reference
3943 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3944 (commit version)))
3945 (file-name (git-file-name name version))
3946 (sha256
3947 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3948 (build-system pyproject-build-system)
3949 (arguments
3950 (list
3951 ;; XXX: Tests are broken, no new version fixing them yet.
3952 #:tests? #f))
3953 (native-inputs
3954 (list python-hatchling))
3955 (propagated-inputs
3956 (list python-portalocker))
3957 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3958 (synopsis
3959 "Additional log handler for Python's standard @code{logging} package")
3960 (description
3961 "This package provides an additional log handler for Python's standard
3962@code{logging} package (PEP 282). This handler will write log events to a log
3963file which is rotated when the log file reaches a certain size. Multiple
3964processes can safely write to the same log file concurrently and rotated logs
3965can be gzipped if desired. An optional threaded queue logging handler is
3966provided to perform logging in the background.")
3967 (license license:asl2.0)))
3968
3969(define-public python-lazy
3970 (package
3971 (name "python-lazy")
3972 (version "1.6")
3973 (source
3974 (origin
3975 (method url-fetch)
3976 (uri (pypi-uri "lazy" version))
3977 (sha256
3978 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3979 (build-system pyproject-build-system)
3980 (native-inputs (list python-pytest python-setuptools python-wheel))
3981 (home-page "https://github.com/stefanholek/lazy")
3982 (synopsis "Lazy attributes for Python objects")
3983 (description "This package provides a decorator to create lazy
3984attributes.")
3985 (license license:bsd-2)))
3986
3987(define-public python-logfury
3988 (package
3989 (name "python-logfury")
3990 (version "1.0.1")
3991 (source
3992 (origin
3993 (method url-fetch)
3994 (uri (pypi-uri "logfury" version))
3995 (sha256
3996 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3997 (build-system pyproject-build-system)
3998 (native-inputs
3999 (list python-pytest
4000 python-setuptools
4001 python-setuptools-scm
4002 python-testfixtures
4003 python-wheel))
4004 (home-page "https://github.com/reef-technologies/logfury/")
4005 (synopsis "Logging of method calls for python libraries")
4006 (description
4007 "Logfury is a tool for python library maintainers. It allows for
4008responsible, low-boilerplate logging of method calls.")
4009 (license license:bsd-3)))
4010
4011(define-public python-logzero
4012 (package
4013 (name "python-logzero")
4014 (version "1.7.0")
4015 (source
4016 (origin
4017 (method git-fetch)
4018 (uri (git-reference
4019 (url "https://github.com/metachris/logzero")
4020 (commit (string-append "v" version))))
4021 (file-name (git-file-name name version))
4022 (sha256
4023 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
4024 (build-system pyproject-build-system)
4025 (native-inputs (list python-pytest python-setuptools))
4026 (home-page "https://github.com/metachris/logzero")
4027 (synopsis "Robust and effective logging for Python")
4028 (description
4029 "@code{logzero} provides a fully configured Python logger object for
4030easy logging and rotating to a console or a file.")
4031 (license license:expat)))
4032
4033(define-public python-logbook
4034 (package
4035 (name "python-logbook")
4036 (version "1.8.2")
4037 (source
4038 (origin
4039 (method url-fetch)
4040 (uri (pypi-uri "logbook" version))
4041 (sha256
4042 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
4043 (build-system pyproject-build-system)
4044 (native-inputs
4045 (list python-brotli
4046 python-cython
4047 python-pytest
4048 python-setuptools
4049 python-wheel))
4050 (home-page "https://github.com/getlogbook/logbook")
4051 (synopsis "Logbook is a logging replacement for Python")
4052 (description
4053 "Logbook is a logging system for Python that replaces the standard
4054library’s logging module. It was designed with both complex and simple
4055applications in mind and the idea to make logging fun.")
4056 (license license:bsd-3)))
4057
4058(define-public python-databind-core
4059 (package
4060 (name "python-databind-core")
4061 (version "4.4.2")
4062 (source
4063 (origin
4064 (method url-fetch)
4065 (uri (pypi-uri "databind.core" version))
4066 (sha256
4067 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
4068 (snippet
4069 #~(begin (use-modules (guix build utils))
4070 ;; The problem with python-typing-extensions >= 4.7 is only
4071 ;; with python-3.7.
4072 (substitute* "pyproject.toml"
4073 ((",<4.7.*") "\"\n"))))))
4074 (build-system pyproject-build-system)
4075 (arguments
4076 (list
4077 #:phases
4078 #~(modify-phases %standard-phases
4079 (add-after 'install 'fix-name
4080 (lambda* (#:key inputs outputs #:allow-other-keys)
4081 (let* ((sitedir (site-packages inputs outputs))
4082 (dist-info
4083 (string-append sitedir "/databind_core-" #$version ".dist-info")))
4084 (substitute* (string-append dist-info "/METADATA")
4085 (("Name: databind-core")
4086 "Name: databind.core"))
4087 (substitute* (string-append dist-info "/RECORD")
4088 (("databind_core") "databind.core"))
4089 (rename-file dist-info
4090 (string-append sitedir
4091 "/databind.core-"
4092 #$version ".dist-info"))))))))
4093 (propagated-inputs
4094 (list python-deprecated
4095 python-nr-date
4096 python-nr-stream
4097 python-typeapi
4098 python-typing-extensions))
4099 (native-inputs
4100 (list python-poetry-core python-pytest))
4101 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
4102 (synopsis
4103 "Library for de-/serializing Python dataclasses")
4104 (description
4105 "Databind is a library inspired by jackson-databind to de-/serialize
4106Python dataclasses.")
4107 (license license:expat)))
4108
4109(define-public python-databind-json
4110 (package
4111 (name "python-databind-json")
4112 (version "4.4.2")
4113 (source
4114 (origin
4115 (method url-fetch)
4116 (uri (pypi-uri "databind.json" version))
4117 (sha256
4118 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
4119 (snippet
4120 #~(begin (use-modules (guix build utils))
4121 ;; The problem with python-typing-extensions >= 4.7 is only
4122 ;; with python-3.7.
4123 (substitute* "pyproject.toml"
4124 ((",<4.7.*") "\"\n"))))))
4125 (build-system pyproject-build-system)
4126 (arguments
4127 (list
4128 #:phases
4129 #~(modify-phases %standard-phases
4130 (add-after 'install 'fix-name
4131 (lambda* (#:key inputs outputs #:allow-other-keys)
4132 (let* ((sitedir (site-packages inputs outputs))
4133 (dist-info
4134 (string-append sitedir "/databind_json-" #$version ".dist-info")))
4135 (substitute* (string-append dist-info "/METADATA")
4136 (("Name: databind-json")
4137 "Name: databind.json"))
4138 (substitute* (string-append dist-info "/RECORD")
4139 (("databind_json") "databind.json"))
4140 (rename-file dist-info
4141 (string-append sitedir
4142 "/databind.json-"
4143 #$version ".dist-info"))))))))
4144 (propagated-inputs
4145 (list python-databind-core python-nr-date
4146 python-typeapi python-typing-extensions))
4147 (native-inputs (list python-poetry-core python-pytest))
4148 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
4149 (synopsis
4150 "De-/serialize Python dataclasses to or from JSON payloads")
4151 (description
4152 "The @code{databind.json} package implements the de-/serialization to or
4153from JSON payloads using the @code{databind.core} framework.")
4154 (license license:expat)))
4155
4156(define-public python-docspec
4157 (package
4158 (name "python-docspec")
4159 (version "2.2.1")
4160 (source
4161 (origin
4162 (method url-fetch)
4163 (uri (pypi-uri "docspec" version))
4164 (sha256
4165 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
4166 (build-system pyproject-build-system)
4167 (arguments (list #:tests? #false)) ;there are none
4168 (propagated-inputs
4169 (list python-databind-core
4170 python-databind-json
4171 python-deprecated))
4172 (native-inputs
4173 (list python-poetry-core))
4174 (home-page "https://github.com/NiklasRosenstein/python-docspec")
4175 (synopsis "Represent API documentation of programming languages")
4176 (description
4177 "Docspec is a JSON object specification for representing API
4178documentation of programming languages.")
4179 (license license:expat)))
4180
4181(define-public python-docspec-python
4182 (package
4183 (name "python-docspec-python")
4184 (version "2.2.1")
4185 (source
4186 (origin
4187 (method url-fetch)
4188 (uri (pypi-uri "docspec_python" version))
4189 (sha256
4190 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
4191 (build-system pyproject-build-system)
4192 (arguments
4193 (list #:tests? #false)) ;there are none
4194 (propagated-inputs (list python-docspec python-nr-util))
4195 (native-inputs (list python-poetry-core))
4196 (home-page "https://github.com/NiklasRosenstein/docspec/")
4197 (synopsis "Produce docspec data from Python source code")
4198 (description
4199 "This package provides a parser based on @code{lib2to3} producing
4200@code{docspec} data from Python source code.")
4201 (license license:expat)))
4202
4203(define-public python-fqdn
4204 (package
4205 (name "python-fqdn")
4206 (version "1.5.1")
4207 (source
4208 (origin
4209 (method git-fetch)
4210 (uri (git-reference
4211 (url "https://github.com/ypcrts/fqdn")
4212 (commit (string-append "v" version))))
4213 (file-name (git-file-name name version))
4214 (sha256
4215 (base32 "1cfxpvlvfi9s20v93m3rgw7jn6ybc5ga5rwxhrap59zwd9crsh2g"))))
4216 (build-system pyproject-build-system)
4217 (native-inputs
4218 (list python-pytest
4219 python-setuptools))
4220 (home-page "https://github.com/ypcrts/fqdn")
4221 (synopsis "Validate domain names against RFC 1123")
4222 (description
4223 "This package validates fully-qualified domain names against RFC 1123, so
4224that they are acceptable to modern bowsers")
4225 (license license:mpl2.0)))
4226
4227(define-public python-fire
4228 (package
4229 (name "python-fire")
4230 (version "0.7.0")
4231 (source
4232 (origin
4233 (method url-fetch)
4234 (uri (pypi-uri "fire" version))
4235 (sha256
4236 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4237 (build-system pyproject-build-system)
4238 (propagated-inputs (list python-termcolor))
4239 (native-inputs (list python-pytest python-setuptools python-wheel))
4240 (synopsis "Library for automatically generating command line interfaces")
4241 (description
4242 "Fire is a library for automatically generating command line interfaces
4243from absolutely any Python object. The following are the advantages:
4244@itemize
4245@item A simple way to create a CLI in Python.
4246@item A helpful tool for developing and debugging Python code.
4247@item Helps with exploring existing code or turning other people's code into a
4248command line interface.
4249@item Makes transitioning between Bash and Python easier.
4250@item Makes using a Python REPL easier by setting up the REPL with the modules
4251and variables you'll need already imported and created.
4252@end itemize")
4253 (home-page "https://github.com/google/python-fire")
4254 (license license:asl2.0)))
4255
4256(define-public python-fit-nbinom
4257 (package
4258 (name "python-fit-nbinom")
4259 (version "1.1")
4260 (source (origin
4261 (method url-fetch)
4262 (uri (pypi-uri "fit_nbinom" version))
4263 (sha256
4264 (base32
4265 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4266 (build-system pyproject-build-system)
4267 (arguments
4268 (list
4269 #:tests? #false ;there are none
4270 #:phases
4271 '(modify-phases %standard-phases
4272 (add-after 'unpack 'remove-invalid-syntax
4273 (lambda _
4274 (substitute* "setup.py"
4275 ((".\\*\"") "\"")))))))
4276 (propagated-inputs (list python-numpy python-scipy))
4277 (native-inputs (list python-setuptools python-wheel))
4278 (home-page "https://github.com/joachimwolff/fit_nbinom")
4279 (synopsis "Negative binomial maximum likelihood estimator")
4280 (description "This package provides an implementation in Python using
4281scipy and numpy of negative binomial maximum likelihood estimation.")
4282 (license license:gpl3+)))
4283
4284(define-public python-docrep
4285 (package
4286 (name "python-docrep")
4287 (version "0.3.2")
4288 (source (origin
4289 (method url-fetch)
4290 (uri (pypi-uri "docrep" version))
4291 (sha256
4292 (base32
4293 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4294 (build-system pyproject-build-system)
4295 (propagated-inputs (list python-six))
4296 (native-inputs (list python-pytest python-setuptools python-wheel))
4297 (home-page "https://github.com/Chilipp/docrep")
4298 (synopsis "Python package for docstring repetition")
4299 (description "Docrep is the documentation repetition module. This module
4300targets developers that develop complex and nested Python APIs and helps them
4301to create a well-documented piece of software.")
4302 (license license:asl2.0)))
4303
4304(define-public python-dotmap
4305 (package
4306 (name "python-dotmap")
4307 (version "1.3.30")
4308 (source
4309 (origin
4310 (method url-fetch)
4311 (uri (pypi-uri "dotmap" version))
4312 (sha256
4313 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4314 (build-system pyproject-build-system)
4315 (arguments (list #:test-backend #~'unittest))
4316 (native-inputs (list python-setuptools))
4317 (home-page "https://github.com/drgrib/dotmap")
4318 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4319 (description
4320 "DotMap is a dot-access dictionary subclass that has dynamic
4321hierarchy creation, can be initialized with keys, can be initialized from a
4322dictionary, can be convert to a dictionary, and is ordered by insertion.")
4323 (license license:expat)))
4324
4325(define-public python-dotty-dict
4326 (package
4327 (name "python-dotty-dict")
4328 (version "1.3.1")
4329 (source
4330 (origin
4331 (method git-fetch)
4332 (uri (git-reference
4333 (url "https://github.com/pawelzny/dotty_dict")
4334 (commit (string-append "v" version))))
4335 (sha256
4336 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4337 (build-system pyproject-build-system)
4338 (native-inputs
4339 (list python-poetry-core
4340 python-pytest
4341 python-setuptools))
4342 (home-page "https://github.com/pawelzny/dotty_dict")
4343 (synopsis "Python library for accessing dictionaries using a dot syntax")
4344 (description "This package provides a library that wraps the traditional
4345Python dictionaries and provides a syntax to access nested dictionaries values
4346using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4347 (license license:expat)))
4348
4349(define-public python-affine
4350 (package
4351 (name "python-affine")
4352 (version "2.4.0")
4353 (source (origin
4354 (method url-fetch)
4355 (uri (pypi-uri "affine" version))
4356 (sha256
4357 (base32
4358 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4359 (build-system pyproject-build-system)
4360 (propagated-inputs (list python-flake8
4361 python-pytest python-pytest-cov))
4362 (native-inputs (list python-flit-core))
4363 (home-page "https://github.com/rasterio/affine")
4364 (synopsis "Matrices describing affine transformation of the plane")
4365 (description "This is a package for matrices describing the affine
4366transformation of the plane.")
4367 (license license:bsd-3)))
4368
4369(define-public python-argopt
4370 (package
4371 (name "python-argopt")
4372 (version "0.9.1")
4373 (source
4374 (origin
4375 (method url-fetch)
4376 (uri (pypi-uri "argopt" version))
4377 (sha256
4378 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4379 (build-system pyproject-build-system)
4380 (native-inputs
4381 (list python-pytest
4382 python-pytest-timeout
4383 python-setuptools
4384 python-setuptools-scm
4385 python-wheel))
4386 (home-page "https://github.com/casperdcl/argopt")
4387 (synopsis "Generate a command-line interface from a docstring")
4388 (description
4389 "This package provides tools to define a command line interface
4390from a docstring rather than the other way around.")
4391 (license license:mpl2.0)))
4392
4393(define-public python-array-api-compat
4394 (package
4395 (name "python-array-api-compat")
4396 (version "1.12.0")
4397 (source
4398 (origin
4399 (method url-fetch)
4400 (uri (pypi-uri "array_api_compat" version))
4401 (sha256
4402 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4403 (build-system pyproject-build-system)
4404 ;; Tests would require all supported array libraries, including pytorch
4405 (arguments (list #:tests? #false))
4406 (native-inputs
4407 (list python-setuptools))
4408 (home-page "https://data-apis.org/array-api-compat/")
4409 (synopsis "Array API compatibility wrapper for NumPy et al")
4410 (description
4411 "This package provides a wrapper around @code{NumPy} and other array
4412libraries to make them compatible with the Array API standard")
4413 (license license:expat)))
4414
4415(define-public python-array-api-strict
4416 (package
4417 (name "python-array-api-strict")
4418 (version "2.5")
4419 (source
4420 (origin
4421 (method url-fetch)
4422 (uri (pypi-uri "array_api_strict" version))
4423 (sha256
4424 (base32 "1ig116ld5k8wx82ahld4l7qcb0d4s5s4f4a0nrflrh3hzabyarvp"))))
4425 (build-system pyproject-build-system)
4426 (arguments
4427 (list
4428 ;; tests: 585 passed, 2 deselected
4429 #:test-flags
4430 ;; hypothesis.errors.InvalidArgument:
4431 ;; xp.__array_api_version__='2025.12', but it must be a valid version
4432 ;; string ('2021.12', '2022.12', '2023.12', '2024.12'). If the standard
4433 ;; version you want is not available, please ensure you're using the
4434 ;; latest version of Hypothesis, then open an issue if one doesn't
4435 ;; already exist.
4436 #~(list "--ignore=array_api_strict/tests/test_set_functions.py"
4437 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4438 "-k" (string-append "not test_disabled_extensions"
4439 " and not test_environment_variables"))))
4440 (native-inputs
4441 (list python-hypothesis
4442 python-pytest
4443 python-setuptools
4444 python-setuptools-scm))
4445 (propagated-inputs
4446 (list python-numpy))
4447 (home-page "https://data-apis.org/array-api-strict/")
4448 (synopsis "Strict implementation of the Python array API")
4449 (description
4450 "@code{array_api_strict} is a strict, minimal implementation of the
4451@url{https://data-apis.org/array-api/latest/, Python array API}.
4452
4453The purpose of array-api-strict is to provide an implementation of the array
4454API for consuming libraries to test against so they can be completely sure
4455their usage of the array API is portable.")
4456 (license license:bsd-3)))
4457
4458(define-public python-cachedir-tag
4459 (package
4460 (name "python-cachedir-tag")
4461 (version "0.0.4")
4462 (source
4463 (origin
4464 (method git-fetch)
4465 (uri (git-reference
4466 (url "https://github.com/moreati/python-cachedir-tag")
4467 (commit (string-append "v" version))))
4468 (file-name (git-file-name name version))
4469 (sha256
4470 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4471 (build-system pyproject-build-system)
4472 (arguments '(#:tests? #f)) ;no test
4473 (native-inputs (list python-setuptools))
4474 (home-page "https://github.com/moreati/python-cachedir-tag")
4475 (synopsis
4476 "Handle @file{CACHEDIR.TAG} in cache directories")
4477 (description
4478 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4479a file llowing any arbitrary directory to be marked as a cache directory.")
4480 (license license:expat)))
4481
4482(define-public python-cachetools
4483 (package
4484 (name "python-cachetools")
4485 (version "6.1.0")
4486 (source
4487 (origin
4488 (method url-fetch)
4489 (uri (pypi-uri "cachetools" version))
4490 (sha256
4491 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4492 (build-system pyproject-build-system)
4493 (native-inputs
4494 (list python-pytest
4495 python-setuptools
4496 python-wheel))
4497 (home-page "https://github.com/tkem/cachetools/")
4498 (synopsis "Extensible memoizing collections and decorators")
4499 (description "This module provides various memoizing collections and
4500decorators, including variants of the Python standard library's
4501@code{lru_cache} function decorator.")
4502 (license license:expat)))
4503
4504(define-public python-cachetools-5
4505 (package
4506 (inherit python-cachetools)
4507 (version "5.5.2")
4508 (source
4509 (origin
4510 (method url-fetch)
4511 (uri (pypi-uri "cachetools" version))
4512 (sha256
4513 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4514
4515(define-public python-colorclass
4516 (package
4517 (name "python-colorclass")
4518 (version "2.2.2")
4519 (source
4520 (origin
4521 (method git-fetch)
4522 (uri (git-reference
4523 (url "https://github.com/matthewdeanmartin/colorclass")
4524 (commit (string-append "v" version))))
4525 (file-name (git-file-name name version))
4526 (sha256
4527 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4528 (build-system pyproject-build-system)
4529 (arguments
4530 (list
4531 #:test-flags
4532 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4533 #:phases
4534 #~(modify-phases %standard-phases
4535 (add-after 'unpack 'use-poetry-core
4536 (lambda _
4537 ;; Patch to use the core poetry API.
4538 (substitute* "pyproject.toml"
4539 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4540 (native-inputs (list python-poetry-core python-pytest))
4541 (home-page "https://github.com/matthewdeanmartin/colorclass")
4542 (synopsis "Colorful console applications with Python")
4543 (description
4544 "This package provides an ANSI color text library for Python. It
4545provides automatic coloring for dark or light terminals.")
4546 (license license:expat)))
4547
4548(define-public python-colorcet
4549 (package
4550 (name "python-colorcet")
4551 (version "3.1.1a1")
4552 (source
4553 (origin
4554 (method url-fetch)
4555 (uri (pypi-uri "colorcet" version))
4556 (sha256
4557 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4558 (build-system pyproject-build-system)
4559 (native-inputs (list python-nbval
4560 python-packaging
4561 python-pytest
4562 python-pytest-mpl
4563 python-setuptools
4564 python-setuptools-scm))
4565 (home-page "https://colorcet.holoviz.org/")
4566 (synopsis "Collection of perceptually uniform colormaps")
4567 (description "Colorcet is a collection of perceptually accurate 256-color
4568colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4569HoloViews, and Datashader.")
4570 (license license:cc-by4.0)))
4571
4572(define-public python-colored
4573 (package
4574 (name "python-colored")
4575 (version "2.3.0")
4576 (source (origin
4577 (method git-fetch)
4578 (uri (git-reference
4579 (url "https://gitlab.com/dslackw/colored")
4580 (commit version)))
4581 (file-name (git-file-name name version))
4582 (sha256
4583 (base32
4584 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4585 (build-system pyproject-build-system)
4586 (arguments
4587 (list
4588 #:phases
4589 #~(modify-phases %standard-phases
4590 (add-before 'check 'pre-check
4591 (lambda _
4592 ;; Tests expect ANSI escape codes for colors.
4593 (setenv "FORCE_COLOR" "1"))))))
4594 (native-inputs (list python-flit-core python-pytest))
4595 (home-page "https://gitlab.com/dslackw/colored")
4596 (synopsis "Simple library for color and formatting to terminal")
4597 (description "This is a very simple Python library for color and
4598formatting in the terminal. It comes with a collection of color codes and
4599names for 256 color terminal setups.")
4600 (license license:expat)))
4601
4602(define-public python-colored-traceback
4603 ;; No tags in upstream repository.
4604 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4605 (revision "0"))
4606 (package
4607 (name "python-colored-traceback")
4608 (version (git-version "0.4.2" revision commit))
4609 (source
4610 (origin
4611 (method git-fetch)
4612 (uri (git-reference
4613 (url "https://github.com/staticshock/colored-traceback.py")
4614 (commit commit)))
4615 (file-name (git-file-name name version))
4616 (sha256
4617 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4618 (build-system pyproject-build-system)
4619 (arguments
4620 ;; Tests are incompatible with current python version.
4621 (list #:tests? #f))
4622 (propagated-inputs (list python-colorama python-pygments))
4623 (native-inputs (list python-setuptools python-wheel))
4624 (home-page "https://github.com/staticshock/colored-traceback.py")
4625 (synopsis "Automatically color uncaught exception tracebacks")
4626 (description "This package provides python utilities to automatically
4627color uncaught exception tracebacks.")
4628 (license license:isc))))
4629
4630(define-public python-colorful
4631 (package
4632 (name "python-colorful")
4633 (version "0.5.8")
4634 (source
4635 (origin
4636 (method git-fetch)
4637 (uri (git-reference
4638 (url "https://github.com/timofurrer/colorful")
4639 (commit (string-append "v" version))))
4640 (file-name (git-file-name name version))
4641 (sha256
4642 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4643 (build-system pyproject-build-system)
4644 (native-inputs
4645 (list python-pytest
4646 python-setuptools))
4647 (propagated-inputs
4648 (list python-colorama))
4649 (home-page "http://github.com/timofurrer/colorful")
4650 (synopsis "Terminal string styling")
4651 (description "Colorful provides an array of text styles, that can be used
4652as functions or string constants to form colored terminal output.")
4653 (license license:expat)))
4654
4655(define-public python-colorthief
4656 (package
4657 (name "python-colorthief")
4658 (version "0.2.1")
4659 (source
4660 (origin
4661 (method url-fetch)
4662 (uri (pypi-uri "colorthief" version))
4663 (sha256
4664 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4665 (build-system pyproject-build-system)
4666 (arguments
4667 (list #:tests? #f)) ;no tests in PyPI or Git
4668 (native-inputs (list python-setuptools))
4669 (propagated-inputs (list python-pillow))
4670 (home-page "https://github.com/fengsp/color-thief-py")
4671 (synopsis "Grab the color palette of an image")
4672 (description
4673 "This package provides methods to determine the dominant color
4674of an image, as well as constructing a representative color palette.")
4675 (license license:bsd-3)))
4676
4677(define-public python-construct-classes
4678 (package
4679 (name "python-construct-classes")
4680 (version "0.1.2")
4681 (source
4682 (origin
4683 (method git-fetch)
4684 (uri (git-reference
4685 (url "https://github.com/matejcik/construct-classes")
4686 (commit (string-append "v" version))))
4687 (file-name (git-file-name name version))
4688 (sha256
4689 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4690 (build-system pyproject-build-system)
4691 (propagated-inputs
4692 (list python-construct))
4693 (native-inputs
4694 (list python-poetry-core
4695 python-pytest))
4696 (home-page "https://github.com/matejcik/construct-classes")
4697 (synopsis "Parse binary structs into dataclasses")
4698 (description "This package provides a parser to parse binary structs
4699into dataclasses.")
4700 (license license:expat)))
4701
4702(define-public python-contourpy
4703 (package
4704 (name "python-contourpy")
4705 (version "1.3.3")
4706 (source
4707 (origin
4708 (method url-fetch)
4709 (uri (pypi-uri "contourpy" version))
4710 (sha256
4711 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4712 (build-system pyproject-build-system)
4713 (arguments
4714 (list
4715 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4716 #:test-flags
4717 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4718 #~(list "-m" "not image"
4719 ;; Tests that pass but avoided for load reasons.
4720 "-k" "not test_filled_random_big and not test_lines_random_big")))
4721 (native-inputs
4722 (list pybind11-2
4723 python-meson
4724 python-pytest
4725 python-wurlitzer))
4726 (propagated-inputs
4727 (list python-numpy))
4728 (home-page "https://contourpy.readthedocs.io/")
4729 (synopsis
4730 "Python library for calculating contours of 2D quadrilateral grids")
4731 (description
4732 "ContourPy is a Python library for calculating contours of 2D
4733quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4734 (license license:bsd-3)))
4735
4736(define-public python-lunr
4737 (package
4738 (name "python-lunr")
4739 (version "0.8.0")
4740 (source
4741 (origin
4742 (method url-fetch)
4743 (uri
4744 (pypi-uri "lunr" version))
4745 (sha256
4746 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4747 (build-system pyproject-build-system)
4748 (arguments
4749 (list
4750 #:test-flags
4751 '(list "-k" "not TestLanguageSupport"
4752 "--ignore-glob=tests/acceptance_tests/*")))
4753 (native-inputs
4754 (list python-hatch-fancy-pypi-readme
4755 python-hatchling
4756 python-pytest
4757 python-pytest-timeout))
4758 (propagated-inputs
4759 (list python-nltk))
4760 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4761 (synopsis "Full-text search library")
4762 (description "This package provides python library for full-text search.
4763It indexes documents and provides a search interface for retrieving documents
4764that best match text queries.")
4765 (license license:expat)))
4766
4767(define-public python-mdit-py-plugins
4768 (package
4769 (name "python-mdit-py-plugins")
4770 (version "0.5.0")
4771 (source (origin
4772 (method git-fetch) ;for tests
4773 (uri (git-reference
4774 (url "https://github.com/executablebooks/mdit-py-plugins")
4775 (commit (string-append "v" version))))
4776 (file-name (git-file-name name version))
4777 (sha256
4778 (base32
4779 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4780 (build-system pyproject-build-system)
4781 (propagated-inputs
4782 (list python-markdown-it-py
4783 python-attrs))
4784 (native-inputs
4785 (list python-flit-core
4786 python-pytest
4787 python-pytest-regressions))
4788 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4789 (synopsis "Collection of plugins for markdown-it-py")
4790 (description "This package contains a collection of plugins for
4791@code{markdown-it-py} like:
4792@enumerate
4793@item amsmath,
4794@item attrs,
4795@item container,
4796@item definition list,
4797@item dollarmath,
4798@item field list,
4799@item footnote,
4800@item textmath, and
4801@item wordcount.
4802@end enumerate")
4803 (license license:expat)))
4804
4805(define-public python-mdurl
4806 (package
4807 (name "python-mdurl")
4808 (version "0.1.2")
4809 (source
4810 (origin
4811 (method git-fetch)
4812 (uri (git-reference
4813 (url "https://github.com/executablebooks/mdurl")
4814 (commit version)))
4815 (file-name (git-file-name name version))
4816 (sha256
4817 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4818 (build-system pyproject-build-system)
4819 (native-inputs (list python-flit-core python-pytest))
4820 (home-page "https://github.com/executablebooks/mdurl")
4821 (synopsis "Markdown URL utilities")
4822 (description
4823 "This package implements a Python port of the JavaScript @code{mdurl}.")
4824 (license license:expat)))
4825
4826(define-public python-mkdocs
4827 (package
4828 (name "python-mkdocs")
4829 (version "1.6.1")
4830 (source
4831 (origin
4832 (method git-fetch)
4833 (uri (git-reference
4834 (url "https://github.com/mkdocs/mkdocs")
4835 (commit version)))
4836 (file-name (git-file-name name version))
4837 (sha256
4838 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4839 (build-system pyproject-build-system)
4840 (arguments
4841 (list
4842 ;; tests: 687 passed
4843 #:test-backend #~'unittest
4844 #:test-flags
4845 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4846 #:phases
4847 #~(modify-phases %standard-phases
4848 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4849 ;; to run tests with pytest (and thus ignore them selectively).
4850 (add-before 'check 'delete-failing-tests
4851 (lambda _
4852 (delete-file "mkdocs/tests/cli_tests.py"))))))
4853 (native-inputs
4854 (list python-hatchling
4855 python-setuptools))
4856 (propagated-inputs
4857 (list python-click
4858 python-ghp-import
4859 python-jinja2
4860 python-markdown
4861 python-markupsafe
4862 python-mergedeep
4863 python-mkdocs-get-deps
4864 python-packaging
4865 python-pathspec
4866 python-pyyaml
4867 python-pyyaml-env-tag
4868 python-watchdog
4869 ;; [optional]
4870 python-babel))
4871 (home-page "https://www.mkdocs.org")
4872 (synopsis "Project documentation with Markdown")
4873 (description
4874 "MkDocs is a static site generator geared towards building project
4875documentation. Documentation source files are written in Markdown, and
4876configured with a single YAML configuration file.")
4877 (license license:bsd-3)))
4878
4879(define-public python-mkdocs-get-deps
4880 (package
4881 (name "python-mkdocs-get-deps")
4882 (version "0.2.0")
4883 (source
4884 (origin
4885 (method git-fetch)
4886 (uri (git-reference
4887 (url "https://github.com/mkdocs/get-deps")
4888 (commit (string-append "v" version))))
4889 (file-name (git-file-name name version))
4890 (sha256
4891 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4892 (build-system pyproject-build-system)
4893 (native-inputs
4894 (list python-pytest
4895 python-hatchling))
4896 (propagated-inputs
4897 (list python-mergedeep
4898 python-platformdirs
4899 python-pyyaml))
4900 (home-page "https://github.com/mkdocs/get-deps")
4901 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4902 (description
4903 "This package provides an @code{MkDocs} extension that lists all dependencies
4904according to a mkdocs.yml file. This command guesses the Python dependencies
4905that a MkDocs site requires in order to build. It simply prints the PyPI
4906packages that need to be installed.")
4907 (license license:expat)))
4908
4909(define-public python-mkdocs-markdownextradata-plugin
4910 (package
4911 (name "python-mkdocs-markdownextradata-plugin")
4912 (version "0.2.5")
4913 (source
4914 (origin
4915 (method git-fetch)
4916 (uri (git-reference
4917 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4918 (commit version)))
4919 (file-name (git-file-name name version))
4920 (sha256
4921 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4922 (build-system pyproject-build-system)
4923 (native-inputs (list python-pytest python-setuptools))
4924 (propagated-inputs (list python-mkdocs python-pyyaml))
4925 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4926 (synopsis "Inject extra variables into the MkDocs markdown template")
4927 (description
4928 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4929variables into the markdown template.")
4930 (license license:expat)))
4931
4932(define-public python-docstring-to-markdown
4933 (package
4934 (name "python-docstring-to-markdown")
4935 (version "0.15")
4936 (source
4937 (origin
4938 (method url-fetch)
4939 (uri (pypi-uri "docstring-to-markdown" version))
4940 (sha256
4941 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4942 (build-system pyproject-build-system)
4943 (native-inputs
4944 (list python-pytest
4945 python-setuptools))
4946 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4947 (synopsis "On the fly conversion of Python docstrings to markdown")
4948 (description
4949 "This module can convert Python docstrings to Markdown. It can recognise
4950reStructuredText inside docstrings and convert multiple of its features to
4951Markdown. It also includes initial support for Google-formatted docstrings.")
4952 (license license:lgpl2.1+)))
4953
4954(define-public python-pdoc
4955 (package
4956 (name "python-pdoc")
4957 (version "13.0.1")
4958 (source (origin
4959 (method git-fetch)
4960 (uri (git-reference
4961 (url "https://github.com/mitmproxy/pdoc")
4962 (commit (string-append "v" version))))
4963 (file-name (git-file-name name version))
4964 (sha256
4965 (base32
4966 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4967 (build-system pyproject-build-system)
4968 (native-inputs (list python-pytest python-jinja2 python-pygments
4969 python-setuptools python-wheel))
4970 (arguments
4971 (list
4972 ;; Some tests fail, presumably because of slight version mismatches of
4973 ;; the dependencies.
4974 #:test-flags
4975 '(list "-k" (string-append "not test_var_with_raising_repr and "
4976 "not test_smoke[mock] and "
4977 "not test_snapshots[html"))))
4978 (home-page "https://pdoc.dev/")
4979 (synopsis "API documentation for Python projects")
4980 (description "pdoc auto-generates API documentation that follows your
4981project's Python module hierarchy. It requires no configuration, has
4982first-class support for type annotations, cross-links between identifiers,
4983comes with an integrated live-reloading web server, uses customizable HTML
4984templates, understands numpydoc and Google-style docstrings.")
4985 (license license:unlicense)))
4986
4987(define-public python-py4j
4988 (package
4989 (name "python-py4j")
4990 (version "0.10.9.7")
4991 (source (origin
4992 (method url-fetch)
4993 (uri (pypi-uri "py4j" version))
4994 (sha256
4995 (base32
4996 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4997 (build-system pyproject-build-system)
4998 (arguments (list #:tests? #f)) ; Requires a running JVM?
4999 (native-inputs (list python-setuptools))
5000 (home-page "https://www.py4j.org/")
5001 (synopsis "Dynamically access arbitrary Java objects from Python")
5002 (description
5003 "This package enables Python programs to dynamically access arbitrary
5004Java objects.")
5005 (license license:bsd-3)))
5006
5007(define-public python-pymdown-extensions
5008 (package
5009 (name "python-pymdown-extensions")
5010 (version "10.16.1")
5011 (source
5012 (origin
5013 (method git-fetch)
5014 (uri (git-reference
5015 (url "https://github.com/facelessuser/pymdown-extensions")
5016 (commit version)))
5017 (file-name (git-file-name name version))
5018 (sha256
5019 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
5020 (build-system pyproject-build-system)
5021 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
5022 (arguments
5023 (list #:tests? #f))
5024 (native-inputs (list python-hatchling python-pytest python-pyyaml))
5025 (propagated-inputs (list python-markdown))
5026 (home-page "https://github.com/facelessuser/pymdown-extensions")
5027 (synopsis "Extension pack for Python Markdown")
5028 (description
5029 "PyMdown Extensions is a collection of extensions for Python Markdown.
5030All extensions are found under the module namespace of pymdownx.")
5031 (license license:expat)))
5032
5033(define-public python-plotext
5034 (package
5035 (name "python-plotext")
5036 (version "5.2.8")
5037 (source (origin
5038 (method url-fetch)
5039 (uri (pypi-uri "plotext" version))
5040 (sha256
5041 (base32
5042 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
5043 (build-system pyproject-build-system)
5044 (arguments (list #:tests? #false)) ;there are none
5045 (native-inputs (list python-setuptools python-wheel))
5046 (home-page "https://github.com/piccolomo/plotext")
5047 (synopsis "Plots in the terminal")
5048 (description "Plotext lets you plot directly to the terminal.")
5049 (license license:expat)))
5050
5051(define-public python-plotille
5052 (package
5053 (name "python-plotille")
5054 (version "5.0.0")
5055 (source
5056 (origin
5057 (method git-fetch)
5058 (uri (git-reference
5059 (url "https://github.com/tammoippen/plotille")
5060 (commit (string-append "v" version))))
5061 (file-name (git-file-name name version))
5062 (sha256
5063 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
5064 (modules '((guix build utils)))
5065 (snippet
5066 #~(begin
5067 ;; Without deleting ./imgs setuptools complains as follows: error:
5068 ;; Multiple top-level packages discovered in a flat-layout:
5069 ;; ['imgs', 'plotille'].
5070 (delete-file-recursively "./imgs")))))
5071 (build-system pyproject-build-system)
5072 (native-inputs
5073 (list python-pytest
5074 python-mock
5075 python-pendulum
5076 python-pytest-mock
5077 python-setuptools
5078 python-wheel))
5079 (home-page "https://github.com/tammoippen/plotille")
5080 (synopsis "Plot in the terminal using braille dots")
5081 (description
5082 "Plotille provides a figure class and graphing functions to create plots,
5083scatter plots, histograms and heatmaps in the terminal using braille dots.")
5084 (license license:expat)))
5085
5086(define-public python-poetry-dynamic-versioning
5087 (package
5088 (name "python-poetry-dynamic-versioning")
5089 (version "1.9.1")
5090 (source
5091 (origin
5092 (method url-fetch)
5093 (uri (pypi-uri "poetry_dynamic_versioning" version))
5094 (sha256
5095 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
5096 (build-system pyproject-build-system)
5097 (arguments
5098 (list
5099 #:test-flags
5100 #~(list "--ignore=tests/test_integration.py"
5101 "-k" (string-join
5102 ;; Tests searching for VCS back end.
5103 (list "not test__get_version__defaults"
5104 "test__enable_in_doc__project_with_dynamic"
5105 "test__enable_in_doc__project_with_version"
5106 "test__get_version__format_jinja"
5107 "test__get_version__format_jinja_imports_with_module_and_item"
5108 "test__get_version__format_jinja_imports_with_module_only"
5109 "test__get_version__format_jinja_with_enforced_style")
5110 " and not "))))
5111 (native-inputs
5112 (list python-poetry-core
5113 python-pytest))
5114 (propagated-inputs
5115 (list python-dunamai
5116 python-jinja2
5117 python-tomlkit))
5118 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
5119 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
5120 (description
5121 "This package provides a build backend that patches Poetry Core to enable
5122the versioning system in PEP 517 build frontends.")
5123 (license license:expat)))
5124
5125(define-public python-poetry-plugin-export
5126 (package
5127 (name "python-poetry-plugin-export")
5128 (version "1.10.0")
5129 (source
5130 (origin
5131 (method url-fetch)
5132 (uri (pypi-uri "poetry_plugin_export" version))
5133 (sha256
5134 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
5135 (build-system pyproject-build-system)
5136 (arguments
5137 (list
5138 #:tests? #f)) ;tests cycle with poetry
5139 (native-inputs
5140 (list python-poetry-core))
5141 (propagated-inputs
5142 (list python-cachy
5143 python-pendulum
5144 python-poetry-core
5145 python-tomlkit))
5146 (home-page "https://python-poetry.org/")
5147 (synopsis "Poetry plugin to export the dependencies to various formats")
5148 (description
5149 "Poetry plugin to export the dependencies to various formats.")
5150 (license license:expat)))
5151
5152(define-public python-portpicker
5153 (package
5154 (name "python-portpicker")
5155 (version "1.6.0")
5156 (source
5157 (origin
5158 (method url-fetch)
5159 (uri (pypi-uri "portpicker" version))
5160 (sha256
5161 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
5162 (build-system pyproject-build-system)
5163 (arguments
5164 (list
5165 #:test-flags
5166 ;; This fails because portserver ends up in bin, not site-packages
5167 '(list "--ignore=src/tests/portserver_test.py")))
5168 (propagated-inputs (list python-psutil))
5169 (native-inputs (list python-pytest python-setuptools python-wheel
5170 net-tools))
5171 (home-page "https://github.com/google/python_portpicker")
5172 (synopsis "Choose unique available network ports")
5173 (description
5174 "This package provides a library to choose unique available network
5175ports.")
5176 (license license:asl2.0)))
5177
5178(define-public python-md-ulb-pwrap
5179 (package
5180 (name "python-md-ulb-pwrap")
5181 (version "0.1.3")
5182 (source
5183 (origin
5184 (method git-fetch)
5185 (uri (git-reference
5186 (url "https://github.com/mondeja/md-ulb-pwrap")
5187 (commit (string-append "v" version))))
5188 (file-name (git-file-name name version))
5189 (sha256
5190 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
5191 (build-system pyproject-build-system)
5192 (arguments
5193 (list
5194 #:imported-modules `(,@%cargo-build-system-modules
5195 ,@%pyproject-build-system-modules)
5196 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5197 (guix build pyproject-build-system)
5198 (guix build utils))
5199 #:test-backend #~'custom
5200 #:test-flags #~(list "test.py")
5201 #:phases
5202 #~(modify-phases %standard-phases
5203 (add-after 'unpack 'prepare-cargo-build-system
5204 (lambda args
5205 (for-each
5206 (lambda (phase)
5207 (format #t "Running cargo phase: ~a~%" phase)
5208 (apply (assoc-ref cargo:%standard-phases phase)
5209 #:cargo-target #$(cargo-triplet)
5210 args))
5211 '(unpack-rust-crates
5212 configure
5213 check-for-pregenerated-files
5214 patch-cargo-checksums))))
5215 (add-after 'prepare-cargo-build-system 'chdir
5216 (lambda _
5217 (chdir "python"))))))
5218 (native-inputs
5219 (append
5220 (list maturin
5221 python-pytest
5222 python-unicode-linebreak
5223 rust
5224 `(,rust "cargo"))
5225 (or (and=> (%current-target-system)
5226 (compose list make-rust-sysroot))
5227 '())))
5228 (inputs (cargo-inputs 'md_ulb_pwrap))
5229 (home-page "https://github.com/mondeja/md-ulb-pwrap")
5230 (synopsis "Markdown paragraph wrapper")
5231 (description
5232 "This package provides a Markdown paragraph wrapper using Unicode Line
5233Breaking Algorithm written in Rust with Python bindings.")
5234 (license license:expat)))
5235
5236(define-public python-mdx-gh-links
5237 (package
5238 (name "python-mdx-gh-links")
5239 (version "0.4")
5240 (source
5241 (origin
5242 (method url-fetch)
5243 (uri (pypi-uri "mdx_gh_links" version))
5244 (sha256
5245 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5246 (build-system pyproject-build-system)
5247 (arguments (list #:tests? #f)) ;tests connect github
5248 (native-inputs (list python-setuptools))
5249 (propagated-inputs (list python-markdown))
5250 (home-page "https://github.com/Python-Markdown/github-links/")
5251 (synopsis "Python-Markdown extension adding support for shorthand links")
5252 (description "This package is an extension to Python-Markdown which adds
5253support for shorthand links to GitHub users, repositories, issues and
5254commits.")
5255 (license license:bsd-3)))
5256
5257(define-public python-mkdocs-material
5258 (package
5259 (name "python-mkdocs-material")
5260 (version "7.3.6")
5261 (source
5262 (origin
5263 (method git-fetch)
5264 (uri (git-reference
5265 (url "https://github.com/squidfunk/mkdocs-material")
5266 (commit version)))
5267 (file-name (git-file-name name version))
5268 (sha256
5269 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5270 (modules '((guix build utils)))
5271 (snippet
5272 ;; TODO There are still bundled assets and minified JS.
5273 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5274 (build-system pyproject-build-system)
5275 (arguments
5276 (list
5277 #:tests? #f ; No tests.
5278 #:phases
5279 #~(let ((symlink-js
5280 (lambda (inputs)
5281 (for-each
5282 (lambda (lang)
5283 (let* ((filename (string-append "lunr." lang ".min.js"))
5284 (file (string-append "share/javascript/" filename)))
5285 (symlink (search-input-file inputs file) filename)))
5286 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5287 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5288 "vi")))))
5289 (modify-phases %standard-phases
5290 ;; Requirement mkdocs-material-extensions
5291 ;; in-turn requires mkdocs-material. This causes
5292 ;; circular dependency, so we remove this requirement.
5293 (add-after 'unpack 'patch-requirements
5294 (lambda _
5295 (substitute* "requirements.txt"
5296 (("mkdocs-material-extensions.*$")
5297 ""))))
5298 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5299 (lambda* (#:key inputs #:allow-other-keys)
5300 (mkdir-p "material/assets/javascripts/lunr/min")
5301 (with-directory-excursion "material/assets/javascripts/lunr/min"
5302 (symlink-js inputs))))
5303 (add-after 'wrap 'replace-javascript-assets
5304 (lambda* (#:key inputs outputs #:allow-other-keys)
5305 (let* ((site (site-packages inputs outputs))
5306 (js-assets (string-append site "/material/"
5307 "assets/javascripts")))
5308 (with-directory-excursion js-assets
5309 (delete-file-recursively "lunr/min")
5310 (mkdir-p "lunr/min")
5311 (with-directory-excursion "lunr/min"
5312 (symlink-js inputs))))))))))
5313 (native-inputs (list python-setuptools))
5314 (inputs (list js-lunr-ar
5315 js-lunr-da
5316 js-lunr-de
5317 js-lunr-es
5318 js-lunr-fi
5319 js-lunr-fr
5320 js-lunr-hu
5321 js-lunr-it
5322 js-lunr-ja
5323 js-lunr-nl
5324 js-lunr-no
5325 js-lunr-pt
5326 js-lunr-ro
5327 js-lunr-ru
5328 js-lunr-sv
5329 js-lunr-tr
5330 js-lunr-vi
5331 js-lunr-multi
5332 js-lunr-stemmer-support))
5333 (propagated-inputs
5334 (list python-markdown python-mkdocs python-pygments
5335 python-pymdown-extensions))
5336 (home-page "https://squidfunk.github.io/mkdocs-material/")
5337 (synopsis "Material Design theme for MkDocs")
5338 (description "This package provides a theme plugin for the static site
5339generator MkDocs.")
5340 (license license:expat)))
5341
5342(define-public python-nanobind
5343 (package
5344 (name "python-nanobind")
5345 (version "2.10.2")
5346 (source
5347 (origin
5348 (method url-fetch)
5349 (uri (pypi-uri "nanobind" version))
5350 (sha256
5351 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5352 (build-system pyproject-build-system)
5353 (arguments
5354 (list
5355 ;; tests: 466 passed, 27 skipped
5356 #:phases
5357 #~(modify-phases %standard-phases
5358 (add-before 'build 'configure-cmake
5359 (lambda _
5360 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5361 (add-after 'configure-cmake 'build-c++
5362 (lambda _
5363 (invoke "cmake" "--build" "build" "-j" "2")))
5364 (add-before 'check 'pre-check
5365 (lambda _ (chdir "build"))))))
5366 (native-inputs
5367 (list cmake-minimal
5368 python-numpy
5369 python-pathspec
5370 python-pytest
5371 python-scikit-build-core
5372 python-scipy))
5373 (inputs
5374 (list eigen))
5375 (home-page "https://github.com/wjakob/nanobind/")
5376 (synopsis "Tiny and efficient C++/Python bindings")
5377 (description "Nanobind is a small binding library that exposes C++ types
5378in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5379@code{pybind11} and uses near-identical syntax. In contrast to these existing
5380tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5381of time, produce smaller binaries, and have better runtime performance.")
5382 (license license:bsd-3)))
5383
5384(define-public python-nr-date
5385 (package
5386 (name "python-nr-date")
5387 (version "2.1.0")
5388 (source
5389 (origin
5390 (method url-fetch)
5391 (uri (pypi-uri "nr_date" version))
5392 (sha256
5393 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5394 (build-system pyproject-build-system)
5395 (arguments (list #:tests? #false)) ;there are none
5396 (native-inputs (list python-poetry-core))
5397 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5398 (synopsis "Fast, regex-based date parsing library in plain Python")
5399 (description "This package provides a fast, regex-based date parsing
5400library in pure Python.")
5401 (license license:expat)))
5402
5403(define-public python-nr-stream
5404 (package
5405 (name "python-nr-stream")
5406 (version "1.1.5")
5407 (source
5408 (origin
5409 (method url-fetch)
5410 (uri (pypi-uri "nr_stream" version))
5411 (sha256
5412 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5413 (build-system pyproject-build-system)
5414 (arguments (list #:tests? #false)) ;there are none
5415 (native-inputs (list python-poetry-core))
5416 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5417 (synopsis "Stream and Optional classes for Python")
5418 (description "This package provides a @code{Stream} and @code{Optional}
5419class.")
5420 (license license:expat)))
5421
5422(define-public python-nr-util
5423 (package
5424 (name "python-nr-util")
5425 (version "0.8.12")
5426 (source
5427 (origin
5428 (method url-fetch)
5429 (uri (pypi-uri "nr.util" version))
5430 (sha256
5431 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5432 (build-system pyproject-build-system)
5433 (arguments
5434 (list
5435 #:tests? #false ;there are none
5436 #:phases
5437 #~(modify-phases %standard-phases
5438 (add-after 'unpack 'patch-build-system
5439 (lambda _
5440 (substitute* "pyproject.toml"
5441 (("^config =.*") "config = []\n"))))
5442 (add-after 'install 'fix-name
5443 (lambda* (#:key inputs outputs #:allow-other-keys)
5444 (let* ((sitedir (site-packages inputs outputs))
5445 (dist-info
5446 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5447 (substitute* (string-append dist-info "/METADATA")
5448 (("Name: nr-util")
5449 "Name: nr.util"))
5450 (substitute* (string-append dist-info "/RECORD")
5451 (("nr_util") "nr.util"))
5452 (rename-file dist-info
5453 (string-append sitedir
5454 "/nr.util-"
5455 #$version ".dist-info"))))))))
5456 (propagated-inputs (list python-deprecated python-typing-extensions))
5457 (native-inputs (list python-poetry-core))
5458 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5459 (synopsis "General purpose Python utility library")
5460 (description "This package provides a general purpose Python utility
5461library.")
5462 (license license:expat)))
5463
5464(define-public python-slicerator
5465 (package
5466 (name "python-slicerator")
5467 (version "1.1.0")
5468 (source
5469 (origin
5470 (method url-fetch)
5471 (uri (pypi-uri "slicerator" version))
5472 (sha256
5473 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5474 (build-system pyproject-build-system)
5475 (native-inputs
5476 (list python-numpy
5477 python-pytest
5478 python-setuptools))
5479 (home-page "https://github.com/soft-matter/slicerator")
5480 (synopsis "Lazy-loading, fancy-sliceable iterable")
5481 (description
5482 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5483of it like a generator that is \"reusable\" and has a length.")
5484 (license license:bsd-3)))
5485
5486(define-public python-pytelegrambotapi
5487 (package
5488 (name "python-pytelegrambotapi")
5489 (version "4.22.0")
5490 (source
5491 (origin
5492 (method git-fetch)
5493 (uri (git-reference
5494 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5495 (commit version)))
5496 (file-name (git-file-name name version))
5497 (sha256
5498 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5499 (build-system pyproject-build-system)
5500 (arguments
5501 (list
5502 #:phases
5503 #~(modify-phases %standard-phases
5504 (replace 'check
5505 (lambda* (#:key tests? #:allow-other-keys)
5506 (when tests?
5507 (with-directory-excursion "tests"
5508 (invoke "py.test"))))))))
5509 (propagated-inputs
5510 (list python-requests))
5511 (native-inputs
5512 (list python-hatchling python-pytest))
5513 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5514 (synopsis "Python Telegram bot api")
5515 (description "This package provides a simple, but extensible Python
5516implementation for the Telegram Bot API.")
5517 (license license:gpl2)))
5518
5519(define-public python-pytoolconfig
5520 (package
5521 (name "python-pytoolconfig")
5522 (version "1.3.1")
5523 (source
5524 (origin
5525 (method url-fetch)
5526 (uri (pypi-uri "pytoolconfig" version))
5527 (sha256
5528 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5529 (build-system pyproject-build-system)
5530 (arguments
5531 (list
5532 #:test-flags
5533 ;; Requires Sphinx.
5534 #~(list "--ignore=tests/test_documentation.py")))
5535 (native-inputs
5536 (list python-pdm-backend
5537 python-pytest))
5538 (propagated-inputs
5539 (list python-tomli
5540 python-packaging
5541 python-platformdirs))
5542 (home-page "https://pypi.org/project/pytoolconfig/")
5543 (synopsis "Python tool configuration")
5544 (description "The goal of this project is to manage configuration for
5545Python tools, such as rope and add support for a @file{pyproject.toml}
5546configuration file.")
5547 (license license:lgpl3+)))
5548
5549(define-public python-pytooling
5550 (package
5551 (name "python-pytooling")
5552 (version "9.0.0")
5553 (source
5554 (origin
5555 (method git-fetch)
5556 (uri (git-reference
5557 (url "https://github.com/pyTooling/pyTooling/")
5558 (commit (string-append "v" version))))
5559 (file-name (git-file-name name version))
5560 (sha256
5561 (base32 "19zbpy35bfcq3m49xd80qsy7f4b4r98dhv4vx76199a425n61932"))))
5562 (build-system pyproject-build-system)
5563 (arguments
5564 (list
5565 ;; Tests do not support linux-i686 system: Exception: Unknown
5566 ;; architecture 'linux-i686' for a native Linux.
5567 #:tests? (not (or (%current-target-system)
5568 (target-x86-32?)))
5569 #:test-flags
5570 #~(list
5571 "tests/unit"
5572 ;; These tests try to access the network.
5573 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5574 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5575 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5576 #:phases
5577 #~(modify-phases %standard-phases
5578 (add-after 'unpack 'patch-git-bin-for-tests
5579 (lambda* (#:key inputs #:allow-other-keys)
5580 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5581 "tests/unit/CLIAbstraction/Program.py")
5582 (("/usr/bin")
5583 (dirname (search-input-file inputs "/bin/git")))))))))
5584 (native-inputs
5585 (list git-minimal/pinned
5586 python-aiohttp
5587 python-colorama
5588 python-pytest
5589 python-requests
5590 python-ruamel.yaml
5591 python-setuptools))
5592 (home-page "https://pytooling.github.io/pyTooling/")
5593 (synopsis "Miscellaneous Python tools")
5594 (description
5595 "pyTooling is a collection of (abstract) data models, lacking classes,
5596decorators, a new performance boosting meta-class, and enhanced exceptions.
5597It also provides lots of helper functions---e.g., to ease the handling of
5598package descriptions or to unify multiple existing APIs into a single API.")
5599 (license license:asl2.0)))
5600
5601(define-public python-colorlog
5602 (package
5603 (name "python-colorlog")
5604 (version "6.9.0")
5605 (source
5606 (origin
5607 (method url-fetch)
5608 (uri (pypi-uri "colorlog" version))
5609 (sha256
5610 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5611 (build-system pyproject-build-system)
5612 (native-inputs
5613 (list python-pytest
5614 python-setuptools))
5615 (home-page "https://github.com/borntyping/python-colorlog")
5616 (synopsis "Log formatting with colors for python")
5617 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5618with Python's logging module that outputs records using terminal colors.")
5619 (license license:expat)))
5620
5621(define-public python-pyprind
5622 (package
5623 (name "python-pyprind")
5624 (version "2.11.3")
5625 (source
5626 (origin
5627 (method url-fetch)
5628 (uri (pypi-uri "PyPrind" version))
5629 (sha256
5630 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5631 (build-system pyproject-build-system)
5632 (native-inputs (list python-pytest python-setuptools))
5633 (propagated-inputs (list python-psutil))
5634 (home-page "https://github.com/rasbt/pyprind")
5635 (synopsis "Python Progress Bar and Percent Indicator Utility")
5636 (description
5637 "The PyPrind (Python Progress Indicator) module provides a progress bar
5638and a percentage indicator object that let you track the progress of a loop
5639structure or other iterative computation.")
5640 (license license:bsd-3)))
5641
5642(define-public python-gh-md-to-html
5643 (package
5644 (name "python-gh-md-to-html")
5645 (version "1.21.2")
5646 (source
5647 (origin
5648 (method url-fetch)
5649 (uri (pypi-uri "gh_md_to_html" version))
5650 (sha256
5651 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5652 (build-system pyproject-build-system)
5653 (arguments
5654 (list
5655 #:tests? #false ;there are none
5656 #:phases
5657 #~(modify-phases %standard-phases
5658 (add-after 'unpack 'relax-shellescape-requirement
5659 (lambda _
5660 (substitute* "src/__init__.py"
5661 (("import shellescape")
5662 "import shlex")
5663 (("shellescape\\.quote")
5664 "shlex.quote"))
5665 (substitute* "setup.py"
5666 (("\"shellescape\",")
5667 "")))))))
5668 (propagated-inputs
5669 (list python-beautifulsoup4
5670 python-emoji-for-gh-md-to-html
5671 python-pillow
5672 python-requests
5673 python-webcolors))
5674 (native-inputs (list python-setuptools))
5675 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5676 (synopsis "Github-flavored Markdown")
5677 (description
5678 "This package provides a feature-rich Github-flavored Markdown to HTML
5679Python library and command line interface.")
5680 (license license:expat)))
5681
5682(define-public python-gfloat
5683 (package
5684 (name "python-gfloat")
5685 (version "0.5.2")
5686 (source
5687 (origin
5688 (method url-fetch)
5689 (uri (pypi-uri "gfloat" version))
5690 (sha256
5691 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5692 (build-system pyproject-build-system)
5693 (arguments
5694 (list
5695 #:test-flags
5696 #~(list
5697 "--ignore=test/test_array_api.py" ;requires array_api_strict
5698 "--ignore=test/test_jax.py" ;requires python-jax
5699 "--ignore=test/test_microxcaling.py" ;requires torchao
5700 ;; Jupyter.
5701 "--ignore-glob=docs/source/*.ipynb")))
5702 (propagated-inputs
5703 (list python-array-api-compat python-more-itertools python-numpy))
5704 (native-inputs (list python-nbval
5705 python-ml-dtypes
5706 python-pytest
5707 python-pytorch
5708 python-setuptools
5709 openssl))
5710 (home-page "https://github.com/graphcore-research/gfloat")
5711 (synopsis "Generic floating point handling in Python")
5712 (description
5713 "This package provides an implementation of generic floating point encode
5714and decode logic in Python. It handles various current and proposed floating
5715point types:
5716
5717@itemize
5718@item IEEE 754: Binary16, Binary32
5719@item OCP Float8: E5M2, E4M3
5720@item IEEE WG P3109
5721@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5722@end itemize")
5723 (license license:expat)))
5724
5725(define-public python-glymur
5726 (package
5727 (name "python-glymur")
5728 (version "0.14.8")
5729 (source
5730 (origin
5731 (method git-fetch)
5732 (uri (git-reference
5733 (url "https://github.com/quintusdias/glymur")
5734 (commit (string-append "v" version))))
5735 (file-name (git-file-name name version))
5736 (sha256
5737 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5738 (build-system pyproject-build-system)
5739 (arguments
5740 (list
5741 #:test-flags
5742 #~(list "--numprocesses" (number->string (parallel-job-count))
5743 ;; Failing test due to inability of ctypes.util.find_library()
5744 ;; to determine library path, which is patched above.
5745 "--ignore=tests/test_config.py")
5746 #:phases
5747 #~(modify-phases %standard-phases
5748 (add-after 'unpack 'patch-library-locations
5749 (lambda* (#:key inputs #:allow-other-keys)
5750 ;; XXX: It's a workaround for Python inability to find the
5751 ;; .so libraries with ctypes.util.find_library()
5752 (substitute* '("glymur/config.py")
5753 (("path = find_library\\(libname\\)")
5754 (string-append
5755 "if libname == \"openjp2\":\n"
5756 " path = \""
5757 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5758 " elif libname == \"tiff\":\n"
5759 " path = \""
5760 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5761 " elif libname == \"c\":\n"
5762 " path = \""
5763 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5764 (native-inputs
5765 (list python-pytest
5766 python-pytest-xdist
5767 python-scikit-image
5768 python-setuptools))
5769 (inputs
5770 (list openjpeg ; glymur/lib/openjp2.py
5771 libtiff)) ; glymur/lib/tiff.py
5772 (propagated-inputs
5773 (list python-lxml
5774 python-numpy
5775 python-pillow ))
5776 (home-page "https://github.com/quintusdias/glymur")
5777 (synopsis "Python interface to OpenJPEG and LibTIFF")
5778 (description
5779 "This package provides Python interface to the OpenJPEG library which
5780allows one to read and write JPEG 2000 files")
5781 (license license:expat)))
5782
5783(define-public python-gphoto2
5784 (package
5785 (name "python-gphoto2")
5786 (version "2.6.1")
5787 (source
5788 (origin
5789 (method git-fetch) ; no tests in PyPI
5790 (uri (git-reference
5791 (url "https://github.com/jim-easterbrook/python-gphoto2")
5792 (commit (string-append "v" version))))
5793 (file-name (git-file-name name version))
5794 (sha256
5795 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5796 (build-system pyproject-build-system)
5797 (native-inputs
5798 (list pkg-config python-pytest python-setuptools python-wheel))
5799 (inputs
5800 (list libgphoto2))
5801 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5802 (synopsis "Python interface to libgphoto2")
5803 (description "@code{python-gphoto2} is a comprehensive Python interface
5804(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5805automatically generate the interface code.")
5806 (license license:lgpl3+)))
5807
5808(define-public python-colour
5809 (package
5810 (name "python-colour")
5811 (version "0.1.5")
5812 (source
5813 (origin
5814 (method git-fetch)
5815 (uri (git-reference
5816 (url "https://github.com/vaab/colour")
5817 (commit version)))
5818 (file-name (git-file-name name version))
5819 (sha256
5820 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5821 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5822 (build-system pyproject-build-system)
5823 (arguments
5824 (list
5825 #:tests? #f ; No tests.
5826 #:phases
5827 #~(modify-phases %standard-phases
5828 (add-after 'unpack 'set-version
5829 (lambda _
5830 (substitute* "autogen.sh"
5831 (("if ! \"\\$git\".*")
5832 "if false ; then\n")
5833 (("depends git grep")
5834 "depends grep")
5835 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5836 (format #f "version=~s" #$version))))))))
5837 (native-inputs (list python-setuptools))
5838 (home-page "https://github.com/vaab/colour")
5839 (synopsis "Convert and manipulate various color representations")
5840 (description
5841 "This package provides a pythonic way to manipulate color representations
5842(HSL, RVB,web, X11, ...).")
5843 (license license:expat)))
5844
5845(define-public python-rapidfuzz
5846 (package
5847 (name "python-rapidfuzz")
5848 (version "3.14.5")
5849 (source
5850 (origin
5851 (method git-fetch)
5852 (uri (git-reference
5853 (url "https://github.com/rapidfuzz/RapidFuzz")
5854 (commit (string-append "v" version))))
5855 (file-name (git-file-name name version))
5856 (sha256
5857 (base32 "0ic219rfw4nlj9jp3idhxpk8vjlcw3x0xc23s36hf6gs41wxwpn0"))))
5858 (build-system pyproject-build-system)
5859 (native-inputs
5860 (list python-cython
5861 python-pandas-minimal
5862 python-pytest
5863 python-scikit-build-core
5864 rapidfuzz-cpp
5865 taskflow))
5866 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5867 (synopsis "Rapid fuzzy string matching")
5868 (description
5869 "RapidFuzz is a fast string matching library for Python and
5870C++, which is using the string similarity calculations from FuzzyWuzzy.")
5871 (license license:expat)))
5872
5873(define-public python-easygui
5874 (package
5875 (name "python-easygui")
5876 (version "0.98.1")
5877 (source
5878 (origin
5879 (method git-fetch)
5880 (uri (git-reference
5881 (url "https://github.com/robertlugg/easygui")
5882 (commit version)))
5883 (file-name (git-file-name name version))
5884 (sha256
5885 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5886 (build-system pyproject-build-system)
5887 (arguments
5888 ;; XXX: There seem to be no tests upstream, although the package itself
5889 ;; seems to provide a lot of demo elements.
5890 (list #:tests? #f))
5891 (native-inputs (list python-pytest python-setuptools))
5892 (propagated-inputs (list `(,python "tk")))
5893 (home-page "https://github.com/robertlugg/easygui")
5894 (synopsis "GUI programming module for Python")
5895 (description
5896 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5897different from other GUI generators in that EasyGUI is NOT event-driven.
5898Instead, all GUI interactions are invoked by simple function calls.")
5899 (license license:bsd-3)))
5900
5901(define-public python-echo
5902 (package
5903 (name "python-echo")
5904 (version "0.12.1")
5905 (source
5906 (origin
5907 (method url-fetch)
5908 (uri (pypi-uri "echo" version))
5909 (sha256
5910 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5911 (build-system pyproject-build-system)
5912 (arguments
5913 (list
5914 #:phases
5915 #~(modify-phases %standard-phases
5916 (add-before 'check 'start-xorg-server
5917 (lambda _
5918 ;; The test suite requires a running X server.
5919 (system "Xvfb :99 -screen 0 1024x768x24 &")
5920 (setenv "DISPLAY" ":99.0"))))))
5921 (propagated-inputs
5922 (list python-numpy
5923 python-qtpy
5924 python-pyqt-6))
5925 (native-inputs
5926 (list python-pytest
5927 python-setuptools
5928 python-setuptools-scm
5929 xorg-server-for-tests))
5930 (home-page "https://github.com/glue-viz/echo")
5931 (synopsis "Callback Properties in Python")
5932 (description
5933 "Echo is a small library for attaching callback functions to property
5934state changes.")
5935 (license license:expat)))
5936
5937(define-public python-pymd4c
5938 (package
5939 (name "python-pymd4c")
5940 (version "1.3.0")
5941 (source
5942 (origin
5943 (method git-fetch)
5944 (uri (git-reference
5945 (url "https://github.com/dominickpastore/pymd4c")
5946 (commit (string-append "v" version))))
5947 (file-name (git-file-name name version))
5948 (sha256
5949 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5950 (build-system pyproject-build-system)
5951 (arguments (list #:test-flags #~(list "test")))
5952 (inputs (list md4c))
5953 (native-inputs
5954 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5955 (home-page "https://github.com/dominickpastore/pymd4c")
5956 (synopsis "Python bindings for MD4C")
5957 (description
5958 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5959to CommonMark.")
5960 (license license:expat)))
5961
5962(define-public python-pymediainfo
5963 (package
5964 (name "python-pymediainfo")
5965 (version "4.1")
5966 (source
5967 (origin
5968 (method url-fetch)
5969 (uri (pypi-uri "pymediainfo" version))
5970 (sha256
5971 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5972 (build-system pyproject-build-system)
5973 (arguments
5974 (list
5975 ;; The only failing test requires internet access.
5976 #:test-flags
5977 #~(list "-k" "not test_parse_url")
5978 #:phases
5979 #~(modify-phases %standard-phases
5980 (add-after 'unpack 'patch-libmediainfo
5981 (lambda* (#:key inputs #:allow-other-keys)
5982 (substitute* "pymediainfo/__init__.py"
5983 (("libmediainfo.so.0")
5984 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5985 (native-inputs (list python-pytest python-setuptools))
5986 (inputs (list libmediainfo))
5987 (home-page "https://github.com/sbraz/pymediainfo")
5988 (synopsis "Python wrapper for the mediainfo library")
5989 (description
5990 "This package provides a Python wrapper for the mediainfo library to
5991access the technical and tag data for video and audio files.")
5992 (license license:expat)))
5993
5994(define-public python-psutil
5995 (package
5996 (name "python-psutil")
5997 (version "7.2.2")
5998 (source
5999 (origin
6000 (method git-fetch)
6001 (uri (git-reference
6002 (url "https://github.com/giampaolo/psutil")
6003 (commit (string-append "release-" version))))
6004 (file-name (git-file-name name version))
6005 (sha256
6006 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
6007 (build-system pyproject-build-system)
6008 (arguments
6009 (list
6010 ;; tests: X86_64-linux 414 passed, 278 skipped
6011 ;; i686-linux 410 passed, 278 skipped
6012 #:test-flags
6013 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
6014 "--dist" "loadgroup"
6015 #$@(map (lambda (ls) (string-append "--deselect=tests/"
6016 (string-join ls "::")))
6017 ;; assert None is not None
6018 '(("test_linux.py" "TestRootFsDeviceFinder"
6019 "test_comparisons")
6020 ;; FileNotFoundError: [Errno 2] No such file or
6021 ;; directory: '/sys/class/net/lo/mtu'
6022 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
6023 ;; AssertionError: assert '/dev/root' != '/dev/root'
6024 ("test_linux.py" "TestRootFsDeviceFinder"
6025 "test_disk_partitions_mocked")
6026 ;; psutil.AccessDenied: (pid=426)
6027 ("test_process.py" "TestProcess" "test_weird_environ")
6028 ;; assert []
6029 ("test_system.py" "TestMiscAPIs" "test_users")
6030 ;; ModuleNotFoundError: No module named '_common'
6031 ("test_scripts.py" "TestSetupScript"
6032 "test_invocation")
6033 ;; AssertionError: assert ''
6034 ("test_scripts.py" "TestExampleScripts" "test_who")
6035 ;; AssertionError: no disks on this system? assert
6036 ;; None is not None
6037 ("test_system.py" "TestDiskAPIs"
6038 "test_disk_io_counters")
6039 ;; psutil.NoSuchProcess: process no longer exists
6040 ;; (pid=247))
6041 ("test_process_all.py" "TestFetchAllProcesses"
6042 "test_all")
6043 ;; ModuleNotFoundError: No module named 'pypinfo'
6044 ("test_scripts.py" "TestInternalScripts"
6045 "test_import_all")
6046 ;; FileNotFoundError: [Errno 2] No such file or
6047 ;; directory: '/sys/class/power_supply'
6048 ("test_misc.py" "TestMisc" "test_serialization")))
6049 #$@(if (target-32bit?)
6050 (map (lambda (ls) (string-append "--deselect=tests/"
6051 (string-join ls "::")))
6052 ;; assert 12884901915 < 500 where 12884901915 =
6053 ;; abs((2596570605 - 15481472520))
6054 '(("test_linux.py" "TestSystemCPUStats"
6055 "test_interrupts")
6056 ;; OSError: [Errno 22] Invalid argument
6057 ("test_process.py" "TestProcess"
6058 "test_zombie_process")))
6059 '()))
6060 #:phases
6061 #~(modify-phases %standard-phases
6062 (add-before 'check 'pre-check
6063 (lambda _
6064 (delete-file-recursively "psutil")
6065 (substitute* "tests/test_linux.py"
6066 (("\"(free|vmstat)\"" _ cmd)
6067 (format #f "~s" (which cmd))))
6068 (setenv "PYTHONWARNINGS" "always")
6069 (setenv "PYTHONUNBUFFERED" "1")
6070 (setenv "PSUTIL_DEBUG" "1")
6071 (setenv "PSUTIL_TESTING" "1"))))))
6072 (native-inputs
6073 (list procps
6074 python-packaging
6075 python-psleak
6076 python-pyperf
6077 python-pytest
6078 python-pytest-instafail
6079 python-pytest-xdist
6080 python-setuptools))
6081 (home-page "https://github.com/giampaolo/psutil")
6082 (synopsis "Library for retrieving information on running processes")
6083 (description
6084 "@code{psutil} (Python system and process utilities) is a library for
6085retrieving information on running processes and system utilization (CPU,
6086memory, disks, network) in Python. It is useful mainly for system monitoring,
6087profiling and limiting process resources and management of running processes.
6088It implements many functionalities offered by command line tools such as: ps,
6089top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
6090iotop, uptime, pidof, tty, taskset, pmap.")
6091 (license license:bsd-3)))
6092
6093(define-public python-psutil-bootstrap
6094 (hidden-package
6095 (package/inherit python-psutil
6096 (name "python-psutil-bootstrap")
6097 (arguments
6098 (list #:tests? #f))
6099 (propagated-inputs '())
6100 (native-inputs
6101 (list python-setuptools)))))
6102
6103(define-public python-scapy
6104 (package
6105 (name "python-scapy")
6106 (version "2.6.1")
6107 (source (origin
6108 (method url-fetch)
6109 (uri (pypi-uri "scapy" version))
6110 (sha256
6111 (base32
6112 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
6113 (arguments
6114 '(#:tests? #f)) ; There is a test directory, but apparently no
6115 ; automatic testing framework.
6116 ;; The package has more optional dependencies such as ipython and
6117 ;; matplotlib. If functionality is missing, these should be added.
6118 ;; See
6119 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
6120 (build-system pyproject-build-system)
6121 (native-inputs (list python-setuptools python-wheel))
6122 (home-page "https://scapy.net")
6123 (synopsis "Python network packet crafting library")
6124 (description
6125 "Scapy is a Python library and executable for interactively
6126manipulating network packets. It can forge or decode packets of a number
6127of protocols, send them on the wire, capture them, store or read them
6128using pcap files, match requests and replies, and so on.
6129It can handle tasks such as scanning, tracerouting, probing, unit tests,
6130attacks or network discovery.")
6131 (license license:gpl2)))
6132
6133(define-public python-icmplib
6134 (package
6135 (name "python-icmplib")
6136 (version "3.0.4")
6137 (source
6138 (origin
6139 (method git-fetch)
6140 (uri (git-reference
6141 (url "https://github.com/ValentinBELYN/icmplib")
6142 (commit (string-append "v" version))))
6143 (file-name (git-file-name name version))
6144 (sha256
6145 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
6146 (build-system pyproject-build-system)
6147 (arguments (list #:tests? #f)) ; No tests.
6148 (native-inputs (list python-setuptools))
6149 (home-page "https://github.com/ValentinBELYN/icmplib")
6150 (synopsis
6151 "Python implementation of the Internet Control Message Protocol (ICMP)")
6152 (description
6153 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
6154ICMP is typically used for diagnostic or control purposes - well known from
6155utilities such as ping(1).")
6156 (license license:lgpl3)))
6157
6158(define-public python-iron-core
6159 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
6160 (revision "0"))
6161 (package
6162 (name "python-iron-core")
6163 (version (git-version "1.2.1" revision commit))
6164 (source
6165 (origin
6166 (method git-fetch)
6167 (uri (git-reference
6168 (url "https://www.github.com/iron-io/iron_core_python")
6169 (commit commit)))
6170 (file-name (git-file-name name version))
6171 (sha256
6172 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
6173 (build-system pyproject-build-system)
6174 (arguments
6175 (list
6176 ;; XXX: Tests are run, but they seem too old/not updated.
6177 #:tests? #f
6178 #:test-backend #~'unittest))
6179 (propagated-inputs (list python-dateutil python-requests))
6180 (native-inputs (list python-setuptools))
6181 (home-page "https://www.github.com/iron-io/iron_core_python")
6182 (synopsis "Universal classes and methods for Iron.io API wrappers")
6183 (description
6184 "This package provides universal classes and methods for the Iron.io
6185API wrappers to build on.")
6186 (license license:bsd-2))))
6187
6188(define-public python-iron-mq
6189 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
6190 (revision "0"))
6191 (package
6192 (name "python-iron-mq")
6193 (version (git-version "0.9" revision commit))
6194 (source
6195 (origin
6196 (method git-fetch)
6197 (uri (git-reference
6198 (url "https://github.com/iron-io/iron_mq_python")
6199 (commit commit)))
6200 (file-name (git-file-name name version))
6201 (sha256
6202 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
6203 (build-system pyproject-build-system)
6204 (arguments
6205 (list
6206 ;; XXX: Tests are broken and require network access.
6207 #:tests? #f
6208 #:test-backend #~'unittest))
6209 (propagated-inputs (list python-iron-core))
6210 (native-inputs (list python-setuptools))
6211 (home-page "https://github.com/iron-io/iron_mq_python")
6212 (synopsis "Client library for IronMQ, a message queue in the cloud")
6213 (description
6214 "This package provides Python language bindings for IronMQ. IronMQ is an
6215elastic message queue for managing data and event flow within cloud
6216applications and between systems.")
6217 (license license:bsd-2))))
6218
6219(define-public python-rasterio
6220 (package
6221 (name "python-rasterio")
6222 (version "1.3.7")
6223 (source (origin
6224 (method url-fetch)
6225 (uri (pypi-uri "rasterio" version))
6226 (sha256
6227 (base32
6228 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
6229 (properties
6230 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
6231 (build-system pyproject-build-system)
6232 (arguments
6233 (list
6234 #:tests? #false ;test data not present
6235 #:phases
6236 '(modify-phases %standard-phases
6237 (add-before 'check 'build-extensions
6238 (lambda _
6239 ;; Cython extensions have to be built before running the tests.
6240 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6241 (propagated-inputs (list python-affine
6242 python-attrs
6243 python-certifi
6244 python-click
6245 python-click-plugins
6246 python-cligj
6247 python-numpy
6248 python-setuptools ; For pkg_resources.
6249 python-snuggs))
6250 (native-inputs (list gdal
6251 python-boto3
6252 python-cython
6253 python-hypothesis
6254 python-packaging
6255 python-pytest
6256 python-shapely
6257 python-wheel))
6258 (home-page "https://github.com/rasterio/rasterio")
6259 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6260 (description "This package implements fast and direct raster I/O for use
6261with Numpy and SciPy.")
6262 (license license:bsd-3)))
6263
6264(define-public python-rich-tables
6265 (package
6266 (name "python-rich-tables")
6267 (version "0.8.0")
6268 (source
6269 (origin
6270 (method git-fetch) ; no tests data in PyPi package
6271 (uri (git-reference
6272 (url "https://github.com/snejus/rich-tables")
6273 (commit version)))
6274 (file-name (git-file-name name version))
6275 (sha256
6276 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6277 (build-system pyproject-build-system)
6278 (arguments
6279 (list
6280 #:test-flags
6281 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6282 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6283 (native-inputs
6284 (list python-freezegun
6285 python-poetry-core
6286 python-pytest))
6287 (propagated-inputs
6288 (list python-funcy
6289 python-humanize
6290 python-multimethod
6291 python-platformdirs
6292 python-rgbxy
6293 python-rich
6294 python-sqlparse))
6295 (home-page "https://github.com/snejus/rich-tables")
6296 (synopsis "Ready-made rich tables for various purposes")
6297 (description
6298 "This package implements rich tables for various purposes, it's JSON
6299human-prettifier based on the @code{rich} Python library.")
6300 (license license:expat)))
6301
6302(define-public python-rich-toolkit
6303 (package
6304 (name "python-rich-toolkit")
6305 (version "0.12.0")
6306 (source
6307 (origin
6308 (method url-fetch)
6309 (uri (pypi-uri "rich_toolkit" version))
6310 (sha256
6311 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6312 (build-system pyproject-build-system)
6313 (propagated-inputs (list python-click python-rich python-typing-extensions))
6314 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6315 (home-page "https://pypi.org/project/rich-toolkit/")
6316 (synopsis "Rich toolkit for building command-line applications")
6317 (description "This package provides the Rich toolkit for building
6318command-line applications.")
6319 (license license:expat)))
6320
6321(define-public python-shapely
6322 (package
6323 (name "python-shapely")
6324 (version "2.1.1")
6325 (source
6326 (origin
6327 (method url-fetch)
6328 (uri (pypi-uri "shapely" version))
6329 (sha256
6330 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6331 (build-system pyproject-build-system)
6332 (arguments
6333 (list
6334 #:phases
6335 '(modify-phases %standard-phases
6336 (add-before 'check 'build-extensions
6337 (lambda _
6338 ;; Cython extensions have to be built before running the tests.
6339 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6340 (native-inputs
6341 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6342 (inputs
6343 (list geos))
6344 (propagated-inputs
6345 (list python-numpy))
6346 (home-page "https://github.com/shapely/shapely")
6347 (synopsis "Library for the manipulation and analysis of geometric objects")
6348 (description "Shapely is a Python package for manipulation and analysis of
6349planar geometric objects. It is based on the @code{GEOS} library.")
6350 (license license:bsd-3)))
6351
6352(define-public python-shortuuid
6353 (package
6354 (name "python-shortuuid")
6355 (version "1.0.13")
6356 (source
6357 (origin
6358 (method url-fetch)
6359 (uri (pypi-uri "shortuuid" version))
6360 (sha256
6361 (base32
6362 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6363 (build-system pyproject-build-system)
6364 (native-inputs
6365 (list python-poetry-core python-pytest))
6366 (home-page "https://github.com/skorokithakis/shortuuid")
6367 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6368 (description
6369 "@code{shortuuid} is a Python library for generating concise, unambiguous
6370and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6371module and then similar looking characters are removed.")
6372 (license license:bsd-3)))
6373
6374(define-public python-logwrap
6375 (package
6376 (name "python-logwrap")
6377 (version "11.1.1")
6378 (source
6379 (origin
6380 (method git-fetch) ; no tests in PyPI release
6381 (uri (git-reference
6382 (url "https://github.com/python-useful-helpers/logwrap")
6383 (commit version)))
6384 (file-name (git-file-name name version))
6385 (sha256
6386 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6387 (build-system pyproject-build-system)
6388 (native-inputs (list python-pytest
6389 python-setuptools
6390 python-setuptools-scm
6391 python-wheel))
6392 (home-page "https://github.com/python-useful-helpers/logwrap")
6393 (synopsis "Decorator for logging function arguments")
6394 (description "This package provides a decorator to log function arguments
6395and function call return values in a human-readable way.")
6396 (license license:asl2.0)))
6397
6398(define-public python-babel
6399 (package
6400 (name "python-babel")
6401 (version "2.16.0")
6402 (source
6403 (origin
6404 (method url-fetch)
6405 (uri (pypi-uri "babel" version))
6406 (sha256
6407 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6408 (build-system pyproject-build-system)
6409 (native-inputs
6410 (list python-freezegun
6411 python-pytest
6412 python-setuptools
6413 tzdata-for-tests))
6414 (propagated-inputs
6415 (list python-pytz))
6416 (home-page "https://babel.pocoo.org/")
6417 (synopsis
6418 "Tools for internationalizing Python applications")
6419 (description
6420 "Babel is composed of two major parts:
6421- tools to build and work with gettext message catalogs
6422- a Python interface to the CLDR (Common Locale Data Repository), providing
6423access to various locale display names, localized number and date formatting,
6424etc.")
6425 (license license:bsd-3)))
6426
6427(define-public python-bidict
6428 (package
6429 (name "python-bidict")
6430 (version "0.23.1")
6431 (source
6432 (origin
6433 (method git-fetch) ; no tests in PyPI.
6434 (uri (git-reference
6435 (url "https://github.com/jab/bidict")
6436 (commit (string-append "v" version))))
6437 (file-name (git-file-name name version))
6438 (sha256
6439 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6440 (build-system pyproject-build-system)
6441 (native-inputs
6442 (list python-pytest
6443 python-pytest-benchmark
6444 python-pytest-xdist
6445 python-setuptools
6446 python-sortedcollections
6447 python-wheel))
6448 (home-page "https://bidict.readthedocs.io")
6449 (synopsis "Bidirectional mapping library")
6450 (description "The @code{bidict} library provides several data structures
6451for working with bidirectional mappings in Python.")
6452 (license license:mpl2.0)))
6453
6454(define-public python-bip39
6455 (package
6456 (name "python-bip39")
6457 (version "0.0.2")
6458 (source
6459 (origin
6460 (method url-fetch)
6461 (uri (pypi-uri "bip39" version))
6462 (sha256
6463 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6464 (build-system pyproject-build-system)
6465 (native-inputs (list python-pytest python-setuptools))
6466 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6467 (synopsis "Self-contained and simple BIP39 implementation in Python")
6468 (description
6469 "This package provides a self-contained and simple BIP39
6470implementation written in Python. It includes a @code{bip39.py} executable.
6471
6472BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6473and a list of words that are easier to remember for humans (the
6474@emph{mnemonic}).")
6475 (license license:expat)))
6476
6477(define-public python-bitarray
6478 (package
6479 (name "python-bitarray")
6480 (version "3.4.3")
6481 (source (origin
6482 (method url-fetch)
6483 (uri (pypi-uri "bitarray" version))
6484 (sha256
6485 (base32
6486 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6487 (build-system pyproject-build-system)
6488 (arguments
6489 (list #:phases
6490 #~(modify-phases %standard-phases
6491 (replace 'check
6492 (lambda* (#:key tests? #:allow-other-keys)
6493 (when tests?
6494 ;; Step out of the source directory to avoid interference.
6495 (with-directory-excursion "/tmp"
6496 (invoke "python" "-c"
6497 "import bitarray; bitarray.test()"))))))))
6498 (native-inputs (list python-setuptools python-wheel))
6499 (home-page "https://github.com/ilanschnell/bitarray")
6500 (synopsis "Efficient arrays of booleans")
6501 (description "This package provides an object type which efficiently
6502represents an array of booleans. Bitarrays are sequence types and behave very
6503much like usual lists. Eight bits are represented by one byte in a contiguous
6504block of memory. The user can select between two representations:
6505little-endian and big-endian. All of the functionality is implemented in C.
6506Methods for accessing the machine representation are provided. This can be
6507useful when bit level access to binary files is required, such as portable
6508bitmap image files. Also, when dealing with compressed data which uses
6509variable bit length encoding, you may find this module useful.")
6510 (license license:psfl)))
6511
6512(define-public python-bitarray-2
6513 (package
6514 (inherit python-bitarray)
6515 (version "2.8.1")
6516 (source (origin
6517 (method url-fetch)
6518 (uri (pypi-uri "bitarray" version))
6519 (sha256
6520 (base32
6521 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6522
6523(define-public python-boolean.py
6524 (package
6525 (name "python-boolean.py")
6526 (version "5.0")
6527 (source
6528 (origin
6529 (method url-fetch)
6530 (uri (pypi-uri "boolean_py" version))
6531 (sha256
6532 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6533 (build-system pyproject-build-system)
6534 (native-inputs (list python-pytest python-setuptools python-wheel))
6535 (home-page "https://github.com/bastikr/boolean.py")
6536 (synopsis "Boolean algebra in one Python module")
6537 (description
6538 "This is a small Python library that implements boolean algebra.
6539It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6540@code{Symbol} class that can take on one of these two values. Calculations
6541are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6542compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6543Expressions are constructed from parsed strings or directly in Python.")
6544 (license license:bsd-2)))
6545
6546(define-public python-h5netcdf
6547 (package
6548 (name "python-h5netcdf")
6549 (version "1.3.0")
6550 (source
6551 (origin
6552 (method url-fetch)
6553 (uri (pypi-uri "h5netcdf" version))
6554 (sha256
6555 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6556 (build-system pyproject-build-system)
6557 (native-inputs
6558 (list python-netcdf4
6559 python-pytest
6560 python-setuptools
6561 python-setuptools-scm
6562 python-wheel))
6563 (propagated-inputs
6564 (list python-h5py python-packaging))
6565 (home-page "https://h5netcdf.org")
6566 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6567 (description "This package provides a Python interface for the netCDF4
6568file-format that reads and writes local or remote HDF5 files directly via
6569@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6570https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6571library.")
6572 (license license:bsd-3)))
6573
6574(define-public python-h5py
6575 ;; TODO: Move to (gnu packages python-science) or maths, prevent import mpi
6576 ;; module here.
6577 (package
6578 (name "python-h5py")
6579 (version "3.16.0")
6580 (source
6581 (origin
6582 (method git-fetch)
6583 (uri (git-reference
6584 (url "https://github.com/h5py/h5py")
6585 (commit version)))
6586 (file-name (git-file-name name version))
6587 (sha256
6588 (base32 "1s5nqhylp7daizljnwr8bwwsxd92kqgz2106vi9q1c1q920ihsyy"))))
6589 (build-system pyproject-build-system)
6590 (arguments
6591 (list
6592 ;; tests: 849 passed, 50 skipped
6593 #:test-flags
6594 #~(list "--pyargs" "h5py")
6595 #:phases
6596 #~(modify-phases %standard-phases
6597 (add-after 'unpack 'set-hdf5-options
6598 ;; For custom installation with Parallel HDF5 see:
6599 ;; <https://docs.h5py.org/en/latest/build.html#custom-installation>.
6600 (lambda _
6601 ;; XXX: Check if we need this:
6602 ;; <https://github.com/h5py/h5py/issues/2560>.
6603 ;; (setenv "H5PY_SETUP_REQUIRES" "0")
6604 ;;
6605 ;; Project is part of h5py, but availalbe at
6606 ;; <https://oldhome.schmorp.de/marc/liblzf.html>, version 3.6
6607 ;; was released on 2019.
6608 ;; (setenv "H5PY_SYSTEM_LZF" "1")
6609 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
6610 (setenv "HDF5_MPI" "ON")))
6611 (add-before 'check 'pre-check
6612 (lambda _
6613 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6614 (delete-file-recursively "h5py"))))))
6615 (native-inputs
6616 (list pkg-config
6617 python-cython
6618 python-pkgconfig
6619 python-pytest
6620 python-pytest-mpi
6621 python-setuptools))
6622 (inputs
6623 (list hdf5-parallel-openmpi))
6624 (propagated-inputs
6625 (list python-mpi4py
6626 python-numpy))
6627 (home-page "https://www.h5py.org/")
6628 (synopsis "Read and write HDF5 files from Python")
6629 (description
6630 "The h5py package provides both a high- and low-level interface to the
6631HDF5 library from Python. The low-level interface is intended to be a
6632complete wrapping of the HDF5 API, while the high-level component supports
6633access to HDF5 files, datasets and groups using established Python and NumPy
6634concepts.")
6635 (license license:bsd-3)))
6636
6637(define-public python-hdf5storage
6638 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6639 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6640 ;;
6641 ;; This package probably is sun setting, consider to remove when stops
6642 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6643 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6644 (revision "0"))
6645 (package
6646 (name "python-hdf5storage")
6647 (version (git-version "0.1.19" revision commit))
6648 (source
6649 (origin
6650 (method git-fetch)
6651 (uri (git-reference
6652 (url "https://github.com/frejanordsiek/hdf5storage")
6653 (commit commit)))
6654 (file-name (git-file-name name version))
6655 (sha256
6656 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6657 (build-system pyproject-build-system)
6658 (arguments
6659 ;; Started failing with the move to [email protected], due to modules changes.
6660 (list
6661 #:test-flags
6662 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6663 (native-inputs
6664 (list python-pytest
6665 python-setuptools))
6666 (propagated-inputs
6667 (list python-h5py
6668 python-numpy-1))
6669 (home-page "https://github.com/frejanordsiek/hdf5storage")
6670 (synopsis "Read and write Python data types from and to HDF5 files")
6671 (description
6672 "This Python package provides high-level utilities to read and write a
6673variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6674formatted files. This package also provides support for MATLAB MAT v7.3
6675formatted files, which are HDF5 files with a different extension and some
6676extra metadata. Because HDF5 and MAT files might need to be read from
6677untrusted sources, pickling is avoided in this package.")
6678 (license license:bsd-2))))
6679
6680(define-public python-prctl
6681 (package
6682 (name "python-prctl")
6683 (version "1.8.1")
6684 (source (origin
6685 (method url-fetch)
6686 (uri (pypi-uri "python-prctl" version))
6687 (sha256
6688 (base32
6689 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6690 (build-system pyproject-build-system)
6691 (arguments
6692 (list #:test-backend ''custom
6693 #:test-flags ''("test_prctl.py")
6694 #:phases
6695 #~(modify-phases %standard-phases
6696 (add-after 'unpack 'patch-tests
6697 (lambda _
6698 (substitute* "test_prctl.py"
6699 ;; actual suffix used in cpython build output dir name
6700 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6701 ;; test_no_new_privs assumes existence of /bin/ping, but
6702 ;; can never run anyway due to it requiring setuid ping.
6703 ;; just short circuit it instead.
6704 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6705 (inputs (list libcap))
6706 (native-inputs (list python-setuptools))
6707 (supported-systems (filter target-linux? %supported-systems))
6708 (home-page "https://pythonhosted.org/python-prctl")
6709 (synopsis "Linux capabilities library")
6710 (description "This package provides a Python library for controlling Linux
6711capabilities and attributes, similar to the prctl syscall.")
6712 (license license:gpl3+)))
6713
6714(define-public python-pyhimitsu
6715 (package
6716 (name "python-pyhimitsu")
6717 (version "0.0.9")
6718 (source (origin
6719 (method url-fetch)
6720 (uri (pypi-uri "py_himitsu" version))
6721 (sha256
6722 (base32
6723 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6724 (build-system pyproject-build-system)
6725 (arguments
6726 (list
6727 #:phases
6728 #~(modify-phases %standard-phases
6729 (replace 'check
6730 (lambda _
6731 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6732 (invoke "make" "check"))))))
6733 (native-inputs (list python-hatchling))
6734 (propagated-inputs (list python-pyxdg))
6735 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6736 (synopsis "Himitsu client protocol implementation in Python")
6737 (description "This package provides a library for writing Himitsu client
6738programs in Python.")
6739 (license license:expat)))
6740
6741(define-public python-hjson
6742 ;; Using commit from master branch as the PyPI version does not contain
6743 ;; the hjson/tests/ directory.
6744 (let ((revision "0")
6745 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6746 (package
6747 (name "python-hjson")
6748 (version (git-version "3.1.0" revision commit))
6749 (source (origin
6750 (method git-fetch)
6751 (uri (git-reference
6752 (url "https://github.com/hjson/hjson-py")
6753 (commit commit)))
6754 (file-name (git-file-name name version))
6755 (sha256
6756 (base32
6757 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6758 (modules '((guix build utils)))
6759 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6760 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6761 (snippet #~(substitute* "hjson/__init__.py"
6762 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6763 "{'foo': 'a', 'bar': 1}")))))
6764 (build-system pyproject-build-system)
6765 (native-inputs (list python-setuptools python-wheel))
6766 (home-page "https://github.com/hjson/hjson-py")
6767 (synopsis "Python package to parse HJSON documents")
6768 (description "This package provides a Python library and a command-line
6769interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6770 (license license:expat))))
6771
6772(define-public python-hnswlib
6773 (package
6774 (name "python-hnswlib")
6775 (version "0.8.0")
6776 (source
6777 (origin
6778 (method git-fetch)
6779 (uri (git-reference
6780 (url "https://github.com/nmslib/hnswlib")
6781 (commit (string-append "v" version))))
6782 (file-name (git-file-name name version))
6783 (sha256
6784 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6785 (build-system pyproject-build-system)
6786 (arguments
6787 (list
6788 #:phases
6789 #~(modify-phases %standard-phases
6790 (add-after 'unpack 'disable-native-optimization
6791 (lambda _
6792 (substitute* "setup.py"
6793 ((", '-march=native'")
6794 "")))))))
6795 (native-inputs
6796 (list pybind11-2
6797 python-pytest
6798 python-setuptools))
6799 (propagated-inputs
6800 (list python-numpy))
6801 (home-page "https://github.com/nmslib/hnswlib")
6802 (synopsis "Fast approximate nearest neighbor search")
6803 (description "Hnswlib is a header-only C++ implementation of fast
6804approximate nearest neighbor search with Python bindings.")
6805 (license license:asl2.0)))
6806
6807(define-public python-pylatex
6808 (package
6809 (name "python-pylatex")
6810 (version "1.4.2")
6811 (source
6812 (origin
6813 (method git-fetch)
6814 (uri (git-reference
6815 (url "https://github.com/JelteF/PyLaTeX")
6816 (commit (string-append "v" version))))
6817 (file-name (git-file-name name version))
6818 (sha256
6819 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6820 (build-system pyproject-build-system)
6821 (arguments
6822 (list #:phases
6823 #~(modify-phases %standard-phases
6824 ;; some tests attempt to create directories
6825 (add-before 'check 'set-home-directory
6826 (lambda _
6827 (setenv "HOME" "/tmp"))))))
6828 (propagated-inputs (list python-ordered-set))
6829 (native-inputs (list python-matplotlib
6830 python-pytest
6831 python-quantities
6832 python-setuptools
6833 (texlive-local-tree
6834 (list texlive-lastpage
6835 texlive-latexmk
6836 texlive-parskip))))
6837 (home-page "https://github.com/JelteF/PyLaTeX")
6838 (synopsis "Library for creating LaTeX files and snippets")
6839 (description
6840 "This package provides a Python library for creating LaTeX files and
6841snippets.")
6842 (license license:expat)))
6843
6844(define-public python-pylatexenc
6845 (package
6846 (name "python-pylatexenc")
6847 (version "2.10")
6848 (source
6849 (origin
6850 (method url-fetch)
6851 (uri (pypi-uri "pylatexenc" version))
6852 (sha256
6853 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6854 (build-system pyproject-build-system)
6855 (native-inputs (list python-pytest python-setuptools python-wheel))
6856 (home-page "https://github.com/phfaist/pylatexenc")
6857 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6858 (description
6859 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6860Unicode-to-LaTeX conversion.")
6861 (license license:expat)))
6862
6863(define-public python-lsp-black
6864 (package
6865 (name "python-lsp-black")
6866 (version "2.0.0")
6867 (source
6868 (origin
6869 (method git-fetch)
6870 (uri (git-reference
6871 (url "https://github.com/python-lsp/python-lsp-black")
6872 (commit (string-append "v" version))))
6873 (file-name (git-file-name name version))
6874 (sha256
6875 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6876 (build-system pyproject-build-system)
6877 (arguments
6878 ;; The python version is too old for these tests to pass properly.
6879 (list #:test-flags
6880 `'("-k" ,(string-append
6881 "not test_pylsp_format_document_syntax_error"
6882 " and not test_pylsp_format_range_syntax_error"
6883 " and not test_load_config_defaults"
6884 " and not test_load_config_with_skip_options"))))
6885 (propagated-inputs
6886 (list python-black python-lsp-server python-tomli))
6887 (native-inputs
6888 (list python-pytest python-setuptools python-wheel))
6889 (home-page "https://github.com/python-lsp/python-lsp-black")
6890 (synopsis "Black plugin for the Python LSP Server")
6891 (description "This package provides a plugin with support for the
6892@code{python-black} formatter for the Python LSP Server.")
6893 (license license:expat)))
6894
6895(define-public python-pylsp-mypy
6896 (package
6897 (name "python-pylsp-mypy")
6898 (version "0.7.1")
6899 (source
6900 (origin
6901 ;; "The newest version on PyPI is indeed not published on GitHub."
6902 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6903 (method url-fetch)
6904 (uri (pypi-uri "pylsp_mypy" version))
6905 (sha256
6906 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6907 (build-system pyproject-build-system)
6908 (native-inputs (list python-pytest python-setuptools))
6909 (propagated-inputs (list python-mypy python-lsp-server))
6910 (home-page "https://github.com/python-lsp/pylsp-mypy")
6911 (synopsis "Mypy linter for the Python LSP Server")
6912 (description
6913 "Mypy linter integration for use with @code{python-lsp-server}.")
6914 (license license:expat)))
6915
6916(define-public python-sh
6917 (package
6918 (name "python-sh")
6919 (version "2.2.2")
6920 (source
6921 (origin
6922 (method url-fetch)
6923 (uri (pypi-uri "sh" version))
6924 (sha256
6925 (base32
6926 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6927 (build-system pyproject-build-system)
6928 (arguments
6929 (list
6930 #:test-flags
6931 #~(list "-k" (string-join
6932 ;; These tests are shaky.
6933 (list "not test_bad_sig_raise_exception"
6934 "test_doesnt_execute_directories"
6935 "test_environment"
6936 "test_ok_code_ignores_bad_sig_exception"
6937 "test_unicode_path")
6938 " and not ")
6939 "tests")
6940 #:phases
6941 #~(modify-phases %standard-phases
6942 (add-before 'check 'pre-check
6943 (lambda _
6944 (setenv "HOME" "/tmp"))))))
6945 (native-inputs
6946 (list python-poetry-core python-pytest))
6947 (home-page "https://github.com/amoffat/sh")
6948 (synopsis "Python subprocess replacement")
6949 (description "This package provides a replacement for Python's
6950@code{subprocess} feature.")
6951 (license license:expat)))
6952
6953;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6954;; that is updated.
6955(define-public python-sh-1
6956 (package
6957 (inherit python-sh)
6958 (version "1.14.2")
6959 (source
6960 (origin
6961 (method url-fetch)
6962 (uri (pypi-uri "sh" version))
6963 (sha256
6964 (base32
6965 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6966 (arguments
6967 '(#:phases
6968 (modify-phases %standard-phases
6969 (replace 'check
6970 (lambda _
6971 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6972 (setenv "HOME" "/tmp")
6973 (invoke "python" "sh.py" "test"))))))
6974 (native-inputs
6975 (list python-setuptools))))
6976
6977(define-public python-cftime
6978 (package
6979 (name "python-cftime")
6980 (version "1.6.5")
6981 (source
6982 (origin
6983 (method url-fetch)
6984 (uri (pypi-uri "cftime" version))
6985 (sha256
6986 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6987 (build-system pyproject-build-system)
6988 (propagated-inputs
6989 (list python-numpy))
6990 (native-inputs
6991 (list python-cython
6992 python-pytest
6993 python-setuptools
6994 python-wheel))
6995 (home-page "https://unidata.github.io/cftime/")
6996 (synopsis "Library for time handling")
6997 (description
6998 "This package provides time-handling functionality that used to be part
6999of the netcdf4 package before.")
7000 (license license:expat)))
7001
7002(define-public python-netcdf4
7003 ;; TODO: Move to (gnu packages python-science).
7004 (package
7005 (name "python-netcdf4")
7006 (version "1.7.4")
7007 (source
7008 (origin
7009 (method git-fetch)
7010 (uri (git-reference
7011 (url "https://github.com/Unidata/netcdf4-python")
7012 (commit (string-append "v" version "rel"))))
7013 (file-name (git-file-name name version))
7014 (sha256
7015 (base32 "0lmapnqc4rivv0nggm8865xpni1gbcg6dc7khf5r0p16jk8gv41c"))))
7016 (build-system pyproject-build-system)
7017 (arguments
7018 (list
7019 ;; tests: Ran 115 tests
7020 #:phases
7021 #~(modify-phases %standard-phases
7022 (add-before 'build 'set-configure-flags
7023 (lambda _
7024 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
7025 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
7026 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
7027 (setenv "USE_NCCONFIG" "0")))
7028 (replace 'check
7029 (lambda* (#:key tests? #:allow-other-keys)
7030 (when tests?
7031 (with-directory-excursion "test"
7032 (setenv "NO_NET" "1")
7033 (setenv "NO_CDL" "1")
7034 (invoke "python" "run_all.py"))))))))
7035 (native-inputs
7036 (list python-cython
7037 python-packaging
7038 python-pytest
7039 python-setuptools
7040 python-setuptools-scm
7041 python-typing-extensions))
7042 (inputs
7043 ;; After python-h5py was built with MPI support it can't be used together
7044 ;; with hdf5 and netcdf built without MPI support tests and load may
7045 ;; brake when python-netcdf4 and python-h5py are used together.
7046 (list netcdf-parallel-openmpi
7047 hdf5-parallel-openmpi
7048 zlib))
7049 (propagated-inputs
7050 (list python-certifi
7051 python-cftime
7052 python-mpi4py
7053 python-numpy))
7054 (home-page "https://github.com/Unidata/netcdf4-python")
7055 (synopsis "Python/numpy interface to the netCDF library")
7056 (description "Netcdf4-python is a Python interface to the netCDF C
7057library. netCDF version 4 has many features not found in earlier
7058versions of the library and is implemented on top of HDF5. This module
7059can read and write files in both the new netCDF 4 and the old netCDF 3
7060format, and can create files that are readable by HDF5 clients. The
7061API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
7062to users of that module.")
7063 ;; The software is mainly ISC, but includes some files covered
7064 ;; by the Expat license.
7065 (license (list license:isc license:expat))))
7066
7067(define-public python-ncclient
7068 (package
7069 (name "python-ncclient")
7070 (version "0.6.19")
7071 (source
7072 (origin
7073 (method git-fetch) ;no tests in PyPI release
7074 (uri (git-reference
7075 (url "https://github.com/ncclient/ncclient")
7076 (commit (string-append "v" version))))
7077 (file-name (git-file-name name version))
7078 (sha256
7079 (base32
7080 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
7081 (build-system pyproject-build-system)
7082 (native-inputs
7083 (list python-pytest
7084 python-setuptools
7085 python-wheel))
7086 (propagated-inputs
7087 (list python-lxml
7088 python-paramiko))
7089 (home-page "https://github.com/ncclient/ncclient")
7090 (synopsis "Python library for NETCONF clients")
7091 (description "@code{ncclient} is a Python library that facilitates
7092client-side scripting and application development around the NETCONF
7093protocol.")
7094 (license license:asl2.0)))
7095
7096(define-public python-ncls
7097 (package
7098 (name "python-ncls")
7099 (version "0.0.68")
7100 (source (origin
7101 (method url-fetch)
7102 (uri (pypi-uri "ncls" version))
7103 (sha256
7104 (base32
7105 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
7106 (build-system pyproject-build-system)
7107 (arguments
7108 ;; Those tests fail with warnings (not errors) for the Numpy update.
7109 ;; Remove it at next python-team iteration.
7110 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
7111 "--ignore=examples/test_find_overlap_list.py")))
7112 (native-inputs (list python-cython
7113 python-pandas
7114 python-pytest
7115 python-setuptools
7116 python-wheel))
7117 (propagated-inputs (list python-numpy))
7118 (home-page "https://github.com/endrebak/ncls")
7119 (synopsis "Nested containment list data structure")
7120 (description
7121 "This package provides a wrapper for the nested containment list data
7122structure. It is a static interval-tree that is fast for both construction
7123and lookups.")
7124 (license license:bsd-3)))
7125
7126(define-public python-license-expression
7127 (package
7128 (name "python-license-expression")
7129 (version "30.1.0")
7130 (source
7131 (origin
7132 (method url-fetch)
7133 (uri (pypi-uri "license-expression" version))
7134 (sha256
7135 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
7136 (build-system pyproject-build-system)
7137 (native-inputs
7138 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
7139 (propagated-inputs
7140 (list python-boolean.py))
7141 (home-page "https://github.com/nexB/license-expression")
7142 (synopsis "Apply boolean logic to license expressions")
7143 (description
7144 "This Python module defines a tiny language to evaluate and compare
7145license expressions using boolean logic. Logical combinations of licenses can
7146be tested for equality, containment, and equivalence. They can be normalised
7147and simplified. It supports SPDX license expressions as well as other naming
7148conventions and aliases in the same expression.")
7149 (license license:gpl2+)))
7150
7151(define-public python-limits
7152 (package
7153 (name "python-limits")
7154 (version "5.8.0")
7155 (source
7156 (origin
7157 (method git-fetch)
7158 (uri (git-reference
7159 (url "https://github.com/alisaifee/limits")
7160 (commit version)))
7161 (file-name (git-file-name name version))
7162 (sha256
7163 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
7164 (build-system pyproject-build-system)
7165 (arguments
7166 (list
7167 ;; tests: 155 passed, 620 deselected
7168 #:test-flags
7169 #~(list
7170 ;; The test suite spawns storages in Docker.
7171 "-k" (simple-format #f "not (~a)"
7172 (string-join
7173 '("lazy_dependency" ;importing redis
7174 "memcache"
7175 "mongo"
7176 "redis"
7177 "valkey")
7178 " or "))
7179 "--ignore=tests/benchmarks")
7180 #:phases
7181 #~(modify-phases %standard-phases
7182 (add-before 'check 'adjust-tests
7183 (lambda _
7184 (substitute* "pytest.ini"
7185 ((".*--cov=.*") "")
7186 ((".*-K.*") ""))
7187 (substitute* (find-files "tests" "\\.py$")
7188 (("import pymemcache.*") "")
7189 (("import pymongo.*") "")
7190 (("import redis.*") "")
7191 (("import valkey.*") "")
7192 ;; Lazy fixtures are only used for storages.
7193 (("from pytest_lazy_fixtures import lf.*") "")
7194 (("lf\\((.+)\\)" all fixture) fixture))
7195 (substitute* "tests/test_storage.py"
7196 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
7197 (propagated-inputs (list python-deprecated python-packaging))
7198 (native-inputs
7199 (list python-flaky
7200 python-hatch-vcs
7201 python-hatchling
7202 python-pytest
7203 python-pytest-asyncio))
7204 (home-page "https://limits.readthedocs.io/")
7205 (synopsis "Rate limiting utilities")
7206 (description
7207 "This package provides a Python library to perform rate limiting with
7208commonly used storage backends.")
7209 (license license:expat)))
7210
7211(define-public python-fb-re2
7212 (package
7213 (name "python-fb-re2")
7214 (version "1.0.7")
7215 (source
7216 (origin
7217 (method git-fetch)
7218 (uri (git-reference
7219 (url "https://github.com/facebook/pyre2")
7220 (commit (string-append "v" version))))
7221 (file-name (git-file-name name version))
7222 (sha256
7223 (base32
7224 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
7225 (build-system pyproject-build-system)
7226 (arguments
7227 (list
7228 #:phases
7229 #~(modify-phases %standard-phases
7230 (add-after 'unpack 'fix-tests
7231 (lambda _
7232 (substitute* "tests/test_match.py"
7233 (("assertRaisesRegexp")
7234 "assertRaisesRegex")))))))
7235 (native-inputs
7236 (list python-pytest python-setuptools))
7237 (inputs
7238 (list re2))
7239 (home-page "https://github.com/facebook/pyre2")
7240 (synopsis "Python wrapper for RE2")
7241 (description "This package provides a Python extension that wraps Google's
7242RE2 regular expression library. It implements many of the features of
7243Python's built-in @code{re} module with compatible interfaces.")
7244 (license license:bsd-3)))
7245
7246(define-public python-filelock
7247 ;; Try to update simultaneously with the bootstrap version in
7248 ;; (gnu packages python-build).
7249 (package
7250 (name "python-filelock")
7251 (version "3.16.1")
7252 (source
7253 (origin
7254 (method url-fetch)
7255 (uri (pypi-uri "filelock" version))
7256 (sha256
7257 (base32
7258 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7259 (build-system pyproject-build-system)
7260 (arguments
7261 (list
7262 ;; Break cycle with virtualenv.
7263 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7264 (native-inputs
7265 (list python-hatch-vcs
7266 python-hatchling
7267 python-pytest
7268 python-pytest-asyncio
7269 python-pytest-mock
7270 python-setuptools-scm))
7271 (home-page "https://github.com/tox-dev/py-filelock")
7272 (synopsis "Platform independent file lock")
7273 (description "@code{filelock} contains a single module implementing
7274a platform independent file lock in Python, which provides a simple way of
7275inter-process communication.")
7276 (license license:unlicense)))
7277
7278(define-public python-filelock-next
7279 (package
7280 (inherit python-filelock)
7281 (name "python-filelock")
7282 (version "3.20.0")
7283 (source
7284 (origin
7285 (method url-fetch)
7286 (uri (pypi-uri "filelock" version))
7287 (sha256
7288 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7289 (native-inputs
7290 (list python-hatch-vcs
7291 python-hatchling
7292 python-pytest
7293 python-pytest-asyncio
7294 python-pytest-mock
7295 python-pytest-timeout))))
7296
7297(define-public python-seedir
7298 (package
7299 (name "python-seedir")
7300 (version "0.5.0")
7301 (source
7302 (origin
7303 (method url-fetch)
7304 (uri (pypi-uri "seedir" version))
7305 (sha256
7306 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7307 (build-system pyproject-build-system)
7308 (propagated-inputs (list python-natsort))
7309 (native-inputs (list python-pytest python-setuptools python-wheel))
7310 (home-page "https://github.com/earnestt1234/seedir")
7311 (synopsis
7312 "Package for creating, editing, and reading folder tree diagrams.")
7313 (description
7314 "This is a package for creating, editing, and reading folder tree
7315diagrams.")
7316 (license license:expat)))
7317
7318(define-public python-semantic-version
7319 (package
7320 (name "python-semantic-version")
7321 (version "2.10.0")
7322 (source
7323 (origin
7324 (method url-fetch)
7325 (uri (pypi-uri "semantic_version" version))
7326 (sha256
7327 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7328 (build-system pyproject-build-system)
7329 (arguments (list #:test-backend #~'nose2))
7330 (native-inputs
7331 (list python-nose2
7332 python-setuptools))
7333 (home-page "https://github.com/rbarrois/python-semanticversion")
7334 (synopsis "Semantic versioning module for Python")
7335 (description
7336 "The @code{semantic_version} class is a small library for handling
7337@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7338
7339It can compare versions, generate a new version that represents a bump in one
7340of the version levels, and check whether any given string is a proper semantic
7341version identifier.")
7342 (license license:bsd-3)))
7343
7344(define-public python-serpent
7345 (package
7346 (name "python-serpent")
7347 (version "1.41")
7348 (source
7349 (origin
7350 (method git-fetch)
7351 (uri (git-reference
7352 (url "https://github.com/irmen/Serpent")
7353 (commit (string-append "serpent-" version))))
7354 (file-name (git-file-name name version))
7355 (sha256
7356 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7357 (build-system pyproject-build-system)
7358 (arguments (list #:test-backend #~'unittest
7359 #:test-flags #~(list "discover" "-s" "tests")))
7360 (native-inputs
7361 (list python-attrs python-pytz python-setuptools))
7362 (home-page "https://github.com/irmen/Serpent")
7363 (synopsis "Serializer for literal Python expressions")
7364 (description
7365 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7366serialization. It serializes an object tree into bytes (an utf-8 encoded
7367string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7368to rebuild the original object tree.
7369
7370Because only safe literals are encoded, it is safe to send serpent data to
7371other machines, such as over the network.")
7372 (license license:expat)))
7373
7374(define-public python-setuptools-declarative-requirements
7375 (package
7376 (name "python-setuptools-declarative-requirements")
7377 (version "1.3.0")
7378 (source
7379 (origin
7380 (method url-fetch)
7381 (uri (pypi-uri "setuptools-declarative-requirements" version))
7382 (sha256
7383 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7384 (build-system pyproject-build-system)
7385 (arguments
7386 (list #:tests? #f)) ;require dated inputs
7387 (native-inputs
7388 (list python-setuptools-scm))
7389 (propagated-inputs
7390 (list python-setuptools))
7391 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7392 (synopsis "File support for setuptools declarative setup.cfg")
7393 (description
7394 "This package provides file support for setuptools declarative
7395@code{setup.cfg}.")
7396 (license license:asl2.0)))
7397
7398(define-public python-humanfriendly
7399 (package
7400 (name "python-humanfriendly")
7401 (version "10.0")
7402 (source
7403 (origin
7404 (method git-fetch)
7405 (uri (git-reference
7406 (url "https://github.com/xolox/python-humanfriendly")
7407 (commit version)))
7408 (file-name (git-file-name name version))
7409 (sha256
7410 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7411 (build-system pyproject-build-system)
7412 (arguments
7413 (list
7414 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7415 #:tests? #f))
7416 (native-inputs (list python-setuptools))
7417 (home-page "https://humanfriendly.readthedocs.io")
7418 (synopsis "Human-friendly input and output in Python")
7419 (description
7420 "The functions and classes in @code{humanfriendly} can be used to make
7421text interfaces more user-friendly. It includes tools to parse and format
7422numbers, file sizes, and timespans, timers for long-running operations, menus
7423to allow the user to choose from a list of options, and terminal interaction
7424helpers.")
7425 (license license:expat)))
7426
7427(define-public python-calver
7428 (package
7429 (name "python-calver")
7430 (version "2022.06.26")
7431 (source
7432 (origin
7433 (method git-fetch)
7434 (uri (git-reference
7435 (url "https://github.com/di/calver")
7436 (commit version)))
7437 (file-name (git-file-name name version))
7438 (sha256
7439 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7440 (build-system pyproject-build-system)
7441 (native-inputs
7442 (list python-pretend
7443 python-pytest
7444 python-setuptools
7445 python-wheel))
7446 (home-page "https://github.com/di/calver")
7447 (synopsis "Setuptools extension for CalVer package versions")
7448 (description
7449 "The calver package is a setuptools extension for automatically defining
7450your Python package version as a calendar version.")
7451 (license license:asl2.0)))
7452
7453(define-public python-can
7454 (package
7455 (name "python-can")
7456 (version "4.6.1")
7457 (source
7458 (origin
7459 (method git-fetch)
7460 (uri (git-reference
7461 (url "https://github.com/hardbyte/python-can")
7462 (commit (string-append "v" version))))
7463 (file-name (git-file-name name version))
7464 (sha256
7465 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7466 (build-system pyproject-build-system)
7467 (arguments
7468 (list
7469 #:test-flags
7470 #~(list
7471 ;; TODO: Check if it could be packed:
7472 ;; https://github.com/projectgus/python-canalystii
7473 ;;
7474 ;; Disable tests which require specific CAN drivers we have no
7475 ;; package for in Guix.
7476 "--ignore=test/test_interface_canalystii.py"
7477 ;; These tests fail with "OSError: [Errno 19] No such device".
7478 "-k" "not BasicTestUdpMulticastBusIPv")
7479 #:phases
7480 #~(modify-phases %standard-phases
7481 (add-after 'unpack 'relax-requirements
7482 (lambda _
7483 (substitute* "pyproject.toml"
7484 (("\"wrapt~=.*\"")
7485 "\"wrapt\"")))))))
7486 (propagated-inputs (list python-packaging python-wrapt))
7487 (native-inputs
7488 (list ;; python-canalystii ; Not packed yet
7489 python-hypothesis
7490 python-mock
7491 python-parameterized
7492 python-pyserial
7493 python-pytest
7494 python-pytest-timeout
7495 python-setuptools
7496 python-setuptools-scm))
7497 (home-page "https://github.com/hardbyte/python-can")
7498 (synopsis "Controller Area Network (CAN) interface module for Python")
7499 (description
7500 "This package defines the @code{can} module, which provides controller
7501area network (CAN) support for Python developers; providing common
7502abstractions to different hardware devices, and a suite of utilities for
7503sending and receiving messages on a CAN bus.")
7504 (license license:lgpl3+)))
7505
7506(define-public python-canmatrix
7507 (package
7508 (name "python-canmatrix")
7509 (version "1.2")
7510 (source
7511 (origin
7512 (method git-fetch) ; no tests data in PyPi package
7513 (uri (git-reference
7514 (url "https://github.com/ebroecker/canmatrix")
7515 (commit version)))
7516 (file-name (git-file-name name version))
7517 (sha256
7518 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7519 (build-system pyproject-build-system)
7520 (native-inputs
7521 (list python-pytest
7522 python-pytest-timeout
7523 python-setuptools
7524 python-wheel))
7525 (propagated-inputs
7526 (list python-attrs
7527 python-canopen
7528 python-click
7529 ;; python-ldfparser
7530 python-lxml
7531 python-openpyxl
7532 python-pyyaml
7533 python-xlrd
7534 python-xlwt))
7535 (home-page "https://github.com/ebroecker/canmatrix")
7536 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7537 (description
7538 "This package implements a @acronym{CAN, Controller Area Network} matrix
7539object in Python which describes the CAN-communication and its needed objects
7540such as board units, frames, signals, and values. It also includes two
7541command-line tools (@command{canconvert} and @command{cancompare}) for
7542converting and comparing CAN databases.")
7543 (license license:bsd-2)))
7544
7545(define-public python-canopen
7546 (package
7547 (name "python-canopen")
7548 (version "2.4.1")
7549 (source
7550 (origin
7551 (method git-fetch)
7552 (uri (git-reference
7553 (url "https://github.com/canopen-python/canopen")
7554 (commit (string-append "v" version))))
7555 (file-name (git-file-name name version))
7556 (sha256
7557 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7558 (build-system pyproject-build-system)
7559 (native-inputs (list python-pytest python-setuptools))
7560 (propagated-inputs (list python-can))
7561 (home-page "https://github.com/canopen-python/canopen")
7562 (synopsis "CANopen stack implementation")
7563 (description
7564 "This package provides a Python implementation of the
7565@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7566@acronym{CANs, controller-area networks}. The aim of the project is to
7567support the most common parts of the CiA 301 standard in a simple
7568Pythonic interface. It is mainly targeted for testing and automation
7569tasks rather than a standard compliant master implementation.")
7570 (license license:expat)))
7571
7572(define-public python-diskcache
7573 (package
7574 (name "python-diskcache")
7575 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7576 ;; Django fixing failing tests.
7577 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7578 (revision . "0")))
7579 (version (git-version "5.6.3"
7580 (assoc-ref properties 'revision)
7581 (assoc-ref properties 'commit)))
7582 (source
7583 (origin
7584 (method git-fetch)
7585 (uri (git-reference
7586 (url "https://github.com/grantjenks/python-diskcache")
7587 (commit (assoc-ref properties 'commit))))
7588 (file-name (git-file-name name version))
7589 (sha256
7590 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7591 (build-system pyproject-build-system)
7592 (arguments
7593 (list
7594 #:phases
7595 #~(modify-phases %standard-phases
7596 (add-after 'unpack 'fix-pytest-config
7597 (lambda _
7598 ;; Prevent full threads utilization.
7599 (substitute* "tox.ini"
7600 (("-n auto") "")))))))
7601 (native-inputs
7602 (list python-django
7603 python-pytest
7604 python-setuptools))
7605 (home-page "https://www.grantjenks.com/docs/diskcache/")
7606 (synopsis "Disk and file backed cache library")
7607 (description "DiskCache is a disk and file backed persistent cache.")
7608 (license license:asl2.0)))
7609
7610(define-public python-optparse-pretty
7611 (package
7612 (name "python-optparse-pretty")
7613 (version "0.1.1")
7614 (source
7615 (origin
7616 (method url-fetch)
7617 (uri (pypi-uri "optparse-pretty" version))
7618 (sha256
7619 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7620 (build-system pyproject-build-system)
7621 (arguments (list #:tests? #false)) ;There are none
7622 (native-inputs (list python-setuptools python-wheel))
7623 (home-page "https://github.com/gvalkov/optparse-pretty")
7624 (synopsis "Compact help formatter for optparse")
7625 (description
7626 "This module provides two help formatters for optparse. They provide
7627terser and more customizable option formatting in comparison to the default
7628help formatter.")
7629 (license license:bsd-3)))
7630
7631(define-public python-orjson
7632 (package
7633 (name "python-orjson")
7634 (version "3.9.7")
7635 (source (origin
7636 (method url-fetch)
7637 (uri (pypi-uri "orjson" version))
7638 (sha256
7639 (base32
7640 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7641 (build-system cargo-build-system)
7642 (arguments
7643 (list
7644 #:imported-modules `(,@%cargo-build-system-modules
7645 ,@%pyproject-build-system-modules)
7646 #:modules '((guix build cargo-build-system)
7647 ((guix build pyproject-build-system) #:prefix py:)
7648 (guix build utils))
7649 #:phases
7650 #~(modify-phases %standard-phases
7651 (add-after 'build 'build-python-module
7652 (assoc-ref py:%standard-phases 'build))
7653 (add-after 'build-python-module 'install-python-module
7654 (assoc-ref py:%standard-phases 'install)))
7655 #:install-source? #false))
7656 (inputs
7657 (cons maturin (cargo-inputs 'python-orjson)))
7658 (native-inputs
7659 (list python-wrapper))
7660 (home-page "https://github.com/ijl/orjson")
7661 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7662 (description "Orjson is a fast, correct JSON library for Python. It
7663benchmarks as the fastest Python library for JSON and is more correct than the
7664standard @code{json} library or other third-party libraries. It serializes
7665dataclass, datetime, numpy, and UUID instances natively.")
7666 ;; Either of these licenses
7667 (license (list license:asl2.0 license:expat))))
7668
7669(define-public python-overrides
7670 (package
7671 (name "python-overrides")
7672 (version "7.7.0")
7673 (source
7674 (origin
7675 (method url-fetch)
7676 (uri (pypi-uri "overrides" version))
7677 (sha256
7678 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7679 (build-system pyproject-build-system)
7680 (native-inputs (list python-pytest python-setuptools python-wheel))
7681 (home-page "https://github.com/mkorpela/overrides")
7682 (synopsis "Decorator to detect mismatch when overriding a method")
7683 (description
7684 "This package provides a decorator to automatically detect mismatch when
7685overriding a method.")
7686 (license license:asl2.0)))
7687
7688(define-public python-argparse-addons
7689 (package
7690 (name "python-argparse-addons")
7691 (version "0.12.0")
7692 (source
7693 (origin
7694 (method url-fetch)
7695 (uri (pypi-uri "argparse_addons" version))
7696 (sha256
7697 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7698 (build-system pyproject-build-system)
7699 (native-inputs
7700 (list python-pytest python-setuptools))
7701 (home-page "https://github.com/eerimoq/argparse_addons")
7702 (synopsis "Extensions for Python's @code{argparse} library")
7703 (description "This Python library provides additional types and actions
7704for the standard @code{argparse} library.")
7705 (license license:expat)))
7706
7707(define-public python-bitstruct
7708 (package
7709 (name "python-bitstruct")
7710 (version "8.21.0")
7711 (source
7712 (origin
7713 (method url-fetch)
7714 (uri (pypi-uri "bitstruct" version))
7715 (sha256
7716 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7717 (build-system pyproject-build-system)
7718 (native-inputs
7719 (list python-pytest
7720 python-setuptools
7721 python-wheel))
7722 (home-page "https://github.com/eerimoq/bitstruct")
7723 (synopsis "Python values to and C bit field structs converter")
7724 (description
7725 "This module performs conversions between Python values and C bit field
7726structs represented as Python byte strings. It is intended to have a similar
7727interface as the @code{struct} module from Python, but working on bits instead
7728of primitive data types like @code{char}, @code{int}, etc.")
7729 (license license:expat)))
7730
7731(define-public python-cantools
7732 (package
7733 (name "python-cantools")
7734 (version "40.5.0")
7735 (source
7736 (origin
7737 (method git-fetch)
7738 (uri (git-reference
7739 (url "https://github.com/eerimoq/cantools")
7740 (commit version)))
7741 (file-name (git-file-name name version))
7742 (sha256
7743 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7744 (build-system pyproject-build-system)
7745 (native-inputs
7746 (list python-freezegun
7747 python-parameterized
7748 python-pytest
7749 python-setuptools
7750 python-setuptools-scm))
7751 (propagated-inputs
7752 (list python-argparse-addons
7753 python-bitstruct
7754 python-can
7755 python-crccheck
7756 python-diskcache
7757 python-matplotlib
7758 python-textparser))
7759 (home-page "https://github.com/eerimoq/cantools")
7760 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7761 (description
7762 "This package includes Controller Area Network (CAN) related tools that
7763can be used to:
7764@itemize
7765@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7766@item encode and decode CAN messages
7767@item multiplex simple and extended signals
7768@item diagnose DID encoding and decoding
7769@item dump the CAN decoder output
7770@item test CAN nodes
7771@item generate C source code
7772@item monitor the CAN bus
7773@end itemize")
7774 (license license:expat)))
7775
7776(define-public python-capturer
7777 (package
7778 (name "python-capturer")
7779 (version "3.0")
7780 (source
7781 (origin
7782 (method git-fetch)
7783 (uri (git-reference
7784 (url "https://github.com/xolox/python-capturer")
7785 (commit version)))
7786 (file-name (git-file-name name version))
7787 (sha256
7788 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7789 (build-system pyproject-build-system)
7790 (native-inputs (list python-pytest python-setuptools))
7791 (propagated-inputs (list python-humanfriendly))
7792 (home-page "https://capturer.readthedocs.io")
7793 (synopsis "Capture stdout and stderr streams of the current process")
7794 (description
7795 "The capturer package makes it easy to capture the stdout and stderr
7796streams of the current process and subprocesses. Output can be relayed
7797to the terminal in real time but is also available to the Python program
7798for additional processing.")
7799 (license license:expat)))
7800
7801(define-public python-fastprogress
7802 (package
7803 (name "python-fastprogress")
7804 (version "1.0.3")
7805 (source (origin
7806 (method git-fetch)
7807 (uri (git-reference
7808 (url "https://github.com/fastai/fastprogress")
7809 (commit version)))
7810 (file-name (git-file-name name version))
7811 (sha256
7812 (base32
7813 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7814 (build-system pyproject-build-system)
7815 (arguments
7816 (list #:tests? #f ;there are no tests
7817 #:phases #~(modify-phases %standard-phases
7818 ;; XXX: Fails with: "In procedure utime: No such file
7819 ;; or directory".
7820 (delete 'ensure-no-mtimes-pre-1980))))
7821 (native-inputs (list python-setuptools python-wheel))
7822 (home-page "https://github.com/fastai/fastprogress")
7823 (synopsis "Progress bar for Jupyter Notebook and console")
7824 (description
7825 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7826 (license license:asl2.0)))
7827
7828(define-public python-coloredlogs
7829 (package
7830 (name "python-coloredlogs")
7831 (version "15.0.1")
7832 (source
7833 (origin
7834 (method git-fetch)
7835 (uri (git-reference
7836 (url "https://github.com/xolox/python-coloredlogs")
7837 (commit version)))
7838 (file-name (git-file-name name version))
7839 (sha256
7840 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7841 (build-system pyproject-build-system)
7842 (arguments
7843 (list
7844 #:test-flags
7845 #~(list "-k"
7846 (string-join
7847 (list "not test_auto_install" ; Unclear why this fails.
7848 ;; XXX: Require a "script" executable.
7849 "test_cli_conversion"
7850 "test_empty_conversion"
7851 "test_output_interception")
7852 " and not "))))
7853 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7854 (propagated-inputs (list python-capturer))
7855 (home-page "https://coloredlogs.readthedocs.io")
7856 (synopsis "Colored stream handler for Python's logging module")
7857 (description
7858 "The @code{coloredlogs} package enables colored terminal output for
7859Python's logging module. The @code{ColoredFormatter} class inherits from
7860@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7861messages in color.")
7862 (license license:expat)))
7863
7864(define-public python-editorconfig
7865 (package
7866 (name "python-editorconfig")
7867 (version "0.17.1")
7868 (source
7869 (origin
7870 (method git-fetch)
7871 (uri (git-reference
7872 (url "https://github.com/editorconfig/editorconfig-core-py")
7873 (commit (string-append "v" version))
7874 (recursive? #t)))
7875 (file-name (git-file-name name version))
7876 (sha256
7877 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7878 (build-system pyproject-build-system)
7879 (arguments
7880 (list
7881 #:phases
7882 #~(modify-phases %standard-phases
7883 (replace 'check
7884 (lambda _
7885 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7886 (invoke "cmake" ".")
7887 (invoke "ctest" "."))))))
7888 (native-inputs (list cmake python-setuptools python-wheel))
7889 (home-page "https://editorconfig.org/")
7890 (synopsis "EditorConfig bindings for python")
7891 (description "The EditorConfig project consists of a file format for
7892defining coding styles and a collection of text editor plugins that enable
7893editors to read the file format and adhere to defined styles. EditorConfig
7894files are easily readable and they work nicely with version control systems.")
7895 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7896 (license (list license:bsd-2 license:psfl))))
7897
7898(define-public dosage
7899 (package
7900 (name "dosage")
7901 (version "3.3")
7902 (source
7903 (origin
7904 (method git-fetch)
7905 (uri (git-reference
7906 (url "https://github.com/webcomics/dosage")
7907 (commit version)))
7908 (file-name (git-file-name name version))
7909 (sha256
7910 (base32 "1111hs9f9k0w303vgidlxdngbfp71x6fnc5lfb62jc5kw2sgfn6z"))))
7911 (build-system pyproject-build-system)
7912 (arguments
7913 ;; It requires additional modules for integration tests.
7914 (list #:test-flags #~(list "--ignore=tests/modules/")))
7915 (native-inputs
7916 (list python-pytest
7917 python-responses
7918 python-setuptools
7919 python-setuptools-scm))
7920 (inputs
7921 (list python-imagesize
7922 python-importlib-resources
7923 python-lxml
7924 python-platformdirs
7925 python-requests
7926 python-rich))
7927 (home-page "https://github.com/webcomics/dosage")
7928 (synopsis "Comic strip downloader and archiver")
7929 (description
7930 "Dosage is designed to keep a local copy of specific webcomics and other
7931picture-based content such as Picture of the Day sites. With the
7932@command{dosage} command-line script you can get the latest strip of a
7933webcomic, catch-up to the last strip downloaded, or download a strip for a
7934particular date or index, if possible.")
7935 (license license:expat)))
7936
7937(define-public python-etcd3
7938 (package
7939 (name "python-etcd3")
7940 (version "0.12.0")
7941 (source
7942 (origin
7943 (method git-fetch)
7944 (uri (git-reference
7945 (url "https://github.com/kragniz/python-etcd3")
7946 (commit (string-append "v" version))))
7947 (file-name (git-file-name name version))
7948 (sha256
7949 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7950 (build-system pyproject-build-system)
7951 (arguments
7952 (list
7953 ;; XXX: Tests require the etcd package.
7954 #:tests? #f
7955 #:test-backend #~'custom
7956 #:test-flags ; Taken from tox.ini.
7957 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7958 (propagated-inputs
7959 (list python-grpcio python-protobuf python-six python-tenacity))
7960 (native-inputs
7961 (list python-mock python-pifpaf python-pytest python-setuptools))
7962 (home-page "https://github.com/kragniz/python-etcd3")
7963 (synopsis "Python client for the etcd3 API")
7964 (description
7965 "This package provide a Python client for the @code{etcd3} API.")
7966 (license license:asl2.0)))
7967
7968(define-public python-et-xmlfile
7969 (package
7970 (name "python-et-xmlfile")
7971 (version "2.0.0")
7972 (source
7973 (origin
7974 ;; Use a checkout because the PyPI archive does not contain tests.
7975 (method hg-fetch)
7976 (uri (hg-reference
7977 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7978 (changeset version)))
7979 (file-name (string-append name "-" version "-checkout"))
7980 (sha256
7981 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7982 (build-system pyproject-build-system)
7983 (native-inputs
7984 (list python-pytest
7985 python-lxml
7986 python-setuptools))
7987 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7988 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7989 (description "This Python library is based upon the @code{xmlfile} module
7990from @code{lxml}. It aims to provide a low memory, compatible implementation
7991of @code{xmlfile}.")
7992 (license license:expat)))
7993
7994(define-public python-omero-py
7995 (let ((omero-blitz-version "5.8.2"))
7996 (package
7997 (name "python-omero-py")
7998 (version "5.20.0")
7999 (source
8000 (origin
8001 (method git-fetch)
8002 (uri (git-reference
8003 (url "https://github.com/ome/omero-py")
8004 (commit (string-append "v" version))))
8005 (file-name (git-file-name name version))
8006 (sha256
8007 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
8008 (build-system pyproject-build-system)
8009 (arguments
8010 (list
8011 #:test-flags
8012 #~(list
8013 "-m" "not broken" "-rf" "test" "-s"
8014 ;; TestImport tries to download Java things; TestSessions
8015 ;; and TestBuildQuery require networking.
8016 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
8017 #:modules '((guix build pyproject-build-system)
8018 (guix build utils)
8019 (ice-9 match)
8020 (srfi srfi-1)
8021 (srfi srfi-26))
8022 #:phases
8023 #~(modify-phases %standard-phases
8024 (add-after 'unpack 'find-artifacts
8025 (lambda* (#:key inputs #:allow-other-keys)
8026 (let ((zip-file
8027 (match inputs
8028 (((labels . files) ...)
8029 (find (cut string-suffix?
8030 (string-append "omero-blitz-"
8031 #$omero-blitz-version
8032 "-python.zip")
8033 <>)
8034 files)))))
8035 (setenv "ZIP_FILE"
8036 (or zip-file (error "failed to find artifact file"))))))
8037 ;; Some tests need this, such as TestTempFileManager
8038 (add-after 'build 'set-HOME
8039 (lambda _ (setenv "HOME" "/tmp")))
8040 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
8041 ;; module to load.
8042 (delete 'sanity-check)
8043 ;; The argument parser is picky and interprets the "-real" part as
8044 ;; the first argument.
8045 (add-after 'wrap 'rename-executable
8046 (lambda _
8047 (with-directory-excursion (string-append #$output "/bin")
8048 (rename-file ".omero-real" ".omero")
8049 (substitute* "omero"
8050 (("bin/.omero-real") "bin/.omero"))))))))
8051 (propagated-inputs
8052 (list python-appdirs
8053 python-future
8054 python-numpy
8055 python-pillow
8056 python-pyyaml
8057 python-requests
8058 python-tables
8059 python-zeroc-ice-3.6))
8060 (native-inputs
8061 (list python-portalocker
8062 python-pytest
8063 python-pytest-mock
8064 python-pytest-rerunfailures
8065 python-pytest-xdist
8066 python-setuptools
8067 python-wheel
8068 unzip
8069 (origin
8070 (method url-fetch)
8071 (uri (format #f "\
8072https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
8073openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
8074 omero-blitz-version
8075 omero-blitz-version))
8076 (sha256
8077 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
8078 (home-page "https://github.com/ome/omero-py")
8079 (synopsis "Python bindings to the OMERO.blitz server")
8080 (description "This package provides Python bindings to the OMERO.blitz
8081server.")
8082 (license license:gpl2))))
8083
8084(define-public python-openpyxl
8085 (package
8086 (name "python-openpyxl")
8087 (version "3.1.5")
8088 (source
8089 (origin
8090 (method hg-fetch)
8091 (uri (hg-reference
8092 (url "https://foss.heptapod.net/openpyxl/openpyxl")
8093 (changeset version)))
8094 (file-name (string-append name "-" version "-checkout"))
8095 (sha256
8096 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
8097 (build-system pyproject-build-system)
8098 (arguments
8099 (list
8100 ;; tests: 2577 passed, 17 skipped, 4 deselected, 7 xfailed
8101 #:test-flags
8102 #~(list (string-append "--deselect=openpyxl/xml/tests/"
8103 "test_functions.py::test_iterparse"))))
8104 (native-inputs
8105 (list python-lxml
8106 python-pillow
8107 python-pytest
8108 python-setuptools))
8109 (propagated-inputs
8110 (list python-et-xmlfile))
8111 (home-page "https://openpyxl.readthedocs.io")
8112 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
8113 (description
8114 "This Python library allows reading and writing to the Excel XLSX, XLSM,
8115XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
8116standard.")
8117 (license license:expat)))
8118
8119(define-public python-sinfo
8120 (package
8121 (name "python-sinfo")
8122 (version "1.0.1")
8123 (source
8124 (origin
8125 (method git-fetch)
8126 (uri (git-reference
8127 (url "https://gitlab.com/joelostblom/session_info")
8128 (commit (string-append "v" version))))
8129 (file-name (git-file-name name version))
8130 (sha256
8131 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
8132 (build-system pyproject-build-system)
8133 (arguments
8134 (list #:tests? #f)) ; no tests in PyPI or Git
8135 (native-inputs
8136 (list python-setuptools))
8137 (propagated-inputs
8138 (list python-stdlib-list))
8139 (home-page "https://gitlab.com/joelostblom/session_info")
8140 (synopsis "Output module version information loaded in a Python session")
8141 (description "This package outputs version information for modules loaded
8142in the current session, Python, and the OS.")
8143 (license license:bsd-3)))
8144
8145(define-public python-schedule
8146 (package
8147 (name "python-schedule")
8148 (version "1.2.2")
8149 (source
8150 (origin
8151 (method url-fetch)
8152 (uri (pypi-uri "schedule" version))
8153 (sha256
8154 (base32
8155 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
8156 (build-system pyproject-build-system)
8157 (native-inputs
8158 (list python-pytest python-setuptools python-wheel))
8159 (home-page "https://github.com/dbader/schedule")
8160 (synopsis "Schedule periodic function calls in Python")
8161 (description
8162 "Schedule is an in-process scheduler for periodic jobs that uses the
8163builder pattern for configuration. Schedule lets you run Python functions (or
8164any other callable) periodically at pre-determined intervals using a simple,
8165human-friendly syntax.")
8166 (license license:expat)))
8167
8168;; XXX: This project is unmaintained since 2020, see:
8169;; <https://github.com/scour-project/scour/issues/321>.
8170;;
8171;; The only user is Inkscape, see:
8172;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
8173(define-public python-scour
8174 (package
8175 (name "python-scour")
8176 (version "0.38.2")
8177 (source
8178 (origin
8179 (method git-fetch)
8180 (uri
8181 (git-reference
8182 (url "https://gitlab.com/inkscape/extras/scour")
8183 (commit
8184 (string-append "v" version))))
8185 (file-name (git-file-name name version))
8186 (sha256
8187 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
8188 (build-system pyproject-build-system)
8189 (arguments
8190 (list #:test-backend #~'custom
8191 #:test-flags #~(list "test_scour.py")))
8192 (native-inputs
8193 (list python-setuptools))
8194 (propagated-inputs
8195 (list python-six))
8196 (home-page "https://gitlab.com/inkscape/extras/scour")
8197 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
8198 (description
8199 "The goal of Scour is to output a file that renders identically at a
8200fraction of the size by removing a lot of redundant information created by
8201most SVG editors. Optimization options are typically lossless but can be
8202tweaked for more aggressive cleaning.")
8203 (license license:asl2.0)))
8204
8205(define-public python-mechanize
8206 (package
8207 (name "python-mechanize")
8208 (version "0.4.10")
8209 (source
8210 (origin
8211 (method url-fetch)
8212 (uri (pypi-uri "mechanize" version))
8213 (sha256
8214 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
8215 (build-system pyproject-build-system)
8216 (arguments
8217 ;; XXX: Unclear why tests are failing.
8218 (list #:tests? #f
8219 #:phases
8220 #~(modify-phases %standard-phases
8221 (add-before 'check 'configure-tests
8222 (lambda _
8223 (setenv "GUIX_PYTHONPATH"
8224 (string-append (getcwd) "/test-tools:"
8225 (getenv "GUIX_PYTHONPATH"))))))))
8226 (native-inputs
8227 (list python-html5-parser
8228 python-html5lib
8229 python-lxml
8230 python-service-identity
8231 python-setuptools
8232 python-six
8233 python-twisted
8234 python-wheel))
8235 (propagated-inputs
8236 (list python-html5lib))
8237 (home-page "https://github.com/python-mechanize/mechanize")
8238 (synopsis
8239 "Stateful programmatic web browsing in Python")
8240 (description
8241 "Mechanize implements stateful programmatic web browsing in Python,
8242after Andy Lester’s Perl module WWW::Mechanize.")
8243 (license license:bsd-3)))
8244
8245(define-public python-mediapy
8246 (package
8247 (name "python-mediapy")
8248 (version "1.2.6")
8249 (source
8250 (origin
8251 (method git-fetch)
8252 (uri (git-reference
8253 (url "https://github.com/google/mediapy")
8254 (commit (string-append "v" version))))
8255 (file-name (git-file-name name version))
8256 (sha256
8257 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8258 (build-system pyproject-build-system)
8259 (arguments
8260 (list
8261 #:phases
8262 '(modify-phases %standard-phases
8263 (add-after 'unpack 'fix-references
8264 (lambda _
8265 (substitute* "mediapy_test.py"
8266 (("'/bin/bash")
8267 (string-append "'" (which "bash")))))))))
8268 (inputs (list ffmpeg-6))
8269 (propagated-inputs (list python-absl-py
8270 python-ipython
8271 python-matplotlib
8272 python-numpy
8273 python-pillow))
8274 (native-inputs
8275 (list python-flit-core
8276 python-pytest
8277 python-pytest-xdist))
8278 (home-page "https://github.com/google/mediapy")
8279 (synopsis "Read/write/show images and videos in an IPython notebook")
8280 (description "This Python library makes it easy to display images and
8281videos in a notebook.")
8282 (license license:asl2.0)))
8283
8284(define-public python-simpleaudio
8285 (package
8286 (name "python-simpleaudio")
8287 (version "1.0.4")
8288 (source
8289 (origin
8290 (method git-fetch)
8291 (uri (git-reference
8292 (url "https://github.com/hamiltron/py-simple-audio")
8293 (commit version)))
8294 (file-name (git-file-name name version))
8295 (sha256
8296 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8297 (build-system pyproject-build-system)
8298 (arguments
8299 (list
8300 #:test-backend #~'unittest
8301 #:phases
8302 #~(modify-phases %standard-phases
8303 (add-before 'check 'fix-test-run
8304 (lambda _
8305 (delete-file-recursively "simpleaudio"))))))
8306 (native-inputs (list python-setuptools))
8307 (inputs (list alsa-lib))
8308 (home-page "https://github.com/hamiltron/py-simple-audio")
8309 (synopsis "Simple, asynchronous audio playback for Python 3")
8310 (description
8311 "The @code{simplaudio} package provides cross-platform, dependency-free
8312audio playback capability for Python 3 on OSX, Windows, and Linux.")
8313 (license license:expat))) ; MIT license
8314
8315(define-public python-jsonalias
8316 (package
8317 (name "python-jsonalias")
8318 (version "0.1.2")
8319 (source (origin
8320 (method url-fetch)
8321 (uri (pypi-uri "jsonalias" version))
8322 (sha256
8323 (base32
8324 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8325 (build-system pyproject-build-system)
8326 (arguments
8327 (list #:tests? #f)) ; no tests in PyPI or Git
8328 (native-inputs
8329 (list python-poetry-core))
8330 (home-page "https://github.com/kevinheavey/jsonalias/")
8331 (synopsis "JSON type alias for Python")
8332 (description
8333 "This package provides a microlibrary that defines a JSON type alias for
8334Python.")
8335 (license license:expat)))
8336
8337(define-public python-jsonargparse
8338 (package
8339 (name "python-jsonargparse")
8340 (version "4.49.0")
8341 (source
8342 (origin
8343 (method git-fetch)
8344 (uri (git-reference
8345 (url "https://github.com/omni-us/jsonargparse/")
8346 (commit (string-append "v" version))))
8347 (file-name (git-file-name name version))
8348 (sha256
8349 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8350 (build-system pyproject-build-system)
8351 (propagated-inputs
8352 (list python-pyyaml))
8353 (native-inputs
8354 (list python-attrs
8355 python-pydantic
8356 python-pytest
8357 python-requests
8358 python-responses
8359 python-setuptools
8360 python-types-pyyaml
8361 python-types-requests))
8362 (home-page "https://github.com/omni-us/jsonargparse/")
8363 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8364 (description
8365 "This package lets you implement minimal boilerplate CLIs derived from
8366type hints and parse from command line, config files and environment
8367variables.")
8368 (license license:expat)))
8369
8370(define-public python-pymarshal
8371 (package
8372 (name "python-pymarshal")
8373 (version "2.2.3")
8374 (source (origin
8375 (method url-fetch)
8376 (uri (pypi-uri "pymarshal" version))
8377 (sha256
8378 (base32
8379 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8380 (build-system pyproject-build-system)
8381 (arguments
8382 ;; Test fails with this error:
8383 ;; "CovReportWarning: Failed to generate report: No data to report."
8384 (list #:tests? #f))
8385 (native-inputs
8386 (list python-pytest python-setuptools python-wheel))
8387 (propagated-inputs (list python-bson python-pyyaml))
8388 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8389 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8390 (description "PyMarshal replicates the feature of (un)marshalling structs
8391in Golang.")
8392 (license license:bsd-2)))
8393
8394(define-public python-simplejson
8395 (package
8396 (name "python-simplejson")
8397 (version "3.20.1")
8398 (source
8399 (origin
8400 (method url-fetch)
8401 (uri (pypi-uri "simplejson" version))
8402 (sha256
8403 (base32
8404 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8405 (build-system pyproject-build-system)
8406 (native-inputs
8407 (list python-pytest python-setuptools))
8408 (home-page "https://simplejson.readthedocs.io/en/latest")
8409 (synopsis
8410 "Json library for Python")
8411 (description
8412 "JSON (JavaScript Object Notation) is a subset of JavaScript
8413syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8414format.
8415
8416Simplejson exposes an API familiar to users of the standard library marshal
8417and pickle modules. It is the externally maintained version of the json
8418library contained in Python 2.6, but maintains compatibility with Python 2.5
8419and (currently) has significant performance advantages, even without using
8420the optional C extension for speedups. Simplejson is also supported on
8421Python 3.3+.")
8422 (license license:x11)))
8423
8424(define-public python-simple-rlp
8425 (package
8426 (name "python-simple-rlp")
8427 (version "0.1.3")
8428 (source
8429 (origin
8430 (method git-fetch)
8431 (uri (git-reference
8432 (url "https://github.com/SamuelHaidu/simple-rlp")
8433 ;; Upstream doesn't tag the git repo.
8434 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8435 (file-name (git-file-name name version))
8436 (sha256
8437 (base32
8438 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8439 (build-system pyproject-build-system)
8440 (native-inputs
8441 (list
8442 python-pytest
8443 python-setuptools))
8444 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8445 (synopsis
8446 "Python implementation of RLP (Recursive Length Prefix) encoding")
8447 (description
8448 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8449Prefix) - Encode and decode data structures.")
8450 (license license:expat)))
8451
8452(define-public python-pyicu
8453 (package
8454 (name "python-pyicu")
8455 (version "2.15.2")
8456 (source
8457 (origin
8458 (method url-fetch)
8459 (uri (pypi-uri "pyicu" version))
8460 (sha256
8461 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8462 (build-system pyproject-build-system)
8463 (native-inputs
8464 (list pkg-config
8465 python-pytest
8466 python-setuptools
8467 python-six))
8468 (inputs
8469 (list icu4c))
8470 (home-page "https://gitlab.pyicu.org/main/pyicu")
8471 (synopsis "Python extension wrapping the ICU C++ API")
8472 (description
8473 "PyICU is a python extension wrapping the ICU C++ API.")
8474 (license license:x11)))
8475
8476(define-public python-dogtail
8477 (package
8478 (name "python-dogtail")
8479 (version "0.9.11")
8480 (source
8481 (origin
8482 (method url-fetch)
8483 (uri (string-append
8484 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8485 version ".tar.gz"))
8486 (sha256
8487 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8488 (build-system pyproject-build-system)
8489 (arguments
8490 (list
8491 #:tests? #f ;TODO Launching dbus for the tests fails
8492 #:phases
8493 #~(modify-phases %standard-phases
8494 (replace 'check
8495 (lambda* (#:key tests? #:allow-other-keys)
8496 (when tests?
8497 (system "Xvfb :1 &")
8498 (setenv "DISPLAY" ":1")
8499 (invoke "dbus-run-session" "--"
8500 "nosetests" "-v" "tests/")))))))
8501 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8502 (native-inputs
8503 (list python-pynose
8504 gtk+
8505 xorg-server-for-tests
8506 dbus
8507 gsettings-desktop-schemas
8508 gobject-introspection
8509 python-setuptools))
8510 (home-page "https://gitlab.com/dogtail/dogtail/")
8511 (synopsis "GUI test tool and automation framework written in Python")
8512 (description
8513 "Dogtail is a GUI test tool and automation framework written in Python.
8514It uses Accessibility (a11y) technologies to communicate with desktop
8515applications. dogtail scripts are written in Python and executed like any
8516other Python program.")
8517 (license license:gpl2+)))
8518
8519(define-public python-doxyqml
8520 (package
8521 (name "python-doxyqml")
8522 (version "0.5.3")
8523 (source (origin
8524 (method url-fetch)
8525 (uri (pypi-uri "doxyqml" version))
8526 (sha256
8527 (base32
8528 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8529 (build-system pyproject-build-system)
8530 (arguments
8531 (list #:test-backend #~'custom
8532 #:test-flags #~(list "tests/functional/tests.py")))
8533 (native-inputs
8534 (list python-setuptools))
8535 (home-page "https://agateau.com/projects/doxyqml")
8536 (synopsis "Doxygen input filter for QML files")
8537 (description
8538 "This package provides a Doxygen input filter for QML files.")
8539 (license license:bsd-3)))
8540
8541(define-public python-doxypypy
8542 (package
8543 (name "python-doxypypy")
8544 (version "0.8.8.7")
8545 (source (origin
8546 (method url-fetch)
8547 (uri (pypi-uri "doxypypy" version))
8548 (sha256
8549 (base32
8550 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8551 (build-system pyproject-build-system)
8552 (arguments
8553 (list
8554 #:test-flags
8555 #~(list "-k" (string-join
8556 ;; Test files are not in UTF-8 format and attmet to
8557 ;; substitute shebang fails, while tests fail with error:
8558 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8559 ;; File w[387 chars]g.')" !=
8560 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8561 ;; chars]g.')"
8562 (list "not test_utf16be_bom"
8563 "test_utf16le_bom"
8564 "test_utf32be_bom"
8565 "test_utf32le_bom"
8566 "test_utf8_bom")
8567 " and not "))
8568 #:phases
8569 #~(modify-phases %standard-phases
8570 ;; compile-bytecode phases fails with error: SyntaxError: source
8571 ;; code string cannot contain null bytes.
8572 (add-after 'unpack 'fix-setup.py
8573 (lambda _
8574 (substitute* "setup.py"
8575 (("packages=.*") "packages=['doxypypy'],\n")))))))
8576 (native-inputs
8577 (list python-pytest
8578 python-setuptools
8579 python-wheel))
8580 (propagated-inputs
8581 (list python-chardet))
8582 (home-page "https://github.com/Feneric/doxypypy")
8583 (synopsis "Doxygen filter for Python")
8584 (description
8585 "This package provides a Doxygen filter for Python.")
8586 (license license:gpl2+)))
8587
8588(define-public python-empy
8589 (package
8590 (name "python-empy")
8591 (version "3.3.4")
8592 (source
8593 (origin
8594 (method url-fetch)
8595 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8596 version ".tar.gz"))
8597 (sha256
8598 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8599 (build-system pyproject-build-system)
8600 (arguments
8601 (list
8602 #:phases
8603 #~(modify-phases %standard-phases
8604 (replace 'check
8605 (lambda* (#:key tests? #:allow-other-keys)
8606 (when tests?
8607 (invoke "./test.sh")))))))
8608 (native-inputs (list python-setuptools))
8609 (home-page "http://www.alcyone.com/software/empy/")
8610 (synopsis "Templating system for Python")
8611 (description
8612 "EmPy is a system for embedding Python expressions and statements in
8613template text; it takes an EmPy source file, processes it, and produces
8614output. This is accomplished via expansions, which are special signals to the
8615EmPy system and are set off by a special prefix (by default the at sign, @@).
8616EmPy can expand arbitrary Python expressions and statements in this way, as
8617well as a variety of special forms. Textual data not explicitly delimited in
8618this way is sent unaffected to the output, allowing Python to be used in
8619effect as a markup language. Also supported are callbacks via hooks,
8620recording and playback via diversions, and dynamic, chainable filters. The
8621system is highly configurable via command line options and embedded
8622commands.")
8623 (license license:lgpl2.1+)))
8624
8625(define-public python-palettable
8626 (package
8627 (name "python-palettable")
8628 (version "3.3.3")
8629 (source (origin
8630 (method url-fetch)
8631 (uri (pypi-uri "palettable" version))
8632 (sha256
8633 (base32
8634 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8635 (build-system pyproject-build-system)
8636 (native-inputs (list python-pytest python-setuptools python-wheel))
8637 (home-page "https://jiffyclub.github.io/palettable/")
8638 (synopsis "Color palettes for Python")
8639 (description "Palettable (formerly brewer2mpl) is a library of color
8640palettes for Python. It’s written in pure Python with no dependencies, but it
8641can supply color maps for matplotlib. You can use Palettable to customize
8642matplotlib plots or supply colors for a web application.")
8643 (license license:expat)))
8644
8645(define-public python-parse-type
8646 (package
8647 (name "python-parse-type")
8648 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8649 ;; 3.12+; move back to git tag when released.
8650 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8651 (revision . "0")))
8652 (version (git-version "0.6.6"
8653 (assoc-ref properties 'revision)
8654 (assoc-ref properties 'commit)))
8655 (source
8656 (origin
8657 (method git-fetch)
8658 (uri (git-reference
8659 (url "https://github.com/jenisys/parse_type")
8660 (commit (assoc-ref properties 'commit))))
8661 (file-name (git-file-name name version))
8662 (sha256
8663 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8664 (build-system pyproject-build-system)
8665 (arguments
8666 (list
8667 ;; tests: 332 passed, 2 skipped
8668 #:phases
8669 #~(modify-phases %standard-phases
8670 (add-after 'unpack 'fix-pytest-config
8671 ;; To bypass options: --metadata, --html and --junit-xml.
8672 (lambda _
8673 (delete-file "pytest.ini"))))))
8674 (native-inputs
8675 (list python-pytest
8676 python-setuptools
8677 python-setuptools-scm))
8678 (propagated-inputs
8679 (list python-six ;hard dependency
8680 python-parse))
8681 (home-page "https://github.com/jenisys/parse_type")
8682 (synopsis "Extended parse module")
8683 (description "Parse_type extends the python parse module.")
8684 (license license:expat)))
8685
8686(define-public python-parse
8687 (package
8688 (name "python-parse")
8689 (version "1.20.2")
8690 (source
8691 (origin
8692 (method git-fetch)
8693 (uri (git-reference
8694 (url "https://github.com/r1chardj0n3s/parse")
8695 (commit version)))
8696 (file-name (git-file-name name version))
8697 (sha256
8698 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8699 (build-system pyproject-build-system)
8700 (native-inputs (list python-pytest python-setuptools))
8701 (home-page "https://github.com/r1chardj0n3s/parse")
8702 (synopsis "Parse strings")
8703 (description
8704 "Parse strings using a specification based on the Python @code{format()}
8705syntax.")
8706 (license license:x11)))
8707
8708(define-public python-parsley
8709 (package
8710 (name "python-parsley")
8711 (version "1.3")
8712 (source
8713 (origin
8714 (method git-fetch)
8715 (uri (git-reference
8716 (url "https://github.com/pyga/parsley")
8717 (commit version)))
8718 (file-name (git-file-name name version))
8719 (sha256
8720 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8721 (patches
8722 (list
8723 (origin
8724 (method url-fetch)
8725 (uri
8726 (string-append "https://github.com/pyga/parsley/commit/"
8727 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8728 (sha256
8729 (base32
8730 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8731 (build-system pyproject-build-system)
8732 (arguments
8733 (list
8734 #:test-flags #~(list "ometa/test" "terml/test")))
8735 (native-inputs
8736 (list python-pytest
8737 python-setuptools
8738 python-twisted))
8739 (home-page "https://launchpad.net/parsley")
8740 (synopsis "Parsing and pattern matching Python library")
8741 (description
8742 "Parsley is a parsing library using PEG algorithm, so each expression in
8743the grammar rules works like a Python expression. In particular, alternatives
8744are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8745Parsley is an implementation of OMeta, an object-oriented pattern-matching
8746language.")
8747 (license license:expat)))
8748
8749(define-public python-petl
8750 (package
8751 (name "python-petl")
8752 (version "1.7.16")
8753 (source
8754 (origin
8755 (method url-fetch)
8756 (uri (pypi-uri "petl" version))
8757 (sha256
8758 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8759 (build-system pyproject-build-system)
8760 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8761 python-pytest))
8762 (home-page "https://github.com/petl-developers/petl")
8763 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8764processing pipelines.")
8765 (description
8766 "This package provides a library for extracting, transforming and loading
8767tables of data. It can read from and write to databases or files in multiple
8768formats, including:
8769@itemize @bullet
8770@item python objects
8771@item delimited files
8772@item pickle files
8773@item text/XML/JSON/HTML files
8774@item python I/O streams
8775@item Excel XLS/XLSX files
8776@item HDF5 files
8777@end itemize")
8778 (license license:expat)))
8779
8780(define-public python-polib
8781 (package
8782 (name "python-polib")
8783 (version "1.2.0")
8784 (source
8785 (origin
8786 (method git-fetch)
8787 (uri (git-reference
8788 (url "https://github.com/izimobil/polib/")
8789 (commit version)))
8790 (file-name (git-file-name name version))
8791 (sha256
8792 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8793 (build-system pyproject-build-system)
8794 (arguments
8795 (list #:test-backend #~'custom
8796 #:test-flags #~(list "tests/tests.py")))
8797 (native-inputs (list python-setuptools))
8798 (home-page "https://github.com/izimobil/polib/")
8799 (synopsis "Manipulate, create and modify gettext files")
8800 (description
8801 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8802be used to create po files from scratch or to modify existing ones.")
8803 (license license:expat)))
8804
8805(define-public python-polling2
8806 (package
8807 (name "python-polling2")
8808 (version "0.5.0")
8809 (source
8810 (origin
8811 (method git-fetch)
8812 (uri (git-reference
8813 (url "https://github.com/ddmee/polling2")
8814 (commit (string-append "v" version))))
8815 (file-name (git-file-name name version))
8816 (sha256
8817 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8818 (build-system pyproject-build-system)
8819 (arguments
8820 ;; XXX: Additional , in string comparison.
8821 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8822 (native-inputs (list python-mock python-pytest python-setuptools))
8823 (home-page "https://github.com/ddmee/polling2")
8824 (synopsis "Polling utility with many configurable options")
8825 (description "Polling2 is a utility used to wait for a function to return
8826a certain expected condition.")
8827 (license license:expat)))
8828
8829(define-public python-daft
8830 (package
8831 (name "python-daft")
8832 (version "0.1.2")
8833 (source (origin
8834 (method url-fetch)
8835 (uri (pypi-uri "daft" version))
8836 (sha256
8837 (base32
8838 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8839 (build-system pyproject-build-system)
8840 (arguments
8841 (list
8842 #:test-flags
8843 '(list "-k"
8844 (string-append
8845 ;; The following tests compare matplotlib output with
8846 ;; previously generated images. They fail due to minor
8847 ;; differences in where matplotlib places labels.
8848 "not test_bca[png]"
8849 " and not test_classic[png]"
8850 " and not test_deconvolution[png]"
8851 " and not test_exoplanets[png]"
8852 " and not test_fixed[png]"
8853 " and not test_gaia[png]"
8854 " and not test_galex[png]"
8855 " and not test_huey_p_newton[png]"
8856 " and not test_logo[png]"
8857 " and not test_no_circles[png]"
8858 " and not test_no_gray[png]"
8859 " and not test_recursive[png]"
8860 " and not test_thick_lines[png]"
8861 " and not test_weaklensing[png]"
8862 " and not test_wordy[png]"))))
8863 (native-inputs
8864 (list python-pytest
8865 python-setuptools
8866 python-wheel))
8867 (propagated-inputs (list python-matplotlib python-numpy))
8868 (home-page "https://docs.daft-pgm.org/")
8869 (synopsis "PGM rendering library")
8870 (description "Daft is a Python package that uses matplotlib to
8871render pixel-perfect probabilistic graphical models for publication in
8872a journal or on the internet. With a short Python script and an
8873intuitive model-building syntax you can design directed (Bayesian
8874Networks, directed acyclic graphs) and undirected (Markov random fields)
8875models and save them in any formats that matplotlib supports (including
8876PDF, PNG, EPS and SVG).")
8877 (license license:expat)))
8878
8879(define-public python-portalocker
8880 (package
8881 (name "python-portalocker")
8882 (version "2.7.0")
8883 (source (origin
8884 (method url-fetch)
8885 (uri (pypi-uri "portalocker" version))
8886 (sha256
8887 (base32
8888 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8889 (build-system pyproject-build-system)
8890 (native-inputs (list python-pytest
8891 python-pytest-timeout
8892 python-redis
8893 python-setuptools
8894 python-wheel))
8895 (home-page "https://github.com/WoLpH/portalocker")
8896 (synopsis "Python library for file locking")
8897 (description "Portalocker is a library to provide an easy API to file
8898locking..")
8899 (license license:bsd-3)))
8900
8901(define-public python-poyo
8902 (package
8903 (name "python-poyo")
8904 (version "0.5.0")
8905 (source
8906 (origin
8907 (method url-fetch)
8908 (uri (pypi-uri "poyo" version))
8909 (sha256
8910 (base32
8911 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8912 (build-system pyproject-build-system)
8913 (native-inputs
8914 (list python-pytest python-setuptools))
8915 (home-page "https://github.com/hackebrot/poyo")
8916 (synopsis "Lightweight YAML Parser for Python")
8917 (description
8918 "This package provides a lightweight YAML Parser for Python. It supports
8919only a chosen subset of the YAML format that is required to parse cookiecutter
8920user configuration files. It does not have support for serializing into YAML
8921and is not compatible with JSON.")
8922 (license license:expat)))
8923
8924(define-public python-expandvars
8925 (package
8926 (name "python-expandvars")
8927 (version "1.1.2")
8928 (source
8929 (origin
8930 (method url-fetch)
8931 (uri (pypi-uri "expandvars" version))
8932 (sha256
8933 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8934 (build-system pyproject-build-system)
8935 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8936 (native-inputs
8937 (list python-hatchling python-pytest))
8938 (home-page "https://pypi.org/project/expandvars/")
8939 (synopsis "Expand system variables Unix style")
8940 (description "This module is inspired by GNU bash's variable expansion
8941features. It can be used as an alternative to Python's
8942@code{os.path.expandvars} function. A good use case is reading config files
8943with the flexibility of reading values from environment variables using
8944advanced features like returning a default value if some variable is not
8945defined.")
8946 (license license:expat)))
8947
8948(define-public python-expiringdict
8949 (package
8950 (name "python-expiringdict")
8951 (version "1.2.2")
8952 (source
8953 (origin
8954 (method git-fetch)
8955 (uri (git-reference
8956 (url "https://github.com/mailgun/expiringdict")
8957 (commit (string-append "v" version))))
8958 (file-name (git-file-name name version))
8959 (sha256
8960 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8961 (build-system pyproject-build-system)
8962 (arguments
8963 ;; Started failing with [email protected], but it's only repr not functionality
8964 ;; so we should be fine.
8965 (list #:test-flags #~'("-v" "-e" "test_repr")))
8966 (native-inputs
8967 (list python-dill python-mock python-pynose python-setuptools))
8968 (home-page "https://github.com/mailgun/expiringdict")
8969 (synopsis "Dictionary with auto-expiring values for caching purposes")
8970 (description
8971 "This Python library provides an ordered dictionary
8972with a maximum capacity and auto-expiring values for caching purposes.
8973Expiration happens on any access, object is locked during cleanup
8974from expired values.")
8975 (license license:asl2.0)))
8976
8977(define-public python-extension-helpers
8978 (package
8979 (name "python-extension-helpers")
8980 (version "1.4.0")
8981 (source
8982 (origin
8983 (method git-fetch) ; no tests in the PyPI tarball
8984 (uri (git-reference
8985 (url "https://github.com/astropy/extension-helpers")
8986 (commit (string-append "v" version))))
8987 (file-name (git-file-name name version))
8988 (sha256
8989 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8990 (build-system pyproject-build-system)
8991 (arguments
8992 (list
8993 #:test-flags
8994 #~(list "--pyargs" "extension_helpers"
8995 "-k" (string-join
8996 ;; XXX: Tests try to check various compilation options and
8997 ;; fail with some incomparability or trying to download
8998 ;; missing modules.
8999 (list "not test_only_pyproject"
9000 "test_no_setup_py"
9001 "test_limited_api")
9002 " and not "))))
9003 (native-inputs
9004 (list python-pytest
9005 python-setuptools-scm))
9006 (propagated-inputs
9007 (list python-setuptools))
9008 (home-page "https://extension-helpers.readthedocs.io")
9009 (synopsis "Astropy ecosystem utilities for building and installing packages")
9010 (description
9011 "The extension-helpers package includes convenience helpers to assist
9012with building Python packages with compiled C/Cython extensions. It is
9013developed by the Astropy project but is intended to be general and usable by
9014any Python package.")
9015 (license license:bsd-3)))
9016
9017(define-public python-milc
9018 (package
9019 (name "python-milc")
9020 (version "1.9.1")
9021 (source
9022 (origin
9023 (method git-fetch) ;no tests in PyPI archive
9024 (uri (git-reference
9025 (url "https://github.com/clueboard/milc")
9026 (commit version)))
9027 (file-name (git-file-name name version))
9028 (sha256
9029 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
9030 (build-system pyproject-build-system)
9031 (native-inputs
9032 (list python-pytest
9033 python-semver
9034 python-setuptools))
9035 (propagated-inputs
9036 (list python-argcomplete
9037 python-colorama
9038 python-halo
9039 python-platformdirs
9040 python-spinners
9041 python-types-colorama))
9042 (home-page "https://github.com/clueboard/milc")
9043 (synopsis "Python library for command line interface programs")
9044 (description "MILC is a Python library for developing command line
9045interface programs. This library provides features to parse arguments,
9046automatic tab-completion, color support, logging to @code{std}, etc.")
9047 (license license:expat)))
9048
9049(define-public python-extract-dtb
9050 (package
9051 (name "python-extract-dtb")
9052 (version "1.2.3")
9053 (source
9054 (origin
9055 (method git-fetch)
9056 (uri (git-reference
9057 (url "https://github.com/PabloCastellano/extract-dtb/")
9058 (commit version)))
9059 (file-name (git-file-name name version))
9060 (sha256
9061 (base32
9062 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
9063 (build-system pyproject-build-system)
9064 (arguments
9065 (list #:tests? #f)) ;no tests
9066 (native-inputs
9067 (list python-setuptools))
9068 (home-page "https://github.com/PabloCastellano/extract-dtb/")
9069 (synopsis "Extract device tree blobs (DTB) from kernel images")
9070 (description
9071 "This package provides a tool to split a kernel image with appended
9072@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
9073 (license license:gpl3+)))
9074
9075(define-public python-mimeparse
9076 (package
9077 (name "python-mimeparse")
9078 (version "2.0.0")
9079 (source
9080 (origin
9081 (method url-fetch)
9082 (uri (pypi-uri "python_mimeparse" version))
9083 (sha256
9084 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
9085 (build-system pyproject-build-system)
9086 (native-inputs
9087 (list python-pytest
9088 python-setuptools))
9089 (home-page "https://github.com/falconry/python-mimeparse")
9090 (synopsis "Python library for parsing MIME types")
9091 (description
9092 "Mimeparse provides basic functions for parsing MIME type names and
9093matching them against a list of media-ranges.")
9094 (license license:expat)))
9095
9096(define-public python-miniboa
9097 (package
9098 (name "python-miniboa")
9099 (version "1.0.9")
9100 (source
9101 (origin
9102 (method git-fetch) ;no tests in PyPI archive
9103 (uri (git-reference
9104 (url "https://github.com/shmup/miniboa")
9105 (commit (string-append "v" version))))
9106 (file-name (git-file-name name version))
9107 (sha256
9108 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
9109 (build-system pyproject-build-system)
9110 (native-inputs
9111 (list python-pytest
9112 python-setuptools
9113 python-wheel))
9114 (home-page "https://github.com/shmup/miniboa")
9115 (synopsis "Simple, single-threaded Telnet server")
9116 (description
9117 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
9118server.")
9119 (license license:asl2.0)))
9120
9121(define-public python-mir-eval
9122 (package
9123 (name "python-mir-eval")
9124 (version "0.8.2")
9125 (source (origin
9126 (method git-fetch)
9127 (uri (git-reference
9128 (url "https://github.com/mir-evaluation/mir_eval")
9129 (commit version)))
9130 (file-name (git-file-name name version))
9131 (sha256
9132 (base32
9133 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
9134 (build-system pyproject-build-system)
9135 (arguments
9136 (list
9137 #:phases
9138 #~(modify-phases %standard-phases
9139 (add-before 'check 'cd-tests
9140 (lambda _
9141 ;; Move to 'tests' directory because tests read data files from
9142 ;; a relative path.
9143 (chdir "tests"))))))
9144 (propagated-inputs (list python-decorator python-numpy python-scipy))
9145 (native-inputs (list python-matplotlib
9146 python-pytest
9147 python-pytest-mpl
9148 python-setuptools
9149 python-wheel))
9150 (home-page "https://github.com/mir-evaluation/mir_eval")
9151 (synopsis "Common metrics for common audio/music processing tasks")
9152 (description "This is a Python library for computing common heuristic
9153accuracy scores for various music/audio information retrieval/signal
9154processing tasks.")
9155 (license license:expat)))
9156
9157(define-public python-mizani
9158 (package
9159 (name "python-mizani")
9160 (version "0.14.4")
9161 (source
9162 (origin
9163 (method git-fetch)
9164 (uri (git-reference
9165 (url "https://github.com/has2k1/mizani")
9166 (commit (string-append "v" version))))
9167 (file-name (git-file-name name version))
9168 (sha256
9169 (base32 "00n8jbsk35ywa3saypc83p8624kr65xz6m2sbf5js5n17b9m6438"))))
9170 (build-system pyproject-build-system)
9171 (propagated-inputs
9172 (list python-matplotlib
9173 python-numpy
9174 python-pandas
9175 python-scipy))
9176 (native-inputs
9177 (list python-pytest
9178 python-setuptools
9179 python-setuptools-scm
9180 tzdata-for-tests))
9181 (home-page "https://github.com/has2k1/mizani")
9182 (synopsis "Create data visualizations in Python")
9183 (description
9184 "Mizani is a Python package for creating data visualizations. It
9185provides functions and tools to help with the creation of visually appealing
9186and informative visualizations, including scales, transformations and color
9187palettes.")
9188 (license license:bsd-3)))
9189
9190(define-public python-miniupnpc
9191 (package
9192 (name "python-miniupnpc")
9193 (version "2.3.3")
9194 (source
9195 (origin
9196 (method git-fetch)
9197 (uri
9198 (git-reference
9199 ;; The project tags miniupnpd_ as well but with a different version,
9200 ;; where updater may select a wrong version.
9201 (url "https://github.com/miniupnp/miniupnp")
9202 (commit
9203 (string-append
9204 "miniupnpc_" (string-replace-substring version "." "_")))))
9205 (file-name
9206 (git-file-name name version))
9207 (sha256
9208 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
9209 (build-system pyproject-build-system)
9210 (arguments
9211 (list
9212 #:phases
9213 #~(modify-phases %standard-phases
9214 (add-after 'unpack 'subdir
9215 (lambda* (#:key inputs #:allow-other-keys)
9216 (chdir "miniupnpc")
9217 (setenv "CC" #$(cc-for-target))
9218 (substitute* "Makefile"
9219 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
9220 (add-before 'subdir 'remove-kernel-version
9221 ;; Avoid embedding the running kernel version for reproducible builds
9222 (lambda _
9223 (substitute*
9224 "miniupnpc/updateminiupnpcstrings.sh"
9225 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
9226 (replace 'check
9227 (lambda* (#:key tests? #:allow-other-keys)
9228 (when tests?
9229 (invoke "make" "check")))))))
9230 (native-inputs
9231 (list python-setuptools
9232 python-wheel))
9233 (inputs (list python)) ;we are building a Python extension
9234 (synopsis "UPnP client for Python")
9235 (description "Miniupnpc is a client library for Python programs to set up
9236port forwards using @acronym{UPnP, Universal Plug and Play}.")
9237 (home-page "http://miniupnp.free.fr")
9238 (license license:bsd-3)))
9239
9240(define-public python-pyrsistent
9241 (package
9242 (name "python-pyrsistent")
9243 (version "0.20.0")
9244 (home-page "https://github.com/tobgu/pyrsistent")
9245 (source (origin
9246 (method url-fetch)
9247 (uri (pypi-uri "pyrsistent" version))
9248 (sha256
9249 (base32
9250 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9251 (build-system pyproject-build-system)
9252 (native-inputs
9253 (list python-pytest python-setuptools python-wheel))
9254 (synopsis "Persistent data structures for Python")
9255 (description
9256 "Pyrsistent is a number of persistent collections (by some referred to as
9257functional data structures). Persistent in the sense that they are immutable.
9258
9259All methods on a data structure that would normally mutate it instead return a
9260new copy of the structure containing the requested updates. The original
9261structure is left untouched.")
9262 (license license:expat)))
9263
9264(define-public python-exif-read
9265 (package
9266 (name "python-exif-read")
9267 (version "3.3.2")
9268 (source
9269 (origin
9270 (method git-fetch) ;PyPI doesn't contain the test images
9271 (uri (git-reference
9272 (url "https://github.com/ianare/exif-py")
9273 (commit version)))
9274 (file-name (git-file-name name version))
9275 (sha256
9276 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9277 (build-system pyproject-build-system)
9278 (native-inputs (list python-pytest python-setuptools python-wheel))
9279 (home-page "https://github.com/ianare/exif-py")
9280 (synopsis "Python library to extract EXIF data from image files")
9281 (description
9282 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9283files.")
9284 (license license:bsd-3)))
9285
9286(define-public python-pyld
9287 (package
9288 (name "python-pyld")
9289 (version "2.0.4")
9290 (source
9291 (origin
9292 (method git-fetch)
9293 (uri (git-reference
9294 (url "https://github.com/digitalbazaar/pyld")
9295 ;; Not all tags have the 'v' prefix.
9296 (commit (string-append "v" version))))
9297 (file-name (git-file-name name version))
9298 (sha256
9299 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9300 (build-system pyproject-build-system)
9301 (arguments
9302 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9303 (list #:tests? #f))
9304 (native-inputs
9305 (list python-lxml
9306 python-setuptools))
9307 (propagated-inputs
9308 (list python-aiohttp
9309 python-cachetools
9310 python-frozendict
9311 python-requests))
9312 (home-page "https://github.com/digitalbazaar/pyld")
9313 (synopsis "Python implementation of the JSON-LD specification")
9314 (description "PyLD is an implementation of the JSON-LD specification.")
9315 (license license:bsd-3)))
9316
9317(define-public python-cli-helpers
9318 (package
9319 (name "python-cli-helpers")
9320 (version "2.7.0")
9321 (source
9322 (origin
9323 (method url-fetch)
9324 (uri (pypi-uri "cli_helpers" version))
9325 (sha256
9326 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9327 (build-system pyproject-build-system)
9328 (native-inputs
9329 (list python-pytest
9330 python-setuptools))
9331 (propagated-inputs
9332 (list python-configobj
9333 python-tabulate))
9334 (home-page "https://github.com/dbcli/cli_helpers")
9335 (synopsis "Helpers for building command-line apps")
9336 (description
9337 "CLI Helpers is a Python package that makes it easy to perform common
9338tasks when building command-line apps. It's a helper library for command-line
9339interfaces.")
9340 (license license:bsd-3)))
9341
9342(define-public python-click
9343 (package
9344 (name "python-click")
9345 (version "8.4.1")
9346 (source
9347 (origin
9348 (method git-fetch)
9349 (uri (git-reference
9350 (url "https://github.com/pallets/click")
9351 (commit version)))
9352 (file-name (git-file-name name version))
9353 (sha256
9354 (base32 "18fhb6j3fz90088j5xw9vbd9k8xpq0cbk9i7izik4n3q3pm6vq3k"))))
9355 (build-system pyproject-build-system)
9356 (native-inputs
9357 (list less
9358 python-flit-core
9359 python-pytest))
9360 (home-page "https://palletsprojects.com/p/click/")
9361 (synopsis "Command line library for Python")
9362 (description
9363 "Click is a Python package for creating command line interfaces in a
9364composable way with as little code as necessary. Its name stands for
9365\"Command Line Interface Creation Kit\". It's highly configurable but comes
9366with sensible defaults out of the box.")
9367 (license license:bsd-3)))
9368
9369(define-public python-click-7
9370 (package (inherit python-click)
9371 (name "python-click")
9372 (version "7.1.2")
9373 (source
9374 (origin
9375 (method url-fetch)
9376 (uri (pypi-uri "click" version))
9377 (sha256
9378 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9379 (arguments (list #:tests? #f)) ;no tests in PyPI
9380 (native-inputs
9381 (list python-setuptools))))
9382
9383(define-public python-click-8.1
9384 (package
9385 (inherit python-click)
9386 (name "python-click")
9387 (version "8.1.7")
9388 (source
9389 (origin
9390 (method git-fetch)
9391 (uri (git-reference
9392 (url "https://github.com/pallets/click")
9393 (commit version)))
9394 (file-name (git-file-name name version))
9395 (sha256
9396 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9397 (native-inputs
9398 (list less
9399 python-pytest
9400 python-setuptools))))
9401
9402(define-public python-click-aliases
9403 (package
9404 (name "python-click-aliases")
9405 (version "1.0.6")
9406 (source
9407 (origin
9408 (method git-fetch)
9409 (uri (git-reference
9410 (url "https://github.com/click-contrib/click-aliases")
9411 (commit (string-append "v" version))))
9412 (file-name (git-file-name name version))
9413 (sha256
9414 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9415 (build-system pyproject-build-system)
9416 (native-inputs
9417 (list python-pytest
9418 python-poetry-core))
9419 (propagated-inputs
9420 (list python-click))
9421 (home-page "https://github.com/click-contrib/click-aliases")
9422 (synopsis "Enable aliases for Click")
9423 (description
9424 "This package helps to add (mutiple) aliases to a click group or command.")
9425 (license license:expat)))
9426
9427(define-public python-click-option-group
9428 (package
9429 (name "python-click-option-group")
9430 (version "0.5.9")
9431 (source
9432 (origin
9433 (method git-fetch)
9434 (uri (git-reference
9435 (url "https://github.com/click-contrib/click-option-group")
9436 (commit (string-append "v" version))))
9437 (file-name (git-file-name name version))
9438 (sha256
9439 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9440 (build-system pyproject-build-system)
9441 (native-inputs
9442 (list python-hatch-vcs
9443 python-hatchling
9444 python-pytest))
9445 (propagated-inputs
9446 (list python-click))
9447 (home-page "https://click-option-group.readthedocs.io/")
9448 (synopsis "Option groups missing in Click")
9449 (description
9450 "Click is a package for creating powerful and beautiful command line
9451interfaces (CLI) in Python, but it has no the functionality for creating option
9452groups. The aim of this package is to provide group options with extensible
9453functionality using canonical and clean API (Click-like API as far as
9454possible).")
9455 (license license:bsd-3)))
9456
9457(define-public python-clickgen
9458 (package
9459 (name "python-clickgen")
9460 (version "2.2.5")
9461 (source (origin
9462 (method git-fetch)
9463 (uri (git-reference
9464 (url "https://github.com/ful1e5/clickgen")
9465 (commit (string-append "v" version))))
9466 (file-name (git-file-name name version))
9467 (sha256
9468 (base32
9469 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9470 (build-system pyproject-build-system)
9471 (arguments
9472 (list
9473 #:test-flags
9474 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9475 '(list "-k" "not test_clickgen_raises")))
9476 (native-inputs
9477 (list python-pytest
9478 python-setuptools))
9479 (propagated-inputs
9480 (list python-attrs
9481 python-numpy
9482 python-pillow
9483 python-pyyaml
9484 python-toml))
9485 (home-page "https://github.com/ful1e5/clickgen")
9486 (synopsis "The hassle-free cursor building toolbox")
9487 (description
9488 "Clickgen is an API for building X11 and Windows cursors from .png files.
9489clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9490 (license license:expat)))
9491
9492(define-public python-clickhouse-connect
9493 (package
9494 (name "python-clickhouse-connect")
9495 (version "0.6.1")
9496 (source (origin
9497 (method git-fetch)
9498 (uri (git-reference
9499 (url "https://github.com/ClickHouse/clickhouse-connect")
9500 (commit (string-append "v" version))))
9501 (file-name (git-file-name name version))
9502 (sha256
9503 (base32
9504 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9505 (build-system pyproject-build-system)
9506 (arguments
9507 (list
9508 #:test-flags
9509 ;; All these tests require docker-compose
9510 '(list "--ignore-glob=tests/integration_tests/*")
9511 #:phases
9512 '(modify-phases %standard-phases
9513 (add-after 'unpack 'patch-pyproject
9514 (lambda _
9515 ;; Our version of pytest is confused by this field.
9516 (substitute* "pyproject.toml"
9517 (("^env_files.*") ""))))
9518 (add-before 'check 'build-extensions
9519 (lambda _
9520 ;; Cython extensions have to be built before running the tests.
9521 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9522 (propagated-inputs
9523 (list python-arrow
9524 python-certifi
9525 python-lz4
9526 python-numpy
9527 python-orjson
9528 python-pandas
9529 python-pytz
9530 python-setuptools ; For pkg_resources.
9531 python-sqlalchemy
9532 python-urllib3
9533 python-zstandard))
9534 (native-inputs
9535 (list python-cython
9536 python-pytest
9537 python-wheel))
9538 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9539 (synopsis
9540 "ClickHouse database core driver for Python, Pandas, and Superset")
9541 (description
9542 "This package provides a high performance core database driver for
9543connecting ClickHouse to Python, Pandas, and Superset.")
9544 (license license:asl2.0)))
9545
9546(define-public python-cligj
9547 (package
9548 (name "python-cligj")
9549 (version "0.7.2")
9550 (source
9551 (origin
9552 (method url-fetch)
9553 (uri (pypi-uri "cligj" version))
9554 (sha256
9555 (base32
9556 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9557 (build-system pyproject-build-system)
9558 (native-inputs
9559 (list python-pytest
9560 python-setuptools))
9561 (propagated-inputs
9562 (list python-click))
9563 (home-page "https://github.com/mapbox/cligj")
9564 (synopsis "Click params for command line interfaces to GeoJSON")
9565 (description
9566 "cligj is for Python developers who create command line interfaces
9567for geospatial data. cligj allows you to quickly build consistent,
9568well-tested and interoperable CLIs for handling GeoJSON.")
9569 (license license:bsd-3)))
9570
9571(define-public python-cloup
9572 (package
9573 (name "python-cloup")
9574 (version "3.0.8")
9575 (source (origin
9576 (method url-fetch)
9577 (uri (pypi-uri "cloup" version))
9578 (sha256
9579 (base32
9580 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9581 (build-system pyproject-build-system)
9582 (propagated-inputs (list python-click))
9583 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9584 (home-page "https://github.com/janLuke/cloup")
9585 (synopsis "Extension library for python-click")
9586 (description
9587 "Cloup enriches Click with several features that make it more expressive
9588and configurable such as option groups, constraints, subcommand aliases,
9589subcommands sections and a themeable HelpFormatter.")
9590 (license license:bsd-3)))
9591
9592(define-public python-jsondiff
9593 (package
9594 (name "python-jsondiff")
9595 (version "2.2.1")
9596 (source
9597 (origin
9598 (method url-fetch)
9599 (uri (pypi-uri "jsondiff" version))
9600 (sha256
9601 (base32
9602 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9603 (build-system pyproject-build-system)
9604 (arguments
9605 (list
9606 #:phases
9607 #~(modify-phases %standard-phases
9608 (add-before 'build 'set-version
9609 (lambda _
9610 (substitute* "pyproject.toml"
9611 (("^version_file.*") "")
9612 (("dynamic = \\[\"version\"\\]")
9613 (string-append "version = \"" #$version "\""))))))))
9614 (propagated-inputs (list python-pyyaml))
9615 (native-inputs
9616 (list python-hypothesis
9617 python-pytest
9618 python-setuptools
9619 python-setuptools-scm
9620 python-wheel))
9621 (home-page "https://github.com/fzumstein/jsondiff")
9622 (synopsis "Compare JSON and JSON-like structures in Python")
9623 (description "@code{jsondiff} is a Python library which lets you compare,
9624diff, and patch JSON and JSON-like structures in Python.")
9625 (license license:expat)))
9626
9627(define-public python-ddlparse
9628 (package
9629 (name "python-ddlparse")
9630 (version "1.10.0")
9631 (source
9632 (origin
9633 (method url-fetch)
9634 (uri (pypi-uri "ddlparse" version))
9635 (sha256
9636 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9637 (build-system pyproject-build-system)
9638 (native-inputs
9639 (list python-pytest python-setuptools))
9640 (propagated-inputs (list python-pyparsing))
9641 (home-page "https://github.com/shinichi-takii/ddlparse")
9642 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9643 (description "This package provides @code{ddlparse}, a Python library to parse
9644and convert DDL to BigQuery JSON schema.")
9645 (license license:bsd-3)))
9646
9647(define-public python-jsonschema
9648 (package
9649 (name "python-jsonschema")
9650 (version "4.26.0")
9651 (source
9652 (origin
9653 (method git-fetch)
9654 (uri (git-reference
9655 (url "https://github.com/Julian/jsonschema")
9656 (commit (string-append "v" version))))
9657 (file-name (git-file-name name version))
9658 (sha256
9659 (base32 "0p89jy7s1agi2zqrsdm56p843k847n9cixjsc12hnzscll37kysk"))))
9660 (build-system pyproject-build-system)
9661 (arguments
9662 (list
9663 ;; tests: 7762 passed, 53 skipped
9664 #:phases
9665 #~(modify-phases %standard-phases
9666 (add-before 'check 'pre-check
9667 (lambda _
9668 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9669 (native-inputs
9670 (list python-hatchling
9671 python-hatch-fancy-pypi-readme
9672 python-hatch-vcs
9673 python-jsonpath-ng
9674 python-pytest))
9675 (propagated-inputs
9676 (list python-attrs
9677 python-jsonschema-specifications
9678 python-referencing
9679 python-rpds-py
9680 ;; [optional]
9681 python-fqdn
9682 python-idna
9683 python-isoduration
9684 python-jsonpointer
9685 python-rfc3339-validator
9686 python-rfc3986-validator
9687 python-rfc3987-syntax ;sanity-check fails without this
9688 python-uri-template
9689 python-webcolors))
9690 (home-page "https://github.com/Julian/jsonschema")
9691 (synopsis "Implementation of JSON Schema for Python")
9692 (description
9693 "Jsonschema is an implementation of JSON Schema for Python.")
9694 (license license:expat)))
9695
9696;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9697;; version.
9698(define-public python-jsonschema-3
9699 (package
9700 (inherit python-jsonschema)
9701 (version "3.2.0")
9702 (source (origin
9703 (method url-fetch)
9704 (uri (pypi-uri "jsonschema" version))
9705 (sha256
9706 (base32
9707 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9708 (arguments
9709 (substitute-keyword-arguments arguments
9710 ((#:tests? _ #t) #f)))
9711 (propagated-inputs
9712 (list python-attrs
9713 python-pyrsistent
9714 python-typing-extensions))
9715 (native-inputs
9716 (list python-setuptools-scm python-twisted
9717 python-setuptools python-wheel))))
9718
9719;; A bare minimal package, mainly to use in tests and reduce closure size.
9720;; Tests are left out in the main package to slim down native-inputs and
9721;; propagated-inputs.
9722(define-public python-jsonschema-minimal
9723 (package/inherit python-jsonschema
9724 (name "python-jsonschema-minimal")
9725 (arguments
9726 (substitute-keyword-arguments arguments
9727 ((#:tests? _ #t) #f)))
9728 (native-inputs
9729 (list python-hatchling
9730 python-hatch-fancy-pypi-readme
9731 python-hatch-vcs))
9732 (propagated-inputs
9733 (list python-attrs
9734 python-jsonschema-specifications
9735 python-referencing
9736 python-rpds-py))))
9737
9738(define-public python-jsonschema-path
9739 (package
9740 (name "python-jsonschema-path")
9741 (version "0.3.2")
9742 (source
9743 (origin
9744 (method url-fetch)
9745 (uri (pypi-uri "jsonschema_path" version))
9746 (sha256
9747 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9748 (build-system pyproject-build-system)
9749 (arguments
9750 (list
9751 #:tests? #false ;there are none
9752 #:phases
9753 '(modify-phases %standard-phases
9754 (add-after 'unpack 'relax-requirements
9755 (lambda _
9756 (substitute* "pyproject.toml"
9757 (("referencing = \">=0.28.0,<0.32.0\"")
9758 "referencing = \">=0.28.0\"")))))))
9759 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9760 python-requests))
9761 (native-inputs (list python-poetry-core))
9762 (home-page "https://github.com/p1c2u/jsonschema-path")
9763 (synopsis "JSONSchema Spec with object-oriented paths")
9764 (description "This package implements object-oriented JSONSchema. It lets
9765you traverse a schema like paths and access a schema on demand with separate
9766dereferencing accessor layer.")
9767 (license license:asl2.0)))
9768
9769(define-public python-jsonschema-objects
9770 (package
9771 (name "python-jsonschema-objects")
9772 (version "0.5.7")
9773 (source
9774 (origin
9775 (method git-fetch)
9776 (uri (git-reference
9777 (url "https://github.com/cwacek/python-jsonschema-objects/")
9778 (commit version)))
9779 (file-name (git-file-name name version))
9780 (sha256
9781 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9782 (build-system pyproject-build-system)
9783 (native-inputs
9784 (list python-pytest
9785 python-pytest-mock
9786 python-setuptools))
9787 (propagated-inputs
9788 (list python-inflection
9789 python-jsonschema
9790 python-markdown))
9791 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9792 (synopsis "Automatic Python binding generation from JSON schemas")
9793 (description
9794 "This package provides an automatic class-based binding to JSON
9795Schemas for use in python.")
9796 (license license:expat)))
9797
9798(define-public python-jsonschema-specifications
9799 (package
9800 (name "python-jsonschema-specifications")
9801 (version "2025.9.1")
9802 (source
9803 (origin
9804 (method git-fetch)
9805 (uri (git-reference
9806 (url "https://github.com/python-jsonschema/jsonschema-specifications")
9807 (commit (string-append "v" version))))
9808 (file-name (git-file-name name version))
9809 (sha256
9810 (base32 "0fxjcq2qqzahfi9jinns2gmrnjq1zf216dr3i480aphabdx1c67z"))))
9811 (build-system pyproject-build-system)
9812 (native-inputs
9813 (list python-hatch-vcs
9814 python-hatchling
9815 python-pytest))
9816 (propagated-inputs
9817 (list python-referencing))
9818 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9819 (synopsis
9820 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9821 (description
9822 "This package provides JSON support files from the JSON Schema
9823Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9824from Python as a referencing-based Schema Registry.")
9825 (license license:expat)))
9826
9827(define-public python-schema
9828 (package
9829 (name "python-schema")
9830 (version "0.7.8")
9831 (source
9832 (origin
9833 (method git-fetch)
9834 (uri (git-reference
9835 (url "https://github.com/keleshev/schema")
9836 (commit (string-append "v" version))))
9837 (file-name (git-file-name name version))
9838 (sha256
9839 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9840 (build-system pyproject-build-system)
9841 (native-inputs
9842 (list python-pytest python-setuptools))
9843 (home-page "https://github.com/keleshev/schema")
9844 (synopsis "Simple data validation library")
9845 (description
9846 "@code{python-schema} is a library for validating Python data
9847structures, such as those obtained from config-files, forms, external
9848services or command-line parsing, converted from JSON/YAML (or
9849something else) to Python data-types.")
9850 (license license:psfl)))
9851
9852(define-public python-kitchen
9853 (package
9854 (name "python-kitchen")
9855 (version "1.2.6")
9856 (source
9857 (origin
9858 (method git-fetch)
9859 (uri (git-reference
9860 (url "https://github.com/fedora-infra/kitchen")
9861 (commit version)))
9862 (file-name (git-file-name name version))
9863 (sha256
9864 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9865 (build-system pyproject-build-system)
9866 (arguments
9867 (list
9868 #:test-flags
9869 #~(list "kitchen3"
9870 ;; XXX: Unclear why these tests fail.
9871 "-e" "test_invalid_fallback_no_raise"
9872 "-e" "test_internal_generate_combining_table"
9873 "-e" "test_lgettext"
9874 "-e" "test_lngettext"
9875 "-e" "test_easy_gettext_setup_non_unicode")
9876 #:phases
9877 #~(modify-phases %standard-phases
9878 (add-before 'check 'delete-broken-test-files
9879 (lambda _
9880 (delete-file "kitchen3/tests/test__all__.py")
9881 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9882 (native-inputs (list python-pynose python-setuptools))
9883 (home-page "https://github.com/fedora-infra/kitchen")
9884 (synopsis "Python API for snippets")
9885 (description
9886 "@code{kitchen} module provides a python API for all sorts of little
9887useful snippets of code that everybody ends up writing for their projects but
9888never seem big enough to build an independent release. Use kitchen and stop
9889cutting and pasting that code over and over.")
9890 (license (list license:lgpl2.1+
9891 ;; subprocess.py, test_subprocess.py,
9892 ;; kitchen/pycompat25/defaultdict.py:
9893 license:psfl))))
9894
9895(define-public python-roman
9896 (package
9897 (name "python-roman")
9898 (version "5.2")
9899 (source
9900 (origin
9901 (method git-fetch)
9902 (uri (git-reference
9903 (url "https://github.com/zopefoundation/roman")
9904 (commit version)))
9905 (file-name (git-file-name name version))
9906 (sha256
9907 (base32
9908 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9909 (build-system pyproject-build-system)
9910 (arguments
9911 (list
9912 #:test-backend #~'unittest
9913 #:test-flags #~(list "discover" "-s" "src")))
9914 (native-inputs (list python-setuptools))
9915 (home-page "https://github.com/zopefoundation/roman")
9916 (synopsis "Integer to Roman numerals converter")
9917 (description
9918 "This package provides a small helper library to convert Arabic Numbers
9919to Roman Numerals.")
9920 (license license:zpl2.1)))
9921
9922(define-public python-rollbar
9923 (package
9924 (name "python-rollbar")
9925 (version "1.3.0")
9926 (source (origin
9927 (method url-fetch)
9928 (uri (pypi-uri "rollbar" version))
9929 (sha256
9930 (base32
9931 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9932 (build-system pyproject-build-system)
9933 (native-inputs (list python-httpx
9934 python-pytest
9935 python-setuptools
9936 python-webob
9937 python-wheel))
9938 (inputs (list python-requests))
9939 (home-page "https://github.com/rollbar/pyrollbar")
9940 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9941 (description
9942 "Python SDK for reporting exceptions, errors, and log messages
9943to @url{https://rollbar.com/, Rollbar}.
9944
9945Capabilities include:
9946
9947@itemize @bullet
9948@item Sending messages and exceptions with arbitrary context
9949@item Getting back aggregates
9950@item Debugging production issues
9951@end itemize")
9952 (license license:expat)))
9953
9954(define-public python-pyjwt
9955 (package
9956 (name "python-pyjwt")
9957 (version "2.10.1")
9958 (source
9959 (origin
9960 (method url-fetch)
9961 (uri (pypi-uri "pyjwt" version))
9962 (sha256
9963 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9964 (build-system pyproject-build-system)
9965 (arguments
9966 (list
9967 ;; tests: 286 passed, 4 skipped, 1 deselected
9968 ;;
9969 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9970 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9971 ;; resolution>"
9972 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9973 (native-inputs
9974 (list python-pytest
9975 python-setuptools))
9976 (propagated-inputs
9977 (if (supported-package? python-cryptography)
9978 (list python-cryptography)
9979 '()))
9980 (home-page "https://github.com/progrium/pyjwt")
9981 (synopsis "JSON Web Token implementation in Python")
9982 (description
9983 "PyJWT is a JSON Web Token implementation written in Python.")
9984 (license license:expat)))
9985
9986(define-public python-pymsgbox
9987 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9988 (revision "1"))
9989 (package
9990 (name "python-pymsgbox")
9991 (version (git-version "1.0.6" revision commit))
9992 (source
9993 (origin
9994 (method git-fetch)
9995 (uri (git-reference
9996 (url "https://github.com/asweigart/PyMsgBox")
9997 (commit commit)))
9998 (file-name (git-file-name name version))
9999 (sha256
10000 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
10001 (build-system pyproject-build-system)
10002 (arguments
10003 ;; Circular dependency to run tests:
10004 ;; Tests need pyautogui, which depends on pymsgbox.
10005 '(#:tests? #f))
10006 (native-inputs (list python-setuptools python-wheel))
10007 (home-page "https://github.com/asweigart/PyMsgBox")
10008 (synopsis "Python module for JavaScript-like message boxes")
10009 (description
10010 "PyMsgBox is a simple, cross-platform, pure Python module for
10011JavaScript-like message boxes. Types of dialog boxes include:
10012@enumerate
10013@item alert
10014@item confirm
10015@item prompt
10016@item password
10017@end enumerate
10018")
10019 (license license:bsd-3))))
10020
10021(define-public python-pympler
10022 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
10023 (revision "0"))
10024 (package
10025 (name "python-pympler")
10026 (version (git-version "1.1" revision commit))
10027 (source
10028 (origin
10029 (method git-fetch)
10030 (uri (git-reference
10031 (url "https://github.com/pympler/pympler")
10032 (commit commit)))
10033 (file-name (git-file-name name version))
10034 (sha256
10035 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
10036 (build-system pyproject-build-system)
10037 (arguments
10038 (list
10039 #:tests? #f ;FIXME: tests timeout.
10040 #:test-flags
10041 #~(list
10042 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
10043 ;; != 'function (muppy.test_summary.func)'.
10044 ;; See <https://github.com/pympler/pympler/issues/134>.
10045 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
10046 ;; This test times out.
10047 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback"
10048 "--deselect=test/muppy/test_tracker.py::TrackerTest::test_otracker_diff")))
10049 (native-inputs
10050 (list python-pytest python-setuptools))
10051 (home-page "https://pythonhosted.org/Pympler/")
10052 (synopsis "Measure, monitor and analyze memory behavior")
10053 (description
10054 "Pympler is a development tool to measure, monitor and analyze
10055the memory behavior of Python objects in a running Python application.
10056
10057By pympling a Python application, detailed insight in the size and the
10058lifetime of Python objects can be obtained. Undesirable or unexpected
10059runtime behavior like memory bloat and other @samp{pymples} can easily
10060be identified.
10061
10062A web profiling frontend exposes process statistics, garbage
10063visualisation and class tracker statistics.")
10064 (license license:asl2.0))))
10065
10066(define-public python-itsdangerous
10067 (package
10068 (name "python-itsdangerous")
10069 (version "2.2.0")
10070 (source
10071 (origin
10072 (method url-fetch)
10073 (uri (pypi-uri "itsdangerous" version))
10074 (sha256
10075 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
10076 (build-system pyproject-build-system)
10077 (native-inputs
10078 (list python-flit-core
10079 python-freezegun
10080 python-pytest))
10081 (home-page "https://palletsprojects.com/p/itsdangerous/")
10082 (synopsis "Python library for passing data to/from untrusted environments")
10083 (description
10084 "Itsdangerous provides various helpers to pass trusted data to untrusted
10085environments and back.")
10086 (license license:bsd-3)))
10087
10088;; WARNING: This package is a dependency of mesa.
10089(define-public python-pyyaml
10090 (package
10091 (name "python-pyyaml")
10092 (version "6.0.3")
10093 (source
10094 (origin
10095 (method git-fetch)
10096 (uri (git-reference
10097 (url "https://github.com/yaml/pyyaml")
10098 (commit version)))
10099 (file-name (git-file-name name version))
10100 (sha256
10101 (base32 "0w00gkjqx1g8c5gdm9qqznnj7ijzfjqwqgymppqw5lbw38h2hjld"))))
10102 (build-system pyproject-build-system)
10103 (native-inputs
10104 (list python-cython
10105 python-pytest
10106 python-setuptools))
10107 (inputs
10108 (list libyaml))
10109 (home-page "https://pyyaml.org")
10110 (synopsis "YAML parser and emitter for Python")
10111 (description
10112 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
10113complete YAML 1.1 parser, Unicode support, pickle support, capable extension
10114API, and sensible error messages. PyYAML supports standard YAML tags and
10115provides Python-specific tags that represent an arbitrary Python object.")
10116 (license license:expat)))
10117
10118(define-public python-crossenv
10119 (package
10120 (name "python-crossenv")
10121 (version "1.6.1")
10122 (source
10123 (origin
10124 (method git-fetch)
10125 (uri (git-reference
10126 (url "https://github.com/benfogle/crossenv")
10127 (commit (string-append "v" version))))
10128 (file-name (git-file-name name version))
10129 (sha256
10130 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
10131 (build-system pyproject-build-system)
10132 (arguments
10133 (list
10134 ;; XXX: Running test require setting environment variables for
10135 ;; architectures.
10136 #:tests? #f))
10137 (native-inputs (list python-hatchling))
10138 (home-page "https://github.com/benfogle/crossenv")
10139 (synopsis "Cross-compiling virtualenv for Python")
10140 (description
10141 "This package is a tool for cross-compiling extension modules. It
10142creates a special virtual environment such that @command{pip} or
10143@file{setup.py} will cross compile packages for you, usually with no further
10144work on your part.")
10145 (license license:expat)))
10146
10147(define-public python-linkify-it-py
10148 (package
10149 (name "python-linkify-it-py")
10150 (version "2.1.0")
10151 (source (origin
10152 (method git-fetch)
10153 (uri (git-reference
10154 (url "https://github.com/tsutsu3/linkify-it-py")
10155 (commit (string-append "v" version))))
10156 (file-name (git-file-name name version))
10157 (sha256
10158 (base32
10159 "006yvm2pcilq60zb02ijhdma26csynhkffb8wscjmjzbwqq8fzqh"))))
10160 (build-system pyproject-build-system)
10161 (propagated-inputs (list python-uc-micro-py))
10162 (native-inputs (list python-pytest python-setuptools))
10163 (home-page "https://github.com/tsutsu3/linkify-it-py")
10164 (synopsis "Links recognition library with full Unicode support")
10165 (description "This is Python port of
10166@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
10167recognition library with full Unicode support. It has features like:
10168@itemize
10169@item Full unicode support, with @i{astral} characters
10170@item International domains support
10171@item Allows rules extension and custom normalizers.
10172@end itemize")
10173 (license license:expat)))
10174
10175(define-public python-makefun
10176 (package
10177 (name "python-makefun")
10178 ;; Released version fails tests in Python 3.12 due to asyncio
10179 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
10180 (revision . "0")))
10181 (version (git-version "1.16.0"
10182 (assoc-ref properties 'revision)
10183 (assoc-ref properties 'commit)))
10184 (source
10185 (origin
10186 (method git-fetch)
10187 (uri (git-reference
10188 (url "https://github.com/smarie/python-makefun")
10189 (commit (assoc-ref properties 'commit))))
10190 (file-name (git-file-name name version))
10191 (sha256
10192 (base32
10193 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
10194 (build-system pyproject-build-system)
10195 (native-inputs
10196 (list python-pytest
10197 python-pytest-asyncio
10198 python-setuptools
10199 python-setuptools-scm))
10200 (home-page "https://github.com/smarie/python-makefun")
10201 (synopsis "Library to dynamically create python functions")
10202 (description "@code{makefun} helps create functions dynamically with a
10203given signature. It was largely inspired by @code{python-decorator} and
10204@code{functools}.")
10205 (license license:bsd-3)))
10206
10207(define-public python-markdown-it-py
10208 (package
10209 (name "python-markdown-it-py")
10210 (version "4.0.0")
10211 (source
10212 (origin
10213 (method git-fetch)
10214 (uri (git-reference
10215 (url "https://github.com/executablebooks/markdown-it-py")
10216 (commit (string-append "v" version))))
10217 (file-name (git-file-name name version))
10218 (sha256
10219 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
10220 (build-system pyproject-build-system)
10221 (arguments (list #:test-flags #~(list "--benchmark-disable")))
10222 (native-inputs
10223 (list python-flit-core
10224 python-pytest
10225 python-pytest-benchmark
10226 python-pytest-regressions
10227 python-requests))
10228 (propagated-inputs
10229 (list python-commonmark
10230 python-linkify-it-py
10231 python-markdown
10232 python-mdurl
10233 python-mistletoe
10234 python-mistune
10235 python-panflute
10236 python-pyyaml))
10237 (home-page "https://github.com/executablebooks/markdown-it-py")
10238 (synopsis "Python port of markdown-it")
10239 (description
10240 "This is a Python port of @code{markdown-it}, and some of its associated
10241plugins. The driving design philosophy of the port has been to change as
10242little of the fundamental code structure (file names, function name, etc) as
10243possible.")
10244 (license license:expat)))
10245
10246(define-public python-markupsafe
10247 (package
10248 (name "python-markupsafe")
10249 (version "3.0.3")
10250 (source
10251 (origin
10252 (method url-fetch)
10253 (uri (pypi-uri "markupsafe" version))
10254 (sha256
10255 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10256 (build-system pyproject-build-system)
10257 ;; tests: 79 passed, 1 skipped
10258 (native-inputs
10259 (list python-pytest
10260 python-setuptools))
10261 (home-page "https://markupsafe.palletsprojects.com")
10262 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10263 (description
10264 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10265for Python.")
10266 (license license:bsd-3)))
10267
10268(define-public python-jinja2
10269 (package
10270 (name "python-jinja2")
10271 (version "3.1.6")
10272 (source
10273 (origin
10274 (method git-fetch)
10275 (uri (git-reference
10276 (url "https://github.com/pallets/jinja")
10277 (commit version)))
10278 (file-name (git-file-name name version))
10279 (sha256
10280 (base32 "01ds59a1cync34xq7s0q6f50k9nvn2n80zh62qa2a8vnr7fz5nlv"))))
10281 (build-system pyproject-build-system)
10282 (native-inputs
10283 (list python-flit-core
10284 python-pytest
10285 python-trio))
10286 (propagated-inputs
10287 (list python-markupsafe))
10288 (home-page "https://jinja.palletsprojects.com/")
10289 (synopsis "Python template engine")
10290 (description
10291 "Jinja2 is a small but fast and easy to use stand-alone template engine
10292written in pure Python.")
10293 (license license:bsd-3)))
10294
10295(define-public python-jinja2-fragments
10296 (package
10297 (name "python-jinja2-fragments")
10298 (version "1.11.0")
10299 (source
10300 (origin
10301 (method git-fetch)
10302 (uri (git-reference
10303 (url "https://github.com/sponsfreixes/jinja2-fragments")
10304 (commit version)))
10305 (file-name (git-file-name name version))
10306 (sha256
10307 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10308 (patches
10309 ;; Remove test setup code related to `litestar` and `sanic`
10310 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10311 (build-system pyproject-build-system)
10312 (arguments
10313 (list
10314 #:test-flags
10315 #~(list "--ignore=tests/test_litestar.py"
10316 "--ignore=tests/test_sanic.py")))
10317 (native-inputs
10318 (list python-fastapi
10319 python-flask
10320 python-pytest
10321 python-pytest-asyncio
10322 python-quart
10323 python-setuptools))
10324 (propagated-inputs
10325 (list python-jinja2))
10326 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10327 (synopsis "Jinja2 extension for template fragments")
10328 (description
10329 "Render Jinja2 template block as HTML page fragments on Python web
10330frameworks.")
10331 (license license:expat)))
10332
10333(define-public python-pypugjs
10334 (package
10335 (name "python-pypugjs")
10336 (version "5.12.0")
10337 (source
10338 (origin
10339 (method git-fetch)
10340 (uri (git-reference
10341 (url "https://github.com/kakulukia/pypugjs")
10342 (commit (string-append "v" version))))
10343 (file-name (git-file-name name version))
10344 (sha256
10345 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10346 (build-system pyproject-build-system)
10347 (native-inputs (list python-django
10348 python-jinja2
10349 python-flask
10350 python-mako
10351 python-poetry-core
10352 python-pytest
10353 python-tornado))
10354 (propagated-inputs (list python-charset-normalizer python-six))
10355 (home-page "https://github.com/kakulukia/pypugjs")
10356 (synopsis "Convert Pug source files into different template languages")
10357 (description
10358 "PyPugJS is a high-performance port of PugJS for Python, that converts
10359any @file{.pug} source into different template languages: Django, Jinja2,
10360Mako, and Tornado.")
10361 (license license:expat))) ;; MIT
10362
10363(define-public python-pysrt
10364 (package
10365 (name "python-pysrt")
10366 (version "1.1.2")
10367 (source
10368 (origin
10369 (method git-fetch)
10370 (uri (git-reference
10371 (url "https://github.com/byroot/pysrt")
10372 (commit (string-append "v" version))))
10373 (file-name (git-file-name name version))
10374 (sha256
10375 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10376 (build-system pyproject-build-system)
10377 (arguments
10378 (list
10379 #:test-backend #~'unittest
10380 #:phases
10381 #~(modify-phases %standard-phases
10382 (add-after 'unpack 'fix-python-incompatibilities
10383 (lambda _
10384 (substitute* (find-files "tests" "\\.py$")
10385 (("assertEquals") "assertEqual")))))))
10386 (propagated-inputs (list python-chardet))
10387 (native-inputs (list python-setuptools))
10388 (home-page "https://github.com/byroot/pysrt")
10389 (synopsis "SubRip Text subtitle parser and writer")
10390 (description
10391 "This package provides a Python library to edit or create
10392SubRip Text files, and additionally a command-line program @command{srt}
10393to shift, split or rescale them.")
10394 (license license:gpl3+)))
10395
10396(define-public python-pystache
10397 (package
10398 (name "python-pystache")
10399 (version "0.6.8")
10400 (source (origin
10401 (method url-fetch)
10402 (uri (pypi-uri "pystache" version))
10403 (sha256
10404 (base32
10405 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10406 (build-system pyproject-build-system)
10407 (native-inputs (list python-pytest python-setuptools python-wheel))
10408 (home-page "http://defunkt.io/pystache/")
10409 (synopsis "Python logic-less template engine")
10410 (description
10411 "Pystache is a Python implementation of the framework agnostic,
10412logic-free templating system Mustache.")
10413 (license license:expat)))
10414
10415(define-public python-pystack
10416 (package
10417 (name "python-pystack")
10418 (version "1.5.1")
10419 (source
10420 (origin
10421 (method git-fetch)
10422 (uri (git-reference
10423 (url "https://github.com/bloomberg/pystack")
10424 (commit (string-append "v" version))))
10425 (file-name (git-file-name name version))
10426 (sha256
10427 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10428 (build-system pyproject-build-system)
10429 (arguments
10430 (list
10431 ;; Integration tests need ptrace and gcore (gdb).
10432 #:test-flags #~(list "tests/unit")))
10433 (native-inputs
10434 (list python-cython
10435 python-pkgconfig
10436 python-pytest
10437 python-setuptools))
10438 (inputs
10439 (list elfutils))
10440 (home-page "https://github.com/bloomberg/pystack")
10441 (synopsis "Python stack trace analyzer for core dumps and live processes")
10442 (description
10443 "PyStack analyzes stack frames of running Python processes or Python core
10444dumps. It can inspect what a process is doing or what it was doing when it
10445crashed, without modifying any memory or executing code in the target process.")
10446 (license license:asl2.0)))
10447
10448(define-public python-pystitcher
10449 (package
10450 (name "python-pystitcher")
10451 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10452 (revision . "0")
10453 (upstream-version . "1.0.5")))
10454 (version (git-version (assoc-ref properties 'upstream-version)
10455 (assoc-ref properties 'revision)
10456 (assoc-ref properties 'commit)))
10457 (source
10458 (origin
10459 (method git-fetch)
10460 (uri (git-reference
10461 (url "https://github.com/captn3m0/pystitcher")
10462 (commit (assoc-ref properties 'commit))))
10463 (file-name (git-file-name name version))
10464 (sha256
10465 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10466 (build-system pyproject-build-system)
10467 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10468 (inputs (list python-html5lib
10469 python-markdown
10470 python-pypdf
10471 python-validators))
10472 (home-page "https://github.com/captn3m0/pystitcher")
10473 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10474 (description
10475 "This package stitches your PDF files together, generating customizable
10476bookmarks using a declarative input in the form of a markdown file.")
10477 (license license:expat)))
10478
10479(define-public python-joblib
10480 (package
10481 (name "python-joblib")
10482 (version "1.5.3")
10483 (source
10484 (origin
10485 (method git-fetch)
10486 (uri (git-reference
10487 (url "https://github.com/joblib/joblib")
10488 (commit version)))
10489 (file-name (git-file-name name version))
10490 (sha256
10491 (base32 "0vblgi0mb1jcwgf8f3rslw82g28fjl6n52mwgsm7p7y2nrixdrjb"))))
10492 (build-system pyproject-build-system)
10493 (arguments
10494 (list
10495 ;; tests: 1319 passed, 103 skipped, 3 xpassed, 563 warnings
10496 #:test-flags
10497 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10498 ;; Disabled to avoid having to depend on ipython/jupyter.
10499 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10500 (native-inputs
10501 (list python-pytest
10502 python-pytest-asyncio
10503 python-pytest-xdist
10504 python-setuptools))
10505 (home-page "https://joblib.readthedocs.io/")
10506 (synopsis "Using Python functions as pipeline jobs")
10507 (description
10508 "Joblib is a set of tools to provide lightweight pipelining in Python.
10509In particular, joblib offers: transparent disk-caching of the output values
10510and lazy re-evaluation (memoize pattern), easy simple parallel computing
10511logging and tracing of the execution.")
10512 (license license:bsd-3)))
10513
10514(define-public python-daemon
10515 (package
10516 (name "python-daemon")
10517 (version "3.1.2")
10518 (source
10519 (origin
10520 (method git-fetch)
10521 (uri (git-reference
10522 (url "https://pagure.io/python-daemon")
10523 (commit (string-append "release/" version))))
10524 (file-name (git-file-name name version))
10525 (sha256
10526 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10527 (patches
10528 (search-patches "python-daemon-relax-lockfile.patch"))))
10529 (build-system pyproject-build-system)
10530 (arguments
10531 (list
10532 #:phases
10533 #~(modify-phases %standard-phases
10534 (add-after 'unpack 'discard-dynamic-metadata
10535 (lambda _
10536 (substitute* "pyproject.toml"
10537 (("^dynamic = " all)
10538 (format #f "version = ~s~%~a" #$version all))
10539 (("\"(description|readme|version|maintainers)\",")
10540 ""))
10541 (for-each delete-file
10542 '("setup.py"
10543 "test/test_util_metadata.py"
10544 "test/test_setup.py")))))))
10545 (propagated-inputs (list python-filelock))
10546 (native-inputs (list python-testscenarios python-setuptools))
10547 (home-page "https://pagure.io/python-daemon/")
10548 (synopsis "Python library for making a Unix daemon process")
10549 (description
10550 "Python-daemon is a library that assists a Python program to turn itself
10551into a well-behaved Unix daemon process, as specified in PEP 3143.
10552
10553This library provides a @code{DaemonContext} class that manages the following
10554important tasks for becoming a daemon process:
10555@enumerate
10556@item Detach the process into its own process group.
10557@item Set process environment appropriate for running inside a chroot.
10558@item Renounce suid and sgid privileges.
10559@item Close all open file descriptors.
10560@item Change the working directory, uid, gid, and umask.
10561@item Set appropriate signal handlers.
10562@item Open new file descriptors for stdin, stdout, and stderr.
10563@item Manage a specified PID lock file.
10564@item Register cleanup functions for at-exit processing.
10565@end enumerate")
10566 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10567 (license (list license:asl2.0 license:gpl3+))))
10568
10569(define-public python-annotated-types
10570 (package
10571 (name "python-annotated-types")
10572 (version "0.7.0")
10573 (source
10574 (origin
10575 (method url-fetch)
10576 (uri (pypi-uri "annotated_types" version))
10577 (sha256
10578 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10579 (build-system pyproject-build-system)
10580 (native-inputs
10581 (list python-hatchling
10582 python-pytest))
10583 (propagated-inputs (list python-typing-extensions))
10584 (home-page "https://github.com/annotated-types/annotated-types")
10585 (synopsis "Reusable constraint types to use with typing.Annotated")
10586 (description "This package provides metadata objects which can be used to
10587represent common constraints such as upper and lower bounds on scalar values and
10588collection sizes, a Predicate marker for runtime checks, and descriptions of how
10589we intend these metadata to be interpreted. In some cases, we also note
10590alternative representations which do not require this package.")
10591 (license license:expat)))
10592
10593(define-public python-anytree
10594 (package
10595 (name "python-anytree")
10596 (version "2.13.0")
10597 (source
10598 (origin
10599 (method git-fetch) ; no tests data in PyPi package
10600 (uri (git-reference
10601 (url "https://github.com/c0fec0de/anytree")
10602 (commit version)))
10603 (file-name (git-file-name name version))
10604 (sha256
10605 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10606 (build-system pyproject-build-system)
10607 (arguments
10608 (list
10609 #:phases
10610 #~(modify-phases %standard-phases
10611 (add-before 'check 'pre-check
10612 (lambda _
10613 ;; Tests need to write to that direcroty.
10614 (mkdir-p "tests/dotexport/"))))))
10615 (native-inputs
10616 (list graphviz ;for 'dot'
10617 python-pdm-backend
10618 python-pytest
10619 python-pyyaml
10620 python-test2ref))
10621 (home-page "https://github.com/c0fec0de/anytree")
10622 (synopsis "Lightweight tree data library")
10623 (description
10624 "@code{anytree} is a simple, lightweight, and extensible tree data
10625structure for Python.")
10626 (license license:asl2.0)))
10627
10628(define-public kalamine
10629 (package
10630 (name "kalamine")
10631 (version "0.38")
10632 (source
10633 (origin
10634 (method url-fetch)
10635 (uri (pypi-uri "kalamine" version))
10636 (sha256
10637 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10638 (build-system pyproject-build-system)
10639 (arguments
10640 (list
10641 #:phases
10642 #~(modify-phases %standard-phases
10643 (add-before 'check 'make-test-layouts
10644 (lambda _
10645 (apply invoke
10646 (cons* "python" "-m" "kalamine.cli" "build"
10647 (find-files "layouts" "\\.toml")))
10648 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10649 (propagated-inputs
10650 (list python-click
10651 python-livereload
10652 python-lxml
10653 python-progress
10654 python-pyyaml
10655 python-tomli))
10656 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10657 ;; packaged.
10658 (native-inputs
10659 (list python-hatchling python-pytest))
10660 (home-page "https://github.com/OneDeadKey/kalamine")
10661 (synopsis "Keyboard layout maker")
10662 (description
10663 "Kalamine provides a CLI to create advanced keyboard layout from a
10664textual portable description. It also supports layout emulation via web
10665browser.")
10666 (license license:expat)))
10667
10668(define-public python-dm-tree
10669 (package
10670 (name "python-dm-tree")
10671 (version "0.1.9")
10672 (source
10673 (origin
10674 (method url-fetch)
10675 (uri (pypi-uri "dm_tree" version))
10676 (sha256
10677 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10678 (build-system pyproject-build-system)
10679 (arguments
10680 (list #:tests? #f
10681 #:phases
10682 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10683 ;; and USE_SYSTEM_PYBIND11=true.
10684 #~(modify-phases %standard-phases
10685 (add-before 'build 'build-shared-lib
10686 (lambda _
10687 (let* ((pybind11 #$(this-package-input "pybind11"))
10688 (python #$(this-package-input "python"))
10689 (version (python-version python))
10690 (abseil-cpp #$(this-package-input "abseil-cpp")))
10691 ;; Delete default cmake build.
10692 (substitute* "setup.py"
10693 (("ext_modules.*") "")
10694 (("cmdclass.*") ""))
10695 ;; Actual build phase.
10696 (mkdir-p "build/temp/tree/")
10697 (invoke
10698 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10699 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10700 "-fno-semantic-interposition" "-fPIC"
10701 "-I" (string-append pybind11
10702 "/lib/python" version
10703 "/site-packages/pybind11/include")
10704 "-I" (string-append python "/include/python"
10705 version)
10706 "-I" (string-append abseil-cpp "/include")
10707 "-c" "tree/tree.cc"
10708 "-o" "build/temp/tree/tree.o"
10709 "-fvisibility=hidden" "-g0")
10710 (mkdir-p "build/lib/tree")
10711 (invoke
10712 "g++" "-pthread" "-shared"
10713 (string-append "-Wl," "-rpath=" python "/lib")
10714 "-fno-semantic-interposition"
10715 "build/temp/tree/tree.o"
10716 "-L" (string-append python "/lib")
10717 (string-append abseil-cpp "/lib/libabsl_int128.a")
10718 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10719 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10720 (string-append abseil-cpp "/lib/libabsl_strings.a")
10721 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10722 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10723 "-o" "build/lib/tree/_tree.so")))))))
10724 ;; We link the static abseil libraries here to avoid problems in
10725 ;; downstream libraries using potentially different variants of
10726 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10727 (native-inputs
10728 (list python-setuptools))
10729 (inputs
10730 (list pybind11-2
10731 static-abseil-cpp
10732 python))
10733 (propagated-inputs
10734 (list python-absl-py
10735 python-attrs
10736 python-numpy
10737 python-wrapt))
10738 (home-page "https://github.com/deepmind/tree")
10739 (synopsis "Work with nested data structures in Python")
10740 (description "Tree is a python library for working with nested data
10741structures. In a way, @code{tree} generalizes the builtin @code{map} function
10742which only supports flat sequences, and allows you to apply a function to each
10743leaf preserving the overall structure.")
10744 (license license:asl2.0)))
10745
10746(define-public python-pyment
10747 (package
10748 (name "python-pyment")
10749 (version "0.3.4")
10750 (source
10751 (origin
10752 (method git-fetch)
10753 (uri
10754 (git-reference
10755 (url "https://github.com/dadadel/pyment")
10756 (commit (string-append "v" version))))
10757 (file-name (git-file-name name version))
10758 (sha256
10759 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10760 (build-system pyproject-build-system)
10761 (native-inputs (list python-pytest python-setuptools))
10762 (home-page "https://github.com/dadadel/pyment/")
10763 (synopsis "Convert Python docstrings automatically")
10764 (description "Pyment is a command line tool and library that can be
10765used to convert between several docstring styles.")
10766 (license license:gpl3+)))
10767
10768(define-public python-docstring-parser
10769 (package
10770 (name "python-docstring-parser")
10771 (version "0.15")
10772 (source (origin
10773 (method url-fetch)
10774 (uri (pypi-uri "docstring_parser" version))
10775 (sha256
10776 (base32
10777 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10778 (build-system pyproject-build-system)
10779 (native-inputs (list python-poetry-core python-pytest))
10780 (home-page "https://github.com/rr-/docstring_parser")
10781 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10782 (description "This package lets you parse Python docstrings in reST,
10783Google and Numpydoc format.")
10784 (license license:expat)))
10785
10786(define-public python-docutils
10787 (package
10788 (name "python-docutils")
10789 (version "0.22.4")
10790 (source
10791 (origin
10792 (method url-fetch)
10793 (uri (pypi-uri "docutils" version))
10794 (sha256
10795 (base32 "0s4ryafs954ivgb7bifzpbv98vb2mcr0s8wi9nvwpglsvqgkpdad"))))
10796 (build-system pyproject-build-system)
10797 (arguments
10798 (list
10799 #:test-backend #~'custom
10800 #:test-flags #~(list "test/alltests.py")
10801 #:phases
10802 (if (target-hurd?)
10803 #~(modify-phases %standard-phases
10804 (add-before 'check 'fix-errno
10805 (lambda _
10806 ;; Some tests check for an exact error message
10807 ;; Expecting ENOENT == 2.
10808 (substitute* (find-files "test" "\\.py$")
10809 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10810 #~%standard-phases)))
10811 (native-inputs
10812 (list python-flit-core))
10813 (home-page "https://docutils.sourceforge.net/")
10814 (synopsis "Python Documentation Utilities")
10815 (description
10816 "Docutils is a modular system for processing documentation into useful
10817formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10818easy to use markup language, for input.
10819
10820This package provides tools for converting @file{.rst} files to other formats
10821via commands such as @command{rst2man}, as well as supporting Python code.")
10822 ;; Most of the source code is public domain, but some source files are
10823 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10824 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10825
10826(define-public python-docutils-0.19
10827 (hidden-package
10828 (package
10829 (inherit python-docutils)
10830 (version "0.19")
10831 (source (origin
10832 (method url-fetch)
10833 (uri (pypi-uri "docutils" version))
10834 (sha256
10835 (base32
10836 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10837 (native-inputs
10838 (list python-setuptools)))))
10839
10840(define-public python-docx
10841 (package
10842 (name "python-docx")
10843 (version "1.2.0")
10844 (source (origin
10845 (method url-fetch)
10846 (uri (pypi-uri "python_docx" version))
10847 (sha256
10848 (base32
10849 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10850 (build-system pyproject-build-system)
10851 (native-inputs
10852 (list behave
10853 python-pyparsing
10854 python-pytest
10855 python-setuptools
10856 python-wheel))
10857 (propagated-inputs
10858 (list python-lxml python-typing-extensions))
10859 (home-page "https://github.com/python-openxml/python-docx/")
10860 (synopsis "Python library to create and modify Microsoft Word documents")
10861 (description "This Python library can be used to create and update
10862Microsoft Word (.docx) documents.")
10863 (license license:expat)))
10864
10865(define-public python-repoze-lru
10866 (package
10867 (name "python-repoze-lru")
10868 (version "0.7")
10869 (source
10870 (origin
10871 (method url-fetch)
10872 (uri (pypi-uri "repoze.lru" version))
10873 (sha256
10874 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10875 (build-system pyproject-build-system)
10876 (arguments
10877 (list
10878 #:test-backend #~'unittest
10879 #:test-flags #~(list "discover" "repoze")))
10880 (native-inputs
10881 (list python-setuptools))
10882 (home-page "https://www.repoze.org")
10883 (synopsis "Tiny LRU cache implementation and decorator")
10884 (description
10885 "This package provides a tiny LRU cache implementation and decorator.")
10886 (license license:bsd-4)))
10887
10888(define-public python-reretry
10889 (package
10890 (name "python-reretry")
10891 (version "0.11.8")
10892 (source
10893 (origin
10894 (method git-fetch)
10895 (uri (git-reference
10896 (url "https://github.com/leshchenko1979/reretry")
10897 (commit version)))
10898 (file-name (git-file-name name version))
10899 (sha256
10900 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10901 (build-system pyproject-build-system)
10902 (native-inputs
10903 (list python-pytest python-pytest-asyncio python-setuptools))
10904 (home-page "https://github.com/leshchenko1979/reretry")
10905 (synopsis "Functional decorator for retrying on exceptions")
10906 (description
10907 "This package is a fork from the retry package, but with some of added
10908community-sourced features. It provides an easy to use, but functional
10909decorator for retrying on exceptions.")
10910 (license license:asl2.0)))
10911
10912(define-public python-restructuredtext-lint
10913 (package
10914 (name "python-restructuredtext-lint")
10915 (version "2.0.2")
10916 (source
10917 (origin
10918 (method git-fetch)
10919 (uri (git-reference
10920 (url "https://github.com/twolfson/restructuredtext-lint")
10921 (commit version)))
10922 (file-name (git-file-name name version))
10923 (sha256
10924 (base32 "1q86a1qd9xwyl5h76b4yk2hpbnbyq6llla7rmnnp9ifrgax6vx6j"))))
10925 (build-system pyproject-build-system)
10926 (arguments (list #:test-backend #~'unittest))
10927 (propagated-inputs (list python-docutils))
10928 (native-inputs (list python-setuptools))
10929 (home-page "https://github.com/twolfson/restructuredtext-lint")
10930 (synopsis "Linter")
10931 (description
10932 "This package provides a linter for the reStructuredText format.")
10933 (license license:unlicense)))
10934
10935(define-public python-click-repl
10936 (package
10937 (name "python-click-repl")
10938 ;; To support Python 3.12, see:
10939 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10940 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10941 (revision . "1")))
10942 (version (git-version "0.3.0"
10943 (assoc-ref properties 'revision)
10944 (assoc-ref properties 'commit)))
10945 (source
10946 (origin
10947 (method git-fetch)
10948 (uri (git-reference
10949 (url "https://github.com/click-contrib/click-repl")
10950 (commit (assoc-ref properties 'commit))))
10951 (file-name (git-file-name name version))
10952 (sha256
10953 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10954 (build-system pyproject-build-system)
10955 (native-inputs
10956 (list python-pytest
10957 python-setuptools))
10958 (propagated-inputs
10959 (list python-click
10960 python-prompt-toolkit))
10961 (home-page "https://github.com/click-contrib/click-repl")
10962 (synopsis "REPL plugin for Click")
10963 (description "This package provides a REPL plugin for Click.")
10964 (license license:expat)))
10965
10966(define-public python-pygdbmi
10967 (package
10968 (name "python-pygdbmi")
10969 (version "0.11.0.0")
10970 (source
10971 (origin
10972 (method url-fetch)
10973 (uri (pypi-uri "pygdbmi" version))
10974 (sha256
10975 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10976 (build-system pyproject-build-system)
10977 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10978 (native-inputs (list python-setuptools python-wheel))
10979 (home-page "https://github.com/cs01/pygdbmi")
10980 (synopsis "Parse gdb machine interface output with Python")
10981 (description "This package provides a parse gdb machine interface output
10982with Python.")
10983 (license license:expat)))
10984
10985(define-public python-pygtrie
10986 (package
10987 (name "python-pygtrie")
10988 (version "2.5.0")
10989 (source
10990 (origin
10991 (method git-fetch)
10992 (uri (git-reference
10993 (url "https://github.com/mina86/pygtrie")
10994 (commit (string-append "v" version))))
10995 (file-name (git-file-name name version))
10996 (sha256
10997 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10998 (build-system pyproject-build-system)
10999 (arguments
11000 (list
11001 #:test-backend #~'unittest
11002 #:phases
11003 #~(modify-phases %standard-phases
11004 (add-after 'unpack 'set-version
11005 (lambda _
11006 (delete-file "version.py")
11007 (substitute* "setup.py"
11008 (("import version")
11009 "")
11010 (("version\\.get_version\\(\\)")
11011 (format #f "~s" #$version))))))))
11012 (native-inputs (list python-setuptools))
11013 (home-page "https://github.com/mina86/pygtrie")
11014 (synopsis "Pure Python trie data structure implementation")
11015 (description
11016 "This package provides a pure Python trie data structure implementation.")
11017 (license license:asl2.0)))
11018
11019(define-public python-bump2version
11020 (package
11021 (name "python-bump2version")
11022 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
11023 (revision . "1")))
11024 (version (git-version "1.0.1"
11025 (assoc-ref properties 'revision)
11026 (assoc-ref properties 'commit)))
11027 (source
11028 (origin
11029 (method git-fetch)
11030 (uri (git-reference
11031 (url "https://github.com/c4urself/bump2version")
11032 (commit (assoc-ref properties 'commit))))
11033 (file-name (git-file-name name version))
11034 (sha256
11035 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
11036 (build-system pyproject-build-system)
11037 (arguments
11038 ;; XXX: Single flaky failing test.
11039 (list #:test-flags #~(list "-k" "not test_usage_string")))
11040 (native-inputs (list python-pytest python-setuptools python-testfixtures))
11041 (home-page "https://github.com/c4urself/bump2version")
11042 (synopsis "Version-bump your software with a single command!")
11043 (description
11044 "This package provides a small command line tool to simplify releasing
11045software by updating all version strings in your source code by the correct
11046increment. It also creates commits and tags.")
11047 (license license:expat)))
11048
11049(define-public python-deprecated
11050 (package
11051 (name "python-deprecated")
11052 (version "1.3.1")
11053 (source
11054 (origin
11055 (method git-fetch)
11056 (uri (git-reference
11057 (url "https://github.com/tantale/deprecated")
11058 (commit (string-append "v" version))))
11059 (file-name (git-file-name name version))
11060 (sha256
11061 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
11062 (build-system pyproject-build-system)
11063 (native-inputs
11064 (list python-pytest
11065 python-setuptools))
11066 (propagated-inputs
11067 (list python-wrapt))
11068 (home-page "https://github.com/tantale/deprecated")
11069 (synopsis "Python decorator to deprecate classes, functions or methods")
11070 (description
11071 "The @code{deprecated} decorator provides a convenient way to deprecate
11072to deprecate classes, functions or methods.")
11073 (license license:expat)))
11074
11075(define-public python-pygithub
11076 (package
11077 (name "python-pygithub")
11078 (version "2.8.1")
11079 (source
11080 (origin
11081 (method git-fetch)
11082 (uri (git-reference
11083 (url "https://github.com/PyGithub/PyGithub")
11084 (commit (string-append "v" version))))
11085 (file-name (git-file-name name version))
11086 (sha256
11087 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
11088 (build-system pyproject-build-system)
11089 (propagated-inputs
11090 (list python-pyjwt
11091 python-pynacl
11092 python-requests
11093 python-typing-extensions
11094 python-urllib3))
11095 (native-inputs
11096 (list python-responses
11097 python-pytest
11098 python-setuptools
11099 python-setuptools-scm))
11100 (home-page "https://pygithub.readthedocs.io/en/latest/")
11101 (synopsis "Python library for the GitHub API")
11102 (description "This library allows managing GitHub resources such as
11103repositories, user profiles, and organizations in your Python applications,
11104using version 3 of the GitHub application programming interface (API).")
11105 (license license:lgpl3+)))
11106
11107(define-public python-rellu
11108 (package
11109 (name "python-rellu")
11110 (version "0.7")
11111 (source
11112 (origin
11113 (method git-fetch)
11114 (uri (git-reference
11115 (url "https://github.com/robotframework/rellu")
11116 (commit (string-append "v" version))))
11117 (file-name (git-file-name name version))
11118 (sha256
11119 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
11120 (build-system pyproject-build-system)
11121 (native-inputs (list python-pytest python-setuptools))
11122 (propagated-inputs (list python-invoke python-pygithub))
11123 (home-page "https://github.com/robotframework/rellu")
11124 (synopsis "Utilities to create PyPI releases")
11125 (description
11126 "This collection of utilities contains tooling and templates to assist in
11127creating releases on GitHub and publishing them on PyPI. It is designed to be
11128used by Robot Framework and tools and libraries in its ecosystem, but can
11129naturally be used also by other projects.")
11130 (license license:asl2.0)))
11131
11132(define-public python-robotframework
11133 (package
11134 (name "python-robotframework")
11135 (version "7.3.2")
11136 (source
11137 (origin
11138 (method git-fetch) ; no tests in the PyPI archive
11139 (uri (git-reference
11140 (url "https://github.com/robotframework/robotframework")
11141 (commit (string-append "v" version))))
11142 (file-name (git-file-name name version))
11143 (sha256
11144 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
11145 (outputs '("out" "doc"))
11146 (build-system pyproject-build-system)
11147 (arguments
11148 (list
11149 #:modules '((guix build pyproject-build-system)
11150 (guix build utils)
11151 (ice-9 ftw)
11152 (ice-9 match)
11153 (srfi srfi-26))
11154 #:phases
11155 #~(modify-phases %standard-phases
11156 (add-before 'build 'build-and-install-doc
11157 (lambda* (#:key outputs #:allow-other-keys)
11158 (let ((doc (string-append #$output:doc
11159 "/share/doc/robotframework")))
11160 (invoke "invoke" "library-docs" "all")
11161 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
11162 (mkdir-p doc)
11163 (with-directory-excursion "dist"
11164 (define user-guide-dir
11165 (match (scandir "." (cut string-prefix?
11166 "robotframework-userguide-" <>))
11167 ((dir) dir)
11168 (_ (error "could not find the user guide directory"))))
11169 (copy-recursively user-guide-dir doc)))))
11170 (replace 'check
11171 (lambda* (#:key tests? #:allow-other-keys)
11172 (when tests?
11173 ;; TODO: Some acceptance failed and took near 30min to
11174 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
11175 ;; to skip failing ones.
11176 (format #t "Running unit tests...~%")
11177 (invoke "utest/run.py")))))))
11178 (native-inputs
11179 (list python-docutils
11180 python-invoke
11181 python-jsonschema
11182 python-pygments
11183 python-rellu
11184 python-typing-extensions
11185 python-setuptools
11186 `(,python "tk") ;used when building the HTML doc
11187 python-wheel))
11188 (home-page "https://robotframework.org")
11189 (synopsis "Generic automation framework")
11190 (description "Robot Framework is a generic automation framework for
11191acceptance testing, acceptance test driven development (ATDD), and robotic
11192process automation (RPA).")
11193 (license license:asl2.0)))
11194
11195(define-public python-robotframework-datadriver
11196 (package
11197 (name "python-robotframework-datadriver")
11198 (version "1.11.2")
11199 (source
11200 (origin
11201 (method git-fetch) ; no tests in PyPI release
11202 (uri (git-reference
11203 (url "https://github.com/Snooz82/robotframework-datadriver")
11204 (commit version)))
11205 (file-name (git-file-name name version))
11206 (sha256
11207 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
11208 (build-system pyproject-build-system)
11209 (arguments
11210 (list
11211 #:phases
11212 #~(modify-phases %standard-phases
11213 (add-before 'check 'skip-problematic-tests
11214 (lambda _
11215 (for-each delete-file-recursively
11216 (list
11217 ;; The test file 'tab-csv-file-name.tsv' contains
11218 ;; special characters for which there is no locale
11219 ;; in the build environment, causing one test to
11220 ;; fail.
11221 "atest/TestCases/csv_reader_config"
11222 ;; Error in file on line 6: Non-existing setting
11223 ;; 'Test Tags'.
11224 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
11225 (replace 'check
11226 (lambda* (#:key tests? #:allow-other-keys)
11227 (when tests?
11228 (with-directory-excursion "atest"
11229 (invoke "sh" "run_atest.sh"))))))))
11230 (native-inputs
11231 (list python-docutils
11232 python-robotframework-stacktrace
11233 python-setuptools
11234 python-xlrd))
11235 (propagated-inputs
11236 (list python-openpyxl
11237 python-pandas
11238 python-pygments
11239 python-robotframework))
11240 (home-page "https://github.com/Snooz82/robotframework-datadriver")
11241 (synopsis "Data-driven test extension for Robot Framework")
11242 (description "DataDriver is a data-driven extension for Robot Framework.
11243DataDriver uses the Listener Interface of Robot Framework to create new test
11244cases based on a data file that contains the test data. DataDriver supports
11245data files in the CSV, XLS or XLSX formats.")
11246 (license license:asl2.0)))
11247
11248(define-public python-robotframework-pabot
11249 (package
11250 (name "python-robotframework-pabot")
11251 (version "4.2.0")
11252 (source
11253 (origin
11254 ;; There are no tests in the PyPI archive.
11255 (method git-fetch)
11256 (uri (git-reference
11257 (url "https://github.com/mkorpela/pabot")
11258 (commit version)))
11259 (file-name (git-file-name name version))
11260 (sha256
11261 (base32
11262 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11263 (build-system pyproject-build-system)
11264 (arguments
11265 (list
11266 #:test-flags
11267 #~(list "-k" (string-join
11268 ;; XXX: Maybe it's a bad idea to skip these tests which
11269 ;; failing assertions highlight incomparability issues.
11270 ;;
11271 ;; 93 passed, 23 deselected, 11 warnings
11272 (list "not test_argumentfile_outputs"
11273 "test_dependency_ok"
11274 "test_longnames_in_tests"
11275 "test_multiple_dependencies_ok"
11276 "test_orders"
11277 "test_pabotprerunmodifier"
11278 "test_pabotprerunmodifier_with_prerunmodifier"
11279 "test_pabotprerunmodifier_with_testlevelsplit"
11280 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11281 "test_parallel_execution"
11282 "test_parallel_execution_with_testlevelsplit"
11283 "test_pre_run_with_new_name"
11284 "test_pre_run_with_new_tag"
11285 "test_run_dir_2_then_dir_3"
11286 "test_run_dir_3_then_dir_2"
11287 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11288 "test_sleep_test_cases_and_group"
11289 "test_stdout_should_display_passed_test"
11290 "test_stdout_should_display_passed_test"
11291 "test_stdout_should_display_passed_test_and_not_"
11292 "test_testlevelsplit_output_task_order"
11293 "test_too_big_testname"
11294 "test_two_orders")
11295 " and not "))
11296 #:phases
11297 #~(modify-phases %standard-phases
11298 (add-after 'unpack 'relax-requirements
11299 (lambda _
11300 (substitute* "setup.cfg"
11301 ;; natsort>=8.2.0
11302 ((">=8.2.0") "")))))))
11303 (native-inputs
11304 (list python-pytest
11305 python-setuptools
11306 python-wheel))
11307 (propagated-inputs
11308 (list python-natsort
11309 python-robotframework
11310 python-robotframework-stacktrace))
11311 (home-page "https://pabot.org")
11312 (synopsis "Parallel test runner for Robot Framework")
11313 (description "Pabot is a parallel executor for Robot Framework tests.")
11314 (license license:asl2.0)))
11315
11316(define-public python-robotframework-stacktrace
11317 (package
11318 (name "python-robotframework-stacktrace")
11319 (version "0.4.1")
11320 (source
11321 (origin
11322 (method git-fetch)
11323 (uri (git-reference
11324 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11325 (commit version)))
11326 (file-name (git-file-name name version))
11327 (sha256
11328 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11329 (build-system pyproject-build-system)
11330 (arguments
11331 ;; XXX: The test suite fails (see:
11332 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11333 (list
11334 #:tests? #f
11335 #:phases
11336 #~(modify-phases %standard-phases
11337 (add-after 'unpack 'set-version
11338 (lambda _
11339 (substitute* "setup.py"
11340 (("VERSION =.*")
11341 (string-append "VERSION = '" #$version "'"))))))))
11342 (native-inputs (list python-setuptools))
11343 (propagated-inputs (list python-robotframework))
11344 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11345 (synopsis "Robot Framework listener to print a stack trace on error")
11346 (description "StackTrace is a Robot Framework listener that prints a stack
11347trace directly to the terminal to ease debugging.")
11348 (license license:asl2.0)))
11349
11350(define-public python-robotframework-sshlibrary
11351 (package
11352 (name "python-robotframework-sshlibrary")
11353 (version "3.8.0")
11354 ;; There are no tests in the PyPI archive.
11355 (source
11356 (origin
11357 (method git-fetch)
11358 (uri (git-reference
11359 (url "https://github.com/robotframework/SSHLibrary")
11360 (commit (string-append "v" version))))
11361 (file-name (git-file-name name version))
11362 (sha256
11363 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11364 (patches (search-patches
11365 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11366 (build-system pyproject-build-system)
11367 (arguments
11368 (list
11369 #:phases
11370 #~(modify-phases %standard-phases
11371 (add-after 'unpack 'fix-python-incompatibilities
11372 (lambda _
11373 (substitute* (find-files "utest" "\\.py$")
11374 (("assertEquals") "assertEqual"))))
11375 (add-before 'build 'build-and-install-doc
11376 (lambda _
11377 (let ((doc (string-append #$output:doc
11378 "/share/doc/robotframework-sshlibrary")))
11379 (invoke "chmod" "-R" "+w" "docs")
11380 (invoke "invoke" "kw-docs" "project-docs")
11381 (mkdir-p doc)
11382 (for-each delete-file
11383 (find-files "docs" "\\.rst"))
11384 (copy-recursively "docs" doc))))
11385 (replace 'check
11386 (lambda* (#:key tests? #:allow-other-keys)
11387 (when tests?
11388 ;; Some tests require an SSH server; we remove them.
11389 (delete-file "utest/test_client_api.py")
11390 (delete-file "utest/test_scp.py")
11391 (invoke "python" "utest/run.py")))))))
11392 (propagated-inputs
11393 (list python-robotframework python-paramiko python-scp))
11394 (native-inputs
11395 (list openssh
11396 which
11397 ;; To generate the documentation
11398 python-docutils
11399 python-invoke
11400 python-pygments
11401 python-rellu
11402 python-setuptools))
11403 (outputs '("out" "doc"))
11404 (home-page "https://github.com/robotframework/SSHLibrary")
11405 (synopsis "Robot Framework library for SSH and SFTP")
11406 (description
11407 "SSHLibrary is a Robot Framework library providing support for SSH and
11408SFTP. It has the following main usages:
11409@itemize @bullet
11410@item Executing commands on the remote machine, either blocking or non-blocking.
11411@item Writing and reading in an interactive shell.
11412@item Transferring files and directories over SFTP.
11413@item Ensuring that files and directories exist on the remote machine.
11414@end itemize")
11415 (license license:asl2.0)))
11416
11417(define-public python-robotframework-pythonlibcore
11418 (package
11419 (name "python-robotframework-pythonlibcore")
11420 (version "4.4.1")
11421 (source
11422 (origin
11423 (method git-fetch) ;no tests in pypi archive
11424 (uri (git-reference
11425 (url "https://github.com/robotframework/PythonLibCore")
11426 (commit (string-append "v" version))))
11427 (file-name (git-file-name name version))
11428 (sha256
11429 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11430 (build-system pyproject-build-system)
11431 (arguments
11432 (list
11433 #:test-backend #~'custom
11434 #:test-flags #~(list "utest/run.py")))
11435 (native-inputs
11436 (list python-approvaltests
11437 python-pytest
11438 python-pytest-cov ; This package has a custom way to run tests.
11439 python-pytest-mockito
11440 python-robotframework
11441 python-setuptools))
11442 (home-page "https://github.com/robotframework/PythonLibCore")
11443 (synopsis "Robot Framework Python library tools")
11444 (description
11445 "PythonLibCore provides tools for creating larger test libraries for
11446Robot Framework using Python. The Robot Framework hybrid and dynamic library
11447APIs give more flexibility for library than the static library API, but they
11448also set requirements for libraries which need to be implemented in the
11449library side. PythonLibCore eases the problem by providing a simpler
11450interface and by handling all the requirements towards the Robot Framework
11451library APIs.")
11452 (license license:asl2.0)))
11453
11454(define-public python-robotframework-seleniumlibrary
11455 (package
11456 (name "python-robotframework-seleniumlibrary")
11457 (version "6.8.0")
11458 (source
11459 (origin
11460 (method git-fetch)
11461 (uri (git-reference
11462 (url "https://github.com/robotframework/SeleniumLibrary")
11463 (commit (string-append "v" version))))
11464 (file-name (git-file-name name version))
11465 (sha256
11466 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11467 (build-system pyproject-build-system)
11468 (arguments
11469 (list
11470 #:test-flags
11471 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11472 "-k" (string-join
11473 (list "not test_create_firefox_with_options"
11474 "test_create_headless_firefox_with_options"
11475 "test_create_driver_firefox")
11476 " and not "))))
11477 (native-inputs
11478 (list python-approvaltests
11479 python-pytest
11480 python-pytest-mockito
11481 python-setuptools))
11482 (propagated-inputs
11483 (list python-click
11484 python-robotframework
11485 python-robotframework-pythonlibcore
11486 python-selenium))
11487 (home-page "https://github.com/robotframework/SeleniumLibrary")
11488 (synopsis "Web testing library for Robot Framework")
11489 (description "SeleniumLibrary is a web testing library for Robot Framework
11490that utilizes the Selenium tool internally.")
11491 (license license:asl2.0)))
11492
11493(define-public python-robotframework-seleniumscreenshots
11494 (package
11495 (name "python-robotframework-seleniumscreenshots")
11496 (version "0.9.5")
11497 (source
11498 (origin
11499 (method git-fetch)
11500 (uri (git-reference
11501 (url
11502 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11503 (commit version)))
11504 (file-name (git-file-name name version))
11505 (sha256
11506 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11507 (build-system pyproject-build-system)
11508 (arguments
11509 ;; XXX: The tests require a relatively complicated setup configured in
11510 ;; their CI with Nix (!).
11511 `(#:tests? #f))
11512 (native-inputs (list python-setuptools))
11513 (propagated-inputs
11514 (list python-robotframework python-robotframework-seleniumlibrary))
11515 (home-page
11516 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11517 (synopsis
11518 "Robot Framework library for annotating and cropping screenshots")
11519 (description
11520 "The SeleniumScreenshots library for Robot Framework provides keywords
11521for annotating and cropping screenshots taken with SeleniumLibrary. It is
11522useful for scripting automatically updated screenshots for documentation or
11523for visual regression testing purposes.")
11524 (license license:bsd-3)))
11525
11526(define-public python-rstr
11527 (package
11528 (name "python-rstr")
11529 (version "3.2.2")
11530 (source
11531 (origin
11532 (method git-fetch)
11533 (uri (git-reference
11534 (url "https://github.com/leapfrogonline/rstr")
11535 (commit version)))
11536 (file-name (git-file-name name version))
11537 (sha256
11538 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11539 (build-system pyproject-build-system)
11540 (native-inputs (list python-pytest
11541 python-setuptools
11542 python-setuptools-scm
11543 python-wheel))
11544 (home-page "https://github.com/leapfrogonline/rstr")
11545 (synopsis "Generate random strings in Python")
11546 (description "This package provides a python module for generating
11547random strings of various types. It could be useful for fuzz testing,
11548generating dummy data, or other applications. It has no dependencies
11549outside the standard library.")
11550 (license license:bsd-3)))
11551
11552(define-public python-scp
11553 (package
11554 (name "python-scp")
11555 (version "0.15.0")
11556 (source
11557 (origin
11558 (method git-fetch)
11559 (uri (git-reference
11560 (url "https://github.com/jbardin/scp.py")
11561 (commit (string-append "v" version))))
11562 (file-name (git-file-name name version))
11563 (sha256
11564 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11565 (build-system pyproject-build-system)
11566 (arguments (list #:tests? #f)) ;tests require an SSH server
11567 (native-inputs (list python-setuptools))
11568 (propagated-inputs (list python-paramiko))
11569 (home-page "https://github.com/jbardin/scp.py")
11570 (synopsis "SCP protocol module for Python and Paramiko")
11571 (description
11572 "The scp module extends the Paramiko library to send and receive files
11573via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11574 (license license:gpl2+)))
11575
11576(define-public python-rst-linker
11577 (package
11578 (name "python-rst-linker")
11579 (version "2.6.0")
11580 (source
11581 (origin
11582 (method git-fetch)
11583 (uri (git-reference
11584 (url "https://github.com/jaraco/rst.linker")
11585 (commit (string-append "v" version))))
11586 (file-name (git-file-name name version))
11587 (sha256
11588 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11589 (build-system pyproject-build-system)
11590 (propagated-inputs (list python-jaraco-context))
11591 (native-inputs
11592 (list python-path
11593 python-jaraco-vcs
11594 python-pytest
11595 python-pytest-subprocess
11596 python-setuptools-scm
11597 python-setuptools))
11598 (home-page "https://github.com/jaraco/rst.linker")
11599 (synopsis "Sphinx plugin to add links and timestamps")
11600 (description
11601 "rst.linker automatically replaces text by a reStructuredText external
11602reference or timestamps. It's primary purpose is to augment the changelog,
11603but it can be used for other documents, too.")
11604 (license license:expat)))
11605
11606(define-public python-feedgenerator
11607 (package
11608 (name "python-feedgenerator")
11609 (version "2.1.0")
11610 (source
11611 (origin
11612 (method url-fetch)
11613 (uri (pypi-uri "feedgenerator" version))
11614 (sha256
11615 (base32
11616 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11617 (build-system pyproject-build-system)
11618 (native-inputs
11619 (list python-pytest python-setuptools python-wheel))
11620 (propagated-inputs
11621 (list python-pytz))
11622 (home-page "https://github.com/getpelican/feedgenerator")
11623 (synopsis
11624 "Standalone version of Django's Atom/RSS feed generator")
11625 (description
11626 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11627which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11628 (license license:bsd-3)))
11629
11630(define-public python-lsp-jsonrpc
11631 (package
11632 (name "python-lsp-jsonrpc")
11633 (version "1.1.2")
11634 (source
11635 (origin
11636 (method url-fetch)
11637 (uri (pypi-uri "python-lsp-jsonrpc" version))
11638 (sha256
11639 (base32
11640 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11641 (build-system pyproject-build-system)
11642 (native-inputs
11643 (list python-pyflakes
11644 python-pytest
11645 python-setuptools
11646 python-setuptools-scm
11647 python-wheel))
11648 (propagated-inputs
11649 (list python-ujson))
11650 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11651 (synopsis "JSON RPC 2.0 server library")
11652 (description
11653 "This package provides a JSON RPC 2.0 server library for Python.")
11654 (license license:expat)))
11655
11656(define-public python-pydantic
11657 (package
11658 (name "python-pydantic")
11659 (version "2.12.5")
11660 (source
11661 (origin
11662 (method git-fetch)
11663 (uri (git-reference
11664 (url "https://github.com/samuelcolvin/pydantic")
11665 (commit (string-append "v" version))))
11666 (file-name (git-file-name name version))
11667 (sha256
11668 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11669 (build-system pyproject-build-system)
11670 (arguments
11671 (list
11672 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11673 #:test-flags
11674 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11675 (native-inputs
11676 (list tzdata-for-tests
11677 python-dirty-equals-bootstrap
11678 python-faker
11679 python-hatch-fancy-pypi-readme
11680 python-hatchling
11681 python-jsonschema
11682 python-pytest
11683 python-pytest-benchmark
11684 python-pytest-examples
11685 python-pytest-mock
11686 python-pytest-run-parallel
11687 python-pytz))
11688 (propagated-inputs
11689 (list python-annotated-types
11690 python-pydantic-core ;it's hard == requirement, keep it in sync
11691 python-typing-extensions
11692 python-typing-inspection))
11693 (home-page "https://github.com/samuelcolvin/pydantic")
11694 (synopsis "Python data validation and settings management")
11695 (description
11696 "Pydantic enforces type hints at runtime, and provides user friendly
11697errors when data is invalid.")
11698 (license license:expat)))
11699
11700(define-public python-pydantic-core
11701 (package
11702 (name "python-pydantic-core")
11703 (version "2.41.5")
11704 (source
11705 (origin
11706 (method url-fetch)
11707 (uri (pypi-uri "pydantic_core" version))
11708 (sha256
11709 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11710 (build-system pyproject-build-system)
11711 (arguments
11712 (list
11713 #:imported-modules `(,@%cargo-build-system-modules
11714 ,@%pyproject-build-system-modules)
11715 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11716 (guix build pyproject-build-system)
11717 (guix build utils))
11718 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11719 #:test-flags
11720 #~(list "--ignore=tests/benchmarks"
11721 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11722 ;; python-pydantic-core -> python-pydantic ->
11723 ;; python-inline-snapshot -> python-pydantic-core
11724 "--ignore=tests/test_docstrings.py"
11725 "--ignore=tests/test_hypothesis.py"
11726 "--ignore=tests/validators/test_allow_partial.py"
11727 "--ignore=tests/validators/test_frozenset.py"
11728 "--ignore=tests/validators/test_list.py"
11729 "--ignore=tests/validators/test_set.py")
11730 #:phases
11731 #~(modify-phases %standard-phases
11732 (add-after 'unpack 'prepare-cargo-build-system
11733 (lambda args
11734 (for-each (lambda (phase)
11735 (format #t "Running cargo phase: ~a~%" phase)
11736 (apply (assoc-ref cargo:%standard-phases phase)
11737 #:cargo-target #$(cargo-triplet)
11738 args))
11739 '(unpack-rust-crates
11740 configure
11741 check-for-pregenerated-files
11742 patch-cargo-checksums)))))))
11743 (native-inputs
11744 (append
11745 (list maturin
11746 python-dirty-equals-bootstrap
11747 python-pytest
11748 python-pytest-benchmark ;TODO: disable in pyproject.toml
11749 python-pytest-mock
11750 python-pytest-timeout
11751 python-typing-inspection
11752 python-tzdata
11753 rust
11754 `(,rust "cargo"))
11755 (or (and=> (%current-target-system)
11756 (compose list make-rust-sysroot))
11757 '())))
11758 (inputs
11759 (cargo-inputs 'python-pydantic-core))
11760 (propagated-inputs
11761 (list python-typing-extensions))
11762 (home-page "https://github.com/pydantic/pydantic-core")
11763 (synopsis "Core validation logic for pydantic")
11764 (description "This package provides the core functionality for pydantic
11765validation and serialization.")
11766 (license license:expat)))
11767
11768(define-public python-pydantic-cli
11769 (package
11770 (name "python-pydantic-cli")
11771 (version "9.1.0")
11772 (source
11773 (origin
11774 (method git-fetch) ;for tests
11775 (uri (git-reference
11776 (url "https://github.com/mpkocher/pydantic-cli")
11777 (commit (string-append "v" version))))
11778 (file-name (git-file-name name version))
11779 (sha256
11780 (base32
11781 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11782 (build-system pyproject-build-system)
11783 (propagated-inputs
11784 (list python-pydantic))
11785 (native-inputs
11786 (list python-hatchling python-pytest))
11787 (home-page "https://github.com/mpkocher/pydantic-cli")
11788 (synopsis "Turn Pydantic defined data models into CLI tools")
11789 (description
11790 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11791Interfaces} via data models provided in the JSON format.")
11792 (license license:expat)))
11793
11794(define-public python-pydantic-extra-types
11795 (package
11796 (name "python-pydantic-extra-types")
11797 (version "2.10.6")
11798 (source
11799 (origin
11800 (method git-fetch)
11801 (uri (git-reference
11802 (url "https://github.com/pydantic/pydantic-extra-types")
11803 (commit (string-append "v" version))))
11804 (file-name (git-file-name name version))
11805 (sha256
11806 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11807 (build-system pyproject-build-system)
11808 (arguments
11809 (list
11810 ;; tests: 13079 passed, 1 deselected
11811 #:test-flags
11812 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11813 #~(list "--ignore=tests/test_s3.py"
11814 "--deselect=tests/test_coordinate.py::test_json_schema"
11815 ;; XXX: The most of the tests fail, pendulum is optional package
11816 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11817 ;; requires Rust.
11818 "--ignore=tests/test_pendulum_dt.py"
11819 "--ignore=tests/test_json_schema.py")
11820 #:phases
11821 #~(modify-phases %standard-phases
11822 (add-before 'check 'pre-check
11823 (lambda* (#:key inputs #:allow-other-keys)
11824 (setenv "TZ" "UTC")
11825 (setenv "TZDIR" (search-input-directory inputs
11826 "share/zoneinfo")))))))
11827 (native-inputs
11828 (list python-pytest
11829 python-hatchling
11830 tzdata-for-tests))
11831 (propagated-inputs
11832 (list python-pydantic
11833 python-typing-extensions
11834 ;; [optional]
11835 python-cron-converter
11836 ;; python-pendulum
11837 python-phonenumbers
11838 python-pycountry
11839 python-pymongo
11840 python-pytz
11841 python-semver
11842 python-tzdata
11843 python-ulid))
11844 (home-page "https://github.com/pydantic/pydantic-extra-types")
11845 (synopsis "Extra Pydantic types")
11846 (description "This package provides sxtra types for Pydantic.")
11847 (license license:expat)))
11848
11849(define-public python-pydantic-settings
11850 (package
11851 (name "python-pydantic-settings")
11852 (version "2.12.0")
11853 (source
11854 (origin
11855 (method url-fetch)
11856 (uri (pypi-uri "pydantic_settings" version))
11857 (sha256
11858 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11859 (build-system pyproject-build-system)
11860 (arguments
11861 (list
11862 ;; tests: 399 passed, 27 skipped
11863 #:test-flags
11864 ;; XXX: Ignore tests requiring python-ruff.
11865 #~(list "--ignore=tests/test_docs.py")
11866 #:phases
11867 #~(modify-phases %standard-phases
11868 (add-before 'check 'set-home
11869 (lambda _
11870 ;; FileNotFoundError: [Errno 2] No such file or directory:
11871 ;; '/homeless-shelter/
11872 (setenv "HOME" "/tmp"))))))
11873 (native-inputs
11874 (list python-hatchling
11875 python-pytest
11876 python-pytest-examples
11877 python-pytest-mock))
11878 (propagated-inputs
11879 (list python-dotenv
11880 python-pydantic
11881 python-typing-inspection
11882 ;; [optional]
11883 python-pyyaml
11884 python-tomli))
11885 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11886 (synopsis "Settings management using Pydantic")
11887 (description
11888 "Pydantic Settings provides optional Pydantic features for loading a
11889settings or config class from environment variables or secrets files.")
11890 (license license:expat)))
11891
11892(define-public python-pydoc-markdown
11893 (package
11894 (name "python-pydoc-markdown")
11895 (version "4.8.2")
11896 (source
11897 (origin
11898 (method url-fetch)
11899 (uri (pypi-uri "pydoc_markdown" version))
11900 (sha256
11901 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11902 (build-system pyproject-build-system)
11903 (arguments
11904 (list
11905 #:tests? #false ;there are none
11906 #:phases
11907 '(modify-phases %standard-phases
11908 ;; This is probably not a good idea, but it wants a rather old
11909 ;; version of docstring-parser.
11910 (add-after 'unpack 'relax-requirements
11911 (lambda _
11912 (substitute* "pyproject.toml"
11913 (("docstring-parser = .*")
11914 "docstring-parser = \"^0\"\n")))))))
11915 (propagated-inputs (list python-click
11916 python-databind-core
11917 python-databind-json
11918 python-docspec
11919 python-docspec-python
11920 python-docstring-parser
11921 python-jinja2
11922 python-nr-util
11923 python-pyyaml
11924 python-requests
11925 python-tomli
11926 python-tomli-w
11927 python-watchdog
11928 python-yapf))
11929 (native-inputs (list python-poetry-core))
11930 (home-page "https://pypi.org/project/pydoc-markdown/")
11931 (synopsis "Create Python API documentation in Markdown format")
11932 (description "Pydoc-Markdown is a tool to create Python API documentation
11933in Markdown format. Instead of executing your Python code like so many other
11934documentation tools, it parses it using docspec instead.")
11935 (license license:expat)))
11936
11937;; XXX: The project is deprecated upstream, still in use by some packages,
11938;; consider to remove when nothing depends on it.
11939(define-public python-pydocstyle
11940 (package
11941 (name "python-pydocstyle")
11942 (version "6.3.0")
11943 (source
11944 (origin
11945 (method git-fetch) ;no tests in PyPI archive
11946 (uri (git-reference
11947 (url "https://github.com/PyCQA/pydocstyle")
11948 (commit version)))
11949 (file-name (git-file-name name version))
11950 (sha256
11951 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11952 (patches (search-patches
11953 "python-pydocstyle-add-support-for-pep701.patch"))))
11954 (build-system pyproject-build-system)
11955 (arguments
11956 (list
11957 ;; It tries to install with pip.
11958 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11959 #:phases
11960 #~(modify-phases %standard-phases
11961 (add-after 'unpack 'set-version
11962 (lambda _
11963 (substitute* "pyproject.toml"
11964 (("0.0.0-dev") #$version)))))))
11965 (native-inputs
11966 (list python-poetry-core
11967 python-pytest
11968 python-tomli))
11969 (propagated-inputs
11970 (list python-six
11971 python-snowballstemmer))
11972 (home-page "https://github.com/PyCQA/pydocstyle/")
11973 (synopsis "Python docstring style checker")
11974 (description
11975 "This package provides a style checker for the Python Language
11976Server (PLS).")
11977 (license license:expat)))
11978
11979(define-public python-lsp-server
11980 (package
11981 (name "python-lsp-server")
11982 (version "1.15.0")
11983 (source
11984 (origin
11985 (method git-fetch)
11986 (uri (git-reference
11987 (url "https://github.com/python-lsp/python-lsp-server")
11988 (commit (string-append "v" version))))
11989 (file-name (git-file-name name version))
11990 (sha256
11991 (base32 "0bmwshwdlnbj15ki2vld832lbp6j1slyhvgmwrr8kjbhgk3v8vic"))
11992 (patches
11993 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11994 (build-system pyproject-build-system)
11995 (arguments
11996 (list
11997 #:test-flags
11998 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11999 "-k"
12000 (string-append
12001 "not test_concurrent_ws_requests " ; flaky
12002 "and not test_pyqt_completion " ; avoid pyqt5
12003 "and not test_pandas_completion")) ; avoid pandas
12004 #:phases
12005 #~(modify-phases %standard-phases
12006 (add-after 'unpack 'relax-deps
12007 (lambda _
12008 (substitute* "pyproject.toml"
12009 (("autopep8>=2.0.4,<2.1.0") "autopep8")
12010 (("pycodestyle>=2.12.0,<2.13.0") "pycodestyle")
12011 (("pyflakes>=3.2.0,<3.3.0") "pyflakes"))))
12012 (add-before 'check 'set-HOME
12013 (lambda _ (setenv "HOME" "/tmp"))))))
12014 (propagated-inputs
12015 (list python-autopep8
12016 python-black
12017 python-docstring-to-markdown
12018 python-flake8
12019 python-jedi
12020 python-lsp-jsonrpc
12021 python-mccabe
12022 python-pluggy
12023 python-pycodestyle
12024 python-pydocstyle
12025 python-pyflakes
12026 python-pylint
12027 python-rope
12028 python-ujson
12029 python-whatthepatch
12030 python-yapf))
12031 (native-inputs
12032 (list python-flaky
12033 python-matplotlib
12034 python-pytest
12035 python-setuptools
12036 python-setuptools-scm
12037 python-websockets))
12038 (home-page "https://github.com/python-lsp/python-lsp-server")
12039 (synopsis "Python implementation of the Language Server Protocol")
12040 (description
12041 "The Python Language Server @command{pylsp} is an implementation of the
12042Python 3 language specification for the Language Server Protocol (LSP).
12043This tool is used in text editing environments to provide a complete
12044and integrated feature-set for programming Python effectively.")
12045 (license license:expat)))
12046
12047(define-public python-black
12048 (package
12049 (name "python-black")
12050 (version "26.5.1")
12051 (source
12052 (origin
12053 (method git-fetch)
12054 (uri (git-reference
12055 (url "https://github.com/psf/black")
12056 (commit version)))
12057 (file-name (git-file-name name version))
12058 (sha256
12059 (base32 "13fsaasnbgvlnxzsy81mlyp2pjni7fpp1v9gwh7xmq0pzxzai8h8"))))
12060 (build-system pyproject-build-system)
12061 (arguments
12062 (list
12063 ;; tests: 443 passed, 3 skipped, 4 subtests passed
12064 #:test-flags
12065 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
12066 ;; Diffs are not equal.
12067 (string-append "--deselect=tests/test_format.py"
12068 "::test_simple_format"
12069 "[module_docstring_after_comment]"))
12070 #:phases
12071 #~(modify-phases %standard-phases
12072 (add-after 'patch-source-shebangs 'use-absolute-file-names
12073 (lambda* (#:key inputs #:allow-other-keys)
12074 (substitute* (find-files "tests" "\\.py$")
12075 (("#!/usr/bin/env python3")
12076 (string-append
12077 "#!" (search-input-file inputs "/bin/python3")))))))))
12078 (propagated-inputs
12079 (list python-click
12080 python-mypy-extensions
12081 python-packaging
12082 python-pathspec
12083 python-platformdirs
12084 python-pytokens
12085 ;; [optional]
12086 python-aiohttp))
12087 (native-inputs
12088 (list python-hatch-fancy-pypi-readme
12089 python-hatch-vcs
12090 python-hatchling
12091 python-pytest
12092 python-pytest-xdist))
12093 (home-page "https://github.com/psf/black")
12094 (synopsis "The uncompromising code formatter")
12095 (description "Black is the uncompromising Python code formatter.")
12096 (license license:expat)))
12097
12098(define-public python-black-macchiato
12099 (package
12100 (name "python-black-macchiato")
12101 (version "1.3.0")
12102 (source
12103 (origin
12104 (method git-fetch)
12105 (uri (git-reference
12106 (url "https://github.com/wbolster/black-macchiato")
12107 (commit version)))
12108 (file-name (git-file-name name version))
12109 (sha256
12110 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
12111 (build-system pyproject-build-system)
12112 (arguments
12113 (list
12114 #:phases
12115 #~(modify-phases %standard-phases
12116 (add-after 'unpack 'ignore-failing-tests
12117 (lambda _
12118 (substitute* "test_macchiato.py"
12119 (("\\(.*\\n'\\)," all)
12120 (string-append "# " all))))))))
12121 (native-inputs (list python-pytest python-setuptools))
12122 (propagated-inputs (list python-black))
12123 (home-page "https://github.com/wbolster/black-macchiato")
12124 (synopsis "Partial @code{python-black} formatting")
12125 (description
12126 "This package is built on top the @code{python-black} code formatter to
12127enable formatting of partial files.")
12128 (license license:bsd-3)))
12129
12130(define-public python-blinker
12131 (package
12132 (name "python-blinker")
12133 (version "1.9.0")
12134 (source
12135 (origin
12136 (method url-fetch)
12137 (uri (pypi-uri "blinker" version))
12138 (sha256
12139 (base32
12140 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
12141 (build-system pyproject-build-system)
12142 (native-inputs
12143 (list python-flit-core
12144 python-pytest
12145 python-pytest-asyncio))
12146 (home-page "https://pythonhosted.org/blinker/")
12147 (synopsis "Fast, simple object-to-object and broadcast signaling")
12148 (description
12149 "Blinker provides a fast dispatching system that allows any number of
12150interested parties to subscribe to events, or \"signals\".")
12151 (license license:expat)))
12152
12153(define-public pelican
12154 (package
12155 (name "pelican")
12156 (version "4.11.0")
12157 (source
12158 (origin
12159 (method url-fetch)
12160 (uri (pypi-uri "pelican" version))
12161 (sha256
12162 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
12163 (build-system pyproject-build-system)
12164 (arguments
12165 (list
12166 #:test-flags #~(list "-k" (string-append
12167 ;; These tests failed with AssertionError.
12168 "not test_typogrify_ignore_filters"
12169 " and not test_typogrify_ignore_tags"
12170 " and not test_error_on_warning"))))
12171 (native-inputs
12172 (list python-anyio
12173 python-beautifulsoup4
12174 python-lxml
12175 python-pdm-backend
12176 python-pytest
12177 python-smartypants
12178 python-typogrify))
12179 (inputs
12180 (list python-blinker
12181 python-dateutil
12182 ;; Ignoring `guix lint` warning as python-docutils is used to support
12183 ;; reStructuredText processing at runtime.
12184 python-docutils
12185 python-feedgenerator
12186 python-jinja2
12187 python-ordered-set
12188 python-pygments
12189 python-rich
12190 python-tzdata
12191 python-unidecode
12192 python-watchfiles))
12193 (home-page "https://blog.getpelican.com/")
12194 (synopsis "Python-based static site publishing system")
12195 (description
12196 "Pelican is a tool to generate a static blog from reStructuredText,
12197Markdown input files, and more. Pelican uses Jinja2 for templating
12198and is very extensible.")
12199 (license license:agpl3+)))
12200
12201(define-public python-cykhash
12202 (package
12203 (name "python-cykhash")
12204 (version "2.0.1")
12205 (source
12206 (origin
12207 (method url-fetch)
12208 (uri (pypi-uri "cykhash" version))
12209 (sha256
12210 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
12211 (build-system pyproject-build-system)
12212 (arguments
12213 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
12214 (native-inputs
12215 (list python-cython
12216 python-setuptools))
12217 (home-page "https://github.com/realead/cykhash")
12218 (synopsis "Khash-sets and maps")
12219 (description
12220 "This package is a Cython wrapper for khash-sets/maps. It brings
12221functionality of
12222@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
12223Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
12224world is lacking the concept of a (hash-)set. This shortcoming is fixed and
12225efficient (memory- and speedwise compared to pandas) @code{unique} and
12226@code{isin} are implemented. Python-set/dict have a big memory-footprint.
12227For some datatypes the overhead can be reduced by using khash by factor 4-8.")
12228 (license license:expat)))
12229
12230(define-public python-cython
12231 ;; TODO: Move to python-build.
12232 (package
12233 (name "python-cython")
12234 (version "3.2.5")
12235 (source
12236 (origin
12237 (method git-fetch)
12238 (uri (git-reference
12239 (url "https://github.com/cython/cython")
12240 (commit version)))
12241 (file-name (git-file-name name version))
12242 (sha256
12243 (base32 "07n0x4z0ifkhl8hi47amqhqfjc6jlh5dra9r54nlsnwnai83psy1"))))
12244 (build-system pyproject-build-system)
12245 (arguments
12246 (list
12247 #:test-backend #~'custom
12248 #:test-flags
12249 #~(list "runtests.py"
12250 "-vv"
12251 ;; Some tests fail when number of cores are 24, keep on save
12252 ;; minimal count.
12253 "-j" (number->string (min 8 (parallel-job-count)))
12254 "-x" (string-join
12255 (list "annotate_html"
12256 "Debugger"
12257 ;; It fails with AssertionError: Failed doctest test
12258 ;; for complex_numbers_cpp.double_abs.
12259 ;; See: <https://github.com/cython/cython/issues/6528>.
12260 "complex_numbers_cpp"
12261 #$@(if (target-32bit?)
12262 ;; XXX: On 32-bit architectures, running the
12263 ;; parallel tests fails on many-core systems.
12264 ;; See: <https://github.com/cython/cython/issues/2807>.
12265 '("run.parallel"
12266 ;; Test cpp_stl_any.cast_test fails.
12267 ;; See: <https://github.com/cython/cython/issues/5928>.
12268 "cpp_stl_any")
12269 '())
12270 #$@(if (system-hurd?)
12271 '("test_class_ref"
12272 "test_compiler_directives"
12273 "test_lang_version")
12274 '()))
12275 "|"))
12276 #:phases
12277 #~(modify-phases %standard-phases
12278 (add-before 'check 'pre-check
12279 (lambda* (#:key tests? test-flags #:allow-other-keys)
12280 ;; Disable compiler optimizations to greatly reduce the running
12281 ;; time of the test suite.
12282 (setenv "CFLAGS" "-O0")
12283 ;; Some tests require access to "$HOME/.cython".
12284 (setenv "HOME" "/tmp"))))))
12285 (native-inputs
12286 (list libxcrypt
12287 python-setuptools))
12288 ;; we need the full python package and not just the python-wrapper
12289 ;; because we need libpython3.3m.so
12290 (inputs
12291 (list python))
12292 (home-page "https://cython.org/")
12293 (synopsis "C extensions for Python")
12294 (description "Cython is an optimising static compiler for both the Python
12295programming language and the extended Cython programming language. It makes
12296writing C extensions for Python as easy as Python itself.")
12297 (license license:asl2.0)))
12298
12299(define-public python-cython-0
12300 (package
12301 (inherit python-cython)
12302 ;; It's the latest version of 0.29. See
12303 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12304 (version "0.29.37")
12305 (source
12306 (origin
12307 (method url-fetch)
12308 (uri (pypi-uri "Cython" version))
12309 (sha256
12310 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12311 (arguments
12312 (list
12313 ;; XXX: Tests are broken with [email protected], but dependent packages
12314 ;; build, so keep it until unnecessary.
12315 #:tests? #f
12316 #:test-backend #~'custom
12317 #:test-flags
12318 #~(list "runtests.py"
12319 "-vv"
12320 "-j" (number->string (parallel-job-count))
12321 ;; XXX: On 32-bit architectures, running the parallel tests
12322 ;; fails on many-core systems, see
12323 ;; <https://github.com/cython/cython/issues/2807>.
12324 #$@(if (target-32bit?)
12325 #~("-x" "run.parallel")
12326 #~())
12327 #$@(if (system-hurd?)
12328 #~("-x" "test_class_ref"
12329 "-x" "test_compiler_directives"
12330 "-x" "test_lang_version")
12331 #~())
12332 ;; This test fails when running on 24 cores.
12333 "-x" "cpp_stl_conversion")
12334 #:phases
12335 #~(modify-phases %standard-phases
12336 (add-after 'unpack 'fix-pyximport-python-3.12
12337 (lambda _
12338 (let ((importlib-util-load-dynamic "\
12339import importlib.util
12340from importlib.machinery import ExtensionFileLoader
12341
12342def load_dynamic(name, path):
12343 loader = ExtensionFileLoader(name, path)
12344 spec = importlib.util.spec_from_file_location(name, loader=loader)
12345 module = importlib.util.module_from_spec(spec)
12346 spec.loader.exec_module(module)
12347 return module
12348"))
12349 (substitute* "pyximport/pyximport.py"
12350 (("^import imp")
12351 importlib-util-load-dynamic)
12352 (("imp\\.load_dynamic")
12353 "load_dynamic")))))
12354 (add-before 'check 'pre-check
12355 ;; some tests require access to "$HOME/.cython"
12356 (lambda _
12357 (setenv "HOME" "/tmp")
12358 ;; Disable compiler optimizations to greatly reduce the running
12359 ;; time of the test suite.
12360 (setenv "CFLAGS" "-O0"))))))))
12361
12362;; XXX: Deprecated on <2026-05-28>.
12363(define-public python-cython-next python-cython)
12364
12365;; NOTE: when upgrading numpy please make sure that python-numba,
12366;; python-pandas and python-scipy still build, as these three packages are
12367;; often used together.
12368(define-public python-numpy
12369 (package
12370 (name "python-numpy")
12371 (version "2.4.6")
12372 (source
12373 (origin
12374 ;; XXX: When switching to Git it fails to find Numpy's fork of Meson
12375 ;; git submodule -- <https://github.com/numpy/meson>.
12376 (method url-fetch)
12377 (uri (string-append
12378 "https://github.com/numpy/numpy/releases/download/v"
12379 version "/numpy-" version ".tar.gz"))
12380 (sha256
12381 (base32 "1nkx73blw298dzdk6blhrsann60cgdy7q6n3q9m785ia9865g8zk"))))
12382 (build-system pyproject-build-system)
12383 (arguments
12384 (list
12385 ;; tests: 47255 passed, 1079 skipped, 32 xfailed, 2 xpassed, 318 warnings
12386 #:modules '((guix build utils)
12387 (guix build pyproject-build-system)
12388 (ice-9 format))
12389 #:test-flags
12390 #~(list "-m" "not slow"
12391 "--numprocesses" (number->string (min 8 (parallel-job-count))))
12392 #:phases
12393 #~(modify-phases %standard-phases
12394 (add-after 'unpack 'fix-executable-paths
12395 (lambda* (#:key inputs #:allow-other-keys)
12396 (substitute* "numpy/distutils/exec_command.py"
12397 (("'/bin/sh'")
12398 (format #f "~s" (which "bash"))))
12399 (substitute* "numpy/meson.build"
12400 ;; Relay on python from the PATH instead of full reference
12401 ;; stored in built wheel.
12402 (("'py.full_path\\(\\)'") "'python'"))
12403 (substitute* "numpy/_core/tests/test_cpu_features.py"
12404 (("/bin/true")
12405 (search-input-file inputs "bin/true")))))
12406 (add-before 'build 'parallelize-build
12407 (lambda _
12408 (setenv "OMP_NUM_THREAD"
12409 (number->string (parallel-job-count)))
12410 (setenv "NPY_NUM_BUILD_JOBS"
12411 (number->string (parallel-job-count)))))
12412 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12413 ;; when the gfortran header is used. Remove gfortran from
12414 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12415 ;; <https://issues.guix.gnu.org/73439#45>.
12416 (add-after 'set-paths 'hide-gfortran
12417 (lambda* (#:key inputs #:allow-other-keys)
12418 (let ((gfortran (assoc-ref inputs "gfortran")))
12419 (setenv "CPLUS_INCLUDE_PATH"
12420 (string-join
12421 (delete (string-append gfortran "/include/c++")
12422 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12423 ":")))))
12424 (add-before 'build 'configure-blas
12425 (lambda _
12426 (call-with-output-file "site.cfg"
12427 (lambda (port)
12428 (format port
12429 "[openblas]
12430libraries = openblas
12431library_dirs = ~a/lib
12432include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12433 (replace 'check
12434 (lambda* (#:key tests? test-flags #:allow-other-keys)
12435 (when tests?
12436 (with-directory-excursion #$output
12437 (apply invoke "pytest" test-flags)
12438 (let ((pytest-cache (string-append #$output
12439 "/.pytest_cache")))
12440 (when (access? pytest-cache X_OK)
12441 (delete-file-recursively pytest-cache)))))))
12442 ;; The executables provided by this package ('f2py' and 'numpy-config')
12443 ;; only depend on Python. By customizing the wrap phase we can ensure
12444 ;; that we don't add all Python packages listed in native-inputs to
12445 ;; the closure. This significantly reduces the overall closure size.
12446 ;;
12447 ;; See also <https://bugs.gnu.org/25235>.
12448 (replace 'wrap
12449 (lambda* (#:key inputs outputs #:allow-other-keys)
12450 (for-each
12451 (lambda (program)
12452 (wrap-program program
12453 `("GUIX_PYTHONPATH" ":" suffix
12454 ,(list (site-packages inputs outputs)))))
12455 (find-files (in-vicinity #$output "/bin"))))))))
12456 (native-inputs
12457 (list gfortran
12458 python-cython
12459 python-hypothesis
12460 python-meson
12461 python-pytest
12462 python-pytest-xdist))
12463 (inputs
12464 (list bash
12465 openblas))
12466 (home-page "https://numpy.org")
12467 (synopsis "Fundamental package for scientific computing with Python")
12468 (description "NumPy is the fundamental package for scientific computing
12469with Python. It contains among other things: a powerful N-dimensional array
12470object, sophisticated (broadcasting) functions, tools for integrating C/C++
12471and Fortran code, useful linear algebra, Fourier transform, and random number
12472capabilities.")
12473 (properties
12474 '((upstream-name . "numpy")))
12475 (license license:bsd-3)))
12476
12477(define-public python-numpy-1
12478 (package
12479 (inherit python-numpy)
12480 (name "python-numpy")
12481 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12482 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12483 ;; in upstream Meson.
12484 ;;
12485 ;; See:
12486 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12487 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12488 ;; - file <doc/source/building/understanding_meson.rst>
12489 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12490 (source
12491 (origin
12492 (method url-fetch)
12493 (uri (string-append
12494 "https://github.com/numpy/numpy/releases/download/v"
12495 version "/numpy-" version ".tar.gz"))
12496 (sha256
12497 (base32
12498 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12499 (patches (search-patches "python-numpy-gcc-14.patch"))))
12500 (arguments
12501 (list
12502 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12503 #:modules '((guix build utils)
12504 (guix build pyproject-build-system)
12505 (ice-9 format))
12506 #:phases
12507 #~(modify-phases %standard-phases
12508 (add-after 'unpack 'delete-test-files
12509 (lambda _
12510 ;; These tests depend on older setuptools, see:
12511 ;; <https://github.com/numpy/numpy/issues/27531>.
12512 ;;
12513 ;; E ModuleNotFoundError: No module named
12514 ;; 'distutils.msvccompiler'
12515 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12516 (delete-file "numpy/distutils/tests/test_system_info.py")))
12517 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12518 ;; when the gfortran header is used. Remove gfortran from
12519 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12520 ;; <https://issues.guix.gnu.org/73439#45>.
12521 (add-after 'set-paths 'hide-gfortran
12522 (lambda* (#:key inputs #:allow-other-keys)
12523 (let ((gfortran (assoc-ref inputs "gfortran")))
12524 (setenv "CPLUS_INCLUDE_PATH"
12525 (string-join
12526 (delete (string-append gfortran "/include/c++")
12527 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12528 ":")))))
12529 (add-before 'build 'relax-gcc-14-strictness
12530 (lambda _
12531 (setenv "CFLAGS"
12532 "-g -O2 -Wno-error=implicit-function-declaration")))
12533 (add-before 'build 'parallelize-build
12534 (lambda _
12535 (setenv "NPY_NUM_BUILD_JOBS"
12536 (number->string (parallel-job-count)))))
12537 (add-before 'build 'configure-blas
12538 (lambda* (#:key inputs #:allow-other-keys)
12539 (call-with-output-file "site.cfg"
12540 (lambda (port)
12541 (format port
12542 "\
12543[openblas]
12544libraries = openblas
12545library_dirs = ~a/lib
12546include_dirs = ~:*~a/include~%"
12547 (dirname (dirname
12548 (search-input-file
12549 inputs "include/openblas_config.h"))))))))
12550 (add-before 'build 'fix-executable-paths
12551 (lambda* (#:key inputs #:allow-other-keys)
12552 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12553 ;; instead of /bin/sh.
12554 (substitute* "numpy/distutils/exec_command.py"
12555 (("'/bin/sh'")
12556 (format #f "~s" (search-input-file inputs "bin/bash"))))
12557 ;; Don't try to call '/bin/true' specifically.
12558 (substitute* "numpy/core/tests/test_cpu_features.py"
12559 (("/bin/true") (search-input-file inputs "bin/true")))))
12560 (replace 'check
12561 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12562 (when tests?
12563 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12564 "-j" (number->string (parallel-job-count))
12565 ;; Contrary to scipy, the runtests.py script of numpy
12566 ;; does *not* automatically provide -n when -j is used
12567 ;; (see: https://github.com/numpy/numpy/issues/21359).
12568 "--" "-n" (number->string (parallel-job-count))
12569 ;; Disable Pytest Warnings, they are resolved in the
12570 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12571 ;; applied to fixtures have no effect,
12572 ;; DeprecationWarning.
12573 "-p" "no:warnings"
12574 "-k" (string-append
12575 ;; These tests may fail on 32-bit systems (see:
12576 ;; https://github.com/numpy/numpy/issues/18387).
12577 "not test_float_remainder_overflow "
12578 "and not test_pareto "
12579 ;; The 'test_rint_big_int' test fails on older
12580 ;; x86_64 CPUs such as the Core 2 Duo (see:
12581 ;; https://github.com/numpy/numpy/issues/22170).
12582 "and not test_rint_big_int "
12583 ;; They fail to detect compiler.
12584 "and not test_compile1 "
12585 "and not test_compile2 "
12586 ;; Due to disabled warnings
12587 "and not test_getattr_warning "
12588 "and not test_integer_signs "
12589 "and not test_implicit_cast_float_to_int_fails "
12590 "and not test_integer_signs "
12591 ;; The huge_array test is too large for 32-bit (see:
12592 ;; https://bugs.gentoo.org/843599 and
12593 ;; https://bugs.gentoo.org/846548).
12594 ;; TestKind.test_all is a Fortran type failure
12595 ;; that may be toolchain or environment related.
12596 #$@(if (or (target-x86?) (target-arm32?))
12597 `(" and not test_identityless_reduction_huge_array"
12598 " and not (TestKind and test_all)")
12599 '())
12600 ;; This test fails with a Fortran failure (16
12601 ;; expected but got -1), due to the fact that it
12602 ;; requires a 64-bit system.
12603 #$@(if (or (target-x86-32?) (target-arm32?))
12604 `(" and not test_int")
12605 '())
12606 ;; These tests fail when building from aarch64-linux.
12607 #$@(if (target-arm32?)
12608 `(" and not test_features"
12609 " and not test_unary_spurious_fpexception")
12610 '())
12611 ;; These tests seem to fail on machines without
12612 ;; an FPU is still under investigation upstream.
12613 ;; https://github.com/numpy/numpy/issues/20635
12614 #$@(if (target-riscv64?)
12615 `(" and not test_fp_noncontiguous")
12616 '())
12617 ;; They also fail with gcc-14
12618 " and not test_float"
12619 " and not test_fpclass"
12620
12621 ;; These tests fail with gcc-14
12622 " and not test_context_locality"
12623 " and not test_cosh"
12624 " and not test_default_policy_singleton"
12625 " and not test_exp_exceptions"
12626 " and not test_half_fpe"
12627 " and not test_owner_is_base"
12628 " and not test_policy_propagation"
12629 " and not test_set_policy"
12630 " and not test_sinh"
12631 " and not test_square_values"
12632 " and not test_sum"
12633 " and not test_switch_owner"
12634 " and not test_thread_locality"
12635
12636 ;; These tests depend on older setuptools, see:
12637 ;; <https://github.com/numpy/numpy/issues/27531>.
12638 " and not test_api_importable"
12639 " and not test_all_modules_are_expected_2")))))
12640 ;; See comment for custom python-numpy wrap phase above.
12641 (replace 'wrap
12642 (lambda* (#:key inputs outputs #:allow-other-keys)
12643 (for-each
12644 (lambda (program)
12645 (wrap-program program
12646 `("GUIX_PYTHONPATH" ":" suffix
12647 ,(list (site-packages inputs outputs)))))
12648 (find-files (in-vicinity #$output "/bin"))))))))
12649 (native-inputs
12650 (list python-hypothesis
12651 python-meson
12652 python-pytest
12653 python-pytest-xdist
12654 python-setuptools
12655 python-typing-extensions
12656 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12657 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12658 ;; <https://github.com/numpy/numpy/issues/24318>.
12659 gcc ;fevn.h c[++] include must precede fortran's
12660 gfortran))
12661 (inputs (list bash openblas))))
12662
12663(define-deprecated/public-alias python-numpy-2 python-numpy)
12664
12665(define-public python-numpysane
12666 (package
12667 (name "python-numpysane")
12668 (version "0.43")
12669 (source
12670 (origin
12671 (method git-fetch)
12672 (uri (git-reference
12673 (url "https://github.com/dkogan/numpysane.git")
12674 (commit (string-append "v" version))))
12675 (file-name (git-file-name name version))
12676 (sha256
12677 (base32 "1ls1nrdcizscdpv4712jr7wiaxkmryrai7w0ci06fiq5haq54hrn"))))
12678 (build-system pyproject-build-system)
12679 (arguments
12680 (list
12681 #:phases
12682 #~(modify-phases %standard-phases
12683 (add-after 'unpack 'patch
12684 (lambda* (#:key inputs outputs #:allow-other-keys)
12685 (let* ((numpy (assoc-ref inputs "python-numpy"))
12686 (site (site-packages inputs `(("out" . ,numpy)))))
12687 (substitute* "Makefile.common.header"
12688 ;; See: <https://github.com/dkogan/numpysane/issues/3>.
12689 (("pkg-config --cflags-only-I numpy")
12690 (format #f "echo -I~a/numpy/_core/include" site))))))
12691 (replace 'check
12692 (lambda _
12693 (setenv "CC"
12694 #$(cc-for-target))
12695 (invoke "make" "check"))))))
12696 (propagated-inputs (list python-numpy))
12697 (native-inputs (list perl pkg-config python-setuptools))
12698 (home-page "https://github.com/dkogan/numpysane")
12699 (synopsis "More-reasonable core functionality for numpy")
12700 (description
12701 "This package provides more-reasonable core functionality for numpy.
12702
12703A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12704
12705numpysane has:
12706@itemize
12707@item easier broadcasting
12708@item nicer array manipulation
12709@item array concatenation
12710@item manipulation of dimensions
12711@item broadcast-aware inner product
12712@item broadcast-aware outer product
12713@item broadcast-aware 2-norm
12714@item broadcast-aware matrix multiplication
12715@end itemize
12716")
12717 (license license:lgpl2.0+)))
12718
12719(define-public python-numpy-documentation
12720 (package
12721 (inherit python-numpy)
12722 (name "python-numpy-documentation")
12723 (arguments
12724 (list
12725 #:tests? #f ;we're only generating the documentation
12726 #:phases
12727 #~(modify-phases %standard-phases
12728 (add-after 'unpack 'avoid-external-deps
12729 (lambda _
12730 ;; XXX: Avoid search-button to avoid sphinx error
12731 ;; TemplateNotFound('search-button.html')
12732 (substitute* "doc/source/conf.py"
12733 (("\"search-button\",") ""))
12734 ;; XXX: Avoid theme-switcher to avoid sphinx error
12735 ;; TemplateNotFound('theme-switcher.html')
12736 (substitute* "doc/source/conf.py"
12737 (("\"theme-switcher\",") ""))
12738 ;; XXX: Avoid version-switcher because it depends on the value
12739 ;; of external https://numpy.org/doc/_static/versions.json
12740 (substitute* "doc/source/conf.py"
12741 (("\"version-switcher\",") ""))))
12742 (add-before 'build 'add-gnu-freefont-to-texmf
12743 (lambda _
12744 ;; XXX: The Sphinx-generated tex output specifies the GNU
12745 ;; FreeFont font to be searched via its extension, which uses
12746 ;; kpathsea instead of fontconfig and fail (see:
12747 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12748 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12749 ;; GUIX_TEXMF.
12750 (mkdir-p "texmf-dist/fonts/opentype/public")
12751 (symlink (string-append
12752 #$(this-package-native-input "font-gnu-freefont")
12753 "/share/fonts/opentype")
12754 (string-append
12755 (getcwd) "/"
12756 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12757 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12758 (getcwd) "/texmf-dist"))))
12759 (replace 'build
12760 (lambda _
12761 (chdir "doc")
12762 (let ((sphinxopts (string-append
12763 "SPHINXOPTS=-j"
12764 (number->string (parallel-job-count)))))
12765 ;; Do not treat warnings as errors.
12766 (substitute* "Makefile"
12767 ((" -WT ") " -T "))
12768 (setenv "HOME" "/tmp")
12769 ;; Build the PDF documentation.
12770 (invoke "make" "latex-build" sphinxopts)
12771 ;; FIXME: PDF build fails
12772 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12773 ;; Build the HTML documentation
12774 (invoke "make" "html" sphinxopts)
12775 ;; Build the Info documentation. The issues worked around
12776 ;; below can be tracked at
12777 ;; https://github.com/numpy/numpy/issues/12278.
12778 (substitute* "source/conf.py"
12779 ;; The root document should be "index", not "contents".
12780 (("\"contents\"") "'index'")
12781 ;; Disable Sphinx extensions that produce broken Texinfo.
12782 ((".*'numpydoc'.*") "")
12783 ((".*'sphinx.ext.autodoc'.*") "")
12784 ((".*'sphinx.ext.autosummary'.*") ""))
12785 (invoke "make" "info" sphinxopts))))
12786 (replace 'install
12787 (lambda _
12788 (let* ((data (string-append #$output "/share"))
12789 (doc (string-append data "/doc/numpy"))
12790 (html (string-append doc "/html"))
12791 (info (string-append data "/info")))
12792 ;; Install the HTML documentation.
12793 (mkdir-p html)
12794 (copy-recursively "build/html" html)
12795 ;; Install the PDF reference and user manuals.
12796 ;; FIXME:
12797 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12798 ;; (install-file "build/latex/numpy-user.pdf" doc)
12799 ;; Install the info manual.
12800 (install-file "build/texinfo/numpy.info" info)
12801 (symlink (string-append html "/_images")
12802 (string-append info "/numpy-figures"))))))))
12803 (native-inputs
12804 (list font-gnu-freefont
12805 perl
12806 python-breathe
12807 python-ipython
12808 python-jupyterlite-sphinx
12809 python-matplotlib
12810 python-numpy
12811 python-numpydoc
12812 python-pandas
12813 python-pydata-sphinx-theme
12814 python-scipy ;used by matplotlib
12815 python-setuptools
12816 python-sphinx
12817 python-sphinx-copybutton
12818 python-sphinx-design
12819 texinfo
12820 (texlive-local-tree
12821 (list texlive-cbfonts
12822 texlive-cm-super
12823 texlive-cmap
12824 texlive-expdlist
12825 texlive-fandol
12826 texlive-greek-fontenc
12827 texlive-latexmk
12828 texlive-polyglossia
12829 texlive-xetex
12830 texlive-xindy))))
12831 (inputs '())
12832 (propagated-inputs '())
12833 (synopsis "Documentation for the @code{python-numpy} package")
12834 (description "This package provides the complete NumPy documentation in
12835the Texinfo, and HTML formats.")))
12836
12837(define-public python-numpy-stl
12838 (package
12839 (name "python-numpy-stl")
12840 (version "3.2.0")
12841 (source
12842 (origin
12843 (method url-fetch)
12844 (uri (pypi-uri "numpy_stl" version))
12845 (sha256
12846 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12847 (build-system pyproject-build-system)
12848 (native-inputs
12849 (list python-cython
12850 python-pytest
12851 python-setuptools
12852 python-wheel))
12853 (propagated-inputs
12854 (list python-numpy
12855 python-utils))
12856 (home-page "https://github.com/WoLpH/numpy-stl/")
12857 (synopsis "Read, write and modify binary/ASCII STL files library")
12858 (description
12859 "Library to make reading, writing and modifying both binary and ascii STL
12860files, file format native to the stereolithography CAD software created by 3D
12861Systems, easy.")
12862 (license license:bsd-3)))
12863
12864(define-public python-npx
12865 (package
12866 (name "python-npx")
12867 (version "0.1.6")
12868 (source
12869 (origin
12870 (method git-fetch) ; no source archive in PyPI
12871 (uri (git-reference
12872 (url "https://github.com/sigma-py/npx")
12873 (commit (string-append "v" version))))
12874 (file-name (git-file-name name version))
12875 (sha256
12876 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12877 (build-system pyproject-build-system)
12878 (native-inputs
12879 (list python-networkx
12880 python-pytest
12881 python-setuptools
12882 python-wheel))
12883 (propagated-inputs
12884 (list python-numpy))
12885 (home-page "https://github.com/nschloe/npx")
12886 (synopsis "Extensions for NumPy")
12887 (description "NumPy is a large library used everywhere in scientific
12888computing. That's why breaking backwards-compatibility comes at a
12889significant cost and is almost always avoided, even if the API of some
12890methods is arguably lacking. This package provides drop-in wrappers
12891\"fixing\" those.")
12892 (license license:bsd-3)))
12893
12894(define-public python-munch
12895 (package
12896 (name "python-munch")
12897 (version "4.0.0")
12898 (source
12899 (origin
12900 (method url-fetch)
12901 (uri (pypi-uri "munch" version))
12902 (sha256
12903 (base32
12904 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12905 (build-system pyproject-build-system)
12906 (native-inputs
12907 (list python-astroid
12908 python-pytest
12909 python-setuptools
12910 python-wheel))
12911 (home-page "https://github.com/Infinidat/munch")
12912 (synopsis "Dot-accessible dictionary")
12913 (description "Munch is a dot-accessible dictionary similar to JavaScript
12914objects.")
12915 (license license:expat)))
12916
12917(define-public python-colormath2
12918 (package
12919 (name "python-colormath2")
12920 (version "3.0.3")
12921 (source
12922 (origin
12923 (method git-fetch)
12924 (uri (git-reference
12925 (url "https://github.com/bkmgit/python-colormath2")
12926 (commit version)))
12927 (file-name (git-file-name name version))
12928 (sha256
12929 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12930 (build-system pyproject-build-system)
12931 (propagated-inputs (list python-networkx python-numpy))
12932 (native-inputs (list python-nose2 python-setuptools))
12933 (home-page "https://github.com/bkmgit/python-colormath2")
12934 (synopsis "Color math and conversion library")
12935 (description
12936 "This is a Python library for color math and conversions.")
12937 (license license:bsd-3)))
12938
12939(define-public python-pam
12940 (package
12941 (name "python-pam")
12942 (version "2.0.2")
12943 (source
12944 (origin
12945 (method git-fetch)
12946 (uri (git-reference
12947 (url "https://github.com/FirefighterBlu3/python-pam")
12948 (commit (string-append "v" version))))
12949 (file-name (git-file-name name version))
12950 (sha256
12951 (base32 "05fvf9rg4h7sigzvipm1ghq34zk6i8na7wkyk905nvk4gdhln7ri"))))
12952 (build-system pyproject-build-system)
12953 (arguments
12954 (list
12955 #:test-flags
12956 #~(list "-k"
12957 (string-append " not __normal_"
12958 " and not __env_requires_"
12959 " and not __getenv"
12960 " and not __putenv"
12961 " and not __unset"
12962 " and not _setenv"
12963 " and not _env_set"
12964 " and not __pam_end"
12965 " and not _session_unauthenticated"))
12966 #:phases
12967 #~(modify-phases %standard-phases
12968 (add-after 'unpack 'bake-pam
12969 (lambda* (#:key inputs #:allow-other-keys)
12970 (substitute* "src/pam/__internals.py"
12971 (("find_library\\(\"(pam|pam_misc)\"\\)" all lib)
12972 (string-append
12973 "\""
12974 (search-input-file inputs
12975 (string-append "lib/lib" lib ".so"))
12976 "\"")))))
12977 (add-before 'check 'fix-test-config
12978 (lambda _
12979 (substitute* "pyproject.toml"
12980 (("\"test_\\*.py\"")
12981 (format
12982 #f "[~{~s~^,~}]"
12983 (map basename (find-files "tests" "test_.*\\.py$"))))
12984 (("norecursedirs = (\".*\")" all dirs)
12985 (string-append "norecursedirs = [" dirs "]"))))))))
12986 (inputs (list linux-pam))
12987 (propagated-inputs (list python-six))
12988 (native-inputs (list python-pytest
12989 python-setuptools))
12990 (home-page "https://github.com/FirefighterBlu3/python-pam")
12991 (synopsis "Python PAM module")
12992 (description "This package provides a Python module to interface with
12993@acronym{PAM, pluggable authentication modules}.")
12994 (license license:expat)))
12995
12996(define-public python-pyspnego
12997 (package
12998 (name "python-pyspnego")
12999 (version "0.8.0")
13000 (source (origin
13001 (method url-fetch)
13002 (uri (pypi-uri "pyspnego" version))
13003 (sha256
13004 (base32
13005 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
13006 (build-system pyproject-build-system)
13007 (native-inputs
13008 (list python-pytest python-pytest-mock python-setuptools python-wheel))
13009 (propagated-inputs
13010 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
13011 (home-page "https://github.com/jborean93/pyspnego")
13012 (synopsis "Python SPNEGO library")
13013 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
13014Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
13015parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
13016readable format.")
13017 (license license:expat)))
13018
13019(define-public python-pygit2
13020 (package
13021 (name "python-pygit2")
13022 (version "1.18.2")
13023 (source
13024 (origin
13025 (method url-fetch)
13026 (uri (pypi-uri "pygit2" version))
13027 (sha256
13028 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
13029 (build-system pyproject-build-system)
13030 (propagated-inputs (list python-cffi libgit2))
13031 (native-inputs (list python-pytest python-setuptools python-wheel))
13032 (home-page "https://github.com/libgit2/pygit2")
13033 (synopsis "Python bindings for libgit2")
13034 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
13035 ;; GPL2.0 only, with linking exception.
13036 (license license:gpl2)))
13037
13038(define-public python-patiencediff
13039 (package
13040 (name "python-patiencediff")
13041 (version "0.2.15")
13042 (source
13043 (origin
13044 (method url-fetch)
13045 (uri (pypi-uri "patiencediff" version))
13046 (sha256
13047 (base32
13048 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
13049 (build-system pyproject-build-system)
13050 (arguments
13051 (list
13052 #:phases #~(modify-phases %standard-phases
13053 ;; Fails because bin/patiencediff expects two files to diff
13054 (delete 'sanity-check))))
13055 (native-inputs (list python-pytest python-setuptools python-wheel))
13056 (home-page "https://www.breezy-vcs.org/")
13057 (synopsis "Python implementation of the patiencediff algorithm")
13058 (description
13059 "This package contains a Python implementation of the @code{patiencediff}
13060algorithm. Patiencediff provides a good balance of performance, nice output for
13061humans, and implementation simplicity.")
13062 (license license:gpl2+)))
13063
13064(define-public python-merge3
13065 (package
13066 (name "python-merge3")
13067 (version "0.0.16")
13068 (source
13069 (origin
13070 (method git-fetch)
13071 (uri (git-reference
13072 (url "https://github.com/breezy-team/merge3")
13073 (commit (string-append "v" version))))
13074 (file-name (git-file-name name version))
13075 (sha256
13076 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
13077 (build-system pyproject-build-system)
13078 (arguments (list #:test-backend #~'unittest))
13079 (native-inputs (list python-setuptools))
13080 (home-page "https://github.com/breezy-team/merge3")
13081 (synopsis "Python implementation of 3-way merge")
13082 (description "This Python library implements 3-way merge for text.")
13083 (license license:gpl2+)))
13084
13085(define-public python-fancycompleter
13086 (package
13087 (name "python-fancycompleter")
13088 (version "0.9.1")
13089 (source
13090 (origin
13091 (method git-fetch)
13092 (uri (git-reference
13093 (url "https://github.com/pdbpp/fancycompleter")
13094 (commit version)))
13095 (file-name (git-file-name name version))
13096 (sha256
13097 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
13098 (build-system pyproject-build-system)
13099 (arguments
13100 (list
13101 #:phases
13102 #~(modify-phases %standard-phases
13103 (add-after 'unpack 'fix-setup.py
13104 (lambda _
13105 (substitute* "setup.py"
13106 ((".*setupmeta.*")
13107 "")
13108 (("versioning=.*")
13109 (string-append "version='" #$version "',"))
13110 ((".*pyrepl.*") ; broken on Python 3
13111 "")))))))
13112 (native-inputs (list python-pytest python-setuptools))
13113 (home-page "https://github.com/pdbpp/fancycompleter")
13114 (synopsis "TAB completion library for Python")
13115 (description
13116 "@code{fancycompleter} is a module that adds TAB completion to the
13117interactive prompt. It is an extension of the @code{rlcompleter} module from
13118the standard Python library.")
13119 (license license:bsd-3)))
13120
13121(define-public python-ipdb
13122 (package
13123 (name "python-ipdb")
13124 (version "0.13.13")
13125 (source
13126 (origin
13127 (method git-fetch)
13128 (uri (git-reference
13129 (url "https://github.com/gotcha/ipdb")
13130 (commit version)))
13131 (file-name (git-file-name name version))
13132 (sha256
13133 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
13134 (build-system pyproject-build-system)
13135 (arguments (list #:test-backend #~'unittest))
13136 (native-inputs (list python-setuptools))
13137 (propagated-inputs (list python-ipython python-toml python-decorator))
13138 (home-page "https://github.com/gotcha/ipdb")
13139 (synopsis "IPython-enhanced Python debugger (pdb)")
13140 (description
13141 "@code{ipdb} exports functions to access the IPython debugger, which
13142features tab completion, syntax highlighting, better tracebacks and better
13143introspection than Python's standard @command{pdb} debugger, with which it
13144shares the same interface.")
13145 (license license:bsd-3)))
13146
13147(define-public python-ipfsspec
13148 (package
13149 (name "python-ipfsspec")
13150 (version "0.4.0")
13151 (source
13152 (origin
13153 (method url-fetch)
13154 (uri (pypi-uri "ipfsspec" version))
13155 (sha256
13156 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
13157 (build-system pyproject-build-system)
13158 (arguments
13159 (list
13160 #:test-flags
13161 '(list "-m not local_gw"
13162 ;; Require local gateway
13163 "--ignore=test/test_gateway.py"
13164 ;; Require internet
13165 "--ignore=test/test_async.py"
13166 "--ignore=test/test_ipfs.py")))
13167 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
13168 (native-inputs
13169 (list python-pytest
13170 python-pytest-asyncio
13171 python-setuptools
13172 python-wheel))
13173 (home-page "https://github.com/fsspec/ipfsspec")
13174 (synopsis "Read-only implementation of fsspec for IPFS")
13175 (description "This package provides a read-only implementation of
13176@code{fsspec} for IPFS.")
13177 (license license:expat)))
13178
13179(define-public python-pdftotext
13180 (package
13181 (name "python-pdftotext")
13182 (version "3.0.0")
13183 (source
13184 (origin
13185 (method url-fetch)
13186 (uri (pypi-uri "pdftotext" version))
13187 (sha256
13188 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
13189 (build-system pyproject-build-system)
13190 (native-inputs (list python-pytest python-setuptools python-wheel))
13191 (inputs (list poppler))
13192 (home-page "https://github.com/jalan/pdftotext")
13193 (synopsis "Simple PDF text extraction")
13194 (description "Pdftotext is a Python library of PDF text extraction.")
13195 (license license:expat)))
13196
13197(define-public python-pluginbase
13198 (package
13199 (name "python-pluginbase")
13200 (version "1.0.1")
13201 (source
13202 (origin
13203 (method git-fetch)
13204 (uri (git-reference
13205 (url "https://github.com/mitsuhiko/pluginbase")
13206 (commit (string-append "v" version))))
13207 (file-name (git-file-name name version))
13208 (sha256
13209 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
13210 (build-system pyproject-build-system)
13211 (arguments
13212 (list
13213 #:phases
13214 #~(modify-phases %standard-phases
13215 (replace 'check
13216 (lambda* (#:key tests? #:allow-other-keys)
13217 (when tests?
13218 (invoke "make" "test")))))))
13219 (native-inputs (list python-pytest python-setuptools))
13220 (home-page "https://github.com/mitsuhiko/pluginbase")
13221 (synopsis "Simple but flexible plugin system for Python")
13222 (description
13223 "PluginBase is a library useful in the development of flexible plugin
13224systems in Python.")
13225 (license license:bsd-3)))
13226
13227(define-public python-node-semver
13228 (package
13229 (name "python-node-semver")
13230 (version "0.8.1")
13231 (source
13232 (origin
13233 (method git-fetch)
13234 (uri (git-reference
13235 (url "https://github.com/podhmo/python-node-semver")
13236 (commit version)))
13237 (file-name (git-file-name name version))
13238 (sha256
13239 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
13240 (build-system pyproject-build-system)
13241 (native-inputs (list python-pytest python-setuptools))
13242 (home-page "https://github.com/podhmo/python-node-semver")
13243 (synopsis "Python port of node-semver")
13244 (description
13245 "This module provides a Python version of node-semver, a semantic version
13246parser for Node.js.")
13247 (license license:expat)))
13248
13249(define-public python-norns
13250 (package
13251 (name "python-norns")
13252 (version "0.1.6")
13253 (source
13254 (origin
13255 (method git-fetch)
13256 (uri (git-reference
13257 (url "https://github.com/simonvh/norns")
13258 (commit version)))
13259 (file-name (git-file-name name version))
13260 (sha256
13261 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
13262 (patches
13263 (search-patches "python-norns-nose.patch"))))
13264 (build-system pyproject-build-system)
13265 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
13266 (native-inputs (list python-setuptools))
13267 (home-page "https://github.com/simonvh/norns")
13268 (synopsis "Simple YAML-based config module")
13269 (description "This package provides a simple YAML-based config module.")
13270 (license license:expat)))
13271
13272(define-public python-patch-ng
13273 (package
13274 (name "python-patch-ng")
13275 (version "1.18.1")
13276 (source
13277 (origin
13278 (method git-fetch)
13279 (uri (git-reference
13280 (url "https://github.com/conan-io/python-patch-ng")
13281 (commit version)))
13282 (file-name (git-file-name name version))
13283 (sha256
13284 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
13285 (build-system pyproject-build-system)
13286 (arguments
13287 (list
13288 #:test-backend #~'custom
13289 #:test-flags #~(list "tests/run_tests.py" "-v")))
13290 (native-inputs (list python-pytest python-setuptools))
13291 (home-page "https://github.com/conan-io/python-patch-ng")
13292 (synopsis "Python library to parse and apply unified diffs")
13293 (description
13294 "Patch NG (New Generation) is a command and Python library to parse and
13295apply unified diffs. It has features such as:
13296@itemize
13297@item automatic correction of common patch formatting corruption
13298@item patch format detection (SVN, Hg, Git)
13299@item nice diffstat histogram.
13300@end itemize")
13301 (license license:expat)))
13302
13303(define-public python-numpydoc
13304 (package
13305 (name "python-numpydoc")
13306 (version "1.10.0")
13307 (source
13308 (origin
13309 (method url-fetch)
13310 (uri (pypi-uri "numpydoc" version))
13311 (sha256
13312 (base32
13313 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13314 (build-system pyproject-build-system)
13315 (arguments
13316 (list
13317 #:test-flags
13318 '(list "numpydoc/tests"
13319 "-k" (string-append
13320 ;; TODO: unclear why these fail.
13321 "not test_MyClass and not test_my_function "
13322 ;; This test compares installed vs source absolute file
13323 ;; names.
13324 "and not test_source_file_name_with_properties"))))
13325 (propagated-inputs (list python-sphinx python-tomli))
13326 (native-inputs
13327 (list python-matplotlib python-pytest python-setuptools))
13328 (home-page "https://pypi.org/project/numpydoc/")
13329 (synopsis "Numpy's Sphinx extensions")
13330 (description "Sphinx extension to support docstrings in Numpy format.")
13331 (license license:bsd-2)))
13332
13333(define-public python-numexpr
13334 (package
13335 (name "python-numexpr")
13336 (version "2.14.1")
13337 (source
13338 (origin
13339 (method git-fetch)
13340 (uri (git-reference
13341 (url "https://github.com/pydata/numexpr")
13342 (commit (string-append "v" version))))
13343 (file-name (git-file-name name version))
13344 (sha256
13345 (base32 "1zbpi7whjh6sccn1fndii735gv14kjaaqm3c3w1g2ry0z9948v9v"))))
13346 (build-system pyproject-build-system)
13347 (arguments
13348 (list
13349 ;; tests: 6039 passed, 1 warning
13350 #:test-flags #~(list "--pyargs" "numexpr")
13351 #:phases
13352 #~(modify-phases %standard-phases
13353 (add-before 'check 'remove-local-source
13354 (lambda _
13355 (delete-file-recursively "numexpr"))))))
13356 (native-inputs
13357 (list python-pytest
13358 python-setuptools))
13359 (propagated-inputs
13360 (list python-numpy))
13361 (home-page "https://github.com/pydata/numexpr")
13362 (synopsis "Fast numerical expression evaluator for NumPy")
13363 (description
13364 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13365expressions that operate on arrays are accelerated and use less memory than
13366doing the same calculation in Python. In addition, its multi-threaded
13367capabilities can make use of all your cores, which may accelerate
13368computations, most specially if they are not memory-bounded (e.g. those using
13369transcendental functions).")
13370 (license license:expat)))
13371
13372(define-public python-cycler
13373 (package
13374 (name "python-cycler")
13375 (version "0.12.1")
13376 (source
13377 (origin
13378 (method git-fetch) ;no tests in PyPI archive
13379 (uri (git-reference
13380 (url "https://github.com/matplotlib/cycler")
13381 (commit (string-append "v" version))))
13382 (file-name (git-file-name name version))
13383 (sha256
13384 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13385 (build-system pyproject-build-system)
13386 (native-inputs
13387 (list python-pytest
13388 python-setuptools))
13389 (home-page "https://matplotlib.org/cycler/")
13390 (synopsis "Composable keyword argument iterator")
13391 (description
13392 "When using @code{matplotlib} and plotting more than one line, it is
13393common to want to be able to want to be able to cycle over one or more artist
13394styles; but the plotting logic can quickly become involved.
13395To address this and enable easy cycling over arbitrary @code{kwargs}, the
13396@code{Cycler} class was developed.")
13397 (license license:bsd-3)))
13398
13399(define-public python-colorspacious
13400 (package
13401 (name "python-colorspacious")
13402 (version "1.1.2")
13403 (source
13404 (origin
13405 (method git-fetch)
13406 (uri (git-reference
13407 (url "https://github.com/njsmith/colorspacious")
13408 (commit (string-append "v" version))))
13409 (file-name (git-file-name name version))
13410 (sha256
13411 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13412 (build-system pyproject-build-system)
13413 (arguments (list #:tests? #f)) ; No tests.
13414 (propagated-inputs (list python-numpy))
13415 (native-inputs (list python-pytest python-setuptools))
13416 (home-page "https://github.com/njsmith/colorspacious")
13417 (synopsis "Python library for colorspace conversions")
13418 (description
13419 "@code{colorspacious} is a Python library that lets you convert between
13420colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13421 (license license:expat)))
13422
13423(define-public python-propcache
13424 (package
13425 (name "python-propcache")
13426 (version "0.2.1")
13427 (source
13428 (origin
13429 (method url-fetch)
13430 (uri (pypi-uri "propcache" version))
13431 (sha256
13432 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13433 (build-system pyproject-build-system)
13434 (arguments
13435 (list
13436 #:test-flags
13437 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13438 "--ignore=tests/test_benchmarks.py")
13439 #:phases
13440 '(modify-phases %standard-phases
13441 (add-after 'unpack 'patch-build-system
13442 (lambda _
13443 ;; XXX: I don't know how to tell it to build the extensions in
13444 ;; place.
13445 (substitute* "packaging/pep517_backend/_backend.py"
13446 (("build_inplace=False") "build_inplace=True")))))))
13447 (native-inputs
13448 (list python-cython
13449 python-expandvars
13450 python-pytest
13451 python-pytest-xdist
13452 python-setuptools
13453 python-tomli))
13454 (home-page "https://github.com/aio-libs/propcache")
13455 (synopsis "Accelerated property cache")
13456 (description "The module provides a fast implementation of cached
13457properties for Python 3.9+.")
13458 (license license:asl2.0)))
13459
13460(define-public python-proto-matcher
13461 (package
13462 (name "python-proto-matcher")
13463 (version "0.0.3")
13464 (source
13465 (origin
13466 (method git-fetch)
13467 (uri (git-reference
13468 (url "https://github.com/dayfine/proto-matcher")
13469 (commit version)))
13470 (file-name (git-file-name name version))
13471 (sha256
13472 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13473 (build-system pyproject-build-system)
13474 (native-inputs (list python-pytest python-setuptools))
13475 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13476 (propagated-inputs (list python-protobuf python-pyhamcrest))
13477 (home-page "https://github.com/dayfine/proto-matcher")
13478 (synopsis "PyHamcrest test matchers for protocol buffers")
13479 (description
13480 "This package provides the following PyHamcrest test matchers, that
13481enable matching a protocol buffer message:
13482@table @code
13483@item equals_proto
13484Test the argument equals the given protobuf message.
13485@item approximately
13486Test the argument equals the given protobuf message, while comparing any float
13487field using approximation.
13488@item ignoring_field_paths
13489Test the argument equals the given protobuf message, while ignoring those
13490fields specified in the field paths.
13491@item ignoring_repeated_field_ordering
13492Test the argument equals the given protobuf message, ignoring the ordering of
13493any repeated field.
13494@item partially
13495Test the argument partially equals the given protobuf message, i.e. if a field
13496is in the argument but not in the expected message, it's ignored in the
13497comparison.
13498@end table")
13499 (license license:asl2.0)))
13500
13501(define-public python-matplotlib
13502 (package
13503 (name "python-matplotlib")
13504 (version "3.10.9")
13505 (source
13506 (origin
13507 (method git-fetch)
13508 (uri (git-reference
13509 (url "https://github.com/matplotlib/matplotlib")
13510 (commit (string-append "v" version))))
13511 (file-name (git-file-name name version))
13512 (sha256
13513 (base32 "1mff6s0nldfgdczjrfkkg68j2sx9l7jpslbcyq0d4slhnkx1lp2g"))))
13514 (build-system pyproject-build-system)
13515 (arguments
13516 (list
13517 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13518 #:configure-flags
13519 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13520 "-Dsystem-freetype=true"
13521 "-Dsystem-qhull=true"))
13522 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13523 #:test-flags
13524 #~(list "-m" "not network"
13525 "-n" (number->string (parallel-job-count))
13526 ;; Run the installed tests, which is what we want since not
13527 ;; everything gets built in the source directory.
13528 "--pyargs" "matplotlib"
13529 "-k"
13530 (string-join
13531 (list
13532 ;; XXX: Disable all image comparison tests because we're using
13533 ;; a newer version of FreeType than matplotlib expects. This
13534 ;; leads to minor differences throughout the tests.
13535 "not image_comparison"
13536 "check_figures_equal"
13537 "png" ;disables many problematic image tests
13538 "test_figure_legend_outside"
13539 "test_ft2font_get_kerning"
13540 "test_normal_axes"
13541 "test_get_tightbbox_polar"
13542 ;; The invisible line ordering test fails due to a too short
13543 ;; timeout (see:
13544 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13545 "test_invisible_Line_rendering"
13546 ;; The determinism check test is not deterministic (see:
13547 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13548 "test_determinism_check")
13549 " and not "))
13550 #:phases
13551 #~(modify-phases %standard-phases
13552 (add-after 'unpack 'patch-commands
13553 (lambda _
13554 (substitute* "lib/matplotlib/tests/test_animation.py"
13555 (("/bin/sh") (which "sh")))))
13556 (add-after 'unpack 'patch-dlopen
13557 (lambda* (#:key inputs #:allow-other-keys)
13558 (substitute* "src/_c_internal_utils.cpp"
13559 (("libX11.so.6")
13560 (search-input-file inputs "lib/libX11.so.6")))))
13561 (add-before 'build 'configure-environment
13562 (lambda* (#:key inputs #:allow-other-keys)
13563 ;; Fix rounding errors when using the x87 FPU.
13564 (when (string-prefix? "i686" #$(%current-system))
13565 (setenv "CFLAGS" "-ffloat-store"))))
13566 (add-before 'check 'chdir
13567 (lambda _
13568 ;; Step out of the source directory to avoid interference.
13569 (chdir "/tmp"))))))
13570 (propagated-inputs
13571 (list python-contourpy
13572 python-cycler
13573 python-dateutil
13574 python-fonttools-minimal
13575 python-importlib-resources
13576 python-kiwisolver
13577 python-numpy
13578 python-packaging
13579 python-pillow
13580 python-pyparsing
13581 `(,python "tk")))
13582 (inputs
13583 (list cairo
13584 freetype
13585 glib
13586 libpng
13587 qhull
13588 tcl
13589 tk))
13590 (native-inputs
13591 (list pkg-config
13592 python-meson
13593 pybind11
13594 python-pytest
13595 python-pytest-timeout
13596 python-pytest-xdist
13597 python-setuptools
13598 python-setuptools-scm))
13599 (home-page "https://matplotlib.org/")
13600 (synopsis "2D plotting library for Python")
13601 (description
13602 "Matplotlib is a Python 2D plotting library which produces publication
13603quality figures in a variety of hardcopy formats and interactive environments
13604across platforms. Matplotlib can be used in Python scripts, the python and
13605ipython shell, web application servers, and six graphical user interface
13606toolkits.")
13607 (license license:psfl)))
13608
13609(define-public python-matplotlib-documentation
13610 (package
13611 (inherit python-matplotlib)
13612 (name "python-matplotlib-documentation")
13613 (arguments
13614 (list
13615 #:tests? #f ;we're only generating documentation
13616 #:phases
13617 #~(modify-phases %standard-phases
13618 (add-after 'unpack 'avoid-external-deps
13619 (lambda _
13620 ;; XXX: Avoid theme-switcher to avoid sphinx error
13621 ;; TemplateNotFound('theme-switcher.html')
13622 ;; XXX: Avoid version-switcher because it depends on an
13623 ;; external file, and we pack only one version anyway.
13624 (substitute* "doc/conf.py"
13625 (("\
13626\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13627 "\"navbar_end\": ["))))
13628 (replace 'build
13629 (lambda _
13630 (setenv "HOME" "/tmp")
13631 (chdir "doc")
13632 (invoke "make" "html" "info"
13633 ;; Don't abort on warnings; build in parallel.
13634 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13635 (replace 'install
13636 (lambda _
13637 (let* ((data (string-append #$output "/share"))
13638 (doc (string-append data "/doc/matplotlib"))
13639 (info (string-append data "/info"))
13640 (html (string-append doc "/html")))
13641 (mkdir-p html)
13642 (copy-recursively "build/html" html)
13643 (install-file "build/texinfo/matplotlib.info" info)
13644 ;; The "matplotlib-figures" directory contains are a subset of
13645 ;; the images produced for the html target; simply create a
13646 ;; symlink to it, saving about 11 MiB.
13647 (symlink (string-append html "/_images")
13648 (string-append info "/matplotlib-figures"))))))))
13649 ;; Move all propagated inputs to inputs. *-documentation packages are
13650 ;; expected to be installed as standalone leaf packages, and not as
13651 ;; libraries with propagated inputs.
13652 (propagated-inputs '())
13653 (inputs (append
13654 (package-inputs python-matplotlib)
13655 (package-propagated-inputs python-matplotlib)))
13656 (native-inputs
13657 (list ffmpeg ;for matplotlib animation support
13658 graphviz
13659 inkscape/pinned
13660 python-colorspacious
13661 python-ipython
13662 python-ipykernel
13663 python-ipywidgets
13664 python-matplotlib
13665 python-mpl-sphinx-theme
13666 python-numpydoc
13667 python-pyyaml
13668 python-scipy
13669 python-setuptools
13670 ;; XXX: investigate how to build using a newer version of sphinx.
13671 python-sphinx-6
13672 python-sphinx-copybutton
13673 python-sphinx-design
13674 python-sphinx-gallery
13675 python-sphinx-tags
13676 python-sphinxcontrib-svg2pdfconverter
13677 python-sphinxcontrib-video
13678 texinfo
13679 texlive-dvipng-bin
13680 (texlive-local-tree
13681 (list texlive-amsfonts
13682 texlive-amsmath
13683 texlive-babel
13684 texlive-cm-super
13685 texlive-etoolbox
13686 texlive-expdlist
13687 texlive-fontspec
13688 texlive-times
13689 texlive-type1cm
13690 texlive-underscore
13691 texlive-unicode-math))))
13692 (synopsis "Documentation for the @code{python-matplotlib} package")))
13693
13694(define-public python-matplotlib-inline
13695 (package
13696 (name "python-matplotlib-inline")
13697 (version "0.1.7")
13698 (source
13699 (origin
13700 (method url-fetch)
13701 (uri (pypi-uri "matplotlib_inline" version))
13702 (sha256
13703 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13704 (build-system pyproject-build-system)
13705 (arguments
13706 (list
13707 ;; Tests disabled because of a circular dependency with IPython.
13708 #:tests? #f
13709 #:phases
13710 #~(modify-phases %standard-phases
13711 ;; Disabled because of a circular dependency with IPython.
13712 (delete 'sanity-check))))
13713 (native-inputs
13714 (list python-setuptools))
13715 (propagated-inputs
13716 (list python-matplotlib
13717 python-traitlets))
13718 (home-page "https://github.com/ipython/matplotlib-inline")
13719 (synopsis "Inline Matplotlib backend for Jupyter")
13720 (description
13721 "This package provides a Matplotlib inline back-end for IPython and
13722Jupyter.")
13723 (license license:bsd-3)))
13724
13725(define-public python-matplotlib-venn
13726 (package
13727 (name "python-matplotlib-venn")
13728 (version "1.1.2")
13729 (source
13730 (origin
13731 (method url-fetch)
13732 (uri (pypi-uri "matplotlib-venn" version))
13733 (sha256
13734 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13735 (build-system pyproject-build-system)
13736 (native-inputs (list python-pytest
13737 python-setuptools
13738 python-shapely
13739 python-wheel))
13740 (propagated-inputs
13741 (list python-matplotlib python-numpy python-scipy))
13742 (home-page "https://github.com/konstantint/matplotlib-venn")
13743 (synopsis "Plot area-proportional Venn diagrams")
13744 (description
13745 "This package provides tools for plotting area-proportional two- and
13746three-way Venn diagrams in @code{matplotlib}.")
13747 (license license:expat)))
13748
13749(define-public python-matplotx
13750 (package
13751 (name "python-matplotx")
13752 (version "0.3.10")
13753 (source
13754 (origin
13755 (method git-fetch)
13756 (uri (git-reference
13757 (url "https://github.com/nschloe/matplotx")
13758 (commit (string-append "v" version))))
13759 (file-name (git-file-name name version))
13760 (sha256
13761 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13762 (build-system pyproject-build-system)
13763 (arguments
13764 (list
13765 #:test-flags
13766 ;; This test fails with ValueError: not enough values to unpack.
13767 #~(list "--deselect" "tests/test_spy.py::test_cli"
13768 ;; XXX: unknown failure
13769 "--deselect" "tests/test_spy.py::test_png")))
13770 (native-inputs
13771 (list python-imageio
13772 python-meshzoo
13773 python-pytest
13774 python-scipy-minimal
13775 python-setuptools
13776 python-scikit-fem))
13777 (propagated-inputs
13778 (list python-matplotlib
13779 python-numpy
13780 ;; [optional]
13781 python-networkx
13782 python-pypng
13783 python-scipy))
13784 (home-page "https://github.com/nschloe/matplotx")
13785 (synopsis "Minimal matplotlib styles")
13786 (description
13787 "This package includes some extensions for Matplotlib to create clean
13788plots with a minimalistic style.")
13789 (license license:expat)))
13790
13791(define-public python-cplot
13792 (package
13793 (name "python-cplot")
13794 (version "0.9.3")
13795 (source
13796 (origin
13797 (method git-fetch)
13798 (uri (git-reference
13799 (url "https://github.com/nschloe/cplot")
13800 (commit (string-append "v" version))))
13801 (file-name (git-file-name name version))
13802 (sha256
13803 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13804 (build-system pyproject-build-system)
13805 (native-inputs
13806 (list python-pytest
13807 python-setuptools))
13808 (propagated-inputs
13809 (list python-matplotlib
13810 python-matplotx
13811 python-npx
13812 python-numpy))
13813 (home-page "https://github.com/nschloe/cplot")
13814 (synopsis "Plot complex-valued functions")
13815 (description "@code{cplot} is a Python library for plotting
13816complex-valued functions.")
13817 (license license:gpl3+)))
13818
13819(define-public python-cppheaderparser
13820 (package
13821 (name "python-cppheaderparser")
13822 (version "2.7.4")
13823 (source
13824 (origin
13825 (method url-fetch)
13826 (uri (pypi-uri "CppHeaderParser" version))
13827 (sha256
13828 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13829 (build-system pyproject-build-system)
13830 (arguments
13831 (list
13832 #:tests? #f)) ; no tests
13833 (propagated-inputs (list python-ply))
13834 (native-inputs (list python-setuptools python-wheel))
13835 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13836 (synopsis
13837 "Parse C++ header files and generate a data structure representing the class")
13838 (description
13839 "CppHeaderParser is a pure python module that will parse C++ header files
13840and generate a data structure representing the class.")
13841 (license license:bsd-3)))
13842
13843(define-public python-cppy
13844 (package
13845 (name "python-cppy")
13846 (version "1.3.1")
13847 (source
13848 (origin
13849 (method git-fetch)
13850 (uri (git-reference
13851 (url "https://github.com/nucleic/cppy")
13852 (commit version)))
13853 (file-name (git-file-name name version))
13854 (sha256
13855 (base32 "16g0f9kjyybmlxy9w5bbxm98g7wqhcvh4pw77r0jk3dgd11lkvzy"))))
13856 (build-system pyproject-build-system)
13857 (arguments
13858 (list #:tests? #f)) ;there is just one test coping include directory
13859 (native-inputs
13860 (list python-setuptools
13861 python-setuptools-scm))
13862 (home-page "https://github.com/nucleic/cppy")
13863 (synopsis "C++ header library for Python extension modules")
13864 (description "This package is a small C++ header library which makes it
13865easier to write Python extension modules. The primary feature is a
13866@code{PyObject} smart pointer which automatically handles reference counting
13867and provides convenience methods for performing common object operations.")
13868 (license license:bsd-3)))
13869
13870(define-public python-perfplot
13871 (package
13872 (name "python-perfplot")
13873 (version "0.10.2")
13874 (source
13875 (origin
13876 (method git-fetch)
13877 (uri (git-reference
13878 (url "https://github.com/nschloe/perfplot")
13879 (commit (string-append "v" version))))
13880 (file-name (git-file-name name version))
13881 (sha256
13882 (base32 "1j73m8v9l8bhf79qa9apj6lcw1afxbvdq4mrn0yb31541dhrxvkf"))))
13883 (build-system pyproject-build-system)
13884 (native-inputs
13885 (list python-flit-core
13886 python-pytest))
13887 (propagated-inputs
13888 (list python-matplotlib
13889 python-matplotx
13890 python-numpy
13891 python-rich))
13892 (home-page "https://github.com/nschloe/perfplot")
13893 (synopsis "Performance plots for Python code snippets")
13894 (description "@code{perfplot} extends Python's timeit by testing
13895snippets with input parameters (e.g., the size of an array) and plotting
13896the results.")
13897 (license license:gpl3+)))
13898
13899(define-public python-persist-queue
13900 (package
13901 (name "python-persist-queue")
13902 (version "1.1.0")
13903 (source
13904 (origin
13905 (method git-fetch)
13906 (uri (git-reference
13907 (url "https://github.com/peter-wangxu/persist-queue")
13908 (commit (string-append "v" version))))
13909 (file-name (git-file-name name version))
13910 (sha256
13911 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13912 (build-system pyproject-build-system)
13913 (native-inputs
13914 (list python-pytest
13915 python-pytest-asyncio
13916 python-setuptools))
13917 (propagated-inputs
13918 (list python-aiofiles
13919 python-aiosqlite
13920 python-cbor2
13921 python-dbutils
13922 python-msgpack))
13923 (home-page "https://github.com/peter-wangxu/persist-queue")
13924 (synopsis "Thread-safe disk based persistent queue in Python")
13925 (description
13926 "This package provides a thread-safe disk (file and sqlite) based
13927persistent queue in Python.")
13928 (license license:bsd-3)))
13929
13930(define-public python-pycodestyle
13931 (package
13932 (name "python-pycodestyle")
13933 (version "2.14.0")
13934 (source
13935 (origin
13936 (method url-fetch) ;git has no the same version tag as PyPI
13937 (uri (pypi-uri "pycodestyle" version))
13938 (sha256
13939 (base32 "10xpcy8m54cvnk4a37j4cwrjl9lprlcwkpmbs3wry23qs8bvbdf4"))))
13940 (build-system pyproject-build-system)
13941 (arguments
13942 (list
13943 #:test-backend #~'custom
13944 #:test-flags
13945 ;; Taken from Tox config
13946 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13947 #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")))
13948 (native-inputs
13949 (list python-setuptools))
13950 (home-page "https://pycodestyle.readthedocs.io/")
13951 (synopsis "Python style guide checker")
13952 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13953Python code against some of the style conventions in
13954@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13955 (license license:expat)))
13956
13957(define-public python-pycollada
13958 (package
13959 (name "python-pycollada")
13960 (version "0.9.2")
13961 (source
13962 (origin
13963 (method git-fetch)
13964 (uri (git-reference
13965 (url "https://github.com/pycollada/pycollada")
13966 (commit (string-append "v" version))))
13967 (file-name (git-file-name name version))
13968 (sha256
13969 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13970 (build-system pyproject-build-system)
13971 (native-inputs
13972 (list python-pytest
13973 python-setuptools))
13974 (propagated-inputs
13975 (list python-numpy
13976 python-dateutil))
13977 (home-page "https://pycollada.readthedocs.io")
13978 (synopsis "Reading and writing collada documents library")
13979 (description
13980 "This package implements a functionality for creating, editing and
13981loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13982COLLAborative Design Activity for establishing an interchange file format for
13983interactive 3D applications.
13984
13985The library allows you to load a COLLADA file and interact with it as a python
13986object. In addition, it supports creating a collada python object from
13987scratch, as well as in-place editing.")
13988 (license license:bsd-3)))
13989
13990(define-public python-pyct
13991 (package
13992 (name "python-pyct")
13993 (version "0.5.0")
13994 (source
13995 (origin
13996 (method url-fetch)
13997 (uri (pypi-uri "pyct" version))
13998 (sha256
13999 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
14000 (build-system pyproject-build-system)
14001 (arguments
14002 (list
14003 #:test-flags
14004 ;; These tests want to download example data from the internet.
14005 '(list "-k" (string-append
14006 "not test_examples_with_use_test_data"
14007 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
14008 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
14009 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
14010 (propagated-inputs (list python-param python-pyyaml))
14011 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
14012 (home-page "https://github.com/holoviz-dev/pyct")
14013 (synopsis "Common packaging tasks")
14014 (description
14015 "This Python package provides utilities to run common packaging tasks,
14016e.g. copy examples, fetch data, etc.")
14017 (license license:bsd-3)))
14018
14019(define-public python-multidict
14020 (package
14021 (name "python-multidict")
14022 (version "6.7.0")
14023 (source
14024 (origin
14025 (method git-fetch)
14026 (uri (git-reference
14027 (url "https://github.com/aio-libs/multidict/")
14028 (commit (string-append "v" version))))
14029 (file-name (git-file-name name version))
14030 (sha256
14031 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
14032 (build-system pyproject-build-system)
14033 (arguments
14034 (list
14035 ;; tests: 1395 passed
14036 #:test-flags
14037 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
14038 "--ignore-glob=tests/test_*_benchmarks.py")))
14039 (native-inputs
14040 (list python-objgraph
14041 python-psutil
14042 python-pytest
14043 python-setuptools))
14044 (home-page "https://github.com/aio-libs/multidict/")
14045 (synopsis "Multidict implementation")
14046 (description
14047 "Multidict is dict-like collection of key-value pairs where key might be
14048occurred more than once in the container.")
14049 (license license:asl2.0)))
14050
14051(define-public python-orderedmultidict
14052 (package
14053 (name "python-orderedmultidict")
14054 (version "1.0.1")
14055 (source
14056 (origin
14057 (method url-fetch)
14058 (uri (pypi-uri "orderedmultidict" version))
14059 (sha256
14060 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
14061 (build-system pyproject-build-system)
14062 (propagated-inputs
14063 (list python-six))
14064 (native-inputs
14065 (list python-pytest
14066 python-setuptools))
14067 (home-page "https://github.com/gruns/orderedmultidict")
14068 (synopsis "Python Ordered Multivalue Dictionary - omdict")
14069 (description "This package contains a library for ordered multivalue
14070dictionaries. A multivalue dictionary is a dictionary that can store
14071multiple values for the same key. An ordered multivalue dictionary is a
14072multivalue dictionary that retains the order of insertions and deletions.")
14073 (license license:unlicense)))
14074
14075(define-public python-autopage
14076 (package
14077 (name "python-autopage")
14078 (version "0.5.1")
14079 (source (origin
14080 (method url-fetch)
14081 (uri (pypi-uri "autopage" version))
14082 (sha256
14083 (base32
14084 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
14085 (build-system pyproject-build-system)
14086 (arguments
14087 (list
14088 #:phases
14089 #~(modify-phases %standard-phases
14090 (add-before 'check 'disable-e2e-tests
14091 (lambda _
14092 ;; These tests rely on KeyboardInterrupts which do not
14093 ;; work in the build container.
14094 (delete-file "autopage/tests/test_end_to_end.py"))))))
14095 (native-inputs
14096 (list python-pypa-build
14097 python-setuptools
14098 python-wheel
14099 ;; For tests.
14100 python-fixtures
14101 python-pytest
14102 python-testtools))
14103 (home-page "https://github.com/zaneb/autopage")
14104 (synopsis "Automatic paging for console output")
14105 (description
14106 "Autopage is a Python library to automatically display terminal output
14107from a program in a @dfn{pager} such as @command{less}.")
14108 (license license:asl2.0)))
14109
14110(define-public python-dirty-equals
14111 (package
14112 (name "python-dirty-equals")
14113 (version "0.11.0")
14114 (source
14115 (origin
14116 (method git-fetch)
14117 (uri (git-reference
14118 (url "https://github.com/samuelcolvin/dirty-equals")
14119 (commit (string-append "v" version))))
14120 (file-name (git-file-name name version))
14121 (sha256
14122 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
14123 (build-system pyproject-build-system)
14124 ;; tests: 551 passed, 60 skipped
14125 (native-inputs
14126 (list python-hatchling
14127 python-pydantic
14128 python-pytest
14129 python-pytest-examples
14130 tzdata-for-tests))
14131 (home-page "https://dirty-equals.helpmanual.io/")
14132 (synopsis "Do dirty (but useful) things with equals")
14133 (description
14134 "@code{dirty-equals} is a Python library that (mis)uses the
14135@code{__eq__} method to make code (generally unit tests) more declarative
14136and therefore easier to read and write.")
14137 (license license:expat)))
14138
14139(define-public python-dirty-equals-bootstrap
14140 (hidden-package
14141 (package
14142 (inherit python-dirty-equals)
14143 (name "python-dirty-equals-bootstrap")
14144 (arguments
14145 (list #:tests? #f))
14146 (native-inputs
14147 (list python-hatchling)))))
14148
14149(define-public python-distutils-extra
14150 (package
14151 (name "python-distutils-extra")
14152 (version "2.38")
14153 (source
14154 (origin
14155 (method url-fetch)
14156 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
14157 version "/+download/python-distutils-extra-"
14158 version ".tar.gz"))
14159 (sha256
14160 (base32
14161 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
14162 (build-system pyproject-build-system)
14163 (arguments
14164 (list #:tests? #f)) ;tests are outdated and broken
14165 (native-inputs (list python-setuptools python-wheel))
14166 (home-page "https://launchpad.net/python-distutils-extra/")
14167 (synopsis "Enhancements to Python's distutils")
14168 (description
14169 "The python-distutils-extra module enables you to easily integrate
14170gettext support, themed icons, and scrollkeeper-based documentation into
14171Python's distutils.")
14172 (license license:gpl2)))
14173
14174(define-public python-olefile
14175 (package
14176 (name "python-olefile")
14177 (version "0.47")
14178 (source
14179 (origin
14180 (method git-fetch)
14181 (uri (git-reference
14182 (url "https://github.com/decalage2/olefile")
14183 (commit (string-append "v" version))))
14184 (file-name (git-file-name name version))
14185 (sha256
14186 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
14187 (build-system pyproject-build-system)
14188 (native-inputs
14189 (list python-pytest
14190 python-setuptools))
14191 (home-page "https://www.decalage.info/python/olefileio")
14192 (synopsis "Read and write Microsoft OLE2 files")
14193 (description
14194 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
14195Storage or Compound Document, Microsoft Office). It is an improved version of
14196the OleFileIO module from PIL, the Python Image Library.")
14197 (license license:bsd-3)))
14198
14199(define-public python-property-cached
14200 (package
14201 (name "python-property-cached")
14202 (version "1.6.4")
14203 (source
14204 (origin
14205 (method url-fetch)
14206 (uri (pypi-uri "property-cached" version ".zip"))
14207 (sha256
14208 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
14209 (patches
14210 (search-patches "python-property-cached-asyncio-3_11.patch"))))
14211 (build-system pyproject-build-system)
14212 (arguments
14213 (list
14214 ;; AssertionError.
14215 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
14216 (native-inputs (list python-freezegun python-pytest unzip
14217 python-setuptools python-wheel))
14218 (home-page "https://github.com/althonos/property-cached/")
14219 (synopsis "Decorator for caching properties in classes")
14220 (description "This package provides a decorator for caching properties in
14221classes. It is forked from @code{cached-property}.")
14222 (license license:bsd-3)))
14223
14224(define-public python-pdf2image
14225 (package
14226 (name "python-pdf2image")
14227 (version "1.17.0")
14228 (source
14229 (origin
14230 (method git-fetch)
14231 (uri (git-reference
14232 (url "https://github.com/Belval/pdf2image")
14233 (commit (string-append "v" version))))
14234 (file-name (git-file-name name version))
14235 (sha256
14236 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
14237 (build-system pyproject-build-system)
14238 (arguments
14239 (list
14240 ;; The following excluded tests assume hardcoded binary paths to
14241 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
14242 #:test-flags
14243 #~(list "--exclude=^test_use_poppler_path$"
14244 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
14245 (propagated-inputs (list python-pillow))
14246 (inputs (list poppler))
14247 (native-inputs (list python-pynose which python-setuptools))
14248 (home-page "https://github.com/Belval/pdf2image")
14249 (synopsis
14250 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
14251 (description
14252 "This package provides a Python API wrapping the @command{pdftoppm} and
14253@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
14254Python list with elements of type @code{PIL.Image} (from the
14255@code{python-pillow} library).")
14256 (license license:expat)))
14257
14258(define-public python-pikepdf
14259 (package
14260 (name "python-pikepdf")
14261 (version "8.15.1")
14262 (source
14263 (origin
14264 (method git-fetch)
14265 (uri (git-reference
14266 (url "https://github.com/pikepdf/pikepdf")
14267 (commit (string-append "v" version))))
14268 (file-name (git-file-name name version))
14269 (sha256
14270 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
14271 (build-system pyproject-build-system)
14272 (native-inputs
14273 (list pybind11-2
14274 python-attrs
14275 python-hypothesis
14276 python-setuptools-scm
14277 python-psutil
14278 python-pytest
14279 python-pytest-timeout
14280 python-pytest-xdist
14281 python-dateutil
14282 python-xmp-toolkit
14283 python-tomli
14284 python-setuptools))
14285 (inputs
14286 (list qpdf))
14287 (propagated-inputs
14288 (list python-deprecated python-lxml python-packaging python-pillow))
14289 (home-page "https://github.com/pikepdf/pikepdf")
14290 (synopsis "Read and write PDFs with Python")
14291 (description
14292 "pikepdf is a Python library for reading and writing PDF files.")
14293 (license license:mpl2.0)))
14294
14295(define-public python-pillow
14296 (package
14297 (name "python-pillow")
14298 (version "12.2.0")
14299 (source
14300 (origin
14301 (method git-fetch)
14302 (uri (git-reference
14303 (url "https://github.com/python-pillow/Pillow")
14304 (commit version)))
14305 (file-name (git-file-name name version))
14306 (sha256
14307 (base32 "140ynzxpazq6gq041bhkzx314z4kkzv3wlmvph68a0nkj9nqa3pg"))))
14308 (build-system pyproject-build-system)
14309 (arguments
14310 (list
14311 #:phases
14312 #~(modify-phases %standard-phases
14313 (add-after 'unpack 'patch-ldconfig
14314 (lambda _
14315 (substitute* "setup.py"
14316 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14317 (replace 'check
14318 (lambda* (#:key tests? #:allow-other-keys)
14319 (when tests?
14320 (setenv "HOME" (getcwd))
14321 (invoke "python" "selftest.py" "--installed")
14322 (invoke "python" "-m" "pytest" "-vv")))))))
14323 (native-inputs (list pybind11
14324 python-defusedxml
14325 python-markdown2
14326 python-olefile
14327 python-pytest
14328 python-setuptools
14329 python-trove-classifiers))
14330 (inputs (list freetype
14331 lcms
14332 libjpeg-turbo
14333 libtiff
14334 libwebp
14335 openjpeg
14336 zlib))
14337 (home-page "https://python-pillow.github.io/")
14338 (synopsis "Fork of the Python Imaging Library")
14339 (description
14340 "The Python Imaging Library adds image processing capabilities to your
14341Python interpreter. This library provides extensive file format support, an
14342efficient internal representation, and fairly powerful image processing
14343capabilities. The core image library is designed for fast access to data
14344stored in a few basic pixel formats. It should provide a solid foundation for
14345a general image processing tool.")
14346 (properties `((cpe-name . "pillow")))
14347 (license (license:x11-style
14348 "https://github.com/python-pillow/Pillow/blob/12.2.0/LICENSE"
14349 "MIT-CMU License"))))
14350
14351(define-public python-pillow-avif-plugin
14352 (package
14353 (name "python-pillow-avif-plugin")
14354 (version "1.5.5")
14355 (source
14356 (origin
14357 (method git-fetch)
14358 (uri (git-reference
14359 (url "https://github.com/fdintino/pillow-avif-plugin/")
14360 (commit (string-append "v" version))))
14361 (file-name (git-file-name name version))
14362 (sha256
14363 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14364 (build-system pyproject-build-system)
14365 (propagated-inputs (list python-requests))
14366 (native-inputs (list python-packaging
14367 python-pillow
14368 python-pytest
14369 python-setuptools))
14370 (inputs (list libavif))
14371 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14372 (synopsis "Pillow plugin that adds avif support via libavif")
14373 (description
14374 "This package provides a pillow plugin that adds avif support via
14375libavif.")
14376 (license license:expat)))
14377
14378(define-public python-pillow-heif
14379 (package
14380 (name "python-pillow-heif")
14381 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14382 ;; commit is taken from the master branch.
14383 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14384 (revision . "0")))
14385 (version (git-version "1.3.0"
14386 (assoc-ref properties 'revision)
14387 (assoc-ref properties 'commit)))
14388 (source
14389 (origin
14390 (method git-fetch)
14391 (uri (git-reference
14392 (url "https://github.com/bigcat88/pillow_heif")
14393 (commit (assoc-ref properties 'commit))))
14394 (file-name (git-file-name name version))
14395 (sha256
14396 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14397 (build-system pyproject-build-system)
14398 (inputs (list libheif))
14399 (propagated-inputs (list python-pillow))
14400 (native-inputs (list opencv ; for opencv-python
14401 python-defusedxml
14402 python-numpy
14403 python-packaging
14404 python-pympler
14405 python-pytest
14406 python-setuptools))
14407 (home-page "https://github.com/bigcat88/pillow_heif")
14408 (synopsis "Python interface for libheif library")
14409 (description "This package provides Python bindings for the libheif library
14410and a plugin for Pillow.")
14411 (license license:bsd-3)))
14412
14413(define-public python-pillow-jxl-plugin
14414 (package
14415 (name "python-pillow-jxl-plugin")
14416 (version "1.3.7")
14417 (source
14418 (origin
14419 (method git-fetch)
14420 (uri (git-reference
14421 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14422 (commit (string-append "v" version))))
14423 (file-name (git-file-name name version))
14424 (sha256
14425 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14426 (build-system pyproject-build-system)
14427 (arguments
14428 (list
14429 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14430 ;; in Guix.
14431 #:tests? #f
14432 #:imported-modules `(,@%cargo-build-system-modules
14433 ,@%pyproject-build-system-modules)
14434 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14435 (guix build pyproject-build-system)
14436 (guix build utils))
14437 #:phases
14438 #~(modify-phases %standard-phases
14439 (add-after 'unpack 'prepare-cargo-build-system
14440 (lambda args
14441 (for-each (lambda (phase)
14442 (format #t "Running cargo phase: ~a~%" phase)
14443 (apply (assoc-ref cargo:%standard-phases phase)
14444 #:cargo-target #$(cargo-triplet)
14445 args))
14446 '(unpack-rust-crates
14447 configure
14448 check-for-pregenerated-files
14449 patch-cargo-checksums))))
14450 (add-after 'unpack 'patch-pyproject
14451 (lambda _
14452 ;; maturin failed to parse pyproject.toml.
14453 (substitute* "pyproject.toml"
14454 (("^license-files = .*") "")))))))
14455 (propagated-inputs (list python-brotli
14456 python-packaging
14457 python-pillow))
14458 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14459 (native-inputs (list maturin
14460 python-numpy
14461 python-pytest
14462 rust
14463 `(,rust "cargo")))
14464 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14465 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14466 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14467 (description "This package provides pillow plugin for JPEG-XL, using Rust
14468for bindings.")
14469 (license license:gpl3+)))
14470
14471(define-public python-jxlpy
14472 (package
14473 (name "python-jxlpy")
14474 (version "0.9.5")
14475 (source
14476 (origin
14477 (method git-fetch)
14478 (uri (git-reference
14479 (url "https://github.com/olokelo/jxlpy")
14480 (commit version)))
14481 (file-name (git-file-name name version))
14482 (sha256
14483 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14484 (build-system pyproject-build-system)
14485 (arguments (list #:tests? #f)) ; no tests, just examples
14486 (inputs (list libjxl))
14487 (propagated-inputs (list python-cython))
14488 (native-inputs (list python-cython python-setuptools))
14489 (home-page "https://github.com/olokelo/jxlpy")
14490 (synopsis "JPEG XL integration in Python")
14491 (description "This package provides Cython-based Python bindings for
14492libjxl, as well as a pillow plugin.")
14493 (license license:expat)))
14494
14495(define-public python-pixelmatch
14496 (package
14497 (name "python-pixelmatch")
14498 (version "0.3.0")
14499 (source
14500 (origin
14501 (method git-fetch)
14502 (uri (git-reference
14503 (url "https://github.com/whtsky/pixelmatch-py")
14504 (commit (string-append "v" version))))
14505 (file-name (git-file-name name version))
14506 (sha256
14507 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14508 (build-system pyproject-build-system)
14509 (arguments
14510 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14511 (list #:tests? #f))
14512 (native-inputs
14513 (list python-poetry-core
14514 python-pillow
14515 python-pytest
14516 python-pytest-benchmark))
14517 (home-page "https://github.com/whtsky/pixelmatch-py")
14518 (synopsis "Pixel-level image comparison library")
14519 (description
14520 "This package provides a pixel-level image comparison library for Python,
14521originally created to compare screenshots in tests. Its features include
14522accurate anti-aliased pixels detection and perceptual color difference
14523metrics.")
14524 (license license:isc)))
14525
14526(define-public python-imagecodecs
14527 (package
14528 (name "python-imagecodecs")
14529 (version "2025.8.2")
14530 (source
14531 (origin
14532 (method url-fetch)
14533 (uri (pypi-uri "imagecodecs" version))
14534 (sha256
14535 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14536 (modules '((guix build utils)))
14537 (snippet #~(for-each delete-file
14538 ;; Delete pre-generated Cython files.
14539 (find-files "imagecodecs" "_.*\\.c$")))))
14540 (build-system pyproject-build-system)
14541 (arguments
14542 (list
14543 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14544 #:test-flags
14545 ;; Some of those tests are flaky.
14546 #~(list "-k" "not test_cms_identity_transforms")
14547 #:phases
14548 #~(modify-phases %standard-phases
14549 (add-after 'unpack 'create-configuration
14550 (lambda _
14551 ;; By default everything is enabled. We can selectively disable
14552 ;; extensions (and thus dependencies) by deleting them from the
14553 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14554 (call-with-output-file "imagecodecs_distributor_setup.py"
14555 (lambda (port)
14556 (format port "\
14557def customize_build(EXTENSIONS, OPTIONS):
14558~{ del EXTENSIONS[~s]~%~}~%"
14559 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14560 ;; Those rely on unpackaged inputs.
14561 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14562 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14563 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14564 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14565 "zlibng" "zopfli"))))))
14566 (add-after 'unpack 'fix-sanity-check
14567 (lambda _
14568 ;; XXX: Don't exit twice. The generated script already does that.
14569 (substitute* "imagecodecs/__main__.py"
14570 (("sys\\.exit\\(main\\(\\)\\)")
14571 ""))))
14572 (add-before 'check 'configure-tests
14573 (lambda _
14574 (setenv "HOME" (getcwd)))))))
14575 (inputs
14576 (list brotli
14577 c-blosc
14578 c-blosc2
14579 giflib
14580 lcms
14581 libheif
14582 libjpeg-turbo
14583 libpng
14584 libtiff
14585 libwebp
14586 lz4
14587 lzfse
14588 snappy
14589 xz
14590 zlib
14591 `(,zstd "lib")))
14592 (propagated-inputs
14593 (list python-numpy python-matplotlib python-tifffile))
14594 (native-inputs
14595 (list python-cython python-pytest python-setuptools))
14596 (home-page "https://www.lfd.uci.edu/~gohlke/")
14597 (synopsis "Image transformation, compression, and decompression codecs")
14598 (description
14599 "Imagecodecs is a Python library that provides block-oriented, in-memory
14600buffer transformation, compression, and decompression functions for use in the
14601tifffile, czifile, and other scientific image input/output modules.")
14602 (license license:bsd-3)))
14603
14604(define-public python-property-manager
14605 (package
14606 (name "python-property-manager")
14607 (version "3.0")
14608 (source
14609 (origin
14610 (method git-fetch)
14611 (uri (git-reference
14612 (url "https://github.com/xolox/python-property-manager")
14613 (commit version)))
14614 (file-name (git-file-name name version))
14615 (sha256
14616 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14617 (build-system pyproject-build-system)
14618 (native-inputs (list python-pytest python-setuptools))
14619 (propagated-inputs
14620 (list python-verboselogs
14621 python-humanfriendly
14622 python-coloredlogs))
14623 (home-page "https://github.com/xolox/python-property-manager")
14624 (synopsis "Useful property variants for Python programming")
14625 (description
14626 "The @code{property-manager} package defines several custom property
14627variants for Python programming including required properties,writable
14628properties, cached properties, etc.")
14629 (license license:expat)))
14630
14631(define-public python-executing
14632 (package
14633 (name "python-executing")
14634 (version "2.2.0")
14635 (source
14636 (origin
14637 (method url-fetch)
14638 (uri (pypi-uri "executing" version))
14639 (sha256
14640 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14641 (build-system pyproject-build-system)
14642 (arguments
14643 (list
14644 #:test-flags
14645 ;; Test needs IPython
14646 #~(list "-k" "not test_two_statement_lookups")
14647 #:phases
14648 #~(modify-phases %standard-phases
14649 (add-after 'unpack 'fix-tests
14650 (lambda _
14651 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14652 (substitute* "pyproject.toml"
14653 (("ignore_missing_imports = true.*")
14654 "ignore_missing_imports = true
14655
14656[tool.pytest.ini_options]
14657python_functions = \"test_\"\n")))))))
14658 (native-inputs
14659 (list python-asttokens
14660 python-littleutils
14661 python-pytest
14662 python-rich
14663 python-setuptools
14664 python-setuptools-scm
14665 python-wheel))
14666 (home-page "https://github.com/alexmojaki/executing")
14667 (synopsis "Get information about what a Python frame is currently doing")
14668 (description "This package lets you get information about what a frame is
14669currently doing, particularly the AST node being executed.")
14670 (license license:expat)))
14671
14672(define-public python-executor
14673 (package
14674 (name "python-executor")
14675 (version "23.2")
14676 (source
14677 (origin
14678 (method git-fetch)
14679 (uri (git-reference
14680 (url "https://github.com/xolox/python-executor")
14681 (commit version)))
14682 (file-name (git-file-name name version))
14683 (sha256
14684 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14685 (build-system pyproject-build-system)
14686 (arguments
14687 (list #:tests? #f)) ;TODO: tests require root/sudo
14688 (native-inputs (list python-mock python-pytest python-setuptools))
14689 (propagated-inputs
14690 (list python-six
14691 python-property-manager
14692 python-fasteners
14693 python-virtualenv))
14694 (home-page "https://github.com/xolox/python-executor")
14695 (synopsis "Programmer friendly subprocess wrapper")
14696 (description
14697 "The @code{executor} package is a simple wrapper for Python’s subprocess
14698module that makes it very easy to handle subprocesses on UNIX systems with
14699proper escaping of arguments and error checking currently doing, particularly
14700the AST node being executed.")
14701 (license license:expat)))
14702
14703(define-public python-roifile
14704 (package
14705 (name "python-roifile")
14706 (version "2025.5.10")
14707 (source
14708 (origin
14709 (method url-fetch)
14710 (uri (pypi-uri "roifile" version))
14711 (sha256
14712 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14713 (build-system pyproject-build-system)
14714 (arguments (list #:tests? #f)) ; There are none.
14715 (native-inputs (list python-setuptools))
14716 (propagated-inputs (list python-numpy))
14717 (home-page "https://www.lfd.uci.edu/~gohlke/")
14718 (synopsis "Read and write ImageJ ROI format")
14719 (description "Roifile is a Python library to read, write, create, and plot
14720ImageJ ROIs, an undocumented and ImageJ application specific format to store
14721regions of interest, geometric shapes, paths, text, etc for image overlays.")
14722 (license license:bsd-3)))
14723
14724(define-public python-lfdfiles
14725 (package
14726 (name "python-lfdfiles")
14727 (version "2026.4.30")
14728 (source
14729 (origin
14730 (method url-fetch)
14731 (uri (pypi-uri "lfdfiles" version))
14732 (sha256
14733 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14734 (modules '((guix build utils)))
14735 (snippet
14736 ;; Delete pre-generated Cython files.
14737 #~(begin
14738 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14739 (delete-file "lfdfiles/conftest.py")))))
14740 (build-system pyproject-build-system)
14741 (arguments
14742 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14743 (list #:tests? #f))
14744 (native-inputs (list python-setuptools))
14745 (propagated-inputs (list python-click python-numpy python-tifffile))
14746 (home-page "https://www.lfd.uci.edu/~gohlke/")
14747 (synopsis "Work with LFD data files")
14748 (description
14749 "Lfdfiles is a Python library and console script for reading, writing,
14750converting, and viewing many of the proprietary file formats used to store
14751experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14752 (license license:bsd-3)))
14753
14754;; ~8Mo of test files.
14755(define python-av-testdata
14756 (file-union
14757 "python-av-testdata"
14758 (cons*
14759 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14760 `(,(string-append "pyav-curated/" file)
14761 ,(origin
14762 (method url-fetch)
14763 (uri (string-append "https://pyav.org/datasets/" file))
14764 (sha256
14765 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14766 (map
14767 (match-lambda
14768 ((file . hash)
14769 (list (string-append "fate-suite/" file)
14770 (origin
14771 (method url-fetch)
14772 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14773 (sha256 (base32 hash))))))
14774 '(("aac/latm_stereo_to_51.ts" .
14775 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14776 ("h264/extradata-reload-multi-stsd.mov" .
14777 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14778 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14779 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14780 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14781 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14782 ("h264/interlaced_crop.mp4" .
14783 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14784 ("hap/HAPQA_NoSnappy_127x1.mov" .
14785 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14786 ("mkv/codec_delay_opus.mkv" .
14787 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14788 ("mov/displaymatrix.mov" .
14789 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14790 ("mov/mov-1elist-ends-last-bframe.mov" .
14791 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14792 ("mov/white_zombie_scrunch-part.mov" .
14793 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14794 ("mpeg2/mpeg2_field_encoding.ts" .
14795 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14796 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14797 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14798 ("mxf/track_01_v02.mxf" .
14799 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14800 ("png1/55c99e750a5fd6_50314226.png" .
14801 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14802 ("qtrle/aletrek-rle.mov" .
14803 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14804 ("sub/MovText_capability_tester.mp4" .
14805 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14806 ("sub/vobsub.sub" .
14807 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14808
14809(define-public python-av
14810 (package
14811 (name "python-av")
14812 (version "16.0.1")
14813 (source
14814 (origin
14815 (method url-fetch)
14816 (uri (pypi-uri "av" version))
14817 (sha256
14818 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14819 (build-system pyproject-build-system)
14820 (arguments
14821 (list
14822 ;; Upstream is not great in responding to open issues or change requests.
14823 ;; See:
14824 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14825 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14826 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14827 #:test-flags
14828 ;; Writing to custom IO requires network access.
14829 #~(list "-k" "not test_writing_to_custom_io_dash")
14830 #:phases
14831 #~(modify-phases %standard-phases
14832 (add-before 'check 'pre-check
14833 (lambda _
14834 ;; This would otherwise interfere with finding the installed
14835 ;; av when running tests.
14836 (delete-file-recursively "av")
14837 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14838 (substitute* "tests/common.py"
14839 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14840 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14841 (native-inputs
14842 (list pkg-config
14843 python-cython
14844 python-numpy
14845 python-pillow
14846 python-pytest
14847 python-setuptools))
14848 (inputs (list ffmpeg))
14849 (home-page "https://github.com/PyAV-Org/PyAV")
14850 (synopsis "Pythonic bindings for FFmpeg's libraries")
14851 (description
14852 "PyAV is a Python library that allows for direct and precise manipulation
14853of media through containers, streams, packets, codecs, and frames. It provides
14854access to the powerful FFmpeg libraries while managing the complex details as
14855much as possible.
14856PyAV also facilitates data transformation and integration with
14857other packages such as Numpy and Pillow. However, working with media is a
14858challenging task and PyAV cannot abstract it away or make all the best decisions
14859for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14860be necessary. Nonetheless, PyAV is an essential tool when working with media
14861that requires its specific capabilities.")
14862 (license license:bsd-3)))
14863
14864(define-public python-ffmpeg-python
14865 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14866 (package
14867 (name "python-ffmpeg-python")
14868 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14869 (revision . "0")))
14870 (version (git-version "0.2.0"
14871 (assoc-ref properties 'revision)
14872 (assoc-ref properties 'commit)))
14873 (source
14874 (origin
14875 (method git-fetch)
14876 (uri (git-reference
14877 (url "https://github.com/kkroening/ffmpeg-python.git")
14878 (commit (assoc-ref properties 'commit))))
14879 (file-name (git-file-name name version))
14880 (sha256
14881 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14882 (build-system pyproject-build-system)
14883 (arguments
14884 (list
14885 #:test-flags
14886 #~(list "-k" "not test_pipe and not test__probe")
14887 #:phases
14888 #~(modify-phases %standard-phases
14889 (add-after 'unpack 'hardcode-ffmpeg
14890 (lambda* (#:key inputs #:allow-other-keys)
14891 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14892 (substitute* "ffmpeg/_run.py"
14893 (("cmd='ffmpeg'")
14894 (string-append "cmd='" ffmpeg "'")))
14895 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14896 (("out_file.compile\\(\\) == \\['ffmpeg'")
14897 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14898 (inputs (list ffmpeg))
14899 (propagated-inputs (list python-future))
14900 (native-inputs (list python-future
14901 python-numpy
14902 python-pytest
14903 python-pytest-mock
14904 python-setuptools))
14905 (home-page "https://github.com/kkroening/ffmpeg-python")
14906 (synopsis "Python bindings for FFmpeg with complex filtering support")
14907 (description
14908 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14909Python terms, taking care of running ffmpeg with the correct command-line
14910arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14911 (license license:asl2.0)))
14912
14913(define-public python-imageio-ffmpeg
14914 (package
14915 (name "python-imageio-ffmpeg")
14916 (version "0.6.0")
14917 (source
14918 (origin
14919 (method url-fetch)
14920 (uri (pypi-uri "imageio_ffmpeg" version))
14921 (sha256
14922 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14923 (build-system pyproject-build-system)
14924 (arguments
14925 (list
14926 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14927 #:phases
14928 #~(modify-phases %standard-phases
14929 (add-after 'unpack 'hardcode-ffmpeg
14930 (lambda* (#:key inputs #:allow-other-keys)
14931 (substitute* "imageio_ffmpeg/_utils.py"
14932 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14933 (string-append "(" all " or \""
14934 (search-input-file inputs "bin/ffmpeg")
14935 "\")"))))))))
14936 (native-inputs
14937 (list python-setuptools
14938 python-wheel))
14939 (inputs
14940 (list ffmpeg))
14941 (home-page "https://github.com/imageio/imageio-ffmpeg")
14942 (synopsis "FFMPEG wrapper for Python")
14943 (description
14944 "This package provides an FFMPEG wrapper for working with video files.
14945It implements generator functions for reading and writing data to and from
14946FFMPEG, reliably terminating the process when done.")
14947 (license license:bsd-2)))
14948
14949(define-public python-imageio
14950 (package
14951 (name "python-imageio")
14952 (version "2.36.1")
14953 (source
14954 (origin
14955 (method url-fetch)
14956 (uri (pypi-uri "imageio" version))
14957 (sha256
14958 (base32
14959 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14960 (build-system pyproject-build-system)
14961 (arguments
14962 (list
14963 #:test-flags #~(list "-m" "not needs_internet"
14964 ;; This attempts to load libGL.so (provided by mesa)
14965 ;; at the Python store path (sys.base_prefix?).
14966 "-k" "not test_findlib2"
14967 "--ignore" "tests/test_freeimage.py")
14968 #:phases
14969 #~(modify-phases %standard-phases
14970 (add-after 'unpack 'fix-source
14971 (lambda* (#:key inputs #:allow-other-keys)
14972 (substitute* "imageio/core/util.py"
14973 (("\"/var/tmp\"")
14974 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14975 (propagated-inputs
14976 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14977 (native-inputs
14978 (list python-fsspec
14979 python-pytest
14980 python-setuptools))
14981 (home-page "https://imageio.github.io/")
14982 (synopsis "Library for reading and writing a wide range of image data")
14983 (description
14984 "Imageio is a Python library that provides an easy interface to read and
14985write a wide range of image data, including animated images, video, volumetric
14986data, and scientific formats.")
14987 (license license:bsd-2)))
14988
14989(define-public python-pyudorandom
14990 ;; Releases are not tagged in Git:
14991 ;; https://github.com/mewwts/pyudorandom/issues/3
14992 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14993 (revision "0"))
14994 (package
14995 (name "python-pyudorandom")
14996 (version (git-version "1.0.0" revision commit))
14997 (source
14998 (origin
14999 (method git-fetch)
15000 (uri (git-reference
15001 (url "https://github.com/mewwts/pyudorandom")
15002 (commit commit)))
15003 (file-name (git-file-name name version))
15004 (sha256
15005 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
15006 (build-system pyproject-build-system)
15007 (arguments (list #:test-backend #~'unittest))
15008 (native-inputs (list python-setuptools))
15009 (home-page "https://github.com/mewwts/pyudorandom")
15010 (synopsis "Generate pseudorandom numbers by using algebra")
15011 (description
15012 "The @code{pyudorandom} module lets you iterate over a list
15013in a non-succsessive, yet deterministic way based on integer modulo.
15014It comes in handy when you want to mix up the items, but don't need
15015any guarantees of randomness. It might be slow on small data,
15016but shall be significantly faster than @code{random.shuffle}
15017for longer lists.")
15018 (license license:expat))))
15019
15020(define-public python-pyvips
15021 (package
15022 (name "python-pyvips")
15023 (version "3.1.1")
15024 (source
15025 (origin
15026 (method git-fetch) ; PyPI does not include test helpers
15027 (uri (git-reference
15028 (url "https://github.com/libvips/pyvips")
15029 (commit (string-append "v" version))))
15030 (file-name (git-file-name name version))
15031 (sha256
15032 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
15033 (build-system pyproject-build-system)
15034 (native-inputs
15035 (list pkg-config
15036 python-pytest
15037 python-setuptools
15038 python-wheel))
15039 (inputs
15040 (list glib vips))
15041 (propagated-inputs
15042 (list python-cffi python-pkgconfig))
15043 (home-page "https://github.com/libvips/pyvips")
15044 (synopsis "Python bindings for VIPS")
15045 (description "The @code{pyvips} package provides Python bindings for VIPS,
15046a multithreaded image-processing system with low memory needs.")
15047 (license license:expat)))
15048
15049;; WARNING: This package is a dependency of mesa.
15050;; There are no users in python-xyz for this package, consider to adopt closer
15051;; to Mesa.
15052(define-public python-pycparser
15053 (package
15054 (name "python-pycparser")
15055 (version "2.22")
15056 (source
15057 (origin
15058 (method url-fetch)
15059 (uri (pypi-uri "pycparser" version))
15060 (sha256
15061 (base32
15062 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
15063 (outputs '("out" "doc"))
15064 (build-system pyproject-build-system)
15065 (arguments
15066 (list
15067 #:test-backend #~'unittest
15068 #:phases
15069 #~(modify-phases %standard-phases
15070 (add-after 'install 'install-doc
15071 (lambda _
15072 (let* ((data (string-append #$output:doc "/share"))
15073 (doc (string-append data "/doc/" #$name "-" #$version))
15074 (examples (string-append doc "/examples")))
15075 (mkdir-p examples)
15076 (for-each (lambda (file)
15077 (copy-file (string-append "." file)
15078 (string-append doc file)))
15079 '("/README.rst" "/CHANGES" "/LICENSE"))
15080 (copy-recursively "examples" examples)))))))
15081 (native-inputs
15082 (list python-setuptools))
15083 (home-page "https://github.com/eliben/pycparser")
15084 (synopsis "C parser in Python")
15085 (description
15086 "Pycparser is a complete parser of the C language, written in pure Python
15087using the PLY parsing library. It parses C code into an AST and can serve as
15088a front-end for C compilers or analysis tools.")
15089 (license license:bsd-3)))
15090
15091(define-public python-pywavelets
15092 (package
15093 (name "python-pywavelets")
15094 (version "1.8.0")
15095 (home-page "https://github.com/PyWavelets/pywt")
15096 (source (origin
15097 (method url-fetch)
15098 (uri (pypi-uri "pywavelets" version))
15099 (sha256
15100 (base32
15101 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
15102 (build-system pyproject-build-system)
15103 (arguments
15104 (list
15105 #:test-flags '(list "--pyargs" "pywt")
15106 #:phases
15107 #~(modify-phases %standard-phases
15108 ;; The compiled libraries are only in the output at this point,
15109 ;; but they are needed to run tests.
15110 ;; FIXME: This should be handled by the pyargs pytest argument,
15111 ;; but is not for some reason.
15112 (add-before 'check 'pre-check
15113 (lambda _ (chdir #$output))))))
15114 (native-inputs
15115 (list meson
15116 ninja
15117 pkg-config
15118 python-cython
15119 python-meson
15120 python-numpy
15121 python-pytest))
15122 (propagated-inputs
15123 (list python-numpy python-scipy))
15124 (synopsis "Wavelet transforms in Python")
15125 (description
15126 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
15127mathematical basis functions that are localized in both time and frequency.
15128Wavelet transforms are time-frequency transforms employing wavelets. They are
15129similar to Fourier transforms, the difference being that Fourier transforms are
15130localized only in frequency instead of in time and frequency.")
15131 (license license:expat)))
15132
15133(define-public python-pywal
15134 (package
15135 (name "python-pywal")
15136 (version "3.3.0")
15137 (source
15138 (origin
15139 (method git-fetch)
15140 (uri (git-reference
15141 (url "https://github.com/dylanaraps/pywal")
15142 (commit version)))
15143 (file-name (git-file-name name version))
15144 (sha256
15145 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
15146 (build-system pyproject-build-system)
15147 (arguments
15148 `(#:phases
15149 (modify-phases %standard-phases
15150 (add-before 'check 'fix-home-directory
15151 (lambda _
15152 ;; Tests fail with "Permission denied: '/homeless-shelter'".
15153 (setenv "HOME" "/tmp"))))))
15154 (native-inputs
15155 (list python-pytest
15156 python-setuptools))
15157 (inputs
15158 (list imagemagick))
15159 (home-page "https://github.com/dylanaraps/pywal")
15160 (synopsis "Color palette generator and applicator")
15161 (description
15162 "Pywal is a tool that generates a color palette from the dominant colors
15163in an image. It then applies the colors system-wide and on-the-fly in all of
15164your favourite programs.")
15165 (license license:expat)))
15166
15167(define-public python-pywal16
15168 (package
15169 (name "python-pywal16")
15170 (version "3.8.10")
15171 (source
15172 (origin
15173 (method url-fetch)
15174 (uri (pypi-uri "pywal16" version))
15175 (sha256
15176 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
15177 (build-system pyproject-build-system)
15178 (arguments
15179 (list
15180 #:phases
15181 '(modify-phases %standard-phases
15182 (add-before 'check 'set-HOME
15183 (lambda _ (setenv "HOME" "/tmp"))))))
15184 (native-inputs
15185 (list imagemagick
15186 python-pytest
15187 python-setuptools))
15188 (home-page "https://github.com/eylles/pywal16")
15189 (synopsis "16 colors fork of pywal")
15190 (description
15191 "Pywal16 is a tool that generates a color palette from the dominant
15192colors in an image. It then applies the colors system-wide and on-the-fly in
15193all of your favorite programs.")
15194 (license license:expat)))
15195
15196(define-public python-click-didyoumean
15197 (package
15198 (name "python-click-didyoumean")
15199 (version "0.3.1")
15200 (source
15201 (origin
15202 (method git-fetch) ;no tests in PyPI archive
15203 (uri (git-reference
15204 (url "https://github.com/click-contrib/click-didyoumean")
15205 (commit (string-append "v" version))))
15206 (file-name (git-file-name name version))
15207 (sha256
15208 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
15209 (build-system pyproject-build-system)
15210 (native-inputs
15211 (list python-poetry-core python-pytest))
15212 (propagated-inputs
15213 (list python-click))
15214 (home-page "https://github.com/timofurrer/click-didyoumean")
15215 (synopsis "Git-like did-you-mean feature in Click")
15216 (description
15217 "This plugin enables git-like did-you-mean feature in Click.")
15218 (license license:expat)))
15219
15220(define-public python-pywinrm
15221 (package
15222 (name "python-pywinrm")
15223 (version "0.5.0")
15224 (source
15225 (origin
15226 (method git-fetch)
15227 (uri (git-reference
15228 (url "https://github.com/diyan/pywinrm/")
15229 (commit (string-append "v" version))))
15230 (file-name (git-file-name name version))
15231 (sha256
15232 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
15233 (build-system pyproject-build-system)
15234 (propagated-inputs
15235 (list python-requests python-requests-ntlm python-xmltodict))
15236 (native-inputs
15237 (list python-mock python-pytest python-setuptools))
15238 (home-page "https://github.com/diyan/pywinrm/")
15239 (synopsis "Python library for Windows Remote Management (WinRM)")
15240 (description
15241 "pywinrm is a Python client for the Windows Remote Management (WinRM)
15242service. It allows you to invoke commands on target Windows machines from
15243any machine that can run Python.")
15244 (license license:expat)))
15245
15246(define-public python-manimpango
15247 (package
15248 (name "python-manimpango")
15249 (version "0.5.0")
15250 (source
15251 (origin
15252 (method git-fetch) ; no tests data in PyPi package
15253 (uri (git-reference
15254 (url "https://github.com/ManimCommunity/ManimPango")
15255 (commit (string-append "v" version))))
15256 (file-name (git-file-name name version))
15257 (sha256
15258 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
15259 (build-system pyproject-build-system)
15260 (arguments
15261 (list
15262 #:phases
15263 #~(modify-phases %standard-phases
15264 (add-before 'check 'build-extensions
15265 (lambda _
15266 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
15267 (native-inputs
15268 (list pkg-config
15269 python-cython
15270 python-pytest
15271 python-setuptools
15272 python-wheel))
15273 (inputs
15274 (list pango))
15275 (home-page "https://manimpango.manim.community/")
15276 (synopsis "Bindings for Pango for using with Manim")
15277 (description
15278 "Python bindings for ManimPango which is a C binding for Pango,
15279using Cython.
15280
15281ManimPango is internally used in Manim to render (non-LaTeX) text.")
15282 (license license:expat)))
15283
15284(define-public python-cairocffi
15285 (package
15286 (name "python-cairocffi")
15287 (version "1.7.1")
15288 (source
15289 (origin
15290 ;; The PyPI archive does not include the documentation, so use Git.
15291 (method git-fetch)
15292 (uri (git-reference
15293 (url "https://github.com/Kozea/cairocffi")
15294 (commit (string-append "v" version))))
15295 (file-name (git-file-name name version))
15296 (sha256
15297 (base32
15298 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
15299 (build-system pyproject-build-system)
15300 (outputs '("out" "doc"))
15301 (inputs
15302 (list glib gtk+ gdk-pixbuf cairo))
15303 (native-inputs
15304 (list python-flit-core
15305 python-numpy
15306 python-pikepdf
15307 python-pytest
15308 python-sphinx
15309 python-sphinx-rtd-theme))
15310 (propagated-inputs
15311 (list python-xcffib)) ; used at run time
15312 (arguments
15313 (list
15314 #:phases
15315 #~(modify-phases %standard-phases
15316 (add-after 'unpack 'patch-paths
15317 (lambda* (#:key inputs #:allow-other-keys)
15318 (substitute* "cairocffi/__init__.py"
15319 ;; Hack the dynamic library loading mechanism.
15320 (("find_library\\(library_name\\)")
15321 "\"found\"")
15322 (("filenames = \\(library_filename,\\) \\+ filenames")
15323 "pass")
15324 (("libcairo.so.2")
15325 (search-input-file inputs "/lib/libcairo.so.2")))
15326 (substitute* "cairocffi/pixbuf.py"
15327 (("libgdk_pixbuf-2.0.so.0")
15328 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15329 (("libgobject-2.0.so.0")
15330 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15331 (("libglib-2.0.so.0")
15332 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15333 (("libgdk-3.so.0")
15334 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15335 (add-after 'install 'install-doc
15336 (lambda* (#:key inputs #:allow-other-keys)
15337 (let* ((data (string-append #$output:doc "/share"))
15338 (doc (string-append data "/doc/" #$name "-" #$version))
15339 (html (string-append doc "/html")))
15340 (setenv "LD_LIBRARY_PATH"
15341 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15342 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15343 (setenv "LANG" "en_US.UTF-8")
15344 (mkdir-p html)
15345 (for-each (lambda (file)
15346 (copy-file (string-append "." file)
15347 (string-append doc file)))
15348 '("/README.rst" "/NEWS.rst"))
15349 (system* "python" "setup.py" "build_sphinx")
15350 (copy-recursively "docs/_build/html" html)))))))
15351 (home-page "https://github.com/Kozea/cairocffi")
15352 (synopsis "Python bindings and object-oriented API for Cairo")
15353 (description
15354 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15355Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15356graphics library with support for multiple backends including image buffers,
15357PNG, PostScript, PDF, and SVG file output.")
15358 (license license:bsd-3)))
15359
15360(define-public python-decorator
15361 (package
15362 (name "python-decorator")
15363 (version "5.2.1")
15364 (source
15365 (origin
15366 (method url-fetch)
15367 (uri (pypi-uri "decorator" version))
15368 (sha256
15369 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15370 (build-system pyproject-build-system)
15371 (arguments
15372 (list #:test-backend #~'custom
15373 #:test-flags #~(list "tests/test.py")))
15374 (native-inputs
15375 (list python-setuptools))
15376 (home-page "https://pypi.org/project/decorator/")
15377 (synopsis "Python module to simplify usage of decorators")
15378 (description
15379 "The aim of the decorator module is to simplify the usage of decorators
15380for the average programmer, and to popularize decorators usage giving examples
15381of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15382etc. The core of this module is a decorator factory.")
15383 (license license:expat)))
15384
15385(define-public python-drmaa
15386 (package
15387 (name "python-drmaa")
15388 (version "0.7.7")
15389 (source
15390 (origin
15391 (method url-fetch)
15392 (uri (pypi-uri "drmaa" version))
15393 (sha256
15394 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15395 (build-system pyproject-build-system)
15396 ;; The test suite requires libdrmaa which is provided by the cluster
15397 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15398 ;; should be set to the path of the libdrmaa library.
15399 (arguments
15400 (list
15401 #:tests? #f
15402 #:phases
15403 #~(modify-phases %standard-phases
15404 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15405 ;; is not configured.
15406 (delete 'sanity-check))))
15407 (native-inputs (list python-setuptools))
15408 (home-page "https://pypi.org/project/drmaa/")
15409 (synopsis "Python bindings for the DRMAA library")
15410 (description
15411 "A Python package for Distributed Resource Management (DRM) job
15412submission and control. This package is an implementation of the DRMAA 1.0
15413Python language binding specification.")
15414 (license license:bsd-3)))
15415
15416(define-public python-grako
15417 (package
15418 (name "python-grako")
15419 (version "3.99.9")
15420 (source
15421 (origin
15422 (method url-fetch)
15423 (uri (pypi-uri "grako" version ".zip"))
15424 (sha256
15425 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15426 (snippet
15427 #~(begin (use-modules (guix build utils))
15428 (substitute* "grako/grammars.py"
15429 (("from collections import defaultdict, Mapping")
15430 (string-append "from collections import defaultdict\n"
15431 "from collections.abc import Mapping")))
15432 (substitute* '("grako/util.py"
15433 "grako/walkers.py")
15434 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15435 (build-system pyproject-build-system)
15436 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15437 (arguments (list #:tests? #f))
15438 (native-inputs (list unzip python-pytest python-setuptools))
15439 (home-page "https://pypi.org/project/grako")
15440 (synopsis "EBNF parser generator")
15441 (description
15442 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15443memoizing PEG/Packrat parser in Python.")
15444 (license license:bsd-3)))
15445
15446(define-public python-grandalf
15447 (package
15448 (name "python-grandalf")
15449 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15450 (version "0.8")
15451 (source
15452 (origin
15453 (method git-fetch)
15454 (uri (git-reference
15455 (url "https://github.com/bdcht/grandalf")
15456 (commit (string-append "v" version))))
15457 (file-name (git-file-name name version))
15458 (sha256
15459 (base32 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))
15460 (patches
15461 (list
15462 (origin
15463 (method url-fetch)
15464 (uri
15465 (string-append "https://github.com/bdcht/grandalf/commit/"
15466 "e61df12f00124b615a220cfcd58dd6f89d226264.patch"))
15467 (sha256
15468 (base32 "1p0315flsg4frpadcnn7fh41y5k3cdz4h722v6ri88a3s6hcpd36")))))))
15469 (build-system pyproject-build-system)
15470 (arguments
15471 (list
15472 #:phases
15473 #~(modify-phases %standard-phases
15474 (add-before 'build 'patch-requirements
15475 (lambda _
15476 (substitute* "setup.py"
15477 (("install_requires=\\['pyparsing'],") "")))))))
15478 (native-inputs
15479 (list python-setuptools python-pytest))
15480 (propagated-inputs
15481 (list python-numpy python-ply))
15482 (home-page "https://github.com/bdcht/grandalf")
15483 (synopsis "Graph and drawing algorithms framework")
15484 (description
15485 "Grandalf is a Python package made for experimentations with graphs
15486drawing algorithms. It is written in pure Python, and currently implements
15487two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15488minimization approach. While not as fast or featured as graphviz or other
15489libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15490than thousands of nodes, while keeping the source code simple enough to tweak
15491and hack any part of it for experimental purpose. With a total of about 1500
15492lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15493in less than 600 lines. The energy minimization approach is comprised of only
15494250 lines!
15495
15496Grandalf does only 2 not-so-simple things:
15497@itemize
15498@item computing the nodes (x,y) coordinates (based on provided nodes
15499dimensions, and a chosen layout)
15500@item routing the edges with lines or nurbs
15501@end itemize
15502
15503It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15504will help you find where to draw things like nodes and edges, but it’s up to
15505you to actually draw things with your favorite toolkit.")
15506 ;; The user can choose either license.
15507 (license (list license:gpl2 license:epl1.0))))
15508
15509(define-public python-gridmap
15510 ;; XXX: Project is unmaintained since 2020-08-24, see:
15511 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15512 (package
15513 (name "python-gridmap")
15514 (version "0.15.0")
15515 (source
15516 (origin
15517 (method git-fetch)
15518 (uri (git-reference
15519 (url "https://github.com/pygridtools/gridmap")
15520 (commit (string-append "v" version))))
15521 (file-name (git-file-name name version))
15522 (sha256
15523 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15524 (build-system pyproject-build-system)
15525 (arguments
15526 (list #:tests? #f ;XXX: freezes or timeout
15527 #:test-backend #~'nose))
15528 (native-inputs
15529 (list ;; python-pynose
15530 python-setuptools))
15531 (propagated-inputs
15532 (list python-cherrypy
15533 python-cloudpickle
15534 python-psutil
15535 python-drmaa
15536 python-pyzmq))
15537 (home-page "https://github.com/pygridtools/gridmap")
15538 (synopsis "Create jobs on a cluster directly from Python")
15539 (description
15540 "Gridmap is a Python package to allow you to easily create jobs on the
15541cluster directly from Python. You can directly map Python functions onto the
15542cluster without needing to write any wrapper code yourself.")
15543 (license license:gpl3+)))
15544
15545(define-public python-honcho
15546 (package
15547 (name "python-honcho")
15548 (version "2.0.0")
15549 (source
15550 (origin
15551 (method git-fetch)
15552 (uri (git-reference
15553 (url "https://github.com/nickstenning/honcho")
15554 (commit (string-append "v" version))))
15555 (file-name (git-file-name name version))
15556 (sha256
15557 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15558 (build-system pyproject-build-system)
15559 (arguments
15560 ;; Tests below fail with the error
15561 ;; ValueError: The 'honcho.export.xxx' package was not installed
15562 ;; in a way that PackageLoader understands.
15563 ;; Probably safe because it's testing for different init systems.
15564 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15565 "--ignore" "tests/test_export_runit.py"
15566 "--ignore" "tests/test_export_supervisord.py"
15567 "--ignore" "tests/test_export_systemd.py"
15568 "--ignore" "tests/test_export_upstart.py")))
15569 (native-inputs
15570 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15571 (propagated-inputs
15572 (list python-colorama))
15573 (home-page "https://github.com/nickstenning/honcho")
15574 (synopsis "Manage Procfile-based applications")
15575 (description
15576 "A Procfile is a file which describes how to run an application
15577consisting of several processes. honcho starts all listed processes.
15578The output of all running processes is collected by honcho and
15579displayed.")
15580 (license license:expat)))
15581
15582(define-public python-hsluv
15583 (package
15584 (name "python-hsluv")
15585 (version "5.0.4")
15586 (source
15587 (origin
15588 (method url-fetch)
15589 (uri (pypi-uri "hsluv" version))
15590 (sha256
15591 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15592 (build-system pyproject-build-system)
15593 (native-inputs
15594 (list python-pytest python-setuptools))
15595 (home-page "https://www.hsluv.org")
15596 (synopsis "Human-friendly HSL colour space implemented in Python")
15597 (description
15598 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15599@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15600component that allows you to span all the available chroma as a neat
15601percentage.")
15602 (license license:expat)))
15603
15604(define-public python-pebble
15605 (package
15606 (name "python-pebble")
15607 (version "5.1.3")
15608 (source
15609 (origin
15610 (method git-fetch)
15611 (uri (git-reference
15612 (url "https://github.com/noxdafox/pebble")
15613 (commit version)))
15614 (file-name (git-file-name name version))
15615 (sha256
15616 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15617 (build-system pyproject-build-system)
15618 (native-inputs (list python-pytest python-setuptools))
15619 (home-page "https://github.com/noxdafox/pebble")
15620 (synopsis "Threading and multiprocessing for Python")
15621 (description
15622 "Pebble aims to help manage threads and processes in an easier way. It
15623wraps Python's standard library threading and multiprocessing objects.")
15624 (license license:lgpl3+)))
15625
15626(define-public python-pexpect
15627 (package
15628 (name "python-pexpect")
15629 (version "4.9.0")
15630 (source
15631 (origin
15632 (method url-fetch)
15633 (uri (pypi-uri "pexpect" version))
15634 (sha256
15635 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15636 (build-system pyproject-build-system)
15637 (arguments
15638 (list
15639 #:test-flags
15640 ;; The socket tests can hang (most often, but not only, when run in
15641 ;; parallel, see: <https://github.com/pexpect/pexpect/issues/809>)
15642 #~(list "--ignore=tests/test_socket.py"
15643 "--ignore=tests/test_socket_fd.py"
15644 "-k" (string-join
15645 (list
15646 ;; Disable failing test, see
15647 ;; <https://github.com/pexpect/pexpect/issues/568>.
15648 "not test_bash"
15649 ;; Fails with attempt to find OpenSSL.
15650 "test_large_stdout_stream"
15651 ;; Tests fail while trying to find
15652 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15653 "test_run_uses_env"
15654 "test_run_uses_env_path"
15655 "test_run_uses_env_path_over_path"
15656 "test_spawn_uses_env"
15657 ;; Fails with assertion error: assert 0 == 500
15658 "test_before_across_chunks"
15659 ;; Bash is enough for tests.
15660 "test_zsh")
15661 " and not "))
15662 #:phases
15663 #~(modify-phases %standard-phases
15664 (add-before 'check 'prepare-tests
15665 (lambda _
15666 (substitute* (find-files "tests")
15667 (("/bin/bash") (which "bash"))
15668 (("/bin/echo") (which "echo"))
15669 (("/bin/ls") (which "ls"))
15670 (("/bin/which") (which "which"))
15671 ;; Many tests try to use the /bin directory which is not
15672 ;; present in the build environment. Use one that's non-empty
15673 ;; and unlikely to change.
15674 (("/bin'") "/dev'")))))))
15675 (native-inputs
15676 (list bash ;full Bash for 'test_replwrap.py'
15677 man-db
15678 python-pytest
15679 python-setuptools
15680 which))
15681 (propagated-inputs
15682 (list python-ptyprocess))
15683 (home-page "https://pexpect.readthedocs.org/")
15684 (synopsis "Controlling interactive console applications")
15685 (description
15686 "Pexpect is a pure Python module for spawning child applications;
15687controlling them; and responding to expected patterns in their output. Pexpect
15688works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15689application and control it as if a human were typing commands.")
15690 (license license:isc)))
15691
15692(define-public python-sexpdata
15693 (package
15694 (name "python-sexpdata")
15695 (version "1.0.2")
15696 (source
15697 (origin
15698 (method url-fetch)
15699 (uri (pypi-uri "sexpdata" version))
15700 (sha256
15701 (base32
15702 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15703 (build-system pyproject-build-system)
15704 (arguments
15705 (list #:tests? #f)) ; no tests
15706 (native-inputs (list python-setuptools python-wheel))
15707 (home-page "https://github.com/jd-boyd/sexpdata")
15708 (synopsis "S-expression parser for Python")
15709 (description
15710 "Sexpdata is an S-expression parser/serializer. It has load and dump
15711functions like pickle, json or PyYAML module.")
15712 (license license:bsd-3)))
15713
15714(define-public python-pathable
15715 (package
15716 (name "python-pathable")
15717 (version "0.4.3")
15718 (source
15719 (origin
15720 (method url-fetch)
15721 (uri (pypi-uri "pathable" version))
15722 (sha256
15723 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15724 (build-system pyproject-build-system)
15725 (arguments (list #:tests? #false)) ;there are none
15726 (native-inputs (list python-poetry-core))
15727 (home-page "https://github.com/p1c2u/pathable")
15728 (synopsis "Object-oriented paths")
15729 (description "With this package you can traverse resources like paths and
15730access resources on demand with separate accessor layer.")
15731 (license license:asl2.0)))
15732
15733(define-public python-importlib-resources
15734 (package
15735 (name "python-importlib-resources")
15736 (version "6.5.2")
15737 (source (origin
15738 (method url-fetch)
15739 (uri (pypi-uri "importlib_resources" version))
15740 (sha256
15741 (base32
15742 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15743 (build-system pyproject-build-system)
15744 (native-inputs
15745 (list python-jaraco-test
15746 python-jaraco-collections
15747 python-pytest
15748 python-setuptools
15749 python-setuptools-scm
15750 python-zipp))
15751 (home-page "https://importlib-resources.readthedocs.io/")
15752 (synopsis "Read resources from Python packages")
15753 (description
15754 "@code{importlib_resources} is a backport of Python 3's standard library
15755@code{importlib.resources} module for Python 2.7, and Python 3.")
15756 (license license:asl2.0)))
15757
15758(define-public python-importlib-metadata
15759 (package
15760 (name "python-importlib-metadata")
15761 (version "8.7.0")
15762 (source
15763 (origin
15764 (method url-fetch)
15765 (uri (pypi-uri "importlib_metadata" version))
15766 (sha256
15767 (base32
15768 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15769 (build-system pyproject-build-system)
15770 (arguments
15771 (list #:test-flags #~(list "tests")))
15772 (native-inputs
15773 (list python-jaraco-test
15774 python-packaging-bootstrap
15775 python-pyfakefs
15776 python-pytest-bootstrap
15777 python-setuptools
15778 python-setuptools-scm))
15779 (propagated-inputs
15780 (list python-zipp))
15781 (home-page "https://importlib-metadata.readthedocs.io/")
15782 (synopsis "Read metadata from Python packages")
15783 (description
15784 "@code{importlib_metadata} is a library which provides an API for
15785accessing an installed Python package's metadata, such as its entry points or
15786its top-level name. This functionality intends to replace most uses of
15787@code{pkg_resources} entry point API and metadata API. Along with
15788@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15789need to use the older and less efficient @code{pkg_resources} package.")
15790 (license license:asl2.0)))
15791
15792(define-public python-importlib-metadata-argparse-version
15793 (package
15794 (name "python-importlib-metadata-argparse-version")
15795 (version "2.0.1")
15796 (home-page
15797 "https://github.com/mondeja/importlib-metadata-argparse-version")
15798 (source
15799 (origin
15800 (method git-fetch)
15801 (uri (git-reference
15802 (url home-page)
15803 (commit (string-append "v" version))))
15804 (file-name (git-file-name name version))
15805 (sha256
15806 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15807 (build-system pyproject-build-system)
15808 (native-inputs (list python-pytest python-hatchling))
15809 (synopsis "Get Python package version more efficiently")
15810 (description
15811 "This package provides an @code{argparse} action to define CLI version
15812with a delayed call to @code{importlib.metadata}, avoiding to load this module
15813when not needed.")
15814 (license license:bsd-3)))
15815
15816(define-public python-importmagic
15817 (package
15818 (name "python-importmagic")
15819 (version "0.1.7")
15820 (source
15821 (origin
15822 (method git-fetch)
15823 (uri (git-reference
15824 (url "https://github.com/alecthomas/importmagic")
15825 (commit version)))
15826 (file-name (git-file-name name version))
15827 (sha256
15828 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15829 (build-system pyproject-build-system)
15830 (native-inputs (list python-pytest python-setuptools))
15831 (home-page "https://github.com/alecthomas/importmagic")
15832 (synopsis "Library for adding, removing and managing Python imports")
15833 (description
15834 "Importmagic is a Python library for automatically managing imports by
15835finding unresolved symbols in Python code and their corresponding imports.")
15836 (license license:bsd-3)))
15837
15838(define-public python-inotify-simple
15839 (package
15840 (name "python-inotify-simple")
15841 (version "1.3.5")
15842 (source
15843 (origin
15844 (method git-fetch)
15845 (uri (git-reference
15846 (url "https://github.com/chrisjbillington/inotify_simple")
15847 (commit version)))
15848 (file-name (git-file-name name version))
15849 (sha256
15850 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15851 (build-system pyproject-build-system)
15852 (arguments
15853 (list
15854 #:test-backend #~'custom
15855 #:test-flags #~(list "example.py")))
15856 (native-inputs (list python-setuptools))
15857 (home-page "https://github.com/chrisjbillington/inotify_simple")
15858 (synopsis "Simple wrapper around inotify library")
15859 (description
15860 "@code{inotify-simple} is a simple wrapper around inotify library.")
15861 (license license:bsd-3)))
15862
15863(define-public python-interface-meta
15864 (package
15865 (name "python-interface-meta")
15866 (version "1.3.0")
15867 (source
15868 (origin
15869 (method url-fetch)
15870 (uri (pypi-uri "interface_meta" version))
15871 (sha256
15872 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15873 (build-system pyproject-build-system)
15874 (native-inputs (list python-poetry-core python-pytest))
15875 (home-page "https://github.com/matthewwardrop/interface_meta")
15876 (synopsis
15877 "API for enforced method signatures and consistent documentation")
15878 (description
15879 "This package provides a convenient way to expose an extensible API with
15880enforced method signatures and consistent documentation.")
15881 (license license:expat)))
15882
15883(define-public python-jaraco-itertools
15884 (package
15885 (name "python-jaraco-itertools")
15886 (version "6.4.3")
15887 (source
15888 (origin
15889 (method git-fetch)
15890 (uri (git-reference
15891 (url "https://github.com/jaraco/jaraco.itertools")
15892 (commit (string-append "v" version))))
15893 (file-name (git-file-name name version))
15894 (sha256
15895 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15896 (build-system pyproject-build-system)
15897 (arguments
15898 (list #:tests? #f)) ;no tests
15899 (native-inputs
15900 (list python-setuptools
15901 python-setuptools-scm))
15902 (propagated-inputs
15903 (list python-inflect
15904 python-more-itertools))
15905 (home-page "https://github.com/jaraco/jaraco.itertools")
15906 (synopsis "Tools for working with iterables")
15907 (description
15908 "This package provides an utility collection based on no longer
15909maintained @code{jaraco.util}.")
15910 (license license:expat)))
15911
15912(define-public python-jaraco-logging
15913 (package
15914 (name "python-jaraco-logging")
15915 (version "3.4.0")
15916 (source
15917 (origin
15918 (method git-fetch)
15919 (uri (git-reference
15920 (url "https://github.com/jaraco/jaraco.logging")
15921 (commit (string-append "v" version))))
15922 (file-name (git-file-name name version))
15923 (sha256
15924 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15925 (build-system pyproject-build-system)
15926 (native-inputs
15927 (list python-pytest
15928 python-setuptools
15929 python-setuptools-scm))
15930 (propagated-inputs
15931 (list python-tempora))
15932 (home-page "https://github.com/jaraco/jaraco.logging")
15933 (synopsis "Support for Python's logging facility")
15934 (description
15935 "This package allows soliciting log-level info from command-line
15936parameters.")
15937 (license license:expat)))
15938
15939(define-public python-jaraco-packaging
15940 (package
15941 (name "python-jaraco-packaging")
15942 (version "9.4.0") ;the latest version compatible with [email protected]
15943 (source
15944 (origin
15945 (method url-fetch)
15946 (uri (pypi-uri "jaraco.packaging" version))
15947 (sha256
15948 (base32
15949 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15950 (build-system pyproject-build-system)
15951 (arguments
15952 (list #:tests? #f)) ;no tests in PyPI archive
15953 (native-inputs
15954 (list python-setuptools
15955 python-setuptools-scm))
15956 (propagated-inputs
15957 (list python-pypa-build
15958 python-virtualenv
15959 python-domdf-python-tools
15960 python-jaraco-context
15961 python-sphinx))
15962 (home-page "https://github.com/jaraco/jaraco.packaging")
15963 (synopsis "Tools to supplement packaging Python releases")
15964 (description
15965 "This package provides various tools to supplement packaging Python
15966releases.")
15967 (license license:expat)))
15968
15969(define-public python-jaraco-vcs
15970 (package
15971 (name "python-jaraco-vcs")
15972 (version "2.4.1")
15973 (source
15974 (origin
15975 (method git-fetch)
15976 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15977 (commit (string-append "v" version))))
15978 (file-name (git-file-name name version))
15979 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15980 (build-system pyproject-build-system)
15981 (arguments
15982 (list
15983 #:test-flags
15984 ;; Ignore doctests.
15985 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15986 (propagated-inputs (list python-jaraco-classes
15987 python-jaraco-path
15988 python-jaraco-versioning
15989 python-more-itertools
15990 python-packaging
15991 python-dateutil
15992 python-tempora))
15993 (native-inputs (list python-pygments
15994 python-pytest
15995 python-pytest-home
15996 python-setuptools
15997 python-setuptools-scm))
15998 (home-page "https://github.com/jaraco/jaraco.vcs")
15999 (synopsis "Utilities for working with VCS repositories")
16000 (description
16001 "This package provides facilities for working with VCS repositories in
16002Python.")
16003 (license license:expat)))
16004
16005(define-public python-jaraco-versioning
16006 (package
16007 (name "python-jaraco-versioning")
16008 (version "1.1.0")
16009 (source
16010 (origin
16011 (method git-fetch)
16012 (uri (git-reference
16013 (url "https://github.com/jaraco/jaraco.versioning")
16014 (commit (string-append "v" version))))
16015 (file-name (git-file-name name version))
16016 (sha256
16017 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
16018 (build-system pyproject-build-system)
16019 (arguments
16020 (list
16021 #:phases
16022 #~(modify-phases %standard-phases
16023 ;; doctest started failing with python-packaging 26.2
16024 (add-after 'unpack 'fix-doc-test
16025 (lambda _
16026 (substitute* "jaraco/versioning.py"
16027 (("<Version") "<SummableVersion")))))))
16028 (propagated-inputs (list python-packaging))
16029 (native-inputs
16030 (list python-pytest python-setuptools python-setuptools-scm))
16031 (home-page "https://github.com/jaraco/jaraco.versioning")
16032 (synopsis "Version manipulation utils")
16033 (description
16034 "This package builds upon @code{python-packaging} to provide more
16035sophisticated version manipulation.")
16036 (license license:expat)))
16037
16038(define-public python-simplegeneric
16039 (package
16040 (name "python-simplegeneric")
16041 (version "0.8.1")
16042 (source
16043 (origin
16044 (method url-fetch)
16045 (uri (pypi-uri "simplegeneric" version ".zip"))
16046 (sha256
16047 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
16048 (build-system pyproject-build-system)
16049 (arguments
16050 (list
16051 #:test-backend #~'custom
16052 #:test-flags #~(list "-m" "simplegeneric")))
16053 (native-inputs
16054 (list unzip python-setuptools))
16055 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
16056 (synopsis "Python module for simple generic functions")
16057 (description
16058 "The simplegeneric module lets you define simple single-dispatch generic
16059functions, akin to Python’s built-in generic functions like @code{len()},
16060@code{iter()} and so on. However, instead of using specially-named methods,
16061these generic functions use simple lookup tables, akin to those used by
16062e.g. @code{pickle.dump()} and other generic functions found in the Python
16063standard library.")
16064 (license license:zpl2.1)))
16065
16066(define-public python-ipython-genutils
16067 ;; TODO: This package is retired, check if can be removed, see description.
16068 (package
16069 (name "python-ipython-genutils")
16070 (version "0.1.0")
16071 (source
16072 (origin
16073 (method url-fetch)
16074 (uri (pypi-uri "ipython_genutils" version))
16075 (sha256
16076 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
16077 (build-system pyproject-build-system)
16078 (arguments `(#:tests? #f)) ; no tests
16079 (native-inputs
16080 (list python-setuptools))
16081 (home-page "https://ipython.org")
16082 (synopsis "Vestigial utilities from IPython")
16083 (description
16084 "This package provides retired utilities from IPython. No packages
16085outside IPython/Jupyter should depend on it.
16086
16087This package shouldn't exist. It contains some common utilities shared by
16088Jupyter and IPython projects during The Big Split. As soon as possible, those
16089packages will remove their dependency on this, and this package will go
16090away.")
16091 (license license:bsd-3)))
16092
16093;;; Variant used to break a cycle with python-ipykernel.
16094(define-public python-ipyparallel-bootstrap
16095 (hidden-package
16096 (package
16097 (name "python-ipyparallel-bootstrap")
16098 (version "9.0.1")
16099 (source
16100 (origin
16101 (method url-fetch)
16102 (uri (pypi-uri "ipyparallel" version))
16103 (sha256
16104 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
16105 (build-system pyproject-build-system)
16106 (arguments
16107 (list
16108 #:tests? #f
16109 #:phases #~(modify-phases %standard-phases
16110 ;; The python-ipykernel is normally propagated but is
16111 ;; removed from this package to break the cycle.
16112 (delete 'sanity-check))))
16113 (native-inputs
16114 (list python-hatchling))
16115 (propagated-inputs
16116 (list python-dateutil
16117 python-decorator
16118 python-entrypoints
16119 python-ipython
16120 ;; python-ipykernel is omitted here to break a cycle.
16121 python-jupyter-client-bootstrap
16122 python-psutil
16123 python-pyzmq
16124 python-tornado
16125 python-tqdm
16126 python-traitlets))
16127 (home-page "https://ipython.org/")
16128 (synopsis "Interactive Parallel Computing with IPython")
16129 (description
16130 "@code{ipyparallel} is a Python package and collection of CLI scripts
16131for controlling clusters for Jupyter. @code{ipyparallel} contains the
16132following CLI scripts:
16133@enumerate
16134@item ipcluster - start/stop a cluster
16135@item ipcontroller - start a scheduler
16136@item ipengine - start an engine
16137@end enumerate")
16138 (license license:bsd-3))))
16139
16140(define-public python-ipyparallel
16141 (package
16142 (inherit python-ipyparallel-bootstrap)
16143 (name "python-ipyparallel")
16144 (arguments
16145 (list
16146 #:test-flags
16147 ;; Disable warning because DeprecationWarnings make tests fail.
16148 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
16149 (native-inputs
16150 (modify-inputs native-inputs
16151 (append python-ipython
16152 python-pytest
16153 python-pytest-asyncio
16154 python-pytest-tornado
16155 python-testpath)))
16156 (propagated-inputs
16157 (modify-inputs propagated-inputs
16158 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
16159 (append python-ipykernel)))
16160 (properties (alist-delete 'hidden? (package-properties
16161 python-ipyparallel-bootstrap)))))
16162
16163;; TODO: Package python-jupysql which is the maintained fork of this one.
16164(define-public python-ipython-sql
16165 (package
16166 (name "python-ipython-sql")
16167 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
16168 (revision . "0")))
16169 (version (git-version "0.5.0"
16170 (assoc-ref properties 'revision)
16171 (assoc-ref properties 'commit)))
16172 (source
16173 (origin
16174 (method git-fetch)
16175 (uri (git-reference
16176 (url "https://github.com/catherinedevlin/ipython-sql")
16177 (commit (assoc-ref properties 'commit))))
16178 (file-name (git-file-name name version))
16179 (sha256
16180 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
16181 (build-system pyproject-build-system)
16182 (arguments
16183 (list #:tests? #f ;Fail because of prettytable.
16184 #:phases
16185 #~(modify-phases %standard-phases
16186 (replace 'check
16187 (lambda* (#:key tests? #:allow-other-keys)
16188 (setenv "HOME" (getcwd))
16189 (if tests?
16190 (invoke "ipython" "-c"
16191 "import pytest; pytest.main(['.'])")
16192 (format #t "test suite not run.~%")))))))
16193 (native-inputs (list python-pytest python-setuptools))
16194 (propagated-inputs
16195 (list python-ipython
16196 python-ipython-genutils
16197 python-prettytable
16198 python-sqlalchemy-2
16199 python-sqlparse))
16200 (home-page "https://github.com/catherinedevlin/ipython-sql")
16201 (synopsis "RDBMS access via IPython")
16202 (description "This library connects to a database, using SQLAlchemy URL
16203connect strings, then issue SQL commands within IPython or IPython Notebook.")
16204 (license license:expat)))
16205
16206(define-public python-optree
16207 (package
16208 (name "python-optree")
16209 (version "0.14.0")
16210 (source
16211 (origin
16212 (method git-fetch)
16213 (uri (git-reference
16214 (url "https://github.com/metaopt/optree")
16215 (commit (string-append "v" version))))
16216 (file-name (git-file-name name version))
16217 (sha256
16218 (base32
16219 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
16220 (build-system pyproject-build-system)
16221 (arguments
16222 (list
16223 #:test-flags
16224 ;; These tests fails due to a circular import
16225 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
16226 " and not test_import_no_warnings"))))
16227 (propagated-inputs (list python-typing-extensions))
16228 (native-inputs
16229 (list python-pytest
16230 python-setuptools
16231 python-wheel
16232 cmake-minimal
16233 pybind11-2))
16234 (home-page "https://github.com/metaopt/optree")
16235 (synopsis "Optimized PyTree Utilities")
16236 (description "This package contains operations on PyTrees (a tree made of
16237container data structures in Python).")
16238 (license license:asl2.0)))
16239
16240(define-public python-backcall
16241 (package
16242 (name "python-backcall")
16243 (version "0.2.0")
16244 (source
16245 (origin
16246 (method git-fetch)
16247 (uri (git-reference
16248 (url "https://github.com/takluyver/backcall/")
16249 (commit version)))
16250 (file-name (git-file-name name version))
16251 (sha256
16252 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
16253 (build-system pyproject-build-system)
16254 (native-inputs (list python-flit-core python-pytest))
16255 (home-page "https://github.com/takluyver/backcall/")
16256 (synopsis "Specifications for callback functions passed in to an API")
16257 (description
16258 "If your code lets other people supply callback functions, it's important
16259to specify the function signature you expect, and check that functions support
16260that. Adding extra parameters later would break other peoples code unless
16261you're careful. The @code{backcall} package provides a way of specifying the
16262callback signature using a prototype function.")
16263 (license license:bsd-3)))
16264
16265(define-public python-pubmed-parser
16266 (package
16267 (name "python-pubmed-parser")
16268 (version "0.5.1")
16269 (source (origin
16270 (method git-fetch)
16271 (uri (git-reference
16272 (url "https://github.com/titipata/pubmed_parser")
16273 (commit version)))
16274 (file-name (git-file-name name version))
16275 (sha256
16276 (base32
16277 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
16278 (build-system pyproject-build-system)
16279 (arguments (list #:tests? #f)) ;; Tests require internet
16280 (native-inputs
16281 (list python-setuptools))
16282 (propagated-inputs
16283 (list python-lxml
16284 python-numpy
16285 python-requests
16286 python-six ;hard dependency
16287 python-unidecode))
16288 (home-page "https://titipata.github.io/pubmed_parser/")
16289 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16290 (description
16291 "This package provides a Python parser for Pubmed Open-Access Subset and
16292MEDLINE XML repository.")
16293 (license license:expat)))
16294
16295(define-public python-pure-eval
16296 (package
16297 (name "python-pure-eval")
16298 (version "0.2.3")
16299 (source
16300 (origin
16301 (method url-fetch)
16302 (uri (pypi-uri "pure_eval" version))
16303 (sha256
16304 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16305 (build-system pyproject-build-system)
16306 (native-inputs
16307 (list python-pytest
16308 python-setuptools
16309 python-setuptools-scm
16310 python-wheel))
16311 (home-page "https://github.com/alexmojaki/pure_eval")
16312 (synopsis "Python library to evaluate abstract syntax tree nodes")
16313 (description "The @code{pure_eval} Python library can safely evaluate
16314abstract syntax tree (AST) nodes without side effects.")
16315 (license license:expat)))
16316
16317(define-public python-puremagic
16318 (package
16319 (name "python-puremagic")
16320 (version "1.28")
16321 (source
16322 (origin
16323 (method git-fetch) ;no tests in PyPI archive
16324 (uri (git-reference
16325 (url "https://github.com/cdgriffith/puremagic")
16326 (commit version)))
16327 (file-name (git-file-name name version))
16328 (sha256
16329 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16330 (build-system pyproject-build-system)
16331 (native-inputs
16332 (list python-pytest python-setuptools python-wheel))
16333 (home-page "https://github.com/cdgriffith/puremagic")
16334 (synopsis "Pure Python implementation of magic file detection")
16335 (description
16336 "This package implements a functionality that will identify a file based
16337off it's magic numbers.")
16338 (license license:expat)))
16339
16340(define-public python-ast-decompiler
16341 (package
16342 (name "python-ast-decompiler")
16343 (version "0.7.0")
16344 (source
16345 (origin
16346 (method url-fetch)
16347 (uri (pypi-uri "ast_decompiler" version))
16348 (sha256
16349 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16350 ;; We need to manually create an __init__.py file under the tests/
16351 ;; directory, since it is not included in the distributed
16352 ;; version. (See:
16353 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16354 (modules '((guix build utils)))
16355 (snippet '(call-with-output-file "tests/__init__.py"
16356 (const #t)))))
16357 (build-system pyproject-build-system)
16358 (native-inputs (list python-flit-core python-pytest))
16359 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16360 (synopsis
16361 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16362 (description
16363 "This library provides functionality to decompile @acronym{AST, Abstract
16364Syntax Tree} objects, as generated by the standard library @code{ast} module,
16365to Python code.")
16366 (license license:asl2.0)))
16367
16368(define-public python-asttokens
16369 (package
16370 (name "python-asttokens")
16371 (version "3.0.1")
16372 (source
16373 (origin
16374 (method git-fetch)
16375 (uri (git-reference
16376 (url "https://github.com/gristlabs/asttokens")
16377 (commit (string-append "v" version))))
16378 (file-name (git-file-name name version))
16379 (sha256 (base32 "1qqi7dygcv58czrsafc4gf41prfb6shd0crx33kd9wypk0v29afn"))))
16380 (build-system pyproject-build-system)
16381 (native-inputs
16382 (list python-astroid
16383 python-pytest
16384 python-setuptools
16385 python-setuptools-scm))
16386 (home-page "https://github.com/gristlabs/asttokens")
16387 (synopsis "Python library to annotate abstract syntax trees")
16388 (description "The @code{asttokens} module annotates Python abstract syntax
16389trees (ASTs) with the positions of tokens and text in the source code that
16390generated them. It makes it possible for tools that work with logical AST
16391nodes to find the particular text that resulted in those nodes, for example
16392for automated refactoring or highlighting.")
16393 (license license:asl2.0)))
16394
16395(define-public python-littleutils
16396 (package
16397 (name "python-littleutils")
16398 (version "0.2.4")
16399 (source
16400 (origin
16401 (method url-fetch)
16402 (uri (pypi-uri "littleutils" version))
16403 (sha256
16404 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16405 (build-system pyproject-build-system)
16406 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16407 (native-inputs
16408 (list python-setuptools
16409 python-setuptools-scm
16410 python-wheel))
16411 (home-page "https://github.com/alexmojaki/littleutils")
16412 (synopsis "Python utility function collection")
16413 (description "@code{littleutils} is a small collection of Python utility
16414functions, useful in the context of writing unit tests among other uses.")
16415 (license license:expat)))
16416
16417(define-public python-ipython
16418 (package
16419 (name "python-ipython")
16420 (version "9.8.0")
16421 (source
16422 (origin
16423 (method git-fetch)
16424 (uri (git-reference
16425 (url "https://github.com/ipython/ipython")
16426 (commit version)))
16427 (file-name (git-file-name name version))
16428 (sha256
16429 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16430 (build-system pyproject-build-system)
16431 (arguments
16432 (list
16433 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16434 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16435 #:test-backend #~'custom
16436 ;; XXX: It's a workaround to fix the error with module import
16437 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16438 ;; <https://codeberg.org/guix/guix/issues/2108>.
16439 #:test-flags
16440 #~(list "-m" "pytest" "-vv"
16441 "-k" (string-join
16442 ;; These need git.
16443 (list "not test_json_getsysinfo"
16444 "IPython.utils.sysinfo.sys_info"
16445 ;; Failed: DID NOT RAISE
16446 "test_timeit_raise_on_interrupt"
16447 "test_script_raise_on_interrupt"
16448 "test_time_raise_on_interrupt")
16449 " and not "))
16450 #:phases
16451 #~(modify-phases %standard-phases
16452 (add-before 'check 'pre-check
16453 (lambda _
16454 (setenv "HOME" "/tmp"))))))
16455 (propagated-inputs
16456 (list python-decorator
16457 python-ipython-pygments-lexers
16458 python-jedi
16459 python-matplotlib-inline
16460 python-pexpect
16461 python-prompt-toolkit
16462 python-pygments
16463 python-stack-data
16464 python-traitlets
16465 python-typing-extensions))
16466 (native-inputs
16467 (list python-pytest
16468 python-pytest-asyncio
16469 python-setuptools
16470 python-testpath
16471 ;; [extra]
16472 ;; python-curio ;deprecated
16473 ;; python-ipykernel ;cycles
16474 ;; python-jupyter-ai ;not packaged
16475 python-matplotlib
16476 ;; python-nbclient ;cycles
16477 python-nbformat
16478 python-numpy
16479 python-pandas
16480 python-trio))
16481 (home-page "https://ipython.org")
16482 (synopsis "IPython is a tool for interactive computing in Python")
16483 (description
16484 "IPython provides a rich architecture for interactive computing with:
16485Powerful interactive shells, a browser-based notebook, support for interactive
16486data visualization, embeddable interpreters and tools for parallel
16487computing.")
16488 (properties '((cpe-name . "ipython")))
16489 (license license:bsd-3)))
16490
16491(define-public python-ipython-documentation
16492 (package
16493 (inherit python-ipython)
16494 (name "python-ipython-documentation")
16495 (version (package-version python-ipython))
16496 (arguments
16497 (list
16498 #:phases
16499 #~(modify-phases %standard-phases
16500 (add-after 'unpack 'set-pythonpath
16501 (lambda _
16502 ;; Ensure this fixed (via the
16503 ;; "python-ipython-documentation-chars.patch" patch) copy of
16504 ;; IPython gets used.
16505 (setenv "PYTHONPATH" (string-append (getcwd)))))
16506 (delete 'build)
16507 (delete 'check)
16508 (replace 'install
16509 (lambda* (#:key outputs #:allow-other-keys)
16510 (let* ((data (string-append #$output "/share"))
16511 (doc (string-append data "/doc/" #$name "-" #$version))
16512 (html (string-append doc "/html"))
16513 (info (string-append data "/info")))
16514 (invoke "make" "-C" "docs" "info" "html"
16515 (string-append "SPHINXOPTS=-j"
16516 (number->string (parallel-job-count))))
16517 (install-file "COPYING.rst" doc)
16518 (copy-recursively "examples" (string-append doc "/examples"))
16519 ;; Install HTML documentation.
16520 (copy-recursively "docs/build/html" html)
16521 ;; Likewise for the info manual.
16522 (install-file "docs/build/texinfo/ipython.info" info)
16523 (symlink (string-append html "/_images")
16524 (string-append info "/ipython-figures"))))))))
16525 (native-inputs
16526 (list graphviz
16527 python-docrepr
16528 python-ipykernel
16529 python-sphinx
16530 python-sphinx-rtd-theme
16531 python-sphinx-toml
16532 texinfo))))
16533
16534;; A bare minimal package, mainly to use in tests and reduce closure
16535;; size. Tests are left out in the main package to slim down native-inputs.
16536(define-public python-ipython-minimal
16537 (package/inherit python-ipython
16538 (name "python-ipython-minimal")
16539 (arguments
16540 (list #:tests? #f))
16541 (native-inputs
16542 (list python-setuptools))))
16543
16544(define-public python-ipython-pygments-lexers
16545 (package
16546 (name "python-ipython-pygments-lexers")
16547 (version "1.1.1")
16548 (source
16549 (origin
16550 (method git-fetch)
16551 (uri (git-reference
16552 (url "https://github.com/ipython/ipython-pygments-lexers/")
16553 (commit version)))
16554 (file-name (git-file-name name version))
16555 (sha256
16556 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16557 (build-system pyproject-build-system)
16558 (propagated-inputs (list python-pygments))
16559 (native-inputs (list python-flit-core python-pytest))
16560 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16561 (synopsis "Plugin for IPython code sessions")
16562 (description
16563 "This package defines a variety of Pygments lexers for highlighting IPython
16564code.")
16565 (license license:bsd-3)))
16566
16567(define-public python-pydbus
16568 (package
16569 (name "python-pydbus")
16570 (version "0.6.0")
16571 (source
16572 (origin
16573 (method url-fetch)
16574 (uri (pypi-uri "pydbus" version))
16575 (sha256
16576 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16577 (build-system pyproject-build-system)
16578 (arguments
16579 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16580 #:phases
16581 #~(modify-phases %standard-phases
16582 (add-after 'unpack 'fix-comparability-with-pygobject
16583 (lambda _
16584 (substitute* "pydbus/_inspect3.py"
16585 (("getargspec")
16586 "getfullargspec")))))))
16587 (native-inputs
16588 (list python-setuptools
16589 python-wheel))
16590 (propagated-inputs
16591 (list python-pygobject))
16592 (home-page "https://github.com/LEW21/pydbus")
16593 (synopsis "Pythonic D-Bus library")
16594 (description
16595 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16596Pydbus can be used to access remote objects and also for object publication.
16597It is based on PyGI, the Python GObject Introspection bindings, which is the
16598recommended way to use GLib from Python.")
16599 (license license:lgpl2.1+)))
16600
16601(define-public python-dbus-1.2
16602 (package
16603 (name "python-dbus")
16604 (version "1.2.18")
16605 (source
16606 (origin
16607 (method url-fetch)
16608 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16609 "dbus-python-" version ".tar.gz"))
16610 (sha256
16611 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16612 (build-system gnu-build-system)
16613 (native-inputs
16614 (list pkg-config
16615 python-setuptools))
16616 (inputs
16617 `(("python" ,python-wrapper)
16618 ("dbus-glib" ,dbus-glib)))
16619 (synopsis "Python bindings for D-bus")
16620 (description "python-dbus provides bindings for libdbus, the reference
16621implementation of D-Bus.")
16622 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16623 (license license:expat)))
16624
16625(define-public python-dasbus
16626 (package
16627 (name "python-dasbus")
16628 (version "1.7")
16629 (source
16630 (origin
16631 (method git-fetch)
16632 (uri (git-reference
16633 (url "https://github.com/dasbus-project/dasbus")
16634 (commit (string-append "v" version))))
16635 (file-name (git-file-name name version))
16636 (sha256
16637 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16638 (build-system pyproject-build-system)
16639 (arguments
16640 (list
16641 #:phases
16642 #~(modify-phases %standard-phases
16643 (replace 'check
16644 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16645 (when tests?
16646 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16647 (native-inputs
16648 (list dbus
16649 python-hatchling
16650 python-pytest
16651 python-setuptools))
16652 (propagated-inputs
16653 (list python-pygobject))
16654 (home-page "https://dasbus.readthedocs.io/")
16655 (synopsis "DBus library in Python")
16656 (description
16657 "This DBus library is written in Python, based on GLib and inspired by
16658@code{pydbus}.")
16659 (license license:lgpl2.1+)))
16660
16661(define-public python-notify2
16662 (package
16663 (name "python-notify2")
16664 (version "0.3.1")
16665 (source
16666 (origin
16667 (method url-fetch)
16668 (uri (pypi-uri "notify2" version))
16669 (sha256
16670 (base32
16671 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16672 (build-system pyproject-build-system)
16673 (arguments (list #:tests? #f)) ; tests depend on system state
16674 (native-inputs (list python-setuptools))
16675 (propagated-inputs (list python-dbus))
16676 (home-page "https://bitbucket.org/takluyver/pynotify2")
16677 (synopsis "Python interface to D-Bus notifications")
16678 (description
16679 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16680It is a reimplementation of pynotify in pure Python, and an alternative to
16681the GObject Introspection bindings to libnotify for non-GTK applications.")
16682 (license (list license:bsd-2
16683 license:lgpl2.1+))))
16684
16685;; beautifulsoup4 has a totally different namespace than 3.x,
16686;; and pypi seems to put it under its own name, so I guess we should too
16687(define-public python-beautifulsoup4
16688 (package
16689 (name "python-beautifulsoup4")
16690 (version "4.14.3")
16691 (source
16692 (origin
16693 (method url-fetch)
16694 (uri (pypi-uri "beautifulsoup4" version))
16695 (sha256
16696 (base32
16697 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16698 (build-system pyproject-build-system)
16699 (native-inputs
16700 (list python-hatchling
16701 python-pytest))
16702 (propagated-inputs
16703 (list python-soupsieve
16704 python-typing-extensions
16705 ;; [optional]
16706 python-cchardet
16707 python-chardet
16708 python-charset-normalizer
16709 python-html5lib
16710 python-lxml))
16711 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16712 (synopsis "Python screen-scraping library")
16713 (description
16714 "Beautiful Soup is a Python library designed for rapidly setting up
16715screen-scraping projects. It offers Pythonic idioms for navigating,
16716searching, and modifying a parse tree, providing a toolkit for
16717dissecting a document and extracting what you need. It automatically
16718converts incoming documents to Unicode and outgoing documents to UTF-8.")
16719 (license license:expat)))
16720
16721(define-public python-beautifulsoup4-bootstrap
16722 (hidden-package
16723 (package/inherit python-beautifulsoup4
16724 (arguments
16725 (list #:tests? #f))
16726 (native-inputs
16727 (list python-hatchling))
16728 (propagated-inputs '()))))
16729
16730
16731(define-public python-netifaces
16732 (package
16733 (name "python-netifaces")
16734 (version "0.11.0")
16735 (source
16736 (origin
16737 (method url-fetch)
16738 (uri (pypi-uri "netifaces" version))
16739 (sha256
16740 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16741 (build-system pyproject-build-system)
16742 (arguments
16743 (list
16744 #:test-backend #~'custom
16745 #:test-flags #~(list "test.py")))
16746 (native-inputs (list python-setuptools))
16747 (home-page "https://github.com/al45tair/netifaces")
16748 (synopsis "Python module for portable network interface information")
16749 (description
16750 "Netifaces is a Python module providing information on network
16751interfaces in an easy and portable manner.")
16752 (license license:expat)))
16753
16754(define-public python-networkx
16755 (package
16756 (name "python-networkx")
16757 (version "3.4.2")
16758 (source
16759 (origin
16760 (method url-fetch)
16761 (uri (pypi-uri "networkx" version))
16762 (sha256
16763 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16764 (build-system pyproject-build-system)
16765 (arguments
16766 (list
16767 #:test-flags
16768 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16769 (native-inputs
16770 (list python-pytest
16771 python-pytest-xdist
16772 python-setuptools
16773 python-wheel))
16774 (propagated-inputs
16775 (list python-decorator))
16776 (home-page "https://networkx.github.io/")
16777 (synopsis "Python module for creating and manipulating graphs and networks")
16778 (description
16779 "NetworkX is a Python package for the creation, manipulation, and study
16780of the structure, dynamics, and functions of complex networks.")
16781 (license license:bsd-3)))
16782
16783(define-public python-datrie
16784 (package
16785 (name "python-datrie")
16786 (version "0.8.3")
16787 (source
16788 (origin
16789 (method git-fetch)
16790 (uri (git-reference
16791 (url "https://github.com/kmike/datrie")
16792 (commit version)))
16793 (file-name (git-file-name name version))
16794 (sha256
16795 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16796 (build-system pyproject-build-system)
16797 (arguments
16798 (list
16799 #:phases
16800 #~(modify-phases %standard-phases
16801 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16802 (lambda* (#:key inputs #:allow-other-keys)
16803 (let* ((headers (search-input-directory inputs
16804 "include/datrie"))
16805 (base (dirname (dirname headers))))
16806 (symlink headers "libdatrie/datrie")
16807 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16808 (add-before 'build 'relax-gcc-14-strictness
16809 (lambda _
16810 (setenv "CFLAGS"
16811 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16812 (native-inputs
16813 (list python-cython python-hypothesis python-pytest python-setuptools))
16814 (inputs (list libdatrie))
16815 (home-page "https://github.com/kmike/datrie")
16816 (synopsis "Fast, efficiently stored trie for Python")
16817 (description
16818 "This package provides a fast, efficiently stored trie implementation for
16819Python.")
16820 (license license:lgpl2.1+)))
16821
16822(define-public python-amply
16823 (package
16824 (name "python-amply")
16825 (version "0.1.6")
16826 (source
16827 (origin
16828 (method url-fetch)
16829 (uri (pypi-uri "amply" version))
16830 (sha256
16831 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16832 (build-system pyproject-build-system)
16833 (native-inputs
16834 (list python-pytest
16835 python-setuptools
16836 python-setuptools-scm
16837 python-wheel))
16838 (propagated-inputs
16839 (list python-docutils
16840 python-pyparsing))
16841 (home-page "https://github.com/willu47/amply")
16842 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16843 (description
16844 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16845structures.")
16846 (license license:epl1.0)))
16847
16848(define-public python-pulp
16849 (package
16850 (name "python-pulp")
16851 (version "3.3.2")
16852 (source
16853 (origin
16854 (method git-fetch)
16855 (uri (git-reference
16856 (url "https://github.com/coin-or/pulp")
16857 (commit version)))
16858 (file-name (git-file-name name version))
16859 (sha256
16860 (base32 "1vagp2xg4kl7swrd7snf1dlrj5mgccbascy30j4zncvi9cplyxfk"))
16861 (snippet
16862 #~(begin
16863 ;; The solverdir contains several binaries; use the Guix cbc
16864 ;; package instead.
16865 (use-modules (guix build utils))
16866 (delete-file-recursively "pulp/solverdir")))))
16867 (build-system pyproject-build-system)
16868 (arguments
16869 (list
16870 #:phases
16871 #~(modify-phases %standard-phases
16872 (add-after 'unpack 'use-system-cbc
16873 (lambda* (#:key inputs #:allow-other-keys)
16874 (substitute* "pyproject.toml"
16875 ;; Do not copy the binaries.
16876 ((".*solverdir.*") ""))
16877 (let ((cbc (search-input-file inputs "/bin/cbc")))
16878 ;; PuLP default points to pulp/solverdir/../cbc,
16879 ;; use cbc from Guix instead.
16880 (substitute* "pulp/apis/coin_api.py"
16881 ((".*solverdir.*")
16882 (string-append " r\"" cbc "\"\n")))))))))
16883 (native-inputs
16884 (list python-pytest
16885 python-setuptools))
16886 (inputs
16887 (list cbc)) ;TODO: Add more solvers? Like highs
16888 (home-page "https://github.com/coin-or/pulp")
16889 (synopsis "Linear Programming modeler")
16890 (description
16891 "PuLP is a Linear Programming modeler written in Python. PuLP can
16892generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16893solve linear problems.")
16894 (license license:expat)))
16895
16896(define-public python-py-partiql-parser
16897 (package
16898 (name "python-py-partiql-parser")
16899 (version "0.6.3")
16900 (source
16901 (origin
16902 (method git-fetch)
16903 (uri (git-reference
16904 (url "https://github.com/getmoto/py-partiql-parser")
16905 (commit version)))
16906 (file-name (git-file-name name version))
16907 (sha256
16908 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16909 (build-system pyproject-build-system)
16910 (native-inputs
16911 (list python-hatchling
16912 python-pytest))
16913 (home-page "https://pypi.org/project/py-partiql-parser/")
16914 (synopsis "Pure Python PartiQL Parser")
16915 (description
16916 "This package provides a tokenizer/parser/executor for the PartiQL
16917language, in Python.")
16918 (license license:expat)))
16919
16920(define-public python-py-tes
16921 (package
16922 (name "python-py-tes")
16923 (version "0.4.2")
16924 (source
16925 (origin
16926 (method git-fetch)
16927 (uri (git-reference
16928 (url "https://github.com/ohsu-comp-bio/py-tes")
16929 (commit version)))
16930 (file-name (git-file-name name version))
16931 (sha256
16932 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16933 (build-system pyproject-build-system)
16934 (native-inputs
16935 (list python-pytest python-requests-mock python-setuptools))
16936 (propagated-inputs
16937 (list python-attrs python-dateutil python-future python-requests))
16938 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16939 (synopsis "Library for communicating with the GA4GH Task Execution API")
16940 (description "This package provides a library for communicating with the
16941GA4GH Task Execution API.")
16942 (license license:expat)))
16943
16944(define-public python-altgraph
16945 (package
16946 (name "python-altgraph")
16947 (version "0.17.4")
16948 (source
16949 (origin
16950 (method url-fetch)
16951 (uri (pypi-uri "altgraph" version))
16952 (sha256
16953 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16954 (build-system pyproject-build-system)
16955 (native-inputs (list python-pytest python-setuptools python-wheel))
16956 (home-page "https://altgraph.readthedocs.io")
16957 (synopsis "Python graph network package")
16958 (description
16959"This package provides tools for constructing graphs, BFS and DFS
16960traversals, topological sort, shortest paths, and more with graphviz
16961output.")
16962 (license license:expat)))
16963
16964(define-public python-pyqrcode
16965 (package
16966 (name "python-pyqrcode")
16967 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16968 (revision . "0")))
16969 (version (git-version "1.2.1"
16970 (assoc-ref properties 'revision)
16971 (assoc-ref properties 'commit)))
16972 (source
16973 (origin
16974 (method git-fetch)
16975 (uri (git-reference
16976 (url "https://github.com/mnooner256/pyqrcode")
16977 (commit (assoc-ref properties 'commit))))
16978 (file-name (git-file-name name version))
16979 (sha256
16980 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16981 (build-system pyproject-build-system)
16982 (arguments (list #:test-backend #~'nose))
16983 (native-inputs (list python-pynose python-pypng python-setuptools))
16984 (home-page "https://github.com/mnooner256/pyqrcode")
16985 (synopsis "QR code generator")
16986 (description
16987 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16988PNG and terminal output.")
16989 (license license:bsd-3)))
16990
16991(define-public python-seaborn
16992 ;; TODO: Move to (gnu packages statistics).
16993 (package
16994 (name "python-seaborn")
16995 ;; 0.13.2 (2024-01-25), the latest release contains known
16996 ;; incompatibilities, see:
16997 ;; <https://github.com/mwaskom/seaborn/issues/3892>,
16998 ;; <https://github.com/mwaskom/seaborn/issues/3893>.
16999 (properties '((commit . "32088bbc3adc611b7118e57fce6d4ed096a76a29")
17000 (revision . "0")))
17001 (version (git-version "0.13.2"
17002 (assoc-ref properties 'revision)
17003 (assoc-ref properties 'commit)))
17004 (source
17005 (origin
17006 (method git-fetch)
17007 (uri (git-reference
17008 (url "https://github.com/mwaskom/seaborn")
17009 (commit (assoc-ref properties 'commit))))
17010 (file-name (git-file-name name version))
17011 (sha256
17012 (base32 "1d2aig4kpjc8lcvk1sp824ksy1vl17dd36s4zryhjhmz5b0idqx3"))))
17013 (build-system pyproject-build-system)
17014 (arguments
17015 (list
17016 ;; tests: 2359 passed, 16 skipped, 6 xfailed
17017 #:test-flags
17018 #~(list "--numprocesses" (number->string (parallel-job-count)))))
17019 (native-inputs
17020 (list python-flit-core
17021 python-pytest
17022 python-pytest-xdist))
17023 (propagated-inputs
17024 (list python-matplotlib
17025 python-numpy
17026 python-pandas
17027 python-scipy
17028 python-statsmodels))
17029 (home-page "https://seaborn.pydata.org/")
17030 (synopsis "Statistical data visualization")
17031 (description
17032 "Seaborn is a library for making attractive and informative statistical
17033graphics in Python. It is built on top of matplotlib and tightly integrated
17034with the PyData stack, including support for numpy and pandas data structures
17035and statistical routines from scipy and statsmodels.")
17036 (license license:bsd-3)))
17037
17038(define-public python-session-info
17039 (package
17040 (name "python-session-info")
17041 (version "1.0.0")
17042 (source
17043 (origin
17044 (method git-fetch)
17045 (uri (git-reference
17046 (url "https://gitlab.com/joelostblom/session_info")
17047 (commit version)))
17048 (file-name (git-file-name name version))
17049 (sha256
17050 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
17051 (build-system pyproject-build-system)
17052 (arguments (list #:tests? #f)) ; No tests.
17053 (native-inputs (list python-setuptools))
17054 (propagated-inputs (list python-stdlib-list))
17055 (home-page "https://gitlab.com/joelostblom/session_info")
17056 (synopsis "Output version information for modules currently loaded")
17057 (description
17058 "This package outputs version information for modules loaded in the current
17059session, Python, and the OS.")
17060 (license license:bsd-3)))
17061
17062(define-public python-mpmath
17063 (package
17064 (name "python-mpmath")
17065 (version "1.3.0")
17066 (source
17067 (origin
17068 (method git-fetch)
17069 (uri (git-reference
17070 (url "https://github.com/fredrik-johansson/mpmath")
17071 (commit version)))
17072 (file-name (git-file-name name version))
17073 (sha256
17074 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
17075 (build-system pyproject-build-system)
17076 (native-inputs
17077 (list python-pytest
17078 python-setuptools
17079 python-setuptools-scm))
17080 (home-page "https://mpmath.org")
17081 (synopsis "Arbitrary-precision floating-point arithmetic in python")
17082 (description
17083 "@code{mpmath} can be used as an arbitrary-precision substitute for
17084Python's float/complex types and math/cmath modules, but also does much
17085more advanced mathematics.")
17086 (license license:bsd-3)))
17087
17088(define-public python-bigfloat
17089 (package
17090 (name "python-bigfloat")
17091 (version "0.4.0")
17092 (source
17093 (origin
17094 (method url-fetch)
17095 (uri (pypi-uri "bigfloat" version))
17096 (sha256
17097 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
17098 (snippet '(delete-file "mpfr.c"))))
17099 (build-system pyproject-build-system)
17100 (arguments
17101 (list
17102 #:test-flags
17103 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
17104 ;; but I don't know what to do about it.
17105 '(list "-k" "not test_hash")
17106 #:phases
17107 '(modify-phases %standard-phases
17108 (add-before 'build 'cythonize
17109 (lambda _ (invoke "cython" "mpfr.pyx"))))))
17110 (inputs (list mpfr))
17111 (native-inputs
17112 (list python-cython python-pytest python-setuptools python-wheel))
17113 (propagated-inputs
17114 (list python-six))
17115 (home-page "https://github.com/mdickinson/bigfloat")
17116 (synopsis "Arbitrary precision floating-point arithmetic for Python")
17117 (description
17118 "This package provides a Python interface to the MPFR library for
17119multiprecision arithmetic.")
17120 (license license:lgpl3+)))
17121
17122(define-public python-plac
17123 (package
17124 (name "python-plac")
17125 (version "1.4.3")
17126 (source
17127 (origin
17128 (method git-fetch)
17129 (uri (git-reference
17130 (url "https://github.com/ialbert/plac")
17131 (commit (string-append "v" version))))
17132 (file-name (git-file-name name version))
17133 (sha256
17134 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
17135 (build-system pyproject-build-system)
17136 (arguments
17137 (list
17138 #:phases
17139 #~(modify-phases %standard-phases
17140 (add-after 'unpack 'fix-tkinter
17141 (lambda _
17142 (substitute* "plac_tk.py"
17143 (("from Tkinter import Tk")
17144 "from tkinter import Tk")
17145 (("from ScrolledText import ScrolledText")
17146 "from tkinter.scrolledtext import ScrolledText")))))))
17147 (native-inputs
17148 (list (list python "tk") python-pytest python-setuptools))
17149 (home-page "https://github.com/ialbert/plac")
17150 (synopsis "Command line arguments parser")
17151 (description
17152 "This package can generate command line parameters from function
17153signatures.")
17154 (license license:bsd-3)))
17155
17156(define-public python-q
17157 (package
17158 (name "python-q")
17159 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
17160 (revision . "0")))
17161 (version (git-version "2.7"
17162 (assoc-ref properties 'revision)
17163 (assoc-ref properties 'commit)))
17164 (source
17165 (origin
17166 (method git-fetch)
17167 (uri (git-reference
17168 (url "https://github.com/zestyping/q")
17169 (commit (assoc-ref properties 'commit))))
17170 (file-name (git-file-name name version))
17171 (sha256
17172 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
17173 (build-system pyproject-build-system)
17174 (arguments
17175 (list
17176 ;; Deduced from the makefile.
17177 #:test-backend #~'custom
17178 #:test-flags #~(list "test/test_basic.py")
17179 #:phases
17180 #~(modify-phases %standard-phases
17181 (add-before 'check 'configure-tests
17182 (lambda* (#:key tests? #:allow-other-keys)
17183 (when tests?
17184 (setenv "TMPDIR" "/tmp")))))))
17185 (native-inputs (list python-setuptools))
17186 (home-page "https://github.com/zestyping/q")
17187 (synopsis "Quick-and-dirty debugging output for tired programmers")
17188 (description
17189 "q is a Python module for \"print\" style of debugging Python code. It
17190provides convenient short API for print out of values, tracebacks, and
17191falling into the Python interpreter.")
17192 (license license:asl2.0)))
17193
17194(define-public python-qnorm
17195 (package
17196 (name "python-qnorm")
17197 (version "0.9.0")
17198 (source
17199 (origin
17200 (method git-fetch)
17201 (uri (git-reference
17202 (url "https://github.com/Maarten-vd-Sande/qnorm")
17203 (commit (string-append "v" version))))
17204 (file-name (git-file-name name version))
17205 (sha256
17206 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
17207 (build-system pyproject-build-system)
17208 (arguments
17209 (list
17210 #:phases
17211 #~(modify-phases %standard-phases
17212 (add-after 'unpack 'fix-pandas-3
17213 (lambda _
17214 ;; Pandas 3.0 removed the implicit engine fallback that used
17215 ;; to switch to the Python engine whenever sep=None was
17216 ;; passed without an explicit 'engine', which get_delim()
17217 ;; relied on for delimiter auto-detection
17218 ;; Try removing the phase on the next update.
17219 (substitute* "qnorm/util.py"
17220 (("table, sep=None, iterator=True")
17221 "table, sep=None, engine=\"python\", iterator=True")))))))
17222 (propagated-inputs
17223 (list python-numba python-numpy python-pandas
17224 ;; XXX: pandas optional dependencies.
17225 python-tables python-pyarrow python-fastparquet))
17226 (native-inputs (list python-setuptools))
17227 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
17228 (synopsis "Quantile normalization")
17229 (description
17230 "This tool implements quantile normalization. It properly resolves rank
17231ties, which is important when ties happen frequently, such as when working
17232with discrete numbers (integers) in count tables. This implementation should
17233be relatively fast, and can use multiple cores to sort the columns and
17234tie-resolvement is accelerated by numba.")
17235 (license license:expat)))
17236
17237(define-public python-quantlaw
17238 (package
17239 (name "python-quantlaw")
17240 (version "0.0.7")
17241 (source
17242 (origin
17243 (method git-fetch)
17244 (uri (git-reference
17245 (url "https://github.com/Quantlaw/quantlaw")
17246 (commit (string-append "v" version))))
17247 (file-name (git-file-name name version))
17248 (sha256
17249 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
17250 (build-system pyproject-build-system)
17251 (arguments
17252 (list
17253 #:test-flags
17254 #~(list "-k"
17255 ;; test expects network access
17256 "not test_load_statue_names")))
17257 (native-inputs (list python-pytest python-setuptools))
17258 (propagated-inputs (list python-beautifulsoup4 python-networkx
17259 python-pandas python-regex python-requests))
17260 (home-page "https://quantlaw.readthedocs.io/")
17261 (synopsis "Coding utilities for quantitative legal studies")
17262 (description
17263 "This package provides coding utilities for quantitative legal studies.")
17264 (license license:bsd-3)))
17265
17266(define-public python-singledispatch
17267 (package
17268 (name "python-singledispatch")
17269 (version "4.0.0")
17270 (source
17271 (origin
17272 (method url-fetch)
17273 (uri (pypi-uri "singledispatch" version))
17274 (sha256
17275 (base32
17276 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
17277 (build-system pyproject-build-system)
17278 (native-inputs
17279 (list python-pytest
17280 python-setuptools
17281 python-six ; required for conversion, not at run-time
17282 python-wheel))
17283 (home-page
17284 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
17285 (synopsis "Backport of singledispatch feature from Python 3.4")
17286 (description
17287 "This library brings functools.singledispatch from Python 3.4 to Python
172882.6-3.3.")
17289 (license license:expat)))
17290
17291(define-public python-pyzmq
17292 (package
17293 (name "python-pyzmq")
17294 (version "27.1.0")
17295 (source
17296 (origin
17297 (method git-fetch)
17298 (uri (git-reference
17299 (url "https://github.com/zeromq/pyzmq")
17300 (commit (string-append "v" version))))
17301 (file-name (git-file-name name version))
17302 (sha256
17303 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
17304 (build-system pyproject-build-system)
17305 (arguments
17306 (list
17307 #:test-flags
17308 '(list "-m" "not flaky")
17309 #:phases
17310 #~(modify-phases %standard-phases
17311 (add-before 'build 'configure
17312 (lambda _
17313 ;; Our zeromq package is built with '--enable-drafts'; also
17314 ;; enable draft support for pyzmq so the draft test passes.
17315 (setenv "ZMQ_DRAFT_API" "1")
17316 ;; Make sure to prevent building bundled libzmq.
17317 (setenv "PYZMQ_NO_BUNDLE" "1")))
17318 (add-before 'check 'delete-source
17319 ;; To prevent loading it and skip build extensions one more times.
17320 (lambda _
17321 (delete-file-recursively "zmq"))))))
17322 (native-inputs
17323 (list cmake-minimal
17324 ;; python-cffi ; for PyPy
17325 python-cython
17326 python-packaging
17327 python-pytest
17328 python-pytest-asyncio
17329 python-scikit-build-core
17330 python-tornado))
17331 (inputs
17332 (list libsodium
17333 zeromq))
17334 (home-page "https://github.com/zeromq/pyzmq")
17335 (synopsis "Python bindings for 0MQ")
17336 (description
17337 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17338 (license license:bsd-4)))
17339
17340(define-public python-immutabledict
17341 (package
17342 (name "python-immutabledict")
17343 (version "4.2.0")
17344 (source
17345 (origin
17346 (method url-fetch)
17347 (uri (pypi-uri "immutabledict" version))
17348 (sha256
17349 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17350 (build-system pyproject-build-system)
17351 (native-inputs
17352 (list python-poetry-core python-pytest))
17353 (home-page "https://github.com/corenting/immutabledict")
17354 (synopsis "Immutable wrapper around dictionaries")
17355 (description
17356 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17357It implements the complete mapping interface and can be used as a drop-in
17358replacement for dictionaries where immutability is desired.")
17359 (license license:expat)))
17360
17361(define-public python-emoji
17362 (package
17363 (name "python-emoji")
17364 (version "2.12.1")
17365 (source
17366 (origin
17367 (method url-fetch)
17368 (uri (pypi-uri "emoji" version))
17369 (sha256
17370 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17371 (build-system pyproject-build-system)
17372 (propagated-inputs (list python-typing-extensions))
17373 (native-inputs
17374 (list python-pytest
17375 python-setuptools
17376 python-wheel))
17377 (home-page "https://github.com/carpedm20/emoji/")
17378 (synopsis "Emoji terminal output for Python")
17379 (description
17380 "This package provides Emoji terminal output for Python. The
17381entire set of Emoji codes as defined by the Unicode Consortium is supported in
17382addition to a bunch of aliases.")
17383 (license license:bsd-3)))
17384
17385;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17386;; latest version. The latest gh-md-to-html does not build successfully from
17387;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17388;; version 1.21.2 from failing.
17389;; https://issues.guix.gnu.org/72102
17390;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17391(define-public python-emoji-for-gh-md-to-html
17392 (package
17393 (inherit python-emoji)
17394 (version "1.6.1")
17395 (source
17396 (origin
17397 (method url-fetch)
17398 (uri (pypi-uri "emoji" version))
17399 (sha256
17400 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17401
17402(define-public python-sarge
17403 (package
17404 (name "python-sarge")
17405 (version "0.1.7.post1") ;post release only to correct errors in metadata
17406 (source
17407 (origin
17408 (method git-fetch)
17409 (uri (git-reference
17410 (url "https://github.com/vsajip/sarge")
17411 (commit version)))
17412 (file-name (git-file-name name version))
17413 (sha256
17414 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17415 (build-system pyproject-build-system)
17416 (native-inputs (list python-pytest python-setuptools))
17417 (home-page "https://docs.red-dove.com/sarge/")
17418 (synopsis "Subprocess wrapper with command pipeline functionality")
17419 (description "@code{sarge} is a wrapper for subprocess which provides
17420command pipeline functionality.")
17421 (license license:bsd-3)))
17422
17423(define-public python-sentry-sdk
17424 ;; TODO: Move to (gnu packages python-web).
17425 (package
17426 (name "python-sentry-sdk")
17427 (version "2.59.0")
17428 (source
17429 (origin
17430 (method git-fetch)
17431 (uri (git-reference
17432 (url "https://github.com/getsentry/sentry-python")
17433 (commit version)))
17434 (file-name (git-file-name name version))
17435 (sha256
17436 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17437 (build-system pyproject-build-system)
17438 (arguments
17439 (list
17440 ;; tests: 2119 passed, 128 skipped, 224 warnings
17441 #:test-flags
17442 #~(list "--durations=10"
17443 "--numprocesses" (number->string (parallel-job-count))
17444 ;; The whole test suite is quite shaky, may fail unpredictably
17445 ;; and depends on many additional inputs to enable all
17446 ;; integration tests.
17447 "-k" (string-join
17448 (list "not test_aggregates"
17449 "test_aggregates_deprecated"
17450 (string-append "test_aggregates_explicitly_disabled"
17451 "_session_tracking_request_mode")
17452 (string-append "test_aggregates_explicitly_disabled"
17453 "_session_tracking_request"
17454 "_mode_deprecated")
17455 "test_auto_session_tracking_with_aggregates[False]"
17456 "test_auto_session_tracking_with_aggregates[True]"
17457 "test_basic"
17458 "test_default_attributes"
17459 "test_default_release"
17460 (string-append "test_ensure_integration_enabled"
17461 "_no_original_function_enabled")
17462 "test_logger_with_all_attributes"
17463 "test_merging"
17464 (string-append "test_session_mode_defaults_to"
17465 "_request_mode_in_wsgi_handler"))
17466 " and not "))
17467 #:phases
17468 #~(modify-phases %standard-phases
17469 (add-after 'unpack 'fix-pytest-config
17470 (lambda _
17471 ;; Tests run in debug mode which generats a lot of noise.
17472 (delete-file "tox.ini")
17473 (substitute* "pyproject.toml"
17474 (("addopts =.*") "")))))))
17475 (native-inputs
17476 (list nss-certs-for-test
17477 python-brotli
17478 python-jsonschema
17479 python-mock
17480 python-pysocks
17481 python-pytest
17482 python-pytest-aiohttp
17483 python-pytest-asyncio
17484 python-pytest-localserver
17485 python-pytest-timeout
17486 python-pytest-xdist
17487 python-responses
17488 python-setuptools
17489 python-socksio))
17490 (propagated-inputs
17491 (list python-certifi
17492 python-urllib3
17493 ;; [optional]
17494 ;; python-unleashclient
17495 python-aiohttp
17496 ;; python-anthropic
17497 ;; python-apache-beam
17498 ;; python-arq
17499 python-asttokens
17500 ;; python-asyncpg
17501 ;; python-blinker
17502 ;; python-bottle
17503 ;; python-celery
17504 ;; python-celery-redbeat
17505 ;; python-chalice
17506 ;; python-clickhouse-driver
17507 ;; python-django
17508 python-executing
17509 ;; python-falcon
17510 ;; python-fastapi
17511 ;; python-flask
17512 ;; python-google-genai
17513 ;; python-grpcio
17514 python-httpcore
17515 ;; python-httpx
17516 ;; python-huey
17517 ;; python-huggingface-hub
17518 ;; python-langchain
17519 ;; python-langgraph
17520 ;; python-launchdarkly-server-sdk
17521 ;; python-litellm
17522 ;; python-litestar
17523 ;; python-loguru
17524 ;; python-markupsafe
17525 ;; python-mcp
17526 ;; python-openai
17527 ;; python-openfeature-sdk
17528 ;; python-opentelemetry-distro
17529 ;; python-protobuf
17530 ;; python-pure-eval
17531 ;; python-pydantic-ai
17532 ;; python-pymongo
17533 ;; python-pyspark
17534 ;; python-quart
17535 ;; python-rq
17536 ;; python-sanic
17537 ;; python-sqlalchemy
17538 ;; python-starlette
17539 ;; python-starlite
17540 ;; python-statsig
17541 ;; python-tiktoken
17542 #;python-tornado))
17543 (home-page "https://github.com/getsentry/sentry-python")
17544 (synopsis "Python SDK for Sentry")
17545 (description "This package provides a Python SDK for the Sentry
17546application monitoring and error tracking software.")
17547 (license license:bsd-2)))
17548
17549;; A bare minimal package, mainly to use in tests and reduce closure
17550;; size. Tests are left out in the main package to slim down native-inputs.
17551(define-public python-sentry-sdk-minimal
17552 (package/inherit python-sentry-sdk
17553 (name "python-sentry-sdk-minimal")
17554 (arguments
17555 (list #:tests? #f))
17556 (native-inputs
17557 (list python-setuptools))
17558 (propagated-inputs
17559 (list python-certifi
17560 python-urllib3))))
17561
17562(define-public python-pep440
17563 (package
17564 (name "python-pep440")
17565 (version "0.1.2")
17566 (source
17567 (origin
17568 (method url-fetch)
17569 (uri (pypi-uri "pep440" version))
17570 (sha256
17571 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17572 (build-system pyproject-build-system)
17573 (arguments
17574 ;; This checks for "pep440" in the output, but we actually print
17575 ;; ".pep440-real" due to wrapping.
17576 (list #:test-flags '(list "-k" "not test_cli_help")))
17577 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17578 python-pytest-console-scripts python-pytest-cov))
17579 (native-inputs (list python-flit-core))
17580 (home-page "https://pypi.org/project/pep440/")
17581 (synopsis "Utils to check whether versions number match PEP 440")
17582 (description
17583 "This package provides a simple package with utils to check whether
17584versions number match PEP 440.")
17585 (license license:expat)))
17586
17587(define-public python-pyproject-metadata
17588 (package
17589 (name "python-pyproject-metadata")
17590 (version "0.11.0")
17591 (source
17592 (origin
17593 (method git-fetch)
17594 (uri (git-reference
17595 (url "https://github.com/FFY00/python-pyproject-metadata")
17596 (commit version)))
17597 (file-name (git-file-name name version))
17598 (sha256
17599 (base32 "0f838jc5m8f3f4gazzsidhk6x2d359g53ysa0bp0fw11jsv1n2vp"))))
17600 (build-system pyproject-build-system)
17601 (propagated-inputs (list python-packaging))
17602 (native-inputs
17603 (list python-flit-core python-pytest python-tomli))
17604 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17605 (synopsis "Dataclass for PEP 621 metadata")
17606 (description "This project does not implement the parsing of
17607@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17608data structure representing PEP 621 metadata (already parsed), it will
17609validate this input and generate a PEP 643-compliant metadata
17610file (e.g. @file{PKG-INFO}).")
17611 (license license:expat)))
17612
17613(define-public python-meson
17614 (package
17615 (name "python-meson")
17616 (version "0.19.0")
17617 (source
17618 (origin
17619 (method git-fetch)
17620 (uri (git-reference
17621 (url "https://github.com/mesonbuild/meson-python")
17622 (commit version)))
17623 (file-name (git-file-name name version))
17624 (sha256
17625 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17626 (build-system pyproject-build-system)
17627 ;; tests: 124 passed, 16 skipped
17628 (native-inputs
17629 (list git-minimal/pinned
17630 patchelf
17631 python-pytest
17632 python-pytest-mock))
17633 (propagated-inputs
17634 (list meson
17635 ninja
17636 python-cython
17637 python-packaging
17638 python-pyproject-metadata))
17639 (home-page "https://github.com/mesonbuild/meson-python")
17640 (synopsis "Meson Python build backend (PEP 517)")
17641 (description "This package provides a PEP 517 build backend that makes
17642use of the Meson build system.")
17643 (license license:expat)))
17644
17645(define-public python-mfusepy
17646 (package
17647 (name "python-mfusepy")
17648 (version "3.1.1")
17649 (source
17650 (origin
17651 (method git-fetch)
17652 (uri (git-reference
17653 (url "https://github.com/mxmlnkn/mfusepy")
17654 (commit (string-append "v" version))))
17655 (file-name (git-file-name name version))
17656 (sha256
17657 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17658 (build-system pyproject-build-system)
17659 (native-inputs (list python-setuptools))
17660 (inputs (list fuse))
17661 (arguments
17662 (list
17663 #:tests? #f ; Tests require fuse kernel module
17664 #:phases
17665 #~(modify-phases %standard-phases
17666 (add-after 'unpack 'embed-libfuse
17667 (lambda* (#:key inputs #:allow-other-keys)
17668 (substitute* "mfusepy.py"
17669 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17670 (format #f "~a\"~a\"\n"
17671 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17672 (home-page "https://github.com/mxmlnkn/mfusepy")
17673 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17674 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17675 (license license:isc)))
17676
17677(define-public python-mccabe
17678 ;; Last public release (0.7.0) is from 2022-01-24.
17679 (let ((commit "292b5c71c3fe5496771b46ac9d86361c9b760d17")
17680 (revision "0"))
17681 (package
17682 (name "python-mccabe")
17683 (version (git-version "0.7.0" revision commit))
17684 (source
17685 (origin
17686 (method git-fetch)
17687 (uri (git-reference
17688 (url "https://github.com/PyCQA/mccabe")
17689 (commit commit)))
17690 (file-name (git-file-name name version))
17691 (sha256
17692 (base32 "12aa5qjzf0anx1bdfcgg4gvn9kkm1cc5qi2lzrh23c5gxyfyxw17"))))
17693 (build-system pyproject-build-system)
17694 (arguments
17695 (list
17696 #:test-flags
17697 ;; AssertionError: 0 != 1
17698 #~(list (string-append "--deselect=test_mccabe.py"
17699 "::RegressionTests::test_get_module_complexity"))))
17700 (native-inputs
17701 (list python-pytest
17702 python-setuptools))
17703 (home-page "https://github.com/PyCQA/mccabe")
17704 (synopsis "McCabe checker, plugin for flake8")
17705 (description
17706 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17707complexity of Python source code.")
17708 (license license:expat))))
17709
17710(define-public python-autoflake8
17711 (package
17712 (name "python-autoflake8")
17713 (version "0.4.0")
17714 (source (origin
17715 (method git-fetch) ;for tests
17716 (uri (git-reference
17717 (url "https://github.com/fsouza/autoflake8")
17718 (commit (string-append "v" version))))
17719 (file-name (git-file-name name version))
17720 (sha256
17721 (base32
17722 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17723 (build-system pyproject-build-system)
17724 (native-inputs
17725 (list python-aiofiles
17726 python-poetry-core
17727 python-pytest
17728 python-pytest-xdist))
17729 (propagated-inputs (list python-pyflakes))
17730 (home-page "https://github.com/fsouza/autoflake8")
17731 (synopsis "Automatically fix issues reported by flake8")
17732 (description "Tool to automatically fix some issues reported by
17733@command{flake8}.")
17734 (license license:expat)))
17735
17736(define-public python-flake8
17737 (package
17738 (name "python-flake8")
17739 (version "7.3.0")
17740 (source
17741 (origin
17742 (method git-fetch)
17743 (uri (git-reference
17744 (url "https://github.com/pycqa/flake8")
17745 (commit version)))
17746 (file-name (git-file-name name version))
17747 (sha256
17748 (base32 "0dva22djb3pdrizghvs5r1k7vr1j3khs0k9z8y6dz4ga50dli4bm"))))
17749 (build-system pyproject-build-system)
17750 (native-inputs
17751 (list python-pytest
17752 python-setuptools))
17753 (propagated-inputs
17754 (list python-mccabe
17755 python-pycodestyle
17756 python-pyflakes))
17757 (home-page "https://flake8.pycqa.org/en/latest/")
17758 (synopsis "The modular source code checker: pep8, pyflakes and co")
17759 (description
17760 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17761 (license license:expat)))
17762
17763(define-public python-flake8-blind-except
17764 (package
17765 (name "python-flake8-blind-except")
17766 (version "0.2.1")
17767 (source
17768 (origin
17769 (method git-fetch)
17770 (uri (git-reference
17771 (url "https://github.com/elijahandrews/flake8-blind-except")
17772 (commit (string-append "v" version))))
17773 (file-name (git-file-name name version))
17774 (sha256
17775 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17776 (build-system pyproject-build-system)
17777 (arguments (list #:tests? #f)) ;no tests
17778 (native-inputs (list python-setuptools))
17779 (propagated-inputs (list python-pycodestyle))
17780 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17781 (synopsis "Check for blind @code{except:} statements")
17782 (description
17783 "This package provides a flake8 extension that checks for blind
17784@code{except:} statements.")
17785 (license license:expat)))
17786
17787(define-public python-flake8-bugbear
17788 (package
17789 (name "python-flake8-bugbear")
17790 (version "24.10.31")
17791 (source
17792 (origin
17793 (method url-fetch)
17794 (uri (pypi-uri "flake8_bugbear" version))
17795 (sha256
17796 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17797 (build-system pyproject-build-system)
17798 (native-inputs
17799 (list python-hypothesmith
17800 python-pytest
17801 python-setuptools
17802 python-wheel))
17803 (propagated-inputs
17804 (list python-attrs
17805 python-flake8))
17806 (home-page "https://github.com/PyCQA/flake8-bugbear")
17807 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17808 (description
17809 "This package contains a plugin for Flake8 finding likely bugs and design
17810problems in your program. It contains warnings that don't belong in pyflakes
17811and pycodestyle.")
17812 (license license:expat)))
17813
17814(define-public python-flake8-continuation
17815 (package
17816 (name "python-flake8-continuation")
17817 (version "1.0.5")
17818 (source
17819 (origin
17820 (method git-fetch)
17821 (uri (git-reference
17822 (url "https://github.com/planetlabs/flake8-continuation")
17823 (commit version)))
17824 (file-name (git-file-name name version))
17825 (sha256
17826 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17827 (build-system pyproject-build-system)
17828 (arguments
17829 (list
17830 #:phases
17831 #~(modify-phases %standard-phases
17832 (add-after 'unpack 'remove-python-six-dependency
17833 (lambda _
17834 (substitute* "flake8_continuation.py"
17835 (("import six|six\\.moves\\.")
17836 ""))
17837 (substitute* "setup.py"
17838 ((", \"six\"")
17839 "")))))))
17840 (native-inputs (list python-pytest python-setuptools))
17841 (propagated-inputs (list python-flake8 python-pycodestyle))
17842 (home-page "https://github.com/planetlabs/flake8-continuation")
17843 (synopsis "Flake8 Line Continuation Plugin")
17844 (description
17845 "A Flake8 plugin that checks for the line continuation style to be in the
17846preferred method according to PEP-8, specifically:
17847@quotation
17848The preferred way of wrapping long lines is by using Python's implied line
17849continuation inside parentheses, brackets and braces. Long lines can be
17850broken over multiple lines by wrapping expressions in parentheses. These
17851should be used in preference to using a backslash for line continuation.
17852@end quotation")
17853 (license license:asl2.0)))
17854
17855(define-public python-flake8-debugger
17856 (package
17857 (name "python-flake8-debugger")
17858 (version "4.1.2")
17859 (source
17860 (origin
17861 (method git-fetch)
17862 (uri (git-reference
17863 (url "https://github.com/jbkahn/flake8-debugger")
17864 (commit version)))
17865 (file-name (git-file-name name version))
17866 (sha256
17867 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17868 (build-system pyproject-build-system)
17869 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17870 (propagated-inputs (list python-flake8 python-pycodestyle))
17871 (home-page "https://github.com/jbkahn/flake8-debugger")
17872 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17873 (description
17874 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17875@code{pdb} imports and set traces, as well as @code{from
17876IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17877@code{InteractiveShellEmbed()()}.")
17878 (license license:expat)))
17879
17880(define-public python-flake8-implicit-str-concat
17881 (package
17882 (name "python-flake8-implicit-str-concat")
17883 (version "0.5.0")
17884 (source
17885 (origin
17886 (method url-fetch)
17887 (uri (pypi-uri "flake8_implicit_str_concat" version))
17888 (sha256
17889 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17890 (build-system pyproject-build-system)
17891 (arguments
17892 (list
17893 #:tests? #f)) ; no tests in PiPY or git checkout
17894 (native-inputs
17895 (list python-hatchling))
17896 (propagated-inputs
17897 (list python-attrs
17898 python-more-itertools))
17899 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17900 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17901 (description
17902 "This is a plugin for the Python code checking tool Flake8 to encourage
17903correct string literal concatenation.
17904
17905It looks for style problems like implicitly concatenated string literals on
17906the same line (which can be introduced by the code formatting tool Black), or
17907unnecessary plus operators for explicit string literal concatenation.")
17908 (license license:expat)))
17909
17910(define-public python-flake8-print
17911 (package
17912 (name "python-flake8-print")
17913 (version "5.0.0")
17914 (source
17915 (origin
17916 (method url-fetch)
17917 (uri (pypi-uri "flake8-print" version))
17918 (sha256
17919 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17920 (build-system pyproject-build-system)
17921 (arguments
17922 (list
17923 #:tests? #f)) ; no tests in PiPY or git checkout
17924 (native-inputs
17925 (list python-poetry-core))
17926 (propagated-inputs
17927 (list python-flake8
17928 python-pycodestyle))
17929 (home-page "https://github.com/jbkahn/flake8-print")
17930 (synopsis "Print statement checker plugin for Flake8")
17931 (description
17932 "This plugin for Flake8 checks for @code{print} statements in Python
17933files.")
17934 (license license:expat)))
17935
17936(define-public python-flake8-pyi
17937 (package
17938 (name "python-flake8-pyi")
17939 (version "26.5.0")
17940 (source
17941 (origin
17942 (method git-fetch)
17943 (uri (git-reference
17944 (url "https://github.com/ambv/flake8-pyi")
17945 (commit version)))
17946 (file-name (git-file-name name version))
17947 (sha256
17948 (base32 "006shfi8a99ysfac5s7fizx8f5w9hz3pl551kp9q1883rh1rfd5m"))))
17949 (build-system pyproject-build-system)
17950 (arguments
17951 (list
17952 #:phases
17953 #~(modify-phases %standard-phases
17954 (add-after 'unpack 'fix-pytest-config
17955 (lambda _
17956 ;; Prevent full threads utilization.
17957 (substitute* "pyproject.toml"
17958 (("-nauto") "")))))))
17959 (native-inputs
17960 (list python-hatch-vcs
17961 python-hatchling
17962 python-pytest))
17963 (propagated-inputs
17964 (list python-attrs
17965 python-flake8
17966 python-pyflakes))
17967 (home-page "https://github.com/ambv/flake8-pyi")
17968 (synopsis "Flake8 plugin for type hinting stub files")
17969 (description
17970 "This package contains a plugin that provides specializations for type
17971hinting stub files, especially interesting for linting typeshed. It adds the
17972@file{.pyi} extension to the default value of the @code{--filename}
17973command-line argument to Flake8. This means stubs are linted by default with
17974this plugin enabled, without needing to explicitly list every file. It
17975modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17976expressions after the entire file has been read. This enables support for
17977first-class forward references that stub files use.")
17978 (license license:expat)))
17979
17980(define-public python-flake8-quotes
17981 (package
17982 (name "python-flake8-quotes")
17983 (version "3.4.0")
17984 (source
17985 (origin
17986 (method url-fetch)
17987 (uri (pypi-uri "flake8-quotes" version))
17988 (sha256
17989 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17990 (build-system pyproject-build-system)
17991 (native-inputs
17992 (list python-pytest
17993 python-setuptools
17994 python-wheel))
17995 (propagated-inputs
17996 (list python-flake8))
17997 (home-page "https://github.com/zheller/flake8-quotes/")
17998 (synopsis "Flake8 lint for quotes")
17999 (description "This package provides a Flake8 lint for quotes.")
18000 (license license:expat)))
18001
18002(define-public python-flake8-todo
18003 (package
18004 (name "python-flake8-todo")
18005 (version "0.7")
18006 (source
18007 (origin
18008 (method git-fetch)
18009 (uri (git-reference
18010 (url "https://github.com/schlamar/flake8-todo")
18011 (commit (string-append "v" version))))
18012 (file-name (git-file-name name version))
18013 (sha256
18014 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
18015 (build-system pyproject-build-system)
18016 (arguments (list #:tests? #f)) ; No tests.
18017 (native-inputs (list python-setuptools))
18018 (propagated-inputs (list python-pycodestyle))
18019 (home-page "https://github.com/schlamar/flake8-todo")
18020 (synopsis "TODO notes checker, plugin for flake8")
18021 (description
18022 "This package provides the @code{flake8-todo} Python module, a
18023TODO notes checker plugin for flake8.")
18024 (license license:expat)))
18025
18026(define-public python-flake8-isort
18027 (package
18028 (name "python-flake8-isort")
18029 (version "7.0.0")
18030 (source
18031 (origin
18032 (method git-fetch)
18033 (uri (git-reference
18034 (url "https://github.com/gforcada/flake8-isort")
18035 (commit version)))
18036 (file-name (git-file-name name version))
18037 (sha256
18038 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
18039 (build-system pyproject-build-system)
18040 (arguments (list #:test-backend #~'custom
18041 #:test-flags #~(list "run_tests.py")))
18042 (native-inputs (list python-hatchling python-pytest))
18043 (propagated-inputs (list python-flake8 python-isort))
18044 (home-page "https://github.com/gforcada/flake8-isort")
18045 (synopsis "Flake8 plugin integrating isort")
18046 (description
18047 "This package provides a flake8 plugin that integrates isort,
18048extending flake8 so that it can warn about badly sorted Python import
18049directives.")
18050 (license license:gpl2+)))
18051
18052(define-public python-autoflake
18053 (package
18054 (name "python-autoflake")
18055 (version "2.3.1")
18056 (source
18057 (origin
18058 (method url-fetch)
18059 (uri (pypi-uri "autoflake" version))
18060 (sha256
18061 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
18062 (build-system pyproject-build-system)
18063 (arguments
18064 (list
18065 #:phases
18066 #~(modify-phases %standard-phases
18067 (replace 'check
18068 (lambda _
18069 (invoke "python" "test_autoflake.py"))))))
18070 (native-inputs
18071 (list python-hatchling))
18072 (propagated-inputs
18073 (list python-pyflakes))
18074 (home-page "https://github.com/myint/autoflake")
18075 (synopsis "Removes unused imports and unused variables")
18076 (description
18077 "@code{autoflake} removes unused imports and unused variables from Python
18078code as reported by @code{pyflakes}.
18079
18080By default, it only removes unused imports for modules that are part of the
18081standard library. Removal of unused variables is also disabled by default.
18082It also removes useless @code{pass} statements.")
18083 (license license:expat)))
18084
18085(define-public python-mistune
18086 (package
18087 (name "python-mistune")
18088 (version "3.2.1")
18089 (source
18090 (origin
18091 (method git-fetch)
18092 (uri (git-reference
18093 (url "https://github.com/lepture/mistune")
18094 (commit (string-append "v" version))))
18095 (file-name (git-file-name name version))
18096 (sha256
18097 (base32 "1zcfky6rr860mdbjxs1h0lhla39g8s3048xdnb24y0lnyj3h80gh"))))
18098 (build-system pyproject-build-system)
18099 (native-inputs
18100 (list python-pytest
18101 python-setuptools))
18102 (home-page "https://github.com/lepture/mistune")
18103 (synopsis "Markdown parser in pure Python")
18104 (description
18105 "This package provides a fast markdown parser in pure Python.")
18106 (license license:bsd-3)))
18107
18108(define-public python-markdown
18109 (package
18110 (name "python-markdown")
18111 (version "3.10.2")
18112 (source
18113 (origin
18114 (method git-fetch)
18115 (uri (git-reference
18116 (url "https://github.com/Python-Markdown/markdown")
18117 (commit version)))
18118 (file-name (git-file-name name version))
18119 (sha256
18120 (base32 "1i7hn91zhg5blykvsdzr1hq00p8xqysdh1l73iypx9pd2pdvk7w9"))))
18121 (build-system pyproject-build-system)
18122 (native-inputs
18123 (list python-pyyaml
18124 python-setuptools))
18125 (home-page "https://python-markdown.github.io/")
18126 (synopsis "Python implementation of Markdown")
18127 (description
18128 "This package provides a Python implementation of John Gruber's
18129Markdown. The library features international input, various Markdown
18130extensions, and several HTML output formats. A command line wrapper
18131markdown_py is also provided to convert Markdown files to HTML.")
18132 (license license:bsd-3)))
18133
18134(define-public python-markdown2
18135 (package
18136 (name "python-markdown2")
18137 (version "2.5.3")
18138 (source
18139 (origin
18140 (method git-fetch) ; no tests data in PyPi package
18141 (uri (git-reference
18142 (url "https://github.com/trentm/python-markdown2")
18143 (commit version)))
18144 (file-name (git-file-name name version))
18145 (sha256
18146 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
18147 (build-system pyproject-build-system)
18148 (arguments
18149 (list
18150 #:test-backend #~'custom
18151 #:test-flags #~(list "test.py" "--" "-knownfailure")
18152 #:phases
18153 #~(modify-phases %standard-phases
18154 (add-before 'check 'pre-check
18155 (lambda _
18156 (chdir "test"))))))
18157 (native-inputs
18158 (list ;; python-pygments ;optional, tests fail when added
18159 ;; python-wavedrom ;optional, not packaged
18160 ;; python-latex2mathml ;optional, not packaged
18161 python-setuptools))
18162 (home-page "https://github.com/trentm/python-markdown2")
18163 (synopsis "Fast and complete Python implementation of Markdown")
18164 (description
18165 "This package provides a fast and complete Python implementation of
18166Markdown. It was written to closely match the behaviour of the original
18167Perl-implemented Markdown.pl. It also comes with a number of
18168extensions (called @code{extras}) for things like syntax coloring, tables,
18169header-ids.")
18170 (license license:expat)))
18171
18172(define-public python-mdx-include
18173 (package
18174 (name "python-mdx-include")
18175 (version "1.4.2")
18176 (source
18177 (origin
18178 (method git-fetch)
18179 (uri (git-reference
18180 (url "https://github.com/neurobin/mdx_include")
18181 (commit (string-append "v" version))))
18182 (file-name (git-file-name name version))
18183 (sha256
18184 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
18185 (build-system pyproject-build-system)
18186 (arguments
18187 (list
18188 #:test-backend #~'unittest
18189 #:phases
18190 (let* ((django-hello-url "\
18191https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1819273951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
18193 (django-hello
18194 (origin
18195 (method url-fetch)
18196 (uri django-hello-url)
18197 (sha256 (base32 "\
1819813bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
18199 #~(modify-phases %standard-phases
18200 (add-before 'check 'disable-test-requiring-network
18201 (lambda _
18202 (substitute* "mdx_include/test/test.py"
18203 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
18204 (string-append pre "__off__test_" post "("))
18205 (((string-join (string-split #$django-hello-url #\.) "\\."))
18206 #+django-hello))))))))
18207 (native-inputs (list python-setuptools))
18208 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
18209 (home-page "https://github.com/neurobin/mdx_include")
18210 (synopsis "Python Markdown extension to include local or remote files")
18211 (description "Include extension for Python Markdown. It lets you include
18212local or remote (downloadable) files into your markdown at arbitrary
18213positions.
18214
18215This project is motivated by markdown-include and provides the same
18216functionalities with some extras.")
18217 (license license:bsd-3)))
18218
18219(define-public python-ptyprocess
18220 (package
18221 (name "python-ptyprocess")
18222 (version "0.7.0")
18223 (source
18224 (origin
18225 (method url-fetch)
18226 (uri (pypi-uri "ptyprocess" version))
18227 (sha256
18228 (base32
18229 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
18230 (build-system pyproject-build-system)
18231 (native-inputs
18232 (list python-flit-core
18233 python-pytest))
18234 (home-page "https://github.com/pexpect/ptyprocess")
18235 (synopsis "Run a subprocess in a pseudo terminal")
18236 (description
18237 "This package provides a Python library used to launch a subprocess in a
18238pseudo terminal (pty), and interact with both the process and its pty.")
18239 (license license:isc)))
18240
18241(define-public python-configshell-fb
18242 (package
18243 (name "python-configshell-fb")
18244 (version "1.1.30")
18245 (source
18246 (origin
18247 (method url-fetch)
18248 (uri (pypi-uri "configshell-fb" version))
18249 ;; XXX: Snippet below is required because on v1.1.30 the source code
18250 ;; has configshell_fb as softlink to configshell and guix
18251 ;; pyproject-build-system doesn't work with symlinks very well.
18252 ;;
18253 ;; This package is only used in spdk for now and it's crucial to keep
18254 ;; it locked on version and keep the snipped for spdk to build
18255 ;; successfully.
18256 (snippet #~(begin
18257 (use-modules (guix build utils))
18258 (delete-file "setup.py")
18259 (delete-file-recursively "configshell_fb")
18260 (rename-file "configshell" "configshell_fb")))
18261 (sha256
18262 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
18263 (build-system pyproject-build-system)
18264 (arguments
18265 (list #:tests? #f)) ;; this package has no tests
18266 (native-inputs
18267 (list python-setuptools
18268 python-six
18269 python-wheel))
18270 (propagated-inputs
18271 (list python-pyparsing))
18272 (home-page "https://github.com/open-iscsi/configshell-fb")
18273 (synopsis "Framework to implement simple but nice CLIs")
18274 (description
18275 "This package provides a framework to implement simple but nice CLIs.")
18276 (license license:asl2.0)))
18277
18278(define-public python-configupdater
18279 (package
18280 (name "python-configupdater")
18281 (version "3.2")
18282 (source
18283 (origin
18284 (method git-fetch)
18285 (uri (git-reference
18286 (url "https://github.com/pyscaffold/configupdater")
18287 (commit (string-append "v" version))))
18288 (file-name (git-file-name name version))
18289 (sha256
18290 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
18291 (build-system pyproject-build-system)
18292 (native-inputs
18293 (list python-pytest python-setuptools python-setuptools-scm))
18294 (home-page "https://github.com/pyscaffold/configupdater")
18295 (synopsis "Parser like ConfigParser but for updating configuration files")
18296 (description
18297 "ConfigUpdater is a Python library for updating INI configuration files
18298while preserving the original file's formatting, structure, and comments.
18299Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
18300targeted changes--keeping comments, section ordering, key-value pair
18301ordering, and original casing intact.")
18302 (license license:expat)))
18303
18304(define-public python-crccheck
18305 (package
18306 (name "python-crccheck")
18307 (version "1.3.0")
18308 (source
18309 (origin
18310 (method git-fetch) ; no tests in PyPI
18311 (uri (git-reference
18312 (url "https://github.com/MartinScharrer/crccheck")
18313 (commit (string-append "v" version))))
18314 (file-name (git-file-name name version))
18315 (sha256
18316 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
18317 (build-system pyproject-build-system)
18318 (native-inputs (list python-pytest python-setuptools python-wheel))
18319 (home-page "https://github.com/MartinScharrer/crccheck")
18320 (synopsis "Calculation library for CRCs and checksums")
18321 (description "@code{crccheck} is a calculation library for CRCs and
18322checksums. It implement more than a hundred checksum routines.")
18323 (license license:gpl3+)))
18324
18325(define-public python-crashtest
18326 (package
18327 (name "python-crashtest")
18328 (version "0.4.1")
18329 (source
18330 (origin
18331 (method git-fetch)
18332 (uri (git-reference
18333 (url "https://github.com/sdispater/crashtest")
18334 (commit version)))
18335 (file-name (git-file-name name version))
18336 (sha256
18337 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18338 (build-system pyproject-build-system)
18339 (native-inputs (list python-poetry-core python-pytest))
18340 (home-page "https://github.com/sdispater/crashtest")
18341 (synopsis "Manage Python errors with ease")
18342 (description
18343 "Python library that makes exceptions handling and inspection easier.")
18344 (license license:expat)))
18345
18346(define-public python-pysendfile
18347 (package
18348 (name "python-pysendfile")
18349 (version "2.0.1")
18350 (source
18351 (origin
18352 (method git-fetch)
18353 (uri (git-reference
18354 (url "https://github.com/giampaolo/pysendfile")
18355 (commit (string-append "release-" version))))
18356 (file-name (git-file-name name version))
18357 (sha256
18358 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18359 (build-system pyproject-build-system)
18360 (arguments
18361 (list
18362 #:phases
18363 #~(modify-phases %standard-phases
18364 (replace 'check
18365 (lambda* (#:key tests? #:allow-other-keys)
18366 (when tests?
18367 (setenv "HOME" "/tmp")
18368 (invoke "make" "test")))))))
18369 (native-inputs (list python-pytest python-setuptools))
18370 (propagated-inputs (list python-pyasynchat))
18371 (home-page "https://github.com/giampaolo/pysendfile")
18372 (synopsis "Python interface to sendfile(2)")
18373 (description "The @code{pysendfile} Python library provides an interface to
18374the @code{sendfile(2)} system call.")
18375 (license license:expat)))
18376
18377(define-public python-pyftpdlib
18378 (package
18379 (name "python-pyftpdlib")
18380 (version "1.5.10")
18381 (source
18382 (origin
18383 (method url-fetch)
18384 (uri (pypi-uri "pyftpdlib" version))
18385 (sha256
18386 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18387 (build-system pyproject-build-system)
18388 ;; Using Pytest instead of the Makefile causes the command line tests to
18389 ;; fail on unknown Pytest arguments.
18390 (arguments
18391 (list
18392 #:test-flags
18393 #~(list
18394 "-k" "not TestCommandLineParser"
18395 ;; These contains flaky tests.
18396 "--deselect=pyftpdlib/test/test_functional.py"
18397 "--deselect=pyftpdlib/test/test_functional_ssl.py")))
18398 (native-inputs
18399 (list python-psutil
18400 python-pytest
18401 python-setuptools
18402 python-wheel))
18403 (propagated-inputs
18404 (list python-pyopenssl
18405 python-pysendfile))
18406 (home-page "https://github.com/giampaolo/pyftpdlib/")
18407 (synopsis "Asynchronous and scalable Python FTP server library")
18408 (description "The Python FTP server library provides a high-level
18409interface to write efficient, scalable and asynchronous FTP servers with
18410Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18411RFC-959} FTP server implementation available for Python, and has the following
18412traits:
18413@itemize
18414@item
18415It is lightweight, fast and scalable.
18416@item
18417It uses the @code{sendfile(2)} system call for uploads.
18418@item
18419It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18420asynchronously.
18421@item
18422It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18423IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18424RFC-2640}) and MLSD/MLST commands (RFC-3659).
18425@item
18426It has a flexible system of @samp{authorizers} able to manage both
18427@samp{virtual} and @samp{real} users.
18428@end itemize")
18429 (license license:expat)))
18430
18431(define-public python-fonttools
18432 (package
18433 (name "python-fonttools")
18434 (version "4.59.2")
18435 (source
18436 (origin
18437 (method url-fetch)
18438 (uri (pypi-uri "fonttools" version ".tar.gz"))
18439 (sha256
18440 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18441 (build-system pyproject-build-system)
18442 (arguments
18443 (list
18444 #:tests? (not (%current-target-system))
18445 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18446 ;; 3 subtests passed
18447 #:test-flags
18448 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18449 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18450 (string-join ls "::")))
18451 ;; XXX: Some test data is not included in PyPI archive,
18452 ;; remove when switched to git-fetch.
18453 '(("cffLib/cffLib_test.py" "CffLibTest"
18454 "test_reading_supplement_encoding")
18455 ("tfmLib/tfmLib_test.py"
18456 "test_read_boundary_char")
18457 ("tfmLib/tfmLib_test.py"
18458 "test_read_fontdimens_vanilla")
18459 ("tfmLib/tfmLib_test.py"
18460 "test_read_fontdimens_mathex")
18461 ("tfmLib/tfmLib_test.py"
18462 "test_read_fontdimens_mathsy")
18463 ("voltLib/volttofea_test.py" "ToFeaTest"
18464 "test_cli_vtp")
18465 ("voltLib/volttofea_test.py" "ToFeaTest"
18466 "test_group_order"))))))
18467 (native-inputs
18468 (list python-pytest
18469 python-setuptools))
18470 ;; All of them are listed as extras_require.
18471 (propagated-inputs
18472 (list python-brotli
18473 python-lxml
18474 python-unicodedata2
18475 python-zopfli))
18476 (home-page "https://github.com/fonttools/fonttools")
18477 (synopsis "Tools to manipulate font files")
18478 (description
18479 "FontTools/TTX is a library to manipulate font files from Python. It
18480supports reading and writing of TrueType/OpenType fonts, reading and writing
18481of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18482also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18483from an XML-based format.")
18484 (license license:expat)))
18485
18486;;; Tests are left out in the main package to avoid cycles.
18487;; XXX: When updating, solve comment in python-cu2qu.
18488(define-public python-fonttools-minimal
18489 (hidden-package
18490 (package
18491 (inherit python-fonttools)
18492 (name "python-fonttools-minimal")
18493 (arguments '(#:tests? #f))
18494 (native-inputs
18495 (list python-setuptools))
18496 (propagated-inputs '()))))
18497
18498(define-public python-ly
18499 (package
18500 (name "python-ly")
18501 (version "0.9.9")
18502 (source
18503 (origin
18504 (method git-fetch)
18505 (uri (git-reference
18506 (url "https://github.com/frescobaldi/python-ly")
18507 (commit (string-append "v" version))))
18508 (file-name (git-file-name name version))
18509 (sha256
18510 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18511 (build-system pyproject-build-system)
18512 (arguments
18513 (list
18514 #:phases
18515 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18516 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18517 #~(modify-phases %standard-phases
18518 (add-after 'unpack 'inject-data
18519 (lambda _
18520 (substitute* "tests/musicxml.xsd"
18521 (((string-join (string-split #$namespace-url #\.) "\\."))
18522 #$(origin
18523 (method url-fetch)
18524 (uri namespace-url)
18525 (sha256 (base32 "\
185261j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18527 (((string-join (string-split #$xlink-url #\.) "\\."))
18528 #$(origin
18529 (method url-fetch)
18530 (uri xlink-url)
18531 (sha256 (base32 "\
185320jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18533 (native-inputs (list python-hatchling python-lxml python-pytest))
18534 (synopsis "Tool and library for manipulating LilyPond files")
18535 (description
18536 "This package provides a Python library to parse, manipulate or create
18537documents in LilyPond format. A command line program ly is also provided that
18538can be used to do various manipulations with LilyPond files.")
18539 (home-page "https://pypi.org/project/python-ly/")
18540 (license license:gpl2+)))
18541
18542(define-public python-appdirs
18543 (package
18544 (name "python-appdirs")
18545 (version "1.4.4")
18546 (source
18547 (origin
18548 (method url-fetch)
18549 (uri (pypi-uri "appdirs" version))
18550 (sha256
18551 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18552 (build-system pyproject-build-system)
18553 (arguments (list #:test-backend #~'unittest))
18554 (native-inputs (list python-setuptools))
18555 (home-page "https://github.com/ActiveState/appdirs")
18556 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18557 (description
18558 "This module provides a portable way of finding out where user data
18559should be stored on various operating systems.")
18560 (license license:expat)))
18561
18562(define-public python-gorilla
18563 (package
18564 (name "python-gorilla")
18565 (version "0.5.0")
18566 (source
18567 (origin
18568 (method git-fetch)
18569 (uri (git-reference
18570 (url "https://github.com/christophercrouzet/gorilla")
18571 (commit (string-append "v" version))))
18572 (file-name (git-file-name name version))
18573 (sha256
18574 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18575 (build-system pyproject-build-system)
18576 (arguments (list #:test-backend #~'unittest))
18577 (native-inputs (list python-setuptools))
18578 (home-page "https://github.com/christophercrouzet/gorilla")
18579 (synopsis "Convenient monkey patching with Python")
18580 (description
18581 "Gorilla is a Python library that provides a convenient approach to
18582monkey patching. Monkey patching is the process of modifying module and
18583class attributes at runtime with the purpose of replacing or extending
18584third-party code.")
18585 (license license:expat)))
18586
18587(define-public python-llfuse
18588 (package
18589 (name "python-llfuse")
18590 (version "1.5.1")
18591 (source
18592 (origin
18593 (method git-fetch)
18594 (uri (git-reference
18595 (url "https://github.com/python-llfuse/python-llfuse")
18596 (commit (string-append "release-" version))))
18597 (file-name (git-file-name name version))
18598 (sha256
18599 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18600 (build-system pyproject-build-system)
18601 (arguments
18602 (list
18603 #:test-flags
18604 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18605 #:phases
18606 #~(modify-phases %standard-phases
18607 (add-before 'build 'build-cython
18608 (lambda _
18609 (invoke "python" "setup.py" "build_cython"))))))
18610 (inputs (list fuse-2 attr))
18611 (native-inputs
18612 (list pkg-config python-cython python-pytest python-setuptools))
18613 (synopsis "Python bindings for FUSE")
18614 (description
18615 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18616 (home-page "https://github.com/python-llfuse/python-llfuse")
18617 (license license:lgpl2.0+)))
18618
18619(define-public python-msgpack
18620 (package
18621 (name "python-msgpack")
18622 (version "1.1.2")
18623 (source
18624 (origin
18625 (method url-fetch)
18626 (uri (pypi-uri "msgpack" version))
18627 (sha256
18628 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18629 (build-system pyproject-build-system)
18630 (native-inputs
18631 (list python-pytest
18632 python-setuptools))
18633 (home-page "https://msgpack.org/")
18634 (synopsis "MessagePack (de)serializer")
18635 (description "MessagePack is a fast, compact binary serialization format,
18636suitable for similar data to JSON. This package provides CPython bindings for
18637reading and writing MessagePack data.")
18638 (license license:asl2.0)))
18639
18640(define-public python-openstep-plist
18641 (package
18642 (name "python-openstep-plist")
18643 (version "0.5.2")
18644 (source
18645 (origin
18646 (method git-fetch)
18647 (uri (git-reference
18648 (url "https://github.com/fonttools/openstep-plist")
18649 (commit (string-append "v" version))))
18650 (file-name (git-file-name name version))
18651 (sha256
18652 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18653 (build-system pyproject-build-system)
18654 (native-inputs
18655 (list python-cython
18656 python-pytest
18657 python-setuptools-scm
18658 python-setuptools))
18659 (home-page "https://github.com/fonttools/openstep-plist")
18660 (synopsis "OpenStep plist parser and writer")
18661 (description
18662 "This package provides a parser for the \"old style\" OpenStep property
18663list format (also known as ASCII plist), written in Cython.")
18664 (license license:expat)))
18665
18666(define-public python-resolvelib
18667 (package
18668 (name "python-resolvelib")
18669 ;; Use latest commit, because last release, 1.2.1 is incompatible
18670 ;; with python-packaging 26,
18671 (properties '((commit . "a0cb7c50b78028f840b238d8e1c391e0546f2325")
18672 (revision . "0")))
18673 (version (git-version "1.2.1"
18674 (assoc-ref properties 'revision)
18675 (assoc-ref properties 'commit)))
18676 (source
18677 (origin
18678 (method git-fetch)
18679 (uri (git-reference
18680 (url "https://github.com/sarugaku/resolvelib")
18681 (commit (assoc-ref properties 'commit))))
18682 (file-name (git-file-name name version))
18683 (sha256
18684 (base32 "1f00jlcv7fal4y6iyvqsycc6b5mkvxgc0jdddbkm1jcci1qy1yfl"))))
18685 (build-system pyproject-build-system)
18686 (native-inputs
18687 (list python-packaging
18688 python-pytest
18689 python-setuptools
18690 python-wheel))
18691 (home-page "https://github.com/sarugaku/resolvelib")
18692 (synopsis "Abstract dependencies resolver")
18693 (description
18694 "The ResolveLib library provides a @code{Resolver} class that includes
18695dependency resolution logic.")
18696 (license license:isc)))
18697
18698;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18699;; 2022. It is now read-only.
18700(define-public python-commonmark
18701 (package
18702 (name "python-commonmark")
18703 (version "0.9.1")
18704 (source
18705 (origin
18706 (method url-fetch)
18707 (uri (pypi-uri "commonmark" version))
18708 (sha256
18709 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18710 (build-system pyproject-build-system)
18711 (native-inputs
18712 (list python-setuptools))
18713 (home-page "https://github.com/readthedocs/commonmark.py")
18714 (synopsis "Python parser for the CommonMark Markdown spec")
18715 (description
18716 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18717Markdown parser and renderer for the CommonMark specification, using only
18718native modules.")
18719 (license license:bsd-3)))
18720
18721(define-public python-immutables
18722 (package
18723 (name "python-immutables")
18724 (version "0.21")
18725 (source
18726 (origin
18727 (method git-fetch)
18728 (uri (git-reference
18729 (url "https://github.com/MagicStack/immutables")
18730 (commit (string-append "v" version))))
18731 (file-name (git-file-name name version))
18732 (sha256
18733 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18734 (build-system pyproject-build-system)
18735 (arguments
18736 (list #:phases #~(modify-phases %standard-phases
18737 (add-after 'unpack 'remove-mypy-dependency
18738 (lambda _
18739 (delete-file "tests/test_mypy.py")
18740 (delete-file "tests/conftest.py"))))))
18741 (native-inputs
18742 (list python-pytest python-setuptools python-wheel))
18743 (home-page "https://github.com/MagicStack/immutables")
18744 (synopsis "High-performance immutable mapping type for Python")
18745 (description
18746 "An immutable mapping type for Python. The underlying datastructure is a
18747Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18748functional languages.")
18749 (license license:asl2.0)))
18750
18751(define-public python-prettytable
18752 (package
18753 (name "python-prettytable")
18754 (version "3.12.0")
18755 (source
18756 (origin
18757 (method url-fetch)
18758 (uri (pypi-uri "prettytable" version))
18759 (sha256
18760 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18761 (build-system pyproject-build-system)
18762 (native-inputs
18763 (list python-hatchling
18764 python-hatch-vcs
18765 python-pytest
18766 python-pytest-lazy-fixtures
18767 python-setuptools-scm))
18768 (propagated-inputs
18769 (list python-wcwidth))
18770 (home-page "https://github.com/jazzband/prettytable")
18771 (synopsis "Display tabular data in an ASCII table format")
18772 (description
18773 "A library designed to represent tabular data in visually appealing ASCII
18774tables. PrettyTable allows for selection of which columns are to be printed,
18775independent alignment of columns (left or right justified or centred) and
18776printing of sub-tables by specifying a row range.")
18777 (license license:bsd-3)))
18778
18779(define-public python-rtf-tokenize
18780 (package
18781 (name "python-rtf-tokenize")
18782 (version "1.0.1")
18783 (source (origin
18784 (method url-fetch)
18785 (uri (pypi-uri "rtf_tokenize" version))
18786 (sha256
18787 (base32
18788 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18789 (build-system pyproject-build-system)
18790 (native-inputs (list python-pytest python-setuptools python-wheel))
18791 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18792 (synopsis "Simple RTF tokenizer")
18793 (description "This package is a simple RTF tokenizer.")
18794 (license license:gpl2+)))
18795
18796(define-public python-sniffio
18797 (package
18798 (name "python-sniffio")
18799 (version "1.3.1")
18800 (source
18801 (origin
18802 (method url-fetch)
18803 (uri (pypi-uri "sniffio" version))
18804 (sha256
18805 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18806 (build-system pyproject-build-system)
18807 (arguments
18808 (list
18809 #:test-flags
18810 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18811 (native-inputs
18812 (list python-pytest python-setuptools))
18813 (home-page "https://github.com/python-trio/sniffio")
18814 (synopsis "Detect which async library a program is running under")
18815 (description
18816 "This package detects which async library a program is running under. It
18817supports multiple async I/O packages, like Trio, and asyncio.")
18818 ;; Either license applies.
18819 (license (list license:expat license:asl2.0))))
18820
18821(define-public python-snuggs
18822 (package
18823 (name "python-snuggs")
18824 (version "1.4.7")
18825 (source (origin
18826 (method url-fetch)
18827 (uri (pypi-uri "snuggs" version))
18828 (sha256
18829 (base32
18830 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18831 (build-system pyproject-build-system)
18832 (propagated-inputs (list python-numpy python-pyparsing))
18833 (native-inputs (list python-hypothesis python-pytest python-setuptools
18834 python-wheel))
18835 (home-page "https://github.com/mapbox/snuggs")
18836 (synopsis "Snuggs are S-expressions for Numpy")
18837 (description "Snuggs are S-expressions for Numpy.")
18838 (license license:expat)))
18839
18840(define-public python-geojson
18841 (package
18842 (name "python-geojson")
18843 (version "3.2.0")
18844 (source
18845 (origin
18846 (method url-fetch)
18847 (uri (pypi-uri "geojson" version))
18848 (sha256
18849 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18850 (build-system pyproject-build-system)
18851 (native-inputs (list python-pytest python-setuptools))
18852 (home-page "https://github.com/jazzband/geojson")
18853 (synopsis "Python bindings and utilities for GeoJSON")
18854 (description
18855 "This package provides Python bindings and utilities for
18856@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18857structures.")
18858 (license license:bsd-3)))
18859
18860;; pyowm only accepts a version less than version 3.
18861(define-public python-geojson-for-pyowm
18862 (package
18863 (inherit python-geojson)
18864 (version "2.5.0")
18865 (source
18866 (origin
18867 (method url-fetch)
18868 (uri (pypi-uri "geojson" version))
18869 (sha256
18870 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18871 (arguments
18872 ;; https://github.com/jazzband/geojson/issues/175
18873 (list #:tests? #f))))
18874
18875(define-public python-gpxpy
18876 (package
18877 (name "python-gpxpy")
18878 (version "1.6.2")
18879 (source
18880 (origin
18881 (method url-fetch)
18882 (uri (pypi-uri "gpxpy" version))
18883 (sha256
18884 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18885 (build-system pyproject-build-system)
18886 (arguments
18887 (list #:test-backend #~'unittest))
18888 (native-inputs
18889 (list python-setuptools))
18890 (home-page "https://github.com/tkrajina/gpxpy")
18891 (synopsis "Python GPX parser")
18892 (description "GPX file parser and GPS track manipulation library.")
18893 (license license:asl2.0)))
18894
18895(define-public python-get-version
18896 (package
18897 (name "python-get-version")
18898 (version "3.5.5")
18899 (source
18900 (origin
18901 (method url-fetch)
18902 (uri (pypi-uri "get_version" version))
18903 (sha256
18904 (base32
18905 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18906 (build-system pyproject-build-system)
18907 (arguments
18908 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18909 ;; lack of git metadata in the checkout.
18910 (list #:tests? #f))
18911 (native-inputs (list python-flit-core))
18912 (propagated-inputs (list python-dunamai))
18913 (home-page "https://github.com/flying-sheep/get_version")
18914 (synopsis "Version helper in the spirit of versioneer")
18915 (description
18916 "This package provides a version helper that lets you automatically use
18917the latest @code{vX.X.X} Git tag as the version in your Python package. It
18918also supports getting the version from Python source distributions or, once
18919your package is installed, via @code{pkg_resources} (part of
18920@code{setuptools}).")
18921 (license license:gpl3+)))
18922
18923(define-public python-filetype
18924 (package
18925 (name "python-filetype")
18926 (version "1.2.0")
18927 (source
18928 (origin
18929 (method url-fetch)
18930 (uri (pypi-uri "filetype" version))
18931 (sha256
18932 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18933 (build-system pyproject-build-system)
18934 (native-inputs (list python-pytest
18935 python-pytest-benchmark
18936 python-setuptools
18937 python-wheel))
18938 (home-page "https://github.com/h2non/filetype.py")
18939 (synopsis "Infer file type and MIME type of any file/buffer")
18940 (description "@code{filetype} is a small and dependency free Python
18941package to infer file type and MIME type checking the magic numbers
18942signature of a file or buffer.")
18943 (license license:expat)))
18944
18945(define-public python-cachelib
18946 (package
18947 (name "python-cachelib")
18948 (version "0.13.0")
18949 (source
18950 (origin
18951 (method url-fetch)
18952 (uri (pypi-uri "cachelib" version))
18953 (sha256
18954 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18955 (build-system pyproject-build-system)
18956 (arguments
18957 ;; These tests use a remote connection.
18958 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18959 "--ignore" "tests/test_mongodb_cache.py")))
18960 (native-inputs
18961 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18962 (home-page "https://github.com/pallets-eco/cachelib")
18963 (synopsis "Collection of cache libraries")
18964 (description "Cachelib is a library extracted from @code{werkzeug} which
18965provides a collection of cache libraries in the same API interface.")
18966 (license license:bsd-3)))
18967
18968(define-public python-pylru
18969 (package
18970 (name "python-pylru")
18971 (version "1.2.0")
18972 (source
18973 (origin
18974 (method git-fetch)
18975 (uri (git-reference
18976 (url "https://github.com/jlhutch/pylru")
18977 (commit (string-append "v" version))))
18978 (file-name (git-file-name name version))
18979 (sha256
18980 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18981 (build-system pyproject-build-system)
18982 (arguments
18983 (list
18984 #:test-backend #~'custom
18985 #:test-flags #~(list "test.py")))
18986 (native-inputs (list python-pytest python-setuptools))
18987 (home-page "https://github.com/jlhutch/pylru")
18988 (synopsis "Least recently used (LRU) cache implementation")
18989 (description
18990 "Pylru implements a true LRU cache along with several support classes.
18991Pylru provides a cache class with a simple dict interface. It also provides
18992classes to wrap any object that has a dict interface with a cache. Both
18993write-through and write-back semantics are supported. Pylru also provides
18994classes to wrap functions in a similar way, including a function decorator.")
18995 (license license:gpl2+)))
18996
18997(define-public python-legacy-api-wrap
18998 (package
18999 (name "python-legacy-api-wrap")
19000 (version "1.5")
19001 (source
19002 (origin
19003 (method url-fetch)
19004 (uri (pypi-uri "legacy_api_wrap" version))
19005 (sha256
19006 (base32
19007 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
19008 (build-system pyproject-build-system)
19009 (native-inputs
19010 (list python-hatch-docstring-description
19011 python-hatch-vcs
19012 python-hatchling
19013 python-pytest
19014 python-typer))
19015 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
19016 (synopsis "Legacy API wrapper")
19017 (description "This module defines a decorator to wrap legacy APIs. The
19018primary use case is APIs defined before keyword-only parameters existed.")
19019 (license license:gpl3+)))
19020
19021(define-public python-langdetect
19022 (package
19023 (name "python-langdetect")
19024 (version "1.0.9")
19025 (source
19026 (origin
19027 (method url-fetch)
19028 (uri (pypi-uri "langdetect" version))
19029 (sha256
19030 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
19031 (build-system pyproject-build-system)
19032 (native-inputs
19033 (list python-pytest
19034 python-setuptools))
19035 (propagated-inputs
19036 (list python-six))
19037 (home-page "https://github.com/Mimino666/langdetect")
19038 (synopsis "Language detection library")
19039 (description
19040 "This library is a port of Nakatani Shuyo's language-detection library
19041(version from 03/03/2014) to Python.")
19042 (license license:expat)))
19043
19044(define-public python-pyasn1
19045 (package
19046 (name "python-pyasn1")
19047 (version "0.6.3")
19048 (source
19049 (origin
19050 (method git-fetch)
19051 (uri (git-reference
19052 (url "https://github.com/pyasn1/pyasn1")
19053 (commit (string-append "v" version))))
19054 (file-name (git-file-name name version))
19055 (sha256
19056 (base32 "0b22m94j163nikfkl031hgrfasb6wgqp3374b8dbr84jalkl0ykw"))))
19057 (build-system pyproject-build-system)
19058 (arguments
19059 (list #:test-backend #~'unittest
19060 #:test-flags #~(list "discover" "tests")))
19061 (native-inputs
19062 (list python-setuptools))
19063 (home-page "https://github.com/pyasn1/pyasn1")
19064 (synopsis "ASN.1 types and codecs")
19065 (description
19066 "This is an implementation of ASN.1 types and codecs in Python. It is
19067suitable for a wide range of protocols based on the ASN.1 specification.")
19068 (license license:bsd-2)))
19069
19070(define-public python-pyasn1-modules
19071 (package
19072 (name "python-pyasn1-modules")
19073 (version "0.4.2")
19074 (source
19075 (origin
19076 (method url-fetch)
19077 (uri (pypi-uri "pyasn1_modules" version))
19078 (sha256
19079 (base32
19080 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
19081 (build-system pyproject-build-system)
19082 (arguments
19083 (list #:test-backend #~'unittest
19084 #:test-flags #~(list "discover" "tests")))
19085 (native-inputs
19086 (list python-setuptools))
19087 (propagated-inputs
19088 (list python-pyasn1))
19089 (home-page "https://github.com/pyasn1/pyasn1-modules")
19090 (synopsis "ASN.1 codec implementations")
19091 (description
19092 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
19093implementations of ASN.1-based codecs and protocols.")
19094 (license license:bsd-3)))
19095
19096(define-public python-asn1tools
19097 (package
19098 (name "python-asn1tools")
19099 (version "0.167.0")
19100 (source
19101 (origin
19102 (method url-fetch)
19103 (uri (pypi-uri "asn1tools" version))
19104 (sha256
19105 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
19106 (build-system pyproject-build-system)
19107 (arguments
19108 (list
19109 #:test-flags
19110 #~(list "-k" (string-join
19111 ;; Tests fail with error: IndexError: string index out of
19112 ;; range. It may be some incompatibility with pyparsing,
19113 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
19114 (list "not test_c_source"
19115 "test_command_line_generate_c_source_oer"
19116 "test_command_line_generate_c_source_uper"
19117 "test_command_line_generate_rust_source_uper"
19118 "test_missing_parameterized_value"
19119 "test_c_source"
19120 "test_parse_parameterization")
19121 " and not "))))
19122 (native-inputs
19123 (list python-pytest
19124 python-setuptools
19125 python-wheel))
19126 (propagated-inputs
19127 (list python-bitstruct
19128 python-diskcache
19129 python-prompt-toolkit
19130 python-pyparsing))
19131 (home-page "https://github.com/eerimoq/asn1tools")
19132 (synopsis "ASN.1 parsing, encoding and decoding")
19133 (description "This package provides ASN.1 parsing, encoding and decoding
19134for Python, including constraints checking. It supports several
19135codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
19136for OER and UPER.")
19137 (license license:expat)))
19138
19139(define-public python-idna
19140 (package
19141 (name "python-idna")
19142 (version "3.18")
19143 (source
19144 (origin
19145 (method git-fetch)
19146 (uri (git-reference
19147 (url "https://github.com/kjd/idna")
19148 (commit (string-append "v" version))))
19149 (file-name (git-file-name name version))
19150 (sha256
19151 (base32 "0phrdwf6gqjpbs5kv3y6wbkvvpmq6kmjby674s8b9f6dsgzz4wpn"))))
19152 (build-system pyproject-build-system)
19153 (native-inputs
19154 (list python-flit-core python-pytest))
19155 (home-page "https://github.com/kjd/idna")
19156 (synopsis "Internationalized domain names in applications")
19157 (description
19158 "This is a library to support the Internationalised Domain Names in
19159Applications (IDNA) protocol as specified in RFC 5891. This version of the
19160protocol is often referred to as “IDNA2008” and can produce different results
19161from the earlier standard from 2003. The library is also intended to act as a
19162suitable drop-in replacement for the “encodings.idna” module that comes with
19163the Python standard library but currently only supports the older 2003
19164specification.")
19165 (license license:bsd-4)))
19166
19167(define-public python-libsass
19168 (package
19169 (name "python-libsass")
19170 (version "0.23.0")
19171 (source
19172 (origin
19173 ;; PyPI tarball is missing some test files.
19174 (method git-fetch)
19175 (uri (git-reference
19176 (url "https://github.com/sass/libsass-python")
19177 (commit version)))
19178 (file-name (git-file-name name version))
19179 (sha256
19180 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
19181 (build-system pyproject-build-system)
19182 (arguments
19183 '(#:phases
19184 (modify-phases %standard-phases
19185 ;; Use Guix package of libsass instead of compiling from a checkout.
19186 (add-before 'build 'set-libsass
19187 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
19188 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
19189 ;; https://github.com/sass/libsass-python/issues/440. It passed with
19190 ;; [email protected] which requires rebuild the world (1200+ packages),
19191 ;; remove when v3.6.5 is available.
19192 (add-before 'check 'silent-failing-tests
19193 (lambda _
19194 (substitute* "sasstests.py"
19195 (("def test_build_one")
19196 "def __off_test_build_one")
19197 (("def test_stack_trace_formatting")
19198 "def __off_test_stack_trace_formatting"))))
19199 (replace 'check
19200 (lambda* (#:key tests? #:allow-other-keys)
19201 (when tests?
19202 (invoke "pytest" "sasstests.py"))))
19203 (add-after 'install 'delete-test
19204 (lambda* (#:key inputs outputs #:allow-other-keys)
19205 ;; Delete sasstests.py because it attempts to open a file
19206 ;; that is not installed when loaded, which breaks the sanity
19207 ;; check.
19208 (delete-file (string-append
19209 (assoc-ref outputs "out")
19210 "/lib/python"
19211 (python-version
19212 (dirname (dirname
19213 (search-input-file inputs "bin/python"))))
19214 "/site-packages/sasstests.py")))))))
19215 (native-inputs
19216 (list python-pytest python-setuptools python-werkzeug python-wheel))
19217 (inputs
19218 (list libsass))
19219 (home-page "https://sass.github.io/libsass-python/")
19220 (synopsis "Straightforward binding of libsass for Python")
19221 (description
19222 "This package provides a simple Python extension module @code{sass} which
19223is binding LibSass.")
19224 (license license:expat)))
19225
19226;; It may be removed after 2026-01-24.
19227(define-deprecated/public-alias python-path-bootstrap python-path)
19228
19229(define-public python-pip-run
19230 (package
19231 (name "python-pip-run")
19232 (version "8.8.0")
19233 (source
19234 (origin
19235 (method git-fetch)
19236 (uri (git-reference
19237 (url "https://github.com/jaraco/pip-run")
19238 (commit (string-append "v" version))))
19239 (file-name (git-file-name name version))
19240 (sha256
19241 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
19242 (build-system pyproject-build-system)
19243 (arguments
19244 (list
19245 #:tests? (not (%current-target-system))
19246 #:test-flags
19247 #~(list "-k" (string-append
19248 ;; Do not test the myproject.toml build as it tries
19249 ;; to pull dependencies from the internet.
19250 "not project "
19251 ;; These tests attempt to install dependencies from
19252 ;; the network and fail.
19253 "and not test_pkg_imported "
19254 "and not test_pkg_loaded_from_alternate_index "
19255 "and not test_pkg_loaded_from_url "))))
19256 (native-inputs
19257 (list python-nbformat
19258 python-pygments
19259 python-pytest
19260 python-setuptools
19261 python-setuptools-scm))
19262 (propagated-inputs
19263 (list python-autocommand
19264 python-packaging
19265 python-path
19266 python-pip))
19267 (home-page "https://github.com/jaraco/pip-run")
19268 (synopsis "Dynamic dependency loader for Python")
19269 (description "The @command{pip-run} command provides on-demand temporary
19270package installation for a single interpreter run. It replaces this series of
19271commands:
19272@example
19273$ virtualenv --python pythonX.X --system-site-packages /tmp/env
19274$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
19275$ /tmp/env/bin/python ...
19276$ rm -rf /tmp/env
19277@end example")
19278 (license license:expat)))
19279
19280;; It may be removed after 2026-01-24.
19281(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
19282
19283(define-public python-libarchive-c
19284 (package
19285 (name "python-libarchive-c")
19286 (version "5.2")
19287 (source (origin
19288 (method url-fetch)
19289 (uri (pypi-uri "libarchive_c" version))
19290 (sha256
19291 (base32
19292 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
19293 (build-system pyproject-build-system)
19294 (arguments
19295 (list
19296 #:phases
19297 #~(modify-phases %standard-phases
19298 (add-before 'build 'reference-libarchive
19299 (lambda* (#:key inputs #:allow-other-keys)
19300 ;; Retain the absolute file name of libarchive.so.
19301 (substitute* "libarchive/ffi.py"
19302 (("find_library\\('archive'\\)")
19303 (string-append
19304 "'"
19305 (search-input-file inputs "/lib/libarchive.so")
19306 "'"))))))))
19307 (native-inputs
19308 (list python-setuptools python-wheel python-pytest))
19309 (inputs
19310 (list libarchive))
19311 (home-page "https://github.com/Changaco/python-libarchive-c")
19312 (synopsis "Python interface to libarchive")
19313 (description
19314 "This package provides Python bindings to libarchive, a C library to
19315access possibly compressed archives in many different formats. It uses
19316Python's @code{ctypes} foreign function interface (FFI).")
19317 (license license:lgpl2.0+)))
19318
19319(define-public python-file
19320 (package/inherit file
19321 (name "python-file")
19322 (build-system pyproject-build-system)
19323 (arguments
19324 (list
19325 #:tests? #f ;no tests
19326 #:phases
19327 #~(modify-phases %standard-phases
19328 (add-before 'build 'change-directory
19329 (lambda _
19330 (chdir "python")))
19331 (add-before 'build 'set-library-file-name
19332 (lambda* (#:key inputs #:allow-other-keys)
19333 (substitute* "magic.py"
19334 (("find_library\\('magic'\\)")
19335 (format #f "~s" (search-input-file inputs
19336 "lib/libmagic.so")))))))))
19337 (inputs (list file))
19338 (native-inputs (cons* python-setuptools
19339 (if (%current-target-system)
19340 (list this-package)
19341 '())))
19342 (synopsis "Python bindings to the libmagic file type guesser")
19343 (description "This package provides Python bindings to the libmagic file
19344type guesser.
19345
19346Note that this module and the @code{python-magic} module both provide a
19347@file{magic.py} file; these two modules, which are different and were
19348developed separately, both serve the same purpose: provide Python bindings for
19349libmagic.")))
19350
19351(define-public python-pydemumble
19352 (package
19353 (name "python-pydemumble")
19354 (version "0.0.1")
19355 (source
19356 (origin
19357 (method git-fetch)
19358 (uri (git-reference
19359 (url "https://github.com/angr/pydemumble")
19360 (commit (string-append "v" version))))
19361 (file-name (git-file-name name version))
19362 (sha256
19363 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19364 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19365 (build-system pyproject-build-system)
19366 (arguments
19367 (list
19368 #:test-flags
19369 #~(list "discover" "-s" "tests")
19370 #:phases
19371 #~(modify-phases %standard-phases
19372 (add-after 'unpack 'set-demumble-source
19373 (lambda* _
19374 ;; demumble is only a binary and not intended to be used as
19375 ;; a library. Therefore, python-pydemumble creates it's own
19376 ;; bindings for demumble, which are autogenerated from C code.
19377 (substitute* "CMakeLists.txt"
19378 (("src/demumble")
19379 #+(package-source demumble))))))))
19380 (native-inputs (list python-nanobind python-scikit-build-core))
19381 (home-page "https://github.com/angr/pydemumble")
19382 (synopsis "Python library for demangling symbol names")
19383 (description
19384 "This package provides a Python wrapper library for @code{demumble}, which
19385is a tool to demangle C++, Rust, and Swift symbol names.")
19386 (license license:bsd-2)))
19387
19388(define-public python-pydevd
19389 (package
19390 (name "python-pydevd")
19391 (version "3.2.3")
19392 (source
19393 (origin
19394 (method git-fetch)
19395 (uri (git-reference
19396 (url "https://github.com/fabioz/PyDev.Debugger")
19397 (commit (string-append
19398 "pydev_debugger_"
19399 (string-join (string-split version #\.) "_")))))
19400 (modules '((guix build utils)))
19401 (snippet '(begin
19402 ;; Delete pre-built binaries.
19403 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19404 ;; This source is generated via Cython.
19405 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19406 (file-name (git-file-name name version))
19407 (sha256
19408 (base32
19409 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19410 (build-system pyproject-build-system)
19411 (arguments
19412 (list
19413 #:test-flags
19414 #~(list "-n" (number->string (parallel-job-count))
19415 "-m" "not flaky"
19416 "-k"
19417 (string-join
19418 (list
19419 ;; The two "break_01" tests have been failing on
19420 ;; Python 3.10:
19421 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19422 "not test_set_pydevd_break_01 "
19423 ;; the GUI event loop requires an X server.
19424 "test_gui_event_loop_custom"
19425 ;; This test validates that 'pydevd' is not in the
19426 ;; exception message, but it is due to being part
19427 ;; of the build file name present in the message.
19428 "test_evaluate_exception_trace"
19429 ;; This test fail with TimeoutError, no message on stderr.
19430 "test_soft_terminate"
19431 "test_debugger_case_deadlock_interrupt_thread"
19432 ;; subprocess.CalledProcessError
19433 ;; Python 3.11/3.12 specific issue:
19434 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19435 "test_find_main_thread_id")
19436 " and not "))
19437 #:phases
19438 #~(modify-phases %standard-phases
19439 (add-after 'unpack 'fix-tests
19440 (lambda _
19441 (substitute* "tests_python/test_convert_utilities.py"
19442 ;; Add missing trailing '/'.
19443 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19444 (string-append all "/")))))
19445 (add-after 'unpack 'patch-command-paths
19446 (lambda* (#:key inputs #:allow-other-keys)
19447 (substitute* "_pydevd_bundle/pydevd_api.py"
19448 (("'kill'")
19449 (format #f "~s" (search-input-file inputs "bin/kill")))
19450 (("'pgrep'")
19451 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19452 (add-after 'unpack 'generate-sources
19453 (lambda _
19454 (setenv "PYTHONPATH" (getcwd))
19455 (invoke "python" "build_tools/build.py")))
19456 (add-after 'unpack 'adjust-attach-binary-name
19457 (lambda _
19458 (substitute*
19459 '("pydevd_tracing.py"
19460 "pydevd_attach_to_process/add_code_to_python_process.py")
19461 (("def get_(target|python_helper_lib)_filename.*" all)
19462 (format #f "~a return ~s~%" all
19463 (string-append #$output "/lib/attach.so"))))))
19464 (add-after 'unpack 'patch-gdb
19465 (lambda* (#:key inputs #:allow-other-keys)
19466 (substitute*
19467 "pydevd_attach_to_process/add_code_to_python_process.py"
19468 (("'gdb',")
19469 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19470 (add-after 'build 'build-attach-linux-binary
19471 (lambda _
19472 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19473 "-fPIC" "-nostartfiles"
19474 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19475 (add-before 'check 'pre-check
19476 (lambda* (#:key tests? #:allow-other-keys)
19477 (when tests?
19478 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19479 (add-after 'install 'install-attach-binary
19480 (lambda _
19481 (install-file "attach.so"
19482 (string-append #$output "/lib"))))
19483 ;; Some modules aren't designed to be loadable by themselves, such
19484 ;; as 'pydev_app_engine_debug_startup' and fail.
19485 (delete 'sanity-check))))
19486 (native-inputs
19487 (list python-cython
19488 python-numpy
19489 python-psutil
19490 python-pytest
19491 python-pytest-xdist
19492 python-setuptools
19493 python-trio
19494 python-untangle
19495 python-wheel))
19496 (inputs (list coreutils gdb/pinned procps))
19497 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19498 (synopsis "Python debugger")
19499 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19500and other @acronym{IDEs, Integrated Development Environments}.")
19501 (license license:epl1.0)))
19502
19503(define-public python-debugpy
19504 (package
19505 (name "python-debugpy")
19506 (version "1.8.17")
19507 (source
19508 (origin
19509 (method git-fetch)
19510 (uri (git-reference ;no tests in PyPI archive
19511 (url "https://github.com/microsoft/debugpy")
19512 (commit (string-append "v" version))))
19513 (file-name (git-file-name name version))
19514 (modules '((guix build utils)))
19515 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19516 ;; attach binary.
19517 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19518 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19519 (sha256
19520 (base32
19521 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19522 (build-system pyproject-build-system)
19523 (arguments
19524 (list
19525 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19526 #:phases
19527 #~(modify-phases %standard-phases
19528 (add-after 'unpack 'patch-sh-in-tests
19529 (lambda _
19530 (substitute* "tests/debugpy/test_run.py"
19531 (("#!/bin/sh")
19532 (string-append "#!" (which "sh"))))))
19533 (add-before 'build 'configure
19534 (lambda _
19535 ;; This adjusts the behavior of debugpy to load pydevd from
19536 ;; Python site packages.
19537 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19538 (native-inputs
19539 (list python-setuptools
19540 python-versioneer))
19541 (propagated-inputs
19542 (list python-pydevd))
19543 (home-page "https://aka.ms/debugpy")
19544 (synopsis "Debug Adapter Protocol Python implementation")
19545 (description "An implementation of the Debug Adapter Protocol for
19546Python.")
19547 (license license:expat)))
19548
19549(define-public python-debian
19550 (package
19551 (name "python-debian")
19552 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19553 (version "0.1.49")
19554 (source
19555 (origin
19556 ;; Use git-fetch, as pypi doesn't include test suite.
19557 (method git-fetch)
19558 (uri (git-reference
19559 (url home-page)
19560 (commit version)))
19561 (file-name (git-file-name name version))
19562 (sha256
19563 (base32
19564 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19565 (modules '((guix build utils)))
19566 (snippet
19567 #~(begin
19568 ;; python-apt, apt and dpkg are not yet available in guix,
19569 ;; and these tests heavily depend on them.
19570 (for-each delete-file
19571 '("lib/debian/tests/test_deb822.py"
19572 "lib/debian/tests/test_debfile.py"))
19573
19574 ;; for reproducible builds, otherwise python-debian
19575 ;; generates a _version.py including the date
19576 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19577 (substitute* "lib/debian/_version.py"
19578 (("__CHANGELOG_VERSION__") #$version))))))
19579 (build-system pyproject-build-system)
19580 (native-inputs
19581 (list python-pytest python-setuptools))
19582 (propagated-inputs
19583 (list python-six python-chardet))
19584 (synopsis "Debian package related modules")
19585 (description
19586 "This package provides Python modules that abstract many formats of
19587Debian-related files, such as:
19588@itemize
19589@item Debtags information;
19590@item @file{debian/changelog} files;
19591@item packages files, pdiffs;
19592@item control files of single or multiple RFC822-style paragraphs---e.g.
19593 @file{debian/control}, @file{.changes}, @file{.dsc};
19594@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19595 contained files and meta-information.
19596@end itemize")
19597 ;; Modules are either GPLv2+ or GPLv3+.
19598 (license license:gpl3+)))
19599
19600(define-public python-json-spec
19601 (package
19602 (name "python-json-spec")
19603 (version "0.12.0")
19604 (source
19605 (origin
19606 (method git-fetch) ;no tests in PyPI archive
19607 (uri (git-reference
19608 (url "https://github.com/johnnoone/json-spec")
19609 (commit version)))
19610 (file-name (git-file-name name version))
19611 (sha256
19612 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19613 (build-system pyproject-build-system)
19614 (native-inputs
19615 (list python-pytest
19616 python-poetry-core))
19617 (propagated-inputs
19618 (list python-termcolor)) ;for the CLI
19619 (home-page "https://json-spec.readthedocs.io/")
19620 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19621 (description
19622 "This Python library implements several JSON specs, like JSON Schema,
19623JSON Reference and JSON Pointer.")
19624 (license license:bsd-3)))
19625
19626(define-public python-fastbencode
19627 (package
19628 (name "python-fastbencode")
19629 (version "0.3.9")
19630 (source
19631 (origin
19632 (method git-fetch)
19633 (uri (git-reference
19634 (url "https://github.com/breezy-team/fastbencode")
19635 (commit (string-append "v" version))))
19636 (file-name (git-file-name name version))
19637 (sha256
19638 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19639 (build-system pyproject-build-system)
19640 (arguments
19641 (list
19642 #:test-backend #~'unittest
19643 #:test-flags #~(list "tests.test_suite")
19644 #:imported-modules (append %cargo-build-system-modules
19645 %pyproject-build-system-modules)
19646 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19647 (guix build pyproject-build-system)
19648 (guix build utils))
19649 #:phases
19650 #~(modify-phases %standard-phases
19651 (add-after 'unpack 'prepare-cargo-build-system
19652 (lambda args
19653 (for-each
19654 (lambda (phase)
19655 (format #t "Running cargo phase: ~a~%" phase)
19656 (apply (assoc-ref cargo:%standard-phases phase)
19657 #:cargo-target #$(cargo-triplet)
19658 args))
19659 '(unpack-rust-crates
19660 configure
19661 check-for-pregenerated-files
19662 patch-cargo-checksums)))))))
19663 (inputs (cargo-inputs 'fastbencode))
19664 (native-inputs
19665 (append
19666 (list python-setuptools-rust
19667 rust
19668 `(,rust "cargo"))
19669 (or (and=> (%current-target-system)
19670 (compose list make-rust-sysroot))
19671 '())))
19672 (home-page "https://github.com/breezy-team/fastbencode")
19673 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19674 (description
19675 "The fastbencode Python package implements the bencode serialization
19676format for storing and transmitting loosely structured data, originally used
19677by BitTorrent.
19678
19679The format can encode four different types of values: byte strings, integers,
19680lists, and dictionaries (associative arrays). It's simple and unaffected by
19681endianness,
19682
19683This package includes both a pure-Python version and an optional C extension
19684based on Cython. Both provide the same functionality, but the C version has
19685significantly better performance.")
19686 (license (list license:expat ; _bencode_py.py
19687 license:gpl2+)))) ; __init__.py
19688
19689(define-public python-fastjsonschema
19690 (package
19691 (name "python-fastjsonschema")
19692 (version "2.21.1")
19693 (source
19694 (origin
19695 (method git-fetch) ; no tests in PyPI release
19696 (uri (git-reference
19697 (url "https://github.com/horejsek/python-fastjsonschema")
19698 (commit (string-append "v" version))))
19699 (file-name (git-file-name name version))
19700 (sha256
19701 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19702 (build-system pyproject-build-system)
19703 (arguments
19704 (list
19705 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19706 (native-inputs
19707 (list python-json-spec
19708 python-jsonschema
19709 python-pytest
19710 python-pytest-benchmark
19711 python-setuptools))
19712 (home-page "https://github.com/horejsek/python-fastjsonschema")
19713 (synopsis "Fast Python implementation of JSON schema")
19714 (description
19715 "This library implements validation of JSON documents by JSON schema for
19716drafts 04, 06 and 07.")
19717 (license license:bsd-3)))
19718
19719(define-public python-nbformat
19720 (package
19721 (name "python-nbformat")
19722 (version "5.10.4")
19723 ;; The PyPi release tarball lacks some test cases and test data.
19724 (source (origin
19725 (method git-fetch)
19726 (uri (git-reference
19727 (url "https://github.com/jupyter/nbformat")
19728 (commit (string-append "v" version))))
19729 (sha256
19730 (base32
19731 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19732 (file-name (git-file-name name version))))
19733 (build-system pyproject-build-system)
19734 (arguments
19735 (list
19736 #:phases
19737 #~(modify-phases %standard-phases
19738 ;; We don't want to use hatch-nodejs just to get a version string.
19739 (add-after 'unpack 'patch-pyproject
19740 (lambda _
19741 (substitute* "pyproject.toml"
19742 ((", \"hatch-nodejs-version\"") "")
19743 (("dynamic = \\[\"version\"\\]")
19744 (string-append "version = \"" #$version "\""))))))))
19745 (propagated-inputs
19746 (list python-fastjsonschema python-jsonschema python-jupyter-core
19747 python-traitlets))
19748 (native-inputs
19749 (list python-hatchling
19750 python-pep440
19751 python-pytest
19752 python-testpath))
19753 (home-page "https://jupyter.org")
19754 (synopsis "Jupyter Notebook format")
19755 (description "This package provides the reference implementation of the
19756Jupyter Notebook format and Python APIs for working with notebooks.")
19757 (license license:bsd-3)))
19758
19759(define-public python-nb-clean
19760 (package
19761 (name "python-nb-clean")
19762 (version "4.0.1")
19763 (source
19764 (origin
19765 (method git-fetch) ; no tests in PyPI
19766 (uri (git-reference
19767 (url "https://github.com/srstevenson/nb-clean")
19768 (commit version)))
19769 (file-name (git-file-name name version))
19770 (sha256
19771 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19772 (build-system pyproject-build-system)
19773 (native-inputs (list python-poetry-core
19774 python-pytest
19775 python-pytest-mock))
19776 (propagated-inputs (list python-nbformat))
19777 (home-page "https://github.com/srstevenson/nb-clean")
19778 (synopsis "Clean Jupyter notebooks for versioning")
19779 (description "This package cleans Jupyter notebooks of cell execution
19780counts, metadata, outputs, and empty cells, preparing them for committing to
19781version control. It provides a Git filter to automatically clean notebooks
19782before they're staged, and can also be used with other version control
19783systems, as a command line tool, and as a Python library.")
19784 (license license:isc)))
19785
19786(define-public python-entrypoints
19787 (package
19788 (name "python-entrypoints")
19789 (version "0.4")
19790 (source
19791 (origin
19792 (method url-fetch)
19793 (uri (pypi-uri "entrypoints" version))
19794 (sha256
19795 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19796 (build-system pyproject-build-system)
19797 (native-inputs
19798 (list python-flit-core
19799 python-pytest))
19800 (home-page "https://github.com/takluyver/entrypoints")
19801 (synopsis "Discover and load entry points from installed Python packages")
19802 (description "Entry points are a way for Python packages to advertise
19803objects with some common interface. The most common examples are
19804@code{console_scripts} entry points, which define shell commands by
19805identifying a Python function to run. The @code{entrypoints} module contains
19806functions to find and load entry points.")
19807 (license license:expat)))
19808
19809(define-public python-epc
19810 (package
19811 (name "python-epc")
19812 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19813 (revision . "0")))
19814 (version (git-version "0.0.5"
19815 (assoc-ref properties 'revision)
19816 (assoc-ref properties 'commit)))
19817 (source
19818 (origin
19819 (method git-fetch)
19820 (uri (git-reference
19821 (url "https://github.com/tkf/python-epc")
19822 (commit (assoc-ref properties 'commit))))
19823 (file-name (git-file-name name version))
19824 (sha256
19825 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19826 (build-system pyproject-build-system)
19827 (arguments (list #:test-backend #~'nose))
19828 (propagated-inputs (list python-sexpdata))
19829 (native-inputs (list python-pynose python-setuptools))
19830 (home-page "https://github.com/tkf/python-epc")
19831 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19832 (description
19833 "Python-EPC can call elisp functions from Python and Python functions
19834from elisp.")
19835 (license license:gpl3)))
19836
19837(define-public python-forex-python
19838 (package
19839 (name "python-forex-python")
19840 (version "1.5")
19841 (source
19842 (origin
19843 (method git-fetch)
19844 (uri (git-reference
19845 (url "https://github.com/MicroPyramid/forex-python")
19846 (commit version)))
19847 (file-name (git-file-name name version))
19848 (sha256
19849 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19850 (build-system pyproject-build-system)
19851 (arguments (list #:tests? #f)) ; Tests require online data.
19852 (native-inputs (list python-setuptools))
19853 (propagated-inputs (list python-requests python-simplejson))
19854 (home-page "https://github.com/MicroPyramid/forex-python")
19855 (synopsis "Foreign exchange rates and currency conversion")
19856 (description
19857 "@code{python-forex-python} can be used to manipulate foreign
19858exchange rates and to operate currency conversions.
19859
19860Features:
19861@itemize
19862@item List all currency rates.
19863@item BitCoin price for all currencies.
19864@item Converting amount to BitCoins.
19865@item Get historical rates for any day since 1999.
19866@item Conversion rate for one currency(ex; USD to INR).
19867@item Convert amount from one currency to other.('USD 10$' to INR).
19868@item Currency symbols.
19869@item Currency names.
19870@end itemize")
19871 (license license:expat)))
19872
19873(define-public python-simpleeval
19874 (package
19875 (name "python-simpleeval")
19876 (version "0.9.12")
19877 (source
19878 (origin
19879 (method git-fetch)
19880 (uri (git-reference
19881 (url "https://github.com/danthedeckie/simpleeval")
19882 (commit version)))
19883 (file-name (git-file-name name version))
19884 (sha256
19885 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19886 (build-system pyproject-build-system)
19887 (native-inputs (list python-pytest python-setuptools))
19888 (home-page "https://github.com/danthedeckie/simpleeval")
19889 (synopsis "Simple, safe single expression evaluator library")
19890 (description
19891 "This package provides a quick single file library for easily adding
19892evaluatable expressions into python projects. Say you want to allow a user
19893to set an alarm volume, which could depend on the time of day, alarm level,
19894how many previous alarms had gone off, and if there is music playing at the
19895time.")
19896 (license license:expat)))
19897
19898(define-public python-haas
19899 ;; A recent revision is required to avoid obsoleted dependencies.
19900 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19901 (revision "0"))
19902 (package
19903 (name "python-haas")
19904 (version (git-version "0.9.0" revision commit))
19905 (source
19906 (origin
19907 (method git-fetch)
19908 (uri (git-reference
19909 (url "https://github.com/scalative/haas")
19910 (commit commit)))
19911 (file-name (git-file-name name version))
19912 (sha256
19913 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19914 (build-system pyproject-build-system)
19915 (propagated-inputs
19916 (list python-stevedore))
19917 (native-inputs
19918 (list python-coverage
19919 python-pytest
19920 python-setuptools
19921 python-testfixtures))
19922 (home-page "https://github.com/scalative/haas")
19923 (synopsis "Extensible Python test runner")
19924 (description "Haas is a python test runner that is backward-compatible
19925with Python's built-in unittest test-cases, but supports more advanced
19926features, such as project-specific plugins.")
19927 (license license:bsd-3))))
19928
19929(define-public python-okonomiyaki
19930 (package
19931 (name "python-okonomiyaki")
19932 (version "3.0.0")
19933 (source
19934 (origin
19935 (method git-fetch)
19936 (uri (git-reference
19937 (url "https://github.com/enthought/okonomiyaki/")
19938 (commit version)))
19939 (file-name (git-file-name name version))
19940 (sha256
19941 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19942 (build-system pyproject-build-system)
19943 (arguments
19944 (list
19945 #:phases
19946 #~(modify-phases %standard-phases
19947 ;; Unknown platform.
19948 (add-before 'check 'delete-fail-tests
19949 (lambda _
19950 (delete-file-recursively
19951 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19952 (native-inputs
19953 (list python-distro
19954 python-haas
19955 python-jsonschema
19956 python-packaging
19957 python-parameterized
19958 python-pytest
19959 python-setuptools
19960 python-testfixtures
19961 python-zipfile2))
19962 (home-page "https://github.com/enthought/okonomiyaki/")
19963 (synopsis "Python library to deal with Enthought-specific metadata")
19964 (description
19965 "Okonomiyaki is a self-contained library aiming at consolidating
19966low-level code used in Enthought-specific egg and runtime archives.")
19967 (license license:bsd-3)))
19968
19969(define-public python-nbconvert
19970 (package
19971 (name "python-nbconvert")
19972 (version "7.17.0")
19973 (source
19974 (origin
19975 (method url-fetch)
19976 (uri (pypi-uri "nbconvert" version))
19977 (sha256
19978 (base32
19979 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19980 (build-system pyproject-build-system)
19981 (arguments
19982 (list
19983 #:test-flags
19984 '(list "-k"
19985 (string-append
19986 ;; These tests require pyppeteer, not yet
19987 ;; available in Guix.
19988 "not test_webpdf_with_chromium"
19989 " and not test_webpdf.py"
19990 ;; These tests require ipywidgets, which would
19991 ;; introduce a dependency cycle.
19992 " and not test_execute_widgets_from_nbconvert"
19993 " and not test_execute_multiple_notebooks"
19994
19995 ;; This test calls nbconvert itself via "sys.executable -m
19996 ;; nbconvert". It's probably harmless.
19997 " and not test_default_config"))
19998 #:phases
19999 #~(modify-phases %standard-phases
20000 (add-after 'unpack 'fix-paths
20001 (lambda* (#:key inputs #:allow-other-keys)
20002 ;; Use pandoc binary from input.
20003 (substitute* "nbconvert/utils/pandoc.py"
20004 (("'pandoc'")
20005 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
20006 ;; Same for LaTeX.
20007 (substitute* "nbconvert/exporters/pdf.py"
20008 (("\"xelatex\"")
20009 (format #f "~s" (search-input-file inputs "bin/xelatex")))
20010 (("\"bibtex\"")
20011 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
20012 ;; Likewise for Inkscape.
20013 (substitute* "nbconvert/preprocessors/svg2pdf.py"
20014 (("inkscape_path = which\\(\"inkscape\")")
20015 (format #f "inkscape_path = ~s"
20016 (search-input-file inputs "bin/inkscape"))))))
20017 (add-after 'unpack 'ignore-deprecation-warnings
20018 (lambda _
20019 (substitute* "pyproject.toml"
20020 (("\"ignore:nbconvert.utils" m)
20021 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
20022 m)))))
20023 (add-before 'check 'pre-check
20024 (lambda _
20025 ;; Tests depend on templates installed to output.
20026 (setenv "JUPYTER_PATH"
20027 (string-append #$output "/share/jupyter:"
20028 (getenv "JUPYTER_PATH")))
20029 ;; jupyter-core demands this
20030 (setenv "JUPYTER_PLATFORM_DIRS" "1")
20031 ;; Tests need writable HOME and TEXMFVAR.
20032 (setenv "HOME" "/tmp")
20033 (setenv "TEXMFVAR" "/tmp"))))))
20034 (inputs
20035 (list inkscape/pinned pandoc))
20036 (native-inputs
20037 (list python-flaky
20038 python-hatchling
20039 python-ipykernel
20040 ;; Adding ipywidgets would create a cycle.
20041 ;;python-ipywidgets
20042 python-pytest
20043 (texlive-local-tree
20044 (list texlive-adjustbox
20045 texlive-booktabs
20046 texlive-caption
20047 texlive-enumitem
20048 texlive-eurosym
20049 texlive-fancyvrb
20050 texlive-float
20051 texlive-fontspec
20052 texlive-grffile
20053 texlive-jknapltx
20054 texlive-parskip
20055 texlive-pdfcol
20056 texlive-rsfs
20057 texlive-soul
20058 texlive-tcolorbox
20059 texlive-titling
20060 texlive-ulem
20061 texlive-unicode-math
20062 texlive-upquote
20063 texlive-xetex))))
20064 (propagated-inputs
20065 (list python-beautifulsoup4
20066 python-bleach
20067 python-defusedxml
20068 python-jinja2
20069 python-jupyter-core
20070 python-jupyterlab-pygments
20071 python-markupsafe
20072 python-mistune
20073 python-nbclient
20074 python-nbformat
20075 python-packaging
20076 python-pandocfilters
20077 python-pygments
20078 python-tinycss2
20079 python-traitlets
20080 ;; Required, even if [serve] is not used.
20081 python-tornado
20082 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
20083 texlive-adjustbox
20084 texlive-amsmath
20085 texlive-booktabs
20086 texlive-caption
20087 texlive-collection-basic
20088 texlive-enumitem
20089 texlive-environ
20090 texlive-etoolbox
20091 texlive-eurosym
20092 texlive-etoolbox
20093 texlive-fancyvrb
20094 texlive-float
20095 texlive-fontspec
20096 texlive-geometry
20097 texlive-grffile
20098 texlive-hyperref
20099 texlive-infwarerr
20100 texlive-jknapltx
20101 texlive-kvoptions
20102 texlive-lm
20103 texlive-lm-math
20104 texlive-mathpazo
20105 texlive-parskip
20106 texlive-pdfcol
20107 texlive-pgf
20108 texlive-rsfs
20109 texlive-soul
20110 texlive-stringenc
20111 texlive-tcolorbox
20112 texlive-titling
20113 texlive-tools
20114 texlive-trimspaces
20115 texlive-ucs
20116 texlive-ulem
20117 texlive-unicode-math
20118 texlive-upquote
20119 texlive-xcolor
20120 texlive-xetex
20121 texlive-zapfding))
20122 (home-page "https://jupyter.org")
20123 (synopsis "Converting Jupyter Notebooks")
20124 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
20125notebooks to various other formats via Jinja templates. It allows you to
20126convert an @code{.ipynb} notebook file into various static formats including:
20127
20128@enumerate
20129@item HTML
20130@item LaTeX
20131@item PDF
20132@item Reveal JS
20133@item Markdown (md)
20134@item ReStructured Text (rst)
20135@item executable script
20136@end enumerate\n")
20137 (license license:bsd-3)))
20138
20139(define-public python-ipywidgets
20140 (package
20141 (name "python-ipywidgets")
20142 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
20143 (version "8.1.4")
20144 (source
20145 (origin
20146 (method url-fetch)
20147 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
20148 (uri (pypi-uri "ipywidgets" version))
20149 (sha256
20150 (base32
20151 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
20152 (build-system pyproject-build-system)
20153 (native-inputs
20154 (list python-ipykernel
20155 python-jsonschema
20156 python-pytest
20157 python-pytz
20158 python-setuptools))
20159 (propagated-inputs
20160 (list python-comm
20161 python-ipython
20162 python-jupyterlab-widgets
20163 python-traitlets
20164 python-widgetsnbextension))
20165 (home-page "https://ipython.org")
20166 (synopsis "IPython HTML widgets for Jupyter")
20167 (description "Ipywidgets are interactive HTML widgets for Jupyter
20168notebooks and the IPython kernel. Notebooks come alive when interactive
20169widgets are used. Users gain control of their data and can visualize changes
20170in the data.")
20171 (license license:bsd-3)))
20172
20173(define-public python-jsbeautifier
20174 (package
20175 (name "python-jsbeautifier")
20176 (version "1.15.3")
20177 (home-page "https://github.com/beautify-web/js-beautify")
20178 (source
20179 (origin
20180 (method git-fetch)
20181 (uri (git-reference
20182 (url home-page)
20183 (commit (string-append "v" version))))
20184 (file-name (git-file-name name version))
20185 (sha256
20186 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
20187 (build-system pyproject-build-system)
20188 (arguments
20189 (list
20190 #:phases
20191 #~(modify-phases %standard-phases
20192 (add-after 'unpack 'chdir
20193 (lambda _
20194 (chdir "python")
20195 (rename-file "setup-js.py" "setup.py"))))))
20196 (propagated-inputs (list python-editorconfig python-six))
20197 (native-inputs (list python-pytest python-setuptools))
20198 (synopsis "JavaScript unobfuscator and beautifier")
20199 (description
20200 "This packages provides tooling to beautify, unpack or deobfuscate
20201JavaScript, leveraging popular online obfuscators.")
20202 (license license:expat)))
20203
20204(define-public python-chardet
20205 (package
20206 (name "python-chardet")
20207 ;; XXX: Before update, check status of guix/guix#9242.
20208 (version "5.2.0")
20209 (source
20210 (origin
20211 (method url-fetch)
20212 (uri (pypi-uri "chardet" version))
20213 (sha256
20214 (base32
20215 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
20216 (native-inputs
20217 (list python-pytest python-setuptools))
20218 (build-system pyproject-build-system)
20219 (arguments
20220 (list #:test-flags
20221 ;; Disable test that fails sporadically:
20222 ;; https://github.com/chardet/chardet/issues/256
20223 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
20224 #:phases
20225 #~(modify-phases %standard-phases
20226 ;; This package provides a 'chardetect' executable that only
20227 ;; depends on Python, so customize the wrap phase to avoid
20228 ;; adding pytest and friends in order to save size.
20229 ;; (See also <https://bugs.gnu.org/25235>.)
20230 (replace 'wrap
20231 (lambda* (#:key inputs outputs #:allow-other-keys)
20232 (let* ((sitedir (site-packages inputs outputs))
20233 (python (dirname (dirname
20234 (search-input-file
20235 inputs "bin/python"))))
20236 (python-sitedir
20237 (string-append python "/lib/python"
20238 (python-version python)
20239 "/site-packages")))
20240 (wrap-program (string-append #$output "/bin/chardetect")
20241 `("GUIX_PYTHONPATH" ":" suffix
20242 ,(list sitedir python-sitedir)))))))))
20243 (home-page "https://github.com/chardet/chardet")
20244 (synopsis "Universal encoding detector for Python 2 and 3")
20245 (description
20246 "This package provides @code{chardet}, a Python module that can
20247automatically detect a wide range of file encodings.")
20248 (license license:lgpl2.1+)))
20249
20250(define-public python-charset-normalizer
20251 (package
20252 (name "python-charset-normalizer")
20253 (version "3.4.7")
20254 (source
20255 (origin
20256 (method git-fetch)
20257 (uri (git-reference
20258 (url "https://github.com/ousret/charset_normalizer")
20259 (commit version)))
20260 (file-name (git-file-name name version))
20261 (sha256 (base32 "0faqj59d0z0yzgvsxndy48xrlvj05lfdqaf9fsc61ckwzzhlkrvl"))))
20262 (build-system pyproject-build-system)
20263 (native-inputs
20264 (list python-pytest
20265 python-setuptools))
20266 (home-page "https://github.com/ousret/charset_normalizer")
20267 (synopsis "Universal Charset Detector, alternative to Chardet")
20268 (description "This library helps you read text from an unknown charset
20269encoding. Motivated by @code{chardet}, it tries to resolve the issue by
20270taking a new approach. All IANA character set names for which the Python core
20271library provides codecs are supported.")
20272 (license license:expat)))
20273
20274(define-public python-docopt
20275 (package
20276 (name "python-docopt")
20277 (version "0.6.2")
20278 (source
20279 (origin
20280 (method git-fetch)
20281 (uri (git-reference
20282 (url "https://github.com/docopt/docopt")
20283 (commit version)))
20284 (file-name (git-file-name name version))
20285 (sha256
20286 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
20287 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
20288 (build-system pyproject-build-system)
20289 ;; tests: 203 passed, 6 warnings
20290 (native-inputs
20291 (list python-pytest-8 python-setuptools))
20292 (home-page "http://docopt.org")
20293 (synopsis "Command-line interface description language for Python")
20294 (description
20295 "This library allows the user to define a command-line interface from a
20296program's help message rather than specifying it programmatically with
20297command-line parsers like @code{getopt} and @code{argparse}.")
20298 (license license:expat)))
20299
20300(define-public python-pythonanywhere
20301 (package
20302 (name "python-pythonanywhere")
20303 (version "0.19.0")
20304 (source
20305 (origin
20306 (method git-fetch)
20307 (uri (git-reference
20308 (url "https://github.com/pythonanywhere/helper_scripts")
20309 (commit (string-append "v" version))))
20310 (file-name (git-file-name name version))
20311 (sha256
20312 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
20313 (build-system pyproject-build-system)
20314 (arguments
20315 (list
20316 #:test-flags
20317 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
20318 "-k" (string-join
20319 ;; Network access is required to clone external
20320 ;; repositories.
20321 (list "not test_actually_creates_django_project_in_vir"
20322 "test_actually_downloads_repo"
20323 "test_actually_installing_a_real_package"
20324 "test_actually_works_against_example_repo"
20325 "test_autoconfigure_actually_works_against_example_repo"
20326 "test_exits_because_boolean_not_satisfied"
20327 "test_gets_version"
20328 "test_nuke_option_lets_you_run_twice"
20329 "test_nuke_option_lets_you_run_twice"
20330 "test_start_actually_creates_django_project_in_vir")
20331 " and not "))
20332 #:phases
20333 #~(modify-phases %standard-phases
20334 (add-after 'unpack 'relax-requirements
20335 (lambda _
20336 (substitute* "pyproject.toml"
20337 (("\"schema==.*\",")
20338 "\"schema\","))))
20339 (add-before 'check 'change-home
20340 (lambda _
20341 (setenv "HOME" "/tmp"))))))
20342 (native-inputs
20343 (list python-psutil
20344 python-pytest
20345 python-pytest-mock
20346 python-responses
20347 python-setuptools))
20348 (propagated-inputs
20349 (list python-dateutil
20350 python-docopt
20351 python-packaging
20352 python-pythonanywhere-core
20353 python-requests
20354 python-schema
20355 python-snakesay
20356 python-tabulate
20357 python-typer))
20358 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20359 (synopsis "PythonAnywhere helper tools for users")
20360 (description
20361 "PythonAnywhere provides a command-line interface and an application
20362programming interface that allows managing files Web apps, scheduled
20363tasks and students. It includes single-command deployment for the Django Girls
20364tutorial.")
20365 (license license:expat)))
20366
20367(define-public python-pythonanywhere-core
20368 (package
20369 (name "python-pythonanywhere-core")
20370 (version "0.3.0")
20371 (source
20372 (origin
20373 (method git-fetch)
20374 (uri (git-reference
20375 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20376 (commit (string-append "v" version))))
20377 (file-name (git-file-name name version))
20378 (sha256
20379 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20380 (build-system pyproject-build-system)
20381 (arguments
20382 (list
20383 #:phases
20384 #~(modify-phases %standard-phases
20385 (add-before 'check 'pre-check
20386 (lambda _
20387 (setenv "HOME" "/tmp"))))))
20388 (native-inputs
20389 (list python-poetry-core
20390 python-pytest
20391 python-pytest-mock
20392 python-responses))
20393 (propagated-inputs
20394 (list python-dateutil
20395 python-requests
20396 python-snakesay
20397 python-typing-extensions))
20398 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20399 (synopsis "API wrapper for PythonAnywhere services")
20400 (description
20401 "This package provides an API wrapper for programmatic management of
20402@code{PythonAnywhere} services.")
20403 (license license:expat)))
20404
20405(define-public python-dialog
20406 (package
20407 (name "python-dialog")
20408 (version "3.5.3")
20409 (source
20410 (origin
20411 (method url-fetch)
20412 (uri (pypi-uri "pythondialog" version))
20413 (sha256
20414 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20415 (modules '((guix build utils)))
20416 (snippet #~(delete-file-recursively "doc"))))
20417 (build-system pyproject-build-system)
20418 (arguments
20419 (list
20420 ;; XXX: There are no tests, but some examples. However, they need to
20421 ;; be run on a terminal.
20422 #:tests? #f
20423 #:phases
20424 #~(modify-phases %standard-phases
20425 (add-after 'unpack 'patch-path
20426 (lambda* (#:key inputs #:allow-other-keys)
20427 (substitute* "dialog.py"
20428 (("_path_to_executable\\(dialog\\)")
20429 (format #f "os.path.realpath(~s)"
20430 (search-input-file inputs "bin/dialog")))))))))
20431 (native-inputs (list python-setuptools))
20432 (inputs (list dialog))
20433 (home-page "https://pythondialog.sourceforge.net/")
20434 (synopsis "Python interface to the UNIX dialog utility")
20435 (description
20436 "A Python wrapper for the dialog utility. Its purpose is to provide an
20437easy to use, pythonic and comprehensive Python interface to dialog. This
20438allows one to make simple text-mode user interfaces on Unix-like systems")
20439 (license license:lgpl2.1)))
20440
20441(define-deprecated-package python-pythondialog python-dialog)
20442
20443(define-public python-confection
20444 (package
20445 (name "python-confection")
20446 (version "1.3.3")
20447 (source
20448 (origin
20449 (method git-fetch)
20450 (uri (git-reference
20451 (url "https://github.com/explosion/confection")
20452 (commit (string-append "release-v" version))))
20453 (file-name (git-file-name name version))
20454 (sha256
20455 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20456 (build-system pyproject-build-system)
20457 (arguments
20458 (list
20459 #:phases
20460 #~(modify-phases %standard-phases
20461 (add-before 'check 'patch-pythonpath
20462 (lambda _
20463 (setenv "PYTHONPATH"
20464 (string-append (getcwd) ":"
20465 (getenv "GUIX_PYTHONPATH"))))))))
20466 (propagated-inputs (list python-pydantic python-srsly))
20467 (native-inputs (list python-pytest python-setuptools))
20468 (home-page "https://github.com/explosion/confection")
20469 (synopsis "Config system for Python")
20470 (description
20471 "Confection is a lightweight library that offers a configuration system
20472letting you conveniently describe arbitrary trees of objects.")
20473 (license license:expat)))
20474
20475(define-public python-configobj
20476 (package
20477 (name "python-configobj")
20478 (version "5.0.9")
20479 (source
20480 (origin
20481 (method url-fetch)
20482 (uri (pypi-uri "configobj" version))
20483 (sha256
20484 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20485 (build-system pyproject-build-system)
20486 (native-inputs
20487 (list python-pytest
20488 python-setuptools))
20489 (home-page "https://github.com/DiffSK/configobj")
20490 (synopsis "Config file reading, writing and validation")
20491 (description
20492 "ConfigObj is a simple but powerful config file reader and writer: an
20493 ini file round tripper. Its main feature is that it is very easy to use,
20494with a straightforward programmer’s interface and a simple syntax for config
20495files.")
20496 (license license:bsd-3)))
20497
20498(define-public python-omegaconf
20499 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20500 (revision "1"))
20501 (package
20502 (name "python-omegaconf")
20503 (version (git-version "2.3.0" revision commit))
20504 (source
20505 (origin
20506 (method git-fetch)
20507 (uri (git-reference
20508 (url "https://github.com/omry/omegaconf")
20509 (commit commit)))
20510 (file-name (git-file-name name version))
20511 (modules '((guix build utils)))
20512 (snippet
20513 #~(begin
20514 (delete-file-recursively "build_helpers/bin")
20515 (substitute* "build_helpers/build_helpers.py"
20516 (("java") "antlr4")
20517 (("\"-jar\",") "")
20518 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20519 (sha256
20520 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20521 (build-system pyproject-build-system)
20522 (arguments
20523 (list
20524 #:test-flags
20525 ;; XXX: Those tests currently fail collection.
20526 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20527 "--ignore=tests/test_basic_ops_list.py"
20528 "--ignore=tests/test_merge.py"
20529 "--ignore=tests/test_select.py")
20530 #:phases
20531 #~(modify-phases %standard-phases
20532 (add-after 'unpack 'loosen-requirements
20533 (lambda _
20534 (substitute* "requirements/base.txt"
20535 (("antlr4-python3-runtime==.*")
20536 "antlr4-python3-runtime >=4.9\n"))
20537 ;; Ignore deprecation warnings.
20538 (substitute* "pyproject.toml"
20539 (("-Werror") "")))))))
20540 (native-inputs
20541 (list icedtea
20542 antlr4
20543 python-pytest
20544 python-pytest-mock
20545 python-setuptools
20546 python-wheel))
20547 (propagated-inputs
20548 (list python-antlr4-runtime
20549 python-pydevd
20550 python-pyyaml))
20551 (home-page "https://github.com/omry/omegaconf")
20552 (synopsis "Flexible configuration system")
20553 (description
20554 "OmegaConf is a hierarchical configuration system and supports merging
20555configurations from multiple sources. It provides a consistent API regardless
20556of how the configuration was created.")
20557 (license license:bsd-3))))
20558
20559(define-public python-configargparse
20560 (package
20561 (name "python-configargparse")
20562 (version "1.7.5")
20563 (source
20564 (origin
20565 (method git-fetch)
20566 (uri (git-reference
20567 (url "https://github.com/bw2/ConfigArgParse")
20568 (commit (string-append "v" version))))
20569 (file-name (git-file-name name version))
20570 (sha256
20571 (base32 "04d54knfjgxci3far2cp72xr8bjabq0xcawc0ks2nk7mfl1p05v5"))))
20572 (build-system pyproject-build-system)
20573 (native-inputs
20574 (list python-mock
20575 python-pytest
20576 python-pyyaml
20577 python-setuptools
20578 python-setuptools-scm))
20579 (home-page "https://github.com/bw2/ConfigArgParse")
20580 (synopsis "Replacement for argparse")
20581 (description
20582 "This package provides a drop-in replacement for argparse that allows
20583options to also be set via config files and/or environment variables.")
20584 (license license:expat)))
20585
20586(define-public python-connection-pool
20587 (package
20588 (name "python-connection-pool")
20589 (version "0.0.3")
20590 (source
20591 (origin
20592 (method git-fetch)
20593 (uri (git-reference
20594 (url "https://github.com/zhouyl/ConnectionPool")
20595 (commit version)))
20596 (file-name (git-file-name name version))
20597 (sha256
20598 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20599 (build-system pyproject-build-system)
20600 (arguments (list #:tests? #f)) ; No tests.
20601 (native-inputs (list python-setuptools))
20602 (home-page "https://github.com/zhouyl/ConnectionPool")
20603 (synopsis "Thread-safe connection pool")
20604 (description
20605 "This package provides a library implementing a thread-safe connection
20606pool.")
20607 (license license:expat)))
20608
20609(define-public python-argparse-dataclass
20610 (package
20611 (name "python-argparse-dataclass")
20612 (version "2.0.0")
20613 (source
20614 (origin
20615 (method git-fetch) ;no tests in PyPI archive
20616 (uri (git-reference
20617 (url "https://github.com/mivade/argparse_dataclass")
20618 (commit version)))
20619 (file-name (git-file-name name version))
20620 (sha256
20621 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20622 (build-system pyproject-build-system)
20623 (native-inputs (list python-pytest python-setuptools python-wheel))
20624 (home-page "https://github.com/mivade/argparse_dataclass")
20625 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20626 (description
20627 "This package provides declarative command-line interfaces using argparse
20628and dataclasses.")
20629 (license license:expat)))
20630
20631(define-public python-argparse-manpage
20632 (package
20633 (name "python-argparse-manpage")
20634 (version "4.7")
20635 (source
20636 (origin
20637 (method url-fetch)
20638 (uri (pypi-uri "argparse_manpage" version))
20639 (sha256
20640 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20641 (build-system pyproject-build-system)
20642 (arguments
20643 (list
20644 #:test-flags
20645 ;; Tests require PIP.
20646 #~(list "--ignore=tests/test_examples.py")))
20647 (native-inputs
20648 (list python-pytest
20649 python-setuptools))
20650 (home-page "https://github.com/praiskup/argparse-manpage")
20651 (synopsis "Build manual page from Python's ArgumentParser object")
20652 (description
20653 "This package provides tools to build manual pages from Python's
20654@code{ArgumentParser} object.")
20655 (license license:asl2.0)))
20656
20657(define-public python-atomicwrites
20658 (package
20659 (name "python-atomicwrites")
20660 (version "1.4.0")
20661 (source
20662 (origin
20663 (method git-fetch)
20664 (uri (git-reference
20665 (url "https://github.com/untitaker/python-atomicwrites")
20666 (commit version)))
20667 (file-name (git-file-name name version))
20668 (sha256
20669 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20670 (build-system pyproject-build-system)
20671 (native-inputs (list python-pytest python-setuptools))
20672 (synopsis "Atomic file writes in Python")
20673 (description
20674 "Library for atomic file writes using platform dependent tools
20675for atomic file system operations.")
20676 (home-page "https://github.com/untitaker/python-atomicwrites")
20677 (license license:expat)))
20678
20679(define-public python-qstylizer
20680 (package
20681 (name "python-qstylizer")
20682 (version "0.2.4")
20683 (source
20684 (origin
20685 (method git-fetch)
20686 (uri (git-reference
20687 (url "https://github.com/blambright/qstylizer")
20688 (commit version)))
20689 (file-name (git-file-name name version))
20690 (sha256
20691 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20692 (build-system pyproject-build-system)
20693 (native-inputs
20694 (list python-pbr
20695 python-pytest
20696 python-pytest-mock
20697 python-setuptools
20698 python-wheel))
20699 (propagated-inputs
20700 (list python-inflection
20701 python-tinycss2))
20702 (home-page "https://github.com/blambright/qstylizer")
20703 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20704 (description "@code{qstylizer} is a Python package designed to help with
20705the construction of PyQt/PySide stylesheets.")
20706 (license license:expat)))
20707
20708(define-public python-click-threading
20709 (package
20710 (name "python-click-threading")
20711 (version "0.5.0")
20712 (source
20713 (origin
20714 (method git-fetch)
20715 (uri (git-reference
20716 (url "https://github.com/click-contrib/click-threading")
20717 (commit version)))
20718 (file-name (git-file-name name version))
20719 (sha256
20720 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20721 (build-system pyproject-build-system)
20722 (native-inputs (list python-pytest python-setuptools))
20723 (propagated-inputs (list python-click))
20724 (synopsis "Utilities for multithreading in Click")
20725 (description
20726 "This package provides utilities for multithreading in Click
20727applications.")
20728 (home-page "https://github.com/click-contrib/click-threading")
20729 (license license:expat)))
20730
20731(define-public python-click-log
20732 (package
20733 (name "python-click-log")
20734 (version "0.3.2")
20735 (source
20736 (origin
20737 (method git-fetch)
20738 (uri (git-reference
20739 (url "https://github.com/click-contrib/click-log")
20740 (commit version)))
20741 (file-name (git-file-name name version))
20742 (sha256
20743 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20744 (build-system pyproject-build-system)
20745 (native-inputs (list python-pytest python-setuptools))
20746 (propagated-inputs (list python-click))
20747 (synopsis "Logging for click applications")
20748 (description
20749 "This package provides a Python library for logging Click applications.")
20750 (home-page "https://github.com/click-contrib/click-log")
20751 (license license:expat)))
20752
20753(define-public python-click-default-group
20754 (package
20755 (name "python-click-default-group")
20756 (version "1.2.4")
20757 (source
20758 (origin
20759 (method git-fetch) ; no tests in PyPI release
20760 (uri (git-reference
20761 (url "https://github.com/click-contrib/click-default-group")
20762 (commit (string-append "v" version))))
20763 (file-name (git-file-name name version))
20764 (sha256
20765 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20766 (build-system pyproject-build-system)
20767 (propagated-inputs
20768 (list python-click))
20769 (native-inputs
20770 (list python-flit-core python-pytest))
20771 (synopsis "Extends click.Group")
20772 (description "This package extends click.Group to invoke a command without
20773explicit subcommand name.")
20774 (home-page "https://github.com/click-contrib/click-default-group")
20775 (license license:bsd-3)))
20776
20777(define-public python-apipkg
20778 (package
20779 (name "python-apipkg")
20780 (version "3.0.2")
20781 (source
20782 (origin
20783 (method url-fetch)
20784 (uri (pypi-uri "apipkg" version))
20785 (sha256
20786 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20787 (build-system pyproject-build-system)
20788 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20789 (native-inputs
20790 (list python-hatch-vcs
20791 python-hatchling))
20792 (home-page "https://github.com/pytest-dev/apipkg")
20793 (synopsis "Namespace control and lazy-import mechanism")
20794 (description "With apipkg you can control the exported namespace of a Python
20795package and greatly reduce the number of imports for your users. It is a small
20796pure Python module that works on virtually all Python versions.")
20797 (license license:expat)))
20798
20799(define-public python-essentials
20800 (package
20801 (name "python-essentials")
20802 (version "1.1.8")
20803 (source
20804 (origin
20805 (method git-fetch)
20806 (uri (git-reference
20807 (url "https://github.com/Neoteroi/essentials")
20808 (commit (string-append "v" version))))
20809 (file-name (git-file-name name version))
20810 (sha256
20811 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20812 (build-system pyproject-build-system)
20813 (native-inputs
20814 (list python-hatchling
20815 python-pydantic
20816 python-pytest-asyncio))
20817 (home-page "https://github.com/Neoteroi/essentials/wiki")
20818 (synopsis
20819 "Utility functions, exceptions, and classes for Python applications")
20820 (description
20821 "Essentials is a collection of functions, exceptions, and classes for Python
20822applications. Examples of utilities are exceptions for common scenarios,
20823friendly JSON encoder, decorators for retries and logging.")
20824 (license license:expat)))
20825
20826(define-public python-execnet
20827 (package
20828 (name "python-execnet")
20829 (version "2.1.2")
20830 (source
20831 (origin
20832 (method git-fetch)
20833 (uri (git-reference
20834 (url "https://github.com/pytest-dev/execnet")
20835 (commit (string-append "v" version))))
20836 (file-name (git-file-name name version))
20837 (sha256
20838 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20839 (build-system pyproject-build-system)
20840 (arguments
20841 (list
20842 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20843 #:phases
20844 #~(modify-phases %standard-phases
20845 (add-before 'check 'pre-check
20846 (lambda _
20847 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20848 ;; test in 'testing/test_gateway.py'.
20849 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20850 (native-inputs
20851 (list python-hatchling
20852 python-hatch-vcs
20853 python-pytest-bootstrap))
20854 (home-page "https://codespeak.net/execnet/")
20855 (synopsis "Rapid multi-Python deployment")
20856 (description
20857 "Execnet provides a share-nothing model with channel-send/receive communication
20858for distributing execution across many Python interpreters across version,
20859platform and network barriers. It has a minimal and fast API targeting the
20860following uses:
20861
20862@enumerate
20863@item distribute tasks to (many) local or remote CPUs
20864@item write and deploy hybrid multi-process applications
20865@item write scripts to administer multiple environments
20866@end enumerate")
20867 (license license:expat)))
20868
20869(define-public python-icalendar
20870 (package
20871 (name "python-icalendar")
20872 (version "6.3.2")
20873 (source
20874 (origin
20875 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20876 (uri (pypi-uri "icalendar" version))
20877 (sha256
20878 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20879 (build-system pyproject-build-system)
20880 (arguments
20881 (list
20882 ;; tests: 8995 passed, 21 skipped, 2 deselected
20883 #:test-flags
20884 #~(list
20885 "-k"
20886 (string-append
20887 ;; See: <https://github.com/collective/icalendar/issues/812>.
20888 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20889 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20890 (native-inputs
20891 (list python-hatch-vcs
20892 python-hatchling
20893 python-pytest
20894 python-pytz))
20895 (propagated-inputs
20896 (list python-dateutil
20897 python-tzdata))
20898 (home-page "https://github.com/collective/icalendar")
20899 (synopsis "Python library for parsing and generating iCalendar files")
20900 (description
20901 "@code{icalendar} is a Python library for parsing and generating
20902iCalendar files.")
20903 (license license:bsd-2)))
20904
20905(define-public python-args
20906 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20907 (revision "0"))
20908 (package
20909 (name "python-args")
20910 (version (git-version "0.1.0" revision commit))
20911 (source
20912 (origin
20913 (method git-fetch)
20914 (uri (git-reference
20915 (url "https://github.com/kennethreitz-archive/args")
20916 (commit commit)))
20917 (file-name (git-file-name name version))
20918 (sha256
20919 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20920 (build-system pyproject-build-system)
20921 (arguments
20922 (list
20923 #:tests? #f ; XXX: python-nose is deprecated.
20924 #:phases
20925 #~(modify-phases %standard-phases
20926 (add-after 'unpack 'patch-args.py
20927 (lambda _
20928 (substitute* "args.py"
20929 (("basestring")
20930 "str")))))))
20931 (native-inputs (list python-setuptools python-wheel))
20932 (home-page "https://github.com/kennethreitz-archive/args")
20933 (synopsis "Command-line argument parser")
20934 (description
20935 "This library provides a Python module to parse command-line arguments.")
20936 (license license:bsd-3))))
20937
20938(define-public python-clint
20939 (package
20940 (name "python-clint")
20941 (version "0.5.1")
20942 (source (origin
20943 (method url-fetch)
20944 (uri (pypi-uri "clint" version))
20945 (sha256
20946 (base32
20947 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20948 (build-system pyproject-build-system)
20949 (native-inputs
20950 (list python-pytest python-setuptools python-wheel))
20951 (propagated-inputs
20952 (list python-args))
20953 (home-page "https://github.com/kennethreitz/clint")
20954 (synopsis "Command-line interface tools")
20955 (description
20956 "Clint is a Python module filled with a set of tools for developing
20957command-line applications, including tools for colored and indented
20958output, progress bar display, and pipes.")
20959 (license license:isc)))
20960
20961(define-public python-rply
20962 (package
20963 (name "python-rply")
20964 (version "0.7.8")
20965 (source
20966 (origin
20967 (method git-fetch)
20968 (uri (git-reference
20969 (url "https://github.com/alex/rply")
20970 (commit (string-append "v" version))))
20971 (file-name (git-file-name name version))
20972 (sha256
20973 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20974 (build-system pyproject-build-system)
20975 (arguments
20976 (list
20977 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20978 #:phases
20979 #~(modify-phases %standard-phases
20980 (add-before 'check 'fix-pytest-use
20981 (lambda _
20982 (substitute* (find-files "tests" "\\.py$")
20983 (("import py")
20984 "import pytest")
20985 (("py\\.test")
20986 "pytest"))
20987 (setenv "HOME" (getcwd)))))))
20988 (native-inputs (list python-pytest python-setuptools))
20989 (propagated-inputs (list python-appdirs))
20990 (home-page "https://github.com/alex/rply")
20991 (synopsis "Parser generator for Python")
20992 (description
20993 "This package provides a pure Python based parser generator, that also
20994works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20995with a new public API, and RPython support.")
20996 (license license:bsd-3)))
20997
20998(define-public python-hy
20999 (package
21000 (name "python-hy")
21001 (version "1.3.1")
21002 (source
21003 (origin
21004 (method git-fetch)
21005 (uri (git-reference
21006 (url "https://github.com/hylang/hy")
21007 (commit version)))
21008 (file-name (git-file-name name version))
21009 (sha256
21010 (base32 "0fc1qjr2kkl3a5hig9l2g3ysapvc16gj1gyblaszm3xza6w0zn58"))))
21011 (build-system pyproject-build-system)
21012 (arguments
21013 (list
21014 ;; This test expects the hy executable to be called 'hy', but in Guix
21015 ;; it's .hy-real.
21016 #:test-flags #~(list "-k" "not test_sys_executable")))
21017 (native-inputs (list python-pytest python-setuptools))
21018 (propagated-inputs (list python-funcparserlib))
21019 (home-page "https://hylang.org/hy/doc")
21020 (synopsis "Lisp frontend to Python")
21021 (description
21022 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
21023its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
21024Python at your fingertips, in Lisp form.")
21025 (license license:expat)))
21026
21027(define-public python-hissp
21028 (package
21029 (name "python-hissp")
21030 (version "0.5.0")
21031 (source
21032 (origin
21033 (method git-fetch)
21034 (uri (git-reference
21035 (url "https://github.com/gilch/hissp")
21036 (commit (string-append "v" version))))
21037 (file-name (git-file-name name version))
21038 (sha256
21039 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
21040 (build-system pyproject-build-system)
21041 (arguments (list #:test-backend #~'unittest))
21042 (native-inputs (list python-hypothesis python-setuptools))
21043 (home-page "https://github.com/gilch/hissp")
21044 (synopsis "It's Python with a Lissp")
21045 (description
21046 "Hissp is a modular Lisp implementation that compiles to a functional
21047subset of Python—Syntactic macro metaprogramming with full access to the
21048Python ecosystem.")
21049 (license license:asl2.0)))
21050
21051(define-public python-promise
21052 (package
21053 (name "python-promise")
21054 (version "2.3.0")
21055 (source
21056 (origin
21057 (method git-fetch)
21058 (uri (git-reference
21059 (url "https://github.com/syrusakbary/promise")
21060 (commit (string-append "v" version))))
21061 (file-name (git-file-name name version))
21062 (sha256
21063 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
21064 (build-system pyproject-build-system)
21065 (arguments
21066 (list
21067 #:test-flags
21068 #~(list "--ignore=tests/test_benchmark.py"
21069 ;; Issues with pytest-asyncio
21070 "--ignore=tests/test_awaitable.py"
21071 "-k" (string-join
21072 (list "not test_issue_9_safe"
21073 ;; Stacktrace issues.
21074 "test_thrown_exceptions_have_stacktrace"
21075 "test_thrown_exceptions_preserve_stacktrace")
21076 " and not "))))
21077 (native-inputs
21078 (list python-mock
21079 python-pytest
21080 python-pytest-asyncio
21081 python-setuptools))
21082 (propagated-inputs (list python-six))
21083 (home-page "https://github.com/syrusakbary/promise")
21084 (synopsis "Promises/A+ implementation for Python")
21085 (description
21086 "This package provides an implementation of Promises in Python. It is a
21087super set of Promises/A+ designed to have readable, performant code and to
21088provide just the extensions that are absolutely necessary for using promises
21089in Python.")
21090 (license license:expat)))
21091
21092(define-public python-progress
21093 (package
21094 (name "python-progress")
21095 (version "1.6")
21096 (source
21097 (origin
21098 (method git-fetch)
21099 (uri (git-reference
21100 (url "https://github.com/verigak/progress/")
21101 (commit version)))
21102 (file-name (git-file-name name version))
21103 (sha256
21104 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
21105 (snippet #~(delete-file "demo.gif"))))
21106 (build-system pyproject-build-system)
21107 (arguments
21108 (list
21109 #:test-backend #~'custom
21110 #:test-flags #~(list "test_progress.py")))
21111 (native-inputs (list python-setuptools))
21112 (home-page "https://github.com/verigak/progress/")
21113 (synopsis "Progress reporting bars for Python")
21114 (description
21115 "This Python package provides progress reporting for visual of progress
21116of long running operations. There are multiple choices of progress bars and
21117spinners, with customizable options, such as width, fill character, and
21118suffix.")
21119 (license license:isc)))
21120
21121(define-public python-progressbar2
21122 (package
21123 (name "python-progressbar2")
21124 (version "4.5.0")
21125 (source
21126 (origin
21127 (method url-fetch)
21128 (uri (pypi-uri "progressbar2" version))
21129 (sha256
21130 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
21131 (build-system pyproject-build-system)
21132 (arguments
21133 (list
21134 #:test-flags #~(list "--pyargs" "progressbar" "tests")
21135 #:phases
21136 #~(modify-phases %standard-phases
21137 (add-after 'unpack 'fix-pytest-config
21138 (lambda _
21139 ;; Drop test coverage requirements.
21140 (substitute* "pytest.ini"
21141 ((".*-cov.*") "")))))))
21142 (native-inputs
21143 (list python-dill
21144 python-pytest
21145 python-freezegun
21146 python-setuptools
21147 python-setuptools-scm
21148 python-wheel))
21149 (propagated-inputs
21150 (list python-utils))
21151 (home-page "https://github.com/WoLpH/python-progressbar")
21152 (synopsis "Text progress bar library for Python")
21153 (description
21154 "This package provides a Python progressbar library to provide
21155visual (yet text based) progress to long running operations.")
21156 (license license:bsd-3)))
21157
21158(define-public python-progressbar33
21159 (package
21160 (name "python-progressbar33")
21161 (version "2.4")
21162 (source
21163 (origin
21164 (method git-fetch)
21165 (uri (git-reference
21166 (url "https://github.com/germangh/python-progressbar")
21167 (commit (string-append "v" version))))
21168 (file-name (git-file-name name version))
21169 (sha256
21170 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
21171 (build-system pyproject-build-system)
21172 (arguments
21173 (list
21174 #:test-backend #~'custom
21175 #:test-flags #~(list "examples.py")))
21176 (native-inputs (list python-setuptools))
21177 (home-page "https://github.com/germangh/python-progressbar")
21178 (synopsis "Text progress bar library for Python")
21179 (description
21180 "This package provides a text progress bar library for Python. This
21181version only differs from the original @code{progressbar} package in that it
21182uses relative package imports instead of absolute imports, which is necessary
21183for the module to work under Python 3.3.")
21184 ;; Either or both of these licenses may be selected.
21185 (license (list license:lgpl2.1+ license:bsd-3))))
21186
21187;; XXX: Not maintained since 2012.
21188(define-public python-monthdelta
21189 (package
21190 (name "python-monthdelta")
21191 (version "0.9.1")
21192 (source
21193 (origin
21194 (method url-fetch)
21195 (uri (pypi-uri "MonthDelta" version))
21196 (sha256
21197 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
21198 (build-system pyproject-build-system)
21199 (arguments
21200 (list #:tests? #f)) ; No tests.
21201 (native-inputs (list python-setuptools))
21202 (home-page "http://packages.python.org/MonthDelta")
21203 (synopsis "Date computations with months")
21204 (description
21205 "MonthDelta provides functionality to do date computations with months.")
21206 (license license:expat)))
21207
21208(define-public python-moto
21209 (package
21210 (name "python-moto")
21211 (version "5.1.20")
21212 (source (origin
21213 (method url-fetch)
21214 (uri (pypi-uri "moto" version))
21215 (sha256
21216 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
21217 (build-system pyproject-build-system)
21218 (arguments
21219 (list
21220 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
21221 #:test-flags
21222 #~(list "-m" "not network and not requires_docker"
21223 ;; Not all of the tests are thread save, see:
21224 ;; <https://github.com/getmoto/moto/issues/7786>.
21225 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
21226 "-k" (string-join
21227 ;; Network access is required.
21228 (list "not test_passthrough_calls_for_entire_service"
21229 "test_passthrough_calls_for_specific_url"
21230 "test_passthrough_calls_for_wildcard_urls"
21231 "test_put_record_batch_http_destination"
21232 "test_put_record_http_destination"
21233 "test_s3_server_post_cors_multiple_origins"
21234 "test_with_custom_request_header"
21235 ;; AttributeError: 'ImportError' object has no
21236 ;; attribute 'message'
21237 "test_batch_update"
21238 "test_batch_update__not_enough_parameters"
21239 "test_execute_transaction"
21240 "test_without_primary_key_in_where_clause")
21241 " and not ")
21242 "tests")
21243 #:phases
21244 #~(modify-phases %standard-phases
21245 (add-after 'unpack 'patch-hardcoded-executable-names
21246 (lambda* (#:key inputs #:allow-other-keys)
21247 (let ((bash-exec (search-input-file inputs "/bin/sh")))
21248 (substitute* "moto/batch/models.py"
21249 (("/bin/sh") bash-exec))
21250 (substitute* (find-files "tests" "\\.py$")
21251 (("#!/bin/bash") (string-append "#!" bash-exec))))))
21252 (add-before 'check 'pre-check
21253 (lambda _
21254 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
21255 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
21256 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
21257 (native-inputs
21258 (list python-flask
21259 python-flask-cors
21260 python-freezegun
21261 python-pycognito
21262 python-pyotp
21263 python-pytest
21264 python-setuptools))
21265 (inputs
21266 (list bash-minimal))
21267 (propagated-inputs
21268 (list python-antlr4-runtime
21269 python-aws-xray-sdk
21270 python-boto3
21271 python-botocore
21272 python-cfn-lint
21273 python-cryptography
21274 python-dateutil
21275 python-graphql-core
21276 python-jinja2
21277 python-joserfc
21278 python-jsonpath-ng
21279 python-multipart
21280 python-openapi-spec-validator
21281 python-py-partiql-parser
21282 python-pyparsing
21283 python-requests
21284 python-responses
21285 python-werkzeug
21286 python-xmltodict))
21287 (home-page "https://github.com/spulec/moto")
21288 (synopsis "Mock out the boto library")
21289 (description
21290 "@code{moto} is a library designed to easily mock out the
21291@code{boto} library.")
21292 (license license:asl2.0)))
21293
21294(define-public python-plumbum
21295 (package
21296 (name "python-plumbum")
21297 (version "1.7.0")
21298 (source
21299 (origin
21300 (method git-fetch)
21301 (uri (git-reference
21302 (url "https://github.com/tomerfiliba/plumbum")
21303 (commit (string-append "v" version))))
21304 (file-name (git-file-name name version))
21305 (sha256
21306 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
21307 (build-system pyproject-build-system)
21308 (arguments
21309 (list
21310 #:test-flags
21311 #~(list "--ignore=tests/test_remote.py"
21312 "--ignore=tests/test_putty.py"
21313 "--ignore=tests/test_sudo.py"
21314 "-k"
21315 (string-join (list "not test_home"
21316 "test_iter_lines_error"
21317 "test_quoting"
21318 "test_copy_move_delete")
21319 " and not "))))
21320 (native-inputs
21321 (list procps
21322 python-psutil
21323 python-pytest
21324 python-setuptools
21325 python-setuptools-scm
21326 python-wheel))
21327 (home-page "https://plumbum.readthedocs.io")
21328 (synopsis "Python shell combinators library")
21329 (description
21330 "Plumbum is a library of tools for replacing shell scripts with Python
21331code.")
21332 (license license:expat)))
21333
21334(define-public python-deprecation
21335 (package
21336 (name "python-deprecation")
21337 (version "2.1.0")
21338 (source
21339 (origin
21340 (method url-fetch)
21341 (uri (pypi-uri "deprecation" version))
21342 (sha256
21343 (base32
21344 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21345 (build-system pyproject-build-system)
21346 (arguments
21347 (list
21348 #:test-backend #~'unittest
21349 #:phases
21350 #~(modify-phases %standard-phases
21351 (add-after 'unpack 'drop-unittest2
21352 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21353 (lambda _
21354 (substitute* "tests/test_deprecation.py"
21355 (("import unittest2")
21356 "import unittest as unittest2")))))))
21357 (native-inputs
21358 (list python-setuptools))
21359 (propagated-inputs
21360 (list python-packaging))
21361 (home-page "https://deprecation.readthedocs.io/")
21362 (synopsis "Python library to handle automated deprecations")
21363 (description
21364 "This is a library that enables automated deprecations. It offers the
21365@code{deprecated()} decorator to wrap functions, providing proper warnings
21366both in documentation and via Python’s warnings system, as well as the
21367@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21368that deprecated code is eventually removed.")
21369 (license license:asl2.0)))
21370
21371(define-public python-jmespath
21372 (package
21373 (name "python-jmespath")
21374 (version "1.0.1")
21375 (source
21376 (origin
21377 (method url-fetch)
21378 (uri (pypi-uri "jmespath" version))
21379 (sha256
21380 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21381 (build-system pyproject-build-system)
21382 (native-inputs
21383 (list python-pytest
21384 python-setuptools))
21385 (home-page "https://github.com/jmespath/jmespath.py")
21386 (synopsis "JSON Matching Expressions")
21387 (description
21388 "JMESPath (pronounced “james path”) is a Python library that allows one
21389to declaratively specify how to extract elements from a JSON document.")
21390 (license license:expat)))
21391
21392(define-public python-asteval
21393 (package
21394 (name "python-asteval")
21395 (version "1.0.6")
21396 (source
21397 (origin
21398 (method url-fetch)
21399 (uri (pypi-uri "asteval" version))
21400 (sha256
21401 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21402 (build-system pyproject-build-system)
21403 (native-inputs
21404 (list python-pytest python-setuptools python-setuptools-scm))
21405 (home-page "https://github.com/newville/asteval")
21406 (synopsis "Minimalistic evaluator of Python expressions")
21407 (description
21408 "This package provides a minimalistic evaluator of Python expression
21409using the @code{ast} module.")
21410 (license license:expat)))
21411
21412(define-public python-lmfit
21413 (package
21414 (name "python-lmfit")
21415 (version "1.3.4")
21416 (source
21417 (origin
21418 (method git-fetch)
21419 (uri (git-reference
21420 (url "https://github.com/lmfit/lmfit-py")
21421 (commit version)))
21422 (file-name (git-file-name name version))
21423 (sha256
21424 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21425 (build-system pyproject-build-system)
21426 (native-inputs
21427 (list python-pytest
21428 python-setuptools
21429 python-setuptools-scm))
21430 (propagated-inputs
21431 (list python-asteval
21432 python-dill
21433 python-numpy
21434 python-scipy
21435 python-uncertainties))
21436 (home-page "https://lmfit.github.io/lmfit-py/")
21437 (synopsis "Least-Squares minimization with bounds and constraints")
21438 (description
21439 "Lmfit provides a high-level interface to non-linear optimization and
21440curve fitting problems for Python. It builds on and extends many of the
21441optimization methods of @code{scipy.optimize}. Initially inspired by (and
21442named for) extending the Levenberg-Marquardt method from
21443@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21444enhancements to optimization and data fitting problems.")
21445 (license license:bsd-3)))
21446
21447(define-public python-bokeh
21448 (package
21449 (name "python-bokeh")
21450 (version "3.7.3")
21451 (source (origin
21452 (method url-fetch)
21453 (uri (pypi-uri "bokeh" version))
21454 (sha256
21455 (base32
21456 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
21457 (build-system pyproject-build-system)
21458 (arguments
21459 (list
21460 ;; FIXME: Most of the tests do not work, figure out how to enable some
21461 ;; portion.
21462 #:tests? #f
21463 #:test-flags
21464 '(list
21465 ;; These require selenium.
21466 "--ignore=tests/unit/bokeh/io/test_export.py"
21467 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
21468 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
21469
21470 ;; Doesn't find ManagedServerLoop fixture
21471 "--ignore=tests/unit/bokeh/test_client_server.py"
21472
21473 ;; This fails because of the Guix wrapper around pytest
21474 "--ignore=tests/unit/bokeh/io/test_util__io.py"
21475
21476 ;; Fixture ipython not found.
21477 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
21478 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
21479
21480 ;; pd fixture not found.
21481 "--ignore=tests/unit/bokeh/models/test_mappers.py"
21482 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
21483 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
21484 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
21485 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
21486 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
21487 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
21488 "--ignore=tests/unit/bokeh/core/property/test_container.py"
21489 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
21490 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
21491 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
21492
21493 ;; nx fixture not found.
21494 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
21495 "--ignore=tests/unit/bokeh/models/test_graphs.py"
21496 "--ignore=tests/unit/bokeh/io/test_showing.py"
21497 "--ignore=tests/unit/bokeh/document/test_events__document.py"
21498
21499 ;; These tests need external sample data
21500 "--ignore-glob=tests/unit/bokeh/sampledata/*"
21501
21502 ;; Attempts to install something via npm.
21503 "--ignore=tests/unit/bokeh/test_ext.py"
21504
21505 ;; More failures due to set up problems.
21506 "--ignore=tests/unit/bokeh/server/test_server__server.py"
21507 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
21508 "--ignore=tests/unit/bokeh/util/test_serialization.py"
21509 "--ignore=tests/unit/bokeh/util/test_hex.py"
21510 "--ignore=tests/unit/bokeh/models/test_sources.py"
21511 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
21512
21513 "-k"
21514 (string-append
21515 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
21516 ;; Did you mean: 'assert_called_once_with'?
21517 "not test_set_from_json"
21518
21519 ;; XXX: This one test transforms a gif of a red box. It transforms
21520 ;; it all right but the base64 doesn't look as expected, probably
21521 ;; because of a change in pillow.
21522 " and not test_transform_PIL"))
21523 #:phases
21524 #~(modify-phases %standard-phases
21525 (add-before 'build 'set-version
21526 (lambda _
21527 (substitute* "pyproject.toml"
21528 ((", \"setuptools-git-versioning\"") "")
21529 (("dynamic = \\[\"version\"\\]")
21530 (string-append "version = '" #$version "'"))))))))
21531 (propagated-inputs
21532 (list node-lts
21533 python-contourpy
21534 python-jinja2
21535 python-narwhals
21536 python-numpy
21537 python-packaging
21538 python-pandas
21539 python-pillow
21540 python-pyyaml
21541 python-tornado
21542 python-xyzservices))
21543 (native-inputs
21544 (list python-beautifulsoup4
21545 python-dateutil
21546 python-flaky
21547 python-mock
21548 python-nbconvert
21549 python-pandas
21550 python-pytest
21551 python-pytz
21552 python-requests
21553 python-setuptools
21554 python-wheel))
21555 (home-page "https://github.com/bokeh/bokeh")
21556 (synopsis "Interactive plots and applications in the browser from Python")
21557 (description
21558 "This package provides tools for interactive plots and applications in the
21559browser from Python.")
21560 (license license:bsd-3)))
21561
21562;; TODO: Move to python-web.
21563(define-public python-botocore
21564 ;; Note: When updating botocore, also make sure that boto3 and awscli
21565 ;; are compatible.
21566 (package
21567 (name "python-botocore")
21568 (version "1.42.5")
21569 (source
21570 (origin
21571 (method url-fetch)
21572 (uri (pypi-uri "botocore" version))
21573 (sha256
21574 (base32
21575 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21576 (build-system pyproject-build-system)
21577 (arguments
21578 (list
21579 ;; tests: 4496 passed, 87 skipped
21580 #:test-flags
21581 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21582 ;; The full test suite is huge, run some of it's portion.
21583 "--ignore=tests/integration"
21584 "--ignore=tests/functional")))
21585 (native-inputs
21586 (list python-jsonschema
21587 python-pytest
21588 python-pytest-xdist
21589 python-setuptools))
21590 (propagated-inputs
21591 (list python-dateutil
21592 python-jmespath
21593 python-urllib3))
21594 (home-page "https://github.com/boto/botocore")
21595 (synopsis "Low-level interface to AWS")
21596 (description
21597 "Botocore is a Python library that provides a low-level interface to the
21598Amazon Web Services (AWS) API.")
21599 (license license:asl2.0)))
21600
21601(define-public python-boto3
21602 (package
21603 (name "python-boto3")
21604 (version "1.42.5")
21605 (source
21606 (origin
21607 (method git-fetch)
21608 (uri (git-reference
21609 (url "https://github.com/boto/boto3")
21610 (commit version)))
21611 (file-name (git-file-name name version))
21612 (sha256
21613 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21614 (build-system pyproject-build-system)
21615 (arguments
21616 (list
21617 ;; tests: 1435 passed, 22 skipped, 1 warning
21618 #:test-flags
21619 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21620 ;; Integration tests are trying to connect to AWS.
21621 "--ignore=tests/integration")))
21622 (native-inputs
21623 (list python-mock
21624 python-pytest
21625 python-pytest-xdist
21626 python-setuptools))
21627 (propagated-inputs
21628 (list python-botocore
21629 python-jmespath
21630 python-s3transfer))
21631 (home-page "https://github.com/boto/boto3")
21632 (synopsis "AWS SDK for Python")
21633 (description
21634 "Boto3 is a Python library for writing programs that interact with
21635@acronym{AWS,Amazon Web Services}.")
21636 (license license:asl2.0)))
21637
21638(define-public python-pyfiglet
21639 (package
21640 (name "python-pyfiglet")
21641 (version "1.0.4")
21642 (source
21643 (origin
21644 (method git-fetch)
21645 (uri (git-reference
21646 (url "https://github.com/pwaller/pyfiglet")
21647 (commit (string-append "v" version))))
21648 (file-name (git-file-name name version))
21649 (sha256
21650 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21651 (build-system pyproject-build-system)
21652 (arguments
21653 (list
21654 #:phases
21655 #~(modify-phases %standard-phases
21656 (add-after 'unpack 'fallback-on-default-build
21657 (lambda _
21658 ;; This pyproject has little value and fails because of the
21659 ;; :__legacy__ suffix. Removing it to rely on defaults.
21660 (delete-file "pyproject.toml"))))))
21661 (native-inputs (list python-pytest python-setuptools))
21662 (home-page "https://github.com/pwaller/pyfiglet")
21663 (synopsis "Draw ASCII art big letters in Python")
21664 (description
21665 "This module lets you draw large letter from ordinary characters in pure
21666 Python.")
21667 (license license:expat)))
21668
21669(define-public python-mako
21670 (package
21671 (name "python-mako")
21672 (version "1.3.12")
21673 (source
21674 (origin
21675 (method git-fetch)
21676 (uri (git-reference
21677 (url "https://github.com/sqlalchemy/mako")
21678 (commit (string-append "rel_" (string-replace-substring
21679 version "." "_")))))
21680 (file-name (git-file-name name version))
21681 (sha256
21682 (base32 "1cvx14yvsx13fnxbwjy4jh8yy87pa6lzfgqzkih4j6c8q0zjd0v0"))))
21683 (build-system pyproject-build-system)
21684 (native-inputs
21685 (list python-pytest
21686 python-setuptools))
21687 (propagated-inputs
21688 (list python-markupsafe))
21689 (home-page "https://www.makotemplates.org/")
21690 (synopsis "Templating language for Python")
21691 (description "Mako is a templating language for Python that compiles
21692templates into Python modules.")
21693 (license license:expat)))
21694
21695(define-public python-cookiecutter
21696 (package
21697 (name "python-cookiecutter")
21698 (version "2.6.0")
21699 (source
21700 (origin
21701 (method url-fetch)
21702 (uri (pypi-uri "cookiecutter" version))
21703 (sha256
21704 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21705 (build-system pyproject-build-system)
21706 (arguments
21707 (list
21708 #:phases #~(modify-phases %standard-phases
21709 (add-before 'check 'pre-check
21710 (lambda _
21711 ;; test_get_user_config.py requires a writable home
21712 ;; directory.
21713 (setenv "HOME"
21714 (getcwd))
21715 ;; test_hooks.py dynamically creates shell scripts
21716 ;; with a /bin/bash shebang. We have to patch these.
21717 (substitute* "tests/test_hooks.py"
21718 (("/bin/bash")
21719 (string-append #$(this-package-native-input
21720 "bash-minimal") "/bin/bash"))))))))
21721 (native-inputs (list bash-minimal
21722 git-minimal/pinned
21723 python-freezegun
21724 python-pytest
21725 python-pytest-mock
21726 python-setuptools
21727 python-wheel))
21728 (propagated-inputs (list python-arrow
21729 python-binaryornot
21730 python-click
21731 python-jinja2
21732 python-pyyaml
21733 python-requests
21734 python-rich
21735 python-slugify))
21736 (home-page "https://github.com/cookiecutter/cookiecutter")
21737 (synopsis
21738 "Command-line utility that creates projects from project templates")
21739 (description
21740 "This package provides a command-line utility that creates projects from
21741project templates, e.g. creating a Python package project from a Python package
21742project template.")
21743 (license license:bsd-3)))
21744
21745(define-public python-pyquery
21746 (package
21747 (name "python-pyquery")
21748 (version "2.0.1")
21749 (source
21750 (origin
21751 (method url-fetch)
21752 (uri (pypi-uri "pyquery" version))
21753 (sha256
21754 (base32
21755 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21756 (build-system pyproject-build-system)
21757 (arguments
21758 (list
21759 #:test-flags
21760 #~(list #$@(map (lambda (test) (string-append
21761 "--deselect=tests/test_pyquery.py::"
21762 test))
21763 (list
21764 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21765 "TestWebScrapping::test_post"
21766 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21767 "TestWebScrapping::test_session"
21768 ;; Assertion is not equal.
21769 "TestManipulating::test_val_for_textarea"
21770 "TestHTMLParser::test_replaceWith"
21771 "TestHTMLParser::test_replaceWith_with_function"
21772 ;; Network access is required.
21773 "TestWebScrapping::test_get"
21774 "TestWebScrappingEncoding::test_get")))))
21775 (native-inputs
21776 (list python-pytest
21777 python-requests
21778 python-setuptools
21779 python-webob
21780 python-webtest
21781 python-wheel))
21782 (propagated-inputs
21783 (list python-cssselect python-lxml))
21784 (home-page "https://github.com/gawel/pyquery")
21785 (synopsis "Make jQuery-like queries on xml documents")
21786 (description "pyquery allows you to make jQuery queries on xml documents.
21787The API is as much as possible the similar to jQuery. pyquery uses lxml for
21788fast xml and html manipulation.")
21789 (license license:bsd-3)))
21790
21791(define-public python-amqp
21792 (package
21793 (name "python-amqp")
21794 (version "5.1.1")
21795 (source
21796 (origin
21797 (method url-fetch)
21798 (uri (pypi-uri "amqp" version))
21799 (sha256
21800 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21801 (build-system pyproject-build-system)
21802 (arguments
21803 (list ; Integration tests require network connectivity.
21804 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21805 (native-inputs (list python-pytest python-setuptools python-wheel))
21806 (propagated-inputs (list python-vine))
21807 (home-page "https://github.com/celery/py-amqp")
21808 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21809 (description
21810 "This is a fork of amqplib which was originally written by Barry Pederson.
21811It is maintained by the Celery project, and used by kombu as a pure python
21812alternative when librabbitmq is not available.")
21813 (license license:lgpl2.1+)))
21814
21815(define-public python-benchmark-4dn
21816 (package
21817 (name "python-benchmark-4dn")
21818 (version "0.5.24")
21819 (source (origin
21820 (method url-fetch)
21821 (uri (pypi-uri "benchmark_4dn" version))
21822 (sha256
21823 (base32
21824 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21825 (properties '(("upstream-name" . "benchmark_4dn")))
21826 (build-system pyproject-build-system)
21827 ;; There are none.
21828 (arguments (list #:tests? #false))
21829 (native-inputs
21830 (list python-poetry-core))
21831 (home-page "https://github.com/SooLee/Benchmark/")
21832 (synopsis "Benchmark functions for CWL workflows")
21833 (description
21834 "This package provides benchmark functions that return total space, memory,
21835CPUs required per given input size, and parameters for CWL workflows.")
21836 (license license:expat)))
21837
21838(define-public python-beniget
21839 (package
21840 (name "python-beniget")
21841 (version "0.5.0")
21842 (source
21843 (origin
21844 (method url-fetch)
21845 (uri (pypi-uri "beniget" version))
21846 (sha256
21847 (base32 "08ig66dp3xjl3nhqlpdkv0bl1m0m5mr1x2yrncz3vpn7ivx13bz7"))))
21848 (build-system pyproject-build-system)
21849 (native-inputs
21850 (list python-pytest
21851 python-setuptools))
21852 (propagated-inputs
21853 (list python-gast))
21854 (home-page "https://github.com/serge-sans-paille/beniget")
21855 (synopsis "Extract semantic information about static Python code")
21856 (description
21857 "Beniget is a collection of analyzers for Python @acronym{AST,
21858Abstract Syntax Tree}. It is a building block for writing a static analyzer
21859or compiler for Python.")
21860 (license license:bsd-3)))
21861
21862(define-public python-kombu
21863 (package
21864 (name "python-kombu")
21865 (version "5.6.2")
21866 (source
21867 (origin
21868 (method git-fetch)
21869 (uri (git-reference
21870 (url "https://github.com/celery/kombu")
21871 (commit (string-append "v" version))))
21872 (file-name (git-file-name name version))
21873 (sha256
21874 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21875 (build-system pyproject-build-system)
21876 (arguments
21877 (list
21878 ;; tests: 854 passed, 193 skipped
21879 #:test-flags
21880 #~(list
21881 ;; TODO: Package azure-identity (required for this file)
21882 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21883 ;; XXX: Requires google-cloud-pubsub.
21884 "--ignore=t/unit/transport/test_gcpubsub.py"
21885 ;; XXX: Requires pyro, see:
21886 ;; <https://codeberg.org/guix/guix/issues/5857>
21887 "--ignore=t/unit/transport/test_pyro.py")
21888 #:phases
21889 #~(modify-phases %standard-phases
21890 (add-after 'unpack 'relax-requirements
21891 (lambda _
21892 (substitute* "requirements/default.txt"
21893 (("tzdata>=2025.2")
21894 "tzdata>=2025.1")))))))
21895 (native-inputs
21896 (list python-botocore
21897 python-pytest
21898 python-pytest-freezer
21899 python-pytest-sugar
21900 python-setuptools))
21901 (propagated-inputs
21902 (list python-amqp
21903 python-packaging
21904 python-tzdata
21905 python-vine))
21906 (home-page "https://kombu.readthedocs.io")
21907 (synopsis "Message passing library for Python")
21908 (description
21909 "The aim of Kombu is to make messaging in Python as easy as possible by
21910providing an idiomatic high-level interface for the AMQ protocol, and also
21911provide proven and tested solutions to common messaging problems. AMQP is the
21912Advanced Message Queuing Protocol, an open standard protocol for message
21913orientation, queuing, routing, reliability and security, for which the
21914RabbitMQ messaging server is the most popular implementation.")
21915 (license license:bsd-3)))
21916
21917(define-public python-billiard
21918 (package
21919 (name "python-billiard")
21920 (version "4.2.2")
21921 (source
21922 (origin
21923 (method git-fetch)
21924 (uri (git-reference
21925 (url "https://github.com/celery/billiard")
21926 (commit (string-append "v" version))))
21927 (file-name (git-file-name name version))
21928 (sha256
21929 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21930 (build-system pyproject-build-system)
21931 (arguments
21932 (list
21933 #:phases
21934 #~(modify-phases %standard-phases
21935 (add-after 'unpack 'remove-win-files
21936 (lambda _
21937 (for-each delete-file-recursively
21938 '("billiard/popen_spawn_win32.py"
21939 "billiard/_win.py")))))))
21940 (native-inputs (list python-psutil python-pytest python-setuptools))
21941 (home-page "https://github.com/celery/billiard")
21942 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21943 (description
21944 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21945multiprocessing package itself is a renamed and updated version of R Oudkerk's
21946pyprocessing package. This standalone variant is intended to be compatible with
21947Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21948 (license license:bsd-3)))
21949
21950(define-public python-celery
21951 (package
21952 (name "python-celery")
21953 (version "5.6.3")
21954 (source
21955 (origin
21956 (method url-fetch)
21957 (uri (pypi-uri "celery" version))
21958 (sha256
21959 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21960 (build-system pyproject-build-system)
21961 (arguments
21962 (list
21963 ;; tests: 3362 passed, 38 skipped, 10 deselected, 3 xfailed, 63
21964 ;; warnings, 28808 subtests passed
21965 #:test-flags
21966 ;; The MongoDB backend test appears to expect an older version of
21967 ;; MongoDB which provided its own bson module, fails with "
21968 ;; AttributeError: module 'bson' has no attribute 'encode'".
21969 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21970 ;; XXX: Requires google-cloud-firestore
21971 "--ignore=t/unit/backends/test_gcs.py"
21972 "-k" (string-join
21973 (list ;; AssertionError.
21974 "not test_check_privileges_no_fchown"
21975 ;; These 3 tests error out on ci.guix.gnu.org with
21976 ;; OSError: [Errno 24] Too many open files
21977 "test_register_with_event_loop__no_on_tick_dupes"
21978 "test_with_autoscaler_file_descriptor_safety"
21979 "test_with_file_descriptor_safety"
21980 ;; XXX: Fails to compare local timezones.
21981 "test_use_local_timezone"
21982 ;; assert 'No such option: --ini' in <...>
21983 "test_preload_options[subcommand_with_params0]"
21984 "test_preload_options[subcommand_with_params1]")
21985 " and not "))))
21986 (native-inputs
21987 (list python-azure-core
21988 python-dnspython
21989 python-flaky
21990 python-gevent
21991 python-google-cloud-storage
21992 python-iniconfig
21993 python-moto
21994 python-msgpack
21995 python-pymongo
21996 python-pytest
21997 python-pytest-celery
21998 python-pytest-click
21999 python-pytest-order
22000 python-pytest-timeout
22001 python-redis
22002 python-setuptools))
22003 (propagated-inputs
22004 (list python-billiard
22005 python-click
22006 python-click-didyoumean
22007 python-click-plugins
22008 python-click-repl
22009 python-dateutil
22010 python-kombu
22011 python-tzlocal
22012 python-vine))
22013 (home-page "https://celeryproject.org")
22014 (synopsis "Distributed Task Queue")
22015 (description
22016 "Celery is an asynchronous task queue/job queue based on distributed
22017message passing. It is focused on real-time operation, but supports
22018scheduling as well. The execution units, called tasks, are executed
22019concurrently on a single or more worker servers using multiprocessing,
22020Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
22021synchronously (wait until ready).")
22022 (license license:bsd-3)))
22023
22024;; A bare minimal package, mainly to use in tests and reduce closure
22025;; size. Tests are left out in the main package to slim down native-inputs.
22026(define-public python-celery-minimal
22027 (package/inherit python-celery
22028 (name "python-celery-minimal")
22029 (arguments
22030 (list #:tests? #f))
22031 (native-inputs
22032 (list python-setuptools))))
22033
22034(define-public python-anyqt
22035 (package
22036 (name "python-anyqt")
22037 (version "0.2.1")
22038 (source
22039 (origin
22040 (method git-fetch)
22041 (uri (git-reference
22042 (url "https://github.com/ales-erjavec/anyqt")
22043 (commit version)))
22044 (file-name (git-file-name name version))
22045 (sha256
22046 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
22047 (build-system pyproject-build-system)
22048 (arguments
22049 (list
22050 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
22051 ;; TODO Add/configure the right Qt inputs.
22052 #:test-flags
22053 #~(list "--ignore-glob=tests/test_q*.py")
22054 #:phases
22055 #~(modify-phases %standard-phases
22056 (add-after 'unpack 'delete-files
22057 ;; Delete files related to other operating systems.
22058 (lambda _
22059 (delete-file "AnyQt/QtMacExtras.py")
22060 (delete-file "AnyQt/QtWinExtras.py"))))))
22061 (native-inputs
22062 (list python-pyqt-6
22063 python-pytest
22064 python-pytest-qt
22065 python-setuptools))
22066 (home-page "https://github.com/ales-erjavec/anyqt")
22067 (synopsis "PyQt compatibility layer")
22068 (description
22069 "This package provides a PyQt/PySide compatibility layer. More precisely,
22070it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
22071PySide, PySide2.")
22072 (license license:gpl3)))
22073
22074(define-public python-qasync
22075 (package
22076 (name "python-qasync")
22077 (version "0.28.0")
22078 (source
22079 (origin
22080 (method git-fetch)
22081 (uri (git-reference
22082 (url "https://github.com/CabbageDevelopment/qasync/")
22083 (commit (string-append "v" version))))
22084 (file-name (git-file-name name version))
22085 (sha256
22086 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
22087 (build-system pyproject-build-system)
22088 (arguments
22089 (list
22090 #:phases
22091 #~(modify-phases %standard-phases
22092 (add-before 'check 'set-qpa
22093 (lambda _
22094 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
22095 (native-inputs
22096 (list python-pytest python-uv-build))
22097 (propagated-inputs
22098 (list python-pyqt-6))
22099 (home-page "https://github.com/CabbageDevelopment/qasync")
22100 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
22101 (description
22102 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
22103by providing an implementation of the PEP 3156 event-loop.")
22104 (license license:bsd-2)))
22105
22106(define-public python-editor
22107 (package
22108 (name "python-editor")
22109 (version "1.8.0")
22110 (source
22111 (origin
22112 (method git-fetch)
22113 (uri (git-reference
22114 (url "https://github.com/rec/editor")
22115 (commit (string-append "v" version))))
22116 (file-name (git-file-name name version))
22117 (sha256
22118 (base32 "0xc8p92n7lsgaah0xbaxyml2l8mfajb7v8kdiwy5rw6mh3phbwlr"))))
22119 (build-system pyproject-build-system)
22120 (native-inputs (list python-hatchling python-pytest python-tdir))
22121 (propagated-inputs (list python-runs python-xmod))
22122 (home-page "https://rec.github.io/editor/")
22123 (synopsis "Open the default text editor")
22124 (description
22125 "@code{editor} opens the default text editor to edit an existing file, a
22126new file, or a tempfile, blocks while the user edits text, then returns the
22127contents of the file.")
22128 (license license:expat)))
22129
22130(define-public python-multiprocessing-logging
22131 (package
22132 (name "python-multiprocessing-logging")
22133 (version "0.3.4")
22134 (home-page "https://github.com/jruere/multiprocessing-logging")
22135 (source
22136 (origin
22137 (method git-fetch)
22138 (uri (git-reference
22139 (url home-page)
22140 (commit (string-append "v" version))))
22141 (file-name (git-file-name name version))
22142 (sha256
22143 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
22144 (build-system pyproject-build-system)
22145 (arguments (list #:test-backend #~'unittest))
22146 (native-inputs (list python-setuptools))
22147 (synopsis "Manage logs from multiple processes")
22148 (description
22149 "This Python module implements a multiprocessing-aware @code{Handler}
22150that, when set on the root @code{Logger}, will tunnel log records to the
22151main process so that they are handled correctly.")
22152 (license license:lgpl3+)))
22153
22154(define-public python-munkres
22155 (package
22156 (name "python-munkres")
22157 (version "1.1.4")
22158 (source
22159 (origin
22160 (method url-fetch)
22161 (uri (pypi-uri "munkres" version))
22162 (sha256
22163 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
22164 (build-system pyproject-build-system)
22165 (arguments
22166 (list
22167 ;; See https://github.com/bmc/munkres/issues/40
22168 #:test-flags
22169 (if (member (%current-system) %32bit-supported-systems)
22170 #~(list "-k" "not test_profit_float")
22171 #~(list))))
22172 (native-inputs (list python-pytest python-setuptools))
22173 (home-page "https://software.clapper.org/munkres/")
22174 (synopsis "Implementation of the Munkres algorithm")
22175 (description
22176 "The Munkres module provides an implementation of the Munkres algorithm
22177(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
22178for solving the Assignment Problem.")
22179 (license license:bsd-3)))
22180
22181(define-public python-codespell
22182 (package
22183 (name "python-codespell")
22184 (version "2.4.3")
22185 (source
22186 (origin
22187 (method git-fetch)
22188 (uri (git-reference
22189 (url "https://github.com/codespell-project/codespell")
22190 (commit (string-append "v" version))))
22191 (file-name (git-file-name name version))
22192 (sha256
22193 (base32 "1c1wnl14af496s5iwsc0bp6pg4i8yankr7wvxxb66dc8s87n2rd1"))))
22194 (build-system pyproject-build-system)
22195 (native-inputs
22196 (list python-pygments
22197 python-pytest
22198 python-pytest-dependency
22199 python-setuptools
22200 python-setuptools-scm))
22201 (propagated-inputs
22202 (list python-chardet))
22203 (home-page "https://github.com/codespell-project/codespell/")
22204 (synopsis "Spellchecker for code")
22205 (description
22206 "Codespell fixes common misspellings in text files. It's designed
22207primarily for checking misspelled words in source code, but it can be used
22208with other files as well. It does not check for word membership in a complete
22209dictionary, but instead looks for a set of common misspellings. Therefore it
22210should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
22211also means it shouldn't generate false-positives when you use a niche term it
22212doesn't know about.")
22213 (license
22214 (list
22215 ; for codespell and codespell_lib
22216 license:gpl2
22217 ; for dictionary*.txt
22218 license:cc-by-sa3.0))))
22219
22220(define-public python-jellyfish
22221 (package
22222 (name "python-jellyfish")
22223 (version "1.2.1")
22224 (source
22225 (origin
22226 (method git-fetch)
22227 (uri (git-reference
22228 (url "https://github.com/jamesturk/jellyfish")
22229 (commit (string-append "v" version))))
22230 (file-name (git-file-name name version))
22231 (sha256
22232 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
22233 (build-system pyproject-build-system)
22234 (arguments
22235 (list
22236 #:imported-modules (append %cargo-build-system-modules
22237 %pyproject-build-system-modules)
22238 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
22239 (guix build pyproject-build-system)
22240 (guix build utils))
22241 #:phases
22242 #~(modify-phases %standard-phases
22243 (add-after 'unpack 'prepare-cargo-build-system
22244 (lambda args
22245 (for-each
22246 (lambda (phase)
22247 (format #t "Running cargo phase: ~a~%" phase)
22248 (apply (assoc-ref cargo:%standard-phases phase)
22249 #:cargo-target #$(cargo-triplet)
22250 args))
22251 '(unpack-rust-crates
22252 configure
22253 check-for-pregenerated-files
22254 patch-cargo-checksums)))))))
22255 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
22256 (native-inputs
22257 (append
22258 (list python-pytest
22259 python-setuptools
22260 rust
22261 `(,rust "cargo"))
22262 (or (and=> (%current-target-system)
22263 (compose list make-rust-sysroot))
22264 '())))
22265 (home-page "https://www.jpt.sh/projects/jellyfish/")
22266 (synopsis "Approximate and phonetic matching of strings")
22267 (description "Jellyfish uses a variety of string comparison and phonetic
22268encoding algorithms to do fuzzy string matching.")
22269 (license license:bsd-2)))
22270
22271(define-public python-pdfminer-six
22272 (package
22273 (name "python-pdfminer-six")
22274 (version "20260107")
22275 ;; There are no tests in the PyPI tarball.
22276 (source
22277 (origin
22278 (method git-fetch)
22279 (uri (git-reference
22280 (url "https://github.com/pdfminer/pdfminer.six")
22281 (commit version)))
22282 (file-name (git-file-name name version))
22283 (sha256
22284 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
22285 (build-system pyproject-build-system)
22286 (arguments
22287 (list #:phases
22288 #~(modify-phases %standard-phases
22289 ;; Tests write to the source tree.
22290 (add-after 'unpack 'make-git-checkout-writable
22291 (lambda _
22292 (for-each make-file-writable (find-files ".")))))))
22293 (propagated-inputs
22294 (list python-charset-normalizer python-cryptography))
22295 (native-inputs
22296 (list python-pytest python-setuptools python-setuptools-scm))
22297 (home-page "https://github.com/pdfminer/pdfminer.six")
22298 (synopsis "PDF parser and analyzer")
22299 (description "@code{pdfminer.six} is a community maintained fork of
22300the original PDFMiner. It is a tool for extracting information from PDF
22301documents. It focuses on getting and analyzing text data. Pdfminer.six
22302extracts the text from a page directly from the sourcecode of the PDF. It
22303can also be used to get the exact location, font or color of the text.")
22304 (license license:expat)))
22305
22306(define-public python-rarfile
22307 (package
22308 (name "python-rarfile")
22309 (version "4.2")
22310 (source
22311 (origin
22312 (method git-fetch)
22313 (uri (git-reference
22314 (url "https://github.com/markokr/rarfile")
22315 (commit (string-append "v" version))))
22316 (file-name (git-file-name name version))
22317 (sha256
22318 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
22319 (build-system pyproject-build-system)
22320 (arguments
22321 (list
22322 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
22323 #:phases
22324 #~(modify-phases %standard-phases
22325 (add-after 'unpack 'patch
22326 (lambda* (#:key inputs #:allow-other-keys)
22327 (substitute* "rarfile.py"
22328 ;; Disable unrar and unar, which are unavailable on Guix.
22329 (("(unrar|unar)=True" all tool)
22330 (string-append tool "=False"))
22331 ;; Hardcode path to bsdtar
22332 (("\"bsdtar\"")
22333 (format #f "~s"
22334 (search-input-file inputs "bin/bsdtar")))))))))
22335 (native-inputs (list python-pytest python-setuptools))
22336 (inputs (list libarchive))
22337 (home-page "https://github.com/markokr/rarfile")
22338 (synopsis "RAR archive reader for Python")
22339 (description
22340 "This is Python module for RAR archive reading. The interface is made as
22341zipfile like as possible.")
22342 (license license:isc)))
22343
22344(define-public python-rassumfrassum
22345 (package
22346 (name "python-rassumfrassum")
22347 (version "0.3.3")
22348 (source
22349 (origin
22350 (method git-fetch)
22351 (uri (git-reference
22352 (url "https://github.com/joaotavora/rassumfrassum")
22353 (commit (string-append "v" version))))
22354 (file-name (git-file-name name version))
22355 (sha256
22356 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
22357 (build-system pyproject-build-system)
22358 (arguments
22359 (list
22360 #:phases
22361 #~(modify-phases %standard-phases
22362 (replace 'check
22363 (lambda* (#:key tests? #:allow-other-keys)
22364 (when tests?
22365 (invoke "test/run-all.sh")))))))
22366 (native-inputs (list python-setuptools))
22367 (home-page "https://github.com/joaotavora/rassumfrassum")
22368 (synopsis "Connect an LSP client to multiple LSP servers")
22369 (description
22370 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22371 (license license:gpl3+)))
22372
22373(define-public python-slugid
22374 (package
22375 (name "python-slugid")
22376 (version "2.0.0")
22377 (source
22378 (origin
22379 (method git-fetch)
22380 (uri (git-reference
22381 (url "https://github.com/taskcluster/slugid.py")
22382 (commit (string-append "v" version))))
22383 (file-name (git-file-name name version))
22384 (sha256
22385 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22386 (build-system pyproject-build-system)
22387 (arguments (list #:test-backend #~'nose))
22388 (native-inputs (list python-pynose python-setuptools))
22389 (home-page "http://taskcluster.github.io/slugid.py")
22390 (synopsis "Module for Base64 encoded UUID v4 slugs")
22391 (description
22392 "This package provides a module for generating v4 UUIDs and encoding them
22393into 22 character URL-safe base64 slug representation.")
22394 (license license:mpl2.0)))
22395
22396(define-public python-rich
22397 (package
22398 (name "python-rich")
22399 (version "15.0.0")
22400 (source
22401 (origin
22402 (method git-fetch)
22403 (uri (git-reference
22404 (url "https://github.com/willmcgugan/rich")
22405 (commit (string-append "v" version))))
22406 (file-name (git-file-name name version))
22407 (sha256
22408 (base32 "1qs8n1hcjxcpwbfjjlzfmywfczxzcpvjkk3ay04kdbi1lvlynkaj"))))
22409 (build-system pyproject-build-system)
22410 ;; The test_brokenpipeerror is flaky.
22411 (arguments (list #:test-flags #~(list "-k" "not test_brokenpipeerror")))
22412 (native-inputs
22413 (list python-poetry-core
22414 python-pytest
22415 which))
22416 (propagated-inputs
22417 (list python-markdown-it-py
22418 python-pygments))
22419 (home-page "https://github.com/willmcgugan/rich")
22420 (synopsis "Render rich text and more to the terminal")
22421 (description
22422 "This is a Python package for rendering rich text, tables, progress bars,
22423syntax highlighting, markdown and more to the terminal.")
22424 (license license:expat)))
22425
22426(define-public python-rich-click
22427 (package
22428 (name "python-rich-click")
22429 (version "1.9.8")
22430 (source
22431 (origin
22432 (method git-fetch)
22433 (uri (git-reference
22434 (url "https://github.com/ewels/rich-click")
22435 (commit (string-append "v" version))))
22436 (file-name (git-file-name name version))
22437 (sha256
22438 (base32 "1xgsblpkp4f43y579614n6cp8br2acms8vdj8gpqxa05csap0fqn"))))
22439 (build-system pyproject-build-system)
22440 (arguments
22441 (list
22442 #:test-flags
22443 ;; python-typer 0.26 vendored python-click and broke a lot of things.
22444 ;; See <https://github.com/ewels/rich-click/issues/330> and
22445 ;; <https://github.com/ewels/rich-click/commit/989c38cf4ed918a25fa523c8191c66b42315cb10>.
22446 ;; 136 passed, 6 skipped, 6 deselected
22447 #~(list "-k" "not _typer_")))
22448 (native-inputs
22449 (list python-inline-snapshot
22450 python-pytest
22451 python-setuptools
22452 python-typer))
22453 (propagated-inputs
22454 (list python-click
22455 python-rich))
22456 (home-page "https://github.com/ewels/rich-click")
22457 (synopsis "Format click help output nicely with rich")
22458 (description "Click is a \"Python package for creating beautiful command
22459line interfaces\". Rich is a \"Python library for rich text and beautiful
22460formatting in the terminal\". The intention of rich-click is to provide
22461attractive help output from click, formatted with rich, with minimal
22462customization required.")
22463 (license license:expat)))
22464
22465(define-public python-magic
22466 (package
22467 (name "python-magic")
22468 (version "0.4.27")
22469 (home-page "https://github.com/ahupp/python-magic")
22470 (source
22471 (origin
22472 (method git-fetch)
22473 (uri (git-reference (url home-page) (commit version)))
22474 (file-name (git-file-name name version))
22475 (sha256
22476 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22477 (build-system pyproject-build-system)
22478 (arguments
22479 (list
22480 #:test-backend #~'custom
22481 #:test-flags #~(list "test/libmagic_test.py")
22482 #:phases
22483 #~(modify-phases %standard-phases
22484 (add-after 'unpack 'fix-tests
22485 (lambda _
22486 ;; Adjust expected output for [email protected].
22487 (substitute* "test/libmagic_test.py"
22488 (("PDF document, version 1\\.2, 2 pages")
22489 "PDF document, version 1.2, 2 page(s)"))))
22490 ;; Replace a specific method call with a hard-coded path to the
22491 ;; necessary libmagic.so file in the store.
22492 (add-before 'build 'hard-code-path-to-libmagic
22493 (lambda* (#:key inputs #:allow-other-keys)
22494 (substitute* "magic/loader.py"
22495 (("find_library\\('magic'\\)")
22496 (format #f "~s"
22497 (search-input-file inputs "lib/libmagic.so")))))))))
22498 (native-inputs (list which python-setuptools))
22499 (inputs
22500 ;; python-magic needs to be able to find libmagic.so.
22501 (list file))
22502 (synopsis "File type identification using libmagic")
22503 (description
22504 "This module uses ctypes to access the libmagic file type identification
22505library. It makes use of the local magic database and supports both textual
22506and MIME-type output. Note that this module and the python-file module both
22507provide a \"magic.py\" file; these two modules, which are different and were
22508developed separately, both serve the same purpose: to provide Python bindings
22509for libmagic.")
22510 (license license:expat)))
22511
22512(define-public python-securetar
22513 (package
22514 (name "python-securetar")
22515 (version "2025.1.4")
22516 (source
22517 (origin
22518 (method git-fetch)
22519 (uri (git-reference
22520 (url "https://github.com/pvizeli/securetar")
22521 (commit version)))
22522 (file-name (git-file-name name version))
22523 (sha256
22524 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22525 (build-system pyproject-build-system)
22526 (native-inputs (list python-setuptools python-wheel python-pytest))
22527 (propagated-inputs (list python-cryptography))
22528 (home-page "https://github.com/pvizeli/securetar")
22529 (synopsis "Python module to handle tarfile backups")
22530 (description
22531 "This library provides a streaming wrapper around python tarfile and allow
22532secure handling files and support encryption.")
22533 (license license:asl2.0)))
22534
22535(define-public python-pkgconfig
22536 (package
22537 (name "python-pkgconfig")
22538 (version "1.6.0")
22539 (source
22540 (origin
22541 (method git-fetch)
22542 (uri (git-reference
22543 (url "https://github.com/matze/pkgconfig")
22544 (commit (string-append "v" version))))
22545 (file-name (git-file-name name version))
22546 (sha256
22547 (base32 "0xlfghjbx04gls3ad1ncggpi4xvjxcirrm3bamv5gp9wv3z5ln8s"))))
22548 (build-system pyproject-build-system)
22549 (arguments
22550 (list
22551 #:phases
22552 #~(modify-phases %standard-phases
22553 (add-after 'unpack 'fix-test-data
22554 (lambda _
22555 (substitute* "tests/data/fake-openssl.pc"
22556 (("Requires: libssl libcrypto") ""))))
22557 (add-before 'build 'set-pkg-config-path
22558 (lambda* (#:key inputs #:allow-other-keys)
22559 (setenv "PKG_CONFIG"
22560 (search-input-file inputs "/bin/pkg-config"))
22561 (substitute* "src/pkgconfig/pkgconfig.py"
22562 (("'pkg-config'")
22563 (format #f "~s"
22564 (search-input-file inputs "/bin/pkg-config")))))))))
22565 (native-inputs (list python-poetry-core python-pytest))
22566 (inputs (list pkg-config))
22567 (home-page "https://github.com/matze/pkgconfig")
22568 (synopsis "Python interface for pkg-config")
22569 (description "This module provides a Python interface to pkg-config. It
22570can be used to find all pkg-config packages, check if a package exists,
22571check if a package meets certain version requirements, query CFLAGS and
22572LDFLAGS and parse the output to build extensions with setup.py.")
22573 (license license:expat)))
22574
22575;; This package is unmaintained since 2014, but still used in `khmer'.
22576(define-public python-bz2file
22577 (package
22578 (name "python-bz2file")
22579 (version "0.98")
22580 (source
22581 (origin
22582 (method url-fetch)
22583 (uri (pypi-uri "bz2file" version))
22584 (sha256
22585 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22586 (build-system pyproject-build-system)
22587 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22588 (native-inputs (list python-setuptools))
22589 (home-page "https://github.com/nvawda/bz2file")
22590 (synopsis "Read and write bzip2-compressed files")
22591 (description
22592 "Bz2file is a Python library for reading and writing bzip2-compressed
22593files. It contains a drop-in replacement for the I/O interface in the
22594standard library's @code{bz2} module, including features from the latest
22595development version of CPython that are not available in older releases.")
22596 (license license:asl2.0)))
22597
22598(define-public python-future
22599 (package
22600 (name "python-future")
22601 (version "1.0.0")
22602 (source
22603 (origin
22604 (method url-fetch)
22605 (uri (pypi-uri "future" version))
22606 (sha256
22607 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22608 (build-system pyproject-build-system)
22609 (arguments
22610 (list
22611 #:test-flags
22612 ;; Self tests failed.
22613 #~(list "--ignore=tests/test_future/test_futurize.py"
22614 "-k" (string-join
22615 ;; Self tests failed.
22616 (list "not test_division"
22617 "test_functions_unchanged"
22618 "test_mixed_annotations"
22619 "test_multiple_param_annotations"
22620 "test_print"
22621 "test_range_slice"
22622 ;; Network access is required.
22623 "test_ftp"
22624 "test_main"
22625 "test_moves_urllib_request_http"
22626 "test_urllib_request_http"
22627 ;; Tests failing on Python 3.12
22628 "test_converting_drive_letter"
22629 "test_converting_drive_letter"
22630 "test_converting_when_no_drive_letter"
22631 "test_converting_when_no_drive_letter"
22632 "test_converting_when_no_drive_letter"
22633 "test_converting_when_no_drive_letter"
22634 "test_isinstance_recursion_limit"
22635 "test_roundtrip_pathname2url"
22636 "test_roundtrip_pathname2url"
22637 "test_roundtrip_url2pathname"
22638 "test_roundtrip_url2pathname"
22639 "test_subclass_recursion_limit")
22640 " and not "))))
22641 (native-inputs
22642 (list python-pytest
22643 python-setuptools))
22644 (home-page "https://python-future.org")
22645 (synopsis "Single-source support for Python 3 and 2")
22646 (description
22647 "@code{python-future} is the missing compatibility layer between Python 2
22648and Python 3. It allows you to use a single, clean Python 3.x-compatible
22649codebase to support both Python 2 and Python 3 with minimal overhead.")
22650 (license license:expat)))
22651
22652(define-public python-cysignals
22653 (package
22654 (name "python-cysignals")
22655 (version "1.12.3")
22656 (source
22657 (origin
22658 (method url-fetch)
22659 (uri (pypi-uri "cysignals" version))
22660 (sha256
22661 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22662 (build-system pyproject-build-system)
22663 (native-inputs (list python-meson
22664 python-cython
22665 python-pytest))
22666 (home-page "https://github.com/sagemath/cysignals")
22667 (synopsis "Handling of interrupts and signals for Cython")
22668 (description
22669 "The cysignals package provides mechanisms to handle interrupts (and
22670other signals and errors) in Cython code, using two related approaches,
22671for mixed Cython/Python code or external C libraries and pure Cython code,
22672respectively.")
22673 (license license:lgpl3+)))
22674
22675(define-public python-rope
22676 (package
22677 (name "python-rope")
22678 (version "1.13.0")
22679 (source
22680 (origin
22681 (method url-fetch)
22682 (uri (pypi-uri "rope" version))
22683 (sha256
22684 (base32
22685 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22686 (build-system pyproject-build-system)
22687 (arguments
22688 (list
22689 #:test-flags
22690 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22691 (propagated-inputs (list python-pytoolconfig))
22692 (native-inputs
22693 (list python-pytest python-pytest-timeout python-setuptools))
22694 (home-page "https://github.com/python-rope/rope")
22695 (synopsis "Refactoring library for Python")
22696 (description
22697 "Rope is a refactoring library for Python. It facilitates the renaming,
22698moving and extracting of attributes, functions, modules, fields and parameters
22699in Python source code. These refactorings can also be applied to occurrences
22700in strings and comments.")
22701 (license license:lgpl3+)))
22702
22703(define-public python-py3status
22704 (package
22705 (name "python-py3status")
22706 (version "3.62")
22707 (source
22708 (origin
22709 (method git-fetch)
22710 (uri (git-reference
22711 (url "https://github.com/ultrabug/py3status")
22712 (commit version)))
22713 (file-name (git-file-name name version))
22714 (sha256
22715 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22716 (build-system pyproject-build-system)
22717 (arguments
22718 (list
22719 #:phases
22720 #~(modify-phases %standard-phases
22721 (add-before 'build 'hardcode-file-path
22722 (lambda* (#:key inputs #:allow-other-keys)
22723 (substitute* "py3status/parse_config.py"
22724 (("\\[\"file\", \"-b\"")
22725 (format #f "[~s, \"-b\""
22726 (search-input-file inputs "bin/file")))))))))
22727 (native-inputs (list python-hatchling python-pytest))
22728 (inputs (list file))
22729 (home-page "https://github.com/ultrabug/py3status")
22730 (synopsis "Extensible i3status wrapper written in Python")
22731 (description
22732 "py3status is an i3status wrapper which extends i3status functionality in
22733a modular way, allowing you to extend your panel with your own code,
22734responding to click events and updating clock every second.")
22735 (license license:bsd-3)))
22736
22737(define-public python-greenlet
22738 (package
22739 (name "python-greenlet")
22740 (version "3.5.1")
22741 (source
22742 (origin
22743 (method git-fetch)
22744 (uri (git-reference
22745 (url "https://github.com/python-greenlet/greenlet")
22746 (commit version)))
22747 (file-name (git-file-name name version))
22748 (sha256
22749 (base32 "1hvnpkmd9r9li62p5gmidkyq4zazi5adw5c2cah8w2f4n47zg7ix"))))
22750 (build-system pyproject-build-system)
22751 (arguments
22752 (list
22753 #:test-flags #~(list "--pyargs" "greenlet")
22754 #:phases
22755 #~(modify-phases %standard-phases
22756 (add-before 'check 'remove-local-source
22757 (lambda _
22758 (delete-file-recursively "src/greenlet"))))))
22759 (native-inputs
22760 (list python-objgraph
22761 python-pytest
22762 python-psutil
22763 python-setuptools))
22764 (home-page "https://greenlet.readthedocs.io/")
22765 (synopsis "Lightweight in-process concurrent programming")
22766 (description
22767 "Greenlet package is a spin-off of Stackless, a version of CPython
22768that supports micro-threads called \"tasklets\". Tasklets run
22769pseudo-concurrently (typically in a single or a few OS-level threads) and
22770are synchronized with data exchanges on \"channels\".")
22771 (license (list license:psfl license:expat))))
22772
22773(define-public python-objgraph
22774 (package
22775 (name "python-objgraph")
22776 (version "3.6.2")
22777 (source
22778 (origin
22779 (method url-fetch)
22780 (uri (pypi-uri "objgraph" version))
22781 (sha256
22782 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22783 (build-system pyproject-build-system)
22784 (arguments
22785 (list
22786 #:test-flags
22787 #~(list "tests.py"
22788 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22789 ;; [], [], [], [], [], [], [], ...
22790 "-k" "not test_at_addrs")))
22791 (native-inputs
22792 (list graphviz
22793 python-pytest
22794 python-setuptools))
22795 (propagated-inputs
22796 (list python-graphviz))
22797 (home-page "https://mg.pov.lt/objgraph/")
22798 (synopsis "Draw Python object reference graphs with graphviz")
22799 (description
22800 "This package provides tools to draw Python object reference graphs with
22801graphviz.")
22802 (license license:expat)))
22803
22804(define-public python-gevent
22805 (package
22806 (name "python-gevent")
22807 (version "24.11.1")
22808 (source (origin
22809 (method url-fetch)
22810 (uri (pypi-uri "gevent" version))
22811 (sha256
22812 (base32
22813 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22814 (modules '((guix build utils)))
22815 (snippet
22816 '(begin
22817 ;; unbunding libev and c-ares
22818 (delete-file-recursively "deps")
22819 ;; Remove cythonized files.
22820 (with-directory-excursion "src/gevent"
22821 (for-each delete-file
22822 (append (list "resolver/cares.c"
22823 "queue.c"
22824 "local.c"
22825 "libev/corecext.h"
22826 "libev/corecext.c"
22827 "greenlet.c"
22828 "event.c"
22829 "_waiter.c"
22830 "_tracer.c"
22831 "_semaphore.c"
22832 "_imap.c"
22833 "_ident.c"
22834 "_hub_primitives.c"
22835 "_hub_local.c"
22836 "_greenlet_primitives.c"
22837 "_abstract_linkable.c")
22838 (find-files "." "\\.html$"))))))))
22839 (build-system pyproject-build-system)
22840 (arguments
22841 (list
22842 #:test-flags
22843 '(list
22844 ;; These tests relies on networking which is
22845 ;; not available in the build container.
22846 "test__getaddrinfo_import.py"
22847 ;; These tests rely on KeyboardInterrupts which do not
22848 ;; work inside the build container for some reason
22849 ;; (lack of controlling terminal?).
22850 "test__issues461_471.py"
22851 ;; TODO: Patch out the tests that use getprotobyname, etc
22852 ;; instead of disabling all the tests from these files.
22853 "test__resolver_dnspython.py"
22854 ;; This test contains 'test_unlink', which
22855 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22856 "test__core_stat.py")
22857 #:phases
22858 #~(modify-phases %standard-phases
22859 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22860 (lambda _
22861 (substitute* "src/gevent/subprocess.py"
22862 (("/bin/sh") (which "sh")))
22863 (for-each (lambda (file)
22864 (substitute* file
22865 (("/bin/sh") (which "sh"))
22866 (("/bin/true") (which "true"))))
22867 (find-files "src/greentest" "\\.py$"))))
22868 (add-before 'build 'do-not-use-bundled-sources
22869 (lambda _
22870 (setenv "GEVENTSETUP_EMBED" "0")
22871
22872 ;; Prevent building bundled libev.
22873 (substitute* "setup.py"
22874 (("run_make=_BUILDING")
22875 "run_make=False"))))
22876 (add-before 'build 'augment-C_INCLUDE_PATH
22877 (lambda* (#:key inputs #:allow-other-keys)
22878 (let* ((python (dirname (dirname
22879 (search-input-file
22880 inputs "bin/python"))))
22881 (version (python-version python))
22882 (greenlet (string-append
22883 #$(this-package-input "python-greenlet")
22884 "/include/python" version)))
22885 (setenv "C_INCLUDE_PATH"
22886 (string-append greenlet "/:"
22887 (or (getenv "C_INCLUDE_PATH")
22888 ""))))))
22889 (add-before 'check 'pretend-to-be-CI
22890 (lambda _
22891 ;; A few tests are skipped due to network constraints or
22892 ;; get longer timeouts when running in a CI environment.
22893 ;; Piggy-back on that, as we need the same adjustments.
22894 (setenv "TRAVIS" "1")
22895 (setenv "APPVEYOR" "1")))
22896 (add-before 'check 'adjust-tests
22897 (lambda* (#:key test-flags #:allow-other-keys)
22898 (call-with-output-file "skipped_tests.txt"
22899 (lambda (port)
22900 (format port "~a~%" (string-join test-flags "\n"))))))
22901 (replace 'check
22902 (lambda* (#:key tests? #:allow-other-keys)
22903 (when tests?
22904 ;; Use the build daemons configured number of workers.
22905 (setenv "NWORKERS" (number->string (parallel-job-count)))
22906 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22907 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22908 (propagated-inputs
22909 (list python-greenlet python-zope-event python-zope-interface))
22910 (native-inputs
22911 (list python-cffi
22912 python-cython
22913 python-dnspython
22914 python-idna
22915 python-objgraph
22916 python-psutil
22917 python-requests
22918 python-setuptools))
22919 (inputs
22920 (list c-ares libev libuv))
22921 (home-page "https://www.gevent.org/")
22922 (synopsis "Coroutine-based network library")
22923 (description
22924 "@code{gevent} is a coroutine-based Python networking library that uses
22925@code{greenlet} to provide a high-level synchronous API on top of the
22926@code{libev} event loop.")
22927 (license license:expat)))
22928
22929(define-public python-fastimport
22930 (package
22931 (name "python-fastimport")
22932 (version "0.9.16")
22933 (source
22934 (origin
22935 (method git-fetch)
22936 (uri (git-reference
22937 (url "https://github.com/jelmer/python-fastimport")
22938 (commit (string-append "v" version))))
22939 (file-name (git-file-name name version))
22940 (sha256
22941 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22942 (build-system pyproject-build-system)
22943 (arguments (list #:test-backend #~'unittest))
22944 (native-inputs (list python-setuptools))
22945 (home-page "https://github.com/jelmer/python-fastimport")
22946 (synopsis "VCS fastimport parser and generator in Python")
22947 (description
22948 "This package provides a parser for and generator of the Git
22949@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22950format.")
22951 (license license:gpl2+)))
22952
22953(define-public python-pika
22954 (package
22955 (name "python-pika")
22956 (version "1.3.2")
22957 (source
22958 (origin
22959 (method git-fetch)
22960 (uri (git-reference
22961 (url "https://github.com/pika/pika")
22962 (commit version)))
22963 (file-name (git-file-name name version))
22964 (sha256
22965 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22966 (build-system pyproject-build-system)
22967 (arguments
22968 (list
22969 #:test-flags
22970 ;; XXX: These test most likely require a running RabbitMQ server.
22971 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22972 #:phases
22973 #~(modify-phases %standard-phases
22974 (add-before 'check 'configure-tests
22975 (lambda* (#:key tests? #:allow-other-keys)
22976 (when tests?
22977 (setenv "PYTHONPATH" (getcwd))))))))
22978 (native-inputs (list python-pytest
22979 python-gevent
22980 python-tornado
22981 python-twisted
22982 python-setuptools))
22983 (home-page "https://pika.readthedocs.org")
22984 (synopsis "Pure Python AMQP Client Library")
22985 (description
22986 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22987Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22988network support library.")
22989 (license license:bsd-3)))
22990
22991(define-public python-pykka
22992 (package
22993 (name "python-pykka")
22994 (version "4.4.2")
22995 (source
22996 (origin
22997 (method git-fetch)
22998 (uri (git-reference
22999 (url "https://github.com/jodal/pykka")
23000 (commit (string-append "v" version))))
23001 (file-name (git-file-name name version))
23002 (sha256
23003 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
23004 (build-system pyproject-build-system)
23005 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
23006 (home-page "https://pykka.readthedocs.io")
23007 (synopsis "Implementation of the actor model")
23008 (description
23009 "Pykka implements the actor model in Python, which introduces some simple
23010rules to control the sharing of state and cooperation between execution units,
23011and makes it easier to build concurrent applications.")
23012 (license license:asl2.0)))
23013
23014;; WARNING: This package is a dependency of mesa.
23015;; XXX: This project was archived by the owner on Dec 21, 2025. It is now
23016;; read-only. Consider to remove when nothing depends on it.
23017(define-public python-ply
23018 (package
23019 (name "python-ply")
23020 (version "3.11")
23021 (source
23022 (origin
23023 (method url-fetch)
23024 (uri (pypi-uri "ply" version))
23025 (sha256
23026 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
23027 (build-system pyproject-build-system)
23028 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
23029 (native-inputs
23030 (list python-setuptools))
23031 (home-page "http://www.dabeaz.com/ply/")
23032 (synopsis "Python Lex & Yacc")
23033 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
23034It uses LR parsing and does extensive error checking.")
23035 (license license:bsd-3)))
23036
23037(define-public python-kazoo
23038 (package
23039 (name "python-kazoo")
23040 (version "2.10.0")
23041 (source
23042 (origin
23043 (method git-fetch)
23044 (uri (git-reference
23045 (url "https://github.com/python-zk/kazoo")
23046 (commit version)))
23047 (file-name (git-file-name name version))
23048 (sha256
23049 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
23050 (build-system pyproject-build-system)
23051 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
23052 (native-inputs (list python-setuptools))
23053 (home-page "https://kazoo.readthedocs.org")
23054 (synopsis "High-level Zookeeper client library")
23055 (description
23056 "Kazoo is a Python client library for the Apache Zookeeper distributed
23057application service. It is designed to be easy to use and to avoid common
23058programming errors.")
23059 (license license:asl2.0)))
23060
23061(define-public python-columnize
23062 (package
23063 (name "python-columnize")
23064 (version "0.3.11")
23065 (source
23066 (origin
23067 (method url-fetch)
23068 (uri (pypi-uri "columnize" version))
23069 (sha256
23070 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
23071 (build-system pyproject-build-system)
23072 (native-inputs (list python-pytest python-setuptools))
23073 (home-page "https://github.com/rocky/pycolumnize")
23074 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
23075 (description
23076 "This package provides a way to format a simple (i.e. not nested) list
23077into aligned columns.")
23078 (license license:expat)))
23079
23080(define-public python-pysol-cards
23081 (package
23082 (name "python-pysol-cards")
23083 (version "0.24.0")
23084 (source
23085 (origin
23086 (method url-fetch)
23087 (uri (pypi-uri "pysol_cards" version))
23088 (sha256
23089 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
23090 (build-system pyproject-build-system)
23091 (arguments
23092 (list
23093 #:phases
23094 #~(modify-phases %standard-phases
23095 (replace 'check
23096 (lambda* (#:key test-flags tests? #:allow-other-keys)
23097 (when tests?
23098 (apply invoke
23099 "python"
23100 "-m"
23101 "unittest"
23102 "discover"
23103 "tests"
23104 test-flags)))))))
23105 (native-inputs (list python-setuptools python-wheel))
23106 (home-page "https://github.com/shlomif/pysol_cards")
23107 (synopsis "Deal PySol FC Cards")
23108 (description
23109 "The pysol-cards python modules provide code to generate the initial deals of
23110some PySol games.")
23111 (license license:expat)))
23112
23113(define-public python-freecell-solver
23114 (package
23115 (name "python-freecell-solver")
23116 (version "0.6.0")
23117 (source
23118 (origin
23119 (method url-fetch)
23120 (uri (pypi-uri "freecell_solver" version))
23121 (sha256
23122 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
23123 (build-system pyproject-build-system)
23124 (propagated-inputs (list python-cffi))
23125 (native-inputs (list python-pytest python-setuptools))
23126 (home-page "https://pypi.org/project/freecell-solver/")
23127 (synopsis "Freecell Solver bindings")
23128 (description
23129 "This package provides Python bindings for the freecell-solver
23130package. Freecell Solver is a program that automatically solves layouts of
23131Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
23132and Seahaven Towers, as well as Simple Simon boards.")
23133 (license license:expat)))
23134
23135(define-public python-inflection
23136 (package
23137 (name "python-inflection")
23138 (version "0.5.1")
23139 (source
23140 (origin
23141 (method git-fetch)
23142 (uri (git-reference
23143 (url "https://github.com/jpvanhal/inflection")
23144 (commit version)))
23145 (file-name (git-file-name name version))
23146 (sha256
23147 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
23148 (build-system pyproject-build-system)
23149 (native-inputs (list python-pytest python-setuptools))
23150 (home-page "https://github.com/jpvanhal/inflection")
23151 (synopsis "Python string transformation library")
23152 (description
23153 "Inflection is a string transformation library. It singularizes
23154and pluralizes English words, and transforms strings from CamelCase to
23155underscored string.")
23156 (license license:expat)))
23157
23158(define-public python-krb5
23159 (package
23160 (name "python-krb5")
23161 (version "0.5.1")
23162 (source
23163 (origin
23164 (method url-fetch)
23165 (uri (pypi-uri "krb5" version))
23166 (sha256
23167 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
23168 (build-system pyproject-build-system)
23169 (inputs (list mit-krb5))
23170 (native-inputs (list python-cython python-k5test python-pytest
23171 python-setuptools python-wheel))
23172 (home-page "https://github.com/jborean93/pykrb5")
23173 (synopsis "Kerberos API bindings for Python")
23174 (description "This library provides Python functions that wraps the
23175Kerberos 5 C API.")
23176 (license license:expat)))
23177
23178(define-public python-pylev
23179 (package
23180 (name "python-pylev")
23181 (version "1.4.0")
23182 (source
23183 (origin
23184 (method git-fetch)
23185 (uri (git-reference
23186 (url "https://github.com/toastdriven/pylev")
23187 (commit (string-append "v" version))))
23188 (file-name (git-file-name name version))
23189 (sha256
23190 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
23191 (build-system pyproject-build-system)
23192 (arguments
23193 (list
23194 #:test-backend #~'custom
23195 #:test-flags #~(list "tests.py")))
23196 (native-inputs (list python-setuptools))
23197 (home-page "https://github.com/toastdriven/pylev")
23198 (synopsis "Levenshtein distance implementation in Python")
23199 (description
23200 "Pure Python Levenshtein implementation, based off the Wikipedia code
23201samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
23202 (license license:bsd-3)))
23203
23204(define-public python-cleo
23205 (package
23206 (name "python-cleo")
23207 (version "2.1.0")
23208 (source (origin
23209 (method url-fetch)
23210 (uri (pypi-uri "cleo" version))
23211 (sha256
23212 (base32
23213 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
23214 (build-system pyproject-build-system)
23215 (native-inputs
23216 (list python-poetry-core
23217 python-mock
23218 python-pytest-mock
23219 python-pytest))
23220 (propagated-inputs
23221 (list python-crashtest python-rapidfuzz))
23222 (home-page "https://github.com/sdispater/cleo")
23223 (synopsis "Command-line arguments library for Python")
23224 (description
23225 "Cleo allows you to create command-line commands with signature in
23226docstring and colored output.")
23227 (license license:expat)))
23228
23229(define-public python-shellingham
23230 (package
23231 (name "python-shellingham")
23232 (version "1.5.4")
23233 (source
23234 (origin
23235 (method url-fetch)
23236 (uri (pypi-uri "shellingham" version))
23237 (sha256
23238 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
23239 (build-system pyproject-build-system)
23240 (native-inputs
23241 (list python-pytest python-pytest-mock python-setuptools python-wheel))
23242 (home-page "https://github.com/sarugaku/shellingham")
23243 (synopsis "Tool to detect surrounding shell")
23244 (description
23245 "Shellingham detects what shell the current Python executable is
23246running in.")
23247 (license license:isc)))
23248
23249(define-public python-shshsh
23250 (package
23251 (name "python-shshsh")
23252 (version "1.0.5")
23253 (source
23254 (origin
23255 (method git-fetch)
23256 (uri
23257 (git-reference
23258 (url "https://github.com/zqqqqz2000/shshsh")
23259 (commit
23260 "fd21c8696aebaae04507760c16cb45979291fef5")))
23261 (file-name (git-file-name name version))
23262 (sha256
23263 (base32
23264 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
23265 (build-system pyproject-build-system)
23266 (native-inputs
23267 (list python-poetry-core
23268 python-pytest))
23269 (home-page "https://github.com/zqqqqz2000/shshsh")
23270 (synopsis "Write Shell commands simply and safely within Python")
23271 (description "This package provides a way to write Shell commands from
23272within Python. Python functions can be chained together to process input
23273Bash control characters are escapted so that parameters can be passed
23274without worrying about command injection.")
23275 (license license:expat)))
23276
23277(define-public python-memcached
23278 (package
23279 (name "python-memcached")
23280 (version "1.62")
23281 (source
23282 (origin
23283 (method git-fetch)
23284 (uri (git-reference
23285 (url "https://github.com/linsomniac/python-memcached")
23286 (commit version)))
23287 (file-name (git-file-name name version))
23288 (sha256
23289 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
23290 (build-system pyproject-build-system)
23291 (arguments
23292 (list
23293 #:tests? #f ;Requires a connection to a socket.
23294 #:test-backend #~'unittest))
23295 (native-inputs (list python-setuptools))
23296 (home-page "https://github.com/linsomniac/python-memcached")
23297 (synopsis "Pure python memcached client")
23298 (description
23299 "This software is a pure Python interface to the memcached memory cache
23300daemon. It is the client side software which allows storing values in one or
23301more, possibly remote, memcached servers.")
23302 (license license:psfl)))
23303
23304(define-public python-mergedeep
23305 (package
23306 (name "python-mergedeep")
23307 (version "1.3.4")
23308 (source
23309 (origin
23310 (method git-fetch)
23311 (uri (git-reference
23312 (url "https://github.com/clarketm/mergedeep")
23313 (commit (string-append "v" version))))
23314 (file-name (git-file-name name version))
23315 (sha256
23316 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
23317 (build-system pyproject-build-system)
23318 (arguments (list #:test-backend #~'unittest))
23319 (native-inputs (list python-setuptools))
23320 (home-page "https://github.com/clarketm/mergedeep")
23321 (synopsis "Deep merge function for Python")
23322 (description
23323 "This package provides a deep merge function for Python, useful to
23324combine multiple data objects as one.")
23325 (license license:expat)))
23326
23327(define-public python-clikit
23328 (package
23329 (name "python-clikit")
23330 (version "0.6.2")
23331 (source
23332 (origin
23333 (method git-fetch)
23334 (uri (git-reference
23335 (url "https://github.com/sdispater/clikit")
23336 (commit version)))
23337 (file-name (git-file-name name version))
23338 (sha256
23339 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
23340 (build-system pyproject-build-system)
23341 (arguments
23342 (list
23343 #:phases
23344 #~(modify-phases %standard-phases
23345 (add-after 'unpack 'relax-requirements
23346 (lambda _
23347 (substitute* "pyproject.toml"
23348 (("^crashtest.*")
23349 (format #f "crashtest=~s"
23350 #$(package-version
23351 (this-package-input "python-crashtest"))))))))))
23352 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
23353 (propagated-inputs (list python-crashtest python-pastel python-pylev))
23354 (home-page "https://github.com/sdispater/clikit")
23355 (synopsis "Group of utilities to build command line interfaces")
23356 (description
23357 "CliKit is a group of utilities to build testable command line
23358interfaces.")
23359 (license license:expat)))
23360
23361(define-public python-cattrs
23362 (package
23363 (name "python-cattrs")
23364 (version "26.1.0")
23365 (source
23366 (origin
23367 (method git-fetch)
23368 (uri (git-reference
23369 (url "https://github.com/python-attrs/cattrs")
23370 (commit (string-append "v" version))))
23371 (file-name (git-file-name name version))
23372 (sha256
23373 (base32 "0msn1zgv7shlh7nnmhydg7gv6j0y9yy1061f7qcj31jhzd7bnl4b"))))
23374 (build-system pyproject-build-system)
23375 (arguments
23376 (list
23377 ;; tests: 1010 passed, 15 xfailed
23378 #:test-flags
23379 #~(list "-m" "not benchmark"
23380 "--numprocesses" (number->string (parallel-job-count)))
23381 #:phases
23382 #~(modify-phases %standard-phases
23383 (add-after 'unpack 'fix-pytest-config
23384 (lambda _
23385 (substitute* "pyproject.toml"
23386 ;; All options are benchmark related.
23387 (("addopts =.*") "\n")))))))
23388 (native-inputs
23389 (list python-hatchling
23390 python-hatch-vcs
23391 python-immutables
23392 python-pytest
23393 python-pytest-benchmark
23394 python-pytest-xdist))
23395 (propagated-inputs
23396 (list python-attrs
23397 python-typing-extensions
23398 ;; [optional]
23399 python-cbor2
23400 python-msgpack
23401 python-msgspec
23402 python-orjson
23403 python-pymongo ;for the bson module
23404 python-pyyaml
23405 python-tomli-w
23406 python-tomlkit
23407 python-ujson))
23408 (home-page "https://github.com/python-attrs/cattrs")
23409 (synopsis "Python library for structuring and unstructuring data")
23410 (description "@code{cattrs} is an Python library for structuring and
23411unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23412@code{dataclasses} and the usual Python collections, but other kinds of
23413classes can also be supported by manually registering converters.")
23414 (license license:expat)))
23415
23416;; A bare minimal package, mainly to use in tests and reduce closure
23417;; size. Tests are left out in the main package to slim down native-inputs and
23418;; optional propagated-inputs.
23419(define-public python-cattrs-minimal
23420 (package/inherit python-cattrs
23421 (name "python-cattrs-minimal")
23422 (arguments
23423 (substitute-keyword-arguments arguments
23424 ((#:tests? _ #t) #f)))
23425 (native-inputs
23426 (list python-hatchling
23427 python-hatch-vcs))
23428 (propagated-inputs
23429 (list python-attrs
23430 python-typing-extensions))))
23431
23432(define-public python-cachy
23433 (package
23434 (name "python-cachy")
23435 (version "0.3.0")
23436 (source
23437 (origin
23438 (method url-fetch)
23439 (uri (pypi-uri "cachy" version))
23440 (sha256
23441 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23442 (build-system pyproject-build-system)
23443 (arguments
23444 (list
23445 #:phases
23446 #~(modify-phases %standard-phases
23447 (replace 'check
23448 (lambda* (#:key tests? #:allow-other-keys)
23449 (when tests?
23450 ;; Make it compatible with python-flexmock 0.12.
23451 (substitute* (find-files "tests" "\\.py$")
23452 (("from flexmock import flexmock, flexmock_teardown")
23453 (string-append "from flexmock import flexmock\n"
23454 "from flexmock._api import flexmock_teardown")))
23455 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23456 "pytest")))))))
23457 (native-inputs
23458 (list memcached
23459 python-fakeredis
23460 python-flexmock
23461 python-pifpaf
23462 python-pytest
23463 python-setuptools
23464 python-wheel))
23465 (propagated-inputs
23466 (list python-memcached
23467 python-msgpack
23468 python-redis))
23469 (home-page "https://github.com/sdispater/cachy")
23470 (synopsis "Simple yet effective caching library")
23471 (description
23472 "Cachy provides a simple yet effective caching library. A simple but
23473powerful API: thread-safety; decorator syntax; support for memcached, redis,
23474database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23475 (license license:expat)))
23476
23477(define-public python-pyproject-api
23478 (package
23479 (name "python-pyproject-api")
23480 (version "1.10.0")
23481 (source
23482 (origin
23483 (method url-fetch)
23484 (uri (pypi-uri "pyproject_api" version))
23485 (sha256
23486 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23487 (build-system pyproject-build-system)
23488 (native-inputs
23489 (list python-hatch-vcs
23490 python-hatchling
23491 python-pytest
23492 python-pytest-mock
23493 python-setuptools))
23494 (propagated-inputs
23495 (list python-packaging python-tomli))
23496 (home-page "https://pyproject-api.readthedocs.io/latest/")
23497 (synopsis "API to interact with the Python pyproject.toml based projects")
23498 (description
23499 "@code{pyproject-api} aims to abstract away interaction with
23500@code{pyproject.toml} style projects in a flexible way.")
23501 (license license:expat)))
23502
23503(define-public python-lark
23504 (package
23505 (name "python-lark")
23506 (version "1.2.2")
23507 (source
23508 (origin
23509 (method url-fetch)
23510 (uri (pypi-uri "lark" version))
23511 (sha256
23512 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23513 (build-system pyproject-build-system)
23514 (native-inputs (list python-pytest python-setuptools python-wheel))
23515 (home-page "https://github.com/lark-parser/lark")
23516 (synopsis "Multi-language parser for Python")
23517 (description
23518 "Lark is a parser built with a focus on ergonomics, performance and
23519resilience. Lark can parse all context-free languages. That means it is
23520capable of parsing almost any programming language out there, and to
23521some degree most natural languages too.")
23522 (license license:expat)))
23523
23524(define-public python-find-libpython
23525 (package
23526 (name "python-find-libpython")
23527 (version "0.4.1")
23528 (source
23529 (origin
23530 (method git-fetch)
23531 (uri (git-reference
23532 (url "https://github.com/ktbarrett/find_libpython")
23533 (commit (string-append "v" version))))
23534 (file-name (git-file-name name version))
23535 (sha256
23536 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23537 (build-system pyproject-build-system)
23538 (native-inputs (list python-setuptools python-wheel
23539 ;; tests
23540 python-pytest))
23541 (home-page "https://github.com/ktbarrett/find_libpython")
23542 (synopsis "Find the path to the @code{libpython} dynamic library")
23543 (description
23544 "@code{find_libpython} helps find the path to the
23545@code{libpython} dynamic library for the current Python environment. It is
23546both a script and a Python package.")
23547 (license license:expat)))
23548
23549(define-public python-libcst
23550 (package
23551 (name "python-libcst")
23552 (version "1.6.0")
23553 (source (origin
23554 (method url-fetch)
23555 (uri (pypi-uri "libcst" version))
23556 (sha256
23557 (base32
23558 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23559 (snippet
23560 #~(begin (use-modules (guix build utils))
23561 ;; This is mostly to keep the cargo-build-system happy
23562 (with-output-to-file "Cargo.toml"
23563 (lambda ()
23564 (format #t "\
23565[workspace]
23566
23567members = [
23568 \"native\",]")))))))
23569 (build-system cargo-build-system)
23570 (arguments
23571 (list
23572 #:install-source? #false
23573 #:cargo-test-flags
23574 ;; According to .github/workflows/ci.yml
23575 '(list "--manifest-path=native/Cargo.toml"
23576 "--release"
23577 "--no-default-features")
23578 #:imported-modules `(,@%pyproject-build-system-modules
23579 ,@%cargo-build-system-modules)
23580 #:modules `((guix build cargo-build-system)
23581 ((guix build pyproject-build-system) #:prefix py:)
23582 (guix build utils))
23583 #:phases
23584 #~(modify-phases %standard-phases
23585 (add-after 'unpack 'prepare-source
23586 (lambda _
23587 (delete-file "native/Cargo.lock")))
23588 (replace 'build
23589 (assoc-ref py:%standard-phases 'build))
23590 (add-after 'install 'wrap
23591 (lambda _
23592 ;; Collection of python- and pyproject-build-system phases
23593 ;; between 'install and 'check.
23594 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23595 (assoc-ref py:%standard-phases 'add-install-to-path)
23596 (assoc-ref py:%standard-phases 'wrap)
23597 (assoc-ref py:%standard-phases 'create-entrypoints)
23598 (assoc-ref py:%standard-phases 'compile-bytecode)))
23599 ;; We are not the only ones who cannot load libcst.native
23600 ;; during the 'check phase
23601 ;; https://github.com/Instagram/LibCST/issues/1176
23602 ;; (add-after 'wrap 'python-check
23603 ;; (lambda args
23604 ;; (apply (assoc-ref py:%standard-phases 'check)
23605 ;; #:test-flags '()
23606 ;; args)))
23607 (replace 'install
23608 (assoc-ref py:%standard-phases 'install)))))
23609 (native-inputs
23610 (list python-minimal-wrapper
23611 python-hypothesmith
23612 python-pytest
23613 python-setuptools
23614 python-setuptools-rust
23615 python-setuptools-scm
23616 python-wheel))
23617 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23618 (propagated-inputs
23619 (list python-pyyaml))
23620 (home-page "https://github.com/Instagram/LibCST")
23621 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23622 (description
23623 "LibCST parses Python source code as a CST tree that keeps all
23624formatting details (comments, whitespaces, parentheses, etc). It's useful
23625for building automated refactoring (codemod) applications and linters.
23626LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23627a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23628naming node types and fields, LibCST creates a lossless CST that looks and
23629feels like an AST.")
23630 (license (list license:expat
23631 ;; Some files unde libcst/_parser/ are under Python Software
23632 ;; Foundation license (see LICENSE file for details)
23633 license:psfl
23634 ;; libcst/_add_slots.py
23635 license:asl2.0))))
23636
23637(define-public python-libcst-minimal
23638 (hidden-package
23639 (package
23640 (inherit python-libcst)
23641 (name "python-libcst-minimal")
23642 (arguments
23643 (substitute-keyword-arguments arguments
23644 ((#:tests? _ #t) #f)))
23645 (native-inputs
23646 (list python-minimal-wrapper
23647 python-setuptools
23648 python-setuptools-rust
23649 python-setuptools-scm
23650 python-wheel)))))
23651
23652(define-public python-lazy-loader
23653 (package
23654 (name "python-lazy-loader")
23655 (version "0.4")
23656 (source (origin
23657 (method url-fetch)
23658 (uri (pypi-uri "lazy_loader" version))
23659 (sha256
23660 (base32
23661 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23662 (build-system pyproject-build-system)
23663 (native-inputs
23664 (list python-numpy python-pytest python-setuptools))
23665 (propagated-inputs
23666 (list python-flit-core
23667 python-setuptools
23668 python-wheel))
23669 (home-page "https://scientific-python.org/specs/spec-0001/")
23670 (synopsis "Load subpackages and functions on demand")
23671 (description "@code{python-lazy-loader} makes it easy to load subpackages
23672and functions on demand. Its main features are:
23673
23674@itemize
23675@item Allow subpackages to be made visible to users without incurring import
23676costs.
23677@item Allow external libraries to be imported only when used, improving import
23678times.
23679@end itemize")
23680 (license license:bsd-3)))
23681
23682(define-public python-lazy-object-proxy
23683 (package
23684 (name "python-lazy-object-proxy")
23685 (version "1.12.0")
23686 (source
23687 (origin
23688 (method git-fetch)
23689 (uri (git-reference
23690 (url "https://github.com/ionelmc/python-lazy-object-proxy")
23691 (commit (string-append "v" version))))
23692 (file-name (git-file-name name version))
23693 (sha256
23694 (base32 "1qig879igkjmj4mir26b0n40w3vn5jqn293172s6npxnb4k90kzk"))))
23695 (build-system pyproject-build-system)
23696 (native-inputs
23697 (list python-pytest
23698 python-pytest-benchmark
23699 python-setuptools
23700 python-setuptools-scm))
23701 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23702 (synopsis "Lazy object proxy for Python")
23703 (description
23704 "Lazy object proxy is an object that wraps a callable but defers the call
23705until the object is actually required, and caches the result of said call.")
23706 (license license:bsd-2)))
23707
23708(define-public python-dnspython
23709 ;; TODO: Move to (gnu packages python-web).
23710 (package
23711 (name "python-dnspython")
23712 (version "2.8.0")
23713 (source
23714 (origin
23715 (method url-fetch)
23716 (uri (pypi-uri "dnspython" version))
23717 (sha256
23718 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23719 (build-system pyproject-build-system)
23720 (arguments
23721 (list
23722 ;; tests: 1216 passed, 198 skipped, 2 deselected
23723 #:test-flags
23724 #~(list
23725 ;; AssertionError: assert False
23726 "--deselect=tests/test_features.py::test_have"
23727 ;; dns.exception.SyntaxError: protocol not found
23728 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23729 #:phases
23730 #~(modify-phases %standard-phases
23731 (add-after 'unpack 'patch-getprotobyname-calls
23732 ;; These calls are problematic in the build environment as there is
23733 ;; no /etc/protocols. This breaks the sanity-check phase of any
23734 ;; package depending on this one.
23735 (lambda _
23736 (substitute* "dns/rdtypes/IN/WKS.py"
23737 (("socket.getprotobyname\\('tcp'\\)")
23738 "6")
23739 (("socket.getprotobyname\\('udp'\\)")
23740 "17")))))))
23741 (native-inputs
23742 (list python-hatchling
23743 python-pytest))
23744 (propagated-inputs
23745 (append
23746 (if (supported-package? python-cryptography)
23747 (list ;; DNSSEC
23748 python-cryptography
23749 ;; DNS over Quic
23750 python-aioquic
23751 ;; DNS over HTTPS
23752 python-h2
23753 python-httpcore
23754 python-httpx)
23755 '())
23756 (list python-idna
23757 python-trio)))
23758 (home-page "https://www.dnspython.org")
23759 (synopsis "DNS toolkit for Python")
23760 (description
23761 "dnspython is a DNS toolkit for Python. It supports almost all record
23762types. It can be used for queries, zone transfers, and dynamic updates.
23763It supports TSIG authenticated messages and EDNS0.")
23764 (license license:expat)))
23765
23766;; A bare minimal package, mainly to use in tests and reduce closure size.
23767;; Tests are left out in the main package to slim down native-inputs and
23768;; propagated-inputs.
23769(define-public python-dnspython-minimal
23770 (package/inherit python-dnspython
23771 (name "python-dnspython-minimal")
23772 (arguments
23773 (substitute-keyword-arguments arguments
23774 ((#:tests? _ #t) #f)))
23775 (native-inputs
23776 (list python-hatchling))
23777 (propagated-inputs '())))
23778
23779(define-public python-py3dns
23780 (package
23781 (name "python-py3dns")
23782 (version "4.0.2")
23783 (source
23784 (origin
23785 (method url-fetch)
23786 (uri (pypi-uri "py3dns" version))
23787 (sha256
23788 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23789 (build-system pyproject-build-system)
23790 (arguments
23791 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23792 ;; removing functionality so we don't run tests.
23793 (list #:tests? #f))
23794 (native-inputs (list python-flit-core))
23795 (home-page "https://launchpad.net/py3dns")
23796 (synopsis "Python 3 DNS library")
23797 (description
23798 "This Python 3 module provides a DNS API for looking up DNS entries from
23799within Python 3 modules and applications. This module is a simple,
23800lightweight implementation.")
23801 (license license:psfl)))
23802
23803(define-public python-email-validator
23804 (package
23805 (name "python-email-validator")
23806 (version "2.2.0")
23807 (source
23808 (origin
23809 (method url-fetch)
23810 (uri (pypi-uri "email_validator" version))
23811 (sha256
23812 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23813 (build-system pyproject-build-system)
23814 (arguments
23815 (list
23816 #:test-flags
23817 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23818 #~(list "-k" "not test_caching_dns_resolver")))
23819 (native-inputs
23820 (list python-pytest
23821 python-setuptools
23822 python-wheel))
23823 (propagated-inputs
23824 (list python-dnspython
23825 python-idna))
23826 (home-page "https://github.com/JoshData/python-email-validator")
23827 (synopsis "Email address validation library for Python")
23828 (description
23829 "This library validates email address syntax and deliverability.")
23830 (license license:cc0)))
23831
23832(define-public python-faker
23833 (package
23834 (name "python-faker")
23835 (version "37.4.2")
23836 (source
23837 (origin
23838 (method url-fetch)
23839 (uri (pypi-uri "faker" version))
23840 (sha256
23841 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23842 (build-system pyproject-build-system)
23843 ;; tests: 2104 passed, 12 skipped, 2 warnings
23844 (native-inputs
23845 (list python-freezegun
23846 python-pytest
23847 python-setuptools
23848 python-validators))
23849 (propagated-inputs
23850 (list python-tzdata))
23851 (home-page "https://github.com/joke2k/faker")
23852 (synopsis "Python package that generates fake data")
23853 (description
23854 "Faker is a Python package that generates fake data such as names,
23855addresses, and phone numbers.")
23856 (license license:expat)))
23857
23858(define-public python-pyaml
23859 (package
23860 (name "python-pyaml")
23861 (version "25.7.0")
23862 (source
23863 (origin
23864 (method url-fetch)
23865 (uri (pypi-uri "pyaml" version))
23866 (sha256
23867 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23868 (build-system pyproject-build-system)
23869 (native-inputs
23870 (list python-pytest
23871 python-setuptools))
23872 (propagated-inputs
23873 (list python-pyyaml))
23874 (home-page "https://github.com/mk-fg/pretty-yaml")
23875 (synopsis "YAML pretty-print library for Python")
23876 (description
23877 "pyaml is a PyYAML based python module to produce pretty and readable
23878YAML-serialized data.")
23879 (license license:wtfpl2)))
23880
23881(define-public python-pyyaml-env-tag
23882 (package
23883 (name "python-pyyaml-env-tag")
23884 (version "1.1")
23885 (source
23886 (origin
23887 (method git-fetch)
23888 (uri (git-reference
23889 (url "https://github.com/waylan/pyyaml-env-tag")
23890 (commit version)))
23891 (file-name (git-file-name name version))
23892 (sha256
23893 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23894 (build-system pyproject-build-system)
23895 (native-inputs (list python-pytest python-setuptools))
23896 (propagated-inputs (list python-pyyaml))
23897 (home-page "https://github.com/waylan/pyyaml-env-tag")
23898 (synopsis "Custom YAML tag for environment variables")
23899 (description
23900 "This package provides a custom YAML tag for referencing environment
23901variables in YAML files.")
23902 (license license:expat)))
23903
23904(define-public python-prompt-toolkit
23905 (package
23906 (name "python-prompt-toolkit")
23907 (version "3.0.51")
23908 (source
23909 (origin
23910 (method url-fetch)
23911 (uri (pypi-uri "prompt_toolkit" version))
23912 (sha256
23913 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23914 (build-system pyproject-build-system)
23915 (arguments
23916 (list
23917 #:phases
23918 #~(modify-phases %standard-phases
23919 (add-before 'check 'pre-check
23920 (lambda _
23921 ;; HOME is needed for the test
23922 ;; "test_pathcompleter_can_expanduser".
23923 (setenv "HOME" "/tmp"))))))
23924 (native-inputs
23925 (list python-pytest
23926 python-setuptools))
23927 (propagated-inputs
23928 (list python-wcwidth))
23929 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23930 (synopsis "Library for building command line interfaces in Python")
23931 (description
23932 "Prompt-Toolkit is a library for building interactive command line
23933interfaces in Python. It's like GNU Readline but it also features syntax
23934highlighting while typing, out-of-the-box multi-line input editing, advanced
23935code completion, incremental search, support for Chinese double-width
23936characters, mouse support, and auto suggestions.")
23937 (license license:bsd-3)))
23938
23939(define-public python-proselint
23940 (package
23941 (name "python-proselint")
23942 (version "0.14.0")
23943 (source
23944 (origin
23945 (method url-fetch)
23946 (uri (pypi-uri "proselint" version))
23947 (sha256
23948 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23949 (build-system pyproject-build-system)
23950 (arguments
23951 (list
23952 #:phases
23953 #~(modify-phases %standard-phases
23954 (add-after 'unpack 'set-home-directory
23955 (lambda _
23956 (setenv "HOME" "/tmp"))))))
23957 (native-inputs
23958 (list python-poetry-core
23959 python-pytest))
23960 (propagated-inputs
23961 (list python-click))
23962 (home-page "http://proselint.com/")
23963 (synopsis "Linter for prose")
23964 (description "@code{python-proselint} is a linter for English prose, that
23965scans through a file and detects issues.")
23966 (license license:bsd-3)))
23967
23968(define-public python-jedi
23969 (package
23970 (name "python-jedi")
23971 (version "0.19.2")
23972 (source
23973 (origin
23974 (method git-fetch)
23975 (uri (git-reference
23976 (url "https://github.com/davidhalter/jedi")
23977 (commit (string-append "v" version))
23978 (recursive? #true)))
23979 (file-name (git-file-name name version))
23980 (sha256
23981 (base32
23982 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23983 (build-system pyproject-build-system)
23984 (arguments
23985 (list
23986 #:phases
23987 '(modify-phases %standard-phases
23988 (add-before 'check 'set-HOME
23989 (lambda _ (setenv "HOME" "/tmp"))))))
23990 (native-inputs
23991 (list python-docopt
23992 python-pytest
23993 python-setuptools
23994 python-wheel))
23995 (propagated-inputs
23996 (list python-parso))
23997 (home-page "https://github.com/davidhalter/jedi")
23998 (synopsis "Autocompletion and static analysis library for Python")
23999 (description
24000 "Jedi is a static analysis tool for Python that can be used in Integrated
24001Development Environments (@dfn{IDE}s) and text editors. It understands Python
24002on a deeper level than many other static analysis frameworks for Python.
24003
24004Jedi understands docstrings and you can use Jedi autocompletion in your REPL
24005as well.")
24006 (license license:expat)))
24007
24008(define-public ptpython
24009 (package
24010 (name "ptpython")
24011 (version "3.0.20")
24012 (source
24013 (origin
24014 (method git-fetch)
24015 (uri (git-reference
24016 (url "https://github.com/jonathanslenders/ptpython")
24017 (commit version)))
24018 (file-name (git-file-name name version))
24019 (sha256
24020 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
24021 (build-system pyproject-build-system)
24022 (arguments
24023 (list
24024 ;; XXX: There is a tests/run_tests.py file but all it does is a
24025 ;; sanity check.
24026 #:tests? #f))
24027 (native-inputs (list python-setuptools))
24028 (propagated-inputs
24029 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
24030 (home-page "https://github.com/jonathanslenders/ptpython")
24031 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
24032 (description
24033 "ptpython is a Python read-eval-print loop with IDE-like features.
24034It supports syntax highlighting, multiline editing, autocompletion, mouse,
24035color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
24036etc.")
24037 (license license:bsd-3)))
24038
24039(define-public python-easyprocess
24040 (package
24041 (name "python-easyprocess")
24042 (version "1.1")
24043 (source
24044 (origin
24045 (method git-fetch)
24046 (uri (git-reference
24047 (url "https://github.com/ponty/easyprocess")
24048 (commit version)))
24049 (file-name (git-file-name name version))
24050 (sha256
24051 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
24052 (build-system pyproject-build-system)
24053 (arguments
24054 ;; Tests require pyvirtualdisplay, which requires this package.
24055 (list #:tests? #f))
24056 (native-inputs (list python-setuptools))
24057 (home-page "https://github.com/ponty/easyprocess")
24058 (synopsis "Python subprocess interface")
24059 (description
24060 "@code{easyprocess} is an easy to use Python subprocess interface.")
24061 (license license:bsd-3)))
24062
24063(define-public python-entrypoint2
24064 (package
24065 (name "python-entrypoint2")
24066 (version "0.2.4")
24067 (source
24068 (origin
24069 (method url-fetch)
24070 (uri (pypi-uri "entrypoint2" version))
24071 (sha256
24072 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
24073 (build-system pyproject-build-system)
24074 (native-inputs (list python-easyprocess
24075 python-pytest
24076 python-setuptools
24077 python-wheel))
24078 (home-page "https://github.com/ponty/entrypoint2")
24079 (synopsis "Command-line interface for Python modules")
24080 (description
24081 "@code{entrypoint2} is an easy to use command-line interface for Python
24082 modules based on @code{argparse}. It translates function signature and
24083 documentation to argparse configuration.")
24084 (license license:bsd-3)))
24085
24086(define-public python-pyvirtualdisplay
24087 (package
24088 (name "python-pyvirtualdisplay")
24089 (version "3.0")
24090 (source
24091 (origin
24092 (method url-fetch)
24093 (uri (pypi-uri "PyVirtualDisplay" version))
24094 (sha256
24095 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
24096 (build-system pyproject-build-system)
24097 (arguments
24098 (list
24099 ;; tests: 27 passed, 8 deselected
24100 #:test-flags
24101 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
24102 ;; OSError: Pillow was built without XCB support
24103 #~(list #$@(map (lambda (test) (string-append "--deselect="
24104 "tests/"
24105 test))
24106 (list "test_smart.py::test_slowshot"
24107 "test_smart.py::test_slowshot_with"
24108 "test_smart.py::test_slowshot_nocrop"
24109 "test_smart.py::test_slowshot_timeout"
24110 "test_smart.py::test_slowshot_timeout_nocrop"
24111 "test_smart2.py::test_double"
24112 "test_smart_thread.py::test_smart"
24113 "test_examples.py::test_screenshot")))))
24114 (native-inputs
24115 (list python-easyprocess
24116 python-entrypoint2
24117 python-psutil
24118 python-pytest
24119 python-setuptools
24120 python-vncdotool-bootstrap
24121 xmessage
24122 xorg-server-for-tests))
24123 (home-page "https://github.com/ponty/pyvirtualdisplay")
24124 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
24125 (description
24126 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
24127 (license license:bsd-3)))
24128
24129(define-public python-pyserial
24130 (package
24131 (name "python-pyserial")
24132 ;; 3.5 (2020-11-23), use the latest commit as upstream stopped publishing
24133 ;; releases on PyPI or tagging new versions.
24134 (properties '((commit . "a5c48d445fbc1943d4fabf8d9090a50fda3172fd")
24135 (revision . "0")))
24136 (version (git-version "3.5"
24137 (assoc-ref properties 'revision)
24138 (assoc-ref properties 'commit)))
24139 (source
24140 (origin
24141 (method git-fetch)
24142 (uri (git-reference
24143 (url "https://github.com/pyserial/pyserial")
24144 (commit (assoc-ref properties 'commit))))
24145 (file-name (git-file-name name version))
24146 (sha256
24147 (base32 "1mfqs5g4qgp6lll859hy3i4gz7nn95g057s80k01jn2mza12swjp"))))
24148 (build-system pyproject-build-system)
24149 (native-inputs
24150 (list python-pyfakefs
24151 python-pytest
24152 python-setuptools))
24153 (home-page "https://github.com/pyserial/pyserial")
24154 (synopsis "Python Serial Port Bindings")
24155 (description
24156 "@code{pyserial} provide serial port bindings for Python. It supports
24157different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
24158Xon/Xoff. The port is accessed in RAW mode.")
24159 (license license:bsd-3)))
24160
24161(define-public python-pyserial-asyncio
24162 (package
24163 (name "python-pyserial-asyncio")
24164 (version "0.6")
24165 (source
24166 (origin
24167 (method git-fetch)
24168 (uri (git-reference
24169 (url "https://github.com/pyserial/pyserial-asyncio")
24170 (commit (string-append "v" version))))
24171 (file-name (git-file-name name version))
24172 (sha256
24173 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
24174 (build-system pyproject-build-system)
24175 (arguments (list #:test-backend #~'unittest))
24176 (native-inputs (list python-setuptools))
24177 (propagated-inputs (list python-pyserial))
24178 (home-page "https://github.com/pyserial/pyserial-asyncio")
24179 (synopsis "Pyserial asynchronous I/O extension")
24180 (description
24181 "This package extends Pyserial with asynchronous I/O support.")
24182 (license license:bsd-3)))
24183
24184(define-public python-pymemcache
24185 (package
24186 (name "python-pymemcache")
24187 (version "4.0.0")
24188 (source
24189 (origin
24190 (method url-fetch)
24191 (uri (pypi-uri "pymemcache" version))
24192 (sha256
24193 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
24194 (build-system pyproject-build-system)
24195 (arguments
24196 ;; We don't have the zstd module.
24197 (list
24198 #:test-flags
24199 '(list "--ignore=pymemcache/test/test_compression.py")))
24200 (native-inputs
24201 (list python-faker
24202 python-pytest
24203 python-setuptools
24204 python-wheel))
24205 (home-page "https://github.com/pinterest/pymemcache")
24206 (synopsis "Comprehensive, fast, pure Python memcached client")
24207 (description
24208 "This package provides a comprehensive, fast, pure Python memcached
24209client.")
24210 (license license:asl2.0)))
24211
24212(define-public python-pymodbus
24213 (package
24214 (name "python-pymodbus")
24215 (version "3.8.6")
24216 (source
24217 (origin
24218 (method git-fetch)
24219 (uri (git-reference
24220 (url "https://github.com/riptideio/pymodbus")
24221 (commit (string-append "v" version))))
24222 (file-name (git-file-name name version))
24223 (sha256
24224 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
24225 (build-system pyproject-build-system)
24226 (arguments
24227 (list
24228 #:test-flags
24229 #~(list "--ignore"
24230 "test/server/test_simulator_api.py"
24231 ;; These tests require the presence of a certificate.
24232 "--ignore-glob"
24233 "test/examples/*"
24234 "--ignore"
24235 "test/client/test_client.py")))
24236 (native-inputs (list python-mock
24237 python-pytest
24238 python-pytest-asyncio
24239 python-pytest-xdist
24240 python-redis
24241 python-setuptools
24242 python-sqlalchemy
24243 python-tornado
24244 python-twisted
24245 python-wheel))
24246 (propagated-inputs (list python-pyserial
24247 python-six
24248 ;; For the REPL.
24249 python-aiohttp
24250 python-click
24251 python-prompt-toolkit
24252 python-pygments
24253 python-pyserial-asyncio))
24254 (home-page "https://github.com/riptideio/pymodbus/")
24255 (synopsis "Modbus protocol stack in Python")
24256 (description
24257 "Pymodbus is a full Modbus protocol implementation using
24258 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
24259 communications core. It includes the following @emph{client} features:
24260 @itemize
24261 @item full read/write protocol on discrete and register
24262 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
24263 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24264 @item asynchronous and synchronous versions
24265 @item payload builder/decoder utilities
24266 @item pymodbus read eval print loop (REPL).
24267 @end itemize
24268 It also includes the following @emph{server} features:
24269 @itemize
24270 @item can function as a fully implemented Modbus server
24271 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24272 @item asynchronous and synchronous versions
24273 @item full server control context (device information, counters, etc)
24274 @item a number of backing contexts (database, redis, sqlite, a slave device).
24275 @end itemize")
24276 (license license:bsd-3)))
24277
24278(define-public python-exodriver
24279 (package
24280 (name "python-exodriver")
24281 (version "2.6.0")
24282 (source (origin
24283 (method git-fetch)
24284 (uri (git-reference
24285 (url "https://github.com/labjack/exodriver")
24286 (commit (string-append "v" version))))
24287 (file-name (git-file-name name version))
24288 (sha256
24289 (base32
24290 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
24291 (outputs (list "out"
24292 "doc")) ;544 KiB of examples
24293 (build-system gnu-build-system)
24294 (arguments
24295 (list
24296 #:tests? #f ;no test suite
24297 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
24298 (string-append "PREFIX=" #$output)
24299 "RUN_LDCONFIG=0"
24300 "LINK_SO=1")
24301 #:phases
24302 #~(modify-phases %standard-phases
24303 (delete 'configure)
24304 (replace 'build
24305 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24306 (with-directory-excursion "liblabjackusb"
24307 (apply (assoc-ref %standard-phases 'build)
24308 `(,@args #:make-flags ,make-flags)))))
24309 (replace 'install
24310 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24311 (with-directory-excursion "liblabjackusb"
24312 (apply (assoc-ref %standard-phases 'install)
24313 `(,@args #:make-flags ,make-flags)))
24314 ;; Install udev rules.
24315 (install-file "90-labjack.rules"
24316 (string-append #$output "/lib/udev/rules.d"))
24317 ;; Install examples.
24318 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
24319 (mkdir-p doc)
24320 (copy-recursively "examples"
24321 (string-append doc "/examples"))))))))
24322 (inputs (list libusb))
24323 (home-page "https://github.com/labjack/exodriver")
24324 (synopsis "USB driver for LabJack data acquisition instruments")
24325 (description "This package provides @code{liblabjackusb}, a USB library for low-level
24326communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
24327instruments. A udev rule is also included to allow unprivileged users to
24328communicate with the instruments via USB.")
24329 (license license:expat))) ;see README
24330
24331(define-public python-labjack
24332 (package
24333 (name "python-labjack")
24334 (version "2.1.0")
24335 (source (origin
24336 (method url-fetch)
24337 (uri (pypi-uri "LabJackPython" version))
24338 (sha256
24339 (base32
24340 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24341 (build-system pyproject-build-system)
24342 (arguments
24343 (list
24344 #:tests? #f ;no test suite
24345 #:phases
24346 #~(modify-phases %standard-phases
24347 (add-after 'unpack 'patch-liblabjackusb.so
24348 (lambda* (#:key inputs #:allow-other-keys)
24349 (substitute* (find-files "." "\\.py$")
24350 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24351 (format #f "ctypes.CDLL(~s"
24352 (search-input-file inputs
24353 "lib/liblabjackusb.so")))))))))
24354 (native-inputs (list python-setuptools))
24355 ;; exodriver is provided as a regular input, as only its shared object is
24356 ;; used, not its Python API.
24357 (inputs (list python-exodriver))
24358 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24359 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24360 (description
24361 "This Python library allows communicating with the U3, U6, UE9 and U12
24362LabJack data acquisition (DAQ) modules.")
24363 (license license:expat))) ;see setup.py
24364
24365(define-public python-kivy-garden
24366 (package
24367 (name "python-kivy-garden")
24368 (version "0.1.5")
24369 (source
24370 (origin
24371 (method git-fetch) ; source was removed from PyPI
24372 (uri (git-reference
24373 (url "https://github.com/kivy-garden/garden")
24374 (commit (string-append "v" version))))
24375 (file-name (git-file-name name version))
24376 (sha256
24377 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24378 (build-system pyproject-build-system)
24379 (arguments
24380 (list
24381 #:tests? #f)) ; no tests in PyPI or Git distributions
24382 (native-inputs
24383 (list python-setuptools
24384 python-wheel))
24385 (propagated-inputs
24386 (list python-requests))
24387 (home-page "https://github.com/kivy-garden/garden")
24388 (synopsis "Garden tool for Kivy flowers")
24389 (description
24390 "This package provides the @command{garden} command to install packages
24391for Kivy, the multitouch application platform.")
24392 (license license:expat)))
24393
24394(define-public python-async-lru
24395 (package
24396 (name "python-async-lru")
24397 (version "2.0.4")
24398 (source
24399 (origin
24400 (method url-fetch)
24401 (uri (pypi-uri "async-lru" version))
24402 (sha256
24403 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24404 (build-system pyproject-build-system)
24405 (native-inputs
24406 (list python-pytest
24407 python-pytest-asyncio
24408 python-pytest-timeout
24409 python-setuptools
24410 python-wheel))
24411 (propagated-inputs
24412 (list python-typing-extensions))
24413 (home-page "https://github.com/aio-libs/async-lru")
24414 (synopsis "Simple LRU cache for asyncio")
24415 (description
24416 "This package is a port of Python's built-in @code{functools.lru_cache}
24417function for @code{asyncio}. To better handle async behaviour, it also
24418ensures multiple concurrent calls will only result in 1 call to the wrapped
24419function, with all awaits receiving the result of that call when it
24420completes.")
24421 (license license:expat)))
24422
24423(define-public python-asyncinject
24424 (package
24425 (name "python-asyncinject")
24426 (version "0.6.1")
24427 (source
24428 (origin
24429 (method git-fetch)
24430 (uri (git-reference
24431 (url "https://github.com/simonw/asyncinject")
24432 (commit version)))
24433 (file-name (git-file-name name version))
24434 (sha256
24435 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24436 (build-system pyproject-build-system)
24437 (native-inputs
24438 (list python-pytest
24439 python-pytest-asyncio
24440 python-setuptools))
24441 (home-page "https://github.com/simonw/asyncinject")
24442 (synopsis
24443 "Run async workflows using pytest-fixtures-style dependency injection")
24444 (description
24445 "This package lets you run asynchronous workflows using
24446pytest-fixtures-style dependency injection.")
24447 (license license:asl2.0)))
24448
24449(define-public python-binaryornot
24450 (package
24451 (name "python-binaryornot")
24452 (version "0.6.0")
24453 (source
24454 (origin
24455 (method git-fetch)
24456 (uri (git-reference
24457 (url "https://github.com/audreyr/binaryornot")
24458 (commit (string-append "v" version))))
24459 (file-name (git-file-name name version))
24460 (sha256
24461 (base32 "008r45bbhax8flcc0cp5fm2p9niclf0kg773s2y2p1x1j5qjx1jb"))))
24462 (build-system pyproject-build-system)
24463 (arguments
24464 (list
24465 #:test-flags
24466 ;; FileNotFoundError: [Errno 2] No such file or directory: 'uv'
24467 #~(list (string-append "--deselect=tests/test_sdist.py"
24468 "::TestSdistContents"
24469 "::test_sdist_includes_pyc_fixtures"))))
24470 (native-inputs
24471 (list python-hatchling
24472 python-pytest))
24473 (home-page "https://github.com/audreyr/binaryornot")
24474 (synopsis "Package to check if a file is binary or text")
24475 (description "Ultra-lightweight pure Python package to check if a file is
24476 binary or text.")
24477 (license license:bsd-3)))
24478
24479(define-public python-bson
24480 (package
24481 (name "python-bson")
24482 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24483 (revision . "0")))
24484 (version (git-version "0.5.10"
24485 (assoc-ref properties 'revision)
24486 (assoc-ref properties 'commit)))
24487 (source
24488 (origin
24489 (method git-fetch) ;for tests
24490 (uri (git-reference
24491 (url "https://github.com/py-bson/bson")
24492 (commit (assoc-ref properties 'commit))))
24493 (file-name (git-file-name name version))
24494 (sha256
24495 (base32
24496 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24497 (build-system pyproject-build-system)
24498 (native-inputs
24499 (list python-pytest
24500 python-setuptools))
24501 (propagated-inputs
24502 (list python-dateutil
24503 python-six))
24504 (home-page "https://github.com/py-bson/bson")
24505 (synopsis "BSON (Binary JSON) codec for Python")
24506 (description "@code{bson} is a Python library implementing a BSON (Binary
24507JSON) codec.")
24508 (license license:asl2.0)))
24509
24510(define-public python-nltk
24511 (package
24512 (name "python-nltk")
24513 (version "3.9.1")
24514 (source
24515 (origin
24516 (method url-fetch)
24517 (uri (pypi-uri "nltk" version))
24518 (sha256
24519 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24520 (build-system pyproject-build-system)
24521 (arguments
24522 ;; Tests require some extra resources to be downloaded.
24523 ;; TODO Try packaging these resources.
24524 '(#:tests? #f))
24525 (propagated-inputs (list python-click python-joblib python-regex
24526 python-tqdm))
24527 (native-inputs (list python-setuptools python-wheel))
24528 (home-page "https://www.nltk.org/")
24529 (synopsis "Natural Language Toolkit")
24530 (description
24531 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24532WordNet, along with a suite of text processing libraries for classification,
24533tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24534natural language processing libraries.")
24535 (license license:asl2.0)))
24536
24537(define-public python-pymongo
24538 (package
24539 (name "python-pymongo")
24540 (version "4.17.0")
24541 (source
24542 (origin
24543 (method git-fetch)
24544 (uri (git-reference
24545 (url "https://github.com/mongodb/mongo-python-driver")
24546 (commit version)))
24547 (file-name (git-file-name name version))
24548 (sha256
24549 (base32 "0ybp4klx2advd0aka4d0915vwvydid3cil16x497amc4wiigndhx"))))
24550 (build-system pyproject-build-system)
24551 (arguments
24552 (list
24553 ;; tests: 1354 passed, 6514 skipped, 838 deselected, 38 subtests passed
24554 #:test-flags
24555 #~(list
24556 ;; pytest.PytestDeprecationWarning: Overriding the
24557 ;; "event_loop_policy" fixture is deprecated and will be removed in a
24558 ;; future version of pytest-asyncio. Use the
24559 ;; "pytest_asyncio_loop_factories" hook to customize event loop
24560 ;; creation.
24561 "-W" "ignore::DeprecationWarning"
24562 ;; Run only default unit tests, no benchmark and networking tests.
24563 "-m" "default_async or default"
24564 ;; Tests need access to /etc/resolve.conf.
24565 "--ignore=test/asynchronous/test_srv_polling.py"
24566 "--ignore=test/test_client.py"
24567 "--ignore=test/test_srv_polling.py"
24568 ;; XXX: Tests fail with assertion is not equal.
24569 "-k" "not test_test_uri_options_srv-options_SRV_URI")))
24570 (native-inputs
24571 (list python-hatch-requirements-txt
24572 python-hatchling
24573 python-pytest
24574 python-pytest-asyncio
24575 python-setuptools))
24576 (propagated-inputs
24577 (list python-dnspython))
24578 (home-page "https://github.com/mongodb/mongo-python-driver")
24579 (synopsis "Python driver for MongoDB")
24580 (description
24581 "The PyMongo distribution contains tools for interacting with MongoDB
24582database from Python. The @code{bson} package is an implementation of the
24583@url{http://bsonspec.org/, BSON format} for Python. The @code{pymongo}
24584package is a native Python driver for MongoDB, offering both synchronous and
24585asynchronous APIs. The @code{gridfs} package is a gridfs implementation on
24586top of @code{pymongo}.")
24587 (license license:asl2.0)))
24588
24589(define-public python-py-consul
24590 (package
24591 (name "python-py-consul")
24592 (version "1.6.0")
24593 (source
24594 (origin
24595 (method git-fetch)
24596 (uri (git-reference
24597 ;; Fork from https://github.com/cablehead/python-consul
24598 (url "https://github.com/criteo/py-consul")
24599 (commit (string-append "v" version))))
24600 (file-name (git-file-name name version))
24601 (sha256
24602 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24603 (build-system pyproject-build-system)
24604 (arguments (list #:tests? #f)) ; Tests require docker.
24605 (native-inputs (list python-setuptools))
24606 (propagated-inputs (list python-requests))
24607 (home-page "https://github.com/criteo/py-consul")
24608 (synopsis "Python client for Consul")
24609 (description
24610 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24611discovery, monitoring and configuration.")
24612 (license license:expat)))
24613
24614(define-public python-schematics
24615 (package
24616 (name "python-schematics")
24617 (version "2.1.1")
24618 (source
24619 (origin
24620 (method git-fetch)
24621 (uri (git-reference
24622 (url "https://github.com/schematics/schematics")
24623 (commit (string-append "v" version))))
24624 (file-name (git-file-name name version))
24625 (sha256
24626 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24627 (build-system pyproject-build-system)
24628 (native-inputs
24629 (list python-dateutil python-mock python-pytest python-setuptools))
24630 (home-page "https://github.com/schematics/schematics")
24631 (synopsis "Python Data Structures for Humans")
24632 (description
24633 "Schematics is a Python library to combine types into structures,
24634validate them, and transform the shapes of your data based on simple
24635descriptions.
24636
24637The internals are similar to ORM type systems, but there is no database layer
24638in Schematics. Instead, building a database layer is easily made when
24639Schematics handles everything except for writing the query. Schematics can be
24640used for tasks where having a database involved is unusual.")
24641 (license license:bsd-3)))
24642
24643(define-public python-odfpy
24644 (package
24645 (name "python-odfpy")
24646 (version "1.4.2")
24647 (source
24648 (origin
24649 (method git-fetch)
24650 (uri (git-reference
24651 (url "https://github.com/eea/odfpy")
24652 (commit (string-append "release-" version))))
24653 (file-name (git-file-name name version))
24654 (sha256
24655 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24656 (build-system pyproject-build-system)
24657 (native-inputs (list python-pytest python-setuptools))
24658 (propagated-inputs (list python-defusedxml))
24659 (home-page "https://github.com/eea/odfpy")
24660 (synopsis "Python API and tools to manipulate OpenDocument files")
24661 (description
24662 "Collection of libraries and utility programs written in Python to
24663manipulate OpenDocument 1.2 files.")
24664 (license
24665 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24666 ;; number of files with other licenses.
24667 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24668
24669(define-public python-namex
24670 (package
24671 (name "python-namex")
24672 (version "0.0.7")
24673 (source
24674 (origin
24675 (method url-fetch)
24676 (uri (pypi-uri "namex" version))
24677 (sha256
24678 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24679 (build-system pyproject-build-system)
24680 (arguments (list #:tests? #false)) ;there are none
24681 (native-inputs (list python-setuptools python-wheel))
24682 (home-page "https://github.com/fchollet/namex")
24683 (synopsis
24684 "Separate implementation and public API surface of Python packages")
24685 (description
24686 "This package provides a simple utility to separate the
24687implementation of your Python package and its public API surface.")
24688 (license license:asl2.0)))
24689
24690(define-public python-natsort
24691 (package
24692 (name "python-natsort")
24693 (version "8.4.0")
24694 (source
24695 (origin
24696 (method url-fetch)
24697 (uri (pypi-uri "natsort" version))
24698 (sha256
24699 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24700 (build-system pyproject-build-system)
24701 (native-inputs
24702 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24703 python-pytest
24704 python-pytest-mock
24705 python-setuptools))
24706 (propagated-inputs
24707 (list python-fastnumbers
24708 python-pyicu))
24709 (home-page "https://github.com/SethMMorton/natsort")
24710 (synopsis "Natural sorting for python and shell")
24711 (description
24712 "Natsort lets you apply natural sorting on lists instead of
24713lexicographical. If you use the built-in @code{sorted} method in python on a
24714list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24715it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24716@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24717numbers and sorts them separately from strings. It can also sort version
24718numbers, real numbers, mixed types and more, and comes with a shell command
24719@command{natsort} that exposes this functionality in the command line.")
24720 (license license:expat)))
24721
24722(define-public python-graphql-core
24723 (package
24724 (name "python-graphql-core")
24725 (version "3.2.7")
24726 (source
24727 (origin
24728 (method git-fetch)
24729 (uri (git-reference
24730 (url "https://github.com/graphql-python/graphql-core")
24731 (commit (string-append "v" version))))
24732 (file-name (git-file-name name version))
24733 (sha256
24734 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24735 (build-system pyproject-build-system)
24736 (native-inputs
24737 (list python-gevent
24738 python-mock
24739 python-poetry-core
24740 python-pytest
24741 python-pytest-benchmark
24742 python-pytest-mock))
24743 (propagated-inputs
24744 (list python-promise python-six))
24745 (home-page "https://github.com/graphql-python/graphql-core")
24746 (synopsis "GraphQL implementation for Python")
24747 (description
24748 "GraphQL implementation for Python. GraphQL is a data query language and
24749 runtime designed and used to request and deliver data to mobile and web apps.
24750 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24751 to Python.")
24752 (license license:expat)))
24753
24754(define-public python-graphql-relay
24755 (package
24756 (name "python-graphql-relay")
24757 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24758 (revision . "0")))
24759 (version (git-version "3.1.5"
24760 (assoc-ref properties 'revision)
24761 (assoc-ref properties 'commit)))
24762 (source
24763 (origin
24764 (method git-fetch)
24765 (uri (git-reference
24766 (url "https://github.com/graphql-python/graphql-relay-py")
24767 (commit (assoc-ref properties 'commit))))
24768 (file-name (git-file-name name version))
24769 (sha256
24770 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24771 (build-system pyproject-build-system)
24772 (native-inputs
24773 (list python-pytest
24774 python-pytest-asyncio
24775 python-pytest-describe
24776 python-poetry-core))
24777 (propagated-inputs (list python-graphql-core))
24778 (home-page "https://github.com/graphql-python/graphql-relay-py")
24779 (synopsis "Relay implementation for Python")
24780 (description
24781 "This is a library to allow the easy creation of Relay-compliant servers
24782using the GraphQL Python reference implementation of a GraphQL server. It
24783should be noted that the code is a exact port of the original
24784@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24785implementation} from Facebook.")
24786 (license license:expat)))
24787
24788(define-public python-graphene
24789 (package
24790 (name "python-graphene")
24791 (version "3.4.3")
24792 (source
24793 (origin
24794 (method url-fetch)
24795 (uri (pypi-uri "graphene" version))
24796 (sha256
24797 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24798 (build-system pyproject-build-system)
24799 (arguments
24800 (list #:tests? #f)) ;XXX: tests fail to load
24801 (native-inputs
24802 (list python-setuptools))
24803 (propagated-inputs
24804 (list python-dateutil
24805 python-graphql-core
24806 python-graphql-relay
24807 python-typing-extensions))
24808 (home-page "https://graphene-python.org/")
24809 (synopsis "GraphQL Framework for Python")
24810 (description
24811 "Graphene is a Python library for building GraphQL schemas/types. A
24812GraphQL schema describes your data model, and provides a GraphQL server with
24813an associated set of resolve methods that know how to fetch data.")
24814 (license license:expat)))
24815
24816(define-public python-rodi
24817 (package
24818 (name "python-rodi")
24819 (version "2.0.8")
24820 (source
24821 (origin
24822 (method git-fetch)
24823 (uri (git-reference
24824 (url "https://github.com/Neoteroi/rodi")
24825 (commit (string-append "v" version))))
24826 (file-name (git-file-name name version))
24827 (sha256
24828 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24829 (build-system pyproject-build-system)
24830 (native-inputs
24831 (list python-hatchling
24832 python-pytest
24833 python-pytest-asyncio))
24834 (home-page "https://github.com/Neoteroi/rodi")
24835 (synopsis "Dependency injection framework for Python")
24836 (description
24837 "Rodi is a dependency injection framework for Python applications.
24838
24839Its features include
24840
24841@itemize
24842@item Type resolution by signature types annotations.
24843@item Type resolution by class annotations.
24844@item Type resolution by names and aliases.
24845@item Build graph of objects without the need for source code changes.
24846@item Minimum overhead to obtain services, once the objects graph is built.
24847@item Support for singleton, transient, and scoped services.
24848@end itemize")
24849 (license license:expat)))
24850
24851;; XXX: The last time updated in 2015, consider to remove it when nothing is
24852;; depend on it.
24853(define-public python-snowballstemmer
24854 (package
24855 (name "python-snowballstemmer")
24856 (version "2.2.0")
24857 (source
24858 (origin
24859 (method url-fetch)
24860 (uri (pypi-uri "snowballstemmer" version))
24861 (sha256
24862 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24863 (build-system pyproject-build-system)
24864 (arguments
24865 (list
24866 #:tests? #f)) ; no tests
24867 (native-inputs
24868 (list python-setuptools))
24869 (home-page "https://github.com/shibukawa/snowball_py")
24870 (synopsis "Snowball stemming library collection for Python")
24871 (description
24872 "This package provides 16 word stemmer algorithms generated from Snowball
24873algorithms. It includes the 15 original ones plus the Poerter English
24874stemmer.")
24875 (license license:bsd-3)))
24876
24877(define-public python-setproctitle
24878 (package
24879 (name "python-setproctitle")
24880 (version "1.3.7")
24881 (source
24882 (origin
24883 (method git-fetch)
24884 (uri (git-reference
24885 (url "https://github.com/dvarrazzo/py-setproctitle")
24886 (commit (string-append "version-" version))))
24887 (file-name (git-file-name name version))
24888 (sha256
24889 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24890 (build-system pyproject-build-system)
24891 (arguments
24892 (list
24893 #:phases
24894 #~(modify-phases %standard-phases
24895 (add-before 'check 'configure-tests
24896 (lambda* (#:key tests? #:allow-other-keys)
24897 (when tests?
24898 (setenv "PYTHON"
24899 (or (which "python3")
24900 (which "python")))
24901 (setenv "PYCONFIG"
24902 (if (which "python3-config")
24903 "python3-config --embed"
24904 "python-config"))
24905 (substitute* "tests/conftest.py"
24906 (("cc") "gcc"))))))))
24907 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24908 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24909 (synopsis
24910 "Setproctitle implementation for Python to customize the process title")
24911 (description
24912 "The library allows a process to change its title (as displayed by system
24913tools such as @code{ps} and @code{top}).
24914
24915Changing the title is mostly useful in multi-process systems, for example when a
24916master process is forked: changing the children's title allows identifying the
24917task each process is busy with. The technique is used by PostgreSQL and the
24918OpenSSH Server for example.")
24919 (license license:bsd-3)))
24920
24921(define-public python-pyelftools
24922 (package
24923 (name "python-pyelftools")
24924 (version "0.32")
24925 (source
24926 (origin
24927 (method git-fetch)
24928 (uri (git-reference
24929 (url "https://github.com/eliben/pyelftools")
24930 (commit (string-append "v" version))))
24931 (file-name (git-file-name name version))
24932 (sha256
24933 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24934 (snippet
24935 #~(begin
24936 ;; Delete bundled readelf and llvm-dwardump executables. Project
24937 ;; also ships quite a lot binary files mainly for tests, check
24938 ;; with:
24939 ;;
24940 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24941 ;;
24942 (delete-file "test/external_tools/readelf")
24943 (delete-file "test/external_tools/llvm-dwarfdump")))))
24944 (build-system pyproject-build-system)
24945 (arguments
24946 (list
24947 #:phases
24948 #~(modify-phases %standard-phases
24949 (replace 'check
24950 (lambda* (#:key tests? #:allow-other-keys)
24951 (when tests?
24952 ;; Run just basic unit and example tests, dwarfdump and
24953 ;; readelf tests are not selected as they are fragile and
24954 ;; arch-specific.
24955 (invoke "python" "test/run_all_unittests.py")
24956 (invoke "python" "test/run_examples_test.py")))))))
24957 (home-page "https://github.com/eliben/pyelftools")
24958 (native-inputs
24959 (list python-setuptools
24960 python-wheel))
24961 (synopsis "Analyze binary and library file information")
24962 (description
24963 "This Python library provides interfaces for parsing and analyzing two
24964binary and library file formats ; the Executable and Linking Format (ELF), and
24965debugging information in the Debugging With Attributed Record
24966Format (DWARF).")
24967 (license license:public-domain)))
24968
24969(define-public python-pefile
24970 (package
24971 (name "python-pefile")
24972 (version "2024.8.26")
24973 (source
24974 (origin
24975 (method git-fetch)
24976 (uri (git-reference
24977 (url "https://github.com/erocarrera/pefile")
24978 (commit (string-append "v" version))))
24979 (file-name (git-file-name name version))
24980 (sha256
24981 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24982 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24983 (build-system pyproject-build-system)
24984 (arguments
24985 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24986 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24987 ;; decrypted and unpacked before we can run them.
24988 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24989 (native-inputs (list python-pytest python-setuptools))
24990 (propagated-inputs (list python-future))
24991 (home-page "https://github.com/erocarrera/pefile")
24992 (synopsis "Portable Executable (PE) file parser")
24993 (description
24994 "This python library provides interfaces for parsing and working with
24995Portable Executable (PE) files. It makes to most information from the header,
24996as well as section details and data available.")
24997 (license license:expat)))
24998
24999(define-public python-pyemd
25000 (package
25001 (name "python-pyemd")
25002 (version "1.0.0")
25003 (source (origin
25004 (method url-fetch)
25005 (uri (pypi-uri "pyemd" version))
25006 (sha256
25007 (base32
25008 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
25009 (build-system pyproject-build-system)
25010 (native-inputs
25011 (list python-cython
25012 python-pytest
25013 python-setuptools
25014 python-setuptools-scm))
25015 (propagated-inputs
25016 (list python-numpy-1))
25017 (home-page "https://github.com/wmayner/pyemd")
25018 (synopsis
25019 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
25020 (description
25021 "This package provides a Python wrapper for Ofir Pele and Michael
25022Werman's implementation of the Earth Mover's Distance.")
25023 (license license:expat)))
25024
25025(define-public python-imagesize
25026 (package
25027 (name "python-imagesize")
25028 (version "2.0.0")
25029 (source
25030 (origin
25031 (method git-fetch)
25032 (uri (git-reference
25033 (url "https://github.com/shibukawa/imagesize_py")
25034 (commit version)))
25035 (file-name (git-file-name name version))
25036 (sha256
25037 (base32 "1r07r80d16hkwhnmz6sfvj8d4s3d6wg82j99dbr3iy78gc48wia0"))))
25038 (build-system pyproject-build-system)
25039 (arguments (list #:test-backend #~'unittest))
25040 (native-inputs
25041 (list python-setuptools))
25042 (home-page "https://github.com/shibukawa/imagesize_py")
25043 (synopsis "Gets image size of files in various formats in Python")
25044 (description
25045 "This package allows determination of image size from PNG, JPEG,
25046JPEG2000 and GIF files in pure Python.")
25047 (license license:expat)))
25048
25049(define-public python-argcomplete
25050 (package
25051 (name "python-argcomplete")
25052 (version "3.7.2")
25053 (source
25054 (origin
25055 (method url-fetch)
25056 (uri (pypi-uri "argcomplete" version))
25057 (sha256
25058 (base32
25059 "1ff6kwdkhn59w80bn30fn4bhgmf0ahipbldh5nvfsscr1fdbdn5a"))))
25060 (build-system pyproject-build-system)
25061 (arguments
25062 (list #:tests? #f)) ;XXX: tests requires tcsh, fish and full bash shells
25063 (native-inputs
25064 (list python-hatch-vcs
25065 python-hatchling
25066 python-pexpect))
25067 (home-page "https://github.com/kislyuk/argcomplete")
25068 (synopsis "Shell tab completion for Python argparse")
25069 (description "argcomplete provides extensible command line tab completion
25070of arguments and options for Python scripts using @code{argparse}. It's
25071particularly useful for programs with many options or sub-parsers that can
25072dynamically suggest completions ; for example, when browsing resources over
25073the network.")
25074 (license license:asl2.0)))
25075
25076(define-public python-csscompressor
25077 (package
25078 (name "python-csscompressor")
25079 (version "0.9.5")
25080 (source
25081 (origin
25082 (method git-fetch)
25083 (uri (git-reference
25084 (url "https://github.com/sprymix/csscompressor")
25085 (commit (string-append "v" version))))
25086 (file-name (git-file-name name version))
25087 (sha256
25088 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
25089 (build-system pyproject-build-system)
25090 (native-inputs (list python-pytest python-setuptools))
25091 (home-page "https://github.com/sprymix/csscompressor")
25092 (synopsis "Python port of YUI CSS Compressor")
25093 (description "This package provides a python port of YUI CSS Compressor.")
25094 (license license:bsd-3)))
25095
25096(define-public python-rcssmin
25097 (package
25098 (name "python-rcssmin")
25099 (version "1.2.0")
25100 (source
25101 (origin
25102 (method url-fetch)
25103 (uri (pypi-uri "rcssmin" version))
25104 (sha256
25105 (base32
25106 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
25107 (build-system pyproject-build-system)
25108 (native-inputs (list python-pytest python-setuptools python-wheel))
25109 (home-page "http://opensource.perlig.de/rcssmin/")
25110 (synopsis "CSS Minifier")
25111 (description "The minifier is based on the semantics of the YUI compressor,
25112 which itself is based on the rule list by Isaac Schlueter.")
25113 (license license:asl2.0)))
25114
25115(define-public python-rjsmin
25116 (package
25117 (name "python-rjsmin")
25118 (version "1.2.3")
25119 (source
25120 (origin
25121 (method url-fetch)
25122 (uri (pypi-uri "rjsmin" version))
25123 (sha256
25124 (base32
25125 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
25126 (modules '((guix build utils)))
25127 (snippet
25128 '(for-each delete-file (find-files "bench" "\\.js$")))))
25129 (build-system pyproject-build-system)
25130 (native-inputs
25131 (list python-pytest python-setuptools python-wheel))
25132 (home-page "http://opensource.perlig.de/rjsmin/")
25133 (synopsis "Javascript Minifier")
25134 (description "@code{rJSmin} is a javascript minifier written in Python.
25135The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
25136module is a re-implementation aiming for speed, so it can be used at
25137runtime (rather than during a preprocessing step).")
25138 (license license:asl2.0)))
25139
25140(define-public python-cheetah
25141 (package
25142 (name "python-cheetah")
25143 (version "3.3.1")
25144 (source
25145 (origin
25146 (method url-fetch)
25147 (uri (pypi-uri "CT3" version))
25148 (sha256
25149 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
25150 (build-system pyproject-build-system)
25151 (arguments
25152 (list
25153 #:test-backend #~'custom
25154 #:test-flags #~(list "Cheetah/Tests/Test.py")
25155 #:phases
25156 #~(modify-phases %standard-phases
25157 (add-after 'unpack 'use-absolute-python
25158 (lambda _
25159 (substitute* "Cheetah/CheetahWrapper.py"
25160 (("#!/usr/bin/env python")
25161 (string-append "#!" (which "python"))))))
25162 (add-before 'check 'configure-tests
25163 (lambda* (#:key tests? #:allow-other-keys)
25164 (substitute* "Cheetah/Tests/ImportHooks.py"
25165 (("os.path.dirname\\(__file__\\)")
25166 (string-append "'" (getcwd) "/Cheetah/Tests'")))
25167 (substitute* "Cheetah/Tests/Test.py"
25168 (("unittest.TextTestRunner\\(\\)")
25169 "unittest.TextTestRunner(verbosity=2)"))
25170 (setenv "TMPDIR" "/tmp"))))))
25171 (native-inputs (list python-setuptools))
25172 (propagated-inputs (list python-markdown)) ;optional
25173 (home-page "https://cheetahtemplate.org/")
25174 (synopsis "Template engine")
25175 (description
25176 "Cheetah is a text-based template engine and Python code generator.
25177
25178 Cheetah can be used as a standalone templating utility or referenced as a
25179library from other Python applications. It has many potential uses, but web
25180developers looking for a viable alternative to ASP, JSP, PHP and PSP are
25181expected to be its principle user group.
25182
25183Features:
25184@enumerate
25185@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
25186other text-based format.
25187@item Cleanly separates content, graphic design, and program code.
25188@item Blends the power and flexibility of Python with a simple template
25189language that non-programmers can understand.
25190@item Gives template writers full access to any Python data structure, module,
25191function, object, or method in their templates.
25192@item Makes code reuse easy by providing an object-orientated interface to
25193templates that is accessible from Python code or other Cheetah templates. One
25194template can subclass another and selectively reimplement sections of it.
25195@item Provides a simple, yet powerful, caching mechanism that can dramatically
25196improve the performance of a dynamic website.
25197@item Compiles templates into optimized, yet readable, Python code.
25198@end enumerate")
25199 (license (license:x11-style "file://LICENSE"))))
25200
25201(define-public python-chevron
25202 (package
25203 (name "python-chevron")
25204 (version "0.14.0")
25205 (source (origin
25206 (method url-fetch)
25207 (uri (pypi-uri "chevron" version))
25208 (sha256
25209 (base32
25210 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
25211 (build-system pyproject-build-system)
25212 (arguments (list #:tests? #false)) ;there are none
25213 (native-inputs (list python-setuptools python-wheel))
25214 (home-page "https://github.com/noahmorrison/chevron")
25215 (synopsis "Mustache templating language renderer")
25216 (description "This package provides a Python implementation of the
25217Mustache templating language renderer.")
25218 (license license:expat)))
25219
25220(define-public python-dulwich
25221 (package
25222 (name "python-dulwich")
25223 (version "1.2.12")
25224 (source
25225 (origin
25226 (method git-fetch)
25227 (uri (git-reference
25228 (url "https://github.com/jelmer/dulwich")
25229 (commit (string-append "dulwich-" version))))
25230 (file-name (git-file-name name version))
25231 (sha256
25232 (base32 "0in5pgqhnnbfqi5alcg85kiaxr8zww9iih7qsyy9g1yzlaxs0dvd"))))
25233 (build-system pyproject-build-system)
25234 (arguments
25235 (list
25236 ;; tests: 3796 passed, 89 skipped, 1 xfailed, 8 warnings, 33 subtests
25237 ;; passed
25238 #:test-flags
25239 ;; Exclude fuzzing from discovery, depends on python-atheris.
25240 #~(list "tests")
25241 #:phases
25242 #~(modify-phases %standard-phases
25243 (add-after 'unpack 'fix-tests
25244 (lambda* (#:key inputs #:allow-other-keys)
25245 (substitute* '("tests/test_hooks.py"
25246 "tests/porcelain/test_filters.py"
25247 "tests/test_repository.py"
25248 "tests/test_worktree.py")
25249 (("/bin/sh")
25250 (search-input-file inputs "/bin/sh")))))
25251 (add-before 'check 'pre-check
25252 (lambda _
25253 (setenv "PYTHONHASHSEED" "random")
25254 (setenv "TMPDIR" "/tmp"))))))
25255 (native-inputs
25256 (list git-minimal/pinned
25257 openssh-sans-x
25258 ;; python-atheris ;not packaged yet in Guix
25259 python-gevent
25260 python-geventhttpclient
25261 python-pytest
25262 python-setuptools
25263 python-setuptools-rust))
25264 (propagated-inputs
25265 (list python-urllib3
25266 ;; [optional]
25267 gnupg
25268 gpgme
25269 python-aiohttp
25270 python-fastimport
25271 python-merge3
25272 python-munkres
25273 python-paramiko
25274 python-patiencediff
25275 python-rich))
25276 (home-page "https://www.dulwich.io/")
25277 (synopsis "Git implementation in Python")
25278 (description "Dulwich is an implementation of the Git file formats and
25279protocols written in pure Python.")
25280 ;; Can be used with either license.
25281 (license (list license:asl2.0 license:gpl2+))))
25282
25283(define-public python-dunamai
25284 (package
25285 (name "python-dunamai")
25286 (version "1.26.0")
25287 (source
25288 (origin
25289 (method url-fetch)
25290 (uri (pypi-uri "dunamai" version))
25291 (sha256
25292 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
25293 (build-system pyproject-build-system)
25294 (arguments
25295 (list
25296 #:test-flags
25297 #~(list "-k" "not test__version__from_git__shallow")
25298 #:phases
25299 #~(modify-phases %standard-phases
25300 ;; These steps are taken from NixOS package definition:
25301 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
25302 (add-before 'check 'pre-check
25303 (lambda _
25304 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
25305 (setenv "HOME" "/tmp")
25306 (invoke "git" "config" "--global" "user.email" "[email protected]")
25307 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
25308 (propagated-inputs
25309 (list python-packaging))
25310 (native-inputs
25311 (list git-minimal/pinned
25312 python-poetry-core
25313 python-pytest))
25314 (home-page "https://github.com/mtkennerly/dunamai")
25315 (synopsis "Dynamic version generation")
25316 (description
25317 "Dunamai is Python library and command line tool for producing dynamic,
25318standards-compliant version strings, derived from tags in your version control
25319system. This facilitates uniquely identifying nightly or per-commit builds in
25320continuous integration and releasing new versions of your software simply by
25321creating a tag.")
25322 (license license:expat)))
25323
25324(define-public python-pbkdf2
25325 (package
25326 (name "python-pbkdf2")
25327 (version "1.3")
25328 (source
25329 (origin
25330 (method url-fetch)
25331 (uri (pypi-uri "pbkdf2" version))
25332 (sha256
25333 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25334 (build-system pyproject-build-system)
25335 (arguments
25336 (list
25337 #:test-backend #~'custom
25338 #:test-flags #~(list "test/test_pbkdf2.py")))
25339 (native-inputs (list python-setuptools))
25340 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25341 (synopsis "Password-based key derivation")
25342 (description
25343 "This module implements the password-based key derivation function,
25344PBKDF2, specified in RSA PKCS#5 v2.0.
25345
25346PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25347is part of the RSA Public Key Cryptography Standards series. The provided
25348implementation takes a password or a passphrase and a salt value (and
25349optionally a iteration count, a digest module, and a MAC module) and provides
25350a file-like object from which an arbitrarily-sized key can be read.")
25351 (license license:expat)))
25352
25353(define-public python-qrcode
25354 (package
25355 (name "python-qrcode")
25356 (version "8.2")
25357 (source
25358 (origin
25359 (method url-fetch)
25360 (uri (pypi-uri "qrcode" version))
25361 (sha256
25362 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25363 (build-system pyproject-build-system)
25364 (native-inputs
25365 (list python-poetry-core
25366 python-pytest))
25367 (home-page "https://github.com/lincolnloop/python-qrcode")
25368 (synopsis "QR Code image generator")
25369 (description
25370 "This package provides a pure Python QR Code generator module. It uses
25371the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25372
25373In addition this package provides a command line tool to generate QR codes and
25374either write these QR codes to a file or do the output as ascii art at the
25375console.")
25376 (license license:bsd-3)))
25377
25378(define-public python-rst2ansi
25379 (package
25380 (name "python-rst2ansi")
25381 (properties '((commit . "3728e16f8b8b1dc338e5df90ba2c4a93ee054b3f")
25382 (revision . "1")))
25383 (version (git-version "0.1.5"
25384 (assoc-ref properties 'revision)
25385 (assoc-ref properties 'commit)))
25386 (source
25387 (origin
25388 (method git-fetch)
25389 (uri (git-reference
25390 (url "https://github.com/Snaipe/python-rst-to-ansi")
25391 (commit (assoc-ref properties 'commit))))
25392 (file-name (git-file-name name version))
25393 (sha256
25394 (base32 "0q8afblqhkrnzxla81ialifcwkh9ga5xzxzi0lhg2gjwhbynbfsp"))))
25395 (build-system pyproject-build-system)
25396 (arguments
25397 (list
25398 #:tests? #f ; 2 tests fail with additional line characters
25399 #:phases
25400 #~(modify-phases %standard-phases
25401 (replace 'check
25402 (lambda* (#:key tests? #:allow-other-keys)
25403 (when tests?
25404 (invoke "cram" "test" "-v")))))))
25405 (native-inputs (list python-cram python-setuptools))
25406 (propagated-inputs (list python-docutils))
25407 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25408 (synopsis "Convert RST to ANSI-decorated console output")
25409 (description
25410 "Python module dedicated to rendering RST (reStructuredText) documents to
25411ansi-escaped strings suitable for display in a terminal.")
25412 (license license:expat)))
25413
25414(define-public python-ansi2html
25415 (package
25416 (name "python-ansi2html")
25417 (version "1.9.2")
25418 (source
25419 (origin
25420 (method url-fetch)
25421 (uri (pypi-uri "ansi2html" version))
25422 (sha256
25423 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25424 (build-system pyproject-build-system)
25425 (native-inputs
25426 (list python-mock
25427 python-pytest
25428 python-setuptools
25429 python-wheel))
25430 (home-page "https://github.com/ralphbean/ansi2html")
25431 (synopsis "Convert ANSI-decorated console output to HTML")
25432 (description
25433 "@command{ansi2html} is a Python library and command line utility for
25434converting text with ANSI color codes to HTML or LaTeX.")
25435 (license license:gpl3+)))
25436
25437(define-public python-easy-ansi
25438 (package
25439 (name "python-easy-ansi")
25440 (version "2.1")
25441 (source
25442 (origin
25443 (method git-fetch)
25444 (uri (git-reference
25445 (url "https://gitlab.com/joeysbytes/easy-ansi")
25446 (commit (string-append "v" version))))
25447 (file-name (git-file-name name version))
25448 (sha256
25449 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25450 (build-system pyproject-build-system)
25451 (arguments
25452 (list
25453 #:phases
25454 #~(modify-phases %standard-phases
25455 (add-after 'install 'remove-extra
25456 (lambda* (#:key inputs outputs #:allow-other-keys)
25457 (with-directory-excursion (site-packages inputs outputs)
25458 (delete-file-recursively "tests")
25459 (delete-file "setup.py")))))))
25460 (native-inputs (list python-pytest python-setuptools))
25461 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25462 (synopsis "Terminal framework API")
25463 (description
25464 "Easy ANSI is a terminal framework API to give you an easy way to use
25465colors, cursor control movements, and line/box drawing. It is not meant as a
25466replacement to more full-featured frameworks (such as curses or urwid), but as
25467a tool to quickly create nice-looking screens in your terminal window. You
25468can even create animations with the cursor controls.")
25469 (license license:expat)))
25470
25471(define-public python-easy-ansi-0.3
25472 (package
25473 (inherit python-easy-ansi)
25474 (name "python-easy-ansi")
25475 (version "0.3")
25476 (source
25477 (origin
25478 (method git-fetch)
25479 (uri (git-reference
25480 (url "https://gitlab.com/joeysbytes/easy-ansi")
25481 (commit (string-append "v" version))))
25482 (file-name (git-file-name name version))
25483 (sha256
25484 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25485 (arguments '())))
25486
25487(define-public python-pycosat
25488 (package
25489 (name "python-pycosat")
25490 (version "0.6.6")
25491 (source
25492 (origin
25493 (method git-fetch)
25494 (uri (git-reference
25495 (url "https://github.com/ContinuumIO/pycosat")
25496 (commit version)))
25497 (file-name (git-file-name name version))
25498 (sha256
25499 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25500 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25501 (build-system pyproject-build-system)
25502 (arguments (list #:test-backend #~'unittest))
25503 (native-inputs (list unzip python-setuptools))
25504 (home-page "https://github.com/ContinuumIO/pycosat")
25505 (synopsis "Bindings to picosat (a SAT solver)")
25506 (description
25507 "This package provides efficient Python bindings to @code{picosat} on the
25508C level. When importing pycosat, the @code{picosat} solver becomes part of
25509the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25510Problem} (SAT) solver.")
25511 (license license:expat)))
25512
25513(define-public python-pypeg2
25514 (package
25515 (name "python-pypeg2")
25516 (version "2.15.2")
25517 (source
25518 (origin
25519 (method url-fetch)
25520 (uri (pypi-uri "pyPEG2" version))
25521 (sha256
25522 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25523 (build-system pyproject-build-system)
25524 (native-inputs (list python-pytest python-setuptools))
25525 (propagated-inputs (list python-lxml))
25526 (home-page "https://fdik.org/pyPEG/")
25527 (synopsis "Parsing Expression Grammars in Python")
25528 (description
25529 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25530based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25531formal languages.")
25532 (license license:gpl2)))
25533
25534(define-public python-pyformlang
25535 (package
25536 (name "python-pyformlang")
25537 (version "1.0.10")
25538 (source
25539 (origin
25540 (method url-fetch)
25541 (uri (pypi-uri "pyformlang" version))
25542 (sha256
25543 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25544 (build-system pyproject-build-system)
25545 (native-inputs
25546 (list python-pytest
25547 python-setuptools
25548 python-wheel))
25549 (propagated-inputs
25550 (list python-networkx
25551 python-numpy
25552 python-pydot))
25553 (home-page "https://github.com/Aunsiels/pyformlang")
25554 (synopsis "Framework for interacting with formal grammars")
25555 (description
25556 "This package provides a framework for working with formal
25557language grammars. The library was originally developed for educational
25558purposes and therefore implements many textbook algorithms regarding the
25559manipulation and interaction with formal grammars.")
25560 (license license:expat)))
25561
25562(define-public python-incremental
25563 (package
25564 (name "python-incremental")
25565 (version "24.7.2")
25566 (source
25567 (origin
25568 (method url-fetch)
25569 (uri (pypi-uri "incremental" version))
25570 (sha256
25571 (base32
25572 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25573 (build-system pyproject-build-system)
25574 (arguments
25575 ;; Tests require twisted, which needs this package.
25576 (list #:tests? #false
25577 #:build-backend "setuptools.build_meta"))
25578 (native-inputs
25579 (list python-setuptools))
25580 (home-page "https://github.com/hawkowl/incremental")
25581 (synopsis "Library for versioning Python projects")
25582 (description "Incremental is a small library that versions your Python
25583 projects.")
25584 (license license:expat)))
25585
25586(define-public python-invoke
25587 (package
25588 (name "python-invoke")
25589 (version "2.2.1")
25590 (source
25591 (origin
25592 (method url-fetch)
25593 (uri (pypi-uri "invoke" version))
25594 (sha256
25595 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25596 ;; TODO: invoke/vendor contains:
25597 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25598 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25599 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25600 (build-system pyproject-build-system)
25601 (arguments
25602 (list
25603 ;; XXX: Requires many dependencies that are not yet in Guix.
25604 #:tests? #f
25605 #:phases
25606 #~(modify-phases %standard-phases
25607 (add-after 'unpack 'fix-bash-path
25608 (lambda _
25609 (let ((bash #$(this-package-input "bash-minimal")))
25610 (substitute* "invoke/config.py"
25611 (("shell = \"/bin/bash\"")
25612 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25613 (native-inputs
25614 (list python-setuptools
25615 python-wheel))
25616 (inputs
25617 (list bash-minimal))
25618 (home-page "https://www.pyinvoke.org/")
25619 (synopsis "Pythonic task execution")
25620 (description
25621 "Invoke is a Python task execution tool and library, drawing inspiration
25622from various sources to arrive at a powerful and clean feature set. It is
25623evolved from the Fabric project, but focuses on local and abstract concerns
25624instead of servers and network commands.")
25625 (license license:bsd-3)))
25626
25627(define-public python-automat
25628 (package
25629 (name "python-automat")
25630 (version "24.8.1")
25631 (source (origin
25632 (method url-fetch)
25633 (uri (pypi-uri "Automat" version))
25634 (sha256
25635 (base32
25636 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25637 (build-system pyproject-build-system)
25638 (arguments
25639 (list
25640 #:phases
25641 #~(modify-phases %standard-phases
25642 (replace 'check
25643 (lambda* (#:key tests? test-flags #:allow-other-keys)
25644 (with-directory-excursion #$output
25645 (apply invoke "pytest" "-vv" test-flags))))
25646 ;; Remove script, because it depends on python-twisted.
25647 (add-after 'unpack 'remove-entrypoint
25648 (lambda _
25649 (substitute* "pyproject.toml"
25650 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25651 (native-inputs
25652 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25653 (propagated-inputs
25654 (list python-graphviz python-typing-extensions))
25655 (home-page "https://github.com/glyph/Automat")
25656 (synopsis "Self-service finite-state machines")
25657 (description "Automat is a library for concise, idiomatic Python
25658 expression of finite-state automata (particularly deterministic finite-state
25659 transducers).")
25660 (license license:expat)))
25661
25662(define-public python-constantly
25663 (package
25664 (name "python-constantly")
25665 (version "23.10.4")
25666 (source
25667 (origin
25668 (method url-fetch)
25669 (uri (pypi-uri "constantly" version))
25670 (sha256
25671 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25672 (build-system pyproject-build-system)
25673 (arguments
25674 (list #:tests? #f)) ;cycles with python-twisted
25675 (native-inputs
25676 (list python-setuptools
25677 python-versioneer))
25678 (home-page "https://github.com/twisted/constantly")
25679 (synopsis "Symbolic constants in Python")
25680 (description "Constantly is a Python library that provides symbolic
25681 constant support. It includes collections and constants with text, numeric,
25682 and bit flag values.")
25683 (license license:expat)))
25684
25685(define-public python-attrs
25686 (package
25687 (name "python-attrs")
25688 (version "26.1.0")
25689 (source
25690 (origin
25691 (method git-fetch)
25692 (uri (git-reference
25693 (url "https://github.com/python-attrs/attrs/")
25694 (commit version)))
25695 (file-name (git-file-name name version))
25696 (sha256
25697 (base32 "17gagrqbg4fg7prpsqx746frfzcml13lnzqjjsah0jqc5qxd8yaf"))))
25698 (build-system pyproject-build-system)
25699 (native-inputs
25700 (list python-hatch-fancy-pypi-readme
25701 python-hatch-vcs
25702 python-hatchling
25703 python-hypothesis
25704 python-pytest))
25705 (home-page "https://github.com/python-attrs/attrs/")
25706 (synopsis "Attributes without boilerplate")
25707 (description "@code{attrs} is a Python package with class decorators that
25708 ease the chores of implementing the most common attribute-related object
25709 protocols.")
25710 (license license:expat)))
25711
25712(define-public python-attrs-bootstrap
25713 (package
25714 (inherit python-attrs)
25715 (name "python-attrs-bootstrap")
25716 (native-inputs (list python-hatchling
25717 python-hatch-fancy-pypi-readme
25718 python-hatch-vcs))
25719 (arguments `(#:tests? #f))))
25720
25721(define-public python-astroid
25722 (package
25723 (name "python-astroid")
25724 (version "4.0.4")
25725 (source
25726 (origin
25727 (method git-fetch)
25728 (uri (git-reference
25729 (url "https://github.com/PyCQA/astroid")
25730 (commit (string-append "v" version))))
25731 (file-name (git-file-name name version))
25732 (sha256
25733 (base32 "0dfvih7drm22dvppjangaxlmrq21wazfyglhm3n32rgh6g6m6qms"))))
25734 (build-system pyproject-build-system)
25735 (native-inputs
25736 (list python-mypy-minimal
25737 python-pytest
25738 python-setuptools))
25739 (home-page "https://github.com/PyCQA/astroid")
25740 (synopsis "Python source code base representation")
25741 (description "@code{python-astroid} provides a common base representation
25742of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25743It provides a compatible representation which comes from the _ast module. It
25744rebuilds the tree generated by the builtin _ast module by recursively walking
25745down the AST and building an extended ast. The new node classes have
25746additional methods and attributes for different usages. They include some
25747support for static inference and local name scopes. Furthermore, astroid
25748builds partial trees by inspecting living objects.")
25749 (license license:lgpl2.1+)))
25750
25751(define-public python-isbnlib
25752 (package
25753 (name "python-isbnlib")
25754 (version "3.10.14")
25755 (source
25756 (origin
25757 (method git-fetch)
25758 (uri (git-reference
25759 (url "https://github.com/xlcnd/isbnlib")
25760 (commit (string-append "v" version))))
25761 (file-name (git-file-name name version))
25762 (sha256
25763 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25764 (build-system pyproject-build-system)
25765 (arguments
25766 (list
25767 #:test-flags #~(list "-m" "not network")))
25768 (native-inputs (list python-pytest python-setuptools))
25769 (home-page "https://github.com/xlcnd/isbnlib")
25770 (synopsis "Python library to work with ISBN strings")
25771 (description
25772 "@code{python-isbnlib} is a (pure) python library that provides several
25773useful methods and functions to validate, clean, transform, hyphenate and get
25774metadata for ISBN strings. Its origin was as the core of isbntools. This
25775short version, is suitable to be include as a dependency in other projects.")
25776 (license license:lgpl3+)))
25777
25778(define-public python-isoduration
25779 ;; XXX: The project might be abandoned, consider to remove when nothing
25780 ;; depends on it.
25781 (package
25782 (name "python-isoduration")
25783 (version "20.11.0")
25784 (source
25785 (origin
25786 (method git-fetch)
25787 (uri (git-reference
25788 (url "https://github.com/bolsote/isoduration")
25789 (commit version)))
25790 (file-name (git-file-name name version))
25791 (sha256
25792 (base32 "1naml13qa1inr6k0j25jgw49r3wnkvwq5xc0v4navz6mxlgsrfp8"))))
25793 (build-system pyproject-build-system)
25794 (arguments
25795 (list
25796 ;; E ModuleNotFoundError: No module named 'isodate'
25797 #:test-flags #~(list "--ignore=tests/test_benchmark.py")))
25798 (native-inputs
25799 (list python-pytest
25800 python-setuptools))
25801 (propagated-inputs
25802 (list python-arrow))
25803 (home-page "https://github.com/bolsote/isoduration")
25804 (synopsis "Operations with ISO 8601 durations")
25805 (description "ISO 8601 is most commonly known as a way to exchange
25806datetimes in textual format. A lesser known aspect of the standard is the
25807representation of durations. The state of the art of ISO 8601 duration
25808handling in Python is more or less limited to what's offered by isodate. This
25809package attempts to address the shortcomings of @code{isodate}.")
25810 (license license:isc)))
25811
25812(define-public python-isort
25813 (package
25814 (name "python-isort")
25815 (version "9.0.1")
25816 (source
25817 (origin
25818 (method git-fetch) ;no tests in PyPI archive
25819 (uri (git-reference
25820 (url "https://github.com/PyCQA/isort")
25821 (commit version)))
25822 (file-name (git-file-name name version))
25823 (modules '((guix build utils)))
25824 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25825 (sha256
25826 (base32 "0xrhrk245v7wqrh6ql1ysnfb1v6sh0mrzbvyaxq36hddvxdx7f45"))))
25827 (build-system pyproject-build-system)
25828 (arguments
25829 (list
25830 #:test-flags
25831 ;; Ignore benchmark and integration to reduce closure size.
25832 #~(list "--ignore=tests/benchmark/"
25833 "--ignore=tests/integration/"
25834 "--ignore=tests/unit/profiles/test_black.py"
25835 "-k" (string-join
25836 (list "not test_gitignore"
25837 "test_isort_supports_shared_profiles_issue_970"
25838 "test_requirements_dir"
25839 "test_requirements_finder"
25840 "test_sort_configurable_sort_issue_1732"
25841 "test_sort_imports_error_handling")
25842 " and not "))))
25843 ;; TODO: Package example plugins separately, available in PyPI:
25844 ;; - example_isort_formatting_plugin
25845 ;; - example_isort_sorting_plugin
25846 ;; - example_shared_isort_profile
25847 (native-inputs
25848 (list python-black
25849 python-colorama
25850 python-hatch-vcs
25851 python-hatchling
25852 python-hypothesis
25853 python-pylama
25854 python-pytest))
25855 (propagated-inputs
25856 ;; XXX: python-mypy-extensions can be dropped when
25857 ;; https://github.com/PyCQA/isort/issues/2629 is fixed.
25858 (list python-mypy-extensions))
25859 (home-page "https://github.com/PyCQA/isort")
25860 (synopsis "Python utility/library to sort python imports")
25861 (description
25862 "@code{python-isort} is a python utility/library to sort imports
25863alphabetically, and automatically separated into sections. It provides a
25864command line utility, a python library and plugins for various editors.")
25865 (license license:expat)))
25866
25867(define-public python-configparser
25868 (package
25869 (name "python-configparser")
25870 (version "7.2.0")
25871 (source
25872 (origin
25873 (method url-fetch)
25874 (uri (pypi-uri "configparser" version))
25875 (sha256
25876 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25877 (build-system pyproject-build-system)
25878 (native-inputs
25879 (list python-pytest
25880 python-setuptools
25881 python-setuptools-scm
25882 python-wheel))
25883 (home-page "https://github.com/jaraco/configparser/")
25884 (synopsis "Backport of configparser from python 3.5")
25885 (description "@code{python-configparser} is a backport of
25886 @code{configparser} from Python 3.5 so that it can be used directly
25887 in other versions.")
25888 (license license:expat)))
25889
25890(define-public python-mando
25891 (package
25892 (name "python-mando")
25893 (version "0.8.2")
25894 (source
25895 (origin
25896 (method url-fetch)
25897 (uri (pypi-uri "mando" version))
25898 (sha256
25899 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25900 (build-system pyproject-build-system)
25901 (native-inputs
25902 (list python-pytest python-setuptools))
25903 (home-page "https://mando.readthedocs.org/")
25904 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25905 (description
25906 "This package is a wrapper around argparse, allowing you to write complete CLI
25907applications in seconds while maintaining all the flexibility.")
25908 (license license:expat)))
25909
25910(define-public python-mwclient
25911 (package
25912 (name "python-mwclient")
25913 (version "0.11.0")
25914 (source
25915 (origin
25916 (method git-fetch)
25917 (uri (git-reference
25918 (url "https://github.com/mwclient/mwclient")
25919 (commit (string-append "v" version))))
25920 (file-name (git-file-name name version))
25921 (sha256
25922 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25923 (build-system pyproject-build-system)
25924 (propagated-inputs
25925 (list python-requests-oauthlib))
25926 (native-inputs
25927 (list python-mock
25928 python-pytest
25929 python-responses
25930 python-setuptools))
25931 (home-page "https://github.com/btongminh/mwclient")
25932 (synopsis "MediaWiki API client")
25933 (description "This package provides a MediaWiki API client.")
25934 (license license:expat)))
25935
25936(define-public python-kneed
25937 (package
25938 (name "python-kneed")
25939 (version "0.8.5")
25940 (source
25941 (origin
25942 (method git-fetch)
25943 (uri (git-reference
25944 (url "https://github.com/arvkevi/kneed")
25945 (commit (string-append "v" version))))
25946 (file-name (git-file-name name version))
25947 (sha256
25948 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25949 (build-system pyproject-build-system)
25950 (arguments
25951 (list
25952 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25953 (native-inputs (list python-hatchling python-pytest))
25954 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25955 (home-page "https://github.com/arvkevi/kneed")
25956 (synopsis "Knee-point detection in Python")
25957 (description
25958 "This package implements the kneedle algorithm. Given a set of x and y
25959values, kneed will return the knee point of the function. The knee point is
25960the point of maximum curvature.")
25961 (license license:bsd-3)))
25962
25963(define-public python-diff-cover
25964 (package
25965 (name "python-diff-cover")
25966 (version "9.7.1")
25967 (source
25968 (origin
25969 (method url-fetch)
25970 (uri (pypi-uri "diff_cover" version))
25971 (sha256
25972 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25973 (build-system pyproject-build-system)
25974 (arguments
25975 (list
25976 #:test-flags
25977 ;; Dropp check of flake8 in tests.
25978 #~(list "-k" "not test_file_does_not_exist")))
25979 (native-inputs
25980 (list python-pycodestyle
25981 python-poetry-core
25982 python-pyflakes
25983 python-pylint
25984 python-pytest
25985 python-pytest-datadir
25986 python-pytest-mock))
25987 (propagated-inputs
25988 (list python-chardet
25989 python-jinja2
25990 python-pluggy
25991 python-pygments
25992 python-setuptools ; For pkg_resources.
25993 python-tomli))
25994 (home-page "https://github.com/Bachmann1234/diff_cover")
25995 (synopsis "Run coverage and linting reports on diffs")
25996 (description
25997 "Automatically find diff lines that need test coverage. It also finds
25998diff lines that have violations (according to tools such as pycodestyle,
25999pyflakes, flake8, or pylint). This is used as a code quality metric during
26000code reviews.")
26001 (license license:asl2.0)))
26002
26003(define-public python-diff-match-patch
26004 (package
26005 (name "python-diff-match-patch")
26006 (version "20241021")
26007 (source
26008 (origin
26009 (method url-fetch)
26010 (uri (pypi-uri "diff_match_patch" version))
26011 (sha256
26012 (base32
26013 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
26014 (build-system pyproject-build-system)
26015 (native-inputs (list python-flit-core python-pytest))
26016 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
26017 (synopsis "Synchronize plain text")
26018 (description "Diff Match and Patch libraries offer robust algorithms to
26019 perform the operations required for synchronizing plain text.")
26020 (license license:asl2.0)))
26021
26022(define-public python-icdiff
26023 (package
26024 (name "python-icdiff")
26025 (version "2.0.7")
26026 (source (origin
26027 (method git-fetch)
26028 (uri (git-reference
26029 (url "https://github.com/jeffkaufman/icdiff")
26030 (commit (string-append "release-" version))))
26031 (file-name (git-file-name name version))
26032 (sha256
26033 (base32
26034 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
26035 (build-system pyproject-build-system)
26036 (arguments
26037 (list #:tests? #f)) ; there are no test scripts
26038 (native-inputs (list python-setuptools python-wheel))
26039 (home-page "https://www.jefftk.com/icdiff")
26040 (synopsis "Improved colored diff")
26041 (description "This package provides colored diff functions that highlight
26042parts of the lines that were modified.")
26043 (license license:psfl)))
26044
26045(define-public python-dirsync
26046 (package
26047 (name "python-dirsync")
26048 (version "2.2.6")
26049 (source
26050 (origin
26051 (method url-fetch)
26052 (uri (pypi-uri "dirsync" version))
26053 (sha256
26054 (base32
26055 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
26056 (build-system pyproject-build-system)
26057 (arguments
26058 ;; No tests in PyPI release and GitHub repository does not have the
26059 ;; latest release tag.
26060 (list #:tests? #f))
26061 (native-inputs (list python-setuptools python-wheel))
26062 (home-page "https://github.com/tkhyn/dirsync")
26063 (synopsis "Advanced directory tree synchronisation tool")
26064 (description
26065 "Dirsync is an advanced directory tree synchronisation tool.")
26066 (license license:expat)))
26067
26068(define-public python-levenshtein
26069 (package
26070 (name "python-levenshtein")
26071 ;; 0.27.3 (2025-11-01), the latest changes provide compatibility with
26072 ;; Cython 3.2.x, see: <https://github.com/rapidfuzz/Levenshtein/pull/84>.
26073 (properties '((commit . "7c905d9f4e788a95f5f1696517e6ff06d639943f")
26074 (revision . "0")))
26075 (version (git-version "0.27.3"
26076 (assoc-ref properties 'revision)
26077 (assoc-ref properties 'commit)))
26078 (source
26079 (origin
26080 (method git-fetch)
26081 (uri (git-reference
26082 (url "https://github.com/rapidfuzz/Levenshtein")
26083 (commit (assoc-ref properties 'commit))))
26084 (file-name (git-file-name name version))
26085 (sha256
26086 (base32 "14jdpxyc28bqjv3rmj4a5nrg0p6v6hazqilh1hdwjrd71hlxa6s3"))))
26087 (build-system pyproject-build-system)
26088 (propagated-inputs (list python-rapidfuzz))
26089 (native-inputs
26090 (list python-cython
26091 python-pytest
26092 python-scikit-build-core
26093 rapidfuzz-cpp))
26094 (home-page "https://github.com/rapidfuzz/Levenshtein")
26095 (synopsis "Fast computation of Levenshtein distance and string similarity")
26096 (description
26097 "The Levenshtein Python C extension module contains functions for fast computation of
26098@enumerate
26099@item Levenshtein (edit) distance, and edit operations
26100@item string similarity
26101@item approximate median strings, and generally string averaging
26102@item string sequence and set similarity
26103@end enumerate
26104It supports both normal and Unicode strings.")
26105 (license license:gpl2+)))
26106
26107(define-public python-factory-boy
26108 (package
26109 (name "python-factory-boy")
26110 (version "3.3.3")
26111 (source
26112 (origin
26113 (method url-fetch)
26114 (uri (pypi-uri "factory_boy" version))
26115 (sha256
26116 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
26117 (build-system pyproject-build-system)
26118 (arguments
26119 ;; Tests are not included in the tarball.
26120 `(#:tests? #f))
26121 (native-inputs (list python-setuptools))
26122 (propagated-inputs (list python-faker))
26123 (home-page "https://github.com/FactoryBoy/factory_boy")
26124 (synopsis "Versatile test fixtures replacement")
26125 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
26126factory_girl. As a fixtures replacement tool, it aims to replace static, hard
26127to maintain fixtures with easy-to-use factories for complex object. Instead
26128of building an exhaustive test setup with every possible combination of corner
26129cases, factory_boy allows you to use objects customized for the current test,
26130while only declaring the test-specific fields.")
26131 (license license:expat)))
26132
26133(define-public python-gtts
26134 (package
26135 (name "python-gtts")
26136 (version "2.5.4")
26137 (source
26138 (origin
26139 (method git-fetch)
26140 (uri (git-reference
26141 (url "https://github.com/pndurette/gTTS")
26142 (commit (string-append "v" version))))
26143 (file-name (git-file-name name version))
26144 (sha256
26145 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
26146 (build-system pyproject-build-system)
26147 (arguments
26148 ;; Disable tests that require internet.
26149 (list #:test-flags '(list "-k" "not net")))
26150 (native-inputs
26151 (list python-pytest python-setuptools python-testfixtures))
26152 (propagated-inputs
26153 (list python-click-8.1 python-requests))
26154 (home-page "https://github.com/pndurette/gTTS")
26155 (synopsis "Google Translate text-to-speech interface")
26156 (description
26157 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
26158interface with the Google Translate text-to-speech API. It lets you write
26159spoken MP3 data to a file, a file-like object (bytestring) for further audio
26160manipulation, or @code{stdout}.")
26161 (license license:expat)))
26162
26163(define-public python-packaging-legacy
26164 (package
26165 (name "python-packaging-legacy")
26166 (version "23.0.post0")
26167 (source
26168 (origin
26169 (method url-fetch)
26170 (uri (pypi-uri "packaging_legacy" version))
26171 (sha256
26172 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
26173 (build-system pyproject-build-system)
26174 (propagated-inputs (list python-packaging))
26175 (native-inputs
26176 (list python-pretend
26177 python-pytest
26178 python-setuptools
26179 python-wheel))
26180 (home-page "https://pypi.org/project/packaging-legacy/")
26181 (synopsis "Core utilities for legacy Python packages")
26182 (description "This library provides support for legacy Python Packaging
26183functionality removed from @code{packaging}.")
26184 (license license:asl2.0)))
26185
26186(define-public python-relatorio
26187 (package
26188 (name "python-relatorio")
26189 (version "0.11.1")
26190 (source
26191 (origin
26192 (method url-fetch)
26193 (uri (pypi-uri "relatorio" version))
26194 (sha256
26195 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
26196 (build-system pyproject-build-system)
26197 (native-inputs
26198 (list python-pytest
26199 python-setuptools))
26200 (propagated-inputs
26201 (list python-genshi
26202 python-lxml
26203 python-magic))
26204 (home-page "https://relatorio.tryton.org/")
26205 (synopsis "Templating library able to output ODT and PDF files")
26206 (description
26207 "Relatorio is a templating library which provides a way to easily output
26208ODT, ODS, PNG, SVG and several other kinds of files. Support for more
26209filetypes can be easily added by creating plugins for them.")
26210 (license license:gpl3+)))
26211
26212(define-public python-radon
26213 (package
26214 (name "python-radon")
26215 (version "6.0.1")
26216 (source
26217 (origin
26218 (method git-fetch)
26219 (uri (git-reference
26220 (url "https://github.com/rubik/radon")
26221 (commit (string-append "v" version))))
26222 (file-name (git-file-name name version))
26223 (sha256
26224 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
26225 (build-system pyproject-build-system)
26226 (arguments
26227 (list
26228 #:phases
26229 #~(modify-phases %standard-phases
26230 (add-after 'unpack 'relax-requirements
26231 (lambda _
26232 (substitute* (list "pyproject.toml" "requirements.txt")
26233 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
26234 mando-lower-bound)))))))
26235 (propagated-inputs (list python-colorama python-mando))
26236 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
26237 python-setuptools))
26238 (home-page "https://radon.readthedocs.org/")
26239 (synopsis "Code Metrics in Python")
26240 (description
26241 "Radon is a Python tool which computes various code metrics. Supported
26242metrics are:
26243@itemize @bullet
26244@item raw metrics: SLOC, comment lines, blank lines, &c.
26245@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
26246@item Halstead metrics (all of them)
26247@item the Maintainability Index (a Visual Studio metric)
26248@end itemize")
26249 (license license:expat)))
26250
26251(define-public python-rgbxy
26252 (package
26253 (name "python-rgbxy")
26254 (version "0.5")
26255 (source
26256 (origin
26257 (method url-fetch)
26258 (uri (pypi-uri "rgbxy" version))
26259 (sha256
26260 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
26261 (build-system pyproject-build-system)
26262 (arguments
26263 (list #:tests? #f)) ;no tests in PyPI or Git
26264 (native-inputs
26265 (list python-setuptools))
26266 (home-page "https://github.com/benknight/hue-python-rgb-converter")
26267 (synopsis "RGB conversion tool in Python")
26268 (description
26269 "This package implements functionality of RGB/CIE1931 'xy' gammuts
26270conversion: Gamut A, B, and C.")
26271 (license license:expat)))
26272
26273(define-public python-jsonpointer
26274 (package
26275 (name "python-jsonpointer")
26276 (version "3.1.1")
26277 (source
26278 (origin
26279 (method git-fetch)
26280 (uri (git-reference
26281 (url "https://github.com/stefankoegl/python-json-pointer")
26282 (commit (string-append "v" version))))
26283 (file-name (git-file-name name version))
26284 (sha256
26285 (base32 "1k7szx4k2h3zidw01i96fg9x5gnir5fdvlnpgb48xhg0si12ly1y"))))
26286 (build-system pyproject-build-system)
26287 (arguments (list #:test-backend #~'unittest))
26288 (native-inputs
26289 (list python-setuptools))
26290 (home-page "https://github.com/stefankoegl/python-json-pointer")
26291 (synopsis "Identify specific nodes in a JSON document")
26292 (description
26293 "@code{jsonpointer} allows you to access specific nodes by path in a JSON
26294document (see RFC 6901).")
26295 (license license:bsd-3)))
26296
26297(define-public python-jsonpatch
26298 (package
26299 (name "python-jsonpatch")
26300 (version "1.33")
26301 (source
26302 (origin
26303 (method git-fetch)
26304 ;; pypi version lacks tests.js
26305 (uri (git-reference
26306 (url "https://github.com/stefankoegl/python-json-patch")
26307 (commit (string-append "v" version))))
26308 (file-name (git-file-name name version))
26309 (sha256
26310 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
26311 (build-system pyproject-build-system)
26312 (arguments
26313 (list #:test-backend #~'custom
26314 #:test-flags #~(list "tests.py")))
26315 (native-inputs
26316 (list python-setuptools))
26317 (propagated-inputs
26318 (list python-jsonpointer))
26319 (home-page "https://github.com/stefankoegl/python-json-patch")
26320 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
26321 (description "@code{jsonpatch} is a library and program that allows
26322 applying JSON Patches according to RFC 6902.")
26323 (license license:bsd-3)))
26324
26325(define-public python-rfc3987-syntax
26326 (package
26327 (name "python-rfc3987-syntax")
26328 (version "1.1.0")
26329 (source
26330 (origin
26331 (method git-fetch)
26332 (uri (git-reference
26333 (url "https://github.com/willynilly/rfc3987-syntax")
26334 (commit (string-append "v" version))))
26335 (file-name (git-file-name name version))
26336 (sha256
26337 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
26338 (build-system pyproject-build-system)
26339 (native-inputs
26340 (list python-hatchling
26341 python-pytest))
26342 (propagated-inputs
26343 (list python-lark))
26344 (home-page "https://github.com/willynilly/rfc3987-syntax")
26345 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
26346 (description
26347 "This package validates Internationalized Resource Identifiers (IRIs) and
26348their components against the ABNF grammar from RFC 3987. Built on the Lark
26349parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26350package, and provides the @code{format-nongpl} extra required by recent
26351@code{jsonschema} releases.")
26352 (license license:expat)))
26353
26354(define-public python-rfc3986
26355 (package
26356 (name "python-rfc3986")
26357 (version "2.0.0")
26358 (source
26359 (origin
26360 (method url-fetch)
26361 (uri (pypi-uri "rfc3986" version))
26362 (sha256
26363 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26364 (build-system pyproject-build-system)
26365 (native-inputs
26366 (list python-pytest python-setuptools))
26367 (home-page "https://rfc3986.readthedocs.io/")
26368 (synopsis "Parse and validate URI references")
26369 (description
26370 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26371validation and authority parsing. This module also supports RFC@tie{}6874
26372which adds support for zone identifiers to IPv6 addresses.")
26373 (license license:asl2.0)))
26374
26375(define-public python-rfc3986-validator
26376 (package
26377 (name "python-rfc3986-validator")
26378 (version "0.1.1")
26379 (source
26380 (origin
26381 (method url-fetch)
26382 (uri (pypi-uri "rfc3986_validator" version))
26383 (sha256
26384 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26385 (build-system pyproject-build-system)
26386 (native-inputs
26387 (list python-pytest
26388 python-rfc3987
26389 python-setuptools))
26390 (home-page "https://github.com/naimetti/rfc3986-validator")
26391 (synopsis "Pure python rfc3986 validator")
26392 (description "This package implements a URI validator according to RFC3986
26393in pure Python.")
26394 (license license:expat)))
26395
26396(define-public python-rfc3987
26397 (package
26398 (name "python-rfc3987")
26399 (version "1.3.8")
26400 (source
26401 (origin
26402 (method url-fetch)
26403 (uri (pypi-uri "rfc3987" version))
26404 (sha256
26405 (base32
26406 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26407 (build-system pyproject-build-system)
26408 (arguments
26409 (list #:test-backend #~'custom
26410 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26411 (native-inputs
26412 (list python-setuptools))
26413 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26414 (home-page "https://pypi.org/project/rfc3987/")
26415 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26416 (description "@code{rfc3987} provides routines for parsing and
26417 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26418 (license license:gpl3+)))
26419
26420;; The latest commit contains fixes for building with both python3 and python2.
26421(define-public python-rfc6555
26422 (package
26423 (name "python-rfc6555")
26424 (version "0.1.0")
26425 (source
26426 (origin
26427 (method git-fetch)
26428 (uri (git-reference
26429 (url "https://github.com/sethmlarson/rfc6555")
26430 (commit (string-append "v" version))))
26431 (file-name (git-file-name name version))
26432 (sha256
26433 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26434 (build-system pyproject-build-system)
26435 (arguments
26436 (list
26437 ;; Other tests require network access.
26438 #:test-flags #~(list "tests/test_ipv6.py")))
26439 (native-inputs (list python-pytest python-setuptools))
26440 (home-page "https://pypi.org/project/rfc6555/")
26441 (synopsis "Python implementation of RFC 6555")
26442 (description
26443 "Python implementation of the Happy Eyeballs Algorithm described in RFC
264446555. Provided with a single file and dead-simple API to allow easy vendoring
26445and integration into other projects.")
26446 (license license:asl2.0)))
26447
26448(define-public python-sacn
26449 (package
26450 (name "python-sacn")
26451 (version "1.11.0")
26452 (source
26453 (origin
26454 (method url-fetch)
26455 (uri (pypi-uri "sacn" version))
26456 (sha256
26457 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26458 (build-system pyproject-build-system)
26459 (native-inputs (list python-pytest python-setuptools python-wheel))
26460 (home-page "https://github.com/Hundemeier/sacn")
26461 (synopsis "Python library for sending and receiving sACN data")
26462 (description
26463 "This package provides a Python library for sending and receiving
26464 sACN (Streaming Architecture for Control Networks) data, a standard
26465 protocol used for controlling lighting and other devices over
26466 a network.")
26467 (license license:expat)))
26468
26469(define-public python-bagit
26470 (package
26471 (name "python-bagit")
26472 (version "1.9.0")
26473 (source
26474 (origin
26475 (method git-fetch) ; no tests in PyPI
26476 (uri (git-reference
26477 (url "https://github.com/LibraryOfCongress/bagit-python")
26478 (commit (string-append "v" version))))
26479 (file-name (git-file-name name version))
26480 (sha256
26481 (base32
26482 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26483 (build-system pyproject-build-system)
26484 (arguments
26485 (list #:test-flags #~(list "test.py")))
26486 (native-inputs
26487 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26488 (home-page "https://libraryofcongress.github.io/bagit-python/")
26489 (synopsis "Create and validate BagIt packages")
26490 (description "Bagit is a Python library and command line utility for working
26491 with BagIt style packages. BagIt is a minimalist packaging format for digital
26492 preservation.")
26493 (license license:cc0)))
26494
26495(define-public python-prov
26496 (package
26497 (name "python-prov")
26498 (version "2.1.1")
26499 (source
26500 (origin
26501 (method git-fetch)
26502 (uri (git-reference
26503 (url "https://github.com/trungdong/prov")
26504 (commit version)))
26505 (file-name (git-file-name name version))
26506 (sha256
26507 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26508 (build-system pyproject-build-system)
26509 (arguments
26510 (list
26511 #:test-backend #~'unittest
26512 #:test-flags #~(list "discover" "-s" "src")
26513 #:phases
26514 #~(modify-phases %standard-phases
26515 (add-before 'check 'disable-tests
26516 (lambda _
26517 ;; prov.model.ProvException: The provided identifier
26518 ;; "http://www.example.org/bundle" is not valid
26519 (substitute* "src/prov/tests/qnames.py"
26520 (("test_namespace_inheritance")
26521 "disabled_test_namespace_inheritance")
26522 (("test_default_namespace_inheritance")
26523 "disabled_test_default_namespace_inheritance")))))))
26524 (native-inputs
26525 (list python-setuptools))
26526 (propagated-inputs
26527 (list graphviz
26528 python-dateutil
26529 python-networkx
26530 python-pydot
26531 ;; optional dependencies, also needed for tests
26532 python-lxml
26533 python-rdflib))
26534 (home-page "https://github.com/trungdong/prov")
26535 (synopsis
26536 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26537 (description
26538 "This package provides a library for W3C Provenance Data Model supporting
26539 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26540 (license license:expat)))
26541
26542(define-public python-arcp
26543 (package
26544 (name "python-arcp")
26545 (version "0.2.1")
26546 (source
26547 (origin
26548 (method git-fetch)
26549 (uri (git-reference
26550 (url "https://github.com/stain/arcp-py")
26551 (commit version)))
26552 (file-name (git-file-name name version))
26553 (sha256
26554 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26555 (build-system pyproject-build-system)
26556 (arguments
26557 (list
26558 #:phases
26559 #~(modify-phases %standard-phases
26560 (add-after 'unpack 'patch-tests
26561 (lambda _
26562 (substitute* "tests/test_parse.py"
26563 (("ni:///")
26564 "ni:")))))))
26565 (native-inputs (list python-pytest python-setuptools))
26566 (home-page "https://arcp.readthedocs.io/")
26567 (synopsis "Archive and Package URI parser and generator")
26568 (description
26569 "@acronym{arcp, Archive and Package} provides functions for creating
26570@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26571files packaged in an archive or package, like a ZIP file. arcp URIs can be
26572used to consume or reference hypermedia resources bundled inside a file
26573archive or an application package, as well as to resolve URIs for archive
26574resources within a programmatic framework. This URI scheme provides
26575mechanisms to generate a unique base URI to represent the root of the archive,
26576so that relative URI references in a bundled resource can be resolved within
26577the archive without having to extract the archive content on the local file
26578system. An arcp URI can be used for purposes of isolation (e.g. when
26579consuming multiple archives), security constraints (avoiding \"climb out\"
26580from the archive), or for externally identiyfing sub-resources referenced by
26581hypermedia formats.")
26582 (license license:asl2.0)))
26583
26584;; XXX: Project has no updates since 2019, consider to remove when nothing
26585;; depends on it in the next refresh cycle.
26586;; See: <https://github.com/pipermerriam/flex/issues/237>.
26587(define-public python-flex
26588 (package
26589 (name "python-flex")
26590 (version "6.14.1")
26591 (source
26592 (origin
26593 (method url-fetch)
26594 (uri (pypi-uri "flex" version))
26595 (sha256
26596 (base32
26597 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26598 (build-system pyproject-build-system)
26599 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26600 (native-inputs
26601 (list python-setuptools))
26602 (propagated-inputs
26603 (list python-click
26604 python-jsonpointer
26605 python-pyyaml
26606 python-requests
26607 python-rfc3987
26608 python-six
26609 python-strict-rfc3339
26610 python-validate-email))
26611 (home-page "https://github.com/pipermerriam/flex")
26612 (synopsis "Validates Swagger schemata")
26613 (description "@code{flex} can be used to validate Swagger schemata.")
26614 (license license:bsd-3)))
26615
26616(define-public python-marshmallow
26617 (package
26618 (name "python-marshmallow")
26619 (version "4.0.0")
26620 (source
26621 (origin
26622 (method url-fetch)
26623 (uri (pypi-uri "marshmallow" version))
26624 (sha256
26625 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26626 (build-system pyproject-build-system)
26627 (arguments
26628 (list
26629 ;; tests: x86_64 1117 passed
26630 ;; i686-linux 1116 passed, 1 deselected
26631 #:test-flags
26632 #~(list #$@(if (target-64bit?)
26633 '()
26634 ;; OverflowError
26635 '((string-append "--deselect=tests/test_utils.py"
26636 "::test_from_timestamp_with_overflow_value"))))))
26637 (native-inputs
26638 (list python-flit-core
26639 python-pytest
26640 python-simplejson
26641 tzdata-for-tests))
26642 (home-page "https://github.com/marshmallow-code/marshmallow")
26643 (synopsis "Convert complex datatypes to and from native Python datatypes")
26644 (description
26645 "@code{marshmallow} provides a library for converting complex datatypes
26646to and from native Python datatypes.")
26647 (license license:expat)))
26648
26649(define-public python-marshmallow-3
26650 (package
26651 (inherit python-marshmallow)
26652 (version "3.22.0")
26653 (source
26654 (origin
26655 (method url-fetch)
26656 (uri (pypi-uri "marshmallow" version))
26657 (sha256
26658 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26659 (arguments '())
26660 (native-inputs
26661 (list python-pytest
26662 python-pytz
26663 python-simplejson
26664 python-flit-core))
26665 (propagated-inputs
26666 (list python-packaging))))
26667
26668
26669(define-public python-apispec
26670 (package
26671 (name "python-apispec")
26672 (version "6.8.2")
26673 (source
26674 (origin
26675 (method url-fetch)
26676 (uri (pypi-uri "apispec" version))
26677 (sha256
26678 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26679 (build-system pyproject-build-system)
26680 (native-inputs
26681 (list python-flit-core
26682 python-openapi-spec-validator
26683 python-pytest))
26684 (propagated-inputs
26685 (list python-marshmallow
26686 python-packaging
26687 python-pyyaml))
26688 (home-page "https://github.com/marshmallow-code/apispec")
26689 (synopsis "Swagger/OpenAPI specification generator")
26690 (description
26691 "@code{python-apispec} is a pluggable API specification generator. It
26692currently supports the OpenAPI specification, formerly known as Swagger.")
26693 (license license:expat)))
26694
26695(define-public python-apispec-webframeworks
26696 (package
26697 (name "python-apispec-webframeworks")
26698 (version "1.2.0")
26699 (source
26700 (origin
26701 (method url-fetch)
26702 (uri (pypi-uri "apispec_webframeworks" version))
26703 (sha256
26704 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26705 (build-system pyproject-build-system)
26706 (native-inputs
26707 (list python-aiohttp
26708 python-flit-core
26709 python-bottle
26710 python-flask
26711 python-pytest
26712 python-pyyaml
26713 python-tornado
26714 python-wheel))
26715 (propagated-inputs
26716 (list python-apispec))
26717 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26718 (synopsis "Web framework plugins for apispec")
26719 (description "This package provides plugins for using @code{apispec} with
26720web frameworks.")
26721 (license license:expat)))
26722
26723(define-public python-flasgger
26724 (package
26725 (name "python-flasgger")
26726 (version "0.9.7.1")
26727 (source
26728 (origin
26729 (method git-fetch)
26730 (uri (git-reference
26731 (url "https://github.com/rochacbruno/flasgger")
26732 (commit (string-append "v" version))))
26733 (file-name (git-file-name name version))
26734 (sha256
26735 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26736 (patches
26737 (list
26738 (origin
26739 (method url-fetch)
26740 (uri
26741 (string-append "https://github.com/flasgger/flasgger/commit/"
26742 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26743 (sha256
26744 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26745 (build-system pyproject-build-system)
26746 (arguments
26747 (list
26748 #:test-flags
26749 #~(list "--ignore=tests/test_examples.py"
26750 "tests")))
26751 (propagated-inputs
26752 (list python-flask
26753 python-pyyaml
26754 python-jsonschema
26755 python-mistune
26756 python-six))
26757 (native-inputs
26758 (list python-pytest
26759 python-setuptools))
26760 (home-page "https://github.com/rochacbruno/flasgger/")
26761 (synopsis "Extract Swagger specs from your Flask project")
26762 (description "@code{python-flasgger} allows extracting Swagger specs
26763 from your Flask project. It is a fork of Flask-Swagger.")
26764 (license license:expat)))
26765
26766(define-public python-apache-libcloud
26767 (package
26768 (name "python-apache-libcloud")
26769 (version "3.8.0")
26770 (source
26771 (origin
26772 (method url-fetch)
26773 (uri (pypi-uri "apache-libcloud" version))
26774 (sha256
26775 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26776 (build-system pyproject-build-system)
26777 (arguments
26778 (list
26779 #:tests? #f ; XXX: all tests fail requiring additional credentials
26780 #:phases
26781 #~(modify-phases %standard-phases
26782 (add-after 'unpack 'patch-ssh
26783 (lambda* (#:key inputs #:allow-other-keys)
26784 (substitute* "libcloud/compute/ssh.py"
26785 (("'ssh'")
26786 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26787 (add-after 'unpack 'patch-tests
26788 (lambda _
26789 (substitute* "libcloud/test/compute/test_ssh_client.py"
26790 (("^class ShellOutSSHClientTests")
26791 "@unittest.skip(\"Guix container doesn't have ssh service\")
26792class ShellOutSSHClientTests"))))
26793 (add-before 'check 'copy-secret
26794 (lambda _
26795 (copy-file "libcloud/test/secrets.py-dist"
26796 "libcloud/test/secrets.py"))))))
26797 (inputs
26798 (list openssh))
26799 (propagated-inputs
26800 (list python-requests))
26801 (native-inputs
26802 (list python-pytest python-requests-mock python-setuptools))
26803 (home-page "https://libcloud.apache.org/")
26804 (synopsis "Unified Cloud API")
26805 (description
26806 "@code{libcloud} is a Python library for interacting with many of the
26807popular cloud service providers using a unified API.")
26808 (license license:asl2.0)))
26809
26810(define-public python-smmap
26811 (package
26812 (name "python-smmap")
26813 (version "5.0.2")
26814 (source
26815 (origin
26816 (method url-fetch)
26817 (uri (pypi-uri "smmap" version))
26818 (sha256
26819 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26820 (build-system pyproject-build-system)
26821 (native-inputs
26822 (list python-pytest
26823 python-setuptools
26824 python-wheel))
26825 (home-page "https://github.com/Byron/smmap")
26826 (synopsis "Python sliding window memory map manager")
26827 (description "@code{smmap} is a pure Python implementation of a sliding
26828 window memory map manager.")
26829 (license license:bsd-3)))
26830
26831(define-public python-regex
26832 (package
26833 (name "python-regex")
26834 (version "2026.2.28")
26835 (source
26836 (origin
26837 (method git-fetch)
26838 (uri (git-reference
26839 (url "https://github.com/mrabarnett/mrab-regex")
26840 (commit version)))
26841 (file-name (git-file-name name version))
26842 (sha256
26843 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26844 (build-system pyproject-build-system)
26845 (arguments
26846 (list
26847 #:test-backend #~'unittest
26848 #:test-flags #~(list "-v" "regex.tests.test_regex")
26849 #:phases
26850 #~(modify-phases %standard-phases
26851 (add-before 'check 'remove-local-source
26852 (lambda _
26853 (delete-file-recursively "regex"))))))
26854 (native-inputs
26855 (list python-setuptools))
26856 (home-page "https://github.com/mrabarnett/mrab-regex")
26857 (synopsis "Alternative regular expression module")
26858 (description
26859 "This regular expression implementation is backwards-compatible with the
26860standard @code{re} module, but offers additional functionality like full
26861case-folding for case-insensitive matches in Unicode.")
26862 (license license:psfl)))
26863
26864(define-public python-pysocks
26865 (package
26866 (name "python-pysocks")
26867 (version "1.7.1")
26868 (source
26869 (origin
26870 (method url-fetch)
26871 (uri (pypi-uri "PySocks" version))
26872 (sha256
26873 (base32
26874 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26875 (build-system pyproject-build-system)
26876 (arguments `(#:tests? #f))
26877 (native-inputs
26878 (list python-setuptools))
26879 (home-page "https://github.com/Anorov/PySocks")
26880 (synopsis "SOCKS client module")
26881 (description "@code{pysocks} is an updated and semi-actively maintained
26882version of @code{SocksiPy} with bug fixes and extra features.")
26883 (license license:bsd-3)))
26884
26885(define-public python-pydub
26886 ;; TODO: Move to (gnu packages audio)
26887 (package
26888 (name "python-pydub")
26889 (version "0.25.1")
26890 (source
26891 (origin
26892 (method git-fetch)
26893 (uri (git-reference
26894 (url "https://github.com/jiaaro/pydub")
26895 (commit (string-append "v" version))))
26896 (file-name (git-file-name name version))
26897 (sha256
26898 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26899 (patches
26900 (list
26901 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26902 (origin
26903 (method url-fetch)
26904 (uri
26905 (string-append "https://github.com/jiaaro/pydub/commit/"
26906 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26907 (sha256
26908 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26909 (build-system pyproject-build-system)
26910 (arguments
26911 (list
26912 #:test-backend ''unittest
26913 #:phases
26914 #~(modify-phases %standard-phases
26915 (add-after 'unpack 'fix-ffmpeg-path
26916 (lambda* (#:key inputs #:allow-other-keys)
26917 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26918 (substitute* "pydub/utils.py"
26919 (("return \"ffmpeg\"")
26920 (string-append "return \"" bin "/ffmpeg\""))
26921 (("return \"ffplay\"")
26922 (string-append "return \"" bin "/ffplay\""))
26923 (("return \"ffprobe\"")
26924 (string-append "return \"" bin "/ffprobe\""))
26925 (("warn\\(\"Couldn't find ff")
26926 "# warn\\(\"Couldn't find ff"))))))))
26927 (native-inputs (list python-setuptools))
26928 (home-page "https://pydub.com")
26929 (inputs (list ffmpeg))
26930 (propagated-inputs (list python-scipy))
26931 (synopsis "Manipulate audio with a high level interface in Python")
26932 (description
26933 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26934@code{ffmpeg} to open various audio formats.")
26935 (license license:expat))) ; MIT license
26936
26937(define-public python-pkginfo
26938 (package
26939 (name "python-pkginfo")
26940 (version "1.12.1.2")
26941 (source
26942 (origin
26943 (method url-fetch)
26944 (uri (pypi-uri "pkginfo" version))
26945 (sha256
26946 (base32
26947 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26948 (build-system pyproject-build-system)
26949 (arguments
26950 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26951 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26952 (native-inputs
26953 (list python-pytest
26954 python-setuptools
26955 python-wheel))
26956 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26957 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26958 (description
26959 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26960source distriubtion (an sdist) or a binary distribution (e.g., created by
26961running bdist_egg). It can also query the EGG-INFO directory of an installed
26962distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26963created by running @code{python setup.py develop}).")
26964 (license license:expat)))
26965
26966(define-public python-rbfly
26967 (package
26968 (name "python-rbfly")
26969 (version "0.11.0")
26970 (source
26971 (origin
26972 (method url-fetch)
26973 (uri (pypi-uri "rbfly" version))
26974 (sha256
26975 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26976 (build-system pyproject-build-system)
26977 (arguments
26978 (list
26979 #:test-flags
26980 #~(list "--pyargs" "rbfly"
26981 #$@(if (target-64bit?)
26982 '()
26983 '((string-append "--deselect=tests/amqp/test_message.py"
26984 "::test_encode_amqp_string_too_long"))))
26985 #:phases
26986 #~(modify-phases %standard-phases
26987 (add-before 'check 'remove-local-source
26988 (lambda _
26989 (delete-file-recursively "rbfly"))))))
26990 (native-inputs
26991 (list python-cython
26992 python-pytest
26993 python-pytest-asyncio
26994 python-pytest-timeout
26995 python-setuptools))
26996 (home-page "https://wrobell.dcmod.org/rbfly/")
26997 (synopsis "Work with RabbitMQ Streams in Python")
26998 (description
26999 "This package implements a functionality to deal with
27000@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
27001@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
27002
27003It is designed and implemented with the following qualities in mind:
27004@itemize
27005@item asynchronous Pythonic API with type annotations
27006@item use of
27007@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
270081.0 message format to enable interoperability between RabbitMQ Stream. clients
27009@item auto reconnection to RabbitMQ broker with lazily created connection
27010objects
27011@end itemize
27012
27013Support of many RabbitMQ Streams broker features:
27014@itemize
27015@item publishing single messages, or in batches, with confirmation
27016@item subscribing to a stream at a specific point in time, from a specific
27017offset, or using offset reference
27018@item stream message filtering
27019@item writing stream offset reference
27020@item message deduplication
27021@item integration with AMQP 1.0 ecosystem at message format level
27022@end itemize")
27023 (license license:gpl3+)))
27024
27025(define-public python-jsonrpclib-pelix
27026 (package
27027 (name "python-jsonrpclib-pelix")
27028 (version "0.3.2")
27029 (source
27030 (origin
27031 (method git-fetch)
27032 (uri (git-reference
27033 (url "https://github.com/tcalmant/jsonrpclib")
27034 (commit (string-append "v" version))))
27035 (file-name (git-file-name name version))
27036 (sha256
27037 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
27038 (build-system pyproject-build-system)
27039 (arguments
27040 (list
27041 #:test-flags #~(list "--deselect=\
27042tests/test_internal.py::InternalTests::test_multicall_success")))
27043 (native-inputs (list python-pytest python-setuptools))
27044 (home-page "https://github.com/tcalmant/jsonrpclib")
27045 (synopsis "JSON-RPC 2.0 client library for Python")
27046 (description
27047 "This library implements the JSON-RPC v2.0 specification
27048(backwards-compatible) as a client library for Python. This version is a fork
27049of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
27050 (license license:asl2.0)))
27051
27052(define-public python-setuptools-git
27053 ;; XXX: The project is abandoned since 2018, consider to remove in the next
27054 ;; refresh cycle.
27055 (package
27056 (name "python-setuptools-git")
27057 (version "1.2")
27058 (source
27059 (origin
27060 (method url-fetch)
27061 (uri (pypi-uri "setuptools-git" version))
27062 (sha256
27063 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
27064 (build-system pyproject-build-system)
27065 (arguments
27066 (list
27067 #:tests? #f ;no tests in PyPI
27068 #:phases
27069 #~(modify-phases %standard-phases
27070 ;; This is needed for tests.
27071 (add-after 'unpack 'configure-git
27072 (lambda _
27073 (setenv "HOME" "/tmp")
27074 (invoke "git" "config" "--global" "user.email" "guix")
27075 (invoke "git" "config" "--global" "user.name" "guix"))))))
27076 (native-inputs
27077 (list git-minimal/pinned python-setuptools python-wheel))
27078 (home-page "https://github.com/msabramo/setuptools-git")
27079 (synopsis "Setuptools revision control system plugin for Git")
27080 (description
27081 "This package provides a plugin for Setuptools for revision control with
27082Git.")
27083 (license license:bsd-3)))
27084
27085(define-public python-setuptools-rust
27086 (package
27087 (name "python-setuptools-rust")
27088 (version "1.11.1")
27089 (source
27090 (origin
27091 (method url-fetch)
27092 (uri (pypi-uri "setuptools_rust" version))
27093 (sha256
27094 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
27095 (build-system pyproject-build-system)
27096 (arguments
27097 (list #:tests? #f)) ;tests require Cargo
27098 (propagated-inputs
27099 (list python-semantic-version
27100 python-setuptools))
27101 (home-page "https://github.com/PyO3/setuptools-rust")
27102 (synopsis "Setuptools plugin for Rust extensions")
27103 (description
27104 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
27105Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
27106 (license license:expat)))
27107
27108(define-public python-setuptools-gettext
27109 (package
27110 (name "python-setuptools-gettext")
27111 (version "0.1.14")
27112 (source
27113 (origin
27114 (method git-fetch)
27115 (uri (git-reference
27116 (url "https://github.com/breezy-team/setuptools-gettext")
27117 (commit (string-append "v" version))))
27118 (file-name (git-file-name name version))
27119 (sha256
27120 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
27121 (build-system pyproject-build-system)
27122 (native-inputs (list python-pytest python-tomli python-setuptools))
27123 (home-page "https://github.com/breezy-team/setuptools-gettext")
27124 (synopsis "Setuptools plugin for gettext")
27125 (description "This package provides a plugin for Setuptools for gettext.")
27126 (license license:gpl2+)))
27127
27128(define-public python-pyclibrary
27129 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
27130 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
27131 (revision "0"))
27132 (package
27133 (name "python-pyclibrary")
27134 (version (git-version "0.2.2" revision commit))
27135 (source
27136 (origin
27137 (method git-fetch)
27138 (uri (git-reference
27139 (url "https://github.com/MatthieuDartiailh/pyclibrary")
27140 (commit commit)))
27141 (file-name (git-file-name name version))
27142 (sha256
27143 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
27144 (build-system pyproject-build-system)
27145 (native-inputs
27146 (list python-pytest
27147 python-setuptools
27148 python-setuptools-scm))
27149 (propagated-inputs
27150 (list python-pyparsing))
27151 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
27152 (synopsis "Wrap dynamic libraries in Python")
27153 (description
27154 "This package helps wrapping dynamic libraries in Python. It includes
27155a pure-Python C parser and an automation library that uses C header file
27156definitions to simplify the use of C bindings.")
27157 (license license:expat))))
27158
27159(define-public python-pyclipper
27160 (package
27161 (name "python-pyclipper")
27162 (version "1.3.0.post6")
27163 (source
27164 (origin
27165 (method git-fetch)
27166 (uri (git-reference
27167 (url "https://github.com/greginvm/pyclipper")
27168 (commit version)))
27169 (file-name (git-file-name name version))
27170 (sha256
27171 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
27172 (build-system pyproject-build-system)
27173 (arguments
27174 (list
27175 #:phases
27176 #~(modify-phases %standard-phases
27177 (add-before 'build 'cythonize-sources
27178 (lambda _
27179 (with-directory-excursion "src/pyclipper"
27180 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
27181 (native-inputs
27182 (list python-cython
27183 python-pytest
27184 python-setuptools
27185 python-setuptools-scm))
27186 (home-page "https://github.com/greginvm/pyclipper")
27187 (synopsis "Wrapper for Angus Johnson's Clipper library")
27188 (description
27189 "Pyclipper is a Cython wrapper for the C++ translation of the
27190Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
27191 (license license:expat)))
27192
27193(define-public python-semver
27194 (package
27195 (name "python-semver")
27196 (version "3.0.4")
27197 (source
27198 (origin
27199 (method url-fetch)
27200 (uri (pypi-uri "semver" version))
27201 (sha256
27202 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
27203 (build-system pyproject-build-system)
27204 (native-inputs (list python-pytest python-setuptools))
27205 (home-page "https://github.com/k-bx/python-semver")
27206 (synopsis "Python helper for Semantic Versioning")
27207 (description
27208 "This package provides a Python library for @url{Semantic Versioning,
27209http://semver.org/}.")
27210 (license license:bsd-3)))
27211
27212(define-public python-phonenumbers
27213 (package
27214 (name "python-phonenumbers")
27215 (version "8.13.37")
27216 (source
27217 (origin
27218 (method git-fetch)
27219 (uri (git-reference
27220 (url "https://github.com/daviddrysdale/python-phonenumbers")
27221 (commit (string-append "v" version))))
27222 (file-name (git-file-name name version))
27223 (sha256
27224 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
27225 (build-system pyproject-build-system)
27226 (arguments
27227 (list
27228 #:test-backend #~'custom
27229 #:test-flags #~(list "-m" "testwrapper")
27230 #:phases
27231 #~(modify-phases %standard-phases
27232 (add-after 'unpack 'chdir
27233 (lambda _
27234 (chdir "python"))))))
27235 (propagated-inputs (list python-protobuf))
27236 (native-inputs (list python-setuptools))
27237 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
27238 (synopsis "Python library for dealing with international phone numbers")
27239 (description
27240 "This package provides a Python port of Google's libphonenumber library.")
27241 (license license:asl2.0)))
27242
27243(define-public python-heapdict
27244 (package
27245 (name "python-heapdict")
27246 (version "1.0.1")
27247 (source
27248 (origin
27249 (method url-fetch)
27250 (uri (pypi-uri "HeapDict" version))
27251 (sha256
27252 (base32
27253 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
27254 (build-system pyproject-build-system)
27255 (arguments (list #:test-backend #~'unittest))
27256 (native-inputs (list python-setuptools))
27257 (home-page "http://stutzbachenterprises.com/")
27258 (synopsis "Heap with decrease-key and increase-key operations")
27259 (description
27260 "heapdict implements the MutableMapping ABC, meaning it works pretty much
27261like a regular Python @code{dict}. It’s designed to be used as a priority
27262queue.")
27263 (license license:bsd-3)))
27264
27265(define-public python-send2trash
27266 (package
27267 (name "python-send2trash")
27268 (version "1.8.2")
27269 (source
27270 (origin (method git-fetch)
27271 ;; Source tarball on PyPI doesn't include tests.
27272 (uri (git-reference
27273 (url "https://github.com/arsenetar/send2trash")
27274 (commit version)))
27275 (file-name (git-file-name name version))
27276 (sha256
27277 (base32
27278 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
27279 (build-system pyproject-build-system)
27280 (arguments
27281 (list
27282 #:phases
27283 '(modify-phases %standard-phases
27284 (add-before 'check 'pre-check
27285 (lambda _ (setenv "HOME" "/tmp"))))))
27286 (native-inputs (list python-pytest python-setuptools python-wheel))
27287 (home-page "https://github.com/arsenetar/send2trash")
27288 (synopsis "Send files to the user's @file{~/Trash} directory")
27289 (description "This package provides a Python library to send files to the
27290user's @file{~/Trash} directory.")
27291 (license license:bsd-3)))
27292
27293(define-public python-pyfavicon
27294 (package
27295 (name "python-pyfavicon")
27296 (version "0.1.1")
27297 (source
27298 (origin
27299 (method git-fetch)
27300 (uri (git-reference
27301 (url "https://github.com/bilelmoussaoui/pyfavicon")
27302 (commit version)))
27303 (file-name (git-file-name name version))
27304 (sha256
27305 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
27306 (build-system pyproject-build-system)
27307 (arguments
27308 (list
27309 #:test-flags
27310 #~(list "-k" (string-join (list
27311 ;; Socket name resolution fails.
27312 "not test_url_icon_link_type"
27313 "test_icon_sizes"
27314 ;; Tuples differ.
27315 "test_largest_icon")
27316 " and not "))))
27317 (native-inputs (list python-pytest python-setuptools))
27318 (propagated-inputs
27319 (list python-aiohttp python-beautifulsoup4 python-pillow))
27320 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27321 (synopsis "Async favicon fetcher")
27322 (description
27323 "@code{pyfavicon} is an async favicon fetcher.")
27324 (license license:expat)))
27325
27326(define-public python-funcy
27327 (package
27328 (name "python-funcy")
27329 (version "1.11")
27330 (source
27331 (origin
27332 (method git-fetch)
27333 (uri (git-reference
27334 (url "https://github.com/Suor/funcy")
27335 (commit version)))
27336 (sha256
27337 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27338 (file-name (git-file-name name version))))
27339 (build-system pyproject-build-system)
27340 (native-inputs
27341 (list python-pytest python-whatever python-setuptools python-wheel))
27342 (home-page "https://github.com/Suor/funcy")
27343 (synopsis "Functional tools")
27344 (description "@code{funcy} is a library that provides functional tools.
27345Examples are:
27346@enumerate
27347@item merge - Merges collections of the same type
27348@item walk - Type-preserving map
27349@item select - Selects a part of a collection
27350@item take - Takes the first n items of a collection
27351@item first - Takes the first item of a collection
27352@item remove - Predicated-removes items of a collection
27353@item concat - Concatenates two collections
27354@item flatten - Flattens a collection with subcollections
27355@item distinct - Returns only distinct items
27356@item split - Predicated-splits a collection
27357@item split_at - Splits a collection at a given item
27358@item group_by - Groups items by group
27359@item pairwise - Pairs off adjacent items
27360@item partial - Partially-applies a function
27361@item curry - Curries a function
27362@item compose - Composes functions
27363@item complement - Complements a predicate
27364@item all_fn - \"all\" with predicate
27365@end enumerate")
27366 (license license:bsd-3)))
27367
27368(define-public python-funcy-1.14
27369 (package/inherit python-funcy
27370 (name "python-funcy")
27371 (version "1.14")
27372 (source
27373 (origin
27374 (method git-fetch)
27375 (uri (git-reference
27376 (url "https://github.com/Suor/funcy")
27377 (commit version)))
27378 (sha256
27379 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27380 (file-name (git-file-name name version))))))
27381
27382(define-public python-isoweek
27383 (package
27384 (name "python-isoweek")
27385 (version "1.3.3")
27386 (source
27387 (origin
27388 (method url-fetch)
27389 (uri (pypi-uri "isoweek" version))
27390 (sha256
27391 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27392 (build-system pyproject-build-system)
27393 (arguments (list #:test-backend #~'unittest))
27394 (native-inputs (list python-setuptools))
27395 (home-page "https://github.com/gisle/isoweek")
27396 (synopsis "Objects representing a week")
27397 (description "The @code{isoweek} module provide the class Week that
27398implements the week definition of ISO 8601. This standard also defines
27399a notation for identifying weeks; yyyyWww (where the W is a literal).
27400Week instances stringify to this form.")
27401 (license license:bsd-3)))
27402
27403(define-public bpython
27404 (package
27405 (name "bpython")
27406 (version "0.25")
27407 (source
27408 (origin
27409 (method url-fetch)
27410 (uri (pypi-uri "bpython" version))
27411 (sha256
27412 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27413 (build-system pyproject-build-system)
27414 (arguments
27415 (list
27416 #:test-flags
27417 ;; Tests can't import curtsies, pygments and urwid.
27418 #~(list "-k" (string-join
27419 (list "not test_issue108"
27420 "test_issue133")
27421 " and not " ))
27422 #:phases
27423 #~(modify-phases %standard-phases
27424 (add-after 'wrap 'add-aliases
27425 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27426 (lambda _
27427 (for-each
27428 (lambda (old new)
27429 (symlink old (string-append #$output "/bin/" new)))
27430 '("bpython" "bpython-urwid" "bpdb")
27431 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27432 (native-inputs
27433 (list python-mock
27434 python-pytest
27435 python-setuptools))
27436 (propagated-inputs
27437 (list python-curtsies
27438 python-cwcwidth
27439 python-greenlet
27440 python-pygments
27441 python-pyxdg
27442 python-requests
27443 ;; [optional]
27444 python-pyperclip
27445 python-jedi
27446 python-urwid-2
27447 python-watchdog))
27448 (home-page "https://bpython-interpreter.org/")
27449 (synopsis "Fancy interface to the Python interpreter")
27450 (description "Bpython is a fancy interface to the Python
27451interpreter. bpython's main features are
27452
27453@enumerate
27454@item in-line syntax highlighting,
27455@item readline-like autocomplete with suggestions displayed as you type,
27456@item expected parameter list for any Python function,
27457@item \"rewind\" function to pop the last line of code from memory and
27458 re-evaluate,
27459@item send the code you've entered off to a pastebin,
27460@item save the code you've entered to a file, and
27461@item auto-indentation.
27462@end enumerate")
27463 (license license:expat)))
27464
27465(define-public python-pyinotify
27466 (package
27467 (name "python-pyinotify")
27468 (version "0.9.6")
27469 (source
27470 (origin
27471 (method git-fetch)
27472 (uri (git-reference
27473 (url "https://github.com/seb-m/pyinotify")
27474 (commit version)))
27475 (file-name (git-file-name name version))
27476 (sha256
27477 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27478 (build-system pyproject-build-system)
27479 (arguments
27480 (list
27481 #:tests? #f ;no tests
27482 #:phases
27483 #~(modify-phases %standard-phases
27484 (add-after 'unpack 'drop-shebang
27485 (lambda _
27486 ;; Dropping this shebang prevents the build system from adding
27487 ;; python-wrapper as an input, reducing package closure size from
27488 ;; ~200 MiB to ~0.2 MiB.
27489 (substitute* "python3/pyinotify.py"
27490 (("#!/usr/bin/env python") "")))))))
27491 (native-inputs
27492 (list python-setuptools))
27493 (propagated-inputs
27494 (list python-pyasyncore))
27495 (home-page "https://github.com/seb-m/pyinotify")
27496 (synopsis "Python library for monitoring inotify events")
27497 (description
27498 "@code{pyinotify} provides a Python interface for monitoring file system
27499events on Linux.")
27500 (license license:expat)))
27501
27502(define-public python-pyinotify-cli
27503 (package
27504 (inherit python-pyinotify)
27505 (name "python-pyinotify-cli")
27506 (arguments
27507 (substitute-keyword-arguments arguments
27508 ((#:phases phases #~%standard-phases)
27509 #~(modify-phases #$phases
27510 (delete 'drop-shebang)
27511 (add-after 'install 'install-entrypoint
27512 (lambda _
27513 (let ((entrypoint
27514 (string-append #$output "/lib/python"
27515 (python-version (which "python"))
27516 "/site-packages/pyinotify.py"))
27517 (bin (string-append #$output "/bin")))
27518 (mkdir-p bin)
27519 (invoke "chmod" "+x" entrypoint)
27520 (symlink
27521 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27522 (description
27523 "This package provides, in addition to the @code{pyinotify} Python library,
27524a command line application exposing the same functionality.")))
27525
27526(define-public python-latex2pydata
27527 (package
27528 (name "python-latex2pydata")
27529 (version "0.5.0")
27530 (source
27531 (origin
27532 (method url-fetch)
27533 (uri (pypi-uri "latex2pydata" version))
27534 (sha256
27535 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27536 (build-system pyproject-build-system)
27537 (native-inputs (list python-setuptools python-wheel python-pytest))
27538 (home-page "https://github.com/gpoore/latex2pydata")
27539 (synopsis "Load data from LaTeX in Python literal format")
27540 (description
27541 "This package is designed to load data in Python literal format that was
27542saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27543passed from LaTeX to Python.")
27544 (license license:bsd-3)))
27545
27546(define-public python-latexcodec
27547 (package
27548 (name "python-latexcodec")
27549 (version "3.0.1")
27550 (source
27551 (origin
27552 (method git-fetch)
27553 (uri (git-reference
27554 (url "https://github.com/mcmtroffaes/latexcodec/")
27555 (commit version)))
27556 (file-name (git-file-name name version))
27557 (sha256
27558 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27559 (build-system pyproject-build-system)
27560 (native-inputs (list python-pytest python-setuptools))
27561 (home-page "https://readthedocs.org/projects/latexcodec/")
27562 (synopsis "Work with LaTeX code in Python")
27563 (description "Lexer and codec to work with LaTeX code in Python.")
27564 (license license:expat)))
27565
27566(define-public python-latexminted
27567 (package
27568 (name "python-latexminted")
27569 (version "0.7.1")
27570 (source
27571 (origin
27572 (method url-fetch)
27573 (uri (pypi-uri "latexminted" version))
27574 (sha256
27575 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27576 (build-system pyproject-build-system)
27577 (arguments (list #:tests? #f)) ; No tests upstream.
27578 (propagated-inputs (list python-latex2pydata
27579 python-latexrestricted
27580 python-pygments))
27581 (native-inputs (list texlive-kpathsea python-setuptools))
27582 (home-page "https://github.com/gpoore/minted")
27583 (synopsis "Python library for the LaTeX minted package")
27584 (description "This Python package provides the Python side of the
27585@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27586@code{python-pygments} library. It also provides several code formatting and
27587manipulation features implemented in Python that would be difficult to perform
27588in LaTeX, such as dedenting code and extracting code snippets from source files
27589using regular expressions.")
27590 (license license:lppl1.3c+)))
27591
27592(define-public python-latexrestricted
27593 (package
27594 (name "python-latexrestricted")
27595 (version "0.6.2")
27596 (source
27597 (origin
27598 (method url-fetch)
27599 (uri (pypi-uri "latexrestricted" version))
27600 (sha256
27601 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27602 (build-system pyproject-build-system)
27603 (arguments
27604 (list
27605 #:tests? #f ;no test
27606 #:phases
27607 #~(modify-phases %standard-phases
27608 (add-after 'unpack 'fix-paths
27609 (lambda* (#:key inputs #:allow-other-keys)
27610 (let ((pystr (lambda (s) (string-append "'" s "'")))
27611 (kpse (search-input-file inputs "/bin/kpsewhich")))
27612 (substitute* "latexrestricted/_latex_config.py"
27613 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27614 ;; this variable is bogus in Guix because binaries are scattered
27615 ;; across multiple directories. This phase sets SELFAUTOLOC to
27616 ;; the specific directory containing `kpsewhich'.
27617 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27618 (pystr (dirname kpse)))
27619 ;; Refer to kpse by store path instead of looking it upein $PATH.
27620 (("shutil.which\\('kpse'.*$")
27621 (string-append (pystr kpse) "\n")))))))))
27622 (native-inputs (list python-setuptools python-wheel))
27623 (inputs (list texlive-kpathsea))
27624 (home-page "https://github.com/gpoore/latexrestricted")
27625 (synopsis
27626 "Library for creating executables compatible with LaTeX's shell escape")
27627 (description
27628 "This Python package is designed to simplify the process of creating Python
27629executables compatible with LaTeX restricted shell escape. Restricted shell
27630escape allows LaTeX to run trusted executables as part of compiling documents.
27631These executables have restricted access to the file system and restricted
27632ability to launch subprocesses.")
27633 (license license:lppl1.3+)))
27634
27635(define-public python-pybloom-live
27636 (package
27637 (name "python-pybloom-live")
27638 (version "4.0.0")
27639 (source (origin
27640 (method url-fetch)
27641 (uri (pypi-uri "pybloom_live" version))
27642 (sha256
27643 (base32
27644 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27645 (build-system pyproject-build-system)
27646 (propagated-inputs (list python-bitarray python-xxhash))
27647 (native-inputs (list python-pytest python-setuptools python-wheel))
27648 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27649 (synopsis "Bloom filter")
27650 (description "This package provides a scalable Bloom filter implemented in
27651Python.")
27652 (license license:expat)))
27653
27654;; XXX: Not maintained since 2020.
27655(define-public python-pybktree
27656 (package
27657 (name "python-pybktree")
27658 (version "1.1")
27659 (source
27660 (origin
27661 (method url-fetch)
27662 (uri (pypi-uri "pybktree" version))
27663 (sha256
27664 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27665 (build-system pyproject-build-system)
27666 (arguments
27667 (list #:tests? #f)) ;no tests provided
27668 (native-inputs (list python-setuptools))
27669 (home-page "https://github.com/Jetsetter/pybktree")
27670 (synopsis "Pythonic BK-tree data structure")
27671 (description
27672 "This package provides a BK-tree data structure to allow fast querying of
27673close matches in Python.")
27674 (license license:expat)))
27675
27676(define-public python-pybtex
27677 (package
27678 (name "python-pybtex")
27679 (version "0.25.0")
27680 (source
27681 (origin
27682 (method git-fetch)
27683 (uri (git-reference
27684 (url "https://codeberg.org/pybtex/pybtex")
27685 (commit version)))
27686 (file-name (git-file-name name version))
27687 (sha256
27688 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27689 (build-system pyproject-build-system)
27690 (native-inputs (list python-pytest python-setuptools))
27691 (propagated-inputs (list python-latexcodec python-pyyaml))
27692 (home-page "https://pybtex.org/")
27693 (synopsis "BibTeX-compatible bibliography processor")
27694 (description
27695 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27696You can simply type pybtex instead of bibtex.")
27697 (license license:expat)))
27698
27699(define-public python-pybtex-apa-style
27700 (package
27701 (name "python-pybtex-apa-style")
27702 (version "1.3")
27703 (source
27704 (origin
27705 (method url-fetch)
27706 (uri (pypi-uri "pybtex-apa-style" version))
27707 (sha256
27708 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27709 (build-system pyproject-build-system)
27710 (arguments
27711 (list
27712 #:test-backend #~'custom
27713 #:test-flags
27714 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27715 " sys.exit('apa' not"
27716 " in pybtex.plugin.enumerate_plugin_names"
27717 "('pybtex.style.labels'))"))))
27718 (native-inputs (list python-pybtex python-setuptools))
27719 (home-page "https://github.com/naeka/pybtex-apa-style")
27720 (synopsis "APA style for pybtex")
27721 (description
27722 "This package provides support for the APA style within pybtex.")
27723 (license license:expat)))
27724
27725(define-public python-pybtex-docutils
27726 (package
27727 (name "python-pybtex-docutils")
27728 (version "1.0.3")
27729 (source
27730 (origin
27731 (method git-fetch)
27732 (uri (git-reference
27733 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27734 (commit version)))
27735 (file-name (git-file-name name version))
27736 (sha256
27737 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27738 (build-system pyproject-build-system)
27739 (propagated-inputs (list python-docutils python-pybtex))
27740 (native-inputs (list python-setuptools python-pytest))
27741 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27742 (synopsis "Docutils backend for pybtex")
27743 (description "The pybtex docutils backend allows bibtex citations to be
27744inserted into documentation generated by docutils.")
27745 (license license:expat)))
27746
27747(define-public python-onetimepass
27748 (package
27749 (name "python-onetimepass")
27750 (version "1.0.1")
27751 (source
27752 (origin
27753 (method git-fetch)
27754 (uri (git-reference
27755 (url "https://github.com/tadeck/onetimepass/")
27756 (commit (string-append "v" version))))
27757 (file-name (git-file-name name version))
27758 (sha256
27759 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27760 (build-system pyproject-build-system)
27761 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27762 (native-inputs (list python-setuptools))
27763 (propagated-inputs (list python-six))
27764 (home-page "https://github.com/tadeck/onetimepass/")
27765 (synopsis "One-time password library")
27766 (description
27767 "Python one-time password library for HMAC-based (HOTP) and time-based
27768(TOTP) passwords.")
27769 (license license:expat)))
27770
27771(define-public python-online-judge-api-client
27772 (package
27773 (name "python-online-judge-api-client")
27774 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27775 (revision . "0")))
27776 (version (git-version "10.10.1"
27777 (assoc-ref properties 'revision)
27778 (assoc-ref properties 'commit)))
27779 (source
27780 (origin
27781 (method git-fetch)
27782 (uri (git-reference
27783 (url "https://github.com/online-judge-tools/api-client")
27784 (commit (assoc-ref properties 'commit))))
27785 (file-name (git-file-name name version))
27786 (sha256
27787 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27788 (patches
27789 (search-patches "python-online-judge-api-client-tests.patch"))
27790 ))
27791 (build-system pyproject-build-system)
27792 (arguments
27793 (list
27794 #:test-flags
27795 #~(list "--ignore-glob=tests/get_contest_*.py"
27796 "--ignore-glob=tests/get_problem_*.py")
27797 #:phases
27798 #~(modify-phases %standard-phases
27799 (add-before 'check 'configure-tests
27800 (lambda* (#:key inputs outputs #:allow-other-keys)
27801 (delete-file-recursively
27802 (string-append (site-packages inputs outputs)
27803 "/tests"))
27804 (call-with-output-file "pytest.ini"
27805 (lambda (port)
27806 (format port "\
27807[pytest]
27808python_files = tests/*.py"))))))))
27809 (native-inputs (list python-pytest python-setuptools))
27810 (propagated-inputs
27811 (list python-appdirs
27812 python-beautifulsoup4
27813 python-colorlog
27814 python-lxml
27815 python-requests
27816 python-toml
27817 python-jsonschema))
27818 (home-page "https://github.com/online-judge-tools/api-client")
27819 (synopsis "API client for various online judges")
27820 (description
27821 "This is an API client for various online judges, used as the backend
27822library of @code{oj} command. You can use the Python library
27823(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27824command) which talks JSON compatible with jmerle/competitive-companion.")
27825 (license license:expat)))
27826
27827(define-public online-judge-tools
27828 (package
27829 (name "online-judge-tools")
27830 (version "11.5.1")
27831 ;; Source distributions are not uploaded to PyPI.
27832 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27833 (source
27834 (origin
27835 (method git-fetch)
27836 (uri (git-reference
27837 (url "https://github.com/online-judge-tools/oj")
27838 (commit (string-append "v" version))))
27839 (file-name (git-file-name name version))
27840 (sha256
27841 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27842 (patches (search-patches "online-judge-tools.patch"))))
27843 (build-system pyproject-build-system)
27844 (arguments
27845 (list
27846 #:test-flags
27847 ;; These tests require network connections
27848 #~(list "--ignore=tests/command_version.py")))
27849 (native-inputs (list python-pytest python-setuptools))
27850 (inputs (list time))
27851 (propagated-inputs (list python-online-judge-api-client python-colorama
27852 python-requests))
27853 (home-page "https://github.com/online-judge-tools/oj")
27854 (synopsis "Command to help solving problems on various online judges")
27855 (description
27856 "@command{oj} is a command line tool to help solving problems on
27857various online judges. This command automates downloading sample
27858cases, generating additional test cases, testing for your code, and
27859submitting it.")
27860 (license license:expat)))
27861
27862(define-public python-mpv-jsonipc
27863 (package
27864 (name "python-mpv-jsonipc")
27865 (version "1.2.0")
27866 (source
27867 (origin
27868 (method url-fetch)
27869 (uri (pypi-uri "python-mpv-jsonipc" version))
27870 (sha256
27871 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27872 (build-system pyproject-build-system)
27873 (arguments (list #:tests? #f)) ;No test suite.
27874 (native-inputs (list python-setuptools python-wheel))
27875 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27876 (synopsis "Python API to control MPV using JSON IPC")
27877 (description "Python MPV JSONIPC implements an interface similar to
27878python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27879 (license license:asl2.0)))
27880
27881(define-public python-jellyfin-apiclient
27882 (package
27883 (name "python-jellyfin-apiclient")
27884 (version "1.11.0")
27885 (source
27886 (origin
27887 (method git-fetch)
27888 (uri
27889 (git-reference
27890 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27891 (commit (string-append "v" version))))
27892 (sha256
27893 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27894 (build-system pyproject-build-system)
27895 (native-inputs (list python-setuptools python-pytest python-wheel))
27896 (propagated-inputs (list python-certifi python-requests python-urllib3
27897 python-websocket-client))
27898 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27899 (synopsis "Python API client for Jellyfin")
27900 (description "The Jellyfin ApiClient Python package makes it possible
27901to use the Jellyfin API from Python. It was extracted from the Jellyfin
27902Kodi plugin.")
27903 (license license:gpl3+)))
27904
27905(define-public python-parso
27906 (package
27907 (name "python-parso")
27908 (version "0.8.5")
27909 (source
27910 (origin
27911 (method url-fetch)
27912 (uri (pypi-uri "parso" version))
27913 (sha256
27914 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27915 (build-system pyproject-build-system)
27916 (native-inputs
27917 (list python-pytest
27918 python-setuptools))
27919 (home-page "https://github.com/davidhalter/parso")
27920 (synopsis "Python Parser")
27921 (description "Parso is a Python parser that supports error recovery and
27922round-trip parsing for different Python versions (in multiple Python versions).
27923Parso is also able to list multiple syntax errors in your Python file.")
27924 (license license:expat)))
27925
27926(define-public python-async-generator
27927 (package
27928 (name "python-async-generator")
27929 (version "1.10")
27930 (source
27931 (origin
27932 (method url-fetch)
27933 (uri (pypi-uri "async_generator" version))
27934 (sha256
27935 (base32
27936 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27937 (build-system pyproject-build-system)
27938 (native-inputs
27939 (list python-pytest python-setuptools))
27940 (home-page "https://github.com/python-trio/async_generator")
27941 (synopsis "Async generators and context managers for Python 3.5+")
27942 (description "@code{async_generator} back-ports Python 3.6's native async
27943generators and Python 3.7's context managers into Python 3.5.")
27944 ;; Dual licensed.
27945 (license (list license:expat license:asl2.0))))
27946
27947(define-public python-async-timeout
27948 (package
27949 (name "python-async-timeout")
27950 (version "5.0.1")
27951 (source
27952 (origin
27953 (method url-fetch)
27954 (uri (pypi-uri "async_timeout" version))
27955 (sha256
27956 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27957 (build-system pyproject-build-system)
27958 (native-inputs
27959 (list python-pytest
27960 python-pytest-asyncio
27961 python-setuptools
27962 python-wheel))
27963 (home-page "https://github.com/aio-libs/async-timeout")
27964 (synopsis "Timeout context manager for asyncio programs")
27965 (description
27966 "@code{async-timeout} provides a timeout timeout context manager
27967compatible with @code{asyncio}.")
27968 (license license:asl2.0)))
27969
27970(define-public python-async-timeout-4
27971 (package
27972 (inherit python-async-timeout)
27973 (name "python-async-timeout")
27974 (version "4.0.3")
27975 (source
27976 (origin
27977 (method url-fetch)
27978 (uri (pypi-uri "async-timeout" version))
27979 (sha256
27980 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27981
27982(define-public python-glob2
27983 (package
27984 (name "python-glob2")
27985 (version "0.7")
27986 (source
27987 (origin
27988 (method git-fetch)
27989 (uri (git-reference
27990 (url "https://github.com/miracle2k/python-glob2")
27991 (commit (string-append "v" version))))
27992 (file-name (git-file-name name version))
27993 (sha256
27994 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27995 (build-system pyproject-build-system)
27996 (arguments
27997 (list
27998 #:phases
27999 #~(modify-phases %standard-phases
28000 (add-after 'unpack 'patch-tests-for-pytest8
28001 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
28002 (lambda _
28003 (substitute* "test.py"
28004 (("setup\\(") "setup_method(")
28005 (("teardown\\(") "teardown_method("))
28006 (rename-file "test.py" "glob2_test.py"))))))
28007 (native-inputs (list python-pytest python-setuptools))
28008 (home-page "https://github.com/miracle2k/python-glob2/")
28009 (synopsis "Extended Version of the python buildin glob module")
28010 (description "This is an extended version of the Python
28011@url{http://docs.python.org/library/glob.html, built-in glob module} which
28012adds:
28013
28014@itemize
28015@item The ability to capture the text matched by glob patterns, and return
28016those matches alongside the file names.
28017@item A recursive @code{**} globbing syntax, akin for example to the
28018@code{globstar} option of Bash.
28019@item The ability to replace the file system functions used, in order to glob
28020on virtual file systems.
28021@item Compatible with Python 2 and Python 3 (tested with 3.3).
28022@end itemize
28023
28024Glob2 currently based on the glob code from Python 3.3.1.")
28025 (license license:bsd-2)))
28026
28027(define-public python-gipc
28028 (package
28029 (name "python-gipc")
28030 (version "1.8.0")
28031 (source
28032 (origin
28033 (method git-fetch)
28034 (uri (git-reference
28035 (url "https://github.com/jgehrcke/gipc")
28036 (commit version)))
28037 (file-name (git-file-name name version))
28038 (sha256
28039 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
28040 (build-system pyproject-build-system)
28041 (arguments
28042 (list
28043 #:phases
28044 #~(modify-phases %standard-phases
28045 (add-after 'unpack 'adjust-for-pytest-8
28046 (lambda _
28047 (substitute* "test/test_gipc.py"
28048 (("def setup") "def setup_method")
28049 (("def teardown") "def teardown_method")))))))
28050 (native-inputs
28051 (list python-pytest
28052 python-setuptools))
28053 (propagated-inputs
28054 (list python-gevent))
28055 (home-page "https://gehrcke.de/gipc/")
28056 (synopsis "Child process management in the context of gevent")
28057 (description
28058 "Usage of Python's multiprocessing package in a gevent-powered
28059application may raise problems. With @code{gipc}, process-based child
28060processes can safely be created anywhere within a gevent-powered
28061application.")
28062 (license license:expat)))
28063
28064(define-public python-beautifultable
28065 (package
28066 (name "python-beautifultable")
28067 (version "1.1.0")
28068 (source
28069 (origin
28070 (method git-fetch)
28071 (uri (git-reference
28072 (url "https://github.com/pri22296/beautifultable")
28073 (commit (string-append "v" version))))
28074 (file-name (git-file-name name version))
28075 (sha256
28076 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
28077 (build-system pyproject-build-system)
28078 (arguments
28079 (list
28080 ;; Fails because a None is converted to nan, probably due to Pandas 3.
28081 #:test-flags
28082 #~(list "-k" "not test_df_export_scenario2" "test.py")))
28083 (native-inputs (list python-pandas
28084 python-pytest
28085 python-setuptools))
28086 (propagated-inputs (list python-wcwidth))
28087 (home-page "https://github.com/pri22296/beautifultable")
28088 (synopsis "Print ASCII tables for terminals")
28089 (description
28090 "@code{python-beautifultable} provides a class for easily printing
28091tabular data in a visually appealing ASCII format to a terminal.
28092
28093Features include, but are not limited to:
28094@itemize
28095@item Full customization of the look and feel of the table
28096@item Row and column accessors.
28097@item Full support for colors using ANSI sequences or any library.
28098@item Plenty of predefined styles and option to create custom ones.
28099@item Support for Unicode characters.
28100@item Supports streaming table when data is slow to retrieve.
28101@end itemize")
28102 (license license:expat)))
28103
28104(define-public python-globber
28105 (package
28106 (name "python-globber")
28107 (version "0.2.1")
28108 (source
28109 (origin
28110 (method git-fetch)
28111 (uri (git-reference
28112 (url "https://github.com/asharov/globber")
28113 (commit version)))
28114 (file-name (git-file-name name version))
28115 (sha256
28116 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
28117 (build-system pyproject-build-system)
28118 (native-inputs (list python-pytest python-setuptools))
28119 (home-page "https://github.com/asharov/globber")
28120 (synopsis "Library for string matching with glob patterns")
28121 (description
28122 "Globber is a Python library for matching file names against glob patterns.
28123In contrast to other glob-matching libraries, it matches arbitrary strings and
28124doesn't require the matched names to be existing files. In addition, it
28125supports the globstar @code{**} operator to match an arbitrary number of
28126path components.")
28127 (license license:asl2.0)))
28128
28129;; XXX: Not maintained since 2021.
28130(define-public python-git-hammer
28131 (package
28132 (name "python-git-hammer")
28133 (version "0.3.2")
28134 (source
28135 (origin
28136 (method git-fetch)
28137 (uri (git-reference
28138 (url "https://github.com/asharov/git-hammer")
28139 (commit version)))
28140 (file-name (git-file-name name version))
28141 (sha256
28142 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
28143 (build-system pyproject-build-system)
28144 (arguments
28145 (list
28146 #:phases
28147 #~(modify-phases %standard-phases
28148 (add-after 'unpack 'relax-requirements
28149 (lambda _
28150 (substitute* "setup.py"
28151 (("matplotlib <3.1") "matplotlib")))))))
28152 (native-inputs
28153 (list python-pytest
28154 python-setuptools))
28155 (propagated-inputs
28156 (list python-beautifultable
28157 python-dateutil
28158 python-gitpython
28159 python-globber
28160 python-matplotlib
28161 python-sqlalchemy
28162 python-sqlalchemy-utils))
28163 (home-page "https://github.com/asharov/git-hammer")
28164 (synopsis "Provide statistics for git repositories")
28165 (description
28166 "Git Hammer is a statistics tool for projects in git repositories. Its major
28167feature is tracking the number of lines authored by each person for every
28168commit, but it also includes some other useful statistics.")
28169 (license license:asl2.0)))
28170
28171(define-public python-gitignore-parser
28172 (package
28173 (name "python-gitignore-parser")
28174 (version "0.1.13")
28175 (source
28176 (origin
28177 (method git-fetch)
28178 (uri (git-reference
28179 (url "https://github.com/mherrmann/gitignore_parser")
28180 (commit (string-append "v" version))))
28181 (file-name (git-file-name name version))
28182 (sha256
28183 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
28184 (build-system pyproject-build-system)
28185 (arguments (list #:test-backend #~'unittest))
28186 (native-inputs (list python-setuptools))
28187 (home-page "https://github.com/mherrmann/gitignore_parser")
28188 (synopsis "Spec-compliant gitignore parser for Python")
28189 (description
28190 "This package provides a spec-compliant gitignore parser for Python.")
28191 (license license:expat)))
28192
28193(define-public python-fusepy
28194 (package
28195 (name "python-fusepy")
28196 (version "2.0.4")
28197 (source
28198 (origin
28199 (method git-fetch)
28200 (uri (git-reference
28201 (url "https://github.com/fusepy/fusepy")
28202 (commit (string-append "v" version))))
28203 (file-name (git-file-name name version))
28204 (sha256
28205 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
28206 (build-system pyproject-build-system)
28207 (arguments
28208 (list
28209 #:tests? #f ; No formalized tests.
28210 #:phases
28211 #~(modify-phases %standard-phases
28212 (add-before 'build 'set-library-file-name
28213 (lambda* (#:key inputs #:allow-other-keys)
28214 (substitute* "fuse.py"
28215 (("find_library\\('fuse'\\)")
28216 (format #f "~s"
28217 (search-input-file inputs "lib/libfuse.so")))))))))
28218 (native-inputs (list python-setuptools))
28219 (propagated-inputs (list fuse-2))
28220 (home-page "https://github.com/fusepy/fusepy")
28221 (synopsis "Simple ctypes bindings for FUSE")
28222 (description
28223 "Python module that provides a simple interface to FUSE and MacFUSE. The
28224binding is created using the standard @code{ctypes} library.")
28225 (license license:isc)))
28226
28227(define-public pybind11
28228 (package
28229 (name "pybind11")
28230 (version "3.0.4")
28231 (source (origin
28232 (method git-fetch)
28233 (uri (git-reference
28234 (url "https://github.com/pybind/pybind11")
28235 (commit (string-append "v" version))))
28236 (sha256
28237 (base32
28238 "1ad9215jz078al84h43f6fhwg80d7sjdc72r8hi3n419x8hag4j1"))
28239 (file-name (git-file-name name version))))
28240 (build-system cmake-build-system)
28241 (arguments
28242 (list
28243 ;; TODO: Rewrite package definition with pyproject, I had issues to
28244 ;; enable tests and install includes, see the discussion in
28245 ;; guix/guix!4696 where it was initially proposed.
28246 #:configure-flags
28247 #~(list "-DPYBIND11_NOPYTHON=OFF"
28248 "-DPYBIND11_PYTEST_ARGS=-v"
28249 "-DPYBIND11_TEST_SMART_HOLDER=ON")
28250 #:phases
28251 #~(modify-phases %standard-phases
28252 (add-after 'install 'build-python-library
28253 (lambda _
28254 (with-directory-excursion "../source"
28255 (setenv "PYBIND11_USE_CMAKE" "yes")
28256 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
28257 "--prefix" #$output "."))))
28258 (replace 'check
28259 (lambda* (#:key tests? #:allow-other-keys)
28260 (when tests?
28261 ;; Steps are taken from <.github/workflows/ci.yml>.
28262 (invoke "cmake" "--build" "."
28263 "--target" "pytest")
28264 (invoke "cmake" "--build" "."
28265 "--target" "cpptest")
28266 (invoke "cmake" "--build" "."
28267 "--target" "test_cmake_build")
28268 (invoke "cmake" "--build" "."
28269 "--target" "test_cross_module_rtti")))))))
28270 (inputs (list boost))
28271 (native-inputs
28272 (list catch2-2
28273 eigen
28274 python-pytest
28275 python-wrapper
28276 python-scikit-build-core-bootstrap))
28277 (home-page "https://github.com/pybind/pybind11/")
28278 (synopsis "Seamless operability between C++11 and Python")
28279 (description
28280 "@code{pybind11} is a lightweight header-only library that exposes C++
28281types in Python and vice versa, mainly to create Python bindings of existing
28282C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28283library: to minimize boilerplate code in traditional extension modules by
28284inferring type information using compile-time introspection.")
28285 (license license:bsd-3)))
28286
28287(define-public pybind11-2
28288 (package
28289 (inherit pybind11)
28290 (name "pybind11")
28291 (version "2.13.6")
28292 (source
28293 (origin
28294 (method git-fetch)
28295 (uri (git-reference
28296 (url "https://github.com/pybind/pybind11")
28297 (commit (string-append "v" version))))
28298 (file-name (git-file-name name version))
28299 (sha256
28300 (base32 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))))
28301 (build-system cmake-build-system)
28302 (arguments
28303 (list
28304 #:configure-flags
28305 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28306 (assoc-ref %build-inputs "catch2")
28307 "/include/catch"))
28308 #:modules '((guix build cmake-build-system)
28309 ((guix build gnu-build-system) #:prefix gnu:)
28310 (guix build utils))
28311 #:phases
28312 #~(modify-phases %standard-phases
28313 (replace 'check
28314 (lambda args
28315 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28316 (add-after 'install 'install-python
28317 (lambda _
28318 (with-directory-excursion "../source"
28319 (setenv "PYBIND11_USE_CMAKE" "yes")
28320 (invoke "python" "setup.py" "install"
28321 "--single-version-externally-managed"
28322 "--root=/"
28323 (string-append "--prefix=" #$output))))))))
28324 (native-inputs
28325 (list catch2-1
28326 eigen
28327 python-pytest
28328 python-setuptools
28329 python-wrapper))
28330 (inputs '())))
28331
28332(define-public python-pooch
28333 (package
28334 (name "python-pooch")
28335 (version "1.9.0")
28336 (source
28337 (origin
28338 (method git-fetch)
28339 (uri (git-reference
28340 (url "https://github.com/fatiando/pooch")
28341 (commit (string-append "v" version))))
28342 (file-name (git-file-name name version))
28343 (sha256
28344 (base32 "0k8s9npjym80wpac77fvf1vnx5qm5c2pr7x39j8hh0cglfxmgii8"))))
28345 (build-system pyproject-build-system)
28346 (arguments
28347 (list
28348 #:test-flags #~(list "-m" "not network")))
28349 (native-inputs
28350 (list python-pytest
28351 python-pytest-httpserver
28352 python-pytest-localftpserver
28353 python-setuptools
28354 python-setuptools-scm))
28355 (propagated-inputs
28356 (list python-packaging
28357 python-platformdirs
28358 python-requests))
28359 (home-page "https://github.com/fatiando/pooch")
28360 (synopsis "Manage your Python library's sample data files")
28361 (description
28362 "Pooch manages your Python library's sample data files: it automatically
28363downloads and stores them in a local directory, with support for versioning
28364and corruption checks.")
28365 (license license:bsd-3)))
28366
28367(define-public python-fasteners
28368 (package
28369 (name "python-fasteners")
28370 (version "0.20")
28371 (source (origin
28372 ;; No tests in the pypi tarball
28373 (method git-fetch)
28374 (uri (git-reference
28375 (url "https://github.com/harlowja/fasteners")
28376 (commit version)))
28377 (file-name (git-file-name name version))
28378 (sha256
28379 (base32
28380 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28381 (build-system pyproject-build-system)
28382 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28383 python-setuptools python-pytest))
28384 (home-page "https://github.com/harlowja/fasteners")
28385 (synopsis "Python package that provides useful locks")
28386 (description
28387 "This package provides a Python program that provides following locks:
28388
28389@itemize
28390@item Locking decorator
28391@item Reader-writer locks
28392@item Inter-process locks
28393@item Generic helpers
28394@end itemize\n")
28395 (license license:asl2.0)))
28396
28397(define-public python-requests-file
28398 (package
28399 (name "python-requests-file")
28400 (version "3.0.1")
28401 (source
28402 (origin
28403 (method git-fetch)
28404 (uri (git-reference
28405 (url "https://codeberg.org/dashea/requests-file")
28406 (commit version)))
28407 (file-name (git-file-name name version))
28408 (sha256
28409 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28410 (build-system pyproject-build-system)
28411 (native-inputs (list python-pytest python-setuptools))
28412 (propagated-inputs (list python-requests))
28413 (home-page "https://codeberg.org/dashea/requests-file")
28414 (synopsis "File transport adapter for Requests")
28415 (description
28416 "Requests-File is a transport adapter for use with the Requests Python
28417library to allow local file system access via @code{file://} URLs.")
28418 (license license:asl2.0)))
28419
28420(define-public python-identify
28421 (package
28422 (name "python-identify")
28423 (version "2.6.14")
28424 (source
28425 (origin
28426 ;; There are no tests in the PyPI tarball.
28427 (method git-fetch)
28428 (uri (git-reference
28429 (url "https://github.com/chriskuehl/identify")
28430 (commit (string-append "v" version))))
28431 (file-name (git-file-name name version))
28432 (sha256
28433 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28434 (build-system pyproject-build-system)
28435 (native-inputs
28436 (list python-pytest
28437 python-setuptools
28438 python-ukkonen))
28439 (home-page "https://github.com/chriskuehl/identify")
28440 (synopsis "File identification library for Python")
28441 (description
28442 "@code{identify} is a file identification library for Python. Given
28443a file (or some information about a file), return a set of standardized tags
28444identifying what the file is.")
28445 (license license:expat)))
28446
28447(define-public python-nodeenv
28448 (package
28449 (name "python-nodeenv")
28450 (version "1.8.0")
28451 (source
28452 (origin
28453 ;; There's no tarball in PyPI.
28454 (method git-fetch)
28455 (uri (git-reference
28456 (url "https://github.com/ekalinin/nodeenv")
28457 (commit version)))
28458 (file-name (git-file-name name version))
28459 (sha256
28460 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28461 (build-system pyproject-build-system)
28462 (arguments
28463 (list #:test-flags
28464 #~(list "-k" (string-append
28465 "not test_smoke"
28466 " and not test_smoke_n_system_special_chars"))))
28467 (native-inputs
28468 (list python-mock
28469 python-pytest
28470 python-setuptools
28471 python-wheel))
28472 (home-page "https://ekalinin.github.io/nodeenv/")
28473 (synopsis "Create isolated node.js environments")
28474 (description
28475 "Nodeenv (node.js virtual environment) is a tool to create isolated
28476node.js environments. It creates an environment that has its own installation
28477directories, that doesn't share libraries with other node.js virtual
28478environments.")
28479 (license license:bsd-3)))
28480
28481(define-public python-pynamecheap
28482 (package
28483 (name "python-pynamecheap")
28484 (version "0.0.3")
28485 (source
28486 (origin
28487 (method url-fetch)
28488 (uri (pypi-uri "PyNamecheap" version))
28489 (sha256
28490 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28491 (build-system pyproject-build-system)
28492 (arguments (list #:tests? #f)) ; No tests.
28493 (native-inputs (list python-setuptools))
28494 (propagated-inputs (list python-requests))
28495 (home-page "https://github.com/Bemmu/PyNamecheap")
28496 (synopsis "Namecheap API client in Python")
28497 (description
28498 "PyNamecheap is a Namecheap API client in Python.")
28499 (license license:expat)))
28500
28501(define-public python-pynput
28502 (package
28503 (name "python-pynput")
28504 (version "1.8.1")
28505 (source
28506 (origin
28507 (method git-fetch)
28508 (uri (git-reference
28509 (url "https://github.com/moses-palmer/pynput")
28510 (commit (string-append "v" version))))
28511 (file-name (git-file-name name version))
28512 (sha256
28513 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28514 (build-system pyproject-build-system)
28515 (arguments
28516 (list
28517 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28518 #:phases
28519 #~(modify-phases %standard-phases
28520 (add-after 'unpack 'relax-requirements
28521 (lambda _
28522 (substitute* "setup.py"
28523 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28524 "RUNTIME_PACKAGES"))))
28525 (add-before 'sanity-check 'start-xserver
28526 (lambda* (#:key inputs #:allow-other-keys)
28527 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28528 (system (format #f "~a :1 -screen 0 640x480x24 &"
28529 Xvfb))
28530 (setenv "DISPLAY" ":1")))))))
28531 (propagated-inputs
28532 (list python-evdev python-xlib))
28533 (native-inputs
28534 (list python-setuptools xorg-server-for-tests))
28535 (home-page "https://github.com/moses-palmer/pynput")
28536 (synopsis "Send virtual input commands")
28537 (description
28538 "This package provides tools to monitor and control user input devices in
28539Python.")
28540 (license license:lgpl3)))
28541
28542(define-public python-pynixutil
28543 (package
28544 (name "python-pynixutil")
28545 (version "0.5.0")
28546 (source
28547 (origin
28548 (method git-fetch)
28549 (uri (git-reference
28550 (url "https://github.com/nix-community/pynixutil")
28551 (commit version)))
28552 (file-name (git-file-name name version))
28553 (sha256
28554 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28555 (build-system pyproject-build-system)
28556 (arguments
28557 (list
28558 #:test-flags
28559 ;; Tests require nix in the PATH.
28560 #~(list "--ignore=tests/test_drv.py")
28561 #:phases
28562 #~(modify-phases %standard-phases
28563 (add-after 'unpack 'use-poetry-core
28564 (lambda _
28565 ;; Patch to use the core poetry API.
28566 (substitute* "pyproject.toml"
28567 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28568 (native-inputs
28569 (list python-poetry-core
28570 python-pytest))
28571 (home-page "https://github.com/nix-community/pynixutil")
28572 (synopsis "Utility functions for working with data from Nix in Python")
28573 (description
28574 "@code{pynixutil} provides functions for base32 encoding/decoding and
28575derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28576@code{drvparse()}.")
28577 (license license:expat)))
28578
28579(define-public python-dns-lexicon
28580 (package
28581 (name "python-dns-lexicon")
28582 (version "3.21.1")
28583 (source
28584 (origin
28585 (method git-fetch)
28586 (uri (git-reference
28587 (url "https://github.com/dns-lexicon/dns-lexicon")
28588 (commit (string-append "v" version))))
28589 (file-name (git-file-name name version))
28590 (sha256
28591 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28592 (build-system pyproject-build-system)
28593 (arguments
28594 (list
28595 ;; Integration tests require network access.
28596 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28597 #:phases
28598 #~(modify-phases %standard-phases
28599 (add-before 'check 'configure-tests
28600 (lambda _
28601 (setenv "HOME" (getcwd)))))))
28602 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28603 (propagated-inputs
28604 (list python-beautifulsoup4
28605 python-cryptography
28606 python-dnspython
28607 python-pyotp
28608 python-pyyaml
28609 python-requests
28610 python-tldextract))
28611 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28612 (synopsis "Manipulate DNS records on various DNS providers")
28613 (description
28614 "Lexicon provides a way to manipulate DNS records on multiple DNS
28615providers in a standardized way. It has a CLI but it can also be used as a
28616Python library. It was designed to be used in automation, specifically with
28617Let's Encrypt.")
28618 (license license:expat)))
28619
28620(define-public python-cfgv
28621 (package
28622 (name "python-cfgv")
28623 (version "3.4.0")
28624 (source
28625 (origin
28626 ;; There are no tests in the PyPI tarball.
28627 (method git-fetch)
28628 (uri (git-reference
28629 (url "https://github.com/asottile/cfgv")
28630 (commit (string-append "v" version))))
28631 (file-name (git-file-name name version))
28632 (sha256
28633 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28634 (build-system pyproject-build-system)
28635 (native-inputs
28636 (list python-pytest python-setuptools python-wheel))
28637 (home-page "https://github.com/asottile/cfgv")
28638 (synopsis "Configuration validation library")
28639 (description
28640 "This library helps to validate configuration files and produce human
28641readable error messages.")
28642 (license license:expat)))
28643
28644(define-public python-commandlines
28645 (package
28646 (name "python-commandlines")
28647 (version "0.4.1")
28648 (source
28649 (origin
28650 (method git-fetch)
28651 (uri (git-reference
28652 (url "https://github.com/chrissimpkins/commandlines")
28653 (commit (string-append "v" version))))
28654 (file-name (git-file-name name version))
28655 (sha256
28656 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28657 (build-system pyproject-build-system)
28658 (native-inputs (list python-pytest python-setuptools))
28659 (home-page "https://github.com/chrissimpkins/commandlines")
28660 (synopsis "Command line argument to object parsing library")
28661 (description
28662 "@code{Commandlines} is a Python library for command line application
28663development that supports command line argument parsing, command string
28664validation testing and application logic.")
28665 (license license:expat)))
28666
28667;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28668;; python-numba. They have a very inflexible relationship.
28669(define-public python-numba
28670 (package
28671 (name "python-numba")
28672 (version "0.66.0")
28673 (source
28674 (origin
28675 (method url-fetch)
28676 (uri (pypi-uri "numba" version))
28677 (sha256
28678 (base32
28679 "0qyk70nfvhxqxm1vz1qq072n9jvpl6hab8ymlslmxh161qxfc05r"))))
28680 (build-system pyproject-build-system)
28681 (arguments
28682 (list
28683 ;; tests: 10743 tests (skipped=699, expected failures=23)
28684 #:test-backend #~'custom
28685 #:test-flags
28686 ;; Check <buildscripts> directory for more build/tests examples.
28687 #~(list "-m" "numba.runtests"
28688 "--exclude-tags='long_running'"
28689 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28690 "-b"
28691 "-v"
28692 "--"
28693 "numba.tests")
28694 #:phases
28695 #~(modify-phases %standard-phases
28696 (add-after 'unpack 'disable-failing-tests
28697 (lambda _
28698 ;; This expects to be able to run pip.
28699 (delete-file "numba/tests/test_sysinfo.py")
28700 ;; This fails nondeterministically, possibly depending on CPU.
28701 ;; https://github.com/numba/numba/issues/8282.
28702 (substitute* "numba/tests/test_function_type.py"
28703 (("def test_wrapper_address_protocol_libm")
28704 "def disabled_test_wrapper_address_protocol_libm"))
28705 (substitute* "numba/tests/test_caching.py"
28706 ;; RuntimeError: cannot cache function 'simple_usecase': no
28707 ;; locator available for file
28708 (("def test_non_creatable_pycache")
28709 "def __off_test_non_creatable_pycache")
28710 (("def test_non_writable_pycache")
28711 "def __off_test_non_writable_pycache")
28712 ;; AssertionError: None is not an instance of <class
28713 ;; 'numba.core.caching.UserWideCacheLocator'>
28714 (("def test_frozen")
28715 "def __off_test_frozen"))))
28716 (add-before 'build 'disable-proprietary-features
28717 (lambda _
28718 (setenv "NUMBA_DISABLE_HSA" "1")
28719 (setenv "NUMBA_DISABLE_CUDA" "1")))
28720 (add-before 'check 'pre-check
28721 (lambda _
28722 (setenv "HOME" "/tmp")
28723 ;; XXX: Something is wrong with the PYTHONPATH when running the
28724 ;; tests from the build directory, as it complains about not
28725 ;; being able to import certain modules.
28726 (delete-file-recursively "numba"))))))
28727 (native-inputs
28728 (list python-setuptools))
28729 (propagated-inputs
28730 (list python-llvmlite
28731 python-numpy))
28732 (home-page "https://numba.pydata.org")
28733 (synopsis "Compile Python code using LLVM")
28734 (description "Numba gives you the power to speed up your applications with
28735high performance functions written directly in Python. With a few
28736annotations, array-oriented and math-heavy Python code can be just-in-time
28737compiled to native machine instructions, similar in performance to C, C++ and
28738Fortran, without having to switch languages or Python interpreters.
28739
28740Numba works by generating optimized machine code using the LLVM compiler
28741infrastructure at import time, runtime, or statically (using the included pycc
28742tool).")
28743 (license license:bsd-3)))
28744
28745(define-public python-numcodecs
28746 (package
28747 (name "python-numcodecs")
28748 (version "0.15.1") ;newer version needs c-blosc 1.26+
28749 (source
28750 (origin
28751 (method git-fetch)
28752 (uri (git-reference
28753 (url "https://github.com/zarr-developers/numcodecs")
28754 (commit (string-append "v" version))))
28755 (file-name (git-file-name name version))
28756 (sha256
28757 (base32 "19i30k4zn6rjqlrfk20yh75r1di3j7mli2mn9n3pyxmwaq7hiasz"))
28758 (modules '((guix build utils)))
28759 (snippet
28760 '(begin
28761 ;; Only add CFLAGS on architectures where they are supported
28762 (substitute* "setup.py"
28763 (("import sys")
28764 "import sys\nimport platform")
28765 (("os\\.name == 'posix'")
28766 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28767 " os.name + platform.machine() == 'posixx86'")))
28768 (delete-file-recursively "c-blosc")))))
28769 (build-system pyproject-build-system)
28770 (arguments
28771 (list
28772 ;; tests: 714 passed, 39 skipped, 36 xfailed, 20 warnings
28773 #:phases
28774 #~(modify-phases %standard-phases
28775 (add-after 'unpack 'disable-avx2
28776 (lambda _
28777 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28778 (add-after 'unpack 'unbundle
28779 (lambda _
28780 (substitute* "setup.py"
28781 (("sources=sources \\+ blosc_sources,")
28782 "sources=sources,")
28783 (("extra_compile_args=extra_compile_args")
28784 "extra_compile_args=list(base_compile_args)")
28785 (("'numcodecs.zstd',")
28786 "'numcodecs.zstd', libraries=['zstd'], ")
28787 (("'numcodecs.lz4',")
28788 "'numcodecs.lz4', libraries=['lz4'], ")
28789 (("'numcodecs.blosc',")
28790 "'numcodecs.blosc', libraries=['blosc'], "))))
28791 (add-before 'build 'substitute-git-submodules
28792 (lambda _
28793 (symlink #$(package-source (this-package-input "c-blosc"))
28794 "c-blosc")))
28795 (replace 'check
28796 (lambda* (#:key tests? test-flags #:allow-other-keys)
28797 (with-directory-excursion #$output
28798 (apply invoke "pytest" "-vv" test-flags)
28799 (delete-file-recursively ".pytest_cache")))))))
28800 (native-inputs
28801 (list python-cython
28802 python-py-cpuinfo
28803 python-pytest
28804 python-setuptools
28805 python-setuptools-scm))
28806 (inputs
28807 (list c-blosc
28808 lz4
28809 zlib
28810 (list zstd "lib")))
28811 (propagated-inputs
28812 (list python-deprecated
28813 python-numpy
28814 ;; [optional]
28815 python-msgpack))
28816 (home-page "https://github.com/zarr-developers/numcodecs")
28817 (synopsis "Buffer compression and transformation codecs")
28818 (description
28819 "This Python package provides buffer compression and transformation
28820codecs for use in data storage and communication applications.")
28821 (license license:expat)))
28822
28823(define-public python-asciitree
28824 (package
28825 (name "python-asciitree")
28826 (version "0.3.3")
28827 (source
28828 (origin
28829 (method git-fetch)
28830 (uri (git-reference
28831 (url "https://github.com/mbr/asciitree")
28832 (commit version)))
28833 (file-name (git-file-name name version))
28834 (sha256
28835 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28836 (build-system pyproject-build-system)
28837 (native-inputs (list python-pytest python-setuptools))
28838 (home-page "https://github.com/mbr/asciitree")
28839 (synopsis "Draws ASCII trees")
28840 (description "This package draws tree structures using characters.")
28841 (license license:expat)))
28842
28843(define-public python-dill
28844 (package
28845 (name "python-dill")
28846 (version "0.4.1")
28847 (source
28848 (origin
28849 (method git-fetch)
28850 (uri (git-reference
28851 (url "https://github.com/uqfoundation/dill")
28852 (commit version)))
28853 (file-name (git-file-name name version))
28854 (sha256
28855 (base32 "09ig6820sd68cjixl5vkwkwvvgdii8qhaikc1rxhabhwxfymc7v2"))))
28856 (build-system pyproject-build-system)
28857 (arguments
28858 (list #:test-backend #~'custom
28859 #:test-flags #~(list "dill/tests/__main__.py")))
28860 (native-inputs
28861 (list python-setuptools))
28862 (home-page "http://dill.rtfd.io/")
28863 (synopsis "Serialize all of Python")
28864 (description "Dill extends Python's @code{pickle} module for serializing
28865and de-serializing Python objects to the majority of the built-in Python
28866types. Dill provides the user the same interface as the @code{pickle} module,
28867and also includes some additional features. In addition to pickling Python
28868objects, @code{dill} provides the ability to save the state of an interpreter
28869session in a single command. Hence, it would be feasible to save a
28870interpreter session, close the interpreter, ship the pickled file to another
28871computer, open a new interpreter, unpickle the session and thus continue from
28872the saved state of the original interpreter session.")
28873 (license license:bsd-3)))
28874
28875(define-public python-multiprocess
28876 (package
28877 (name "python-multiprocess")
28878 (version "0.70.18")
28879 (source
28880 (origin
28881 (method url-fetch)
28882 (uri (pypi-uri "multiprocess" version))
28883 (sha256
28884 (base32
28885 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28886 (build-system pyproject-build-system)
28887 (arguments
28888 (list
28889 #:phases
28890 #~(modify-phases %standard-phases
28891 (add-after 'unpack 'disable-broken-tests
28892 (lambda* (#:key inputs #:allow-other-keys)
28893 ;; The "wait_result" and "shared_memory..." tests are broken as
28894 ;; there is no keyboard interrupt.
28895 ;;
28896 ;; The "preload_resources" test fails as it cannot find
28897 ;; mp_preload.py.
28898 (substitute*
28899 (string-append "py" (python-version
28900 (assoc-ref inputs "python"))
28901 "/multiprocess/tests/__init__.py")
28902 (("^(.*)def test_(\
28903wait_result|\
28904shared_memory_SharedMemoryServer_ignores_sigint|\
28905preload_resources\
28906)" line indent)
28907 (string-append indent
28908 "@unittest.skip(\"Disabled by Guix\")\n"
28909 line)))))
28910 (replace 'check
28911 (lambda* (#:key tests? #:allow-other-keys)
28912 (if tests?
28913 (invoke "python" "-m" "multiprocess.tests")
28914 (format #t "test suite not run~%")))))))
28915 (propagated-inputs
28916 (list python-dill))
28917 (native-inputs (list python-setuptools))
28918 (home-page "https://pypi.org/project/multiprocess/")
28919 (synopsis "Multiprocessing and multithreading in Python")
28920 (description
28921 "This package is a fork of the multiprocessing Python package, a package
28922which supports the spawning of processes using the API of the standard
28923library's @code{threading} module.")
28924 (license license:bsd-3)))
28925
28926(define-public python-multiprocessing-on-dill
28927 (package
28928 (name "python-multiprocessing-on-dill")
28929 (version "3.5.0a4")
28930 (source (origin
28931 (method url-fetch)
28932 (uri (pypi-uri "multiprocessing_on_dill" version))
28933 (sha256
28934 (base32
28935 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28936 (build-system pyproject-build-system)
28937 (propagated-inputs (list python-dill))
28938 (native-inputs (list python-pytest python-setuptools python-wheel))
28939 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28940 (synopsis "Multiprocessing using dill instead of pickle")
28941 (description
28942 "This package provides a friendly fork of multiprocessing which uses dill
28943instead of pickle.")
28944 (license license:psfl)))
28945
28946(define-public python-cytoolz
28947 (package
28948 (name "python-cytoolz")
28949 (version "1.0.1")
28950 (source
28951 (origin
28952 (method url-fetch)
28953 (uri (pypi-uri "cytoolz" version))
28954 (sha256
28955 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28956 (modules '((guix build utils)))
28957 (snippet
28958 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28959 (build-system pyproject-build-system)
28960 (arguments
28961 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28962 (native-inputs
28963 (list python-cython
28964 python-pytest
28965 python-setuptools
28966 python-wheel))
28967 (propagated-inputs
28968 (list python-toolz))
28969 (home-page "https://github.com/pytoolz/cytoolz")
28970 (synopsis "High performance functional utilities")
28971 (description
28972 "The cytoolz package implements the same API as provided by toolz. The
28973main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28974that is accessible to other projects developed in Cython.")
28975 (license license:bsd-3)))
28976
28977(define-public python-cloudpickle
28978 (package
28979 (name "python-cloudpickle")
28980 (version "3.1.0")
28981 (source
28982 (origin
28983 ;; Archive on pypi does not include test infrastructure.
28984 (method git-fetch)
28985 (uri (git-reference
28986 (url "https://github.com/cloudpipe/cloudpickle")
28987 (commit (string-append "v" version))))
28988 (file-name (git-file-name name version))
28989 (sha256
28990 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28991 (build-system pyproject-build-system)
28992 (native-inputs
28993 (list python-flit-core
28994 python-psutil
28995 python-pytest))
28996 (home-page "https://github.com/cloudpipe/cloudpickle")
28997 (synopsis "Extended pickling support for Python objects")
28998 (description
28999 "Cloudpickle makes it possible to serialize Python constructs not
29000supported by the default pickle module from the Python standard library. It
29001is especially useful for cluster computing where Python expressions are
29002shipped over the network to execute on remote hosts, possibly close to the
29003data.")
29004 (license license:bsd-3)))
29005
29006(define-public python-locket
29007 (package
29008 (name "python-locket")
29009 (version "1.0.0")
29010 (source
29011 (origin
29012 (method git-fetch)
29013 (uri (git-reference
29014 (url "https://github.com/mwilliamson/locket.py")
29015 (commit version)))
29016 (file-name (git-file-name name version))
29017 (sha256
29018 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
29019 (build-system pyproject-build-system)
29020 ;; XXX: Requires python-spur, which requires another version of
29021 ;; python-paramiko.
29022 (arguments (list #:tests? #f))
29023 (native-inputs (list python-setuptools))
29024 (home-page "https://github.com/mwilliamson/locket.py")
29025 (synopsis "File-based locks for Python")
29026 (description
29027 "Locket implements a lock that can be used by multiple processes provided
29028they use the same path.")
29029 (license license:bsd-2)))
29030
29031(define-public python-loky
29032 (package
29033 (name "python-loky")
29034 (version "3.5.6")
29035 (source
29036 (origin
29037 (method git-fetch)
29038 (uri (git-reference
29039 (url "https://github.com/joblib/loky")
29040 (commit version)))
29041 (file-name (git-file-name name version))
29042 (sha256
29043 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
29044 (build-system pyproject-build-system)
29045 (arguments
29046 (list
29047 #:test-flags
29048 #~(list "-k" (string-join
29049 (list
29050 ;; Requires process control.
29051 "not (test_kill_process_tree"
29052 ;; Hardware dependent tests.
29053 "test_only_physical_cores_error"
29054 ;; Depends on previous results.
29055 "test_wait_result)")
29056 " or "))))
29057 (native-inputs
29058 (list python-packaging
29059 python-psutil
29060 python-pytest
29061 python-setuptools))
29062 (propagated-inputs
29063 (list python-cloudpickle))
29064 (home-page "https://loky.readthedocs.io")
29065 (synopsis "Robust and reusable Executor for joblib")
29066 (description
29067 "This package provides a robust implementation of
29068@code{concurrent.futures.ProcessPoolExecutor}.")
29069 (license license:bsd-3)))
29070
29071(define-public python-partd
29072 (package
29073 (name "python-partd")
29074 (version "1.4.2")
29075 (source
29076 (origin
29077 (method git-fetch)
29078 (uri (git-reference
29079 (url "https://github.com/dask/partd/")
29080 (commit version)))
29081 (file-name (git-file-name name version))
29082 (sha256
29083 (base32 "0mwcr2cy0j5j8c9n2wlrlpc5v4za2cdh8jwhm7vpai53lqyvfjlf"))
29084 (patches
29085 (list
29086 (origin
29087 (method url-fetch)
29088 (uri
29089 ;; Fix PandasColumns compatibility with pandas 3.0
29090 ;; StringDtype, from:
29091 ;; <https://github.com/dask/partd/pull/83>.
29092 (string-append "https://github.com/dask/partd/commit/"
29093 "3efd8ec7e35a7c0aa1ba15ba2cf0766af99d3c21.patch"))
29094 (file-name (string-append name "-PR-83-pandas-3-support.patch"))
29095 (sha256
29096 (base32
29097 "1sc6vmrqgqjl4rnw9gv8ymdfaqdi5razww8b322f7hpwhpdydnhk")))))))
29098 (build-system pyproject-build-system)
29099 (native-inputs
29100 (list python-pytest
29101 python-setuptools
29102 python-versioneer
29103 tzdata-for-tests))
29104 (propagated-inputs
29105 (list python-locket
29106 python-toolz
29107 ;; [complete]
29108 python-blosc
29109 python-numpy
29110 python-pandas
29111 python-pyzmq))
29112 (home-page "https://github.com/dask/partd/")
29113 (synopsis "Appendable key-value storage")
29114 (description
29115 "Partd stores key-value pairs. Values are raw bytes. We append on old
29116values. Partd excels at shuffling operations.")
29117 (license license:bsd-3)))
29118
29119(define-public python-fsspec
29120 (package
29121 (name "python-fsspec")
29122 (version "2026.1.0")
29123 (source
29124 (origin
29125 (method git-fetch)
29126 (uri (git-reference
29127 (url "https://github.com/fsspec/filesystem_spec")
29128 (commit version)))
29129 (file-name (git-file-name name version))
29130 (sha256
29131 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
29132 (build-system pyproject-build-system)
29133 (arguments
29134 (list
29135 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
29136 #:test-flags
29137 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
29138 "-k" (string-join
29139 ;; Test requires nentwork access
29140 (list "not test_async_cat_file_ranges"
29141 "test_gist_public_all_files"
29142 "test_gist_public_missing_file"
29143 "test_gist_public_one_file"
29144 ;; Test hangs
29145 "test_processes")
29146 " and not "))))
29147 ;; The most of the inputs are optional, project does not force to include
29148 ;; any dependencies according to pyproject.toml.
29149 (propagated-inputs
29150 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
29151 (native-inputs
29152 (list nss-certs-for-test
29153 python-hatch-vcs
29154 python-hatchling
29155 python-numpy
29156 python-pytest
29157 python-pytest-asyncio
29158 python-pytest-mock
29159 python-pytest-rerunfailures))
29160 (home-page "https://github.com/fsspec/filesystem_spec")
29161 (synopsis "File-system specification")
29162 (description "The purpose of this package is to produce a template or
29163specification for a file-system interface, that specific implementations
29164should follow, so that applications making use of them can rely on a common
29165behavior and not have to worry about the specific internal implementation
29166decisions with any given backend.")
29167 (license license:bsd-3)))
29168
29169(define-public python-ilinkedlist
29170 (package
29171 (name "python-ilinkedlist")
29172 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
29173 (revision . "0")))
29174 (version (git-version "0.4.0"
29175 (assoc-ref properties 'revision)
29176 (assoc-ref properties 'commit)))
29177 (home-page "https://github.com/luther9/ilinkedlist-py")
29178 (source
29179 (origin
29180 (method git-fetch)
29181 (uri (git-reference
29182 (url home-page)
29183 (commit (assoc-ref properties 'commit))))
29184 (file-name (git-file-name name version))
29185 (sha256
29186 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
29187 (build-system pyproject-build-system)
29188 (native-inputs (list python-pytest python-setuptools))
29189 (synopsis "Immutable linked list library")
29190 (description
29191 "This is a implementation of immutable linked lists for Python. It
29192contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
29193Since a linked list is treated as immutable, it is hashable, and its length
29194can be retrieved in constant time. Some of the terminology is inspired by
29195LISP. It is possible to create an improper list by creating a @code{Pair}
29196with a non-list @code{cdr}.")
29197 (license license:gpl3+)))
29198
29199(define-public python-readlike
29200 (package
29201 (name "python-readlike")
29202 (version "0.1.3")
29203 (source
29204 (origin
29205 (method git-fetch)
29206 (uri (git-reference
29207 (url "https://github.com/jangler/readlike")
29208 (commit version)))
29209 (file-name (git-file-name name version))
29210 (sha256
29211 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
29212 (build-system pyproject-build-system)
29213 (native-inputs (list python-pytest python-setuptools))
29214 (home-page "https://github.com/jangler/readlike")
29215 (synopsis "GNU Readline-like line editing module")
29216 (description
29217 "This Python module provides line editing functions similar to the default
29218Emacs-style ones of GNU Readline. Unlike the Python standard library's
29219@code{readline} package, this one allows access to those capabilities in settings
29220outside of a standard command-line interface. It is especially well-suited to
29221interfacing with Urwid, due to a shared syntax for describing key inputs.
29222
29223Currently, all stateless Readline commands are implemented. Yanking and history
29224are not supported.")
29225 (license license:expat)))
29226
29227(define-public python-reparser
29228 (package
29229 (name "python-reparser")
29230 (version "1.4.3")
29231 (source
29232 (origin
29233 (method git-fetch)
29234 (uri (git-reference
29235 (url "https://github.com/xmikos/reparser")
29236 (commit (string-append "v" version))))
29237 (file-name (git-file-name name version))
29238 (sha256
29239 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
29240 (build-system pyproject-build-system)
29241 (arguments (list #:tests? #f)) ; No tests.
29242 (native-inputs (list python-setuptools))
29243 (home-page "https://github.com/xmikos/reparser")
29244 (synopsis "Lexer/parser for inline markup based on regular expressions")
29245 (description
29246 "This Python library provides a simple lexer/parser for inline markup based
29247on regular expressions.")
29248 (license license:expat)))
29249
29250(define-public python-retrying
29251 (package
29252 (name "python-retrying")
29253 (version "1.4.1")
29254 (source
29255 (origin
29256 (method git-fetch)
29257 (uri (git-reference
29258 (url "https://github.com/groodt/retrying")
29259 (commit (string-append "v" version))))
29260 (file-name (git-file-name name version))
29261 (sha256
29262 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
29263 (build-system pyproject-build-system)
29264 (native-inputs (list python-pytest python-setuptools))
29265 (home-page "https://github.com/groodt/retrying")
29266 (synopsis "Library for adding retry behavior")
29267 (description "Retrying is a general-purpose retrying library to simplify
29268the task of adding retry behavior to just about anything.
29269
29270Features:
29271
29272@itemize
29273@item Generic Decorator API.
29274@item Specify stop condition (i.e. limit by number of attempts).
29275@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
29276@item Customize retrying on Exceptions.
29277@item Customize retrying on expected returned result.
29278@end itemize")
29279 (license license:asl2.0)))
29280
29281(define-public python-precis-i18n
29282 (package
29283 (name "python-precis-i18n")
29284 (version "1.1.1")
29285 (source
29286 (origin
29287 (method url-fetch)
29288 (uri (pypi-uri "precis_i18n" version))
29289 (sha256
29290 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
29291 (build-system pyproject-build-system)
29292 (native-inputs
29293 (list python-pytest
29294 python-setuptools
29295 python-wheel))
29296 (home-page "https://github.com/byllyfish/precis_i18n")
29297 (synopsis "Implementation of the PRECIS framework")
29298 (description
29299 "This module implements the PRECIS Framework as described in RFC 8264,
29300RFC 8265 and RFC 8266.")
29301 (license license:expat)))
29302
29303(define-public python-absl-py
29304 (package
29305 (name "python-absl-py")
29306 (version "2.3.1")
29307 (source
29308 (origin
29309 (method url-fetch)
29310 (uri (pypi-uri "absl_py" version))
29311 (sha256
29312 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29313 (build-system pyproject-build-system)
29314 (arguments
29315 (list #:tests? #f)) ;tests require bazel
29316 (native-inputs
29317 (list python-hatchling))
29318 (home-page "https://github.com/abseil/abseil-py")
29319 (synopsis "Abseil Python common libraries")
29320 (description
29321 "This package provides the Abseil Python Common Libraries, a collection
29322of Python libraries for building Python applications.")
29323 (license license:asl2.0)))
29324
29325(define-public python-astor
29326 (package
29327 (name "python-astor")
29328 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29329 (revision . "0")))
29330 (version (git-version "0.8.1"
29331 (assoc-ref properties 'revision)
29332 (assoc-ref properties 'commit)))
29333 (source
29334 (origin
29335 (method git-fetch)
29336 (uri (git-reference
29337 (url "https://github.com/berkerpeksag/astor")
29338 (commit (assoc-ref properties 'commit))))
29339 (file-name (git-file-name name version))
29340 (sha256
29341 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29342 (build-system pyproject-build-system)
29343 (arguments
29344 (list
29345 ;; FIXME: Unclear why this test fails.
29346 #:test-flags #~(list "--deselect=\
29347tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29348 (native-inputs (list python-pytest python-setuptools))
29349 (home-page "https://github.com/berkerpeksag/astor")
29350 (synopsis "Read and write Python ASTs")
29351 (description
29352 "Astor is designed to allow easy manipulation of Python source via the
29353Abstract Syntax Tree.")
29354 (license license:bsd-3)))
29355
29356(define-public python-astunparse
29357 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29358 ;; updated.
29359 (package
29360 (name "python-astunparse")
29361 (version "1.6.3")
29362 (source
29363 (origin
29364 (method url-fetch)
29365 (uri (pypi-uri "astunparse" version))
29366 (sha256
29367 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29368 (build-system pyproject-build-system)
29369 (arguments '(#:tests? #f)) ; there are none
29370 (native-inputs
29371 (list python-setuptools))
29372 (propagated-inputs
29373 (list python-six))
29374 (home-page "https://github.com/simonpercivall/astunparse")
29375 (synopsis "AST unparser for Python")
29376 (description "This package provides an AST unparser for Python. It is a
29377factored out version of @code{unparse} found in the Python source
29378distribution.")
29379 (license license:bsd-3)))
29380
29381(define-public python-gast
29382 (package
29383 (name "python-gast")
29384 (version "0.7.0")
29385 (source
29386 (origin
29387 (method git-fetch)
29388 (uri (git-reference
29389 (url "https://github.com/serge-sans-paille/gast/")
29390 (commit version)))
29391 (file-name (git-file-name name version))
29392 (sha256
29393 (base32 "05sxx7ixkchxvgrzpkqmklhzvsqydnyzrvzwfd5xkd3cv1arg9m5"))))
29394 (build-system pyproject-build-system)
29395 (native-inputs
29396 (list python-pytest
29397 python-setuptools))
29398 (home-page "https://github.com/serge-sans-paille/gast/")
29399 (synopsis "Generic Python AST that abstracts the underlying Python version")
29400 (description
29401 "GAST provides a compatibility layer between the AST of various Python
29402versions, as produced by @code{ast.parse} from the standard @code{ast}
29403module.")
29404 (license license:bsd-3)))
29405
29406;; XXX: Not maintained since 2022, leaf package.
29407(define-public python-attr
29408 (package
29409 (name "python-attr")
29410 (version "0.3.2")
29411 (source
29412 (origin
29413 (method url-fetch)
29414 (uri (pypi-uri "attr" version))
29415 (sha256
29416 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29417 (build-system pyproject-build-system)
29418 (arguments
29419 (list #:test-backend #~'custom
29420 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29421 (native-inputs
29422 (list python-setuptools))
29423 (home-page "https://github.com/denis-ryzhkov/attr")
29424 (synopsis "Decorator for attributes of target function or class")
29425 (description "Simple decorator to set attributes of target function or
29426class in a @acronym{DRY, Don't Repeat Yourself} way.")
29427 (license license:expat)))
29428
29429(define-public python-construct
29430 ;; Fixes not in a release yet.
29431 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29432 (revision "1"))
29433 (package
29434 (name "python-construct")
29435 (version (git-version "2.10.70" revision commit))
29436 (source
29437 (origin
29438 (method git-fetch)
29439 (uri (git-reference
29440 (url "https://github.com/construct/construct")
29441 (commit commit)))
29442 (file-name (git-file-name name version))
29443 (sha256
29444 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29445 (build-system pyproject-build-system)
29446 (arguments
29447 (list
29448 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29449 (native-inputs
29450 (list python-pytest python-setuptools))
29451 (propagated-inputs
29452 (list python-arrow
29453 python-cloudpickle
29454 python-cryptography
29455 python-lz4
29456 python-numpy
29457 python-ruamel.yaml))
29458 (home-page "https://construct.readthedocs.io")
29459 (synopsis "Declarative and symmetrical parser and builder for binary data")
29460 (description
29461 "This package provides both simple, atomic constructs (such as
29462integers of various sizes), as well as composite ones which allow you
29463form hierarchical and sequential structures of increasing complexity.
29464It features bit and byte granularity, easy debugging and testing, an
29465easy-to-extend subclass system, and lots of primitive constructs to
29466make your work easier.")
29467 (license license:expat))))
29468
29469(define-public python-outcome
29470 (package
29471 (name "python-outcome")
29472 (version "1.3.0.post0")
29473 (source
29474 (origin
29475 (method url-fetch)
29476 (uri (pypi-uri "outcome" version))
29477 (sha256
29478 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29479 (build-system pyproject-build-system)
29480 (native-inputs
29481 (list python-pytest
29482 python-pytest-asyncio
29483 python-setuptools))
29484 (propagated-inputs
29485 (list python-attrs))
29486 (home-page "https://github.com/python-trio/outcome")
29487 (synopsis "Capture the outcome of Python function calls")
29488 (description
29489 "Capture the outcome of Python function calls. Extracted from the Trio
29490project.")
29491 ;; Either license applies.
29492 (license (list license:expat license:asl2.0))))
29493
29494(define-public python-humanize
29495 (package
29496 (name "python-humanize")
29497 (version "4.14.0")
29498 (source
29499 (origin
29500 (method url-fetch)
29501 (uri (pypi-uri "humanize" version))
29502 (sha256
29503 (base32
29504 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29505 (build-system pyproject-build-system)
29506 (native-inputs
29507 (list python-freezegun
29508 python-hatch-vcs
29509 python-hatchling
29510 python-pytest))
29511 (home-page "https://github.com/jmoiron/humanize")
29512 (synopsis "Print numerical information in a human-readable form")
29513 (description "This package provides a Python module that displays numbers
29514and dates in \"human readable\" forms. For example, it would display
29515\"12345591313\" as \"12.3 billion\".")
29516 (license license:expat)))
29517
29518(define-public python-annoy
29519 (package
29520 (name "python-annoy")
29521 (version "1.17.3")
29522 (source
29523 (origin
29524 (method git-fetch)
29525 (uri (git-reference
29526 (url "https://github.com/spotify/annoy")
29527 (commit (string-append "v" version))))
29528 (file-name (git-file-name name version))
29529 (sha256
29530 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29531 (build-system pyproject-build-system)
29532 (arguments
29533 (list
29534 #:test-flags
29535 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29536 ;; name resolution>
29537 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29538 "--deselect=test/accuracy_test.py::test_nytimes_16"
29539 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29540 (native-inputs
29541 (list python-h5py
29542 python-numpy
29543 python-pytest
29544 python-setuptools))
29545 (home-page "https://github.com/spotify/annoy/")
29546 (synopsis "Approximate nearest neighbors library")
29547 (description
29548 "Annoy is a C++ library with Python bindings to search for points in
29549space that are close to a given query point. It also creates large read-only
29550file-based data structures that are @code{mmap}ped into memory so that many
29551processes may share the same data.")
29552 (license license:asl2.0)))
29553
29554(define-public python-croniter
29555 (package
29556 (name "python-croniter")
29557 (version "5.0.1")
29558 (source
29559 (origin
29560 (method git-fetch)
29561 (uri (git-reference
29562 (url "https://github.com/kiorky/croniter")
29563 (commit version)))
29564 (file-name (git-file-name name version))
29565 (sha256
29566 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29567 (build-system pyproject-build-system)
29568 (native-inputs (list python-pytest python-setuptools))
29569 (propagated-inputs (list python-dateutil python-pytz))
29570 (home-page "https://github.com/kiorky/croniter")
29571 (synopsis "Iterate datetime objects with cron-like syntax")
29572 (description
29573 "@code{croniter} provides iteration for datetime object with cron-like
29574format.")
29575 (license license:expat)))
29576
29577(define-public python-crontab
29578 (package
29579 (name "python-crontab")
29580 (version "3.3.0")
29581 (source
29582 (origin
29583 (method url-fetch)
29584 (uri (pypi-uri "python_crontab" version))
29585 (sha256
29586 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29587 (build-system pyproject-build-system)
29588 (arguments
29589 (list #:test-flags
29590 ;; This test is made for Windows.
29591 #~(list "-k" "not test_07_non_posix_shell")
29592 #:phases
29593 #~(modify-phases %standard-phases
29594 (add-after 'unpack 'defaults-to-mcron
29595 (lambda* (#:key inputs #:allow-other-keys)
29596 (substitute* "crontab.py"
29597 (("/usr/bin/crontab")
29598 (search-input-file inputs "bin/crontab"))))))))
29599 (inputs
29600 (list mcron python-dateutil))
29601 (native-inputs
29602 (list python-pytest python-setuptools))
29603 (home-page "https://gitlab.com/doctormo/python-crontab/")
29604 (synopsis "Module for reading and writing crontab files")
29605 (description "This Python module can read, write crontab files, and
29606access the system cron automatically and simply using a direct API.")
29607 (license license:lgpl3+)))
29608
29609(define-public python-apscheduler
29610 (package
29611 (name "python-apscheduler")
29612 (version "3.11.2")
29613 (source (origin
29614 (method url-fetch)
29615 (uri (pypi-uri "apscheduler" version))
29616 (sha256
29617 (base32
29618 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29619 (build-system pyproject-build-system)
29620 (arguments
29621 (list
29622 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29623 #:test-flags
29624 ;; XXX: Some tests hang or fail with verity of errors:
29625 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29626 #~(list #$@(map (lambda (test) (string-append "--deselect="
29627 "tests/test_executors.py::"
29628 test))
29629 (list "test_broken_pool"
29630 "test_max_instances[processpool-pytz]"
29631 "test_max_instances[processpool-zoneinfo]"
29632 "test_run_coroutine_job_tornado"
29633 "test_run_job_error[processpool-pytz]"
29634 "test_run_job_error[processpool-zoneinfo]"
29635 "test_submit_job[processpool-pytz-error]"
29636 "test_submit_job[processpool-pytz-executed]"
29637 "test_submit_job[processpool-pytz-missed]"
29638 "test_submit_job[processpool-zoneinfo-error]"
29639 "test_submit_job[processpool-zoneinfo-executed]"
29640 "test_submit_job[processpool-zoneinfo-missed]")))))
29641 (native-inputs
29642 (list python-anyio
29643 python-gevent
29644 python-pyside-6
29645 python-pytest
29646 python-pytest-asyncio
29647 python-pytz
29648 python-setuptools
29649 python-setuptools-scm
29650 python-sqlalchemy
29651 python-tornado
29652 python-twisted))
29653 (propagated-inputs
29654 (list python-tzlocal))
29655 (home-page "https://github.com/agronholm/apscheduler")
29656 (synopsis "Task scheduling library for Python")
29657 (description "Advanced Python Scheduler (APScheduler) is a Python library
29658that lets you schedule your Python code to be executed later, either just once
29659or periodically.
29660
29661You can add new jobs or remove old ones on the fly as you please. If you store
29662your jobs in a database, they will also survive scheduler restarts and maintain
29663their state. When the scheduler is restarted, it will then run all the jobs it
29664should have run while it was offline.")
29665 (license license:expat)))
29666
29667(define-public python-ifaddr
29668 (package
29669 (name "python-ifaddr")
29670 (version "0.2.0")
29671 (source
29672 (origin
29673 (method url-fetch)
29674 (uri (pypi-uri "ifaddr" version))
29675 (sha256
29676 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29677 (snippet #~(delete-file "ifaddr/_win32.py"))))
29678 (build-system pyproject-build-system)
29679 (native-inputs
29680 (list python-pytest python-setuptools python-wheel))
29681 (home-page "https://github.com/pydron/ifaddr")
29682 (synopsis "Network interface and IP address enumeration library")
29683 (description
29684 "This package provides a network interface and IP address enumeration
29685library in Python.")
29686 (license license:expat)))
29687
29688(define-public python-berkeleydb
29689 (package
29690 (name "python-berkeleydb")
29691 (version "18.1.15")
29692 (source
29693 (origin
29694 (method url-fetch)
29695 (uri (pypi-uri "berkeleydb" version))
29696 (sha256
29697 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29698 (build-system pyproject-build-system)
29699 (arguments
29700 (list
29701 #:test-backend #~'custom
29702 #:test-flags #~(list "test.py" "-v")
29703 #:phases
29704 #~(modify-phases %standard-phases
29705 (add-after 'unpack 'configure-locations
29706 (lambda* (#:key inputs #:allow-other-keys)
29707 (setenv "BERKELEYDB_DIR"
29708 (assoc-ref inputs "bdb"))
29709 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29710 "1")))
29711 (add-after 'unpack 'remove-legacy
29712 (lambda _
29713 (substitute* "pyproject.toml"
29714 ((":__legacy__") "")))))))
29715 (native-inputs (list python-setuptools))
29716 (inputs (list bdb))
29717 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29718 (synopsis "Python bindings for Oracle Berkeley DB")
29719 (description
29720 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29721C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29722Transaction objects, and each of these is exposed as a Python type in the
29723bsddb3.db module. The database objects can use various access methods: btree,
29724hash, recno, and queue. Complete support of Berkeley DB distributed
29725transactions. Complete support for Berkeley DB Replication Manager.
29726Complete support for Berkeley DB Base Replication. Support for RPC.")
29727 (license license:bsd-3)))
29728
29729;; Last version before rename to python-berkeleydb.
29730;; This package is close to deprecation.
29731(define-public python-bsddb3
29732 (package
29733 (inherit python-berkeleydb)
29734 (name "python-bsddb3")
29735 (version "6.2.9")
29736 (source
29737 (origin
29738 (method url-fetch)
29739 (uri (pypi-uri "bsddb3" version))
29740 (sha256
29741 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29742 (arguments
29743 (substitute-keyword-arguments arguments
29744 ;; Tests started failing from [email protected].
29745 ;; The package is in a pre-deprecation phase, so I didn't bother
29746 ;; to try and patch them, but sanity-check passes so the package
29747 ;; itself is likely fine.
29748 ((#:tests? tests? #t)
29749 #f)
29750 ((#:phases phases #~%standard-phases)
29751 #~(modify-phases #$phases
29752 (delete 'remove-legacy)))
29753 ((#:test-flags test-flags #~(list))
29754 #~(list "test3.py" "-v"))))))
29755
29756(define-public python-dbfread
29757 (package
29758 (name "python-dbfread")
29759 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29760 (revision . "0")))
29761 (version (git-version "2.0.7"
29762 (assoc-ref properties 'revision)
29763 (assoc-ref properties 'commit)))
29764 (source
29765 (origin
29766 (method git-fetch)
29767 (uri (git-reference
29768 (url "https://github.com/olemb/dbfread")
29769 (commit (assoc-ref properties 'commit))))
29770 (file-name (git-file-name name version))
29771 (sha256
29772 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29773 (build-system pyproject-build-system)
29774 (arguments
29775 (list
29776 #:phases
29777 #~(modify-phases %standard-phases
29778 (add-after 'unpack 'relax-setup.py
29779 (lambda _
29780 (substitute* "setup.py"
29781 (("python_requires.*")
29782 "")))))))
29783 (native-inputs (list python-pytest python-setuptools))
29784 (home-page "https://dbfread.readthedocs.io")
29785 (synopsis "Read DBF Files with Python")
29786 (description
29787 "This library reads DBF files and returns the data as native Python data
29788types for further processing. It is primarily intended for batch jobs and
29789one-off scripts.")
29790 (license license:expat)))
29791
29792(define-public python-cached-property
29793 (package
29794 (name "python-cached-property")
29795 (version "2.0.1")
29796 (source
29797 (origin
29798 (method url-fetch)
29799 (uri (pypi-uri "cached_property" version))
29800 (sha256
29801 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29802 (build-system pyproject-build-system)
29803 (native-inputs
29804 (list python-freezegun
29805 python-pytest
29806 python-setuptools
29807 python-wheel))
29808 (home-page "https://github.com/pydanny/cached-property")
29809 (synopsis "Decorator for caching properties in classes")
29810 (description
29811 "This package provides a decorator which makes caching
29812time-or-computationally-expensive properties quick and easy and works in
29813Python 2 or 3.")
29814 (license license:bsd-3)))
29815
29816(define-public python-folium
29817 (package
29818 (name "python-folium")
29819 (version "0.19.4")
29820 (source
29821 (origin
29822 ;; PyPI has a ".whl" file but not a proper source release.
29823 ;; Thus, fetch code from Git.
29824 (method git-fetch)
29825 (uri (git-reference
29826 (url "https://github.com/python-visualization/folium")
29827 (commit (string-append "v" version))))
29828 (file-name (git-file-name name version))
29829 (sha256
29830 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29831 (build-system pyproject-build-system)
29832 (arguments
29833 (list #:test-flags
29834 ;; This file requires Selenium.
29835 #~(list "--ignore" "tests/selenium/test_selenium.py"
29836 "-k" (string-append
29837 ;; The tests below also require Selenium.
29838 "not test__repr_png_is_bytes"
29839 " and not test_valid_png"
29840 " and not test_valid_png_size"
29841 " and not test_geojson"
29842 " and not test_heat_map_with_weights"
29843 ;; This performs an online request.
29844 " and not test_json_request"
29845 ;; Requires geodatasets package.
29846 " and not test_timedynamic_geo_json"
29847 ;; AssertionError.
29848 " and not test_minimap"))))
29849 (propagated-inputs
29850 (list python-branca
29851 python-jinja2
29852 python-numpy
29853 python-requests
29854 python-xyzservices))
29855 (native-inputs
29856 (list python-geopandas
29857 python-nbconvert
29858 python-pandas
29859 python-pillow
29860 python-pytest
29861 python-selenium
29862 python-setuptools
29863 python-setuptools-scm
29864 python-wheel))
29865 (home-page "https://github.com/python-visualization/folium")
29866 (synopsis "Make beautiful maps with Leaflet.js & Python")
29867 (description "@code{folium} makes it easy to visualize data that’s been
29868manipulated in Python on an interactive leaflet map. It enables both the
29869binding of data to a map for @code{choropleth} visualizations as well as
29870passing rich vector/raster/HTML visualizations as markers on the map.
29871
29872The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29873Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29874supports Image, Video, GeoJSON and TopoJSON overlays.")
29875 (license license:expat)))
29876
29877(define-public python-mercantile
29878 (package
29879 (name "python-mercantile")
29880 (version "1.2.1")
29881 (source
29882 (origin
29883 (method git-fetch)
29884 (uri (git-reference
29885 (url "https://github.com/mapbox/mercantile")
29886 (commit version)))
29887 (file-name (git-file-name name version))
29888 (sha256
29889 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29890 (build-system pyproject-build-system)
29891 (propagated-inputs (list python-click))
29892 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29893 python-setuptools))
29894 (home-page "https://github.com/mapbox/mercantile")
29895 (synopsis "Web mercator XYZ tile utilities")
29896 (description
29897 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29898@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29899left corner and bounding longitudes and latitudes for XYZ tiles, a
29900@code{xy(lng, lat)} function that returns spherical mercator x and y
29901coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29902containing a given point, and quadkey conversion functions
29903@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29904translating between quadkey and tile coordinates.")
29905 (license license:bsd-3)))
29906
29907(define-public jube
29908 (package
29909 ;; This is a command-line tool, so no "python-" prefix.
29910 (name "jube")
29911 (version "2.7.1")
29912 (source
29913 (origin
29914 (method url-fetch)
29915 (uri (string-append
29916 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29917 version))
29918 (sha256
29919 (base32 "1z7cz7z2awwc1mq18whs9p9n7476l4sg2nk6vy2xf97jidd512zy"))
29920 (file-name (string-append "jube-" version ".tar.gz"))))
29921 (build-system pyproject-build-system)
29922 (arguments
29923 (list
29924 #:tests? #f)) ; No tests.
29925 (propagated-inputs (list python-pyyaml))
29926 (native-inputs (list python-setuptools))
29927 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29928 (synopsis "Benchmarking environment")
29929 (description
29930 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29931benchmarked application, benchmark data is stored in a format that allows JUBE
29932to deduct the desired information. This data can be parsed by automatic pre-
29933and post-processing scripts that draw information and store it more densely
29934for manual interpretation.")
29935 (license license:gpl3+)))
29936
29937(define-public python-pyroutelib3
29938 (package
29939 (name "python-pyroutelib3")
29940 (version "2.0.0")
29941 (source
29942 (origin
29943 (method git-fetch)
29944 (uri (git-reference
29945 (url "https://github.com/MKuranowski/pyroutelib3")
29946 (commit (string-append "v" version))))
29947 (file-name (git-file-name name version))
29948 (sha256
29949 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29950 (build-system pyproject-build-system)
29951 (propagated-inputs (list python-dateutil python-protobuf-5))
29952 (native-inputs (list python-filelock python-flit-core python-pytest))
29953 (home-page "https://github.com/MKuranowski/pyroutelib3")
29954 (synopsis "Library for simple routing on OSM data")
29955 (description "Library for simple routing on OSM data")
29956 (license license:gpl3+)))
29957
29958(define-public python-bibtexparser
29959 (package
29960 (name "python-bibtexparser")
29961 (version "2.0.0b9")
29962 (source
29963 (origin
29964 (method git-fetch)
29965 (uri (git-reference
29966 (url "https://github.com/sciunto-org/python-bibtexparser")
29967 (commit (string-append "v" version))))
29968 (file-name (git-file-name name version))
29969 (sha256
29970 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29971 (build-system pyproject-build-system)
29972 (propagated-inputs (list python-pylatexenc python-pyparsing))
29973 (native-inputs
29974 (list python-pylatexenc python-pytest python-setuptools))
29975 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29976 (synopsis "Python library to parse BibTeX files")
29977 (description "BibtexParser is a Python library to parse BibTeX files.")
29978 (license (list license:bsd-3 license:lgpl3))))
29979
29980(define-public python-bibtexparser-for-cobib
29981 (hidden-package
29982 (package
29983 (inherit python-bibtexparser)
29984 (name "python-bibtexparser")
29985 (version "1.4.0")
29986 (source
29987 (origin
29988 (method git-fetch)
29989 (uri (git-reference
29990 (url "https://github.com/sciunto-org/python-bibtexparser")
29991 (commit (string-append "v" version))))
29992 (file-name (git-file-name name version))
29993 (sha256
29994 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29995
29996(define-public python-distro
29997 (package
29998 (name "python-distro")
29999 (version "1.9.0")
30000 (source
30001 (origin
30002 (method url-fetch)
30003 (uri (pypi-uri "distro" version))
30004 (sha256
30005 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
30006 (build-system pyproject-build-system)
30007 (arguments
30008 (list
30009 #:test-flags
30010 #~(list "-k" (string-join
30011 ;; We are not on Ubunto distro:
30012 ;; AssertionError: assert '' == 'ubuntu'.
30013 (list "not test_ubuntu14normal_lsb_release"
30014 "test_trailingblanks_lsb_release"
30015 "test_ubuntu14nomodules_lsb_release")
30016 " and not "))))
30017 (native-inputs
30018 (list python-pytest
30019 python-setuptools))
30020 (home-page "https://github.com/python-distro/distro")
30021 (synopsis "OS platform information API")
30022 (description
30023 "@code{distro} provides information about the OS distribution it runs on,
30024such as a reliable machine-readable ID, or version information.
30025
30026It is the recommended replacement for Python's original
30027`platform.linux_distribution` function (which will be removed in Python 3.8).
30028@code{distro} also provides a command-line interface to output the platform
30029information in various formats.")
30030 (license license:asl2.0)))
30031
30032(define-public python-cairosvg
30033 (package
30034 (name "python-cairosvg")
30035 (version "2.8.2")
30036 (source
30037 (origin
30038 (method url-fetch)
30039 (uri (pypi-uri "cairosvg" version))
30040 (sha256
30041 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
30042 (build-system pyproject-build-system)
30043 (arguments
30044 (list #:test-flags #~(list "cairosvg/test_api.py")))
30045 (native-inputs
30046 (list python-pytest
30047 python-setuptools))
30048 (propagated-inputs
30049 (list python-cairocffi
30050 python-cssselect2
30051 python-defusedxml
30052 python-pillow
30053 python-tinycss2))
30054 (home-page "https://cairosvg.org/")
30055 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
30056 (description "CairoSVG is a SVG converter based on Cairo. It can export
30057SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
30058SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
30059parsed, the result is drawn to a Cairo surface that can be exported to
30060qvarious formats: PDF, PostScript, PNG and even SVG.")
30061 (license license:lgpl3+)))
30062
30063(define-public python-pyphen
30064 (package
30065 (name "python-pyphen")
30066 (version "0.17.2")
30067 (source
30068 (origin
30069 (method git-fetch)
30070 (uri (git-reference
30071 (url "https://github.com/Kozea/Pyphen")
30072 (commit version)))
30073 (file-name (git-file-name name version))
30074 (sha256
30075 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
30076 (build-system pyproject-build-system)
30077 (native-inputs (list python-flit-core python-pytest))
30078 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
30079 ;; embedded set provided by upstream - like Debian does.
30080 (home-page "https://github.com/Kozea/Pyphen")
30081 (synopsis "Pure Python module to hyphenate text")
30082 (description "Pyphen is a pure Python module to hyphenate text using
30083existing Hunspell hyphenation dictionaries.")
30084 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
30085
30086(define-public python-intelhex
30087 (package
30088 (name "python-intelhex")
30089 (version "2.3.0")
30090 (source
30091 (origin
30092 (method git-fetch)
30093 (uri (git-reference
30094 (url "https://github.com/python-intelhex/intelhex")
30095 (commit version)))
30096 (file-name (git-file-name name version))
30097 (sha256
30098 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
30099 (build-system pyproject-build-system)
30100 (arguments (list #:test-backend #~'unittest))
30101 (native-inputs (list python-setuptools))
30102 (home-page "https://github.com/python-intelhex/intelhex")
30103 (synopsis "Python library for Intel HEX files manipulations")
30104 (description
30105 "The Intel HEX file format is widely used in microprocessors and
30106microcontrollers area (embedded systems etc.) as the de facto standard for
30107representation of code to be programmed into microelectronic devices. This
30108package provides an intelhex Python library to read, write, create from
30109scratch and manipulate data from Intel HEX file format. It also includes
30110several convenience Python scripts, including \"classic\" hex2bin and bin2hex
30111converters and more, those based on the library itself.")
30112 (license license:bsd-3)))
30113
30114(define-public python-interlap
30115 (package
30116 (name "python-interlap")
30117 (version "0.2.7")
30118 (source
30119 (origin
30120 (method git-fetch)
30121 (uri (git-reference
30122 (url "https://github.com/brentp/interlap")
30123 (commit (string-append "v" version))))
30124 (file-name (git-file-name name version))
30125 (sha256
30126 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
30127 (build-system pyproject-build-system)
30128 (arguments
30129 (list
30130 #:test-backend #~'custom
30131 #:test-flags #~(list "interlap.py")))
30132 (native-inputs (list python-setuptools))
30133 (home-page "https://brentp.github.io/interlap")
30134 (synopsis "Fast, simple interval overlap testing")
30135 (description
30136 "InterLap does fast interval overlap testing with a simple Python data
30137structure.")
30138 (license license:expat)))
30139
30140(define-public python-pykwalify
30141 (package
30142 (name "python-pykwalify")
30143 (version "1.8.0")
30144 (source
30145 (origin
30146 (method git-fetch)
30147 (uri (git-reference
30148 (url "https://github.com/grokzen/pykwalify")
30149 (commit version)))
30150 (file-name (git-file-name name version))
30151 (sha256
30152 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
30153 (build-system pyproject-build-system)
30154 (arguments
30155 (list
30156 #:test-flags
30157 ;; XXX: yaml safe_dump() has been removed.
30158 #~(list "--ignore=tests/test_unicode.py"
30159 "--deselect=tests/test_core.py::TestCore::test_core_files")))
30160 (native-inputs
30161 (list python-pytest python-setuptools python-testfixtures))
30162 (propagated-inputs
30163 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
30164 (home-page "https://github.com/grokzen/pykwalify")
30165 (synopsis "Python lib/cli for JSON/YAML schema validation")
30166 (description
30167 "This package provides a parser, schema validator, and data binding tool
30168for YAML and JSON.")
30169 (license license:expat)))
30170
30171(define-public python-pykakasi
30172 (package
30173 (name "python-pykakasi")
30174 (version "2.3.0")
30175 (source
30176 (origin
30177 (method url-fetch)
30178 (uri (pypi-uri "pykakasi" version))
30179 (sha256
30180 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
30181 (build-system pyproject-build-system)
30182 (arguments (list #:test-flags ''("-k" "not test_aozora")))
30183 (propagated-inputs (list python-deprecated python-importlib-resources
30184 python-jaconv))
30185 (native-inputs (list python-coverage
30186 python-py-cpuinfo
30187 python-pytest
30188 python-pytest-benchmark
30189 python-setuptools
30190 python-setuptools-scm
30191 python-wheel))
30192 (home-page "https://codeberg.org/miurahr/pykakasi")
30193 (synopsis "Kana kanji simple inversion library")
30194 (description
30195 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
30196Language Processing} library to transliterate hiragana, katakana and
30197kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
30198characters in NFC form.
30199
30200Its algorithms are based on the kakasi library, which is written in C.")
30201 (license license:gpl3+)))
30202
30203(define-public python-dbus
30204 (package
30205 (name "python-dbus")
30206 (version "1.3.2")
30207 (source
30208 (origin
30209 (method url-fetch)
30210 (uri (pypi-uri "dbus-python" version))
30211 (sha256
30212 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
30213 (build-system pyproject-build-system)
30214 (arguments
30215 (list
30216 #:tests? #f ;XXX: Tests require setup
30217 #:phases
30218 #~(modify-phases %standard-phases
30219 (add-after 'unpack 'patch-requirements
30220 (lambda _
30221 (substitute* (list "pyproject.toml" "setup.py")
30222 (("'(ninja|patchelf)',?") ""))
30223 (substitute* "setup.cfg"
30224 (("(ninja|patchelf)") "")))))))
30225 (native-inputs
30226 (list pkg-config
30227 meson
30228 ninja/pinned
30229 patchelf
30230 python-meson
30231 python-setuptools
30232 python-tappy))
30233 (inputs
30234 (list dbus glib))
30235 (propagated-inputs
30236 (list python-pygobject))
30237 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
30238 (synopsis "Python bindings for libdbus")
30239 (description
30240 "This package provides Python bindings to libdbus, the reference
30241implementation of the D-Bus protocol.")
30242 (license license:expat)))
30243
30244;; Added on 2026-01-05
30245(define-deprecated-package python-dbus-python python-dbus)
30246
30247(define python-dbusmock-patch-paths-phase
30248 #~(lambda* (#:key inputs #:allow-other-keys)
30249 (substitute* "tests/test_api.py"
30250 (("/usr/bin/python3")
30251 (which "python3")))
30252 (substitute* "dbusmock/testcase.py"
30253 (("\"dbus-daemon\"")
30254 (object->string
30255 (search-input-file inputs "/bin/dbus-daemon"))))))
30256
30257(define-public python-dbusmock
30258 (package
30259 (name "python-dbusmock")
30260 (version "0.37.2")
30261 (source
30262 (origin
30263 (method git-fetch)
30264 (uri (git-reference
30265 (url "https://github.com/martinpitt/python-dbusmock")
30266 (commit version)))
30267 (file-name (git-file-name name version))
30268 (sha256
30269 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30270 (build-system pyproject-build-system)
30271 (arguments
30272 (list
30273 #:modules `((guix build pyproject-build-system)
30274 (guix build utils)
30275 (ice-9 match))
30276 #:phases
30277 #~(modify-phases %standard-phases
30278 (add-after 'unpack 'patch-paths
30279 #$python-dbusmock-patch-paths-phase)
30280 (replace 'check
30281 (lambda* (#:key tests? #:allow-other-keys)
30282 (when tests?
30283 (match (primitive-fork)
30284 (0 ;child process
30285 (execlp "pytest" "pytest" "-vv"))
30286 (pytest-pid
30287 (let loop ()
30288 ;; Reap child processes; otherwise, python-dbusmock
30289 ;; would waste time polling for the dbus processes
30290 ;; it spawns to be reaped, in vain.
30291 (match (waitpid WAIT_ANY)
30292 ((pid . status)
30293 (if (= pid pytest-pid)
30294 (unless (zero? status)
30295 (error "`pytest' exited with status"
30296 status))
30297 (loop)))))))))))))
30298 (native-inputs (list python-pytest python-setuptools upower which))
30299 (inputs (list dbus))
30300 (propagated-inputs (list python-dbus python-pygobject))
30301 (home-page "https://github.com/martinpitt/python-dbusmock")
30302 (synopsis "Python library for mock D-Bus objects")
30303 (description
30304 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
30305This is useful for writing tests for software which talks to D-Bus services
30306such as upower, systemd, logind, gnome-session or others, and it is hard (or
30307impossible without root privileges) to set the state of the real services to
30308what you expect in your tests.")
30309 (license license:lgpl3+)))
30310
30311(define-public python-dbusmock-for-tests
30312 (package
30313 (inherit python-dbusmock)
30314 (name "python-dbusmock-for-tests")
30315 (version "0.37.2")
30316 (source
30317 (origin
30318 (method git-fetch)
30319 (uri (git-reference
30320 (url "https://github.com/martinpitt/python-dbusmock")
30321 (commit version)))
30322 (file-name (git-file-name name version))
30323 (sha256
30324 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30325 (arguments
30326 (list
30327 #:tests? #f
30328 #:phases
30329 #~(modify-phases %standard-phases
30330 (add-after 'unpack 'patch-paths
30331 #$python-dbusmock-patch-paths-phase))))
30332 (native-inputs (list python-setuptools which))
30333 (properties '((hidden? . #t)))))
30334
30335(define-public python-jsonplus
30336 (package
30337 (name "python-jsonplus")
30338 (home-page "https://github.com/randomir/jsonplus")
30339 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30340 (revision . "0")))
30341 (version (git-version "0.8.0"
30342 (assoc-ref properties 'revision)
30343 (assoc-ref properties 'commit)))
30344 (source
30345 (origin
30346 (method git-fetch)
30347 (uri (git-reference
30348 (url home-page)
30349 (commit (assoc-ref properties 'commit))))
30350 (file-name (git-file-name name version))
30351 (sha256
30352 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30353 (build-system pyproject-build-system)
30354 (arguments
30355 (list
30356 ;; XXX: Tests require the additional package moneyed.
30357 #:tests? #f
30358 #:phases
30359 #~(modify-phases %standard-phases
30360 (add-after 'unpack 'chdir
30361 (lambda _
30362 (chdir "python"))))))
30363 (native-inputs (list python-setuptools))
30364 (propagated-inputs
30365 (list python-dateutil python-simplejson python-sortedcontainers))
30366 (synopsis "Serialize Python types to/from JSON")
30367 (description
30368 "This package provides functionality to serialize arbitrary data types
30369to and from JSON. Common data types are implemented and it is easy to
30370register custom encoders and decoders.")
30371 (license license:expat)))
30372
30373(define-public python-ioctl-opt
30374 (package
30375 (name "python-ioctl-opt")
30376 (version "1.3")
30377 (source
30378 (origin
30379 (method url-fetch)
30380 (uri (pypi-uri "ioctl-opt" version))
30381 (sha256
30382 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30383 (build-system pyproject-build-system)
30384 (arguments
30385 (list #:tests? #f)) ;no tests
30386 (native-inputs (list python-setuptools))
30387 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30388 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30389 (description
30390 "This package provides functions to compute fnctl.ioctl's opt argument.")
30391 (license license:gpl2+)))
30392
30393(define-public python-anyio
30394 (package
30395 (name "python-anyio")
30396 (version "4.12.1")
30397 (source
30398 (origin
30399 (method url-fetch)
30400 (uri (pypi-uri "anyio" version))
30401 (sha256
30402 (base32
30403 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30404 (patches
30405 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30406 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30407 (build-system pyproject-build-system)
30408 (arguments
30409 (list
30410 ;; tests:
30411 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30412 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30413 #:test-flags
30414 #~(list "-m" "not network"
30415 ;; Tests are shaky with a lot of DNS lookups.
30416 "--ignore=tests/test_sockets.py"
30417 #$@(map (lambda (ls)
30418 (string-append "--deselect=" (string-join ls "::")))
30419 (append
30420 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30421 ;; timeout expired running: <...>
30422 '(("tests/test_pytest_plugin.py"
30423 "test_keyboardinterrupt_during_test"))
30424 (if (target-aarch64?)
30425 ;; Assertions are not equal on ARM.
30426 '(("tests/streams/test_tls.py"
30427 "TestTLSListener"
30428 "test_handshake_fail")
30429 ("tests/test_taskgroups.py"
30430 "test_shielded_cancel_sleep_time")
30431 ("tests/test_to_thread.py"
30432 "test_run_in_custom_limiter")
30433 ("tests/test_to_thread.py"
30434 "TestBlockingPortalProvider"
30435 "test_single_thread"))
30436 '()))))))
30437 (propagated-inputs
30438 (list python-idna
30439 python-sniffio
30440 python-typing-extensions))
30441 (native-inputs
30442 (list python-blockbuster
30443 python-psutil
30444 python-pytest
30445 python-pytest-mock
30446 python-setuptools
30447 python-setuptools-scm
30448 python-trio
30449 python-trustme
30450 python-truststore
30451 python-uvloop))
30452 (home-page "https://anyio.readthedocs.io")
30453 (synopsis "Compatibility layer for multiple asynchronous event loops")
30454 (description
30455 "AnyIO is an asynchronous networking and concurrency library that works
30456on top of either asyncio or trio. It implements trio-like structured
30457concurrency on top of asyncio, and works in harmony with the native SC of trio
30458itself.")
30459 (license license:expat)))
30460
30461(define-public python-argh
30462 (package
30463 (name "python-argh")
30464 (version "0.31.3")
30465 (source
30466 (origin
30467 (method url-fetch)
30468 (uri (pypi-uri "argh" version))
30469 (sha256
30470 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30471 (build-system pyproject-build-system)
30472 (native-inputs (list python-flit-core python-pytest))
30473 (home-page "https://github.com/neithere/argh/")
30474 (synopsis "Argparse wrapper with natural syntax")
30475 (description
30476 "Argh is a small library that provides several layers of abstraction
30477on top of @code{python-argparse}. The layers can be mixed. It is always
30478possible to declare a command with the highest possible (and least flexible)
30479layer and then tune the behaviour with any of the lower layers including the
30480native API of @code{python-argparse}.")
30481 (license license:lgpl3+)))
30482
30483(define-public python-pox
30484 (package
30485 (name "python-pox")
30486 (version "0.3.6")
30487 (source
30488 (origin
30489 (method url-fetch)
30490 (uri (pypi-uri "pox" version))
30491 (sha256
30492 (base32
30493 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30494 (build-system pyproject-build-system)
30495 (arguments
30496 (list
30497 #:phases
30498 #~(modify-phases %standard-phases
30499 (replace 'check
30500 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30501 (when tests?
30502 (mkdir-p "/tmp/guix")
30503 (setenv "SHELL" "bash")
30504 (setenv "USERNAME" "guix")
30505 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30506 (invoke "python" "./pox/tests/__main__.py")))))))
30507 (native-inputs
30508 (list python-setuptools
30509 which)) ;pox/tests/test_shutils.py
30510 (home-page "https://pypi.org/project/pox/")
30511 (synopsis "Python utilities for file system exploration and automated builds")
30512 (description
30513 "Pox provides a collection of utilities for navigating and manipulating
30514file systems. This module is designed to facilitate some of the low-level
30515operating system interactions that are useful when exploring a file system on a
30516remote host. Pox provides Python equivalents of several shell commands such
30517as @command{which} and @command{find}. These commands allow automated
30518discovery of what has been installed on an operating system, and where the
30519essential tools are located.")
30520 (license license:bsd-3)))
30521
30522(define-public python-flit
30523 (package
30524 (name "python-flit")
30525 (version "3.12.0") ;same as python-flit-core
30526 (source
30527 (origin
30528 (method url-fetch)
30529 (uri (pypi-uri "flit" version))
30530 (sha256
30531 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30532 (build-system pyproject-build-system)
30533 (arguments
30534 (list
30535 #:test-flags
30536 ;; These tests fail when FLIT_NO_NETWORK is set
30537 '(list "-k" "not test_invalid_classifier \
30538and not test_install_requires \
30539and not test_install_requires_extra \
30540and not test_validate_classifiers_private")
30541 #:phases
30542 #~(modify-phases %standard-phases
30543 (add-after 'unpack 'relax-pip-requirement
30544 ;; python -m pip is available by default, no need to
30545 ;; propagate pip.
30546 (lambda _
30547 (substitute* "pyproject.toml"
30548 (("\"pip\",")
30549 ""))))
30550 (add-before 'check 'pre-check
30551 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30552 (when tests?
30553 (setenv "HOME" "/tmp")
30554 (setenv "FLIT_NO_NETWORK" "1")))))))
30555 (propagated-inputs
30556 (list python-tomli-w
30557 python-flit-core
30558 python-docutils
30559 python-requests))
30560 (native-inputs
30561 (list python-responses
30562 python-pytest
30563 python-testpath))
30564 (home-page "https://flit.readthedocs.io/")
30565 (synopsis "Simple packaging tool for simple packages")
30566 (description "Flit is a simple way to put Python packages and modules on
30567PyPI. Flit packages a single importable module or package at a time, using
30568the import name as the name on PyPI. All subpackages and data files within a
30569package are included automatically.")
30570 (license license:bsd-3)))
30571
30572(define-public python-fastentrypoints
30573 (package
30574 (name "python-fastentrypoints")
30575 (home-page "https://github.com/ninjaaron/fast-entry_points")
30576 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30577 (revision . "0")))
30578 (version (git-version "0.12"
30579 (assoc-ref properties 'revision)
30580 (assoc-ref properties 'commit)))
30581 (source
30582 (origin
30583 (method git-fetch)
30584 (uri (git-reference
30585 (url home-page)
30586 (commit (assoc-ref properties 'commit))))
30587 (file-name (git-file-name name version))
30588 (sha256
30589 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30590 (build-system pyproject-build-system)
30591 (arguments
30592 (list
30593 ;; XXX: Testing is non-standard and hardly configurable.
30594 #:tests? #f
30595 #:test-backend #~'custom
30596 #:test-flags #~(list "test/runtest.py")))
30597 (native-inputs (list python-setuptools))
30598 (synopsis "Makes entry_points specified in setup.py load more quickly")
30599 (description
30600 "Using entry_points in your setup.py makes scripts that start really
30601slowly because it imports pkg_resources. This package allows such setup
30602scripts to load entry points more quickly.")
30603 (license license:bsd-3)))
30604
30605(define-public python-funcparserlib
30606 (package
30607 (name "python-funcparserlib")
30608 (version "1.0.1")
30609 (source
30610 (origin
30611 ;; Source tarball on PyPi lacks tests.
30612 (method git-fetch)
30613 (uri (git-reference
30614 (url "https://github.com/vlasovskikh/funcparserlib")
30615 (commit version)))
30616 (file-name (git-file-name name version))
30617 (sha256
30618 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30619 (build-system pyproject-build-system)
30620 (arguments
30621 '(#:phases
30622 (modify-phases %standard-phases
30623 (replace 'check
30624 (lambda* (#:key tests? #:allow-other-keys)
30625 (when tests?
30626 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30627 ;; ModuleNotFoundError: No module named 'poetry'
30628 (native-inputs (list python-poetry-core python-six))
30629 (home-page "https://github.com/vlasovskikh/funcparserlib")
30630 (synopsis
30631 "Recursive descent parsing library based on functional combinators")
30632 (description
30633 "This package is a recursive descent parsing library for Python based on
30634functional combinators. Parser combinators are just higher-order functions
30635that take parsers as their arguments and return them as result values.")
30636 (license license:expat)))
30637
30638(define-public python-cson
30639 (package
30640 (name "python-cson")
30641 (version "0.8")
30642 (source
30643 (origin
30644 (method git-fetch)
30645 (uri (git-reference
30646 (url "https://github.com/avakar/pycson")
30647 (commit version)))
30648 (file-name (git-file-name name version))
30649 (sha256
30650 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30651 (build-system pyproject-build-system)
30652 (native-inputs (list python-pytest python-setuptools python-wheel))
30653 (propagated-inputs (list python-speg))
30654 (home-page "https://github.com/avakar/pycson")
30655 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30656 (description
30657 "This package is a parser for Coffeescript Object Notation (CSON).")
30658 (license license:expat)))
30659
30660(define-public python-aionotify
30661 (package
30662 (name "python-aionotify")
30663 (version "0.3.1")
30664 (source
30665 (origin
30666 ;; Source tarball on PyPi lacks tests
30667 (method git-fetch)
30668 (uri (git-reference
30669 (url "https://github.com/rbarrois/aionotify")
30670 (commit version)))
30671 (file-name (git-file-name name version))
30672 (sha256
30673 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30674 (build-system pyproject-build-system)
30675 (native-inputs
30676 (list python-pytest
30677 python-setuptools
30678 python-wheel))
30679 (home-page "https://github.com/rbarrois/aionotify")
30680 (synopsis "inotify library for Python")
30681 (description
30682 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30683 (license license:bsd-3)))
30684
30685(define-public python-forbiddenfruit
30686 (package
30687 (name "python-forbiddenfruit")
30688 (version "0.1.4")
30689 (source
30690 (origin
30691 (method git-fetch)
30692 (uri (git-reference
30693 (url "https://github.com/clarete/forbiddenfruit")
30694 (commit version)))
30695 (file-name (git-file-name name version))
30696 (sha256
30697 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30698 (build-system pyproject-build-system)
30699 (arguments
30700 (list
30701 #:phases
30702 #~(modify-phases %standard-phases
30703 (replace 'check
30704 (lambda* (#:key tests? #:allow-other-keys)
30705 (when tests?
30706 (invoke "make" "prepare" "SKIP_DEPS=1")
30707 (invoke "nosetests")))))))
30708 (native-inputs (list python-pynose python-setuptools))
30709 (home-page "https://github.com/clarete/forbiddenfruit")
30710 (synopsis "Patch python built-in objects")
30711 (description "This project allows Python code to extend built-in types.")
30712 (license (list license:gpl3+ license:expat))))
30713
30714(define-public python-k5test
30715 (package
30716 (name "python-k5test")
30717 (version "0.10.4")
30718 (source
30719 (origin
30720 (method url-fetch)
30721 (uri (pypi-uri "k5test" version))
30722 (sha256
30723 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30724 (build-system pyproject-build-system)
30725 (arguments
30726 (list #:tests? #f)) ;no tests
30727 (native-inputs
30728 (list python-setuptools))
30729 (inputs
30730 (list mit-krb5))
30731 (home-page "https://github.com/pythongssapi/k5test")
30732 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30733 (description
30734 "@code{k5test} is a library for setting up self-contained Kerberos 5
30735environments, and running Python unit tests inside those environments. It is
30736based on the file of the same name found alongside the MIT Kerberos 5 unit
30737tests.")
30738 (license license:isc)))
30739
30740(define-public python-gssapi
30741 (package
30742 (name "python-gssapi")
30743 (version "1.10.0")
30744 (source
30745 (origin
30746 (method url-fetch)
30747 (uri (pypi-uri "gssapi" version))
30748 (sha256
30749 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30750 (build-system pyproject-build-system)
30751 (arguments
30752 (list #:test-flags #~(list "--pyargs" "gssapi")))
30753 (native-inputs
30754 (list python-cython
30755 python-k5test
30756 python-parameterized
30757 python-pytest
30758 python-setuptools))
30759 (inputs
30760 (list mit-krb5))
30761 (propagated-inputs
30762 (list python-decorator))
30763 (home-page "https://github.com/pythongssapi/python-gssapi")
30764 (synopsis "Python GSSAPI Wrapper")
30765 (description
30766 "Python-GSSAPI provides both low-level and high level wrappers around the
30767GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30768also be usable with other GSSAPI mechanisms.")
30769 (license license:isc)))
30770
30771(define-public python-check-manifest
30772 (package
30773 (name "python-check-manifest")
30774 (version "0.51")
30775 (source
30776 (origin
30777 (method url-fetch)
30778 (uri (pypi-uri "check_manifest" version))
30779 (sha256
30780 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30781 (build-system pyproject-build-system)
30782 (arguments
30783 (list
30784 ;; tests: 127 passed, 20 skipped, 2 deselected
30785 #:test-flags
30786 ;; This tests requires setting up a venv which does not work
30787 ;; properly in the build environment.
30788 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30789 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30790 (native-inputs
30791 (list git-minimal/pinned python-pytest))
30792 (propagated-inputs
30793 (list python-pypa-build python-setuptools))
30794 (home-page "https://github.com/mgedmin/check-manifest")
30795 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30796 (description "Python package can include a MANIFEST.in file to help with
30797sending package files to the Python Package Index. This package checks that
30798file to ensure it completely and accurately describes your project.")
30799 (license license:expat)))
30800
30801(define-public python-android-stringslib
30802 (package
30803 (name "python-android-stringslib")
30804 (version "0.1.2")
30805 (source
30806 (origin
30807 (method git-fetch)
30808 (uri (git-reference
30809 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30810 (commit (string-append "v" version))))
30811 (file-name (git-file-name name version))
30812 (sha256
30813 (base32
30814 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30815 (build-system pyproject-build-system)
30816 (arguments (list #:tests? #f)) ; No tests.
30817 (native-inputs (list python-setuptools))
30818 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30819 (synopsis "Android strings.xml support")
30820 (description
30821 "Android Strings Lib provides support for android's strings.xml files.
30822These files are used to translate strings in android apps.")
30823 (license license:expat)))
30824
30825(define-public python-pypng
30826 (package
30827 (name "python-pypng")
30828 (version "0.20220715.0")
30829 (source
30830 (origin
30831 (method url-fetch)
30832 (uri (pypi-uri "pypng" version))
30833 (sha256
30834 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30835 (build-system pyproject-build-system)
30836 (arguments
30837 (list
30838 #:phases
30839 '(modify-phases %standard-phases
30840 (add-before 'check 'pre-check
30841 (lambda _
30842 (setenv "PYTHONPATH"
30843 (string-append (getcwd) "/code:"
30844 (getenv "GUIX_PYTHONPATH"))))))))
30845 (native-inputs (list python-pytest python-setuptools python-wheel))
30846 (home-page "https://github.com/drj11/pypng")
30847 (synopsis "Pure Python PNG image encoder/decoder")
30848 (description
30849 "The PyPNG module implements support for PNG images. It reads and writes
30850PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30851pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30852LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30853images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30854A number of optional chunks can be specified (when writing) and
30855understood (when reading): tRNS, bKGD, gAMA.
30856
30857PyPNG is not a high level toolkit for image processing (like PIL) and does not
30858aim at being a replacement or competitor. Its strength lies in fine-grained
30859extensive support of PNG features. It can also read and write Netpbm PAM
30860files, with a focus on its use as an intermediate format for implementing
30861custom PNG processing.")
30862 (license license:expat)))
30863
30864(define-public python-fuzzywuzzy
30865 (package
30866 (name "python-fuzzywuzzy")
30867 (version "0.18.0")
30868 (source
30869 (origin
30870 (method git-fetch)
30871 (uri (git-reference
30872 (url "https://github.com/seatgeek/fuzzywuzzy")
30873 (commit version)))
30874 (file-name (git-file-name name version))
30875 (sha256
30876 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30877 (build-system pyproject-build-system)
30878 (arguments
30879 (list
30880 #:test-flags
30881 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30882 (native-inputs
30883 (list python-hypothesis
30884 python-pycodestyle
30885 python-pytest
30886 python-setuptools))
30887 (propagated-inputs (list python-levenshtein))
30888 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30889 (synopsis "Fuzzy string matching in Python")
30890 (description
30891 "Approximate string matching using @emph{Levenshtein Distance} to
30892calculate the differences between sequences.")
30893 (license license:gpl2)))
30894
30895(define-public python-block-tracing
30896 (package
30897 (name "python-block-tracing")
30898 (version "1.0.1")
30899 (source
30900 (origin
30901 (method url-fetch)
30902 (uri (pypi-uri "block_tracing" version))
30903 (sha256
30904 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30905 (build-system pyproject-build-system)
30906 (arguments (list #:tests? #f)) ; No tests.
30907 (native-inputs (list python-setuptools))
30908 (home-page "https://github.com/rianhunter/block_tracing")
30909 (synopsis "Protect process memory")
30910 (description
30911 "@code{block_tracing} is a tiny Python library that can be used to
30912prevent debuggers and other applications from inspecting the memory within
30913your process.")
30914 (license license:expat)))
30915
30916(define-public python-json-e
30917 (package
30918 (name "python-json-e")
30919 (version "4.8.0")
30920 (source
30921 (origin
30922 (method git-fetch) ; no tests in PyPI release
30923 (uri (git-reference
30924 (url "https://github.com/json-e/json-e")
30925 (commit (string-append "v" version))))
30926 (file-name (git-file-name name version))
30927 (sha256
30928 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30929 (build-system pyproject-build-system)
30930 (arguments
30931 (list
30932 #:phases
30933 #~(modify-phases %standard-phases
30934 ;; Git repository provides implementations for JavaScript, Golang,
30935 ;; Python and Rust, pick "py".
30936 (add-before 'build 'chdir-to-py
30937 (lambda _
30938 (chdir "py"))))))
30939 (native-inputs
30940 (list python-freezegun
30941 python-pytest
30942 python-pyyaml
30943 python-setuptools
30944 python-wheel))
30945 (home-page "https://json-e.js.org")
30946 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30947 (description
30948 "This package provides a data-structure parameterization system written
30949for embedding context in JSON objects.")
30950 (license license:mpl2.0)))
30951
30952(define-public python-json-logger
30953 (package
30954 (name "python-json-logger")
30955 (version "4.0.0")
30956 (source
30957 (origin
30958 (method git-fetch)
30959 (uri (git-reference
30960 (url "https://github.com/nhairs/python-json-logger")
30961 (commit (string-append "v" version))))
30962 (file-name (git-file-name name version))
30963 (sha256
30964 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30965 (build-system pyproject-build-system)
30966 (native-inputs
30967 (list python-freezegun
30968 python-mike
30969 python-msgspec
30970 python-orjson
30971 python-pypa-build
30972 python-pytest
30973 python-setuptools
30974 python-tzdata
30975 python-validate-pyproject
30976 python-typing-extensions))
30977 (home-page "https://github.com/nhairs/python-json-logger")
30978 (synopsis "JSON log formatter in Python")
30979 (description "This library allows standard Python logging to output log data
30980as JSON objects. With JSON we can make our logs more readable by machines and
30981we can stop writing custom parsers for syslog-type records.")
30982 (license license:bsd-3)))
30983
30984(define-public python-daiquiri
30985 (package
30986 (name "python-daiquiri")
30987 (version "3.0.1")
30988 (source
30989 (origin
30990 (method git-fetch)
30991 (uri (git-reference
30992 (url "https://github.com/jd/daiquiri")
30993 (commit version)))
30994 (file-name (git-file-name name version))
30995 (sha256
30996 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30997 (build-system pyproject-build-system)
30998 (propagated-inputs (list python-json-logger))
30999 (native-inputs (list python-mock python-pytest python-setuptools
31000 python-setuptools-scm))
31001 (home-page "https://github.com/jd/daiquiri")
31002 (synopsis "Library to configure Python logging easily")
31003 (description
31004 "The daiquiri library provides an easy way to configure logging in
31005Python. It also provides some custom formatters and handlers.")
31006 (license license:asl2.0)))
31007
31008(define-public python-pifpaf
31009 (package
31010 (name "python-pifpaf")
31011 (version "3.4.0")
31012 (source
31013 (origin
31014 (method git-fetch)
31015 (uri (git-reference
31016 (url "https://github.com/jd/pifpaf")
31017 (commit version)))
31018 (file-name (git-file-name name version))
31019 (sha256
31020 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
31021 (build-system pyproject-build-system)
31022 (arguments
31023 (list
31024 #:phases
31025 #~(modify-phases %standard-phases
31026 (add-after 'install 'install-drivers
31027 (lambda* (#:key inputs outputs #:allow-other-keys)
31028 (let ((site (site-packages inputs outputs)))
31029 (copy-recursively "pifpaf/drivers"
31030 (string-append site "/pifpaf/drivers/"))))))))
31031 (propagated-inputs
31032 (list python-click
31033 python-daiquiri
31034 python-fixtures
31035 python-jinja2
31036 python-pbr
31037 python-psutil
31038 python-xattr))
31039 (native-inputs
31040 (list python-mock
31041 python-stestr
31042 python-packaging
31043 python-requests
31044 python-testrepository
31045 python-testtools
31046 python-setuptools))
31047 (home-page "https://github.com/jd/pifpaf")
31048 (synopsis "Tools and fixtures to manage daemons for testing in Python")
31049 (description
31050 "Pifpaf is a suite of fixtures and a command-line tool that starts and
31051stops daemons for a quick throw-away usage. This is typically useful when
31052needing these daemons to run integration testing. It originally evolved from
31053its precursor @code{overtest}.")
31054 (license license:asl2.0)))
31055
31056(define-public python-pytest-check-links
31057 (package
31058 (name "python-pytest-check-links")
31059 (version "0.10.1")
31060 (source
31061 (origin
31062 (method url-fetch)
31063 (uri (pypi-uri "pytest_check_links" version))
31064 (sha256
31065 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
31066 (build-system pyproject-build-system)
31067 (arguments
31068 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
31069 (native-inputs
31070 (list python-hatchling))
31071 (propagated-inputs
31072 (list python-docutils
31073 python-html5lib
31074 python-nbconvert
31075 python-nbformat
31076 python-requests))
31077 (home-page "https://github.com/jupyterlab/pytest-check-links")
31078 (synopsis "Check links in files")
31079 (description "This package provides a pytest plugin that checks URLs for
31080HTML-containing files.")
31081 (license license:bsd-3)))
31082
31083(define-public python-json5
31084 (package
31085 (name "python-json5")
31086 (version "0.9.25")
31087 (source
31088 (origin
31089 ;; sample.json5 is missing from PyPi source tarball
31090 (method git-fetch)
31091 (uri (git-reference
31092 (url "https://github.com/dpranke/pyjson5")
31093 (commit (string-append "v" version))))
31094 (file-name (git-file-name name version))
31095 (sha256
31096 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
31097 (build-system pyproject-build-system)
31098 (native-inputs (list python-pytest python-setuptools python-wheel))
31099 (home-page "https://github.com/dpranke/pyjson5")
31100 (synopsis "Python implementation of the JSON5 data format")
31101 (description
31102 "JSON5 extends the JSON data interchange format to make it slightly more
31103usable as a configuration language. This Python package implements parsing and
31104dumping of JSON5 data structures.")
31105 (license license:asl2.0)))
31106
31107(define-public python-farama-notifications
31108 (package
31109 (name "python-farama-notifications")
31110 (version "0.0.4")
31111 (source
31112 ;; The version on pypi does not include tests.
31113 (origin
31114 (method git-fetch)
31115 (uri (git-reference
31116 (url "https://github.com/Farama-Foundation/Farama-Notifications")
31117 (commit version)))
31118 (file-name (git-file-name name version))
31119 (sha256
31120 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
31121 (build-system pyproject-build-system)
31122 (arguments
31123 (list
31124 #:phases
31125 '(modify-phases %standard-phases
31126 (replace 'check
31127 (lambda* (#:key tests? #:allow-other-keys)
31128 (when tests?
31129 (invoke "python3" "tests/ci-test.py")))))))
31130 (native-inputs (list python-pytest python-setuptools python-wheel))
31131 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
31132 (synopsis "Notifications for all Farama Foundation maintained libraries")
31133 (description
31134 "This package allows for providing notifications for all Farama
31135Foundation maintained libraries.")
31136 (license license:expat)))
31137
31138(define-public python-frontmatter
31139 (package
31140 (name "python-frontmatter")
31141 (version "1.3.0")
31142 (source
31143 (origin
31144 (method git-fetch)
31145 (uri (git-reference
31146 (url "https://github.com/eyeseast/python-frontmatter")
31147 (commit (string-append "v" version))))
31148 (file-name (git-file-name name version))
31149 (sha256
31150 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
31151 (build-system pyproject-build-system)
31152 (native-inputs
31153 (list python-hatchling
31154 python-pyaml
31155 python-pytest
31156 python-toml
31157 python-types-pyyaml
31158 python-types-toml
31159 python-uv-build))
31160 (propagated-inputs (list python-pyyaml))
31161 (home-page "https://github.com/eyeseast/python-frontmatter")
31162 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
31163 (description
31164 "This package offers a useful way to add arbitrary, structured metadata
31165to text documents, regardless of type. This is a small package to load and
31166parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
31167 (license license:expat)))
31168
31169(define-public python-frozendict
31170 (package
31171 (name "python-frozendict")
31172 (version "2.4.6")
31173 (source
31174 (origin
31175 (method url-fetch)
31176 (uri (pypi-uri "frozendict" version))
31177 (sha256
31178 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
31179 (build-system pyproject-build-system)
31180 (native-inputs
31181 (list python-pytest
31182 python-setuptools
31183 python-wheel))
31184 (home-page "https://github.com/Marco-Sulla/python-frozendict")
31185 (synopsis "Simple immutable mapping for Python")
31186 (description
31187 "@dfn{frozendict} is an immutable wrapper around dictionaries that
31188implements the complete mapping interface. It can be used as a drop-in
31189replacement for dictionaries where immutability is desired.")
31190 (license license:expat)))
31191
31192(define-public python-py-cpuinfo
31193 (package
31194 (name "python-py-cpuinfo")
31195 (version "9.0.0")
31196 (source
31197 (origin
31198 (method git-fetch)
31199 (uri (git-reference
31200 (url "https://github.com/workhorsy/py-cpuinfo")
31201 (commit (string-append "v" version))))
31202 (file-name (git-file-name name version))
31203 (sha256
31204 (base32
31205 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
31206 (build-system pyproject-build-system)
31207 (arguments
31208 (list #:test-backend #~'custom
31209 #:test-flags #~(list "test_suite.py")))
31210 (native-inputs
31211 (list python-setuptools))
31212 (home-page "https://github.com/workhorsy/py-cpuinfo")
31213 (synopsis "Get CPU info with Python")
31214 (description
31215 "This Python module returns the CPU info by using the best sources of
31216information for your operating system.")
31217 (license license:expat)))
31218
31219(define-public python-canonicaljson
31220 (package
31221 (name "python-canonicaljson")
31222 (version "2.0.0")
31223 (source
31224 (origin
31225 (method url-fetch)
31226 (uri (pypi-uri "canonicaljson" version))
31227 (sha256
31228 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
31229 (build-system pyproject-build-system)
31230 (arguments
31231 (list #:test-backend #~'unittest))
31232 (native-inputs
31233 (list python-setuptools))
31234 (home-page "https://github.com/matrix-org/python-canonicaljson")
31235 (synopsis "Canonical JSON")
31236 (description
31237 "Deterministically encode JSON.
31238
31239@itemize
31240@item Encodes objects and arrays as RFC 7159 JSON.
31241@item Sorts object keys so that you get the same result each time.
31242@item Has no insignificant whitespace to make the output as small as possible.
31243@item Escapes only the characters that must be escaped, U+0000 to
31244 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
31245@item Uses the shortest escape sequence for each escaped character.
31246@item Encodes the JSON as UTF-8.
31247@item Can encode frozendict immutable dictionaries.
31248@end itemize")
31249 (license license:asl2.0)))
31250
31251(define-public python-signedjson
31252 (package
31253 (name "python-signedjson")
31254 (version "1.1.4")
31255 (source
31256 (origin
31257 (method git-fetch)
31258 (uri (git-reference
31259 (url "https://github.com/matrix-org/python-signedjson")
31260 (commit (string-append "v" version))))
31261 (file-name (git-file-name name version))
31262 (sha256
31263 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31264 (build-system pyproject-build-system)
31265 (propagated-inputs
31266 (list python-canonicaljson
31267 python-pynacl
31268 python-typing-extensions
31269 python-unpaddedbase64))
31270 (native-inputs
31271 (list python-pytest python-setuptools-scm python-setuptools))
31272 (home-page "https://github.com/matrix-org/python-signedjson")
31273 (synopsis "Sign JSON objects with ED25519 signatures")
31274 (description
31275 "Sign JSON objects with ED25519 signatures.
31276
31277@itemize
31278@item More than one entity can sign the same object.
31279@item Each entity can sign the object with more than one key making it easier to
31280rotate keys
31281@item ED25519 can be replaced with a different algorithm.
31282@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31283key.
31284@end itemize")
31285 (license license:asl2.0)))
31286
31287(define-public python-daemonize
31288 (package
31289 (name "python-daemonize")
31290 (version "2.5.0")
31291 (source
31292 (origin
31293 (method git-fetch)
31294 (uri (git-reference
31295 (url "https://github.com/thesharp/daemonize")
31296 (commit (string-append "v" version))))
31297 (file-name (git-file-name name version))
31298 (sha256
31299 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31300 (build-system pyproject-build-system)
31301 (arguments
31302 (list
31303 #:test-backend #~'custom
31304 #:test-flags #~(list "tests/test.py")
31305 #:phases
31306 #~(modify-phases %standard-phases
31307 (add-before 'check 'fix-tests
31308 (lambda _
31309 ;; XXX: nobody has group nogroup on Guix.
31310 (substitute* "tests/test.py"
31311 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31312 (number->string (passwd:gid (getpw "nobody"))))))))))
31313 (native-inputs (list coreutils-minimal procps python-setuptools))
31314 (home-page "https://github.com/thesharp/daemonize")
31315 (synopsis "Library for writing system daemons in Python")
31316 (description
31317 "Daemonize is a library for writing system daemons in Python.")
31318 (license license:expat)))
31319
31320(define-public python-pymacaroons
31321 (package
31322 (name "python-pymacaroons")
31323 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31324 (revision . "0")))
31325 (version (git-version "0.13.0"
31326 (assoc-ref properties 'revision)
31327 (assoc-ref properties 'commit)))
31328 (source
31329 (origin
31330 (method git-fetch)
31331 (uri (git-reference
31332 (url "https://github.com/ecordell/pymacaroons")
31333 (commit (assoc-ref properties 'commit))))
31334 (file-name (git-file-name name version))
31335 (sha256
31336 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31337 (build-system pyproject-build-system)
31338 (arguments
31339 (list
31340 #:test-flags
31341 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31342 ;; No module named 'hypothesis.specifiers'
31343 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31344 (native-inputs
31345 (list python-hypothesis
31346 python-mock
31347 python-pytest
31348 python-setuptools))
31349 (propagated-inputs (list python-pynacl))
31350 (home-page "https://github.com/ecordell/pymacaroons")
31351 (synopsis "Python Macaroon Library")
31352 (description
31353 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31354tokens, macaroons embed caveats that define specific authorization
31355requirements for the target service, the service that issued the root macaroon
31356and which is capable of verifying the integrity of macaroons it receives.
31357
31358Macaroons allow for delegation and attenuation of authorization. They are
31359simple and fast to verify, and decouple authorization policy from the
31360enforcement of that policy.")
31361 (license license:expat)))
31362
31363(define-public python-ldap3
31364 (package
31365 (name "python-ldap3")
31366 (version "2.9.1")
31367 (home-page "https://github.com/cannatag/ldap3")
31368 (source
31369 (origin
31370 (method git-fetch)
31371 (uri (git-reference (url home-page)
31372 (commit (string-append "v" version))))
31373 (file-name (git-file-name name version))
31374 (sha256
31375 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31376 (build-system pyproject-build-system)
31377 (arguments
31378 (list
31379 #:tests? #f ;TODO: Tests need a real LDAP server to run
31380 #:test-backend #~'nose))
31381 (native-inputs
31382 (list python-pynose python-setuptools))
31383 (propagated-inputs
31384 (list python-gssapi python-pyasn1))
31385 (synopsis "Python LDAP client")
31386 (description
31387 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31388library.")
31389 (license license:lgpl3+)))
31390
31391(define-public python-boltons
31392 (package
31393 (name "python-boltons")
31394 (version "25.0.0")
31395 (source
31396 (origin
31397 (method git-fetch)
31398 (uri (git-reference
31399 (url "https://github.com/mahmoud/boltons")
31400 (commit version)))
31401 (file-name (git-file-name name version))
31402 (sha256
31403 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31404 (build-system pyproject-build-system)
31405 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31406 (home-page "https://github.com/mahmoud/boltons")
31407 (synopsis "Extensions to the Python standard library")
31408 (description
31409 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31410as — and yet conspicuously missing from — the standard library, including:
31411
31412@itemize
31413@item Atomic file saving, bolted on with fileutils
31414@item A highly-optimized OrderedMultiDict, in dictutils
31415@item Two types of PriorityQueue, in queueutils
31416@item Chunked and windowed iteration, in iterutils
31417@item Recursive data structure iteration and merging, with iterutils.remap
31418@item Exponential backoff functionality, including jitter, through
31419iterutils.backoff
31420@item A full-featured TracebackInfo type, for representing stack traces, in
31421tbutils
31422@end itemize")
31423 (license license:bsd-3)))
31424
31425(define-public python-eliot
31426 (package
31427 (name "python-eliot")
31428 (version "1.17.5")
31429 (source
31430 (origin
31431 (method url-fetch)
31432 (uri (pypi-uri "eliot" version))
31433 (sha256
31434 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31435 (build-system pyproject-build-system)
31436 (arguments
31437 (list
31438 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31439 ;; Two tests fail with error: TypeError: Unsupported type.
31440 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31441 #:phases
31442 #~(modify-phases %standard-phases
31443 (add-after 'unpack 'remove-journald-support
31444 (lambda _
31445 (for-each delete-file
31446 '("eliot/tests/test_journald.py"
31447 "eliot/journald.py")))))))
31448 (native-inputs
31449 (list python-pytest
31450 python-setuptools
31451 python-testtools))
31452 (propagated-inputs
31453 (list python-boltons
31454 python-orjson
31455 python-pyrsistent
31456 python-zope-interface))
31457 (home-page "https://github.com/itamarst/eliot/")
31458 (synopsis "Eliot: the logging system that tells you why it happened")
31459 (description
31460 "@dfn{eliot} is a Python logging system that outputs causal chains of
31461actions: actions can spawn other actions, and eventually they either succeed
31462or fail. The resulting logs tell you the story of what your software did: what
31463happened, and what caused it.")
31464 (license license:asl2.0)))
31465
31466(define-public python-pem
31467 (package
31468 (name "python-pem")
31469 (version "23.1.0")
31470 (source
31471 (origin
31472 (method git-fetch)
31473 (uri (git-reference
31474 (url "https://github.com/hynek/pem")
31475 (commit version)))
31476 (file-name (git-file-name name version))
31477 (sha256
31478 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31479 (build-system pyproject-build-system)
31480 (native-inputs
31481 (list nss-certs-for-test
31482 python-certifi
31483 python-hatch-fancy-pypi-readme
31484 python-hatch-vcs
31485 python-hatchling
31486 python-pretend
31487 python-pyopenssl
31488 python-pytest
31489 python-twisted))
31490 (home-page "https://pem.readthedocs.io/")
31491 (synopsis "Easy PEM file parsing in Python")
31492 (description
31493 "This package provides a Python module for parsing and splitting PEM files.")
31494 (license license:expat)))
31495
31496(define-public python-pysaml2
31497 (package
31498 (name "python-pysaml2")
31499 (version "7.5.4")
31500 (source
31501 (origin
31502 (method git-fetch)
31503 (uri (git-reference
31504 (url "https://github.com/IdentityPython/pysaml2")
31505 (commit (string-append "v" version))))
31506 (file-name (git-file-name name version))
31507 (sha256
31508 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31509 (build-system pyproject-build-system)
31510 (arguments
31511 (list
31512 #:test-flags
31513 #~(list "-k"
31514 (string-join
31515 ;; XXX: encryption failures
31516 (list "not test_encrypted_response_6"
31517 "test_validate_cert_chains"
31518 "test_validate_with_root_cert"
31519 ;; XXX: xml parsing error
31520 "test_namespace_processing") " and not "))
31521 #:phases
31522 #~(modify-phases %standard-phases
31523 (add-after 'unpack 'relax-requirements
31524 (lambda _
31525 (substitute* "pyproject.toml"
31526 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31527 (format #f "~s" dep))))))))
31528 (native-inputs (list python-poetry-core python-pytest))
31529 (propagated-inputs
31530 (list python-cryptography
31531 python-dateutil
31532 python-defusedxml
31533 python-pymongo
31534 python-pyopenssl
31535 python-responses
31536 python-requests
31537 python-xmlschema
31538 python-xmlsec))
31539 (home-page "https://idpy.org")
31540 (synopsis "Python implementation of SAML Version 2 Standard")
31541 (description
31542 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31543It contains all necessary pieces for building a SAML2 service provider or
31544an identity provider. The distribution contains examples of both.
31545
31546This package was originally written to work in a WSGI environment, but
31547there are extensions that allow you to use it with other frameworks.")
31548 (license license:asl2.0)))
31549
31550;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31551;; This PyPI package is no longer actively maintained, but the underlying
31552;; library can be vendored.
31553;;
31554;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31555;; pyproject.toml) and can't be used as a common input, do not update this
31556;; package.
31557(define-public python-click-plugins
31558 (package
31559 (name "python-click-plugins")
31560 (version "1.1.1.2")
31561 (source
31562 (origin
31563 (method git-fetch)
31564 (uri (git-reference
31565 (url "https://github.com/click-contrib/click-plugins")
31566 (commit version)))
31567 (file-name (git-file-name name version))
31568 (sha256
31569 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31570 (build-system pyproject-build-system)
31571 (arguments
31572 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31573 (native-inputs
31574 (list python-setuptools))
31575 (propagated-inputs
31576 (list python-click))
31577 (synopsis "Extension for Click to register external CLI commands")
31578 (description
31579 "This package provides n extension module for Click to register external
31580CLI commands via setuptools entry-points.")
31581 (home-page "https://github.com/click-contrib/click-plugins")
31582 (license license:bsd-3)))
31583
31584;; XXX: Deprecated on <2026-03-23>.
31585(define-deprecated-package python-click-plugins-1 python-click-plugins)
31586
31587(define-public python-diceware
31588 (package
31589 (name "python-diceware")
31590 (version "1.0.1")
31591 (source
31592 (origin
31593 (method url-fetch)
31594 (uri (pypi-uri "diceware" version))
31595 (sha256
31596 (base32
31597 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31598 (build-system pyproject-build-system)
31599 (native-inputs
31600 (list python-pytest python-setuptools python-wheel))
31601 (home-page "https://github.com/ulif/diceware/")
31602 (synopsis "Generates memorable passphrases")
31603 (description "This package generates passphrases by concatenating words
31604randomly picked from wordlists. It supports several sources of
31605randomness (including real life dice) and different wordlists (including
31606cryptographically signed ones).")
31607 (license license:gpl3+)))
31608
31609(define-public python-dictdiffer
31610 (package
31611 (name "python-dictdiffer")
31612 (version "0.9.0")
31613 (source
31614 (origin
31615 (method git-fetch)
31616 (uri (git-reference
31617 (url "https://github.com/inveniosoftware/dictdiffer")
31618 (commit (string-append "v" version))))
31619 (file-name (git-file-name name version))
31620 (sha256
31621 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31622 (build-system pyproject-build-system)
31623 (arguments
31624 (list
31625 #:phases
31626 #~(modify-phases %standard-phases
31627 (add-after 'unpack 'relax-requirements
31628 (lambda _
31629 (delete-file "pytest.ini")
31630 (substitute* "setup.py"
31631 (("'pytest-runner.*',")
31632 "'pytest',")))))))
31633 (native-inputs
31634 (list python-pytest python-setuptools python-setuptools-scm))
31635 (home-page "https://github.com/inveniosoftware/dictdiffer")
31636 (synopsis "Diff and patch Python dictionary objects")
31637 (description
31638 "Dictdiffer is a Python module that helps you to diff and patch
31639dictionaries.")
31640 (license license:expat)))
31641
31642(define-public python-osc
31643 (package
31644 (name "python-osc")
31645 (version "1.9.3")
31646 (source
31647 (origin
31648 (method git-fetch)
31649 (uri (git-reference
31650 (url "https://github.com/attwad/python-osc")
31651 (commit (string-append "v" version))))
31652 (file-name (git-file-name name version))
31653 (sha256
31654 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31655 (build-system pyproject-build-system)
31656 (native-inputs (list python-setuptools))
31657 (home-page "https://github.com/attwad/python-osc")
31658 (synopsis "Open Sound Control server and client implementations")
31659 (description
31660 "@code{python-osc} is a pure Python library with no external
31661dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31662Open Sound Control 1.0} specification.")
31663 (license license:unlicense)))
31664
31665(define-public python-cmd2
31666 (package
31667 (name "python-cmd2")
31668 (version "2.5.11")
31669 (source
31670 (origin
31671 (method url-fetch)
31672 (uri (pypi-uri "cmd2" version))
31673 (sha256
31674 (base32
31675 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31676 (build-system pyproject-build-system)
31677 (arguments
31678 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31679and not test_transcript")))
31680 (propagated-inputs
31681 (list python-pyperclip python-wcwidth))
31682 (native-inputs
31683 (list python-pytest
31684 python-pytest-mock
31685 python-setuptools
31686 python-setuptools-scm
31687 python-wheel))
31688 (home-page "https://github.com/python-cmd2/cmd2")
31689 (synopsis "Tool for building interactive command line applications")
31690 (description
31691 "Cmd2 is a tool for building interactive command line applications in
31692Python. Its goal is to make it quick and easy for developers to build
31693feature-rich and user-friendly interactive command line applications. It
31694provides a simple API which is an extension of Python's built-in @code{cmd}
31695module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31696make your life easier and eliminates much of the boilerplate code which would
31697be necessary when using @code{cmd}.")
31698 (license license:expat)))
31699
31700(define-public python-pytidylib
31701 (package
31702 (name "python-pytidylib")
31703 (version "0.3.2")
31704 (source
31705 (origin
31706 (method git-fetch)
31707 (uri (git-reference
31708 (url "https://github.com/countergram/pytidylib")
31709 (commit version)))
31710 (file-name (git-file-name name version))
31711 (sha256
31712 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31713 (build-system pyproject-build-system)
31714 (arguments
31715 (list
31716 #:phases
31717 #~(modify-phases %standard-phases
31718 (add-after 'unpack 'fix-queue-import
31719 (lambda _
31720 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31721 (substitute* "tests/threadsafety.py"
31722 (("from Queue import Queue")
31723 "from queue import Queue"))))
31724 (add-before 'build 'qualify-libtidy
31725 (lambda* (#:key inputs #:allow-other-keys)
31726 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31727 (substitute* "tidylib/tidy.py"
31728 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31729 (format #f "'~a'" libtidy)))))))))
31730 (native-inputs (list python-pytest python-setuptools))
31731 (inputs (list tidy-html))
31732 (home-page "https://github.com/countergram/pytidylib")
31733 (synopsis "Python wrapper for HTML Tidy library")
31734 (description
31735 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31736allows you, from Python code, to “fix” invalid (X)HTML markup.")
31737 (license license:expat)))
31738
31739(define-public python-mujson
31740 (package
31741 (name "python-mujson")
31742 (version "1.4")
31743 (source
31744 (origin
31745 (method git-fetch)
31746 (uri (git-reference
31747 (url "https://github.com/mattgiles/mujson")
31748 (commit version)))
31749 (file-name (git-file-name name version))
31750 (sha256
31751 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31752 (build-system pyproject-build-system)
31753 (arguments (list #:tests? #f)) ;No tests.
31754 (native-inputs (list python-setuptools))
31755 (home-page "https://github.com/mattgiles/mujson")
31756 (synopsis "Use the fastest JSON functions available at import time")
31757 (description
31758 "This module selects the fastest JSON functions available at import time
31759in Python.")
31760 (license license:expat)))
31761
31762(define-public python-bashlex
31763 (package
31764 (name "python-bashlex")
31765 (version "0.18")
31766 (source
31767 (origin
31768 (method git-fetch)
31769 (uri (git-reference
31770 (url "https://github.com/idank/bashlex")
31771 (commit version)))
31772 (file-name (git-file-name name version))
31773 (sha256
31774 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31775 (build-system pyproject-build-system)
31776 (arguments
31777 (list
31778 #:phases
31779 #~(modify-phases %standard-phases
31780 (add-before 'build 'pregenerate-yacc-tables
31781 (lambda _
31782 ;; parser.py caches tables, which attempts to write to site lib
31783 ;; see https://github.com/idank/bashlex/issues/51
31784 (invoke "python" "-c" "import bashlex"))))))
31785 (native-inputs (list python-pytest python-setuptools))
31786 (home-page "https://github.com/idank/bashlex")
31787 (synopsis "Python parser for bash")
31788 (description
31789 "@code{bashlex} is a Python port of the parser used internally by GNU
31790bash.
31791
31792For the most part it's transliterated from C, the major differences are:
31793
31794@itemize
31795@item it does not execute anything
31796@item it is reentrant
31797@item it generates a complete AST
31798@end itemize
31799")
31800 (license license:gpl3+)))
31801
31802(define-public python-jinxed
31803 (package
31804 (name "python-jinxed")
31805 (version "1.3.0")
31806 (source
31807 (origin
31808 (method git-fetch)
31809 (uri (git-reference
31810 (url "https://github.com/Rockhopper-Technologies/jinxed")
31811 (commit version)))
31812 (file-name (git-file-name name version))
31813 (sha256
31814 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31815 (build-system pyproject-build-system)
31816 (arguments
31817 (list
31818 #:tests? #f ;_curses.error: setupterm: could not find terminal
31819 #:phases
31820 #~(modify-phases %standard-phases
31821 (add-before 'check 'set-environment-variables
31822 (lambda* (#:key inputs #:allow-other-keys)
31823 (setenv "TERM" "LINUX")
31824 (setenv "TERMINFO"
31825 (search-input-directory inputs "share/terminfo")))))))
31826 (native-inputs (list ncurses python-setuptools))
31827 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31828 (synopsis "Jinxed Terminal Library")
31829 (description
31830 "Jinxed is an implementation of a subset of the Python curses library.")
31831 (license license:mpl2.0)))
31832
31833(define-public python-blessed
31834 (package
31835 (name "python-blessed")
31836 (version "1.20.0")
31837 (source
31838 (origin
31839 (method url-fetch)
31840 (uri (pypi-uri "blessed" version))
31841 (sha256
31842 (base32
31843 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31844 (snippet
31845 ;; Don't get hung up on Windows test failures.
31846 '(delete-file "blessed/win_terminal.py"))))
31847 (build-system pyproject-build-system)
31848 (propagated-inputs (list python-six python-wcwidth))
31849 (native-inputs (list python-pytest python-setuptools python-wheel))
31850 (home-page "https://github.com/jquast/blessed")
31851 (synopsis "Wrapper around terminal capabilities")
31852 (description
31853 "Blessed is a thin, practical wrapper around terminal styling, screen
31854positioning, and keyboard input.")
31855 (license license:expat)))
31856
31857(define-public python-readme-renderer
31858 (package
31859 (name "python-readme-renderer")
31860 (version "45.0")
31861 (source
31862 (origin
31863 (method git-fetch)
31864 (uri (git-reference
31865 (url "https://github.com/pypa/readme_renderer")
31866 (commit version)))
31867 (file-name (git-file-name name version))
31868 (sha256
31869 (base32 "15ald40v4vv7sb2as8z7jggcwdy0nbx5m0icqv4ii9wriqrzf7kx"))))
31870 (build-system pyproject-build-system)
31871 (arguments
31872 (list
31873 ;; tests: 99 passed, 2 skipped, 1 deselected, 1 warning
31874 #:test-flags
31875 ;; Assertion error in one test.
31876 #~(list (string-append "--deselect=tests/test_markdown.py"
31877 "::test_md_fixtures[test_GFM_headings.md]"))))
31878 (propagated-inputs
31879 (list python-docutils
31880 python-nh3
31881 python-pygments
31882 ;; [optional]
31883 python-comrak))
31884 (native-inputs
31885 (list python-pytest
31886 python-setuptools))
31887 (home-page "https://github.com/pypa/readme_renderer")
31888 (synopsis "Render README files in Warehouse")
31889 (description
31890 "Readme Renderer is a library that will safely render arbitrary README
31891files into HTML. It is designed to be used in Warehouse to render the
31892@code{long_description} for packages. It can handle Markdown,
31893reStructuredText, and plain text.")
31894 (license license:asl2.0)))
31895
31896(define-public python-lazr-delegates
31897 (package
31898 (name "python-lazr-delegates")
31899 (version "2.1.1")
31900 (source
31901 (origin
31902 (method url-fetch)
31903 (uri (pypi-uri "lazr_delegates" version))
31904 (sha256
31905 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31906 (build-system pyproject-build-system)
31907 (arguments
31908 (list
31909 #:test-flags #~(list "-v" #$output)
31910 #:phases
31911 #~(modify-phases %standard-phases
31912 (add-after 'check 'check-cleanup
31913 (lambda* (#:key tests? #:allow-other-keys)
31914 (when tests?
31915 (for-each
31916 delete-file-recursively
31917 (find-files #$output
31918 (lambda (file stat)
31919 (or (member (basename file)
31920 '("tests" ".pytest_cache"))))
31921 #:directories? #t))))))))
31922 (native-inputs
31923 (list python-pytest python-setuptools python-wheel))
31924 (propagated-inputs
31925 (list python-zope-interface))
31926 (home-page "https://launchpad.net/lazr.delegates")
31927 (synopsis "Easily write objects that delegate behavior")
31928 (description
31929 "The @code{lazr.delegates} package makes it easy to write objects that
31930delegate behavior to another object. The new object adds some property or
31931behavior on to the other object, while still providing the underlying interface,
31932and delegating behavior.")
31933 (license license:lgpl3)))
31934
31935(define-public python-lazr-config
31936 (package
31937 (name "python-lazr-config")
31938 (version "3.1")
31939 (source
31940 (origin
31941 (method url-fetch)
31942 (uri (pypi-uri "lazr_config" version))
31943 (sha256
31944 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31945 (build-system pyproject-build-system)
31946 (arguments
31947 (list
31948 #:test-flags #~(list "-v" #$output)
31949 #:phases
31950 #~(modify-phases %standard-phases
31951 (add-after 'check 'check-cleanup
31952 (lambda* (#:key tests? #:allow-other-keys)
31953 (when tests?
31954 (for-each
31955 delete-file-recursively
31956 (find-files #$output
31957 (lambda (file stat)
31958 (or (member (basename file)
31959 '("tests" ".pytest_cache"))))
31960 #:directories? #t))))))))
31961 (native-inputs
31962 (list python-pytest python-setuptools python-wheel))
31963 (propagated-inputs
31964 (list python-lazr-delegates python-zope-interface))
31965 (home-page "https://launchpad.net/lazr.config")
31966 (synopsis "Create configuration schemas and process and validate configurations")
31967 (description
31968 "The LAZR config system is typically used to manage process configuration.
31969Process configuration is for saying how things change when we run systems on
31970different machines, or under different circumstances. This system uses ini-like
31971file format of section, keys, and values. The config file supports inheritance
31972to minimize duplication of information across files. The format supports schema
31973validation.")
31974 (license license:lgpl3)))
31975
31976(define-public python-flufl-bounce
31977 (package
31978 (name "python-flufl-bounce")
31979 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31980 (revision . "0")))
31981 (version (git-version "4.0"
31982 (assoc-ref properties 'revision)
31983 (assoc-ref properties 'commit)))
31984 (source
31985 (origin
31986 (method git-fetch)
31987 (uri (git-reference
31988 (url "https://gitlab.com/flufl/flufl.bounce")
31989 (commit (assoc-ref properties 'commit))))
31990 (file-name (git-file-name name version))
31991 (sha256
31992 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31993 (build-system pyproject-build-system)
31994 (arguments
31995 (list
31996 #:phases
31997 #~(modify-phases %standard-phases
31998 (replace 'check
31999 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
32000 (when tests?
32001 (with-directory-excursion
32002 (string-append (site-packages inputs outputs) "/flufl")
32003 (invoke "python" "-m" "nose2" "-v"))))))))
32004 (propagated-inputs
32005 (list python-atpublic python-zope-interface))
32006 (native-inputs
32007 (list python-flufl-testing python-nose2 python-setuptools))
32008 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
32009 (synopsis "Email bounce detectors")
32010 (description "The @code{flufl.bounce} library provides a set of heuristics
32011and an API for detecting the original bouncing email addresses from a bounce
32012message. Many formats found in the wild are supported, as are VERP and
32013RFC 3464.")
32014 (license (list license:asl2.0
32015 license:lgpl3)))) ; only for setup_headers.py
32016
32017(define-public python-flufl-i18n
32018 (package
32019 (name "python-flufl-i18n")
32020 (version "5.1.0")
32021 (source
32022 (origin
32023 (method url-fetch)
32024 (uri (pypi-uri "flufl_i18n" version))
32025 (sha256
32026 (base32
32027 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
32028 (build-system pyproject-build-system)
32029 (arguments
32030 (list #:test-flags
32031 #~(list "--no-cov" "--ignore-glob=docs/*")
32032 #:phases
32033 #~(modify-phases %standard-phases
32034 ;; This phase add a symlink of dist-info dir for packages
32035 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
32036 (add-after 'install 'add-custom-dist-info
32037 (lambda _
32038 (for-each
32039 (lambda (dir)
32040 (with-directory-excursion (dirname dir)
32041 (let ((base (basename dir)))
32042 (symlink base
32043 (string-join (string-split base #\_) ".")))))
32044 (find-files #$output
32045 (lambda (file stat)
32046 (string-suffix? ".dist-info" file))
32047 #:directories? #t)))))))
32048 (propagated-inputs
32049 (list python-atpublic))
32050 (native-inputs
32051 (list python-hatchling python-pytest python-sybil))
32052 (home-page "https://flufli18n.readthedocs.io")
32053 (synopsis "API for Python internationalization")
32054 (description
32055 "This package provides a high-level, convenient API for managing
32056internationalization/translation contexts in Python applications. There is a
32057simple API for single-context applications, such as command line scripts which
32058only need to translate into one language during the entire course of their
32059execution. There is a more flexible, but still convenient API for multi-context
32060applications, such as servers, which may need to switch language contexts for
32061different tasks.")
32062 (license license:asl2.0)))
32063
32064(define-public python-flufl-lock
32065 (package
32066 (name "python-flufl-lock")
32067 (version "8.1.0")
32068 (source
32069 (origin
32070 (method url-fetch)
32071 (uri (pypi-uri "flufl.lock" version))
32072 (sha256
32073 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
32074 (build-system pyproject-build-system)
32075 (arguments
32076 (list #:test-flags
32077 #~(list "--no-cov" "--ignore-glob=docs/*")
32078 #:phases
32079 #~(modify-phases %standard-phases
32080 ;; This phase add a symlink of dist-info dir for packages
32081 ;; expecting flufl.lock rather than flufl_lock (mailman).
32082 (add-after 'install 'add-custom-dist-info
32083 (lambda _
32084 (for-each
32085 (lambda (dir)
32086 (with-directory-excursion (dirname dir)
32087 (let ((base (basename dir)))
32088 (symlink base
32089 (string-join (string-split base #\_) ".")))))
32090 (find-files #$output
32091 (lambda (file stat)
32092 (string-suffix? ".dist-info" file))
32093 #:directories? #t)))))))
32094 (native-inputs
32095 (list python-hatchling python-pytest python-sybil))
32096 (propagated-inputs
32097 (list python-atpublic python-psutil))
32098 (home-page "https://flufllock.readthedocs.io")
32099 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
32100 (description
32101 "The @dfn{flufl.lock} package provides NFS-safe file locking with
32102timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
32103@code{open} system call but uses a lockfile. Lock objects support lock-breaking
32104and have a maximum lifetime built-in.")
32105 (license (list license:asl2.0
32106 license:lgpl3)))) ; only for setup_helpers.py
32107
32108(define-public python-flufl-testing
32109 (package
32110 (name "python-flufl-testing")
32111 (version "0.8")
32112 (source
32113 (origin
32114 (method git-fetch)
32115 (uri (git-reference
32116 (url "https://gitlab.com/warsaw/flufl.testing")
32117 (commit version)))
32118 (file-name (git-file-name name version))
32119 (sha256
32120 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
32121 (build-system pyproject-build-system)
32122 (arguments (list #:tests? #f)) ;no tests
32123 (native-inputs (list python-setuptools))
32124 (home-page "https://gitlab.com/warsaw/flufl.testing")
32125 (synopsis "Collection of test tool plugins")
32126 (description
32127 "This package contains a small collection of test tool plugins for
32128@code{nose2} and @code{flake8}.")
32129 (license license:asl2.0)))
32130
32131(define-public python-devtools
32132 (package
32133 (name "python-devtools")
32134 (version "0.12.2")
32135 (source
32136 (origin
32137 (method git-fetch)
32138 (uri (git-reference
32139 (url "https://github.com/samuelcolvin/python-devtools")
32140 (commit (string-append "v" version))))
32141 (file-name (git-file-name name version))
32142 (sha256
32143 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
32144 (build-system pyproject-build-system)
32145 (arguments
32146 (list
32147 #:test-flags
32148 ;; Disable some failing tests.
32149 ;;
32150 ;; test_print_subprocess seems to inherit wrong environment, fails with
32151 ;; E + ModuleNotFoundError: No module named 'executing'
32152 ;; Test runs fine from local clone.
32153 ;;
32154 ;; test_executing_failure fails with
32155 ;; E - [1, 2] (list) len=2
32156 ;; E + [x, y]: [1, 2] (list) len=2
32157 ;; unclear why, probably due to a dependency.
32158 '(list "-k" "not test_print_subprocess and not test_executing_failure"
32159 ;; test_insert_assert.py also seems to inherit a bad environment:
32160 ;; E fixture 'pytester_pretty' not found
32161 ;; Test runs fine from local clone.
32162 "--ignore=tests/test_insert_assert.py")))
32163 (native-inputs
32164 (list python-hatchling python-pytest python-pytest-mock))
32165 (propagated-inputs
32166 (list python-asttokens python-executing python-pygments))
32167 (home-page "https://github.com/samuelcolvin/python-devtools")
32168 (synopsis "Debug command and development tools")
32169 (description
32170 "This package provides a debug print command and other development tools.
32171It adds a simple and readable way to print stuff during development.")
32172 (license license:expat)))
32173
32174(define-public python-dateparser
32175 (package
32176 (name "python-dateparser")
32177 (version "1.2.2")
32178 (source
32179 (origin
32180 (method url-fetch)
32181 (uri (pypi-uri "dateparser" version))
32182 (sha256
32183 (base32
32184 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
32185 (build-system pyproject-build-system)
32186 (arguments
32187 (list
32188 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
32189 #:test-flags
32190 #~(list (string-join '("--deselect=tests/test_search.py"
32191 "TestTranslateSearch"
32192 "test_search_dates_with_prepositions")
32193 "::"))))
32194 (propagated-inputs
32195 (list python-dateutil
32196 python-pytz
32197 python-regex
32198 python-tzlocal))
32199 (native-inputs
32200 (list python-parameterized
32201 python-pytest
32202 python-setuptools
32203 tzdata-for-tests))
32204 (home-page "https://github.com/scrapinghub/dateparser")
32205 (synopsis
32206 "Date parsing library designed to parse dates from HTML pages")
32207 (description
32208 "@code{python-dateparser} provides modules to easily parse localized
32209dates in almost any string formats commonly found on web pages.")
32210 (license license:bsd-3)))
32211
32212(define-public python-dparse
32213 (package
32214 (name "python-dparse")
32215 (version "0.6.4")
32216 (source
32217 (origin
32218 (method url-fetch)
32219 (uri (pypi-uri "dparse" version))
32220 (sha256
32221 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
32222 (build-system pyproject-build-system)
32223 (native-inputs (list python-hatchling python-pytest))
32224 (propagated-inputs (list python-packaging python-toml))
32225 (home-page "https://github.com/pyupio/dparse")
32226 (synopsis "Parser for Python dependency files")
32227 (description "This package provides a parser for Python dependency files.")
32228 (license license:expat)))
32229
32230(define-public python-dpath
32231 (package
32232 (name "python-dpath")
32233 (version "2.2.0")
32234 (source
32235 (origin
32236 (method url-fetch)
32237 (uri (pypi-uri "dpath" version))
32238 (sha256
32239 (base32
32240 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
32241 (build-system pyproject-build-system)
32242 (native-inputs
32243 (list python-hypothesis python-nose2 python-setuptools python-wheel))
32244 (home-page "https://github.com/akesterson/dpath-python")
32245 (synopsis "File-system-like pathing and searching for dictionaries")
32246 (description
32247 "@code{python-dpath} is a library for accessing and searching
32248dictionaries via /slashed/paths ala xpath.
32249
32250Basically it lets you glob over a dictionary as if it were a file system. It
32251allows you to specify globs (ala the bash eglob syntax, through some advanced
32252fnmatch.fnmatch magic) to access dictionary elements, and provides some
32253facility for filtering those results.")
32254 (license license:expat)))
32255
32256(define-public python-safety
32257 (package
32258 (name "python-safety")
32259 (version "3.8.1")
32260 (source
32261 (origin
32262 (method git-fetch)
32263 (uri (git-reference
32264 (url "https://github.com/pyupio/safety")
32265 (commit version)))
32266 (file-name (git-file-name name version))
32267 (sha256
32268 (base32 "00i0jgv89kwbp130ykrfp2754k06agqs9sflsjpafcrf3jx7r9n4"))
32269 (patches
32270 (list
32271 (origin
32272 (method url-fetch)
32273 (uri (string-append
32274 "https://github.com/pyupio/safety/commit/"
32275 "145a3956007a01e57a8e05d111633c2309ad3374.patch"))
32276 (sha256
32277 (base32
32278 "00bsqhbvvpiycdz01vvxkp02i10rn3h5xaffib20h8yxnvx2xjbj")))))))
32279 (build-system pyproject-build-system)
32280 (arguments
32281 (list
32282 #:phases
32283 #~(modify-phases %standard-phases
32284 (add-after 'unpack 'disable-telemetry
32285 (lambda _
32286 (substitute* (find-files "." "\\.py$")
32287 (("telemetry: bool = True")
32288 "telemetry: bool = False")
32289 (("telemetry=True")
32290 "telemetry=False"))))
32291 (add-before 'check 'set-home ; some tests run mkdir
32292 (lambda _
32293 (setenv "HOME" "/tmp"))))))
32294 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32295 (propagated-inputs (list python-authlib
32296 python-certifi
32297 python-click
32298 python-dparse
32299 python-filelock
32300 python-httpx
32301 python-jinja2
32302 python-marshmallow
32303 python-nltk
32304 python-packaging
32305 python-pydantic
32306 python-safety-schemas
32307 python-tenacity
32308 python-tomli
32309 python-tomlkit
32310 python-truststore
32311 ;; XXX: python-safety subclasses click.Context
32312 ;; in a way that assumes Typer still delegates
32313 ;; to the standalone python-click package.
32314 python-typer-without-click
32315 python-typing-extensions))
32316 (home-page "https://github.com/pyupio/safety")
32317 (synopsis "Check installed dependencies for known vulnerabilities")
32318 (description
32319 "Safety checks installed dependencies for known vulnerabilities.
32320By default it uses the open Python vulnerability database Safety DB.")
32321 (license license:expat)))
32322
32323(define-public python-pypandoc
32324 (package
32325 (name "python-pypandoc")
32326 (version "1.15")
32327 (source
32328 (origin
32329 (method git-fetch)
32330 (uri (git-reference
32331 (url "https://github.com/JessicaTegner/pypandoc")
32332 (commit (string-append "v" version))))
32333 (file-name (git-file-name name version))
32334 (sha256
32335 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32336 (build-system pyproject-build-system)
32337 (arguments
32338 (list
32339 #:test-backend #~'unittest
32340 #:phases
32341 #~(modify-phases %standard-phases
32342 (add-before 'check 'disable-tests
32343 (lambda _
32344 (substitute* "tests.py"
32345 ;; Disable test requiring network access
32346 (("test_basic_conversion_from_http_url")
32347 "skip_test_basic_conversion_from_http_url")
32348 ;; Disable tests with missing files
32349 (("test_basic_conversion_from_file_pattern")
32350 "skip_test_basic_conversion_from_file_pattern")
32351 (("test_conversion_with_data_files")
32352 "skip_test_conversion_with_data_files")))))))
32353 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32354 ;; the missing etoolbox.sty file is added
32355 (native-inputs
32356 (list (texlive-local-tree
32357 (list texlive-etoolbox
32358 texlive-lm
32359 texlive-regexpatch
32360 texlive-xcolor))
32361 python-poetry-core
32362 python-setuptools))
32363 (inputs (list pandoc python-pandocfilters))
32364 (propagated-inputs (list python-wheel))
32365 (home-page "https://github.com/JessicaTegner/pypandoc")
32366 (synopsis "Python wrapper for pandoc")
32367 (description
32368 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32369 (license license:expat)))
32370
32371(define-public python-rnc2rng
32372 (package
32373 (name "python-rnc2rng")
32374 (version "2.7.0")
32375 (source
32376 (origin
32377 (method git-fetch)
32378 (uri (git-reference
32379 (url "https://github.com/djc/rnc2rng")
32380 (commit version)))
32381 (file-name (git-file-name name version))
32382 (sha256
32383 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32384 (build-system pyproject-build-system)
32385 (arguments
32386 (list
32387 #:test-backend #~'custom
32388 #:test-flags #~(list "test.py")))
32389 (native-inputs (list python-setuptools))
32390 (propagated-inputs (list python-rply))
32391 (home-page "https://github.com/djc/rnc2rng")
32392 (synopsis "Convert RELAX NG Compact to regular syntax")
32393 (description
32394 "This package provides the @command{rnc2rng} command-line tool as well as
32395a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32396equivalent schemata in the XML-based default RELAX NG syntax.")
32397 (license license:expat)))
32398
32399(define-public python-citeproc-py
32400 (package
32401 (name "python-citeproc-py")
32402 (version "0.9.0")
32403 (source
32404 (origin
32405 (method git-fetch)
32406 (uri (git-reference
32407 (url "https://github.com/brechtm/citeproc-py")
32408 (commit (string-append "v" version))
32409 (recursive? #t))) ; TODO Unbundle.
32410 (file-name (git-file-name name version))
32411 (sha256
32412 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32413 (build-system pyproject-build-system)
32414 (arguments
32415 (list
32416 #:phases
32417 #~(modify-phases %standard-phases
32418 (add-after 'unpack 'set-version
32419 (lambda _
32420 (delete-file "citeproc/_version.py")
32421 (substitute* "citeproc/__init__.py"
32422 (("from \\. import version")
32423 "")
32424 (("__version__ =.*")
32425 (format #f "__version__ = ~s" #$version))))))))
32426 (native-inputs (list python-pytest python-setuptools))
32427 (propagated-inputs (list python-lxml python-rnc2rng))
32428 (home-page "https://github.com/brechtm/citeproc-py")
32429 (synopsis "Citations and bibliography formatter")
32430 (description
32431 "Citeproc-py is a CSL processor for Python. It aims to implement the
32432CSL 1.0.1 specification. citeproc-py can output styled citations and
32433bibliographies in a number of different output formats. Currently supported
32434are plain text, reStructuredText and HTML.")
32435 (license license:bsd-2)))
32436
32437(define-public python-inform
32438 (package
32439 (name "python-inform")
32440 (version "1.34")
32441 (source
32442 (origin
32443 (method git-fetch) ; no tests in PyPI release
32444 (uri (git-reference
32445 (url "https://github.com/kenkundert/inform")
32446 (commit (string-append "v" version))))
32447 (file-name (git-file-name name version))
32448 (sha256
32449 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32450 (build-system pyproject-build-system)
32451 (arguments
32452 (list
32453 #:test-flags #~(list "-k" (string-append
32454 ;; Test below needs the num2words package
32455 "not test_plural_words"
32456 ;; These last two failed with AssertionError
32457 " and not test_inform"
32458 " and not test_manual"))))
32459 (native-inputs
32460 (list python-flit-core python-pytest))
32461 (propagated-inputs
32462 (list python-arrow))
32463 (home-page "https://inform.readthedocs.io")
32464 (synopsis "Print & logging utilities for communicating with user")
32465 (description
32466 "Inform is designed to display messages from programs that are typically run from
32467a console. It provides a collection of ‘print’ functions that allow you to simply and
32468cleanly print different types of messages.")
32469 (license license:gpl3+)))
32470
32471(define-public python-nestedtext
32472 (package
32473 (name "python-nestedtext")
32474 (version "3.7")
32475 (source
32476 (origin
32477 (method git-fetch) ; no tests in PyPI release
32478 (uri (git-reference
32479 (url "https://github.com/KenKundert/nestedtext")
32480 (commit (string-append "v" version))))
32481 (file-name (git-file-name name version))
32482 (sha256
32483 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32484 (build-system pyproject-build-system)
32485 (arguments
32486 (list
32487 ;; XXX: Tests below need some not yet packaged Python libraries.
32488 #:test-flags #~(list "--ignore" "examples/"
32489 "--ignore" "tests/test_nestedtext.py"
32490 "-k" (string-append
32491 "not techniques.rst"
32492 " and not nestedtext.nestedtext.dumps"))))
32493 (native-inputs (list python-flit-core python-pytest))
32494 (propagated-inputs
32495 (list python-inform))
32496 (home-page "https://nestedtext.org")
32497 (synopsis "Human readable and writable data interchange format")
32498 (description
32499 "NestedText is a file format for holding data that is to be entered, edited, or
32500viewed by people. It allows data to be organized into a nested collection of
32501dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32502without the complexity and risk of YAML and without the syntactic clutter of JSON.
32503NestedText is both simple and natural. Only a small number of concepts and rules must
32504be kept in mind when creating it. It is easily created, modified, or viewed with
32505a text editor and easily understood and used by both programmers and non-programmers.")
32506 (license license:expat))) ; MIT license
32507
32508(define-public python-nest-asyncio
32509 (package
32510 (name "python-nest-asyncio")
32511 (version "1.6.0")
32512 (source
32513 (origin
32514 (method url-fetch)
32515 (uri (pypi-uri "nest_asyncio" version))
32516 (sha256
32517 (base32
32518 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32519 (build-system pyproject-build-system)
32520 (native-inputs
32521 (list python-pytest python-setuptools))
32522 (home-page "https://github.com/erdewit/nest_asyncio")
32523 (synopsis "Patch asyncio to allow nested event loops")
32524 (description
32525 "By design @code{asyncio} does not allow its event loop to be nested.
32526This presents a practical problem: when in an environment where the event loop
32527is already running it's impossible to run tasks and wait for the result. This
32528module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32529@code{loop.run_until_complete}.")
32530 (license license:bsd-3)))
32531
32532(define-public python-simpervisor
32533 (package
32534 (name "python-simpervisor")
32535 (version "1.0.0")
32536 (source
32537 (origin
32538 ;; Tests not included in release.
32539 (method git-fetch)
32540 (uri (git-reference
32541 (url "https://github.com/yuvipanda/simpervisor")
32542 (commit (string-append "v" version))))
32543 (file-name (git-file-name name version))
32544 (sha256
32545 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32546 (build-system pyproject-build-system)
32547 (arguments
32548 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32549 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32550 (native-inputs
32551 (list python-aiohttp
32552 python-hatchling
32553 python-psutil
32554 python-pytest
32555 python-pytest-asyncio))
32556 (home-page "https://github.com/yuvipanda/simpervisor")
32557 (synopsis "Simple async process supervisor")
32558 (description
32559 "This package provides a simple async process supervisor in Python.")
32560 (license license:bsd-3)))
32561
32562(define-public python-parallel
32563 (package
32564 (name "python-parallel")
32565 (version "1.6.4.4")
32566 (source
32567 (origin
32568 (method url-fetch)
32569 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32570 version ".zip"))
32571 (sha256
32572 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32573 (build-system pyproject-build-system)
32574 (arguments (list #:tests? #f)) ;No test suite.
32575 (native-inputs (list python-setuptools unzip))
32576 (propagated-inputs (list python-six))
32577 (home-page "https://www.parallelpython.com")
32578 (synopsis "Parallel and distributed programming for Python")
32579 (description
32580 "Parallel Python module (PP) provides an easy and efficient way to create
32581parallel-enabled applications for SMP computers and clusters. PP module
32582features cross-platform portability and dynamic load balancing. Thus
32583applications written with PP will parallelize efficiently even on
32584heterogeneous and multi-platform clusters (including clusters running other
32585applications with variable CPU loads).")
32586 (license license:bsd-3)))
32587
32588(define-public python-param
32589 (package
32590 (name "python-param")
32591 (version "2.3.3")
32592 (source
32593 (origin
32594 (method git-fetch)
32595 (uri (git-reference
32596 (url "https://github.com/holoviz/param")
32597 (commit (string-append "v" version))))
32598 (file-name (git-file-name name version))
32599 (sha256
32600 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32601 (build-system pyproject-build-system)
32602 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32603 (native-inputs
32604 ;; Project does not require any dependencies, all of the listed
32605 ;; native-inputs are for build/test only.
32606 (list python-cloudpickle
32607 python-hatch-vcs
32608 python-hatchling
32609 python-ipython-minimal
32610 python-jsonschema
32611 python-nbval
32612 python-nest-asyncio
32613 python-numpy
32614 python-odfpy
32615 python-openpyxl
32616 python-pandas
32617 python-pyarrow
32618 python-pytest
32619 python-pytest-asyncio
32620 python-tables
32621 python-xlrd))
32622 (home-page "https://param.holoviz.org/")
32623 (synopsis
32624 "Make your Python code clearer and more reliable by declaring Parameters")
32625 (description
32626 "Param is a library for handling all the user-modifiable parameters,
32627arguments, and attributes that control your code. It provides automatic,
32628robust error-checking while dramatically reducing boilerplate code, letting
32629you focus on what you want your code to do rather than on checking for all the
32630possible ways users could supply inappropriate values to a function or
32631class.")
32632 (license license:bsd-3)))
32633
32634(define-public python-djitellopy
32635 (package
32636 (name "python-djitellopy")
32637 (version "2.5.0")
32638 (source
32639 (origin
32640 (method url-fetch)
32641 (uri (pypi-uri "djitellopy" version))
32642 (sha256
32643 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32644 (build-system pyproject-build-system)
32645 (arguments
32646 (list
32647 #:tests? #f ;no test suite
32648 #:phases
32649 #~(modify-phases %standard-phases
32650 ;; OpenCV does not ship metadata files for its Python library, which
32651 ;; makes it invisible to the sanity_check script (see:
32652 ;; https://github.com/opencv/opencv/issues/24810).
32653 (delete 'sanity-check))))
32654 (propagated-inputs
32655 (list opencv ;for opencv-python
32656 python-av
32657 python-numpy
32658 python-pillow))
32659 (native-inputs (list python-setuptools python-wheel))
32660 (home-page "https://github.com/damiafuentes/DJITelloPy")
32661 (synopsis
32662 "DJI Tello drone video streaming, swarms and state packets library")
32663 (description
32664 "DJI Tello drone Python interface using the official Tello SDK and Tello
32665EDU SDK. This library has the following features:
32666@itemize
32667@item Implementation of all tello commands
32668@item Retrieve a video stream easily
32669@item Receive and parse state packets
32670@item Control a swarm of drones.
32671@end itemize")
32672 (license license:expat)))
32673
32674(define-public python-djvulibre
32675 ;; The original git repository of python-djvulibre is hosted at
32676 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32677 ;; has been archived by its owner in 2022. The most active fork is
32678 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32679 ;; version packaged here (its "python3" branch, the default).
32680 ;;
32681 ;; However, the python-djvulibre PyPI project still refers to the old
32682 ;; repository. The new repository is published as djvulibre-python on PyPI;
32683 ;; that is, with the name in reversed order.The original package name is
32684 ;; used in Guix because it best adheres to the Guix naming scheme.
32685 (package
32686 (name "python-djvulibre")
32687 (version "0.9.3")
32688 (source
32689 (origin
32690 (method git-fetch)
32691 (uri (git-reference
32692 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32693 (commit version)))
32694 (file-name (git-file-name name version))
32695 (sha256
32696 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32697 (build-system pyproject-build-system)
32698 (arguments
32699 (list
32700 #:phases
32701 #~(modify-phases %standard-phases
32702 (replace 'check
32703 (lambda* (#:key tests? #:allow-other-keys)
32704 (when tests?
32705 ;; The tests get confused by the djvu directory.
32706 (delete-file-recursively "djvu")
32707 ;; Tests can't find tools.py otherwise.
32708 (with-directory-excursion "tests"
32709 (invoke "python" "-m" "pytest"))))))))
32710 (native-inputs
32711 (list ghostscript
32712 pkg-config
32713 python-cython
32714 python-pytest
32715 python-setuptools))
32716 (inputs
32717 (list djvulibre))
32718 (synopsis "Python bindings for DjVuLibre")
32719 (description "This is a set of Python bindings for the DjVuLibre library.")
32720 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32721 (license license:gpl2)))
32722
32723(define-public python-gamera
32724 (package
32725 (name "python-gamera")
32726 (version "4.1.0")
32727 (source
32728 (origin
32729 (method git-fetch)
32730 (uri (git-reference
32731 (url "https://github.com/hsnr-gamera/gamera-4")
32732 (commit (string-append "v" version))))
32733 (file-name (git-file-name name version))
32734 (sha256
32735 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32736 (build-system pyproject-build-system)
32737 (arguments
32738 (list
32739 #:phases
32740 #~(modify-phases %standard-phases
32741 (add-after 'unpack 'fix-build
32742 (lambda _
32743 ;; The script to make daily build artifacts fails to compile,
32744 ;; but users don't need that, so ignore it.
32745 (delete-file "misc/daily_build.py")
32746 ;; Prepare tests
32747 (mkdir-p "tmp")
32748 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32749 (native-inputs (list python-docutils python-pytest python-setuptools))
32750 (inputs (list libpng libtiff zlib))
32751 (synopsis "Framework for building document analysis applications")
32752 (description
32753 "Gamera is a toolkit for building document image recognition systems.")
32754 (home-page "https://gamera.informatik.hsnr.de/")
32755 (license license:gpl2+)))
32756
32757(define-public python-aiofiles
32758 (package
32759 (name "python-aiofiles")
32760 (version "24.1.0")
32761 (source
32762 (origin
32763 (method url-fetch)
32764 (uri (pypi-uri "aiofiles" version))
32765 (sha256
32766 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32767 (build-system pyproject-build-system)
32768 (native-inputs
32769 (list python-hatch-vcs
32770 python-hatchling
32771 python-pytest
32772 python-pytest-asyncio))
32773 (home-page "https://github.com/Tinche/aiofiles")
32774 (synopsis "File support for @code{asyncio}")
32775 (description
32776 "@code{python-aiofiles} is a library for handling local disk files in
32777asyncio applications.")
32778 (license license:asl2.0)))
32779
32780(define-public python-pyre-extensions
32781 (package
32782 (name "python-pyre-extensions")
32783 (version "0.0.32")
32784 (source
32785 (origin
32786 (method url-fetch)
32787 (uri (pypi-uri "pyre_extensions" version))
32788 (sha256
32789 (base32
32790 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32791 (build-system pyproject-build-system)
32792 (native-inputs (list python-pytest python-setuptools python-wheel))
32793 (propagated-inputs
32794 (list python-typing-extensions python-typing-inspect))
32795 (home-page "https://pyre-check.org")
32796 (synopsis
32797 "Type system extensions for use with @code{python-pyre}")
32798 (description
32799 "@code{python-pyre-extensions} defines extensions to the standard
32800@code{typing} module that are supported by the Pyre typechecker.")
32801 (license license:expat)))
32802
32803(define-public python-pywatchman
32804 (package
32805 (name "python-pywatchman")
32806 (version "3.0.0")
32807 (source
32808 (origin
32809 (method url-fetch)
32810 (uri (pypi-uri "pywatchman" version))
32811 (sha256
32812 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32813 (build-system pyproject-build-system)
32814 (arguments
32815 (list
32816 #:test-backend #~'custom
32817 #:test-flags #~(list "tests/tests.py")))
32818 (native-inputs (list python-setuptools))
32819 (home-page "https://facebook.github.io/watchman/")
32820 (synopsis "Watchman client for python")
32821 (description
32822 "@code{python-pywatchman} is a library to connect and query Watchman to
32823discover file changes.")
32824 (license license:bsd-3)))
32825
32826(define-public python-roundrobin
32827 (package
32828 (name "python-roundrobin")
32829 (version "0.0.4")
32830 (source
32831 (origin
32832 (method git-fetch)
32833 (uri (git-reference
32834 (url "https://github.com/linnik/roundrobin")
32835 (commit version)))
32836 (file-name (git-file-name name version))
32837 (sha256
32838 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32839 (build-system pyproject-build-system)
32840 (arguments
32841 (list #:test-backend #~'unittest))
32842 (native-inputs (list python-setuptools))
32843 (home-page "https://github.com/linnik/roundrobin")
32844 (synopsis "Collection of roundrobin utilities")
32845 (description
32846 "This package provides a collection of utilities for round-robin
32847distribution in Python.")
32848 (license license:expat)))
32849
32850(define-public python-helpdev
32851 (package
32852 (name "python-helpdev")
32853 (version "0.7.1")
32854 (source
32855 (origin
32856 (method git-fetch)
32857 (uri (git-reference
32858 (url "https://gitlab.com/dpizetta/helpdev")
32859 (commit (string-append "v" version))))
32860 (file-name (git-file-name name version))
32861 (sha256
32862 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32863 (build-system pyproject-build-system)
32864 (native-inputs (list python-pip python-pytest python-setuptools))
32865 (home-page "https://gitlab.com/dpizetta/helpdev")
32866 (synopsis "Extract information about the Python environment easily")
32867 (description
32868 "Helpdev is a library to easily extract information about the Python
32869environment.")
32870 (license license:expat)))
32871
32872(define-public python-loguru
32873 (package
32874 (name "python-loguru")
32875 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32876 ;; covert to git tag when released.
32877 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32878 (revision . "0")))
32879 (version (git-version "0.7.3"
32880 (assoc-ref properties 'revision)
32881 (assoc-ref properties 'commit)))
32882 (source
32883 (origin
32884 (method git-fetch)
32885 (uri (git-reference
32886 (url "https://github.com/Delgan/loguru")
32887 (commit (assoc-ref properties 'commit))))
32888 (file-name (git-file-name name version))
32889 (sha256
32890 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32891 (build-system pyproject-build-system)
32892 ;; tests: x86_64-linux 1598 passed, 28 skipped
32893 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32894 (arguments
32895 (list
32896 #:test-flags
32897 #~(list #$@(if (target-64bit?)
32898 '()
32899 ;; OverflowError
32900 '("--deselect=tests/test_datetime.py::test_formatting"
32901 (string-append "--deselect=tests/test_datetime.py"
32902 "::test_value_of_gmtoff_is_invalid"))))))
32903 (native-inputs
32904 (list python-flit-core
32905 python-freezegun
32906 python-mypy-for-tests
32907 python-pytest
32908 python-setuptools
32909 tzdata-for-tests))
32910 (propagated-inputs
32911 (list python-colorama))
32912 (home-page "https://github.com/Delgan/loguru")
32913 (synopsis "Python logging made (stupidly) simple")
32914 (description "Python logging made (stupidly) simple.")
32915 (license license:expat)))
32916
32917(define-public python-qtsass
32918 (package
32919 (name "python-qtsass")
32920 (version "0.4.0")
32921 (source
32922 (origin
32923 ;; There are no tests in the PyPI tarball.
32924 (method git-fetch)
32925 (uri (git-reference
32926 (url "https://github.com/spyder-ide/qtsass/")
32927 (commit (string-append "v" version))))
32928 (file-name (git-file-name name version))
32929 (sha256
32930 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32931 (build-system pyproject-build-system)
32932 (native-inputs
32933 (list python-flaky python-pytest python-setuptools python-wheel))
32934 (propagated-inputs
32935 (list python-libsass))
32936 (home-page "https://github.com/spyder-ide/qtsass")
32937 (synopsis "Compile SCSS files to valid Qt stylesheets")
32938 (description
32939 "Besides being used in web development, CSS is also the way to stylize
32940Qt-based desktop applications. However, Qt's CSS has a few variations that
32941prevent the direct use of SASS compiler.
32942
32943The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32944handling those variations.")
32945 (license license:expat)))
32946
32947(define-public python-qdarkstyle
32948 (package
32949 (name "python-qdarkstyle")
32950 (version "3.2.3")
32951 (source
32952 (origin
32953 (method url-fetch)
32954 (uri (pypi-uri "QDarkStyle" version))
32955 (sha256
32956 (base32
32957 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32958 (build-system pyproject-build-system)
32959 (native-inputs (list python-pytest
32960 python-qtsass
32961 python-setuptools
32962 python-watchdog
32963 python-wheel))
32964 (propagated-inputs
32965 (list python-qtpy python-pyqt-6))
32966 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32967 (synopsis
32968 "Complete dark stylesheet for Python and Qt applications")
32969 (description "QDarkStyle is the most complete dark stylesheet for Python and
32970Qt applications.")
32971 (license license:expat)))
32972
32973(define-public python-pystray
32974 (package
32975 (name "python-pystray")
32976 (version "0.19.5")
32977 (source
32978 (origin
32979 (method git-fetch)
32980 (uri (git-reference
32981 (url "https://github.com/moses-palmer/pystray")
32982 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32983 (file-name (git-file-name name version))
32984 (sha256
32985 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32986 (build-system pyproject-build-system)
32987 (arguments
32988 (list
32989 ;; The test suite requires user interaction, there are no automated
32990 ;; tests.
32991 #:tests? #false
32992 #:phases #~(modify-phases %standard-phases
32993 (add-before 'sanity-check 'use-dummy-backend
32994 (lambda _
32995 ;; Without setting this, pystray tries to connect to
32996 ;; X11 on import.
32997 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32998 (native-inputs (list python-sphinx python-setuptools))
32999 (propagated-inputs (list python-pillow python-six python-xlib))
33000 (home-page "https://github.com/moses-palmer/pystray")
33001 (synopsis "Create a system tray icon")
33002 (description "This library allows you to create a system tray icon.
33003It makes it possible to specify an icon, a title and a callback for when
33004the icon is activated. The icon and title can be changed after the icon
33005has been created, and the visibility of the icon can be toggled.")
33006 (license license:lgpl3+)))
33007
33008(define-public python-bitstring
33009 (package
33010 (name "python-bitstring")
33011 (version "4.3.1")
33012 (source
33013 (origin
33014 (method url-fetch)
33015 (uri (pypi-uri "bitstring" version))
33016 (sha256
33017 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
33018 (build-system pyproject-build-system)
33019 (arguments
33020 (list
33021 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
33022 "--ignore=tests/test_fp8.py"
33023 "--ignore=tests/test_mxfp.py")))
33024 (native-inputs
33025 (list python-gfloat python-pytest python-setuptools python-wheel))
33026 (propagated-inputs
33027 (list python-bitarray))
33028 (home-page "https://github.com/scott-griffiths/bitstring")
33029 (synopsis
33030 "Simple construction, analysis and modification of binary data")
33031 (description
33032 "Bitstring is a library for simple construction, analysis and modification
33033 of binary data.")
33034 (license license:expat)))
33035
33036(define-public python-confuse
33037 (package
33038 (name "python-confuse")
33039 (version "2.0.1")
33040 (source
33041 (origin
33042 (method url-fetch)
33043 (uri (pypi-uri "confuse" version))
33044 (sha256
33045 (base32
33046 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
33047 (build-system pyproject-build-system)
33048 (native-inputs (list python-flit-core python-pytest))
33049 (propagated-inputs (list python-pyyaml))
33050 (home-page "https://github.com/beetbox/confuse")
33051 (synopsis "Painless YAML configuration")
33052 (description "Confuse is a configuration library for Python that uses
33053YAML. It takes care of defaults, overrides, type checking, command-line
33054integration, human-readable errors, and standard OS-specific locations.")
33055 (license license:expat)))
33056
33057(define-public python-referencing
33058 (package
33059 (name "python-referencing")
33060 (version "0.37.0")
33061 (source
33062 (origin
33063 (method git-fetch)
33064 (uri (git-reference
33065 (url "https://github.com/python-jsonschema/referencing")
33066 (commit (string-append "v" version))))
33067 (file-name (git-file-name name version))
33068 (sha256
33069 (base32 "1h9mlzpgqy3grby4f57qxhlmxy25qvz84g9w5r4g1d8g5qsvvv3j"))))
33070 (build-system pyproject-build-system)
33071 (arguments
33072 (list
33073 #:phases
33074 #~(modify-phases %standard-phases
33075 (add-before 'check 'pre-check
33076 (lambda _
33077 (setenv "REFERENCING_SUITE"
33078 (string-append #$(this-package-native-input
33079 "specification-referencing-suite")
33080 "/share")))))))
33081 (native-inputs
33082 (list python-hatchling
33083 python-hatch-vcs
33084 python-pytest
33085 specification-referencing-suite))
33086 (propagated-inputs
33087 (list python-attrs
33088 python-rpds-py
33089 python-typing-extensions)) ;Python version < 3.13
33090 (home-page "https://github.com/python-jsonschema/referencing")
33091 (synopsis "JSON Referencing + Python")
33092 (description "This package provides an implementation-agnostic
33093implementation of JSON reference resolution.")
33094 (license license:expat)))
33095
33096(define-public python-referencing-bootstrap
33097 (package
33098 (inherit python-referencing)
33099 (name "python-referencing-bootstrap")
33100 (arguments
33101 (list
33102 #:tests? #false
33103 #:phases
33104 '(modify-phases %standard-phases
33105 (add-after 'unpack 'patch-pyproject
33106 (lambda _
33107 ;; The build system does not like this.
33108 (substitute* "pyproject.toml"
33109 ((" \"Topic :: File Formats.*") "")))))))
33110 (native-inputs (list python-hatchling python-hatch-vcs))))
33111
33112(define-public python-reflink
33113 (package
33114 (name "python-reflink")
33115 (version "0.2.2")
33116 (source
33117 (origin
33118 (method git-fetch)
33119 (uri (git-reference
33120 (url "https://gitlab.com/rubdos/pyreflink")
33121 (commit version)))
33122 (file-name (git-file-name name version))
33123 (sha256
33124 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
33125 (build-system pyproject-build-system)
33126 (arguments
33127 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
33128 (propagated-inputs (list python-cffi))
33129 (native-inputs (list python-pytest python-setuptools))
33130 (home-page "https://gitlab.com/rubdos/pyreflink")
33131 (synopsis "Python wrapper around reflink system call")
33132 (description
33133 "Python reflink wraps around platform specific @code{reflink}
33134implementations.")
33135 (license license:expat)))
33136
33137(define-public python-retry
33138 ;; XXX: The project is abandoned upstream for 11y, remove when python-locust
33139 ;; drops it or we can find a way to avoid it.
33140 (package
33141 (name "python-retry")
33142 (version "0.9.2")
33143 (source
33144 (origin
33145 (method git-fetch)
33146 (uri (git-reference
33147 (url "https://github.com/invl/retry")
33148 (commit version)))
33149 (file-name (git-file-name name version))
33150 (sha256
33151 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
33152 (build-system pyproject-build-system)
33153 (arguments
33154 (list
33155 #:phases
33156 #~(modify-phases %standard-phases
33157 (add-after 'unpack 'relax-requirements
33158 (lambda _
33159 (substitute* "requirements.txt"
33160 (("py>=1.4.26,<2.0.0")
33161 "")))))))
33162 (native-inputs (list python-pbr python-pytest))
33163 (propagated-inputs (list python-decorator))
33164 (home-page "https://github.com/invl/retry")
33165 (synopsis "Retry decorator")
33166 (description
33167 "@code{retry} is an easy to use retry decorator for Python. It can be
33168used to retry a function a given number of times.")
33169 (license license:asl2.0)))
33170
33171(define-public python-crayons
33172 (package
33173 (name "python-crayons")
33174 (version "0.4.0")
33175 (source
33176 (origin
33177 (method git-fetch)
33178 (uri (git-reference
33179 (url "https://github.com/MasterOdin/crayons")
33180 (commit (string-append "v" version))))
33181 (file-name (git-file-name name version))
33182 (sha256
33183 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
33184 (build-system pyproject-build-system)
33185 (arguments
33186 (list
33187 #:test-backend #~'custom
33188 #:test-flags #~(list "test_crayons.py")))
33189 (native-inputs (list python-setuptools))
33190 (propagated-inputs (list python-colorama))
33191 (home-page "https://github.com/MasterOdin/crayons")
33192 (synopsis "TextUI colors for Python")
33193 (description
33194 "This package gives you colored strings for the terminal. Crayons
33195automatically wraps a given string in the foreground color and restores the
33196original state after the string is printed.")
33197 (license license:expat)))
33198
33199(define-public python-sane
33200 (package
33201 (name "python-sane")
33202 (version "2.9.2")
33203 (source
33204 (origin
33205 (method git-fetch)
33206 (uri (git-reference
33207 (url "https://github.com/python-pillow/Sane")
33208 (commit (string-append "v" version))))
33209 (file-name (git-file-name name version))
33210 (sha256
33211 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
33212 (build-system pyproject-build-system)
33213 (arguments (list #:tests? #f)) ; No tests.
33214 (native-inputs (list python-setuptools))
33215 (inputs (list sane))
33216 (home-page "https://github.com/python-pillow/Sane")
33217 (synopsis "Python interface to the SANE scanner")
33218 (description
33219 "This package provides Python interface to the SANE scanner and frame
33220grabber interface.")
33221 (license (license:non-copyleft
33222 ;; Yet another variant of the X/MIT license.
33223 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
33224
33225(define-public python-scikit-build
33226 (package
33227 (name "python-scikit-build")
33228 (version "0.18.1")
33229 (source
33230 (origin
33231 (method url-fetch)
33232 (uri (pypi-uri "scikit_build" version))
33233 (sha256
33234 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
33235 (patches
33236 (search-patches "python-scikit-build-setuptools-compat.patch"))))
33237 (build-system pyproject-build-system)
33238 (arguments
33239 (list
33240 #:phases
33241 #~(modify-phases %standard-phases
33242 (add-after 'unpack 'patch-cmake-executable
33243 (lambda* (#:key inputs #:allow-other-keys)
33244 (substitute* "skbuild/constants.py"
33245 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
33246 (format #f "~a ~s~%" head
33247 (search-input-file inputs "bin/cmake"))))))
33248 (add-before 'check 'pre-check
33249 (lambda _
33250 ;; Some tests try to access the network before being skipped.
33251 ;; Skip them by default.
33252 (substitute* "tests/test_setup.py"
33253 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
33254 "pytest.mark.isolated()\n"))))
33255 (replace 'check
33256 (lambda* (#:key tests? #:allow-other-keys)
33257 (when tests?
33258 ;; These tests attempt to pull dependencies from the Internet.
33259 (delete-file "tests/test_distribution.py")
33260 (delete-file "tests/test_pep518.py")
33261 ;; The tests marked as "isolate" are tests that require access
33262 ;; to the network.
33263 (invoke "pytest" "-vv" "-m" "not isolated"
33264 "-n" (number->string (parallel-job-count))
33265 "-k" (string-append
33266 ;; These tests attempt to write to read-only
33267 ;; Python install directory.
33268 "not test_install_command "
33269 "and not test_test_command "
33270 "and not test_hello_develop "
33271 ;; These sdist-related tests fail for unknown
33272 ;; reasons (see:
33273 ;; https://github.com/scikit-build/scikit-build/issues/689).
33274 "and not test_hello_sdist_with_base "
33275 "and not test_manifest_in_sdist "
33276 "and not test_hello_sdist "
33277 "and not test_sdist_with_symlinks "
33278 ;; These are not parallel safe and fail
33279 ;; nondeterministically (see:
33280 ;; https://github.com/scikit-build/scikit-build/issues/711).
33281 "and not test_generator_cleanup "
33282 "and not test_generator_selection "
33283 ;; … and there's more of them
33284 "and not test_cxx_compiler "
33285 "and not test_fortran_compiler ")))))
33286 (add-after 'install 'install-cmake
33287 (lambda* (#:key outputs #:allow-other-keys)
33288 (let ((lib (string-append (assoc-ref outputs "out")
33289 "/lib/cmake/modules")))
33290 (mkdir-p lib)
33291 (with-directory-excursion "skbuild/resources/cmake"
33292 (for-each (lambda (file) (install-file file lib))
33293 (find-files "." "\\.cmake")))))))))
33294 (native-inputs
33295 (list cmake-minimal
33296 gfortran
33297 git-minimal/pinned ;for tests
33298 ninja/pinned
33299 python-cython
33300 python-hatch-fancy-pypi-readme
33301 python-hatch-vcs
33302 python-hatchling
33303 python-pytest
33304 python-pytest-mock
33305 python-pytest-xdist
33306 python-requests
33307 python-virtualenv))
33308 (propagated-inputs
33309 (list python-distro
33310 python-packaging
33311 python-wheel))
33312 (home-page "https://github.com/scikit-build/scikit-build")
33313 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33314 (description "Scikit-build is an improved build system generator for
33315CPython C/C++/Fortran/Cython extensions. It has support for additional
33316compilers, build systems, cross compilation, and locating dependencies and
33317determining their build requirements. The scikit-build package is
33318fundamentally just glue between the @code{setuptools} Python module and
33319CMake.")
33320 (license license:expat)))
33321
33322(define-public python-screeninfo
33323 (package
33324 (name "python-screeninfo")
33325 (version "0.8.1")
33326 (source
33327 (origin
33328 (method git-fetch)
33329 (uri (git-reference
33330 (url "https://github.com/rr-/screeninfo")
33331 (commit version)))
33332 (file-name (git-file-name name version))
33333 (sha256
33334 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33335 (build-system pyproject-build-system)
33336 (native-inputs
33337 (list libdrm
33338 python-poetry-core
33339 python-pytest))
33340 (home-page "https://github.com/rr-/screeninfo")
33341 (synopsis "Fetch location and size of physical screens")
33342 (description
33343 "Fetch location and size of physical screens. GNU/Linux has support on
33344following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33345 (license license:expat)))
33346
33347;; Deprecated on <2026-07-23>.
33348(define-deprecated/public-alias python-screenkey
33349 (@ (gnu packages video) python-screenkey))
33350
33351(define-public python-jinja2-cli
33352 (package
33353 (name "python-jinja2-cli")
33354 (version "0.8.2")
33355 (source
33356 (origin
33357 (method git-fetch)
33358 (uri (git-reference
33359 (url "https://github.com/mattrobenolt/jinja2-cli")
33360 (commit version)))
33361 (file-name (git-file-name name version))
33362 (sha256
33363 (base32
33364 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33365 (build-system pyproject-build-system)
33366 (propagated-inputs
33367 (list python-jinja2))
33368 (native-inputs
33369 (list python-jinja2
33370 python-pytest
33371 python-setuptools
33372 python-wheel))
33373 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33374 (synopsis "Command-line interface to Jinja2")
33375 (description
33376 "This package provides a command-line interface (CLI) to the Jinja2
33377template engine.")
33378 (license license:bsd-3)))
33379
33380(define-public python-readability
33381 (package
33382 (name "python-readability")
33383 (version "0.3.1")
33384 (source
33385 (origin
33386 (method git-fetch)
33387 (uri (git-reference
33388 (url "https://github.com/andreasvc/readability/")
33389 (commit (string-append "v" version))))
33390 (file-name (git-file-name name version))
33391 (sha256
33392 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33393 (build-system pyproject-build-system)
33394 (arguments (list #:tests? #f)) ; No tests.
33395 (native-inputs (list python-setuptools))
33396 (home-page "https://github.com/andreasvc/readability/")
33397 (synopsis "Measure text readability using surface characteristics")
33398 (description
33399 "This package provides a Python library that is an implementation of
33400traditional readability measures based on simple surface characteristics.
33401These measures are basically linear regressions based on the number of words,
33402syllables, and sentences.")
33403 (license license:asl2.0)))
33404
33405(define-public python-readability-lxml
33406 (package
33407 (name "python-readability-lxml")
33408 (version "0.9")
33409 (source
33410 (origin
33411 (method git-fetch)
33412 (uri (git-reference
33413 (url "http://github.com/buriy/python-readability")
33414 (commit version)))
33415 (file-name (git-file-name name version))
33416 (sha256
33417 (base32 "05alz7i33m4n7097jl5slxy5k2lnnxwwadqw956gwk1fihyzidrp"))))
33418 (build-system pyproject-build-system)
33419 (native-inputs
33420 (list python-poetry-core
33421 python-pytest))
33422 (propagated-inputs
33423 (list python-chardet
33424 python-cssselect
33425 python-lxml
33426 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33427 (home-page "http://github.com/buriy/python-readability")
33428 (synopsis "HTML to text parser")
33429 (description
33430 "This package provides classes and function that strip gratuitous markup
33431from web pages to make them easier to read.")
33432 (license license:asl2.0)))
33433
33434(define-public python-listparser
33435 (package
33436 (name "python-listparser")
33437 (version "0.20")
33438 (source
33439 (origin
33440 (method git-fetch)
33441 (uri (git-reference
33442 (url "https://github.com/kurtmckee/listparser")
33443 (commit (string-append "v" version))))
33444 (file-name (git-file-name name version))
33445 (sha256
33446 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33447 (build-system pyproject-build-system)
33448 (native-inputs (list python-pytest python-poetry-core))
33449 (home-page "https://github.com/kurtmckee/listparser")
33450 (synopsis "Parse subscription lists in Python")
33451 (description
33452 "This package provides a Python library that can parse OPML, FOAF, and
33453iGoogle subscription lists.")
33454 (license license:expat)))
33455
33456(define-public python-smartypants
33457 (package
33458 (name "python-smartypants")
33459 (version "2.0.2")
33460 (source
33461 (origin
33462 (method url-fetch)
33463 (uri (pypi-uri "smartypants" version))
33464 (sha256
33465 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33466 (build-system pyproject-build-system)
33467 (native-inputs
33468 (list python-docutils python-pygments python-setuptools))
33469 (home-page "https://github.com/justinmayer/smartypants.py")
33470 (synopsis "Translate punctuation characters into smart quotes")
33471 (description
33472 "@command{smartpants} can perform the following transformations:
33473@enumerate
33474@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33475@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33476entities
33477@item Dashes (-- and ---) into en- and em-dash entities
33478@item Three consecutive dots (... or . . .) into an ellipsis entity
33479@end enumerate")
33480 (license license:bsd-3)))
33481
33482(define-public python-ld
33483 (package
33484 (name "python-ld")
33485 (version "1.9.0")
33486 (source
33487 (origin
33488 (method git-fetch)
33489 (uri (git-reference
33490 (url "https://github.com/nir0s/ld")
33491 (commit (string-append "v" version))))
33492 (file-name (git-file-name name version))
33493 (sha256
33494 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33495 (build-system pyproject-build-system)
33496 (arguments
33497 (list
33498 ;; XXX: These tests expect ubuntu distro.
33499 #:test-flags
33500 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33501 "test_ubuntu14nomodules_lsb_release"
33502 "test_trailingblanks_lsb_release")
33503 " and not "))))
33504 (native-inputs (list python-pytest python-setuptools))
33505 (home-page "https://github.com/nir0s/ld")
33506 (synopsis "OS platform information API")
33507 (description
33508 "The ld package provides information about the GNU/Linux distribution it
33509runs on, such as a reliable machine-readable ID, or version information.")
33510 (license license:asl2.0)))
33511
33512(define-public python-quicktions
33513 (package
33514 (name "python-quicktions")
33515 (version "1.22")
33516 (source
33517 (origin
33518 (method git-fetch)
33519 (uri (git-reference
33520 (url "https://github.com/scoder/quicktions")
33521 (commit version)))
33522 (file-name (git-file-name name version))
33523 (sha256
33524 (base32
33525 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33526 (build-system pyproject-build-system)
33527 (native-inputs
33528 (list python-cython python-pytest python-setuptools))
33529 (home-page "https://github.com/scoder/quicktions")
33530 (synopsis "Fast fractions data type for rational numbers")
33531 (description
33532 "This package provides fast fractions data type for rational numbers. It
33533is the cythonized version of @code{fractions.Fraction}.")
33534 (license license:psfl)))
33535
33536(define-public python-pathvalidate
33537 (package
33538 (name "python-pathvalidate")
33539 (version "3.3.1")
33540 (source
33541 (origin
33542 (method git-fetch)
33543 (uri (git-reference
33544 (url "https://github.com/thombashi/pathvalidate")
33545 (commit (string-append "v" version))))
33546 (file-name (git-file-name name version))
33547 (sha256
33548 (base32 "14ymgd52v5r0g6yc2l7krg3n4x9bkv1ndvdaahiq503n1zhhs3iv"))))
33549 (build-system pyproject-build-system)
33550 (native-inputs (list python-allpairspy
33551 python-click
33552 python-faker
33553 python-pytest
33554 python-setuptools
33555 python-setuptools-scm
33556 python-tcolorpy))
33557 (home-page "https://github.com/thombashi/pathvalidate")
33558 (synopsis "Sanitize strings representing paths")
33559 (description
33560 "@code{pathvalidate} is a Python library to sanitize/validate strings
33561representing paths or filenames.")
33562 (license license:expat)))
33563
33564(define-public python-escapism
33565 (package
33566 (name "python-escapism")
33567 (version "1.0.1")
33568 (source
33569 (origin
33570 (method git-fetch)
33571 (uri (git-reference
33572 (url "https://github.com/jupyterhub/escapism")
33573 (commit version)))
33574 (file-name (git-file-name name version))
33575 (sha256
33576 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33577 (build-system pyproject-build-system)
33578 (native-inputs (list python-pytest python-setuptools))
33579 (home-page "https://github.com/jupyterhub/escapism")
33580 (synopsis "Simple, generic library for escaping strings")
33581 (description
33582 "This Python library provides a programming interface to, given a set of
33583safe characters and an escape character, escape safe strings and unescape the
33584result.")
33585 (license license:expat)))
33586
33587(define-public python-recommonmark
33588 (package
33589 (name "python-recommonmark")
33590 (version "0.7.1")
33591 (source
33592 (origin
33593 (method url-fetch)
33594 (uri (pypi-uri "recommonmark" version))
33595 (sha256
33596 (base32
33597 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33598 (build-system pyproject-build-system)
33599 (arguments
33600 (list
33601 ;; XXX: Some of those fail for no good reason.
33602 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33603 (native-inputs (list python-pytest python-setuptools python-wheel))
33604 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33605 (home-page "https://github.com/readthedocs/recommonmark")
33606 (synopsis "Docutils-compatibility bridge to CommonMark")
33607 (description
33608 "This package provides a docutils-compatibility bridge to CommonMark that
33609lets you write CommonMark inside of Docutils & Sphinx projects.")
33610 (license license:expat)))
33611
33612(define-public python-rectangle-packer
33613 (package
33614 (name "python-rectangle-packer")
33615 (version "2.1.0")
33616 (source
33617 (origin
33618 (method git-fetch)
33619 (uri (git-reference
33620 (url "https://github.com/Penlect/rectangle-packer")
33621 (commit version)))
33622 (file-name (git-file-name name version))
33623 (sha256
33624 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33625 (build-system pyproject-build-system)
33626 (arguments
33627 (list
33628 #:phases
33629 #~(modify-phases %standard-phases
33630 ;; Cython extensions have to be built before running the tests.
33631 (add-before 'check 'build-ext
33632 (lambda _
33633 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33634 (native-inputs
33635 (list python-cython python-pytest python-setuptools))
33636 (home-page "https://github.com/Penlect/rectangle-packer")
33637 (synopsis "Pack rectangles into a bounding box")
33638 (description
33639 "Rectangle-packer is a Python library for packing rectangles
33640into a bounding box with minimal wasted space. It is useful for texture
33641atlases, sprite sheets, and bin packing problems.")
33642 (license license:expat)))
33643
33644(define-public python-redo
33645 (package
33646 (name "python-redo")
33647 (version "3.0.0")
33648 (source
33649 (origin
33650 (method git-fetch)
33651 (uri (git-reference
33652 (url "https://github.com/mozilla-releng/redo")
33653 (commit version)))
33654 (file-name (git-file-name name version))
33655 (sha256
33656 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33657 (build-system pyproject-build-system)
33658 (native-inputs
33659 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33660 (home-page "https://github.com/mozilla-releng/redo")
33661 (synopsis "Utilities to retry Python callables")
33662 (description "Redo provides various means to add seamless ability to
33663retry to any Python callable.")
33664 (license license:mpl2.0)))
33665
33666(define-public python-opcodes
33667 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33668 ;; version number, which is what we use here.
33669 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33670 (package
33671 (name "python-opcodes")
33672 (version "0.3.14") ;from 'opcodes/__init__.py'
33673 (home-page "https://github.com/Maratyszcza/Opcodes")
33674 (source
33675 (origin
33676 (method git-fetch)
33677 (uri (git-reference (url home-page) (commit commit)))
33678 (file-name (git-file-name name version))
33679 (sha256
33680 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33681 (build-system pyproject-build-system)
33682 (native-inputs (list python-pytest python-setuptools))
33683 (synopsis "Database of processor instructions and opcodes")
33684 (description
33685 "This project documents instruction sets in a format convenient for
33686tools development. An instruction set is represented by three files:
33687
33688@itemize
33689@item an XML file that describes instructions;
33690@item an XSD file that describes the structure of the XML file;
33691@item a Python module that reads the XML file and represents it as a set of
33692Python objects;
33693@end itemize
33694
33695It currently provides descriptions for most user-mode x86, x86_64, and k1om
33696instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33697and BMI2).")
33698 (license license:bsd-2))))
33699
33700(define-public python-cart
33701 (package
33702 (name "python-cart")
33703 (version "1.2.3")
33704 (source
33705 (origin
33706 (method git-fetch)
33707 (uri (git-reference
33708 (url "https://github.com/CybercentreCanada/cart")
33709 (commit (string-append "v" version))))
33710 (file-name (git-file-name name version))
33711 (sha256
33712 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33713 (build-system pyproject-build-system)
33714 (arguments
33715 (list
33716 #:test-backend #~'unittest))
33717 (native-inputs
33718 (list python-setuptools))
33719 (propagated-inputs
33720 (list python-pycryptodome))
33721 (home-page "https://github.com/CybercentreCanada/cart")
33722 (synopsis "Library for interacting with the CaRT file format")
33723 (description
33724 "This Python library implements the CaRT file format which is commonly
33725used to store and transmit information about computer malware and associated
33726metadata.")
33727 (license license:bsd-2)))
33728
33729(define-public python-cle
33730 (package
33731 (name "python-cle")
33732 ;; Must be the same version as python-angr.
33733 (version "9.2.186")
33734 (source
33735 (origin
33736 (method git-fetch)
33737 (uri (git-reference
33738 (url "https://github.com/angr/cle")
33739 (commit (string-append "v" version))))
33740 (file-name (git-file-name name version))
33741 (sha256
33742 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33743 (build-system pyproject-build-system)
33744 (arguments
33745 (list
33746 ;; tests: 112 passed, 12 skipped, 1 warning
33747 #:phases
33748 #~(modify-phases %standard-phases
33749 (add-before 'check 'check-setup
33750 (lambda _
33751 (copy-recursively
33752 (string-append #$(this-package-native-input "angr-binaries") "/share")
33753 "../binaries"))))))
33754 (native-inputs
33755 (list angr-binaries
33756 python-cffi
33757 python-pytest
33758 python-setuptools))
33759 (propagated-inputs
33760 (list python-archinfo
33761 python-cart
33762 python-pefile
33763 python-pyelftools
33764 python-pyvex
33765 python-sortedcontainers))
33766 (home-page "https://github.com/angr/cle")
33767 (synopsis "Python loader for binaries and their associated libraries")
33768 (description
33769 "CLE loads binaries and their associated libraries, resolves
33770imports and provides an abstraction of process memory the same way as if
33771it was loader by the operating system's loader.")
33772 (license license:bsd-2)))
33773
33774(define-public python-pyvex
33775 (package
33776 (name "python-pyvex")
33777 ;; Must be the same version as python-angr.
33778 (version "9.2.186")
33779 (source
33780 (origin
33781 (method git-fetch)
33782 (uri (git-reference
33783 (url "https://github.com/angr/pyvex")
33784 (commit (string-append "v" version))))
33785 (file-name (git-file-name name version))
33786 (sha256
33787 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33788 (build-system pyproject-build-system)
33789 (arguments
33790 (list
33791 ;; tests: 57 passed
33792 #:phases
33793 #~(modify-phases %standard-phases
33794 (add-after 'unpack 'copy-submodule-package
33795 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33796 ;; symlink: "Read-only file system".
33797 (lambda _
33798 (copy-recursively
33799 #+(package-source (this-package-native-input "vex"))
33800 (string-append (getcwd) "/vex"))))
33801 (add-before 'build 'set-cc
33802 (lambda _
33803 (setenv "AR" #$(ar-for-target))
33804 (setenv "CC" #$(cc-for-target))
33805 (setenv "CC_NATIVE" "gcc"))))))
33806 (native-inputs
33807 (list cmake-minimal
33808 python-pytest
33809 python-scikit-build-core
33810 vex))
33811 (propagated-inputs
33812 (list python-bitstring
33813 python-cffi))
33814 (home-page "https://github.com/angr/pyvex")
33815 (synopsis "Python interface to libVEX and VEX IR")
33816 (description
33817 "This package provides a Python interface the libVEX and VEX IR.
33818VEX is the intermediate representation (also known as intermediate
33819language) used by the Valgrind analysis tool. As such, VEX is designed
33820to enable all kinds of binary analysis tasks.")
33821 (license (list license:bsd-2
33822 license:gpl2))))
33823
33824(define-public python-claripy
33825 (package
33826 (name "python-claripy")
33827 ;; Must be the same version as python-angr.
33828 (version "9.2.186")
33829 (source
33830 (origin
33831 (method git-fetch)
33832 (uri (git-reference
33833 (url "https://github.com/angr/claripy")
33834 (commit (string-append "v" version))))
33835 (file-name (git-file-name name version))
33836 (sha256
33837 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33838 (build-system pyproject-build-system)
33839 (arguments
33840 (list
33841 ;; tests: 329 passed, 1 skipped
33842 #:phases
33843 #~(modify-phases %standard-phases
33844 (add-after 'unpack 'relax-requirements
33845 (lambda _
33846 (substitute* "pyproject.toml"
33847 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33848 ;; failes to detect it (similar like OpenCV), relax the
33849 ;; version constraint, see:
33850 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33851 ((", \"z3-solver==4.13.0.0\"")
33852 "")))))))
33853 (native-inputs
33854 (list python-pytest
33855 python-setuptools))
33856 (propagated-inputs
33857 (list python-cachetools
33858 python-decorator
33859 python-pysmt
33860 z3))
33861 (home-page "https://github.com/angr/claripy")
33862 (synopsis "Abstraction layer for constraint solvers")
33863 (description
33864 "This Python module provides an abstraction layer for interacting
33865with constraint solvers. Specifically, it is intended to be used with
33866SMT solvers and is built on top of the Z3 solver.")
33867 (license license:bsd-2)))
33868
33869(define-public python-pysmt
33870 (package
33871 (name "python-pysmt")
33872 (version "0.9.6")
33873 (source
33874 (origin
33875 ;; Fetching from Git as pypi release doesn't include all test files.
33876 (method git-fetch)
33877 (uri (git-reference
33878 (url "https://github.com/pysmt/pysmt")
33879 (commit (string-append "v" version))))
33880 (file-name (git-file-name name version))
33881 (sha256
33882 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33883 (build-system pyproject-build-system)
33884 (arguments
33885 `(#:phases (modify-phases %standard-phases
33886 (add-before 'check 'set-pysmt-solver
33887 (lambda _
33888 (setenv "PYSMT_SOLVER" "z3"))))))
33889 (native-inputs (list python-pytest python-setuptools python-wheel))
33890 (propagated-inputs (list z3))
33891 (home-page "https://github.com/pysmt/pysmt")
33892 (synopsis
33893 "Solver-agnostic library for SMT formula manipulation and solving")
33894 (description
33895 "This Python module provides a solver-agnostic abstraction for
33896working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33897it allows manipulation and solving such formulas.")
33898 (license license:asl2.0)))
33899
33900(define-public python-rpyc
33901 (package
33902 (name "python-rpyc")
33903 (version "5.3.1")
33904 (source
33905 (origin
33906 ;; Fetching from Git as pypi release doesn't include all test files.
33907 (method git-fetch)
33908 (uri (git-reference
33909 (url "https://github.com/tomerfiliba-org/rpyc")
33910 (commit version)))
33911 (file-name (git-file-name name version))
33912 (sha256
33913 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33914 (snippet '(begin
33915 ;; Disable deploy tests, these rely on OpenSSH and require
33916 ;; configuring the SSH client manually to accept the host key.
33917 (delete-file "tests/test_deploy.py")
33918 ;; Disable tests requiring network access. These tests
33919 ;; presently fail with the error "Network is unreachable".
33920 (delete-file "tests/test_registry.py")))))
33921 (build-system pyproject-build-system)
33922 (arguments
33923 `(#:phases (modify-phases %standard-phases
33924 (replace 'check
33925 (lambda* (#:key tests? #:allow-other-keys)
33926 (when tests?
33927 (with-directory-excursion "tests"
33928 (invoke "python" "-m" "unittest"))))))))
33929 (propagated-inputs (list python-hatchling python-plumbum))
33930 (home-page "https://github.com/tomerfiliba-org/rpyc")
33931 (synopsis
33932 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33933 (description
33934 "This Python module enables remote procedure calls, clustering, and
33935distributed-computing. For this purpose, it makes use of object-proxying, a technique
33936that employs python's dynamic nature, to overcome the physical boundaries between
33937processes and computers, so that remote objects can be manipulated as if they
33938were local.")
33939 (license license:expat)))
33940
33941(define-public python-nampa
33942 (package
33943 (name "python-nampa")
33944 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33945 ;; has 0.1.1 as version. Latest commit is from 2024.
33946 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33947 (revision . "0")))
33948 (version (git-version "1.0.0"
33949 (assoc-ref properties 'revision)
33950 (assoc-ref properties 'commit)))
33951 (source
33952 (origin
33953 (method git-fetch)
33954 (uri (git-reference
33955 (url "https://github.com/thebabush/nampa")
33956 (commit (assoc-ref properties 'commit))))
33957 (file-name (git-file-name name version))
33958 (sha256
33959 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33960 (build-system pyproject-build-system)
33961 (arguments
33962 (list
33963 #:test-flags
33964 #~(list "-k test_random_values")
33965 #:phases
33966 #~(modify-phases %standard-phases
33967 (add-after 'unpack 'patch-tests
33968 (lambda _
33969 ;; Unclear why this top-level __init__.py is here. It seems to
33970 ;; setup a plugin for binaryninja, which Guix does not package.
33971 (delete-file "__init__.py")
33972 ;; Yields tests, which is not allowed anymore.
33973 (substitute* "tests/test_crc.py"
33974 (("yield") "#yield")))))))
33975 (propagated-inputs (list python-future))
33976 (native-inputs (list python-pytest python-setuptools))
33977 (home-page "https://github.com/thebabush/nampa")
33978 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33979 (description
33980 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33981and Recognition Technology}. This technology is useful for identifying
33982common library subroutines in disassembled binaries.")
33983 (license license:lgpl3)))
33984
33985(define-public python-mulpyplexer
33986 (package
33987 (name "python-mulpyplexer")
33988 (version "0.09")
33989 (source
33990 (origin
33991 (method url-fetch)
33992 (uri (pypi-uri "mulpyplexer" version))
33993 (sha256
33994 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33995 (build-system pyproject-build-system)
33996 (arguments
33997 (list
33998 #:phases
33999 '(modify-phases %standard-phases
34000 (replace 'check
34001 (lambda* (#:key tests? #:allow-other-keys)
34002 (when tests?
34003 (invoke "python" "mulpyplexer.py")))))))
34004 (native-inputs (list python-setuptools python-wheel))
34005 (home-page "https://github.com/zardus/mulpyplexer/")
34006 (synopsis "Multiplexes interactions with lists of Python objects")
34007 (description "This module provides utilities for multiplexing
34008interactions with lists of Python objects.")
34009 (license license:bsd-2)))
34010
34011(define-public python-itanium-demangler
34012 (package
34013 (name "python-itanium-demangler")
34014 (version "1.1")
34015 (source
34016 (origin
34017 (method git-fetch)
34018 (uri (git-reference
34019 ;; PyPI only provides wheels and no source code.
34020 (url "https://github.com/whitequark/python-itanium_demangler")
34021 (commit (string-append "v" version))))
34022 (file-name (git-file-name name version))
34023 (sha256
34024 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
34025 (build-system pyproject-build-system)
34026 (arguments
34027 (list
34028 #:phases
34029 #~(modify-phases %standard-phases
34030 (replace 'check
34031 (lambda* (#:key tests? #:allow-other-keys)
34032 (when tests?
34033 (with-directory-excursion "tests"
34034 (invoke "python" "-m" "unittest"))))))))
34035 (native-inputs (list python-setuptools python-wheel))
34036 (home-page "https://github.com/whitequark/python-itanium_demangler/")
34037 (synopsis "Pure Python Itanium C++ ABI demangler")
34038 (description
34039"This Python module provides an implementation of the Itanium C++ ABI symbol
34040mangling language. The demangler generates an abstract syntax tree from
34041mangled symbols, which can be used for directly extracting type information.")
34042 (license license:bsd-0)))
34043
34044(define-public python-angr
34045 (package
34046 (name "python-angr")
34047 (version "9.2.186")
34048 (source
34049 (origin
34050 (method git-fetch)
34051 (uri (git-reference
34052 (url "https://github.com/angr/angr")
34053 (commit (string-append "v" version))))
34054 (file-name (git-file-name name version))
34055 (sha256
34056 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
34057 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
34058 "python-angr-check-exec-deps.patch"))))
34059 (build-system pyproject-build-system)
34060 (arguments
34061 (list
34062 #:imported-modules `(,@%cargo-build-system-modules
34063 ,@%pyproject-build-system-modules)
34064 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
34065 (guix build pyproject-build-system)
34066 (guix build utils))
34067 #:test-flags
34068 #~(list "-x"
34069 "--dist" "load"
34070 "--numprocesses" (number->string (parallel-job-count))
34071 "-k"
34072 ;; test_mips32_missing_offset_in_instructions fails
34073 ;; with capstone 5 and passes with capstone 4. Might
34074 ;; be a capstone regressions, needs investigation.
34075 ;;
34076 ;; TODO: test_unsat_core needs investigation.
34077 ;;
34078 ;; test_decompiling_abnormal_switch_case_case3 is broken
34079 ;; when tests modifying global counters are run before it.
34080 ;; See <https://github.com/angr/angr/issues/5715>.
34081 ;;
34082 ;; test_concrete_memset is a non-deterministic benchmark.
34083 ;; test_similarity_fauxware is flaky.
34084 (string-append
34085 "not test_mips32_missing_offset_in_instructions"
34086 " and not test_unsat_core"
34087 " and not test_decompiling_abnormal_switch_case_case3"
34088 " and not test_concrete_memset"
34089 " and not test_similarity_fauxware"))
34090 #:phases
34091 #~(modify-phases %standard-phases
34092 (add-after 'unpack 'use-guix-vendored-dependencies
34093 (lambda _
34094 (substitute* "native/angr/Cargo.toml"
34095 (("^icicle-fuzzing.*$")
34096 "icicle-fuzzing = { version = \"*\" }\n")
34097 (("^icicle-vm.*$")
34098 "icicle-vm = { version = \"*\" }\n")
34099 (("^pcode.*$")
34100 "pcode = { version = \"*\" }\n"))))
34101 (add-after 'unpack 'fix-tests
34102 (lambda _
34103 (substitute* "tests/common.py"
34104 (("\\[\"cc\"\\]")
34105 "[\"gcc\"]"))))
34106 (add-after 'unpack 'relax-protobuf
34107 (lambda _
34108 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
34109 (substitute* "pyproject.toml"
34110 (("protobuf>=6.33.0") "protobuf"))))
34111 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
34112 (lambda args
34113 (for-each (lambda (phase)
34114 (format #t "Running cargo phase: ~a~%" phase)
34115 (apply (assoc-ref cargo:%standard-phases phase)
34116 #:cargo-target #$(cargo-triplet)
34117 args))
34118 '(prepare-rust-crates
34119 unpack-rust-crates
34120 configure
34121 check-for-pregenerated-files
34122 patch-cargo-checksums))))
34123 (add-before 'check 'check-setup
34124 (lambda _
34125 (copy-recursively
34126 (string-append #$(this-package-native-input "angr-binaries") "/share")
34127 "../binaries")))
34128 (add-before 'build 'generate-protobuf-files
34129 ;; Regenerate protobuf files using our utilized protobuf version.
34130 ;; This allows us to relax the version constraint on python-protobuf.
34131 (lambda _
34132 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
34133 (add-before 'build 'set-cc
34134 (lambda _
34135 (setenv "CC" #$(cc-for-target)))))))
34136 (propagated-inputs (list python-archinfo ;sync version with python-angr
34137 python-cachetools
34138 python-cffi
34139 python-claripy ;sync version with python-angr
34140 python-cle ;sync version with python-angr
34141 python-cxxheaderparser
34142 python-gitpython
34143 python-msgspec
34144 python-mulpyplexer
34145 python-networkx
34146 python-protobuf
34147 python-psutil
34148 python-pycparser
34149 python-pydemumble
34150 python-pyformlang
34151 python-pypcode
34152 python-pyvex ;sync version with python-angr
34153 python-rich
34154 python-sortedcontainers
34155 python-sympy
34156 python-sqlalchemy
34157 python-keystone-engine
34158 python-typing-extensions
34159 python-unique-log-filter
34160 unicorn-2.0))
34161 (native-inputs
34162 (append
34163 (list angr-binaries
34164 protobuf
34165 python-pytest
34166 python-pytest-xdist
34167 python-setuptools
34168 python-setuptools-rust
34169 rust
34170 `(,rust "cargo"))
34171 (or (and=> (%current-target-system)
34172 (compose list make-rust-sysroot))
34173 '())))
34174 (inputs
34175 (cons* (cargo-inputs 'python-angr)))
34176 (home-page "https://github.com/angr/angr")
34177 (synopsis "Multi-architecture binary analysis toolkit")
34178 (description
34179 "This package provides a versatile binary analysis platform with the
34180ability to perform dynamic symbolic execution as well as various
34181static analyses directly on binaries. As such, it can be used for all
34182kinds of reverse engineering, vulnerability discovery, exploit
34183generation, and software testing purposes.")
34184 (license license:bsd-2)))
34185
34186(define-public python-peachpy
34187 ;; There is no tag in this repo.
34188 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
34189 (version "0.2.0") ;from 'peachpy/__init__.py'
34190 (revision "3"))
34191 (package
34192 (name "python-peachpy")
34193 (version (git-version version revision commit))
34194 (home-page "https://github.com/Maratyszcza/PeachPy")
34195 (source (origin
34196 (method git-fetch)
34197 (uri (git-reference (url home-page) (commit commit)))
34198 (file-name (git-file-name name version))
34199 (sha256
34200 (base32
34201 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
34202 (patches (search-patches "python-peachpy-determinism.patch"))))
34203 (build-system pyproject-build-system)
34204 (arguments
34205 ;; The issue is known and the test will probably never be fixed.
34206 ;; https://github.com/Maratyszcza/PeachPy/issues/131
34207 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
34208 (native-inputs
34209 (list python-pytest python-setuptools python-wheel))
34210 (propagated-inputs
34211 (list python-six python-opcodes))
34212 (synopsis "Efficient assembly code generation in Python")
34213 (description
34214 "PeachPy is a Python framework for writing high-performance assembly kernels.
34215PeachPy aims to simplify writing optimized assembly kernels while preserving
34216all optimization opportunities of traditional assembly.
34217
34218PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
34219for the Go language tool chain; it adapts to different calling conventions and
34220application binary interfaces (ABIs); it takes care of register allocation; it
34221supports x86_64 instructions up to AVX-512 and SHA.")
34222 (supported-systems '("x86_64-linux"))
34223 (license license:bsd-2))))
34224
34225(define-public python-sgmllib3k
34226 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34227 (revision "1"))
34228 (package
34229 (name "python-sgmllib3k")
34230 (version
34231 (git-version "1.0.0" revision commit))
34232 (source
34233 (origin
34234 (method git-fetch)
34235 (uri (git-reference
34236 (url "https://github.com/hsoft/sgmllib")
34237 (commit commit)))
34238 (file-name (git-file-name name version))
34239 (sha256
34240 (base32
34241 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34242 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34243 (build-system pyproject-build-system)
34244 (native-inputs (list python-pytest python-setuptools))
34245 (home-page "https://github.com/hsoft/sgmllib")
34246 (synopsis "Python 3 port of sgmllib")
34247 (description "This package provides an unmaintained port of sgmllib to
34248Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34249Generalized Mark-up Language}.")
34250 (license license:bsd-3))))
34251
34252(define-public python-cwcwidth
34253 (package
34254 (name "python-cwcwidth")
34255 (version "0.1.10")
34256 (source
34257 (origin
34258 (method url-fetch)
34259 (uri (pypi-uri "cwcwidth" version))
34260 (sha256
34261 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34262 (build-system pyproject-build-system)
34263 (arguments
34264 (list
34265 #:phases
34266 #~(modify-phases %standard-phases
34267 (add-before 'check 'remove-local-cwcwidth
34268 (lambda _
34269 ;; This would otherwise interfere with finding the installed
34270 ;; cwcwidth when running tests.
34271 (delete-file-recursively "cwcwidth"))))))
34272 (native-inputs
34273 (list python-cython
34274 python-pytest
34275 python-setuptools
34276 python-setuptools-scm))
34277 (home-page "https://github.com/sebastinas/cwcwidth")
34278 (synopsis "Python bindings for wc(s)width")
34279 (description
34280 "This package provides bindings for wcwidth and wcswidth functions
34281defined in POSIX.1-2001 and POSIX.1-2008.")
34282 (license license:expat)))
34283
34284(define-public python-pyan3
34285 (package
34286 (name "python-pyan3")
34287 (version "1.2.0")
34288 (source
34289 (origin
34290 ;; Source tarball on PyPI lacks tests.
34291 (method git-fetch)
34292 (uri (git-reference
34293 (url "https://github.com/Technologicat/pyan")
34294 (commit (string-append "v" version))))
34295 (file-name (git-file-name name version))
34296 (sha256
34297 (base32
34298 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34299 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34300 "python-pyan3-fix-absolute-path-bug.patch"))))
34301 (build-system pyproject-build-system)
34302 (native-inputs
34303 (list python-pytest python-setuptools python-wheel))
34304 (propagated-inputs
34305 (list python-jinja2))
34306 (home-page "https://github.com/Technologicat/pyan")
34307 (synopsis "Offline call graph generator for Python 3")
34308 (description "Pyan takes one or more Python source files, performs
34309a (rather superficial) static analysis, and constructs a directed graph of the
34310objects in the combined source, and how they define or use each other. The
34311graph can be output for rendering by GraphViz or yEd.")
34312 (license license:gpl2)))
34313
34314(define-public python-multipledispatch
34315 (package
34316 (name "python-multipledispatch")
34317 (version "1.0.0")
34318 (source
34319 (origin
34320 (method git-fetch) ;no tests in PyPI archive
34321 (uri (git-reference
34322 (url "https://github.com/mrocklin/multipledispatch")
34323 (commit version)))
34324 (file-name (git-file-name name version))
34325 (sha256
34326 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34327 (build-system pyproject-build-system)
34328 (native-inputs
34329 (list python-pytest
34330 python-pytest-benchmark
34331 python-setuptools))
34332 (home-page "https://github.com/mrocklin/multipledispatch/")
34333 (synopsis "Multiple dispatch for Python based on pattern matching")
34334 (description
34335 "This library provides an efficient mechanism for overloading function
34336implementations based on the types of the arguments.")
34337 (license license:bsd-3)))
34338
34339(define-public python-multimethod
34340 (package
34341 (name "python-multimethod")
34342 (version "1.10")
34343 (source
34344 (origin
34345 ;; No tests in the PyPI tarball.
34346 (method git-fetch)
34347 (uri (git-reference
34348 (url "https://github.com/coady/multimethod")
34349 (commit (string-append "v" version))))
34350 (file-name (git-file-name name version))
34351 (sha256
34352 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34353 (build-system pyproject-build-system)
34354 (native-inputs (list python-pytest python-setuptools python-wheel))
34355 (home-page "https://github.com/coady/multimethod")
34356 (synopsis "Python support for multiple argument dispatching")
34357 (description
34358 "This package provides a decorator for adding multiple argument
34359dispatching to functions. The decorator creates a multimethod object as
34360needed and registers the function with its annotations.")
34361 (license license:asl2.0)))
34362
34363(define-public python-logical-unification
34364 (package
34365 (name "python-logical-unification")
34366 (version "0.4.7")
34367 (source
34368 (origin
34369 (method git-fetch)
34370 (uri (git-reference
34371 (url "https://github.com/pythological/unification")
34372 (commit (string-append "v" version))))
34373 (file-name (git-file-name name version))
34374 (sha256
34375 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34376 (build-system pyproject-build-system)
34377 (native-inputs
34378 (list python-pytest
34379 python-pytest-benchmark
34380 python-setuptools
34381 python-setuptools-scm))
34382 (propagated-inputs
34383 (list python-multipledispatch
34384 python-toolz))
34385 (home-page "https://github.com/pythological/unification/")
34386 (synopsis "Logical unification in Python for solving symbolic expressions")
34387 (description "This library provides algorithms and data types for solving
34388symbolic expressions in pure Python using the technique of logical unification.")
34389 (license license:bsd-3)))
34390
34391(define-public python-looseversion
34392 (package
34393 (name "python-looseversion")
34394 (version "1.3.0")
34395 (source
34396 (origin
34397 (method url-fetch)
34398 (uri (pypi-uri "looseversion" version))
34399 (sha256
34400 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34401 (build-system pyproject-build-system)
34402 (arguments
34403 (list
34404 ;; No tests provided.
34405 #:tests? #f))
34406 (native-inputs
34407 (list python-hatchling))
34408 (home-page "https://github.com/effigies/looseversion")
34409 (synopsis "Version numbering for anarchists and software realists")
34410 (description
34411 "This package provides a drop-in replacement for the original
34412@code{LooseVersion}. It implements an identical interface and comparison
34413logic to @code{LooseVersion}. The only major change is that a
34414@code{looseversion.LooseVersion} is comparable to a
34415@code{distutils.version.LooseVersion}, which means tools should not need to
34416worry whether all dependencies that use LooseVersion have migrated.")
34417 (license license:psfl)))
34418
34419(define-public python-cons
34420 (package
34421 (name "python-cons")
34422 (version "0.4.7")
34423 (source
34424 (origin
34425 (method git-fetch) ;no tests in PyPI archive
34426 (uri (git-reference
34427 (url "https://github.com/pythological/python-cons")
34428 (commit (string-append "v" version))))
34429 (file-name (git-file-name name version))
34430 (sha256
34431 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34432 (build-system pyproject-build-system)
34433 (native-inputs
34434 (list python-pytest
34435 python-setuptools
34436 python-setuptools-scm
34437 python-wheel))
34438 (propagated-inputs
34439 (list python-logical-unification))
34440 (home-page "https://github.com/pythological/python-cons")
34441 (synopsis "Cons cell data structures and related algorithms for Python")
34442 (description
34443 "This library implements algorithms and data structures for Lisp-style
34444cons cells in Python.")
34445 (license license:lgpl3+)))
34446
34447(define-public python-etuples
34448 (package
34449 (name "python-etuples")
34450 (version "0.3.10")
34451 (source
34452 (origin
34453 (method url-fetch)
34454 (uri (pypi-uri "etuples" version))
34455 (sha256
34456 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34457 (build-system pyproject-build-system)
34458 (arguments
34459 (list
34460 #:test-flags
34461 ;; assert False == {~_1: <built-in function add>}
34462 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34463 (native-inputs
34464 (list python-pytest
34465 python-setuptools
34466 python-setuptools-scm))
34467 (propagated-inputs
34468 (list python-cons
34469 python-multipledispatch))
34470 (home-page "https://github.com/pythological/etuples")
34471 (synopsis "S-expressions in Python")
34472 (description
34473 "This library implements eval'able S-expression in Python using tuple-like objects.")
34474 (license license:asl2.0)))
34475
34476(define-public python-minikanren
34477 (package
34478 (name "python-minikanren")
34479 (version "1.0.5")
34480 (source
34481 (origin
34482 (method git-fetch)
34483 (uri (git-reference
34484 (url "https://github.com/pythological/kanren")
34485 (commit (string-append "v" version))))
34486 (file-name (git-file-name name version))
34487 (sha256
34488 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34489 (build-system pyproject-build-system)
34490 (arguments
34491 (list
34492 ;; 60 passed, 3 skipped, 23 deselected
34493 #:test-flags
34494 #~(list "-k" (string-join
34495 ;; XXX: 16 tests fail with assertion not equal, check why.
34496 (list "not test_basics"
34497 "test_eq_assoc"
34498 "test_eq_assoccomm"
34499 "test_eq_comm"
34500 "test_map_anyo"
34501 "test_map_anyo_misc"
34502 "test_map_anyo_reverse"
34503 "test_reduceo"
34504 "test_walko"
34505 "test_walko_reverse")
34506 " and not "))))
34507 (native-inputs
34508 (list python-pytest
34509 python-setuptools))
34510 (propagated-inputs
34511 (list python-cons
34512 python-etuples
34513 python-logical-unification
34514 python-multipledispatch
34515 python-toolz
34516 python-typing-extensions))
34517 (home-page "https://github.com/pythological/kanren")
34518 (synopsis "Relational logic programming in pure Python")
34519 (description
34520 "The minikanren library provides an algorithmic core for computer algebra
34521systems in Python.")
34522 (license license:bsd-3)))
34523
34524(define-public python-dotenv
34525 (package
34526 (name "python-dotenv")
34527 (version "1.2.2")
34528 (source
34529 (origin
34530 (method url-fetch)
34531 (uri (pypi-uri "python_dotenv" version))
34532 (sha256
34533 (base32 "1wwwg7gasqmnv5y2hb3w1155c8nai6zzih8x5hn0ifnpzf8ildrc"))))
34534 (build-system pyproject-build-system)
34535 (arguments
34536 (list
34537 #:test-flags
34538 ;; .dotenv-real instead of dotenv
34539 #~(list "-k not test_run_with_dotenv_and_command_flags")))
34540 (native-inputs
34541 (list python-pytest
34542 python-setuptools))
34543 (propagated-inputs
34544 (list python-click))
34545 (home-page "https://saurabh-kumar.com/python-dotenv/")
34546 (synopsis "Setup environment variables according to .env files")
34547 (description
34548 "This package provides the @code{python-dotenv} Python module to read
34549key-value pairs from a @code{.env} file and set them as environment variables.")
34550 (license license:bsd-3)))
34551
34552;; Old version just for docker-compose; remove once that is updated.
34553(define-public python-dotenv-0.13.0
34554 (package (inherit python-dotenv)
34555 (name "python-dotenv")
34556 (version "0.13.0")
34557 (source
34558 (origin
34559 (method url-fetch)
34560 (uri (pypi-uri "python-dotenv" version))
34561 (sha256
34562 (base32
34563 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34564 (arguments
34565 `(#:phases
34566 (modify-phases %standard-phases
34567 (replace 'check
34568 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34569 (when tests?
34570 (add-installed-pythonpath inputs outputs)
34571 (setenv "PATH" (string-append (getenv "PATH") ":"
34572 (assoc-ref outputs "out") "/bin"))
34573 ;; Skip the ipython tests.
34574 (delete-file "tests/test_ipython.py")
34575 (invoke "python" "-m" "pytest")))))))
34576 (native-inputs
34577 (modify-inputs native-inputs
34578 (append python-mock
34579 python-sh-1)))))
34580
34581(define-public python-braintree
34582 (package
34583 (name "python-braintree")
34584 (version "4.40.0")
34585 (source
34586 (origin
34587 (method url-fetch)
34588 (uri (pypi-uri "braintree" version))
34589 (sha256
34590 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34591 (build-system pyproject-build-system)
34592 (arguments (list #:tests? #f)) ; No tests.
34593 (native-inputs (list python-setuptools))
34594 (propagated-inputs (list python-requests))
34595 (home-page
34596 "https://developers.braintreepayments.com/python/sdk/server/overview")
34597 (synopsis "Braintree Python Library")
34598 (description
34599 "The Braintree Python SDK provides integration access to the Braintree
34600Gateway. Braintree is a US-based payments service provider.")
34601 (license license:expat)))
34602
34603(define-public python-markuppy
34604 (package
34605 (name "python-markuppy")
34606 (version "1.18")
34607 (source
34608 (origin
34609 (method git-fetch)
34610 (uri (git-reference
34611 (url "https://github.com/tylerbakke/MarkupPy")
34612 (commit (string-append "v" version))))
34613 (file-name (git-file-name name version))
34614 (sha256
34615 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34616 (build-system pyproject-build-system)
34617 (native-inputs (list python-pytest python-setuptools))
34618 (home-page "https://github.com/tylerbakke/MarkupPy")
34619 (synopsis "Pythonic HTML/XML generator")
34620 (description
34621 "This Python module attempts to make it easier to generate HTML/XML from
34622a Python program in an customizable and pythonic way.")
34623 (license license:expat)))
34624
34625(define-public python-csb43
34626 (package
34627 (name "python-csb43")
34628 (version "1.0.0")
34629 (source
34630 (origin
34631 (method git-fetch)
34632 (uri (git-reference
34633 (url "https://bitbucket.org/wmj/csb43")
34634 (commit version)))
34635 (file-name (git-file-name name version))
34636 (sha256
34637 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34638 (build-system pyproject-build-system)
34639 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34640 (arguments
34641 (list
34642 #:phases
34643 #~(modify-phases %standard-phases
34644 (add-after 'unpack 'relax-requirements
34645 (lambda _
34646 (substitute* "pyproject.toml"
34647 (("\"deprecated ~=.*\",")
34648 "\"deprecated\",")))))))
34649 (native-inputs
34650 (list python-lxml
34651 python-pytest
34652 python-setuptools
34653 python-setuptools-scm))
34654 (propagated-inputs
34655 (list python-deprecated
34656 python-pycountry
34657 python-pyyaml
34658 python-tablib))
34659 (home-page "https://bitbucket.org/wmj/csb43")
34660 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3466143 (CSB43)")
34662 (description
34663 "This package provides tools to convert files in the format used by
34664multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34665Spanish Banking Association [AEB43]) to other formats.
34666
34667Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34668spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34669 (license license:lgpl3)))
34670
34671(define-public python-csb43-0.10
34672 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34673 ;; homebank, i18n, ofx, and utils.
34674 (package
34675 (inherit python-csb43)
34676 (name "python-csb43")
34677 (version "0.10.1")
34678 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34679 (source
34680 (origin
34681 (method git-fetch)
34682 (uri (git-reference
34683 (url "https://bitbucket.org/wmj/csb43")
34684 (commit version)))
34685 (file-name (git-file-name name version))
34686 (sha256
34687 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34688
34689(define-public python-febelfin-coda
34690 (package
34691 (name "python-febelfin-coda")
34692 (version "0.3.0")
34693 (source
34694 (origin
34695 (method hg-fetch)
34696 (uri (hg-reference
34697 (url "https://foss.heptapod.net/tryton/coda")
34698 (changeset version)))
34699 (file-name (string-append name "-" version "-checkout"))
34700 (sha256
34701 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34702 (build-system pyproject-build-system)
34703 (arguments
34704 (list
34705 #:test-backend #~'unittest
34706 #:phases
34707 #~(modify-phases %standard-phases
34708 (add-after 'install 'remove-installed-tests
34709 (lambda* (#:key inputs outputs #:allow-other-keys)
34710 (with-directory-excursion (site-packages inputs outputs)
34711 (for-each delete-file
34712 (list "coda/test.py"
34713 "coda/test_readme.py"))))))))
34714 (native-inputs (list python-setuptools))
34715 (home-page "https://coda.b2ck.com/")
34716 (synopsis "Module to parse Belgian CODA files")
34717 (description
34718 "This package provides a module to parse Coded statement of account
34719(CODA) files as defined be the Belgian Febelfin bank standard.")
34720 (license license:bsd-3)))
34721
34722(define-public python-ofxparse
34723 (package
34724 (name "python-ofxparse")
34725 (version "0.21")
34726 (source
34727 (origin
34728 (method url-fetch)
34729 (uri (pypi-uri "ofxparse" version))
34730 (sha256
34731 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34732 (build-system pyproject-build-system)
34733 (native-inputs (list python-pynose python-setuptools))
34734 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34735 (home-page "http://sites.google.com/site/ofxparse")
34736 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34737format")
34738 (description "@code{ofxparse} is a parser for Open Financial
34739Exchange (.ofx) format files. OFX files are available from almost any online
34740banking site, so they work well if you want to pull together your finances
34741from multiple sources. Online trading accounts also often provide account
34742statements in OFX files.")
34743 (license license:expat)))
34744
34745(define-public python-rfc3339-validator
34746 (package
34747 (name "python-rfc3339-validator")
34748 (version "0.1.4")
34749 (source
34750 (origin
34751 (method url-fetch)
34752 (uri (pypi-uri "rfc3339_validator" version))
34753 (sha256
34754 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34755 (build-system pyproject-build-system)
34756 (native-inputs
34757 (list python-pytest
34758 python-setuptools
34759 python-strict-rfc3339))
34760 (propagated-inputs
34761 (list python-six))
34762 (home-page "https://github.com/naimetti/rfc3339-validator")
34763 (synopsis "Python RFC3339 validator")
34764 (description "This package provides a pure Python RFC3339 validator.")
34765 (license license:expat)))
34766
34767(define-public python-platformdirs
34768 ;; Try to update simultaneously with the bootstrap version in
34769 ;; (gnu packages python-build).
34770 (package
34771 (name "python-platformdirs")
34772 (version "4.3.6")
34773 (source
34774 (origin
34775 (method url-fetch)
34776 (uri (pypi-uri "platformdirs" version))
34777 (sha256
34778 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34779 (build-system pyproject-build-system)
34780 (native-inputs
34781 (list python-appdirs
34782 python-hatchling
34783 python-hatch-vcs
34784 python-pytest
34785 python-pytest-mock))
34786 (home-page "https://github.com/platformdirs/platformdirs")
34787 (synopsis "Determine the appropriate platform-specific directories")
34788 (description "When writing applications, finding the right location to
34789store user data and configuration varies per platform. Even for
34790single-platform apps, there may by plenty of nuances in figuring out the right
34791location. This small Python module determines the appropriate
34792platform-specific directories, e.g. the ``user data dir''.")
34793 (license license:expat)))
34794
34795(define-public python-json2html
34796 (package
34797 (name "python-json2html")
34798 (version "1.3.0")
34799 (source
34800 (origin
34801 (method git-fetch)
34802 (uri (git-reference
34803 (url "https://github.com/softvar/json2html")
34804 (commit (string-append "v" version))))
34805 (file-name (git-file-name name version))
34806 (sha256
34807 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34808 (build-system pyproject-build-system)
34809 (arguments
34810 (list
34811 #:test-backend #~'custom
34812 #:test-flags #~(list "test/run_tests.py")))
34813 (native-inputs (list python-setuptools))
34814 (home-page "https://github.com/softvar/json2html")
34815 (synopsis "Convert JSON to HTML table")
34816 (description
34817 "@code{python-json2html} is a python module to convert JSON into a human
34818readable HTML table representation.")
34819 (license license:expat)))
34820
34821(define-public python-face
34822 (package
34823 (name "python-face")
34824 (version "24.0.0")
34825 (source
34826 (origin
34827 (method git-fetch)
34828 (uri (git-reference
34829 (url "https://github.com/mahmoud/face")
34830 (commit (string-append "v" version))))
34831 (file-name (git-file-name name version))
34832 (sha256
34833 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34834 (build-system pyproject-build-system)
34835 (native-inputs (list python-pytest python-setuptools))
34836 (propagated-inputs (list python-boltons))
34837 (home-page "https://github.com/mahmoud/face")
34838 (synopsis "CLI parsing and dispatching microframework")
34839 (description "@code{python-face} is a Pythonic microframework for building
34840command-line applications.
34841
34842@itemize
34843@item First-class subcommand support
34844@item Powerful middleware architecture
34845@item Separate parser layer
34846@item Built-in flagfile support
34847@item Handy testing utilities
34848@item Themeable help display
34849@end itemize")
34850 (license license:bsd-3)))
34851
34852(define-public python-glom
34853 (package
34854 (name "python-glom")
34855 (version "24.11.0")
34856 (source
34857 (origin
34858 (method git-fetch)
34859 (uri (git-reference
34860 (url "https://github.com/mahmoud/glom")
34861 (commit (string-append "v" version))))
34862 (file-name (git-file-name name version))
34863 (sha256
34864 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34865 (build-system pyproject-build-system)
34866 (native-inputs
34867 (list python-pytest
34868 python-pyyaml
34869 python-setuptools))
34870 (propagated-inputs
34871 (list python-attrs
34872 python-boltons
34873 python-face))
34874 (home-page "https://github.com/mahmoud/glom")
34875 (synopsis "Declaratively restructure data")
34876 (description "Real applications have real data, and real data
34877nests---objects inside of objects inside of lists of objects. glom is a new
34878and powerful way to handle real-world data, featuring:
34879
34880@itemize
34881@item Path-based access to nested data structures
34882@item Readable, meaningful error messages
34883@item Declarative data transformation, using lightweight, Pythonic specifications
34884@item Built-in data exploration and debugging features
34885@end itemize")
34886 (license license:bsd-3)))
34887
34888(define-public python-box
34889 (package
34890 (name "python-box")
34891 (version "7.3.2")
34892 (source
34893 (origin
34894 (method git-fetch)
34895 (uri
34896 (git-reference
34897 (url "https://github.com/cdgriffith/Box")
34898 (commit version)))
34899 (file-name (git-file-name name version))
34900 (sha256
34901 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34902 (build-system pyproject-build-system)
34903 (arguments
34904 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34905 (native-inputs
34906 (list python-pytest
34907 python-setuptools))
34908 (propagated-inputs
34909 (list python-msgpack
34910 python-ruamel.yaml
34911 python-tomli-w))
34912 (home-page "https://github.com/cdgriffith/Box")
34913 (synopsis "Advanced Python dictionaries with dot notation access")
34914 (description
34915 "This package provides the @code{python-box} Python module.
34916It implements advanced Python dictionaries with dot notation access.")
34917 (license license:expat)))
34918
34919(define-public python-fields
34920 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34921 (revision "0"))
34922 (package
34923 (name "python-fields")
34924 (version (git-version "5.0.0" revision commit))
34925 (source
34926 (origin
34927 (method git-fetch)
34928 (uri (git-reference
34929 (url "https://github.com/ionelmc/python-fields")
34930 (commit commit)))
34931 (file-name (git-file-name name version))
34932 (sha256
34933 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34934 (build-system pyproject-build-system)
34935 (arguments
34936 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34937 (native-inputs (list python-pytest-8
34938 python-pytest-benchmark
34939 python-setuptools
34940 python-wheel))
34941 (home-page "https://python-fields.readthedocs.io/")
34942 (synopsis "Python container class boilerplate killer")
34943 (description "Avoid repetitive boilerplate code in Python classes.")
34944 (license license:bsd-3))))
34945
34946(define-public python-aspectlib
34947 (package
34948 (name "python-aspectlib")
34949 (version "2.0.0")
34950 (source
34951 (origin
34952 (method git-fetch)
34953 (uri (git-reference
34954 (url "https://github.com/ionelmc/python-aspectlib")
34955 (commit (string-append "v" version))))
34956 (file-name (git-file-name name version))
34957 (sha256
34958 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34959 (build-system pyproject-build-system)
34960 (arguments
34961 (list
34962 #:test-flags
34963 #~(list ;; XXX: Require more dependencies.
34964 "--ignore=tests/test_integrations.py"
34965 "--ignore=tests/test_integrations_py3.py")
34966 #:phases
34967 #~(modify-phases %standard-phases
34968 (add-after 'unpack 'fix-pytest-config
34969 (lambda _
34970 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34971 ;; The (path: py.path.local) argument is deprecated, please
34972 ;; use (collection_path: pathlib.Path).
34973 (delete-file "pytest.ini"))))))
34974 (native-inputs
34975 (list python-pytest-8
34976 python-setuptools
34977 python-tornado))
34978 (propagated-inputs
34979 (list python-fields))
34980 (home-page "https://github.com/ionelmc/python-aspectlib")
34981 (synopsis "Python monkey-patching and decorators")
34982 (description
34983 "This package provides an aspect-oriented programming, monkey-patch
34984and decorators library. It is useful when changing behavior in existing
34985code is desired. It includes tools for debugging and testing:
34986simple mock/record and a complete capture/replay framework.")
34987 (license license:bsd-2)))
34988
34989(define-public python-ijson
34990 (package
34991 (name "python-ijson")
34992 (version "3.5.0")
34993 (source
34994 (origin
34995 (method url-fetch)
34996 (uri (pypi-uri "ijson" version))
34997 (sha256
34998 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34999 (inputs
35000 ;; yajl is optional, but compiling with it makes faster
35001 ;; backends available to ijson:
35002 (list yajl))
35003 (native-inputs
35004 (list python-pytest
35005 python-setuptools))
35006 (build-system pyproject-build-system)
35007 (home-page "https://github.com/ICRAR/ijson")
35008 (synopsis "Iterative JSON parser with Python iterator interfaces")
35009 (description
35010 "Ijson is an iterative JSON parser with standard Python iterator
35011interfaces.")
35012 (license license:bsd-3)))
35013
35014(define-public python-ordered-set
35015 (package
35016 (name "python-ordered-set")
35017 (version "4.1.0")
35018 (source
35019 (origin
35020 (method url-fetch)
35021 (uri (pypi-uri "ordered-set" version))
35022 (sha256
35023 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
35024 (build-system pyproject-build-system)
35025 (native-inputs (list python-cython python-flit-core python-pytest))
35026 (home-page "https://github.com/simonpercivall/orderedset")
35027 (synopsis "Ordered Set implementation in Cython")
35028 (description "This library provides an @code{OrderedSet} data type that
35029works like a regular set, but remembers insertion order. It supports the full
35030Python @code{set} interface.")
35031 (license license:asl2.0)))
35032
35033(define-public python-orgparse
35034 (package
35035 (name "python-orgparse")
35036 (version "0.4.20251020")
35037 (source
35038 (origin
35039 (method git-fetch)
35040 (uri (git-reference
35041 (url "https://github.com/karlicoss/orgparse")
35042 (commit (string-append "v" version))))
35043 (file-name (git-file-name name version))
35044 (sha256
35045 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
35046 (build-system pyproject-build-system)
35047 (arguments
35048 (list
35049 #:test-flags
35050 #~(list "--ignore-glob=doc/*"
35051 ;; XXX: Unclear why those tests fail.
35052 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
35053 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
35054 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
35055 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
35056 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
35057 (home-page "https://github.com/karlicoss/orgparse")
35058 (synopsis "Emacs Org mode parser in Python")
35059 (description
35060 "This package is a Python module for reading Emacs Org mode files.")
35061 (license license:bsd-3)))
35062
35063(define-public dynaconf
35064 (package
35065 (name "dynaconf")
35066 (version "3.2.11")
35067 (source
35068 (origin
35069 (method git-fetch)
35070 (uri
35071 (git-reference
35072 (url "https://github.com/dynaconf/dynaconf")
35073 (commit version)))
35074 (file-name (git-file-name name version))
35075 (sha256
35076 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
35077 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
35078 (modules '((guix build utils)))
35079 ;; Remove vendored dependencies
35080 (snippet
35081 #~(let ((unvendor '("click" "ruamel" "toml")))
35082 (with-directory-excursion "dynaconf/vendor"
35083 (for-each delete-file-recursively unvendor))
35084 (substitute* (find-files "." "\\.py$")
35085 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
35086 _ target rest)
35087 (string-append "import " target rest))
35088 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
35089 target))))))
35090 (build-system pyproject-build-system)
35091 (arguments
35092 (list
35093 #:test-flags
35094 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
35095 "-k" #$(let ((click-tests '("test_negative_get"
35096 "test_not_found_key_exit_error[get]"
35097 "test_inspect_invalid_format")))
35098 ;; Disable integration tests
35099 (string-append "not integration and not "
35100 ;; These tests fail because we use
35101 ;; Click 8.* instead of Click 7
35102 (string-join click-tests " and not ")))
35103 "tests")
35104 #:phases
35105 #~(modify-phases %standard-phases
35106 (add-after 'unpack 'patch-for-click-8
35107 (lambda _
35108 (substitute* "dynaconf/cli.py"
35109 (("click.get_os_args\\()") ;deprecated from Click 8.1+
35110 "sys.argv[1:]")))))))
35111 (propagated-inputs
35112 (list python-click python-configobj python-ruamel.yaml-0.16
35113 python-toml python-tomli))
35114 (native-inputs
35115 (list python-django
35116 python-flask
35117 python-pytest
35118 python-pytest-mock
35119 python-setuptools))
35120 (home-page "https://www.dynaconf.com/")
35121 (synopsis "The dynamic configurator for your Python project")
35122 (description
35123 "This package provides @code{dynaconf} the dynamic configurator manager for
35124your Python project. It provides features such as:
35125
35126@itemize
35127@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
35128@item Settings management (default values, validation, parsing, templating);
35129@item Protection of sensitive information (passwords/tokens);
35130@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
35131loaders;
35132@item Full support for environment variables to override existing settings
35133(dotenv support included);
35134@item Optional layered system for multiple environments @code{[default,
35135development, testing, production]};
35136@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
35137@item Built-in extensions for Django and Flask web frameworks;
35138@item CLI for common operations such as @code{init, list, write, validate, export}.
35139@end itemize")
35140 (license license:expat)))
35141
35142(define-public python-pudb
35143 ;; TODO: Rename to pudb as it's a final program.
35144 (package
35145 (name "python-pudb")
35146 (version "2025.1.3")
35147 (source
35148 (origin
35149 (method url-fetch)
35150 (uri (pypi-uri "pudb" version))
35151 (sha256
35152 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
35153 (build-system pyproject-build-system)
35154 (arguments
35155 (list
35156 #:phases
35157 #~(modify-phases %standard-phases
35158 (add-before 'check 'pre-check
35159 (lambda _
35160 (setenv "HOME" "/tmp"))))))
35161 (native-inputs
35162 (list python-hatchling
35163 python-pytest
35164 python-pytest-mock
35165 python-numpy))
35166 (propagated-inputs
35167 (list python-jedi
35168 python-packaging
35169 python-pygments
35170 python-typing-extensions
35171 python-urwid
35172 python-urwid-readline))
35173 (home-page "https://documen.tician.de/pudb/")
35174 (synopsis "Console-based Python debugger")
35175 (description
35176 "@command{pudb} is a full-screen, console-based Python debugger providing
35177all the niceties of modern GUI-based debuggers in a more lightweight and
35178keyboard-friendly package.")
35179 (license license:expat)))
35180
35181(define-public python-iwlib
35182 (package
35183 (name "python-iwlib")
35184 (version "1.7.0")
35185 (source
35186 (origin
35187 (method git-fetch)
35188 (uri (git-reference
35189 (url "https://github.com/nhoad/python-iwlib")
35190 (commit version)))
35191 (file-name (git-file-name name version))
35192 (sha256
35193 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
35194 (build-system pyproject-build-system)
35195 (arguments
35196 (list
35197 #:phases
35198 #~(modify-phases %standard-phases
35199 (add-before 'check 'cleanup
35200 (lambda _
35201 (delete-file-recursively "iwlib"))))))
35202 (native-inputs (list python-pytest python-setuptools))
35203 (inputs (list wireless-tools))
35204 (propagated-inputs (list python-cffi))
35205 (home-page "https://github.com/nhoad/python-iwlib")
35206 (synopsis "Python module to interface with iwlib")
35207 (description
35208 "This package provides a Python interface to iw wireless tools.")
35209 (license license:gpl2)))
35210
35211(define-public python-pdoc3
35212 (package
35213 (name "python-pdoc3")
35214 (version "0.11.6")
35215 (source
35216 (origin
35217 (method url-fetch)
35218 (uri (pypi-uri "pdoc3" version))
35219 (sha256
35220 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
35221 (build-system pyproject-build-system)
35222 (arguments
35223 (list #:test-backend #~'unittest
35224 #:test-flags #~(list "-v" "pdoc.test")))
35225 (native-inputs
35226 (list python-setuptools-git
35227 python-setuptools
35228 python-setuptools-scm))
35229 (propagated-inputs
35230 (list python-mako
35231 python-markdown))
35232 (home-page "https://pdoc3.github.io/pdoc/")
35233 (synopsis "Auto-generate API documentation for Python projects")
35234 (description
35235 "This package auto-generates API documentation from Python projects
35236already existing modules and objects docstrings.")
35237 (license license:agpl3+)))
35238
35239(define-public python-piexif
35240 (package
35241 (name "python-piexif")
35242 (version "1.1.3")
35243 (source
35244 (origin
35245 (method git-fetch)
35246 (uri (git-reference
35247 (url "https://github.com/hMatoba/Piexif")
35248 (commit version)))
35249 (file-name (git-file-name name version))
35250 (sha256
35251 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35252 (patches
35253 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35254 (build-system pyproject-build-system)
35255 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35256 (home-page "https://github.com/hMatoba/Piexif")
35257 (synopsis "Simplify exif manipulations with Python")
35258 (description
35259 "Piexif simplifies interacting with EXIF data in Python. It includes the
35260tools necessary for extracting, creating, manipulating, converting and writing
35261EXIF data to JPEG, WebP and TIFF files.")
35262 (license license:expat)))
35263
35264(define-public python-pyrss2gen
35265 (package
35266 (name "python-pyrss2gen")
35267 (version "1.1")
35268 (source
35269 (origin
35270 (method url-fetch)
35271 (uri (pypi-uri "PyRSS2Gen" version))
35272 (sha256
35273 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35274 (build-system pyproject-build-system)
35275 (arguments (list #:tests? #f)) ; No tests.
35276 (native-inputs (list python-setuptools))
35277 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35278 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35279 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35280PyRSS2Gen builds the feed up by using a XML generator.")
35281 (license license:bsd-3)))
35282
35283(define-public python-doit
35284 (package
35285 (name "python-doit")
35286 (version "0.36.0")
35287 (source
35288 (origin
35289 (method url-fetch)
35290 (uri (pypi-uri "doit" version))
35291 (sha256
35292 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35293 (build-system pyproject-build-system)
35294 ;; This is not a serious test failure. It's probably due to the load path
35295 ;; at test time.
35296 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35297 (propagated-inputs
35298 (list python-cloudpickle python-importlib-metadata))
35299 (native-inputs (list python-pytest python-setuptools python-wheel))
35300 (home-page "https://pydoit.org")
35301 (synopsis "Automation tool to execute any kind of task in a build-tools
35302fashion")
35303 (description "doit is an automation tool that brings the power of
35304build-tools to execute any kind of task.
35305
35306A task describes some computation to be done (actions), and contains some
35307extra meta-data. The actions can be external programs or Python functions. A
35308single task may define more than one action. doit uses the task’s meta-data
35309to:
35310
35311@itemize
35312@item cache task results
35313@item correct execution order
35314@item parallel execution
35315@item powerful dependency system
35316@end itemize")
35317 (license license:expat)))
35318
35319(define-public python-phpserialize
35320 (package
35321 (name "python-phpserialize")
35322 (version "1.3")
35323 (source
35324 (origin
35325 (method git-fetch)
35326 (uri (git-reference
35327 (url "https://github.com/mitsuhiko/phpserialize")
35328 (commit version)))
35329 (file-name (git-file-name name version))
35330 (sha256
35331 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35332 (build-system pyproject-build-system)
35333 (arguments
35334 (list
35335 ;; XXX: Unclear why this test fails.
35336 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35337 #:phases
35338 #~(modify-phases %standard-phases
35339 (add-after 'unpack 'patch-tests
35340 (lambda _
35341 (substitute* "tests.py"
35342 (("assert_\\(b'WP_User' in x\\)")
35343 "assertIn(b'WP_User', x)")))))))
35344 (native-inputs (list python-pytest python-setuptools))
35345 (home-page "https://github.com/mitsuhiko/phpserialize")
35346 (synopsis "Python port of the serialize and unserialize functions of PHP")
35347 (description
35348 "This package provides a port of the @code{serialize} and
35349@code{unserialize} functions of PHP for Python.")
35350 (license license:bsd-3)))
35351
35352(define-public python-pycapnp
35353 (package
35354 (name "python-pycapnp")
35355 (version "2.2.4")
35356 (source
35357 (origin
35358 (method git-fetch)
35359 (uri (git-reference
35360 (url "https://github.com/capnproto/pycapnp")
35361 (commit (string-append "v" version))))
35362 (file-name (git-file-name name version))
35363 (sha256
35364 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35365 (build-system pyproject-build-system)
35366 (arguments
35367 (list
35368 #:phases
35369 #~(modify-phases %standard-phases
35370 (add-before 'build 'set-force-system-capnp
35371 (lambda _
35372 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35373 (add-after 'install 'copy-missing-schemas
35374 (lambda _
35375 (let* ((out #$output)
35376 (capnp-clang #$(this-package-input "capnproto-clang"))
35377 (site-pkgs (car (find-files (string-append out "/lib")
35378 "^site-packages$"
35379 #:directories? #t)))
35380 (target-dir (string-append site-pkgs "/capnp"))
35381 (schema-files (find-files
35382 (string-append capnp-clang
35383 "/include/capnp")
35384 "\\.capnp$")))
35385 (for-each (lambda (file)
35386 (install-file file target-dir)) schema-files))))
35387 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35388 ;; module named 'schema_capnp'". This module is generated
35389 ;; dynamically via import hooks at runtime
35390 (delete 'sanity-check))))
35391 (native-inputs (list pkg-config
35392 python-cython
35393 python-jinja2
35394 python-pkgconfig
35395 python-pytest
35396 python-pytest-asyncio
35397 python-setuptools))
35398 (inputs (list capnproto-clang))
35399 (home-page "https://github.com/capnproto/pycapnp")
35400 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35401 (description
35402 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35403 (license license:bsd-2)))
35404
35405(define-public python-pydevtool
35406 (package
35407 (name "python-pydevtool")
35408 (version "0.3.0")
35409 (source
35410 (origin
35411 (method url-fetch)
35412 (uri (pypi-uri "pydevtool" version))
35413 (sha256
35414 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35415 (build-system pyproject-build-system)
35416 (arguments (list #:tests? #false)) ;no tests
35417 (propagated-inputs (list python-doit python-rich-click))
35418 (native-inputs (list python-setuptools python-wheel))
35419 (home-page "https://github.com/pydoit/pydevtool")
35420 (synopsis "CLI dev tools powered by pydoit")
35421 (description "This package provides command line tools, powered by pydoit.
35422It offers integration with @code{click} and @code{rich} for custom CLI and
35423these linters: @code{pycodestlye}, @code{pyflakes}")
35424 (license license:expat)))
35425
35426(define-public nikola
35427 (package
35428 (name "nikola")
35429 (version "8.3.3")
35430 (source
35431 (origin
35432 (method url-fetch)
35433 (uri (pypi-uri "nikola" version))
35434 (sha256
35435 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35436 (build-system pyproject-build-system)
35437 (arguments
35438 (list
35439 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35440 #:test-flags
35441 #~(list "--durations=10"
35442 "--ignore=tests/integration/test_dev_server.py"
35443 "-k" (string-join
35444 ;; Some time difference in example tests.
35445 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35446 "test_serves_root_dir[https://example.org:1234/blog]"
35447 "test_serves_root_dir[https://example.org:3456/blog/]"
35448 "test_serves_root_dir[https://example.org]"
35449 ;; AssertionError: Calls not found.
35450 "test_write_content_does_not_detroy_text"
35451 ;; AssertionError: assert 'January 10, 2006,
35452 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35453 ;; 12:34:56\u202fPM EST'
35454 "test_format_date_timezone")
35455 " and not "))))
35456 (native-inputs
35457 (list nss-certs-for-test
35458 python-feedparser
35459 python-freezegun
35460 python-pytest
35461 python-setuptools))
35462 (inputs
35463 (list python-babel
35464 python-blinker
35465 python-dateutil
35466 python-docutils
35467 python-doit
35468 python-jinja2 ;; for themes
35469 python-lxml
35470 python-mako
35471 python-markdown
35472 python-natsort
35473 python-notebook ;; for ipynb
35474 python-phpserialize ;; for wordpress import
35475 python-piexif
35476 python-pillow
35477 python-pygments
35478 python-pyrss2gen
35479 python-requests
35480 python-ruamel.yaml ;; for YAML metadata
35481 python-toml
35482 python-unidecode
35483 python-yapsy))
35484 (home-page "https://getnikola.com/")
35485 (synopsis "Modular, fast and simple static website and blog generator")
35486 (description "Nikola generates static websites and blogs. Out of the box,
35487it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35488and has plugins for many other formats.")
35489 (license license:expat)))
35490
35491(define-public nbss-upload
35492 (package
35493 (name "nbss-upload")
35494 (version "0.1")
35495 (source
35496 (origin
35497 (method git-fetch)
35498 (uri (git-reference
35499 (url "https://github.com/notebook-sharing-space/nbss-upload")
35500 (commit (string-append "v" version))))
35501 (file-name (git-file-name name version))
35502 (sha256
35503 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35504 (build-system pyproject-build-system)
35505 (arguments (list #:tests? #f)) ;no tests
35506 (native-inputs (list python-setuptools))
35507 (propagated-inputs (list python-requests))
35508 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35509 (synopsis "Upload notebooks to a notebooksharing.space instance")
35510 (description
35511 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35512notebooksharing.space instance.")
35513 (license license:bsd-3)))
35514
35515(define-public python-reedsolo
35516 (package
35517 (name "python-reedsolo")
35518 (version "1.7.0")
35519 (source
35520 (origin
35521 (method git-fetch)
35522 (uri (git-reference
35523 (url "https://github.com/tomerfiliba/reedsolomon")
35524 (commit (string-append "v" version))))
35525 (file-name (git-file-name name version))
35526 (sha256
35527 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35528 (build-system pyproject-build-system)
35529 (native-inputs (list python-pytest python-setuptools))
35530 (home-page "https://github.com/tomerfiliba/reedsolomon")
35531 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35532 (description
35533 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35534the tutorial at Wikiversity. This is a burst-type implementation, so that it
35535supports any Galois field higher than 2^3, but not binary streams.")
35536 (license license:public-domain)))
35537
35538(define-public python-esprima
35539 (package
35540 (name "python-esprima")
35541 (version "4.0.1")
35542 (source
35543 (origin
35544 (method git-fetch)
35545 (uri (git-reference
35546 (url "https://github.com/Kronuz/esprima-python")
35547 (commit (string-append "v" version))))
35548 (file-name (git-file-name name version))
35549 (sha256
35550 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35551 (build-system pyproject-build-system)
35552 (arguments
35553 (list
35554 ;; XXX: pytest fails to collect tests, and a few tests are failing
35555 ;; using unittest backend. In particular, offsets with math characters
35556 ;; and uncompiled regexps.
35557 #:tests? #f
35558 #:test-backend #~'unittest
35559 #:test-flags
35560 #~(list "-k"
35561 (string-join (list
35562 ;; XXX: Character offsets with maths.
35563 "not test_math_alef"
35564 "test_math_dal_part"
35565 "test_math_kaf_lam"
35566 "test_math_zain_start"
35567 ;; XXX: Uncompiled regexps.
35568 "test_yield_arg_regexp1"
35569 "test_yield_arg_regexp2"
35570 "test_migrated_0005_source"
35571 "test_u_flag_valid_range"
35572 "test_migrated_0049"
35573 "test_migrated_0050_source")
35574 " and not "))))
35575 (native-inputs (list python-setuptools))
35576 (home-page "https://github.com/Kronuz/esprima-python")
35577 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35578 (description
35579 "This package provides ECMAScript parsing infrastructure for
35580multipurpose analysis in Python.")
35581 (license license:bsd-3)))
35582
35583(define-public python-psycopg2-binary
35584 (package
35585 (name "python-psycopg2-binary")
35586 (version "2.9.10")
35587 (source
35588 (origin
35589 (method url-fetch)
35590 (uri (pypi-uri "psycopg2-binary" version))
35591 (sha256
35592 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35593 (build-system pyproject-build-system)
35594 (arguments
35595 ;; Tests are disable because they need a live instance of PostgreSQL.
35596 '(#:tests? #f))
35597 (native-inputs (list python-setuptools python-wheel))
35598 (inputs (list postgresql))
35599 (home-page "https://psycopg.org/")
35600 (synopsis "PostgreSQL database adapter for Python")
35601 (description
35602 "Psycopg is a PostgreSQL database adapter for the Python programming
35603language. Its main features are the complete implementation of the Python DB
35604API 2.0 specification and the thread safety (several threads can share the
35605same connection). It was designed for heavily multi-threaded applications
35606that create and destroy lots of cursors and make a large number of concurrent
35607@code{INSERT}s or @code{UPDATE}s.
35608
35609Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35610being both efficient and secure. It features client-side and
35611server-side cursors, asynchronous communication and notifications,
35612@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35613out-of-the-box and adapted to matching PostgreSQL data types;
35614adaptation can be extended and customized thanks to a flexible objects
35615adaptation system.
35616
35617Psycopg 2 is both Unicode and Python 3 friendly.")
35618 (license license:lgpl3+)))
35619
35620(define-public python-pyfuse3
35621 (package
35622 (name "python-pyfuse3")
35623 (version "3.4.2")
35624 (source
35625 (origin
35626 (method git-fetch)
35627 (uri (git-reference
35628 (url "https://github.com/libfuse/pyfuse3")
35629 (commit (string-append "v" version))))
35630 (file-name (git-file-name name version))
35631 (sha256
35632 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35633 (build-system pyproject-build-system)
35634 (arguments
35635 (list
35636 #:test-flags
35637 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35638 #~(list "--deselect=test/test_api.py::test_listdir")))
35639 (native-inputs
35640 (list pkg-config
35641 python-cython
35642 python-pytest
35643 python-setuptools
35644 python-setuptools-scm))
35645 (inputs
35646 (list fuse))
35647 (propagated-inputs
35648 (list python-trio))
35649 (home-page "https://github.com/libfuse/pyfuse3")
35650 (synopsis "Python bindings to FUSE 3")
35651 (description "This package provides Python 3 bindings for libfuse 3 with
35652async I/O support.")
35653 (license license:gpl2+)))
35654
35655(define-public python-ansi-styles
35656 ;; Releases are not tagged in Git:
35657 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35658 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35659 (revision "0"))
35660 (package
35661 (name "python-ansi-styles")
35662 (version (git-version "0.2.2" revision commit))
35663 (source
35664 (origin
35665 (method git-fetch)
35666 (uri (git-reference
35667 (url "https://github.com/shawwn/ansi-styles-python")
35668 (commit commit)))
35669 (file-name (git-file-name name version))
35670 (sha256
35671 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35672 (build-system pyproject-build-system)
35673 (native-inputs (list python-poetry-core python-pytest))
35674 (home-page "https://github.com/shawwn/ansi-styles-python")
35675 (synopsis "ANSI escape codes for styling strings in the terminal")
35676 (description
35677 "This Python package provide ANSI escape codes
35678for styling strings in the terminal.")
35679 (license license:expat))))
35680
35681(define-public python-multipart
35682 (package
35683 (name "python-multipart")
35684 (version "0.0.29")
35685 (source
35686 (origin
35687 (method git-fetch)
35688 (uri (git-reference
35689 (url "https://github.com/Kludex/python-multipart")
35690 (commit version)))
35691 (file-name (git-file-name name version))
35692 (sha256
35693 (base32 "06rxa2xymdqri8zydy7xw2cnpsnzlv2jzdy9g86m5fpfca0pp9fm"))))
35694 (build-system pyproject-build-system)
35695 (native-inputs
35696 (list python-hatchling
35697 python-pytest
35698 python-pyyaml))
35699 (home-page "https://github.com/Kludex/python-multipart")
35700 (synopsis "Streaming multipart parser for Python")
35701 (description
35702 "This package provides a streaming multipart parser for Python.")
35703 (license license:asl2.0)))
35704
35705(define-public python-aiopg
35706 (package
35707 (name "python-aiopg")
35708 (version "1.4.0")
35709 (source
35710 (origin
35711 (method git-fetch)
35712 (uri (git-reference
35713 (url "https://github.com/aio-libs/aiopg")
35714 (commit (string-append "v" version))))
35715 (file-name (git-file-name name version))
35716 (sha256
35717 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35718 (build-system pyproject-build-system)
35719 (arguments
35720 (list
35721 #:tests? #f ;they need Docker
35722 #:phases
35723 #~(modify-phases %standard-phases
35724 (add-after 'unpack 'use-default-asyncio
35725 ;; async_timeout is deprecated, upstream recommends to use
35726 ;; asyncio, available since Python 3.11.
35727 (lambda _
35728 (substitute* "aiopg/pool.py"
35729 (("async_timeout") "asyncio"))))
35730 (add-after 'unpack 'relax-requirements
35731 (lambda _
35732 (substitute* "setup.py"
35733 (("psycopg2-binary") "psycopg2")
35734 ;; It's a part of Python 3.11+.
35735 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35736 (native-inputs
35737 (list python-setuptools))
35738 (propagated-inputs
35739 (list python-psycopg2))
35740 (home-page "https://aiopg.readthedocs.io")
35741 (synopsis "Postgres integration with asyncio")
35742 (description
35743 "aiopg is a library for accessing a PostgreSQL database from the
35744asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35745Psycopg database driver.")
35746 (license license:bsd-3)))
35747
35748(define-public python-shtab
35749 (package
35750 (name "python-shtab")
35751 (version "1.7.1")
35752 (source
35753 (origin
35754 (method url-fetch)
35755 (uri (pypi-uri "shtab" version))
35756 (sha256
35757 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35758 (build-system pyproject-build-system)
35759 (native-inputs
35760 (list bash
35761 python-pytest
35762 python-pytest-timeout
35763 python-setuptools
35764 python-setuptools-scm
35765 python-wheel))
35766 (home-page "https://github.com/iterative/shtab")
35767 (synopsis "Automagic shell tab completion for Python CLI applications")
35768 (description
35769 "This package automatically generates shell tab completion scripts for
35770Python CLI apps.")
35771 (license license:asl2.0)))
35772
35773(define-public python-pyperf
35774 (package
35775 (name "python-pyperf")
35776 (version "2.10.0")
35777 (source
35778 (origin
35779 (method git-fetch)
35780 (uri (git-reference
35781 (url "https://github.com/psf/pyperf")
35782 (commit version)))
35783 (file-name (git-file-name name version))
35784 (sha256
35785 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35786 (build-system pyproject-build-system)
35787 (arguments
35788 (list
35789 #:test-flags
35790 #~(list "--ignore=pyperf/tests/test_examples.py")))
35791 (native-inputs
35792 (list python-psutil-bootstrap
35793 python-pytest
35794 python-setuptools))
35795 (home-page "https://github.com/psf/pyperf")
35796 (synopsis "Toolkit for running Python benchmarks")
35797 (description
35798 "The Python @code{pyperf} module is a toolkit for writing, running and
35799analyzing benchmarks. It features a simple API that can:
35800
35801@itemize
35802@item automatically calibrate a benchmark for a time budget;
35803@item spawn multiple worker processes;
35804@item compute the mean and standard deviation;
35805@item detect if a benchmark result seems unstable;
35806@item store benchmark results in JSON format;
35807@item support multiple units: seconds, bytes and integer.
35808@end itemize")
35809 (license license:expat)))
35810
35811(define-public python-pydispatcher
35812 (package
35813 (name "python-pydispatcher")
35814 (version "2.0.7")
35815 (source
35816 (origin
35817 (method url-fetch)
35818 (uri (pypi-uri "PyDispatcher" version))
35819 (sha256
35820 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35821 (build-system pyproject-build-system)
35822 (native-inputs (list python-pytest python-setuptools))
35823 (home-page "https://pydispatcher.sourceforge.net")
35824 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35825 (description
35826 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35827@code{dispatcher.py} module. It provides the Python programmer with a robust
35828mechanism for event routing within various application contexts.
35829
35830Included in the package are the robustapply and saferef modules, which
35831provide the ability to selectively apply arguments to callable objects
35832and to reference instance methods using weak-references.")
35833 (license license:bsd-3)))
35834
35835(define-public python-pyee
35836 (package
35837 (name "python-pyee")
35838 (version "13.0.1")
35839 (source
35840 (origin
35841 (method git-fetch)
35842 (uri (git-reference
35843 (url "https://github.com/jfhbrook/pyee")
35844 (commit (string-append "v" version))))
35845 (file-name (git-file-name name version))
35846 (sha256
35847 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35848 (build-system pyproject-build-system)
35849 (propagated-inputs (list python-typing-extensions))
35850 (native-inputs
35851 (list python-mock
35852 python-pytest
35853 python-pytest-asyncio
35854 python-pytest-trio
35855 python-setuptools
35856 python-trio
35857 python-twisted))
35858 (home-page "https://github.com/jfhbrook/pyee")
35859 (synopsis "Emit events with Python")
35860 (description
35861 "This package provides a port of node.js's EventEmitter to
35862python. Additionally, it includes a number of subclasses useful for
35863implementing async and threaded programming in python, such as async/await.")
35864 (license license:expat)))
35865
35866(define-public python-pypubsub
35867 (package
35868 (name "python-pypubsub")
35869 (version "4.0.3")
35870 (source
35871 (origin
35872 (method git-fetch)
35873 (uri (git-reference
35874 (url "https://github.com/schollii/pypubsub")
35875 (commit (string-append "v" version))))
35876 (file-name (git-file-name name version))
35877 (sha256
35878 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35879 (build-system pyproject-build-system)
35880 (arguments
35881 (list
35882 #:phases
35883 #~(modify-phases %standard-phases
35884 (replace 'check
35885 (lambda* (#:key tests? #:allow-other-keys)
35886 (when tests?
35887 (with-directory-excursion "tests/suite"
35888 (invoke "py.test"))))))))
35889 (native-inputs
35890 (list python-pytest
35891 python-setuptools
35892 python-wheel))
35893 (home-page "https://github.com/schollii/pypubsub")
35894 (synopsis "Python publish-subcribe library")
35895 (description
35896 "This library provides a publish-subscribe API to facilitate event-based
35897or message-based architecture in a single-process application. It is centered
35898on the notion of a topic - senders publish messages of a given topic, and
35899listeners subscribe to messages of a given topic, all inside the same
35900process.")
35901 (license license:bsd-2)))
35902
35903(define-public python-queuelib
35904 (package
35905 (name "python-queuelib")
35906 (version "1.8.0")
35907 (source
35908 (origin
35909 (method git-fetch)
35910 (uri (git-reference
35911 (url "https://github.com/scrapy/queuelib")
35912 (commit (string-append "v" version))))
35913 (file-name (git-file-name name version))
35914 (sha256
35915 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35916 (build-system pyproject-build-system)
35917 (native-inputs (list python-hatchling python-pytest))
35918 (home-page "https://github.com/scrapy/queuelib")
35919 (synopsis "Collection of queues for Python")
35920 (description
35921 "Queuelib is a Python library that implements object collections which
35922are stored in memory or persisted to disk, provide a simple API, and run fast.
35923
35924Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35925by priority and queues that are emptied in a round-robin fashion.")
35926 (license license:bsd-3)))
35927
35928(define-public python-posix-ipc
35929 (package
35930 (name "python-posix-ipc")
35931 (version "1.3.2")
35932 (source
35933 (origin
35934 (method git-fetch)
35935 (uri (git-reference
35936 (url "https://github.com/osvenskan/posix_ipc")
35937 (commit (string-append "rel" version))))
35938 (file-name (git-file-name name version))
35939 (sha256
35940 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35941 (build-system pyproject-build-system)
35942 (arguments
35943 (list
35944 #:test-flags
35945 ;; XXX: Collection fails due to stdin configuration.
35946 #~(list "--ignore=tests/test_memory.py")
35947 #:phases
35948 #~(modify-phases %standard-phases
35949 (add-after 'unpack 'set-cc-path
35950 (lambda _
35951 (setenv "CC" #$(cc-for-target)))))))
35952 (native-inputs (list python-pytest python-setuptools))
35953 (home-page "https://semanchuk.com/philip/posix_ipc/")
35954 (synopsis "POSIX IPC primitives for Python")
35955 (description
35956 "This package provides POSIX IPC primitives - semaphores, shared memory and
35957message queues for Python.")
35958 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35959
35960(define-public python-itemadapter
35961 (package
35962 (name "python-itemadapter")
35963 (version "0.12.0")
35964 (source
35965 (origin
35966 (method git-fetch)
35967 (uri (git-reference
35968 (url "https://github.com/scrapy/itemadapter")
35969 (commit (string-append "v" version))))
35970 (file-name (git-file-name name version))
35971 (sha256
35972 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35973 (build-system pyproject-build-system)
35974 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35975 (native-inputs (list python-hatchling))
35976 (home-page "https://github.com/scrapy/itemadapter")
35977 (synopsis "Common interface for data container classes")
35978 (description
35979 "The ItemAdapter class is a wrapper for data container objects, providing
35980a common interface to handle objects of different types in an uniform manner,
35981regardless of their underlying implementation.
35982
35983Currently supported types are:
35984@itemize
35985@item scrapy.item.Item
35986@item dict
35987@item dataclass-based classes
35988@item attrs-based classes
35989@item pydantic-based classes
35990@end itemize
35991
35992Additionally, interaction with arbitrary types is supported by
35993implementing a pre-defined interface.")
35994 (license license:bsd-3)))
35995
35996(define-public python-itemloaders
35997 (package
35998 (name "python-itemloaders")
35999 (version "1.3.2")
36000 (source
36001 (origin
36002 (method url-fetch)
36003 (uri (pypi-uri "itemloaders" version))
36004 (sha256
36005 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
36006 (build-system pyproject-build-system)
36007 (native-inputs
36008 (list python-packaging
36009 python-pytest
36010 python-setuptools
36011 python-wheel))
36012 (propagated-inputs
36013 (list python-itemadapter python-jmespath python-parsel))
36014 (home-page "https://github.com/scrapy/itemloaders")
36015 (synopsis "Base library for scrapy's ItemLoader")
36016 (description "Itemloaders is a library that helps you collect data
36017from HTML and XML sources. It comes in handy to extract data from web
36018pages, as it supports data extraction using CSS and XPath Selectors.
36019
36020It’s specially useful when you need to standardize the data from many
36021sources. For example, it allows you to have all your casting and
36022parsing rules in a single place.")
36023 (license license:bsd-3)))
36024
36025(define-public python-iterable-io
36026 (package
36027 (name "python-iterable-io")
36028 (version "1.0.0")
36029 (source
36030 (origin
36031 (method url-fetch)
36032 (uri (pypi-uri "iterable-io" version))
36033 (sha256
36034 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
36035 (build-system pyproject-build-system)
36036 (native-inputs (list python-setuptools python-pytest))
36037 (home-page "https://github.com/pR0Ps/iterable-io")
36038 (synopsis "Adapt generators and other iterables to a file-like interface")
36039 (description
36040 "@code{iterable-io} is a small Python library that provides an adapter so
36041that it's possible to read from
36042@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
36043in the same way as
36044@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
36045objects.")
36046 (license license:lgpl3)))
36047
36048(define-public python-iteround
36049 (package
36050 (name "python-iteround")
36051 (version "1.0.4")
36052 ;; PyPI only has wheels.
36053 (source (origin
36054 (method git-fetch)
36055 (uri (git-reference
36056 (url "https://github.com/cgdeboer/iteround")
36057 (commit (string-append "v" version))))
36058 (file-name (git-file-name name version))
36059 (sha256
36060 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
36061 (build-system pyproject-build-system)
36062 (native-inputs
36063 (list python-pytest python-setuptools python-wheel))
36064 (home-page "https://github.com/cgdeboer/iteround")
36065 (synopsis "Sum-safe rounding for Iterables")
36066 (description "Iteround is a standard library sum-safe rounding library for
36067Python iterables (lists, tuples, dicts).")
36068 (license license:expat)))
36069
36070(define-public python-hypy-utils
36071 (package
36072 (name "python-hypy-utils")
36073 (version "1.0.29")
36074 (source
36075 (origin
36076 (method url-fetch)
36077 (uri (pypi-uri "hypy_utils" version))
36078 (sha256
36079 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
36080 (build-system pyproject-build-system)
36081 (arguments (list #:tests? #f)) ; No tests upstream.
36082 (native-inputs (list python-setuptools))
36083 (home-page "https://github.com/hykilpikonna/HyPyUtils")
36084 (synopsis "Python utility functions for HyDEV")
36085 (description "This module provides Python utility functions for modifying
36086and setting the color of terminal output, via HyDEV.")
36087 (license license:expat)))
36088
36089(define-public python-mike
36090 (package
36091 (name "python-mike")
36092 (version "2.1.3")
36093 (source
36094 (origin
36095 (method git-fetch) ; no tests data in PyPi package
36096 (uri (git-reference
36097 (url "https://github.com/jimporter/mike")
36098 (commit (string-append "v" version))))
36099 (file-name (git-file-name name version))
36100 (sha256
36101 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
36102 (build-system pyproject-build-system)
36103 (arguments
36104 (list
36105 #:test-flags
36106 ;; Most of integration tests hang or fail.
36107 #~(list "--ignore=test/integration/"
36108 ;; AttributeError: 'NoneType' object has no attribute 'group'
36109 "--ignore=test/unit/test_commands.py"
36110 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
36111 (native-inputs
36112 (list git-minimal/pinned
36113 python-pytest
36114 python-setuptools
36115 python-shtab
36116 python-wheel))
36117 (propagated-inputs
36118 (list python-importlib-metadata
36119 python-importlib-resources
36120 python-jinja2
36121 python-mkdocs
36122 python-pyparsing
36123 python-pyyaml
36124 python-pyyaml-env-tag
36125 python-verspec))
36126 (home-page "https://github.com/jimporter/mike")
36127 (synopsis "Manage multiple versions of MkDocs-powered documentation")
36128 (description
36129 "This package provides a Python utility to easily deploy multiple
36130versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
36131to Github via gh-pages.")
36132 (license license:bsd-3)))
36133
36134(define-public python-arpeggio
36135 (package
36136 (name "python-arpeggio")
36137 (version "2.0.2")
36138 (source
36139 (origin
36140 (method url-fetch)
36141 (uri (pypi-uri "Arpeggio" version))
36142 (sha256
36143 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
36144 (build-system pyproject-build-system)
36145 (native-inputs
36146 (list python-pytest
36147 python-setuptools
36148 python-wheel))
36149 (home-page "https://github.com/textX/Arpeggio")
36150 (synopsis "Packrat parser interpreter for Python")
36151 (description
36152 "This Python library provides a recursive descent parser with
36153backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
36154based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
36155for DSL development but it can be used for all sorts of general purpose
36156parsing.")
36157 (license license:expat)))
36158
36159(define-public python-flatten-json
36160 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
36161 ;; the commit associated with 0.1.14 version.
36162 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
36163 (revision "0"))
36164 (package
36165 (name "python-flatten-json")
36166 (version (git-version "0.1.14" revision commit))
36167 (source
36168 (origin
36169 (method git-fetch) ; no tests in PyPI release
36170 (uri (git-reference
36171 (url "https://github.com/amirziai/flatten")
36172 (commit commit)))
36173 (file-name (git-file-name name version))
36174 (sha256
36175 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
36176 (build-system pyproject-build-system)
36177 (native-inputs
36178 (list python-pytest
36179 python-setuptools
36180 python-wheel))
36181 (propagated-inputs
36182 (list python-six))
36183 (home-page "https://github.com/amirziai/flatten")
36184 (synopsis "Flatten JSON objects")
36185 (description
36186 "The @code{flatten_json} Python library flattens the hierarchy in your
36187object, which can be useful if you want to force your objects into a table.")
36188 (license license:expat))))
36189
36190(define-public python-deepdiff
36191 (package
36192 (name "python-deepdiff")
36193 (version "8.6.1")
36194 (source (origin
36195 (method url-fetch)
36196 (uri (pypi-uri "deepdiff" version))
36197 (sha256
36198 (base32
36199 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
36200 (build-system pyproject-build-system)
36201 (arguments
36202 ;; tests: 1028 passed, 10 skipped, 1 deselected
36203 ;; Ignore Polars test (not packaged).
36204 (list #:test-flags #~(list "-k" "not test_polars")))
36205 (propagated-inputs (list python-click ; for CLI
36206 python-pyyaml ; for CLI
36207 python-orderly-set
36208 python-orjson)) ; for optimization
36209 (native-inputs
36210 (list python-flit-core
36211 python-jsonpickle
36212 python-numpy
36213 python-pandas
36214 python-pydantic
36215 python-pytest
36216 python-pytest-benchmark
36217 python-pytz
36218 python-uuid6
36219 python-tomli-w))
36220 (home-page "https://github.com/seperman/deepdiff")
36221 (synopsis "Deep difference and search of any Python object/data")
36222 (description
36223 "This package provides tools for computing deep differences and searching
36224of any Python object/data. Recreate objects by adding adding deltas to each
36225other.")
36226 (license license:expat)))
36227
36228(define-public python-deepmerge
36229 (package
36230 (name "python-deepmerge")
36231 (version "1.0.1")
36232 (source
36233 (origin
36234 (method url-fetch)
36235 (uri (pypi-uri "deepmerge" version))
36236 (sha256
36237 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36238 (build-system pyproject-build-system)
36239 (native-inputs
36240 (list python-setuptools-scm
36241 python-pytest
36242 python-setuptools
36243 python-wheel))
36244 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36245 (synopsis "Merge nested data structures")
36246 (description
36247 "The @code{deep-merge} Python library provides a toolset to deeply merge
36248nested data structures in Python like lists and dictionaries.")
36249 (license license:expat)))
36250
36251(define-public python-durationpy
36252 (package
36253 (name "python-durationpy")
36254 (version "0.10")
36255 (source
36256 (origin
36257 (method git-fetch)
36258 (uri (git-reference
36259 (url "https://github.com/icholy/durationpy")
36260 (commit version)))
36261 (file-name (git-file-name name version))
36262 (sha256
36263 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36264 (build-system pyproject-build-system)
36265 (arguments
36266 (list #:test-backend #~'custom
36267 #:test-flags #~(list "test.py")))
36268 (native-inputs (list python-setuptools))
36269 (home-page "https://github.com/icholy/durationpy")
36270 (synopsis "Python <-> Golang time duration formats converter")
36271 (description
36272 "This package implements a functionality to convert between
36273Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36274 (license license:expat)))
36275
36276(define-public python-murmurhash3
36277 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36278 (revision "0"))
36279 (package
36280 (name "python-murmurhash3")
36281 (version (git-version "2.3.5" revision commit))
36282 (source
36283 (origin
36284 (method git-fetch)
36285 (uri (git-reference
36286 (url "https://github.com/veegee/mmh3")
36287 (commit commit)))
36288 (file-name (git-file-name name version))
36289 (sha256
36290 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36291 (build-system pyproject-build-system)
36292 (arguments
36293 (list
36294 #:phases
36295 #~(modify-phases %standard-phases
36296 (add-after 'unpack 'fix-package
36297 (lambda _
36298 (substitute* "mmh3module.cpp"
36299 (("#include <stdio\\.h>")
36300 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36301 (native-inputs
36302 (list python-cython python-pytest python-setuptools python-wheel))
36303 (home-page "https://github.com/veegee/mmh3")
36304 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36305 (description
36306 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36307of fast and robust hash functions. This library is a Python extension module
36308written in C.")
36309 (license license:public-domain))))
36310
36311(define-public python-scooby
36312 (package
36313 (name "python-scooby")
36314 (version "0.11.0")
36315 (source
36316 (origin
36317 (method git-fetch)
36318 (uri (git-reference
36319 (url "https://github.com/banesullivan/scooby")
36320 (commit (string-append "v" version))))
36321 (file-name (git-file-name name version))
36322 (sha256
36323 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36324 (build-system pyproject-build-system)
36325 (arguments
36326 (list
36327 ;; tests: 19 passed, 5 deselected, 1 warning
36328 #:test-flags
36329 ;; AssertionError: assert 'Module not found' == '0.1.0'
36330 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36331 ;; ModuleNotFoundError: No module named 'no_version'
36332 "--deselect=tests/test_scooby.py::test_tracking"
36333 ;; Failed: DID NOT RAISE <class 'OSError'>
36334 "--deselect=tests/test_scooby.py::test_import_os_error"
36335 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36336 "--deselect=tests/test_scooby.py::test_import_time"
36337 ;; Errored
36338 "--deselect=tests/test_scooby.py::test_cli")))
36339 (native-inputs
36340 (list python-beautifulsoup4
36341 python-numpy
36342 python-pytest
36343 python-pyvips
36344 python-scipy
36345 python-setuptools
36346 python-setuptools-scm))
36347 (propagated-inputs
36348 (list python-psutil))
36349 (home-page "https://github.com/banesullivan/scooby")
36350 (synopsis "Report hardware information and Python package versions")
36351 (description
36352 "The Scooby package reports the following information about the currently
36353running system:
36354
36355@itemize
36356@item operating system name;
36357@item hardware information including machine type (e.g., @samp{i386},
36358@samp{x86_64}, etc.), CPU count and total RAM;
36359@item Python environment (e.g., Python, IPython, etc.);
36360@item file system name;
36361@item Python version;
36362@item versions of specified Python packages.
36363@end itemize
36364
36365It can generate reports as HTML tables or plain text lists.
36366
36367Scooby has no required dependencies, and only few optional dependencies.")
36368 (license license:expat)))
36369
36370(define-public python-cymem
36371 (package
36372 (name "python-cymem")
36373 (version "2.0.6")
36374 (source
36375 (origin
36376 (method git-fetch)
36377 (uri (git-reference
36378 (url "https://github.com/explosion/cymem")
36379 (commit (string-append "v" version))))
36380 (file-name (git-file-name name version))
36381 (sha256
36382 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36383 (build-system pyproject-build-system)
36384 (native-inputs (list python-cython python-pytest python-setuptools))
36385 (inputs (list python))
36386 (home-page "https://github.com/explosion/cymem")
36387 (synopsis "Cython memory pool for RAII-style memory management")
36388 (description
36389 "Cymem provides two small memory-management helpers for Cython. They make it
36390easy to tie memory to a Python object's life-cycle, so that the memory is freed
36391when the object is garbage collected.")
36392 (license license:expat)))
36393
36394(define-public python-preshed
36395 (package
36396 (name "python-preshed")
36397 (version "3.0.6")
36398 (source
36399 (origin
36400 (method git-fetch)
36401 (uri (git-reference
36402 (url "https://github.com/explosion/preshed")
36403 (commit (string-append "v" version))))
36404 (file-name (git-file-name name version))
36405 (sha256
36406 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36407 (build-system pyproject-build-system)
36408 (arguments
36409 (list
36410 #:phases
36411 #~(modify-phases %standard-phases
36412 (add-after 'unpack 'patch-msvccompiler
36413 (lambda _
36414 (substitute* "setup.py"
36415 (("from distutils import ccompiler, msvccompiler")
36416 "from distutils import ccompiler")
36417 (("and msvccompiler.*")
36418 ""))))
36419 (replace 'check
36420 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36421 (with-directory-excursion (site-packages inputs outputs)
36422 (for-each delete-file (find-files "." "\\.pyx$"))
36423 (apply (assoc-ref %standard-phases 'check) args)
36424 (delete-file-recursively "preshed/tests")))))))
36425 (native-inputs
36426 (list python-cython python-cymem python-pytest python-setuptools))
36427 (inputs (list python python-cymem python-murmurhash))
36428 (home-page "https://github.com/explosion/preshed")
36429 (synopsis "Cython hash tables that assume keys are pre-hashed")
36430 (description
36431 "Simple but high performance Cython hash table mapping pre-randomized keys
36432to void* values.")
36433 (license license:expat)))
36434
36435(define-public python-catalogue
36436 (package
36437 (name "python-catalogue")
36438 (version "2.0.10")
36439 (source
36440 (origin
36441 (method git-fetch)
36442 (uri (git-reference
36443 (url "https://github.com/explosion/catalogue")
36444 (commit (string-append "v" version))))
36445 (file-name (git-file-name name version))
36446 (sha256
36447 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36448 (build-system pyproject-build-system)
36449 (native-inputs (list python-pytest python-setuptools))
36450 (home-page "https://github.com/explosion/catalogue")
36451 (synopsis "Lightweight function registries for your library")
36452 (description
36453 "This package is a tiny, zero-dependencies library that makes it easy to
36454add function (or object) registries to your code. Function registries are
36455helpful when you have objects that need to be both easily serializable and
36456fully customizable. Instead of passing a function into your object, you pass
36457in an identifier name, which the object can use to lookup the function from
36458the registry. This makes the object easy to serialize, because the name is a
36459simple string. If you instead saved the function, you'd have to use Pickle
36460for serialization, which has many drawbacks.")
36461 (license license:expat)))
36462
36463(define-public python-gatt
36464 (package
36465 (name "python-gatt")
36466 (version "0.2.7")
36467 (source (origin
36468 (method url-fetch)
36469 (uri (pypi-uri "gatt" version))
36470 (sha256
36471 (base32
36472 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36473 (build-system pyproject-build-system)
36474 (arguments (list #:tests? #f)) ; No tests upstream.
36475 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36476 (native-inputs (list python-setuptools))
36477 (home-page "https://github.com/getsenic/gatt-python")
36478 (synopsis "Bluetooth GATT SDK for Python")
36479 (description
36480 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36481Software Development Kit} for Python helps you implement and communicate with
36482any Bluetooth Low Energy device that has a GATT profile. It supports:
36483
36484@itemize @bullet
36485@item Discovering nearby Bluetooth Low Energy devices
36486@item Connecting and disconnecting devices
36487@item Implementing your custom GATT profile
36488@item Accessing all GATT services
36489@item Accessing all GATT characteristics
36490@item Reading characteristic values
36491@item Writing characteristic values
36492@item Subscribing for characteristic value change notifications
36493@end itemize
36494
36495Currently, Linux is the only platform supported by this library.")
36496 (license license:expat)))
36497
36498(define-public python-dbus-fast
36499 (package
36500 (name "python-dbus-fast")
36501 (version "2.44.3")
36502 (source
36503 (origin
36504 (method git-fetch) ;No tests in PyPI package.
36505 (uri (git-reference
36506 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36507 (commit (string-append "v" version))))
36508 (file-name (git-file-name name version))
36509 (sha256
36510 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36511 (build-system pyproject-build-system)
36512 (arguments
36513 (list
36514 #:test-flags
36515 '(list
36516 ;; These tests need pytest_codspeed.
36517 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36518 ;; These tests all fail with:
36519 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36520 ;; set and could not get DISPLAY environment variable to get bus address
36521 "-m" "not asyncio")))
36522 (native-inputs (list python-cython
36523 python-poetry-core
36524 python-setuptools
36525 python-pytest
36526 python-pytest-asyncio
36527 python-covdefaults))
36528 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36529 (synopsis "Faster version of dbus-next")
36530 (description "This package provides a faster version of dbus-next.")
36531 (license license:expat)))
36532
36533(define-public python-bleak
36534 (package
36535 (name "python-bleak")
36536 (version "3.0.2")
36537 (source
36538 (origin
36539 (method git-fetch)
36540 (uri (git-reference
36541 (url "https://github.com/hbldh/bleak")
36542 (commit (string-append "v" version))))
36543 (file-name (git-file-name name version))
36544 (sha256
36545 (base32 "1dlryjgi0pzmjjnssq9498chwnjzsx14kg1kyp1465waybgwvs93"))))
36546 (build-system pyproject-build-system)
36547 (arguments
36548 (list
36549 #:test-flags #~(list "--ignore=tests/integration")))
36550 (native-inputs
36551 (list python-coverage ;hard dependency
36552 python-pytest
36553 python-pytest-asyncio
36554 python-uv-build))
36555 (propagated-inputs
36556 (list python-dbus-fast))
36557 (home-page "https://github.com/hbldh/bleak")
36558 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36559 (description "This package provides a Bluetooth Low Energy platform-agnostic
36560client library.")
36561 (license license:expat)))
36562
36563(define-public python-ndeflib
36564 (package
36565 (name "python-ndeflib")
36566 (version "0.3.3")
36567 (source
36568 (origin
36569 (method url-fetch)
36570 (uri (pypi-uri "ndeflib" version))
36571 (sha256
36572 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36573 (build-system pyproject-build-system)
36574 (arguments
36575 (list
36576 ;; tests: 1571 passed, 37 deselected, 1 warning
36577 ;;
36578 ;; Three test fail with assertion not equal:
36579 ;;
36580 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36581 ;; bytes] - AssertionError
36582 ;;
36583 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36584 ;; 1 bytes] - AssertionError
36585 ;;
36586 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36587 ;; AssertionError
36588 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36589 "test_encode_error"))))
36590 (native-inputs (list python-pytest-8 python-setuptools))
36591 (home-page "https://ndeflib.readthedocs.io/")
36592 (synopsis "NFC Data Exchange Format decoder and encoder.")
36593 (description "This package provides a NFC (Near-Field Communication)
36594Data Exchange Format decoder and encoder.")
36595 (license license:isc)))
36596
36597(define-public python-nfcpy
36598 (package
36599 (name "python-nfcpy")
36600 (version "1.0.4")
36601 (source
36602 (origin
36603 (method url-fetch)
36604 (uri (pypi-uri "nfcpy" version))
36605 (sha256
36606 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36607 (build-system pyproject-build-system)
36608 (arguments
36609 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36610 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36611 python-pyserial))
36612 (native-inputs (list python-setuptools python-wheel))
36613 (home-page "https://github.com/nfcpy/nfcpy")
36614 (synopsis "Python module for Near-Field Communication.")
36615 (description "This package provides a Python module for Near-Field
36616Communication.")
36617 (license license:eupl1.1)))
36618
36619(define-public python-clrprint
36620 (package
36621 (name "python-clrprint")
36622 (version "2.0.1")
36623 (source (origin
36624 (method url-fetch)
36625 (uri (pypi-uri "clrprint" version))
36626 (sha256
36627 (base32
36628 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36629 (build-system pyproject-build-system)
36630 (arguments '(#:tests? #f)) ;there are no tests
36631 (native-inputs
36632 (list python-setuptools))
36633 (propagated-inputs (list python-colorama python-termcolor))
36634 (home-page "https://github.com/AbhijithAJ/clrprint")
36635 (synopsis "Print colorful output in the terminal")
36636 (description "@code{clrprint} is developed to print colorful output in the
36637terminal. It has red, blue, green, yellow, purple and black/white (default)
36638colors.")
36639 (license license:expat)))
36640
36641(define-public python-mido
36642 (package
36643 (name "python-mido")
36644 (version "1.3.3")
36645 (source
36646 (origin
36647 (method git-fetch)
36648 (uri (git-reference
36649 (url "https://github.com/mido/mido")
36650 (commit version)))
36651 (file-name (git-file-name name version))
36652 (sha256
36653 (base32 "0skj6586aprr20ymn70drgbps1x3z5y0xj67crxgf4rinj5dw7kd"))))
36654 (build-system pyproject-build-system)
36655 (propagated-inputs (list python-packaging))
36656 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
36657 (home-page "https://mido.readthedocs.io/en/stable/")
36658 (synopsis "MIDI Objects for Python")
36659 (description
36660 "Mido is a Python library for working with MIDI 1.0 ports, messages and
36661files.")
36662 (license license:expat)))
36663
36664(define-public python-pretty-midi
36665 (package
36666 (name "python-pretty-midi")
36667 (version "0.2.11")
36668 (source
36669 (origin
36670 (method git-fetch)
36671 (uri (git-reference
36672 (url "https://github.com/craffel/pretty-midi")
36673 (commit version)))
36674 (file-name (git-file-name name version))
36675 (sha256
36676 (base32 "1ksxf4pvqn0qdhq56zbsjqwl1a47xfnqnmj83i65anfb6j36sj46"))))
36677 (build-system pyproject-build-system)
36678 (arguments
36679 (list
36680 #:phases
36681 #~(modify-phases %standard-phases
36682 (add-after 'unpack 'remove-six
36683 (lambda _
36684 (substitute* "pretty_midi/pretty_midi.py"
36685 ((".*import six.*")
36686 "")
36687 (("six\\.string_types")
36688 "str"))
36689 (substitute* "setup.py"
36690 (("'six.*',")
36691 "")))))))
36692 (propagated-inputs
36693 (list python-importlib-resources python-mido python-numpy))
36694 (native-inputs
36695 (list python-pytest python-setuptools))
36696 (home-page "https://github.com/craffel/pretty-midi")
36697 (synopsis "Functions and classes for handling MIDI data conveniently")
36698 (description
36699 "@code{pretty_midi} contains utility function/classes for handling MIDI
36700data, so that it's in a format which is easy to modify and extract information
36701from.")
36702 (license license:expat)))
36703
36704(define-public python-musical-scales
36705 (package
36706 (name "python-musical-scales")
36707 ;; PyPI has no tests, git has no tags, use the latest commit corresponding
36708 ;; to v2.0.0.
36709 (properties '((commit . "bdc35b360edda7583806fd6037bef2716f08fc85")
36710 (revision . "0")))
36711 (version (git-version "2.0.0"
36712 (assoc-ref properties 'revision)
36713 (assoc-ref properties 'commit)))
36714 (source
36715 (origin
36716 (method git-fetch)
36717 (uri (git-reference
36718 (url "https://github.com/hmillerbakewell/musical-scales")
36719 (commit (assoc-ref properties 'commit))))
36720 (file-name (git-file-name name version))
36721 (sha256
36722 (base32 "0znkiq6r61h1sj5r24kah6h94c5agfpq4ypadn4i73hry0fkl9fd"))))
36723 (build-system pyproject-build-system)
36724 (native-inputs (list python-pytest python-setuptools))
36725 (home-page "https://github.com/hmillerbakewell/musical-scales")
36726 (synopsis "Retrieve a scale based on a given mode and starting note")
36727 (description
36728 "Retrieve a scale based on a given mode and starting note.
36729Information about these scales can be
36730@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36731Wikipedia}.")
36732 (license license:expat)))
36733
36734(define-public python-langcodes
36735 (package
36736 (name "python-langcodes")
36737 (version "3.5.0")
36738 (source (origin
36739 (method url-fetch)
36740 (uri (pypi-uri "langcodes" version))
36741 (sha256
36742 (base32
36743 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36744 (build-system pyproject-build-system)
36745 (native-inputs
36746 (list python-pytest
36747 python-setuptools
36748 python-setuptools-scm))
36749 (propagated-inputs
36750 ;; [optional:data]
36751 (list python-language-data))
36752 (home-page "https://github.com/rspeer/langcodes")
36753 (synopsis "Python library for working with language codes")
36754 (description
36755 "This package provides a Python library for working with and comparing
36756language codes.
36757
36758@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3675947}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3676047 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36761with it, and it also implements recommendations from the
36762@url{http://cldr.unicode.org/, Unicode CLDR}.
36763
36764@code{python-langcodes} can also refer to a database of language properties
36765and names, built from Unicode CLDR and the IANA subtag registry, if you
36766install @code{python-language-data}.")
36767 (license license:expat)))
36768
36769(define-public python-anyascii
36770 (package
36771 (name "python-anyascii")
36772 (version "0.3.3")
36773 (source (origin
36774 (method url-fetch)
36775 (uri (pypi-uri "anyascii" version))
36776 (sha256
36777 (base32
36778 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36779 (build-system pyproject-build-system)
36780 (native-inputs (list python-pytest python-flit-core))
36781 (home-page "https://anyascii.com")
36782 (synopsis "Unicode to ASCII transliteration")
36783 (description "@code{anyascii} converts Unicode characters to their best
36784ASCII representation.")
36785 (license license:isc)))
36786
36787(define-public python-geomet
36788 (package
36789 (name "python-geomet")
36790 (version "1.1.0")
36791 (source
36792 (origin
36793 (method git-fetch)
36794 (uri (git-reference
36795 (url "https://github.com/geomet/geomet")
36796 (commit version)))
36797 (file-name (git-file-name name version))
36798 (sha256
36799 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36800 (build-system pyproject-build-system)
36801 (native-inputs (list python-pytest python-setuptools))
36802 (propagated-inputs (list python-click python-six))
36803 (home-page "https://github.com/geomet/geomet")
36804 (synopsis
36805 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36806 (description
36807 "This package provides utilities and functions for converting
36808GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36809versa. Extended WKB/WKT are also supported.")
36810 (license license:asl2.0)))
36811
36812(define-public python-cogapp
36813 (package
36814 (name "python-cogapp")
36815 (version "3.3.0")
36816 (source (origin
36817 (method url-fetch)
36818 (uri (pypi-uri "cogapp" version))
36819 (sha256
36820 (base32
36821 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36822 (build-system pyproject-build-system)
36823 (native-inputs (list python-pytest python-setuptools python-wheel))
36824 (home-page "https://nedbatchelder.com/code/cog")
36825 (synopsis "Content generation tool that leverages Python")
36826 (description "Cog is a file generation tool. It allows using pieces of
36827Python code as generators in your source files to generate arbitrary text.")
36828 (license license:expat)))
36829
36830(define-public python-cxxheaderparser
36831 (package
36832 (name "python-cxxheaderparser")
36833 (version "1.7.0")
36834 (source
36835 (origin
36836 (method git-fetch)
36837 (uri (git-reference
36838 (url "https://github.com/robotpy/cxxheaderparser")
36839 (commit version)))
36840 (file-name (git-file-name name version))
36841 (sha256
36842 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36843 (build-system pyproject-build-system)
36844 (native-inputs
36845 (list python-hatch-vcs python-pytest))
36846 (home-page "https://github.com/robotpy/cxxheaderparser/")
36847 (synopsis "Python C++ header parser")
36848 (description "Pure python C++ header parser that parses C++ headers in a
36849mildly naive manner that allows it to handle many C constructs, including
36850many (C++11 and beyond) features.")
36851 (license license:bsd-3)))
36852
36853(define-public python-bsdiff4
36854 (package
36855 (name "python-bsdiff4")
36856 (version "1.2.6")
36857 (source
36858 (origin
36859 (method git-fetch)
36860 (uri (git-reference
36861 (url "https://github.com/ilanschnell/bsdiff4")
36862 (commit version)))
36863 (file-name (git-file-name name version))
36864 (sha256
36865 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36866 (build-system pyproject-build-system)
36867 (arguments
36868 (list
36869 #:test-flags #~(list "--pyargs" "bsdiff4")))
36870 (native-inputs
36871 (list python-pytest
36872 python-setuptools
36873 python-wheel))
36874 (home-page "https://github.com/ilanschnell/bsdiff4")
36875 (synopsis "Binary diff and patch using the BSDIFF4 format")
36876 (description
36877 "This package provides a Python library for the @code{bsdiff} binary diff
36878utility. It also provides two command-line tools, @code{bsdiff4} and
36879@code{bspatch4}.")
36880 (license license:bsd-2)))
36881
36882(define-public python-mpv
36883 (package
36884 (name "python-mpv")
36885 (version "1.0.8")
36886 (source
36887 (origin
36888 (method git-fetch)
36889 (uri (git-reference
36890 (url "https://github.com/jaseg/python-mpv")
36891 (commit (string-append "v" version))))
36892 (file-name (git-file-name name version))
36893 (sha256
36894 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36895 (build-system pyproject-build-system)
36896 (arguments
36897 (list #:phases
36898 #~(modify-phases %standard-phases
36899 (add-before 'build 'patch-reference-to-mpv
36900 (lambda* (#:key inputs #:allow-other-keys)
36901 ;; Without an absolute path it is not able find and load libmpv.
36902 (substitute* "mpv.py"
36903 (("sofile = .*")
36904 (format #f "sofile = '~a/lib/libmpv.so'~%"
36905 #$(this-package-input "mpv"))))))
36906 (add-before 'check 'prepare-for-tests
36907 (lambda _
36908 ;; Fontconfig throws errors when it has no cache dir to use.
36909 (setenv "XDG_CACHE_HOME" (getcwd))
36910 ;; Some tests fail without a writable and readable HOME.
36911 (setenv "HOME" (getcwd))
36912 (setenv "PY_MPV_SKIP_TESTS"
36913 "test_wait_for_property_event_overflow"))))))
36914 (native-inputs
36915 (list python-pytest
36916 python-pyvirtualdisplay
36917 python-setuptools
36918 xorg-server-for-tests))
36919 (inputs (list mpv))
36920 (propagated-inputs (list python-pillow)) ;for raw screenshots
36921 (home-page "https://github.com/jaseg/python-mpv")
36922 (synopsis "Python interface to the mpv media player")
36923 (description
36924 "python-mpv is a ctypes-based python interface to the mpv media player.
36925It gives you more or less full control of all features of the player, just
36926as the lua interface does.")
36927 ;; From the project's README:
36928 ;; python-mpv inherits the underlying libmpv's license, which can be either
36929 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36930 ;; copyright page.
36931 (license license:gpl2+)))
36932
36933(define-public python-biblib
36934 (let ((upstream-version "0.1.0")
36935 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36936 (revision "1"))
36937 (package
36938 (name "python-biblib")
36939 (version (git-version upstream-version revision commit))
36940 (source
36941 (origin
36942 (method git-fetch)
36943 (uri (git-reference
36944 (url "https://github.com/aclements/biblib")
36945 (commit commit)))
36946 (sha256
36947 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36948 (file-name (git-file-name name version))))
36949 (build-system pyproject-build-system)
36950 (arguments (list #:tests? #f)) ; No tests upstream.
36951 (native-inputs (list python-setuptools))
36952 (home-page "https://github.com/aclements/biblib")
36953 (synopsis "BibTeX parsing and transformation library")
36954 (description
36955 "Biblib provides a simple, standalone Python 3 package for parsing
36956BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36957entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36958source code for BibTeX and hence (barring bugs in translation) should be fully
36959compatible with BibTeX's own parser.")
36960 ;; N.B. It seems the parser was translated from WEB by hand: this
36961 ;; package does not contain any generated files.
36962 (license license:expat))))
36963
36964(define-public python-cyclic
36965 (package
36966 (name "python-cyclic")
36967 (version "1.0.0")
36968 (source
36969 (origin
36970 (method git-fetch)
36971 (uri (git-reference
36972 (url "https://github.com/neurobin/cyclic")
36973 ;; Release is not tagged on github, see
36974 ;; https://github.com/neurobin/cyclic/issues/2
36975 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36976 (file-name (git-file-name name version))
36977 (sha256
36978 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36979 (build-system pyproject-build-system)
36980 (arguments (list #:test-backend #~'unittest))
36981 (native-inputs (list python-setuptools))
36982 (home-page "https://github.com/neurobin/cyclic")
36983 (synopsis "Handle cyclic relations")
36984 (description "This package handles cyclic relations compared by value.")
36985 (license license:bsd-3)))
36986
36987(define-public python-rcslice
36988 (package
36989 (name "python-rcslice")
36990 (version "1.1.0")
36991 (source
36992 (origin
36993 (method git-fetch)
36994 (uri (git-reference
36995 (url "https://github.com/neurobin/rcslice")
36996 ;; Releases are not tagged on github, see
36997 ;; https://github.com/neurobin/rcslice/issues/2
36998 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36999 (file-name (git-file-name name version))
37000 (sha256
37001 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
37002 (build-system pyproject-build-system)
37003 (arguments (list #:test-backend #~'unittest))
37004 (native-inputs (list python-setuptools))
37005 (home-page "https://github.com/neurobin/rcslice")
37006 (synopsis "Slice a list of sliceables")
37007 (description
37008 "This package provides Python module to slice a list of sliceables (1
37009indexed, both start and end index are inclusive). Helps to slice file content
37010line by line or column by column or a combination of both.")
37011 (license license:bsd-3)))
37012
37013(define-public python-rpds-py
37014 (package
37015 (name "python-rpds-py")
37016 (version "0.30.0")
37017 (source (origin
37018 (method url-fetch)
37019 (uri (pypi-uri "rpds_py" version))
37020 (sha256
37021 (base32
37022 "110y8k62b9xb3slny7gf89943xpbji3s7vl7yz0g0jh1j37zg3yx"))))
37023 (build-system cargo-build-system)
37024 (arguments
37025 (list
37026 #:imported-modules `(,@%cargo-build-system-modules
37027 ,@%pyproject-build-system-modules)
37028 #:modules '((guix build cargo-build-system)
37029 ((guix build pyproject-build-system) #:prefix py:)
37030 (guix build utils))
37031 #:phases
37032 #~(modify-phases %standard-phases
37033 (add-after 'build 'build-python-module
37034 (assoc-ref py:%standard-phases 'build))
37035 (add-after 'build-python-module 'install-python-module
37036 (assoc-ref py:%standard-phases 'install)))
37037 #:install-source? #false))
37038 (inputs
37039 (cons maturin (cargo-inputs 'python-rpds-py)))
37040 (native-inputs
37041 (list python-wrapper))
37042 (home-page "https://github.com/crate-py/rpds")
37043 (synopsis "Bindings to Rust rpds for persistent data structures")
37044 (description "This package provides Python bindings to the Rust rpds crate
37045for persistent data structures. It was written initially to support replacing
37046@code{python-pyrsistent}.")
37047 (license license:expat)))
37048
37049(define-public python-nanoid
37050 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
37051 (revision "0"))
37052 (package
37053 (name "python-nanoid")
37054 (version "2.0.0")
37055 (source
37056 (origin
37057 (method git-fetch)
37058 (uri
37059 (git-reference
37060 (url "https://github.com/puyuan/py-nanoid")
37061 (commit commit)))
37062 (file-name (git-file-name name commit))
37063 (sha256
37064 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
37065 (build-system pyproject-build-system)
37066 (native-inputs (list python-pytest python-setuptools))
37067 (home-page "https://github.com/puyuan/py-nanoid")
37068 (synopsis "Unique string ID generator")
37069 (description
37070 "This package provides a tiny, secure, URL-friendly, unique string ID
37071generator for Python.")
37072 (license license:expat))))
37073
37074(define-public python-misc-utils
37075 (package
37076 (name "python-misc-utils")
37077 (version "0.28")
37078 (source
37079 (origin
37080 (method git-fetch)
37081 (uri (git-reference
37082 (url "https://github.com/davidel/py_misc_utils")
37083 (commit version)))
37084 (file-name (git-file-name name version))
37085 (sha256
37086 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
37087 (build-system pyproject-build-system)
37088 (arguments
37089 (list
37090 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
37091 #:test-backend #~'custom
37092 #:test-flags #~(list "test/test_runner.py")))
37093 (propagated-inputs
37094 (list python-numpy python-pandas python-psutil python-pyyaml))
37095 (native-inputs (list python-setuptools))
37096 (home-page "https://github.com/davidel/py_misc_utils")
37097 (synopsis "Collection of Python utilities")
37098 (description "This package provides a collection of Python miscellaneous
37099utility tools mainly used by other projects of the same author.")
37100 (license license:asl2.0)))
37101
37102(define-public python-misskey
37103 (package
37104 (name "python-misskey")
37105 (version "4.1.0")
37106 (source (origin
37107 (method git-fetch)
37108 (uri (git-reference
37109 (url "https://github.com/YuzuRyo61/Misskey.py")
37110 (commit (string-append "v" version))))
37111 (file-name (git-file-name name version))
37112 (sha256
37113 (base32
37114 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
37115 (build-system pyproject-build-system)
37116 (arguments (list #:tests? #f)) ;needs network
37117 (native-inputs (list python-setuptools))
37118 (propagated-inputs (list python-requests))
37119 (home-page "https://misskeypy.readthedocs.io")
37120 (synopsis "Python bindings for Misskey's API")
37121 (description
37122 "This package provides access to Misskey's API. Misskey is a SNS
37123platform using the ActivityPub protocol.")
37124 (license license:expat)))
37125
37126(define-public python-lief
37127 (package
37128 (name "python-lief")
37129 (version "1.0.0")
37130 (source
37131 (origin
37132 (method git-fetch)
37133 (uri (git-reference
37134 (url "https://github.com/lief-project/LIEF")
37135 (commit version)))
37136 (file-name (git-file-name name version))
37137 (sha256
37138 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
37139 (build-system pyproject-build-system)
37140 (arguments
37141 (list
37142 ;; TODO: Tests neeed some setup, see:
37143 ;; <.github/workflows/linux-x86-64.yml>.
37144 #:tests? #f
37145 #:phases
37146 #~(modify-phases %standard-phases
37147 (add-before 'build 'change-directory
37148 (lambda _
37149 (chdir "api/python"))))))
37150 (native-inputs
37151 (list ninja
37152 python-pydantic
37153 python-scikit-build-core
37154 python-tomli))
37155 (home-page "https://github.com/lief-project/LIEF")
37156 (synopsis "Library to instrument executable formats")
37157 (description
37158 "@code{python-lief} is a cross platform library which can parse, modify
37159and abstract ELF, PE and MachO formats.")
37160 (license license:asl2.0)))
37161
37162(define-public python-eris
37163 (package
37164 (name "python-eris")
37165 (version "1.0.0")
37166 (source
37167 (origin
37168 (method url-fetch)
37169 (uri (pypi-uri "eris" version))
37170 (sha256
37171 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
37172 (build-system pyproject-build-system)
37173 (arguments
37174 ;; No tests in PyPI, tests miss data files in Git:
37175 ;; - tests/test-vectors/test_encode
37176 ;; - tests/test-vectors/test_decode
37177 (list #:tests? #f))
37178 (native-inputs
37179 (list python-setuptools
37180 python-wheel))
37181 (propagated-inputs
37182 (list python-aiocoap
37183 python-pycryptodome))
37184 (home-page "https://codeberg.org/eris/python-eris")
37185 (synopsis "Python implementation of ERIS")
37186 (description
37187 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
37188Storage}.")
37189 (license license:lgpl3+)))
37190
37191(define-public python-pymonad
37192 (package
37193 (name "python-pymonad")
37194 (version "2.4.0")
37195 (source
37196 (origin
37197 (method git-fetch)
37198 (uri (git-reference
37199 (url "https://github.com/jasondelaat/pymonad")
37200 (commit (string-append "v" version))))
37201 (file-name (git-file-name name version))
37202 (sha256
37203 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
37204 (build-system pyproject-build-system)
37205 (arguments
37206 (list
37207 #:phases
37208 #~(modify-phases %standard-phases
37209 (replace 'check
37210 (lambda* (#:key tests? #:allow-other-keys)
37211 (when tests?
37212 (invoke "./run_tests.sh")))))))
37213 (native-inputs (list python-setuptools))
37214 (home-page "https://github.com/jasondelaat/pymonad")
37215 (synopsis "Monadic style functional programming for Python")
37216 (description "@code{python-pymonad} implements data structures typically
37217available in purely functional or functional first programming languages such
37218as Haskell and F#. Included are
37219
37220@itemize
37221@item Monad and Monoid data types with several common monads such as Maybe and
37222State
37223@item Useful tools such as the @code{@@curry} decorator for defining curried
37224functions
37225@item Type annotations to help ensure correct usage
37226@end itemize")
37227 (license license:bsd-3)))
37228
37229(define-public python-markdown-strings
37230 (package
37231 (name "python-markdown-strings")
37232 (version "3.3.0")
37233 (source
37234 (origin
37235 (method git-fetch)
37236 (uri (git-reference
37237 (url "https://github.com/awesmubarak/markdown_strings.git")
37238 (commit (string-append "v" version))))
37239 (file-name (git-file-name name version))
37240 (sha256
37241 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
37242 (build-system pyproject-build-system)
37243 (arguments
37244 (list
37245 #:test-backend #~'custom
37246 #:test-flags #~(list "test.py")))
37247 (native-inputs (list python-setuptools))
37248 (propagated-inputs (list python-lxml python-six))
37249 (home-page "https://github.com/awesmubarak/markdown_strings")
37250 (synopsis "Python library to create markdown-formatted text")
37251 (description "This package allows the programmatic creation of
37252markdown-compliant strings.")
37253 (license license:expat)))
37254
37255(define-public python-icecream
37256 (package
37257 (name "python-icecream")
37258 (version "2.1.9")
37259 (source
37260 (origin
37261 (method git-fetch)
37262 (uri (git-reference
37263 (url "https://github.com/gruns/icecream")
37264 (commit (string-append "v" version))))
37265 (file-name (git-file-name name version))
37266 (sha256
37267 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
37268 (build-system pyproject-build-system)
37269 (native-inputs
37270 (list python-hypothesis
37271 python-pytest
37272 python-setuptools))
37273 (propagated-inputs
37274 (list python-asttokens
37275 python-colorama
37276 python-executing
37277 python-pygments))
37278 (home-page "https://github.com/gruns/icecream")
37279 (synopsis
37280 "Single function call to debug variables, expressions, and program execution")
37281 (description
37282 "This tool lets you debug variables, expressions, and program execution
37283with one function call. IceCream makes print debugging a little sweeter.")
37284 (license license:expat)))
37285
37286;; XXX: Deprecated on <2026-07-12>.
37287(define-deprecated/public-alias python-icegrams
37288 (@ (gnu packages language) python-icegrams))
37289
37290(define-public python-sbsv
37291 (package
37292 (name "python-sbsv")
37293 (version "0.3.1")
37294 (source
37295 (origin
37296 (method git-fetch)
37297 (uri (git-reference
37298 (url "https://github.com/hsh814/sbsv")
37299 (commit (string-append "v" version))))
37300 (file-name (git-file-name name version))
37301 (sha256
37302 (base32 "0wgqb7j2slp05zm6s2qqsb5821vzz1w3jdcwsn2k3jfj7mylnryq"))
37303 (modules '((guix build utils)))
37304 (snippet
37305 #~(begin ;unbundle c-sbsv
37306 (delete-file-recursively "libsbsv")
37307 (substitute* "setup.py"
37308 ((" *\"libsbsv/src/.*") "")
37309 ((" *include_dirs=.*,") "libraries=['sbsv'],")
37310 ((" *optional=True,.*") ""))))))
37311 (build-system pyproject-build-system)
37312 (arguments
37313 (list #:phases #~(modify-phases %standard-phases
37314 (add-after 'unpack 'remove-setuptools-legacy
37315 (lambda _
37316 (substitute* "pyproject.toml"
37317 ((":__legacy__") "")))))))
37318 (native-inputs (list python-setuptools python-pytest))
37319 (inputs (list c-sbsv))
37320 (home-page "https://github.com/hsh814/sbsv")
37321 (synopsis "Square bracket separated values")
37322 (description
37323 "This Python package provides a schema-driven structured log data format
37324for the ease of writing and parsing.")
37325 (license license:expat)))
37326
37327(define-public python-sqlglot
37328 (package
37329 (name "python-sqlglot")
37330 (version "26.33.0")
37331 (source
37332 (origin
37333 (method url-fetch)
37334 (uri (pypi-uri "sqlglot" version))
37335 (sha256
37336 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37337 (build-system pyproject-build-system)
37338 (arguments
37339 (list
37340 #:test-backend #~'unittest
37341 #:phases
37342 #~(modify-phases %standard-phases
37343 (add-before 'check 'pre-check
37344 (lambda _
37345 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37346 (native-inputs
37347 (list python-duckdb
37348 python-pytz
37349 python-pandas
37350 python-setuptools
37351 python-setuptools-scm
37352 python-tzdata))
37353 (home-page "https://sqlglot.com/")
37354 (synopsis "Python SQL Parser and Transpiler")
37355 (description
37356 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37357engine. It can be used to format SQL or translate between 31 different
37358dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37359BigQuery. It aims to read a wide variety of SQL inputs and output
37360syntactically and semantically correct SQL in the targeted dialects.")
37361 (license license:expat)))
37362
37363(define-public python-sqlglotrs
37364 (package
37365 (inherit python-sqlglot)
37366 (name "python-sqlglotrs")
37367 (version "0.6.1")
37368 (source
37369 (origin
37370 (method url-fetch)
37371 (uri (pypi-uri "sqlglotrs" version))
37372 (sha256
37373 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37374 (build-system cargo-build-system)
37375 (arguments
37376 (list
37377 #:install-source? #false
37378 #:tests? #f ;no tests
37379 #:imported-modules `(,@%cargo-build-system-modules
37380 ,@%pyproject-build-system-modules)
37381 #:modules '((guix build cargo-build-system)
37382 ((guix build pyproject-build-system) #:prefix py:)
37383 (guix build utils))
37384 #:phases
37385 #~(modify-phases %standard-phases
37386 (add-after 'build 'build-python-module
37387 (assoc-ref py:%standard-phases 'build))
37388 (add-after 'build-python-module 'install-python-module
37389 (assoc-ref py:%standard-phases 'install))
37390 (add-after 'install-python-module 'add-install-to-pythonpath
37391 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37392 (native-inputs
37393 (list maturin
37394 python-wrapper))
37395 (inputs
37396 (cargo-inputs 'python-sqlglotrs))))
37397
37398(define-public python-sqltrie
37399 (package
37400 (name "python-sqltrie")
37401 (version "0.11.2")
37402 (home-page "https://github.com/iterative/sqltrie/")
37403 (source
37404 (origin
37405 (method url-fetch)
37406 (uri (pypi-uri "sqltrie" version))
37407 (sha256
37408 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37409 (build-system pyproject-build-system)
37410 (arguments
37411 (list
37412 #:test-flags
37413 #~(list "--ignore=tests/benchmarks/"
37414 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37415 ;; yet in Guix.
37416 "--ignore=src/sqltrie/__pyinstaller")))
37417 (native-inputs
37418 (list python-pytest
37419 python-pytest-mock
37420 python-pytest-sugar
37421 python-setuptools
37422 python-setuptools-scm))
37423 (propagated-inputs
37424 (list python-attrs
37425 python-orjson
37426 python-pygtrie))
37427 (synopsis "SQL-based prefix tree for Python")
37428 (description
37429 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37430python-diskcache.")
37431 (license license:asl2.0)))
37432
37433(define-public python-socksipy-branch
37434 (package
37435 (name "python-socksipy-branch")
37436 (version "1.01")
37437 (source
37438 (origin
37439 (method url-fetch)
37440 (uri (pypi-uri "SocksiPy-branch" version))
37441 (sha256
37442 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37443 (build-system pyproject-build-system)
37444 (arguments (list #:tests? #f)) ; There are no tests
37445 (native-inputs (list python-setuptools))
37446 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37447 (synopsis "Python SOCKS module")
37448 (description
37449 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37450interface that supports connections to any TCP service through the use of a
37451SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37452this is a branch created by Mario Vilas to address some open issues,as the
37453original project seems to have been abandoned circa 2007.")
37454 (license license:bsd-3)))
37455
37456(define-public python-socksipychain
37457 (package
37458 (name "python-socksipychain")
37459 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37460 (revision . "0")))
37461 (version (git-version "2.1.3"
37462 (assoc-ref properties 'revision)
37463 (assoc-ref properties 'commit)))
37464 (source
37465 (origin
37466 (method git-fetch)
37467 (uri (git-reference
37468 (url "https://github.com/pagekite/PySocksipyChain")
37469 (commit (assoc-ref properties 'commit))))
37470 (file-name (git-file-name name version))
37471 (sha256
37472 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37473 (build-system pyproject-build-system)
37474 (arguments (list #:tests? #f)) ; Tests try to access the network.
37475 (native-inputs (list python-setuptools))
37476 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37477 (synopsis "Python SOCKS module with chained proxies support")
37478 (description
37479 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37480adds support for arbitrary chaining of proxy servers and various modes of
37481TLS/SSL encryption. It was developed for use in PageKite, and also includes
37482a simple netcat replacement with chaining support.")
37483 (license license:bsd-3)))
37484
37485(define-public python-sortedcollections
37486 (package
37487 (name "python-sortedcollections")
37488 (version "2.1.0")
37489 (source
37490 (origin
37491 (method git-fetch)
37492 (uri (git-reference
37493 (url "https://github.com/grantjenks/python-sortedcollections")
37494 (commit (string-append "v" version))))
37495 (file-name (git-file-name name version))
37496 (sha256
37497 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37498 (build-system pyproject-build-system)
37499 (native-inputs (list python-setuptools python-pytest python-wheel))
37500 (propagated-inputs (list python-sortedcontainers))
37501 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37502 (synopsis "Python Sorted Collections")
37503 (description "Sorted Collections is a Python sorted collections library.")
37504 (license license:asl2.0)))
37505
37506(define-public python-sortedcontainers
37507 (package
37508 (name "python-sortedcontainers")
37509 (version "2.4.0")
37510 (source
37511 (origin
37512 (method git-fetch) ;no tests in PyPI archive
37513 (uri (git-reference
37514 (url "https://github.com/grantjenks/python-sortedcontainers")
37515 (commit (string-append "v" version))))
37516 (file-name (git-file-name name version))
37517 (sha256
37518 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37519 (build-system pyproject-build-system)
37520 (arguments
37521 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37522 (native-inputs
37523 (list python-pytest-bootstrap python-setuptools))
37524 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37525 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37526 (description
37527 "This package provides a sorted collections library, written in
37528pure-Python.")
37529 (license license:asl2.0)))
37530
37531(define-public python-soupsieve
37532 (package
37533 (name "python-soupsieve")
37534 (version "2.7")
37535 (source
37536 (origin
37537 (method url-fetch)
37538 (uri (pypi-uri "soupsieve" version))
37539 (sha256
37540 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37541 (build-system pyproject-build-system)
37542 (native-inputs
37543 (list python-beautifulsoup4-bootstrap
37544 python-hatchling
37545 python-pytest))
37546 (home-page "https://github.com/facelessuser/soupsieve")
37547 (synopsis "CSS selector library")
37548 (description
37549 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37550Soup 4. It aims to provide selecting, matching, and filtering using modern
37551CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37552specifications up through the latest CSS level 4 drafts and beyond (though
37553some are not yet implemented).")
37554 (license license:expat)))
37555
37556(define-public python-spectra
37557 (package
37558 (name "python-spectra")
37559 (version "0.1.0")
37560 (source
37561 (origin
37562 (method url-fetch)
37563 (uri (pypi-uri "spectra" version))
37564 (sha256
37565 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37566 (build-system pyproject-build-system)
37567 (propagated-inputs
37568 (list python-colormath2))
37569 (native-inputs
37570 (list python-pytest python-setuptools python-wheel))
37571 (home-page "https://github.com/jsvine/spectra")
37572 (synopsis "Color scales and color conversion")
37573 (description
37574 "This package provides a Python library intended to make color math,
37575color scales, and color space conversion easy. It has support for:
37576
37577@enumerate
37578@item Color scales
37579@item Color ranges
37580@item Color blending
37581@item Brightening/darkening colors
37582@item Saturating/desaturating colors
37583@item Conversion to/from multiple color spaces.
37584@end enumerate\n")
37585 (license license:expat)))
37586
37587(define-public python-speedy-antlr-tool
37588 (package
37589 (name "python-speedy-antlr-tool")
37590 (version "1.4.3")
37591 (source
37592 (origin
37593 (method git-fetch)
37594 (uri (git-reference
37595 (url "https://github.com/amykyta3/speedy-antlr-tool")
37596 (commit (string-append "v" version))))
37597 (file-name (git-file-name name version))
37598 (sha256
37599 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37600 (build-system pyproject-build-system)
37601 (arguments '(#:tests? #f)) ;no test
37602 (native-inputs (list python-setuptools python-setuptools-scm))
37603 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37604 (home-page "https://speedy-antlr-tool.readthedocs.io")
37605 (synopsis "Generate ANTLR parser as Python extension module")
37606 (description
37607 "This tool generates a Python extension that runs your parser
37608using ANTLR's C++ target, and then translates the parsed tree
37609back into Python.")
37610 (license license:bsd-3)))
37611
37612(define-public python-speg
37613 (package
37614 (name "python-speg")
37615 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37616 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37617 (revision . "0")))
37618 (version (git-version "0.3"
37619 (assoc-ref properties 'revision)
37620 (assoc-ref properties 'commit)))
37621 (source
37622 (origin
37623 (method git-fetch)
37624 (uri (git-reference
37625 (url "https://github.com/avakar/speg")
37626 (commit (assoc-ref properties 'commit))))
37627 (file-name (git-file-name name version))
37628 (sha256
37629 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37630 (build-system pyproject-build-system)
37631 (native-inputs
37632 (list python-pytest
37633 python-setuptools))
37634 (propagated-inputs
37635 (list python-six))
37636 (home-page "https://github.com/avakar/speg")
37637 (synopsis "PEG-based parser interpreter with memoization")
37638 (description "This package is a PEG-based parser and interpreter with
37639memoization.")
37640 (license license:expat)))
37641
37642(define-public python-spinners
37643 (package
37644 (name "python-spinners")
37645 (version "0.0.24")
37646 (source
37647 (origin
37648 (method url-fetch)
37649 (uri (pypi-uri "spinners" version))
37650 (sha256
37651 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37652 (build-system pyproject-build-system)
37653 (arguments
37654 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37655 (native-inputs
37656 (list python-setuptools))
37657 (home-page "https://github.com/manrajgrover/py-spinners")
37658 (synopsis "Python library with graphical spinners for the terminal")
37659 (description
37660 "Spinners is a Python library that contains graphical spinners that can
37661be displayed terminal.")
37662 (license license:expat)))
37663
37664(define-public python-sre-yield
37665 (package
37666 (name "python-sre-yield")
37667 (version "1.2")
37668 (source
37669 (origin
37670 (method url-fetch)
37671 (uri (pypi-uri "sre_yield" version))
37672 (sha256
37673 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37674 (build-system pyproject-build-system)
37675 (arguments
37676 (list #:test-backend #~'unittest))
37677 (native-inputs
37678 (list python-setuptools))
37679 (home-page "https://github.com/google/sre_yield")
37680 (synopsis "Expands a regular expression to its possible matches")
37681 (description
37682 "The goal of sre_yield is to efficiently generate all values that can
37683match a given regular expression, or count possible matches efficiently. It
37684uses the parsed regular expression, so you get a much more accurate result
37685than trying to just split strings.")
37686 (license license:asl2.0)))
37687
37688(define-public python-srsly
37689 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37690 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37691 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37692 (package
37693 (name "python-srsly")
37694 (version "2.5.3")
37695 (source
37696 (origin
37697 (method git-fetch)
37698 (uri (git-reference
37699 (url "https://github.com/explosion/srsly")
37700 (commit (string-append "release-v" version))))
37701 (file-name (git-file-name name version))
37702 (sha256
37703 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37704 (build-system pyproject-build-system)
37705 (arguments
37706 (list
37707 ;; tests: 741 passed, 4 skipped, 22 xfailed
37708 #:test-flags
37709 #~(list "--pyargs" "srsly")
37710 #:phases
37711 #~(modify-phases %standard-phases
37712 (add-after 'unpack 'remove-broken-tests
37713 (lambda _
37714 ;; Tests depend on removed in 2.5.3 module
37715 ;; "srsly/cloudpickle/compat.py".
37716 ;; See: <https://github.com/explosion/srsly/issues/121>.
37717 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37718 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37719 (add-before 'check 'remove-local-source
37720 (lambda _
37721 (delete-file-recursively "srsly"))))))
37722 (native-inputs
37723 (list python-cython
37724 python-mock
37725 python-numpy
37726 python-psutil
37727 python-pytest
37728 python-pytest-timeout
37729 python-setuptools))
37730 (propagated-inputs
37731 (list python-catalogue))
37732 (home-page "https://github.com/explosion/srsly")
37733 (synopsis "Serialization utilities for Python")
37734 (description "This package bundles some of the best Python serialization
37735libraries into one standalone package, with a high-level API that makes it
37736easy to write code that's correct across platforms and Pythons.")
37737 (license license:expat)))
37738
37739(define-public python-srt
37740 (package
37741 (name "python-srt")
37742 (version "3.5.3")
37743 (source
37744 (origin
37745 (method url-fetch)
37746 (uri (pypi-uri "srt" version))
37747 (sha256
37748 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37749 (build-system pyproject-build-system)
37750 (native-inputs
37751 (list python-pytest
37752 python-setuptools
37753 python-wheel))
37754 (home-page "https://github.com/cdown/srt")
37755 (synopsis "SRT parsing library")
37756 (description
37757 "This package provides a Python library for parsing, modifying, and
37758composing subtitles in the SRT file format.")
37759 (license license:expat)))
37760
37761(define-public python-sshpubkeys
37762 (package
37763 (name "python-sshpubkeys")
37764 (version "3.2.0")
37765 (source
37766 (origin
37767 (method git-fetch)
37768 (uri (git-reference
37769 (url "https://github.com/ojarva/python-sshpubkeys")
37770 (commit (string-append "v" version))))
37771 (file-name (git-file-name name version))
37772 (sha256
37773 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37774 (build-system pyproject-build-system)
37775 (arguments
37776 (list #:tests? #f)) ; XXX: All tests fail
37777 (native-inputs
37778 (list python-setuptools
37779 python-wheel))
37780 (propagated-inputs
37781 (list python-cryptography
37782 python-ecdsa))
37783 (home-page "https://github.com/ojarva/python-sshpubkeys")
37784 (synopsis "OpenSSH public key parser")
37785 (description
37786 "This package provides a library for parsing and validating OpenSSH
37787public key files.")
37788 (license license:bsd-3)))
37789
37790(define-public python-sshtunnel
37791 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37792 (revision "0"))
37793 (package
37794 (name "python-sshtunnel")
37795 (version (git-version "0.4.0" revision commit))
37796 (source
37797 (origin
37798 (method git-fetch)
37799 (uri (git-reference
37800 (url "https://github.com/pahaz/sshtunnel")
37801 (commit commit)))
37802 (file-name (git-file-name name version))
37803 (sha256
37804 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37805 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37806 (build-system pyproject-build-system)
37807 (arguments
37808 (list
37809 #:phases
37810 #~(modify-phases %standard-phases
37811 (add-after 'unpack 'remove-deprecated-dsskey
37812 (lambda _
37813 (substitute* "sshtunnel.py"
37814 (("'dsa': paramiko\\.DSSKey,")
37815 "")
37816 (("paramiko\\.DSSKey, ")
37817 "")))))))
37818 (propagated-inputs (list python-paramiko))
37819 (native-inputs
37820 (list openssh python-mock python-pytest python-setuptools))
37821 (home-page "https://github.com/pahaz/sshtunnel")
37822 (synopsis "Python SSH tunnels library")
37823 (description
37824 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37825in the background, using Python.")
37826 (license license:expat))))
37827
37828(define-public python-stack-data
37829 (package
37830 (name "python-stack-data")
37831 (version "0.6.3")
37832 (source
37833 (origin
37834 (method url-fetch)
37835 (uri (pypi-uri "stack_data" version))
37836 (sha256
37837 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37838 (build-system pyproject-build-system)
37839 (arguments
37840 (list
37841 #:test-flags
37842 #~(list "-k" (string-join
37843 ;; XXX: Tests fail with HTML diff.
37844 (list "not test_executing_style_defs"
37845 "test_pygments_example"
37846 "test_example")
37847 " and not "))
37848 #:phases
37849 #~(modify-phases %standard-phases
37850 (add-after 'unpack 'set-home-env
37851 (lambda _
37852 (setenv "HOME" "/tmp"))))))
37853 (native-inputs
37854 (list python-cython
37855 python-littleutils
37856 python-pygments
37857 python-pytest
37858 python-setuptools
37859 python-setuptools-scm
37860 python-typeguard
37861 python-wheel))
37862 (propagated-inputs
37863 (list python-asttokens
37864 python-executing
37865 python-pure-eval))
37866 (home-page "https://github.com/alexmojaki/stack_data")
37867 (synopsis "Python stack frame and traceback manipulation library")
37868 (description
37869 "The @code{stack_data} Python library extracts data from stack frames and
37870tracebacks. Is can be used to display more useful tracebacks
37871than the default.")
37872 (license license:expat)))
37873
37874;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37875;; from the standard library, <https://peps.python.org/pep-0594/>.
37876(define %python-standard-pep-594-version "3.13.0")
37877(define %python-standard-pep-594-source
37878 (origin
37879 (method git-fetch)
37880 (uri (git-reference
37881 (url "https://github.com/youknowone/python-deadlib")
37882 (commit (string-append "v" %python-standard-pep-594-version))))
37883 (file-name (git-file-name "python-standard-pep-594"
37884 %python-standard-pep-594-version))
37885 (sha256
37886 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37887
37888(define-public python-standard-asynchat
37889 (package
37890 (name "python-standard-asynchat")
37891 (version %python-standard-pep-594-version)
37892 (source %python-standard-pep-594-source)
37893 (build-system pyproject-build-system)
37894 (arguments
37895 (list
37896 #:phases
37897 #~(modify-phases %standard-phases
37898 (add-after 'unpack 'chdir
37899 (lambda _
37900 (chdir "asynchat"))))))
37901 (native-inputs
37902 (list python-setuptools))
37903 (propagated-inputs
37904 (list python-standard-asyncore))
37905 (home-page "https://github.com/youknowone/python-deadlib")
37906 (synopsis "Backport of asynchat from Python 3.11")
37907 (description
37908 "Standard library @code{asynchat} redistribution. Deprecated since
37909version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37910@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37911standard library}.")
37912 (license license:psfl)))
37913
37914(define-public python-standard-asyncore
37915 (package
37916 (name "python-standard-asyncore")
37917 (version %python-standard-pep-594-version)
37918 (source %python-standard-pep-594-source)
37919 (build-system pyproject-build-system)
37920 (arguments
37921 (list
37922 #:phases
37923 #~(modify-phases %standard-phases
37924 (add-after 'unpack 'chdir
37925 (lambda _
37926 (chdir "asyncore"))))))
37927 (native-inputs
37928 (list python-setuptools))
37929 (home-page "https://github.com/youknowone/python-deadlib")
37930 (synopsis "Backport of asyncore from Python 3.11")
37931 (description
37932 "Standard library @code{asyncore} redistribution. Deprecated since
37933version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37934@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37935standard library}.")
37936 (license license:psfl)))
37937
37938(define-public python-standard-smtpd
37939 (package
37940 (name "python-standard-smtpd")
37941 (version %python-standard-pep-594-version)
37942 (source %python-standard-pep-594-source)
37943 (build-system pyproject-build-system)
37944 (arguments
37945 (list
37946 ;; ImportError: cannot import name 'mock_socket' from 'test'
37947 #:tests? #f
37948 #:phases
37949 #~(modify-phases %standard-phases
37950 (add-after 'unpack 'chdir
37951 (lambda _
37952 (chdir "smtpd"))))))
37953 (native-inputs
37954 (list python-setuptools))
37955 (propagated-inputs
37956 (list
37957 python-standard-asynchat
37958 python-standard-asyncore))
37959 (home-page "https://github.com/youknowone/python-deadlib")
37960 (synopsis "Backport of smtpd from Python 3.11")
37961 (description
37962 "Standard library @code{smtpd} redistribution. Deprecated since version
379633.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37964replacement for this module, based on @code{asyncio}. See:
37965@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37966standard library}.")
37967 (license license:psfl)))
37968
37969(define-public python-stdio-mgr
37970 (package
37971 (name "python-stdio-mgr")
37972 (version "1.0.1")
37973 (source
37974 (origin
37975 (method git-fetch)
37976 (uri (git-reference
37977 (url "https://github.com/bskinn/stdio-mgr")
37978 (commit (string-append "v" version))))
37979 (file-name (git-file-name name version))
37980 (sha256
37981 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
37982 (build-system pyproject-build-system)
37983 (arguments
37984 (list
37985 ;; Do not run doctests requiring sphinx.
37986 #:test-flags #~(list "--ignore=README.rst")))
37987 (native-inputs
37988 (list python-pytest
37989 python-setuptools
37990 python-wheel))
37991 (propagated-inputs
37992 (list python-attrs))
37993 (home-page "https://github.com/bskinn/stdio-mgr")
37994 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37995 (description
37996 "This package contains a context manager for mocking/wrapping
37997stdin/stdout/stderr.")
37998 (license license:expat)))
37999
38000;; TODO: This package is not necessary in Guix. It should be replaced by a
38001;; trivial python package providing the same functionality.
38002(define-public python-stdlib-list
38003 (package
38004 (name "python-stdlib-list")
38005 (version "0.11.1")
38006 (source
38007 (origin
38008 (method git-fetch)
38009 (uri (git-reference
38010 (url "https://github.com/jackmaney/python-stdlib-list")
38011 (commit (string-append "v" version))))
38012 (file-name (git-file-name name version))
38013 (sha256
38014 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
38015 (build-system pyproject-build-system)
38016 (native-inputs
38017 (list python-flit-core
38018 python-pytest
38019 python-sphinx))
38020 (home-page "https://github.com/jackmaney/python-stdlib-list")
38021 (synopsis "Python Standard Libraries")
38022 (description
38023 "This package contains a list of Python Standard Libraries.")
38024 (license license:expat)))
38025
38026(define-public python-stem
38027 ;; python-stem is mostly unmaintained, but still has occasional commits
38028 ;; added.
38029 (package
38030 (name "python-stem")
38031 (version "1.8.3")
38032 (source
38033 (origin
38034 (method git-fetch)
38035 (uri (git-reference
38036 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
38037 (commit version)))
38038 (file-name (git-file-name name version))
38039 (sha256
38040 (base32
38041 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
38042 (build-system pyproject-build-system)
38043 (arguments
38044 (list
38045 #:test-backend #~'custom
38046 #:test-flags #~(list "run_tests.py" "--unit")
38047 #:phases
38048 #~(modify-phases %standard-phases
38049 (add-after 'unpack 'fix-python-312
38050 (lambda _
38051 (substitute* (find-files "." "\\.py$")
38052 (("assertRaisesRegexp") "assertRaisesRegex")))))))
38053 (native-inputs
38054 (list python-setuptools
38055 python-wheel))
38056 (home-page "https://stem.torproject.org/")
38057 (synopsis
38058 "Python controller library that allows applications to interact with Tor")
38059 (description
38060 "Stem is a Python controller library for Tor. With it you can use Tor's
38061 control protocol to script against the Tor process and read descriptor data
38062 relays publish about themselves.")
38063 (license license:lgpl3)))
38064
38065(define-public python-stltools
38066 (package
38067 (name "python-stltools")
38068 (version "2022.01.20")
38069 (source
38070 (origin
38071 (method git-fetch)
38072 (uri (git-reference
38073 (url "https://github.com/rsmith-nl/stltools")
38074 (commit version)))
38075 (file-name (git-file-name name version))
38076 (sha256
38077 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
38078 (build-system pyproject-build-system)
38079 (arguments
38080 (list
38081 #:phases
38082 #~(modify-phases %standard-phases
38083 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
38084 (delete 'build)
38085 (replace 'install
38086 (lambda* (#:key inputs outputs #:allow-other-keys)
38087 (let ((moddir (string-append (site-packages inputs outputs)
38088 "/stltools"))
38089 (bindir (string-append #$output "/bin")))
38090 (copy-recursively "stltools" moddir)
38091 (mkdir-p bindir)
38092 (for-each
38093 (lambda (script)
38094 (let ((source (string-append script ".py"))
38095 (target (string-append bindir "/" script)))
38096 (copy-file source target)
38097 (chmod target #o555)))
38098 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
38099 (native-inputs
38100 (list python-pytest
38101 python-setuptools))
38102 (propagated-inputs
38103 (list python-pycairo))
38104 (home-page "https://github.com/rsmith-nl/stltools")
38105 (synopsis "Python modules and scripts for handling STL files")
38106 (description
38107 "This package consists of Python modules and scripts for manipulating
38108stereolithography (STL) files. It can convert STL files into POV-ray meshes,
38109PDF and PostScript. The Python modules allow for reading and writing STL
38110files. It supports both the text and binary forms of STL.")
38111 (license license:expat)))
38112
38113(define-public python-stone
38114 (package
38115 (name "python-stone")
38116 (version "3.3.9")
38117 (source
38118 (origin
38119 (method git-fetch)
38120 (uri (git-reference
38121 (url "https://github.com/dropbox/stone")
38122 (commit (string-append "v" version))))
38123 (file-name (git-file-name name version))
38124 (sha256
38125 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
38126 (build-system pyproject-build-system)
38127 (native-inputs
38128 (list python-pytest
38129 python-setuptools))
38130 (propagated-inputs
38131 (list python-jinja2
38132 python-packaging
38133 python-ply
38134 python-six)) ;hard requirement, still
38135 (home-page "https://github.com/dropbox/stone")
38136 (synopsis "Official Api Spec Language for Dropbox")
38137 (description
38138 "Stone is an interface description language (IDL) for APIs.")
38139 (license license:expat)))
38140
38141(define-public python-stopit
38142 (package
38143 (name "python-stopit")
38144 (version "1.1.2")
38145 (source
38146 (origin
38147 (method git-fetch)
38148 (uri (git-reference
38149 (url "https://github.com/glenfant/stopit")
38150 (commit version)))
38151 (file-name (git-file-name name version))
38152 (sha256
38153 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
38154 (build-system pyproject-build-system)
38155 (arguments
38156 (list #:test-backend #~'custom
38157 #:test-flags #~(list "tests.py")))
38158 (native-inputs (list python-setuptools))
38159 (home-page "https://pypi.python.org/pypi/stopit")
38160 (synopsis "Timeout control decorator and context managers")
38161 (description
38162 "Raise asynchronous exceptions in other threads, control the timeout of
38163blocks or callables with two context managers and two decorators.")
38164 (license license:expat)))
38165
38166(define-public python-straight-plugin
38167 (package
38168 (name "python-straight-plugin")
38169 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
38170 (revision . "0")))
38171 (version (git-version "1.4.1"
38172 (assoc-ref properties 'revision)
38173 (assoc-ref properties 'commit)))
38174 (source
38175 (origin
38176 (method git-fetch)
38177 (uri (git-reference
38178 (url "https://github.com/ironfroggy/straight.plugin")
38179 (commit (assoc-ref properties 'commit))))
38180 (file-name (git-file-name name version))
38181 (sha256
38182 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
38183 (build-system pyproject-build-system)
38184 (arguments
38185 (list
38186 ;; XXX: Some tests started failing with the move to [email protected].
38187 ;; Consider removing this leaf unmaintained package.
38188 #:tests? #f
38189 #:test-backend #~'custom
38190 #:test-flags #~(list "tests.py")
38191 #:phases
38192 #~(modify-phases %standard-phases
38193 (add-after 'unpack 'fix-python-3.12-incompatibility
38194 (lambda _
38195 (substitute* "straight/plugin/loaders.py"
38196 (("from imp import find_module")
38197 "")))))))
38198 (native-inputs (list python-mock python-setuptools))
38199 (home-page "https://github.com/ironfroggy/straight.plugin")
38200 (synopsis "Simple namespaced plugin facility")
38201 (description
38202 "Straight Plugin provides a type of plugin you can create from almost any
38203existing Python modules, and an easy way for outside developers to add
38204functionality and customization to your projects with their own plugins.")
38205 (license license:expat)))
38206
38207(define-public python-streamtracer
38208 (package
38209 (name "python-streamtracer")
38210 (version "2.4.0")
38211 (source
38212 (origin
38213 (method url-fetch)
38214 (uri (pypi-uri "streamtracer" version))
38215 (sha256
38216 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
38217 (build-system pyproject-build-system)
38218 (arguments
38219 (list
38220 #:imported-modules `(,@%cargo-build-system-modules
38221 ,@%pyproject-build-system-modules)
38222 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
38223 (guix build pyproject-build-system)
38224 (guix build utils))
38225 #:test-flags
38226 #~(list "--pyargs" "streamtracer")
38227 #:phases
38228 #~(modify-phases %standard-phases
38229 (add-after 'unpack 'prepare-cargo-build-system
38230 (lambda args
38231 (for-each (lambda (phase)
38232 (format #t "Running cargo phase: ~a~%" phase)
38233 (apply (assoc-ref cargo:%standard-phases phase)
38234 #:cargo-target #$(cargo-triplet)
38235 args))
38236 '(unpack-rust-crates
38237 configure
38238 check-for-pregenerated-files
38239 patch-cargo-checksums)))))))
38240 (native-inputs
38241 (append
38242 (list maturin
38243 python-pytest
38244 python-pytest-doctestplus
38245 rust
38246 `(,rust "cargo"))
38247 (or (and=> (%current-target-system)
38248 (compose list make-rust-sysroot))
38249 '())))
38250 (propagated-inputs
38251 (list python-numpy
38252 python-packaging))
38253 (inputs (cargo-inputs 'python-streamtracer))
38254 (home-page "https://github.com/sunpy/streamtracer")
38255 (synopsis "Rapid streamline tracing in Python")
38256 (description
38257 "streamtracer is a Python package for rapid streamline tracing on
38258regularly spaced grids. The actual streamline tracing is done at a low level
38259in Rust, with a nice Python API provided on top.")
38260 (license license:gpl3+)))
38261
38262(define-public python-strenum
38263 (package
38264 (name "python-strenum")
38265 (version "0.4.15")
38266 (source
38267 (origin
38268 (method git-fetch)
38269 (uri (git-reference
38270 (url "https://github.com/irgeek/StrEnum")
38271 (commit (string-append "v" version))))
38272 (file-name (git-file-name name version))
38273 (sha256
38274 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
38275 (snippet #~(delete-file "versioneer.py"))))
38276 (build-system pyproject-build-system)
38277 (arguments
38278 (list #:test-flags #~(list "tests")))
38279 (native-inputs
38280 (list python-pytest
38281 python-pytest-pylint
38282 python-setuptools
38283 python-versioneer))
38284 (home-page "https://github.com/irgeek/StrEnum")
38285 (synopsis "Enum that inherits from str")
38286 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38287@code{str} to complement @code{enum.IntEnum} in the standard library.")
38288 (license license:expat)))
38289
38290(define-public python-structlog
38291 (package
38292 (name "python-structlog")
38293 (version "25.5.0")
38294 (source
38295 (origin
38296 (method url-fetch)
38297 (uri (pypi-uri "structlog" version))
38298 (sha256
38299 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38300 (build-system pyproject-build-system)
38301 (native-inputs
38302 (list python-hatch-fancy-pypi-readme
38303 python-hatch-vcs
38304 python-hatchling
38305 python-pytest
38306 python-pytest-asyncio
38307 python-time-machine))
38308 (home-page "https://www.structlog.org/")
38309 (synopsis "Structured Logging for Python")
38310 (description "@code{structlog} changes logging in Python by adding structure
38311to your log entries.")
38312 (license (list license:asl2.0 license:expat))))
38313
38314(define-public python-style
38315 (package
38316 (name "python-style")
38317 (version "1.1.6")
38318 (source
38319 (origin
38320 (method url-fetch)
38321 (uri (pypi-uri "style" version))
38322 (sha256
38323 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38324 (build-system pyproject-build-system)
38325 (arguments
38326 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38327 (native-inputs
38328 (list python-setuptools))
38329 (home-page "https://github.com/lmittmann/style")
38330 (synopsis "Terminal string styling")
38331 (description
38332"@code{python-style} is a simple terminal string styling package. Its API is
38333a port of the chalk package for javascript.")
38334 (license license:expat)))
38335
38336(define-public python-svgelements
38337 (package
38338 (name "python-svgelements")
38339 (version "1.9.6")
38340 (source
38341 (origin
38342 (method git-fetch)
38343 (uri (git-reference
38344 (url "https://github.com/meerk40t/svgelements")
38345 (commit version)))
38346 (file-name (git-file-name name version))
38347 (sha256
38348 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38349 (build-system pyproject-build-system)
38350 (arguments
38351 (list
38352 #:phases
38353 #~(modify-phases %standard-phases
38354 (add-after 'unpack 'fix-python-incompatibilities
38355 (lambda _
38356 (substitute* (find-files "test" "\\.py$")
38357 (("(assert(|NotAlmost)Equal)s" all out in)
38358 out)))))))
38359 (native-inputs
38360 (list python-anyio
38361 python-pytest
38362 python-numpy
38363 python-pillow
38364 python-scipy
38365 python-setuptools))
38366 (home-page "https://github.com/meerk40t/svgelements")
38367 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38368 (description
38369 "This module does high fidelity SVG parsing and geometric rendering.
38370The goal is to successfully and correctly process SVG for use with any scripts
38371that may need or want to use SVG files as geometric data.")
38372 (license license:expat)))
38373
38374(define-public python-svgutils
38375 (package
38376 (name "python-svgutils")
38377 (version "0.3.4")
38378 (source
38379 (origin
38380 (method url-fetch)
38381 (uri (pypi-uri "svgutils" version))
38382 (sha256
38383 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38384 (build-system pyproject-build-system)
38385 (arguments
38386 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38387 (native-inputs
38388 (list python-setuptools))
38389 (propagated-inputs
38390 (list python-lxml))
38391 (home-page "https://svgutils.readthedocs.io")
38392 (synopsis "Python SVG editor")
38393 (description "This is an utility package that helps with editing and
38394concatenating SVG files. It is especially directed at scientists preparing
38395final figures for submission to journals. So far it supports arbitrary
38396placement and scaling of SVG figures and adding markers, such as labels.")
38397 (license license:expat)))
38398
38399(define-public python-svgwrite
38400 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38401 (package
38402 (name "python-svgwrite")
38403 (version "1.4.3")
38404 (source
38405 (origin
38406 (method git-fetch)
38407 (uri (git-reference
38408 (url "https://github.com/mozman/svgwrite")
38409 (commit (string-append "v" version))))
38410 (file-name (git-file-name name version))
38411 (sha256
38412 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38413 (build-system pyproject-build-system)
38414 (arguments
38415 (list
38416 ;; Disable test which wants internet.
38417 #:test-flags
38418 #~(list "-k" "not test_embed_google_web_font")))
38419 (native-inputs (list python-pytest python-setuptools))
38420 (home-page "https://github.com/mozman/svgwrite")
38421 (synopsis "Python library to create SVG drawings")
38422 (description
38423 "This package provides a Python library to create SVG drawings.")
38424 (license license:expat)))
38425
38426(define-public python-swagger-spec-validator
38427 (package
38428 (name "python-swagger-spec-validator")
38429 (version "3.0.4")
38430 (source
38431 (origin
38432 (method git-fetch)
38433 (uri (git-reference
38434 (url "https://github.com/Yelp/swagger_spec_validator")
38435 (commit (string-append "v" version))))
38436 (file-name (git-file-name name version))
38437 (sha256
38438 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38439 (build-system pyproject-build-system)
38440 (native-inputs
38441 (list python-pytest
38442 python-setuptools))
38443 (propagated-inputs
38444 (list python-importlib-resources
38445 python-jsonschema
38446 python-pyyaml
38447 python-typing-extensions))
38448 (home-page "https://github.com/Yelp/swagger_spec_validator")
38449 (synopsis "Validation of Swagger specifications")
38450 (description
38451 "@code{swagger_spec_validator} provides a library for validating Swagger
38452API specifications.")
38453 (license license:asl2.0)))
38454
38455(define-public python-syllables
38456 (package
38457 (name "python-syllables")
38458 (version "1.0.3")
38459 (source
38460 (origin
38461 (method git-fetch)
38462 (uri (git-reference
38463 (url "https://github.com/prosegrinder/python-syllables")
38464 (commit (string-append "v" version))))
38465 (file-name (git-file-name name version))
38466 (sha256
38467 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38468 (build-system pyproject-build-system)
38469 (native-inputs
38470 (list python-cmudict
38471 python-pytest
38472 python-setuptools))
38473 (home-page "https://github.com/prosegrinder/python-syllables")
38474 (synopsis "Package for estimating the number of syllables in a word")
38475 (description
38476 "This package provides a Python package for estimating the number of
38477syllables in a word.")
38478 (license license:gpl3)))
38479
38480(define-public python-sympy
38481 (package
38482 (name "python-sympy")
38483 (version "1.13.3")
38484 (source
38485 (origin
38486 (method url-fetch)
38487 (uri (pypi-uri "sympy" version))
38488 (sha256
38489 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38490 (build-system pyproject-build-system)
38491 (arguments
38492 '(#:phases
38493 (modify-phases %standard-phases
38494 (replace 'check
38495 (lambda* (#:key tests? #:allow-other-keys)
38496 (if tests?
38497 (invoke "python3" "-c"
38498 "import sympy; sympy.test(\"/core\")")))))))
38499 (propagated-inputs (list python-mpmath))
38500 (native-inputs
38501 (list python-hypothesis
38502 python-pytest
38503 python-setuptools
38504 python-wheel))
38505 (home-page "https://www.sympy.org/")
38506 (synopsis "Python library for symbolic mathematics")
38507 (description
38508 "SymPy is a Python library for symbolic mathematics. It aims to become a
38509full-featured computer algebra system (CAS) while keeping the code as simple
38510as possible in order to be comprehensible and easily extensible.")
38511 (license license:bsd-3)))
38512
38513(define-public python-tables
38514 (package
38515 (name "python-tables")
38516 (version "3.11.1")
38517 (source
38518 (origin
38519 (method git-fetch)
38520 (uri (git-reference
38521 (url "https://github.com/PyTables/PyTables")
38522 (commit (string-append "v" version))))
38523 (file-name (git-file-name name version))
38524 (sha256
38525 (base32 "03ifagvxzvgfdpjw508l1lq1j3ki9nbhxkls4zf1bchfdprv89fv"))
38526 (snippet '(begin
38527 (use-modules (guix build utils))
38528 (delete-file-recursively "hdf5-blosc")
38529 (delete-file-recursively "c-blosc")))))
38530 (build-system pyproject-build-system)
38531 (arguments
38532 (list
38533 #:test-flags
38534 ;; Performing only a light (yet comprehensive) subset of the test suite.
38535 ;; If you want a more complete test, try passing the --heavy flag to
38536 ;; this script (or set the 'heavy' parameter in case you are using
38537 ;; tables.test() call). The whole suite will take more than 4 hours to
38538 ;; complete on a relatively modern CPU and around 512 MB of main memory.
38539 #~(list "--pyargs" "tables.tests.test_all")
38540 #:phases
38541 #~(modify-phases %standard-phases
38542 (add-after 'unpack 'disable-tuning
38543 (lambda _
38544 (substitute* "setup.py"
38545 (("cpu_flags = .*")
38546 "cpu_flags = ['sse2']\n"))))
38547 (add-after 'unpack 'fix-reference-to-blosc2
38548 (lambda* (#:key inputs #:allow-other-keys)
38549 (substitute* "tables/__init__.py"
38550 (("\"\",") ;default
38551 (string-append "'"
38552 (dirname
38553 (search-input-file inputs "/lib/libblosc2.so"))
38554 "',\n")))))
38555 (add-before 'build 'pre-build
38556 (lambda _
38557 (substitute* "setup.py"
38558 (("hdf5-blosc/src")
38559 (format #f "~a/src"
38560 #$(package-source
38561 (this-package-input "hdf5-blosc-parallel-openmpi")))))
38562 (invoke "make" "distclean") ;Regenerate C code with Cython
38563 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38564 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38565 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38566 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
38567 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38568 (add-before 'check 'pre-check
38569 (lambda _
38570 (setenv "HOME" "/tmp"))))))
38571 (native-inputs
38572 (list pkg-config
38573 python-cython
38574 python-pytest
38575 python-setuptools
38576 python-sphinx))
38577 (inputs
38578 (list bzip2
38579 c-blosc
38580 c-blosc2
38581 hdf5-parallel-openmpi
38582 hdf5-blosc-parallel-openmpi
38583 lzo))
38584 (propagated-inputs
38585 (list python-blosc2
38586 python-numexpr
38587 python-numpy
38588 python-packaging
38589 python-py-cpuinfo
38590 python-typing-extensions))
38591 (home-page "https://www.pytables.org/")
38592 (synopsis "Hierarchical datasets for Python")
38593 (description "PyTables is a package for managing hierarchical datasets and
38594designed to efficiently cope with extremely large amounts of data.")
38595 (license license:bsd-3)))
38596
38597(define-public python-tablib
38598 (package
38599 (name "python-tablib")
38600 (version "3.9.0")
38601 (source
38602 (origin
38603 (method url-fetch)
38604 (uri (pypi-uri "tablib" version))
38605 (sha256
38606 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38607 (build-system pyproject-build-system)
38608 (native-inputs
38609 (list python-pytest python-setuptools python-setuptools-scm))
38610 (inputs ;; [cli]
38611 (list python-tabulate))
38612 (propagated-inputs
38613 (list python-markuppy
38614 python-odfpy
38615 python-openpyxl
38616 python-pyyaml
38617 python-xlrd
38618 python-xlwt))
38619 (home-page "https://tablib.readthedocs.io")
38620 (synopsis "Format agnostic tabular data library")
38621 (description
38622 "@code{tablib} is a format-agnostic tabular dataset library,
38623written in Python. Supported output formats are Excel (Sets + Books),
38624JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38625TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38626
38627@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38628quite huge, this Guix package doesn't depend on pandas. In case, just also
38629install @code{python-pandas}.")
38630 (license license:expat)))
38631
38632(define-public python-tabulate
38633 (package
38634 (name "python-tabulate")
38635 (version "0.9.0")
38636 (source
38637 (origin
38638 (method url-fetch)
38639 (uri (pypi-uri "tabulate" version))
38640 (sha256
38641 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38642 (build-system pyproject-build-system)
38643 (native-inputs
38644 (list python-pytest
38645 python-setuptools-scm
38646 python-setuptools))
38647 (propagated-inputs
38648 (list python-wcwidth))
38649 (home-page "https://github.com/astanin/python-tabulate")
38650 (synopsis "Pretty-print tabular data")
38651 (description
38652 "Tabulate is a library and command-line utility to pretty-print tabular
38653data in Python.")
38654 (license license:expat)))
38655
38656(define-public python-takethetime
38657 (package
38658 (name "python-takethetime")
38659 (version "0.3.1")
38660 (source
38661 (origin
38662 (method url-fetch)
38663 (uri (pypi-uri "TakeTheTime" version))
38664 (sha256
38665 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38666 (build-system pyproject-build-system)
38667 (arguments
38668 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38669 (native-inputs
38670 (list python-setuptools
38671 python-wheel))
38672 (home-page "https://github.com/ErikBjare/TakeTheTime")
38673 (synopsis "Timing chunks of code")
38674 (description
38675 "This package implements a functionality for time taking using context
38676managers.")
38677 (license license:expat)))
38678
38679(define-public python-targ
38680 (package
38681 (name "python-targ")
38682 (version "0.6.0")
38683 (source
38684 (origin
38685 (method git-fetch)
38686 (uri (git-reference
38687 (url "https://github.com/piccolo-orm/targ/")
38688 (commit version)))
38689 (file-name (git-file-name name version))
38690 (sha256
38691 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38692 (build-system pyproject-build-system)
38693 (native-inputs
38694 (list python-pytest
38695 python-setuptools))
38696 (propagated-inputs
38697 (list python-colorama
38698 python-docstring-parser))
38699 (home-page "https://github.com/piccolo-orm/targ/")
38700 (synopsis "Python CLI builder using type hints and docstrings")
38701 (description
38702 "Targ is a package to build a Python @acronym{Command Line Interface,
38703CLI} for applications by using type hints and docstrings.")
38704 (license license:expat)))
38705
38706(define-public python-tasklib
38707 (package
38708 (name "python-tasklib")
38709 (version "2.5.1")
38710 (source
38711 (origin
38712 (method git-fetch)
38713 (uri (git-reference
38714 (url "https://github.com/GothenburgBitFactory/tasklib")
38715 (commit version)))
38716 (file-name (git-file-name name version))
38717 (sha256
38718 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38719 (build-system pyproject-build-system)
38720 (arguments
38721 (list
38722 #:test-backend
38723 #~'unittest))
38724 (inputs (list taskwarrior))
38725 (native-inputs (list python-setuptools tzdata-for-tests))
38726 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38727 (synopsis "Official Taskwarrior library for Python")
38728 (description "@code{tasklib} is a Python library for interacting with
38729Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38730 (license license:bsd-3)))
38731
38732(define-public python-tasklogger
38733 (package
38734 (name "python-tasklogger")
38735 (version "1.2.0")
38736 (source
38737 (origin
38738 (method url-fetch)
38739 (uri (pypi-uri "tasklogger" version))
38740 (sha256
38741 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38742 (build-system pyproject-build-system)
38743 (native-inputs
38744 (list python-pytest
38745 python-numpy
38746 python-setuptools))
38747 (propagated-inputs
38748 (list python-deprecated))
38749 (home-page "https://github.com/scottgigante/tasklogger")
38750 (synopsis "Extension to the core Python logging library")
38751 (description "This package provides an extension to the core Python
38752logging library for logging the beginning and completion of tasks and
38753subtasks.")
38754 (license license:gpl2)))
38755
38756(define-public python-tatsu
38757 (package
38758 (name "python-tatsu")
38759 (version "5.13.2")
38760 (source
38761 (origin
38762 (method git-fetch)
38763 (uri (git-reference
38764 (url "https://github.com/neogeny/TatSu")
38765 (commit (string-append "v" version))))
38766 (file-name (git-file-name name version))
38767 (sha256
38768 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38769 (build-system pyproject-build-system)
38770 (native-inputs
38771 (list python-pytest
38772 python-setuptools))
38773 (home-page "https://tatsu.readthedocs.io/en/stable/")
38774 (synopsis "PEG/Packrat Parser generator for Python")
38775 (description
38776 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38777Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38778or Packrat parser in Python.")
38779 (license license:bsd-2)))
38780
38781(define-public python-tblib
38782 (package
38783 (name "python-tblib")
38784 (version "3.1.0")
38785 (source
38786 (origin
38787 (method url-fetch)
38788 (uri (pypi-uri "tblib" version))
38789 (sha256
38790 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38791 (build-system pyproject-build-system)
38792 (arguments
38793 (list
38794 ;; Don't run benchmark tests.
38795 #:test-flags #~(list "--ignore=tests/test_perf.py")
38796 #:phases
38797 #~(modify-phases %standard-phases
38798 (add-after 'unpack 'fix-pytest-config
38799 (lambda _
38800 (substitute* "pytest.ini"
38801 (("--benchmark-disable") "")))))))
38802 (native-inputs
38803 (list python-pytest
38804 python-setuptools))
38805 (home-page "https://github.com/ionelmc/python-tblib")
38806 (synopsis "Traceback serialization library")
38807 (description
38808 "Traceback serialization allows you to:
38809
38810@enumerate
38811@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38812different processes. This allows better error handling when running code over
38813multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38814
38815@item Parse traceback strings and raise with the parsed tracebacks.
38816@end enumerate\n")
38817 (license license:bsd-3)))
38818
38819(define-public python-tcolorpy
38820 (package
38821 (name "python-tcolorpy")
38822 (version "0.1.7")
38823 (source
38824 (origin
38825 (method git-fetch)
38826 (uri (git-reference
38827 (url "https://github.com/thombashi/tcolorpy")
38828 (commit (string-append "v" version))))
38829 (file-name (git-file-name name version))
38830 (sha256
38831 (base32 "18cck1s0w9i5llaaw9s37g61dqg3vpjjgd3ywc72n1i02k0yj1fh"))))
38832 (build-system pyproject-build-system)
38833 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
38834 (home-page "https://github.com/thombashi/tcolorpy")
38835 (synopsis "Apply true color for terminal text")
38836 (description
38837 "@code{tcolorpy} is a Python library to apply true color for terminal
38838text.
38839You can set the following @code{tcolor} arguments:
38840
38841@itemize
38842@item color
38843@item bgcolor
38844@item styles
38845@end itemize")
38846 (license license:expat)))
38847
38848(define-public python-tdir
38849 (package
38850 (name "python-tdir")
38851 (version "1.10.0")
38852 (source
38853 (origin
38854 (method git-fetch)
38855 (uri (git-reference
38856 (url "https://github.com/rec/tdir")
38857 (commit (string-append "v" version))))
38858 (file-name (git-file-name name version))
38859 (sha256
38860 (base32 "10kl0w40n53ynhxlvkv56gywswnrb2drmrw972k0p66sihlw9y2p"))))
38861 (build-system pyproject-build-system)
38862 (native-inputs (list python-hatchling python-pytest))
38863 (propagated-inputs (list python-dek python-xmod))
38864 (home-page "https://rec.github.io/tdir/")
38865 (synopsis "Create, fill a temporary directory")
38866 (description
38867 "This is Python helper module to run code inside a temporary directory
38868filled with zero or more files. @code{tdir()} runs code in a temporary
38869directory pre-filled with files: it can either be used as a context manager,
38870or a decorator for functions or classes. @code{tdir.fill()} is a tiny
38871function that recursively fills a directory.")
38872 (license license:expat)))
38873
38874(define-public python-telethon
38875 (package
38876 (name "python-telethon")
38877 (version "1.44.0")
38878 (source
38879 (origin
38880 (method git-fetch)
38881 (uri (git-reference
38882 (url "https://codeberg.org/Lonami/Telethon")
38883 (commit (string-append "v" version))))
38884 (file-name (git-file-name name version))
38885 (sha256
38886 (base32 "1y1bzna7gqs6ck4jmh2spm7s8frw0qs6p52v9ar6qbbk1h7yacip"))))
38887 (build-system pyproject-build-system)
38888 (arguments
38889 (list
38890 #:phases
38891 #~(modify-phases %standard-phases
38892 (add-after 'build 'generate-tl-code
38893 (lambda _
38894 ;; The custom hatchling build hook (hatch_build.py) generates
38895 ;; telethon/tl/{types,functions}.py only inside hatchling's
38896 ;; isolated build directory, but deletes them again.
38897 ;; Regenerate the same code here too for tests; see
38898 ;; readthedocs/developing/project-structure.rst.
38899 (invoke "python3" "setup.py" "gen"))))))
38900 (native-inputs
38901 (list python-hatchling
38902 python-pytest
38903 python-pytest-asyncio
38904 python-pytest-trio
38905 python-setuptools))
38906 (propagated-inputs
38907 (list python-rsa python-pyaes))
38908 (home-page "https://docs.telethon.dev")
38909 (synopsis "Full-featured Telegram client library for Python 3")
38910 (description "This library is designed to make it easy to write Python
38911programs that can interact with Telegram.")
38912 (license license:expat)))
38913
38914(define-public python-tempora
38915 (package
38916 (name "python-tempora")
38917 (version "5.8.1")
38918 (source
38919 (origin
38920 (method url-fetch)
38921 (uri (pypi-uri "tempora" version))
38922 (sha256
38923 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38924 (build-system pyproject-build-system)
38925 (arguments
38926 (list
38927 ;; Do not test the myproject.toml build as it tries to pull dependencies
38928 ;; from the Internet.
38929 #:test-flags #~(list "-k" "not project"
38930 "tests")))
38931 (native-inputs
38932 (list python-freezegun
38933 python-pytest
38934 python-setuptools
38935 python-setuptools-scm
38936 python-tzdata))
38937 (propagated-inputs (list python-dateutil python-jaraco-functools))
38938 (home-page "https://github.com/jaraco/tempora")
38939 (synopsis "Python date and time objects and routines")
38940 (description
38941 "The @code{tempora} Python library contains miscellaneous date and time
38942related utilities and constants, routines for measuring, profiling, and
38943getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38944well as an event scheduler.")
38945 (license license:expat)))
38946
38947(define-public python-tenacity
38948 (package
38949 (name "python-tenacity")
38950 (version "9.1.4")
38951 (source
38952 (origin
38953 (method url-fetch)
38954 (uri (pypi-uri "tenacity" version))
38955 (sha256
38956 (base32 "0fprkhbrh26zm9jxpwmcz5vpr989hd4kpcqs110x0arz4r61vcxd"))))
38957 (build-system pyproject-build-system)
38958 (native-inputs
38959 (list python-pytest
38960 python-setuptools
38961 python-setuptools-scm
38962 python-tornado
38963 python-typeguard))
38964 (home-page "https://github.com/jd/tenacity")
38965 (synopsis "Retrying library for python")
38966 (description
38967 "Tenacity is a general-purpose python library to simplify the task of
38968adding retry behavior to just about anything.")
38969 (license license:asl2.0)))
38970
38971(define-public python-term-background
38972 (package
38973 (name "python-term-background")
38974 (version "1.0.5")
38975 (source
38976 (origin
38977 (method url-fetch)
38978 (uri (pypi-uri "term_background" version))
38979 (sha256
38980 (base32 "1gcr4aidgsl9kv2m0jw01svcbi3zlx18m2fpdh3yacvapzgjir2h"))))
38981 (build-system pyproject-build-system)
38982 (native-inputs
38983 (list python-pytest
38984 python-setuptools
38985 python-setuptools-scm))
38986 (home-page "http://github.com/rocky/shell-term-background")
38987 (synopsis "Determine if shell has a light or dark background")
38988 (description "This package determines if shell has a light or dark
38989background.")
38990 (license license:gpl2+)))
38991
38992(define-public python-term-image
38993 (package
38994 (name "python-term-image")
38995 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
38996 (revision . "0")))
38997 (version (git-version "0.7.2"
38998 (assoc-ref properties 'revision)
38999 (assoc-ref properties 'commit)))
39000 (source
39001 (origin
39002 (method git-fetch)
39003 (uri (git-reference
39004 (url "https://github.com/AnonymouX47/term-image")
39005 (commit (assoc-ref properties 'commit))))
39006 (file-name (git-file-name name version))
39007 (sha256
39008 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
39009 (build-system pyproject-build-system)
39010 (arguments
39011 (list
39012 #:test-flags
39013 #~(list "tests"
39014 ;; These tests require network access.
39015 "-k" (string-append "not test_from_url"
39016 " and not test_source"
39017 " and not test_close"))
39018 #:phases
39019 #~(modify-phases %standard-phases
39020 (add-after 'unpack 'bump-pillow-requirement
39021 (lambda _
39022 (substitute* "src/term_image/image/common.py"
39023 (("\\.getdata")
39024 ".get_flattened_data"))
39025 (let* ((major #$(version-major
39026 (package-version
39027 (this-package-input "python-pillow"))))
39028 (next (number->string (+ 1 (string->number major)))))
39029 (substitute* "pyproject.toml"
39030 (("pillow>=9.1,<12")
39031 (string-append "pillow>=9.1,<" next)))))))))
39032 (propagated-inputs (list python-pillow python-requests))
39033 (native-inputs
39034 (list python-pytest
39035 python-setuptools
39036 python-urwid))
39037 (home-page "https://github.com/AnonymouX47/term-image")
39038 (synopsis "Display images in the terminal")
39039 (description "term-image is a library and program to display images on
39040compatible terminals.
39041
39042Features:
39043@enumerate
39044@item Multiple image formats (basically all formats supported by
39045@code{PIL.Image.open()})
39046@item Multiple image source types: PIL image instance, local file, URL
39047@item Multiple image render styles (with automatic support detection)
39048@item Support for multiple terminal graphics protocols, including Kitty
39049@item Transparency support (with multiple options)
39050@item Animated image support (including transparent ones)
39051@item Integration into various TUI / terminal-based output libraries
39052@item Terminal size awareness
39053@item Automatic and manual image sizing
39054@item Horizontal and vertical alignment
39055@item Automatic and manual font ratio adjustment (to preserve image aspect
39056ratio)
39057@end enumerate")
39058 (license license:expat)))
39059
39060(define-public python-termcolor
39061 (package
39062 (name "python-termcolor")
39063 (version "2.5.0")
39064 (source
39065 (origin
39066 (method url-fetch)
39067 (uri (pypi-uri "termcolor" version))
39068 (sha256
39069 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
39070 (build-system pyproject-build-system)
39071 (arguments
39072 (list
39073 #:phases
39074 #~(modify-phases %standard-phases
39075 (add-after 'unpack 'relax-coverage-requirements
39076 (lambda _
39077 (substitute* "pyproject.toml"
39078 ((".*coverage.*") "")))))))
39079 (native-inputs
39080 (list python-hatch-vcs python-hatchling python-pytest))
39081 (home-page "https://pypi.org/project/termcolor/")
39082 (synopsis "ANSII Color formatting for terminal output")
39083 (description
39084 "This package provides ANSII Color formatting for output in terminals.")
39085 (license license:expat)))
39086
39087(define-public python-termcolor-1
39088 (package
39089 (inherit python-termcolor)
39090 (version "1.1.0")
39091 (source
39092 (origin
39093 (method url-fetch)
39094 (uri (pypi-uri "termcolor" version))
39095 (sha256
39096 (base32
39097 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
39098 ;; There are no tests
39099 (arguments (list #:tests? #false))
39100 (native-inputs
39101 (list python-setuptools
39102 python-wheel))))
39103
39104(define-public python-termcolor-next
39105 (package
39106 (inherit python-termcolor)
39107 (name "python-termcolor-next")
39108 (version "3.1.0")
39109 (source
39110 (origin
39111 (method url-fetch)
39112 (uri (pypi-uri "termcolor" version))
39113 (sha256
39114 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
39115 (arguments '())))
39116
39117(define-public python-terminaltables
39118 (package
39119 (name "python-terminaltables")
39120 (version "3.1.0")
39121 (source
39122 (origin
39123 (method git-fetch)
39124 (uri (git-reference
39125 (url "https://github.com/Robpol86/terminaltables")
39126 (commit (string-append "v" version))))
39127 (file-name (git-file-name name version))
39128 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
39129 (build-system pyproject-build-system)
39130 ;; XXX: A lot of test fail with flaky behavior.
39131 (arguments (list #:tests? #f))
39132 (native-inputs
39133 (list python-colorclass
39134 python-colorama
39135 python-pytest
39136 python-setuptools
39137 python-termcolor))
39138 (home-page "https://github.com/Robpol86/terminaltables")
39139 (synopsis
39140 "Generate simple tables in terminals from a nested list of strings")
39141 (description
39142 "This package makes it easy to draw tables in terminal/console
39143applications from a list of lists of strings. It supports multi-line rows.")
39144 (license license:expat)))
39145
39146(define-public python-termstyle
39147 (package
39148 (name "python-termstyle")
39149 (version "0.1.11")
39150 (source
39151 (origin
39152 (method url-fetch)
39153 (uri (pypi-uri "termstyle" version))
39154 (sha256
39155 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
39156 (build-system pyproject-build-system)
39157 (arguments
39158 (list #:test-backend #~'custom
39159 #:test-flags #~(list "test3.py")))
39160 (native-inputs
39161 (list python-setuptools))
39162 (home-page "https://github.com/gfxmonk/termstyle")
39163 (synopsis "Console text coloring for Python")
39164 (description "This package provides console text coloring for Python.")
39165 (license license:bsd-3)))
39166
39167(define-public python-text-unidecode
39168 (package
39169 (name "python-text-unidecode")
39170 (version "1.3")
39171 (source
39172 (origin
39173 (method url-fetch)
39174 (uri (pypi-uri "text-unidecode" version))
39175 (sha256
39176 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
39177 (build-system pyproject-build-system)
39178 (native-inputs
39179 (list python-pytest
39180 python-setuptools))
39181 (home-page "https://github.com/kmike/text-unidecode/")
39182 (synopsis "Decode Unicode data")
39183 (description
39184 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
39185Perl library. It can create ASCII representations of Unicode data. In general
39186users should prefer the @code{python-unidecode} package which offers better
39187memory usage and transliteration quality.")
39188 ;; The user can choose either license.
39189 (license (list license:clarified-artistic license:gpl2+))))
39190
39191(define-public python-textdistance
39192 (package
39193 (name "python-textdistance")
39194 (version "4.6.3")
39195 (source
39196 (origin
39197 (method git-fetch)
39198 (uri (git-reference
39199 (url "https://github.com/life4/textdistance")
39200 (commit version)))
39201 (file-name (git-file-name name version))
39202 (sha256
39203 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
39204 (build-system pyproject-build-system)
39205 ;; tests: 430 passed, 1446 warnings
39206 (native-inputs
39207 (list python-numpy
39208 python-pytest
39209 python-setuptools))
39210 (propagated-inputs
39211 (list python-jellyfish
39212 python-distance
39213 python-levenshtein
39214 python-pylev
39215 python-pyxdameraulevenshtein
39216 python-rapidfuzz))
39217 (home-page "https://github.com/life4/textdistance")
39218 (synopsis "Compute distance between the two texts")
39219 (description "@code{textdistance} is a pure Python library for comparing
39220distance between two or more sequences by many algorithms.")
39221 (license license:expat)))
39222
39223(define-public python-textparser
39224 (package
39225 (name "python-textparser")
39226 (version "0.24.0")
39227 (source
39228 (origin
39229 (method url-fetch)
39230 (uri (pypi-uri "textparser" version))
39231 (sha256
39232 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
39233 (build-system pyproject-build-system)
39234 (arguments
39235 (list #:test-backend #~'unittest))
39236 (native-inputs (list python-setuptools))
39237 (home-page "https://github.com/eerimoq/textparser")
39238 (synopsis "Fast text parser for Python")
39239 (description "This library provides a text parser written in the Python
39240language. It aims to be fast.")
39241 (license license:expat)))
39242
39243(define-public python-texttable
39244 (package
39245 (name "python-texttable")
39246 (version "1.7.0")
39247 (source
39248 (origin
39249 (method git-fetch)
39250 (uri (git-reference
39251 (url "https://github.com/foutaise/texttable/")
39252 (commit (string-append "v" version))))
39253 (file-name (git-file-name name version))
39254 (sha256
39255 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
39256 (build-system pyproject-build-system)
39257 (arguments (list #:test-flags #~(list "tests.py")))
39258 (native-inputs (list python-pytest python-setuptools))
39259 (home-page "https://github.com/foutaise/texttable/")
39260 (synopsis "Create simple ASCII tables in Python")
39261 (description
39262 "This package provides a Python module for creating simple ASCII
39263tables.")
39264 (license license:expat)))
39265
39266(define-public python-textual
39267 (package
39268 (name "python-textual")
39269 (version "7.4.0")
39270 (source
39271 (origin
39272 (method git-fetch)
39273 (uri (git-reference
39274 (url "https://github.com/Textualize/textual")
39275 (commit (string-append "v" version))))
39276 (file-name (git-file-name name version))
39277 (sha256
39278 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
39279 (build-system pyproject-build-system)
39280 (arguments
39281 (list
39282 #:test-flags
39283 ;; Snapshot tests require python-pytest-textual-snapshot which
39284 ;; in turn depends on python-textual.
39285 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
39286 "-k" (string-append
39287 ;; Broken for unknown reason.
39288 "not test_textual_env_var"
39289 ;; Tests that require python-treesitter-languages.
39290 " and not test_widget_construct"
39291 " and not test_setting_builtin_language_via_constructor"
39292 " and not test_setting_builtin_language_via_attribute"
39293 " and not test_setting_language_to_none"
39294 " and not test_setting_unknown_language"
39295 " and not test_register_language"
39296 " and not test_update_highlight_query"
39297 " and not test_default_theme"
39298 " and not test_setting_builtin_themes"
39299 " and not test_setting_unknown_theme_raises_exception"
39300 " and not test_registering_and_setting_theme"
39301 " and not test_progress_bar_width_1fr"))
39302 #:phases
39303 #~(modify-phases %standard-phases
39304 (add-after 'unpack 'relax-requirements
39305 (lambda _
39306 (substitute* "pyproject.toml"
39307 (("pygments =.*")
39308 "pygments = \"*\"\n")))))))
39309 (propagated-inputs
39310 (list python-markdown-it-py
39311 python-mdit-py-plugins
39312 python-platformdirs
39313 python-rich
39314 python-tree-sitter
39315 ;; python-tree-sitter-languages ; optional, not packed yet
39316 python-typing-extensions))
39317 (native-inputs
39318 (list python-poetry-core
39319 python-pytest
39320 python-pytest-asyncio
39321 python-pytest-xdist))
39322 (home-page "https://github.com/Textualize/textual")
39323 (synopsis "Build text user interfaces in Python")
39324 (description "Textual is a @acronym{TUI, Text User Interface} framework
39325for Python inspired by modern web development.")
39326 (license license:expat)))
39327
39328(define-public python-tftpy
39329 (package
39330 (name "python-tftpy")
39331 (version "0.8.6")
39332 (source
39333 (origin
39334 (method git-fetch)
39335 (uri (git-reference
39336 (url "https://github.com/msoulier/tftpy")
39337 (commit version)))
39338 (file-name (git-file-name name version))
39339 (sha256
39340 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39341 (build-system pyproject-build-system)
39342 (arguments
39343 (list
39344 #:test-backend #~'unittest
39345 #:test-flags #~(list "tests/test.py")
39346 #:phases
39347 #~(modify-phases %standard-phases
39348 (add-before 'check 'configure-tests
39349 (lambda* (#:key tests? #:allow-other-keys)
39350 (when tests?
39351 ;; The default DEBUG logging level is way too verbose.
39352 (substitute* "tests/test.py"
39353 (("logging\\.DEBUG")
39354 "logging.INFO"))))))))
39355 (native-inputs (list python-setuptools))
39356 (home-page "https://tftpy.sourceforge.net/")
39357 (synopsis "Python trivial file transfer protocol (TFTP) library")
39358 (description
39359 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39360be used to act both as a TFTP client or TFTP server.")
39361 (license license:expat)))
39362
39363(define-public python-thefuzz
39364 (package
39365 (name "python-thefuzz")
39366 (version "0.22.1")
39367 (source
39368 (origin
39369 (method git-fetch)
39370 (uri (git-reference
39371 (url "https://github.com/seatgeek/thefuzz")
39372 (commit version)))
39373 (file-name (git-file-name name version))
39374 (sha256
39375 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39376 (build-system pyproject-build-system)
39377 (arguments
39378 (list #:test-flags #~'("-k" "not TestCodeFormat")
39379 #:phases #~(modify-phases %standard-phases
39380 ;; pycodestyle is only used in TestCodeFormat.
39381 (add-after 'unpack 'unrequire-pycodestyle
39382 (lambda _
39383 (substitute* "test_thefuzz.py"
39384 (("import pycodestyle.*") "")))))))
39385 (propagated-inputs (list python-rapidfuzz))
39386 (native-inputs (list python-hypothesis
39387 python-pytest
39388 python-setuptools))
39389 (home-page "https://github.com/seatgeek/thefuzz")
39390 (synopsis "Fuzzy string matching in Python")
39391 (description
39392 "This Python package implements fuzzing string matching
39393using Levenshtein distance.")
39394 (license license:expat)))
39395
39396(define-public python-three-merge
39397 (package
39398 (name "python-three-merge")
39399 (version "0.1.1")
39400 (source
39401 (origin
39402 ;; There are no tests in the PyPI tarball.
39403 (method git-fetch)
39404 (uri (git-reference
39405 (url "https://github.com/spyder-ide/three-merge")
39406 (commit (string-append "v" version))))
39407 (file-name (git-file-name name version))
39408 (sha256
39409 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39410 (build-system pyproject-build-system)
39411 (propagated-inputs
39412 (list python-diff-match-patch))
39413 (native-inputs
39414 (list python-pytest python-setuptools python-wheel))
39415 (home-page "https://github.com/spyder-ide/three-merge")
39416 (synopsis "Library for merging two strings with respect to a base one")
39417 (description
39418 "This package provides a Python library to perform a 3-way merge between
39419strings, based on @code{diff-match-patch}. This library performs merges at a
39420character level, as opposed to most VCS systems, which opt for a line-based
39421approach.")
39422 (license license:expat)))
39423
39424(define-public python-throttler
39425 (package
39426 (name "python-throttler")
39427 (version "1.2.3")
39428 (source
39429 (origin
39430 (method git-fetch)
39431 (uri (git-reference
39432 (url "https://github.com/uburuntu/throttler")
39433 (commit (string-append "v" version))))
39434 (file-name (git-file-name name version))
39435 (sha256
39436 (base32 "1k0a3hxih2qk3fxljcwbbpa723bshrvcqgz2lxgll32g1lfa3hnd"))))
39437 (build-system pyproject-build-system)
39438 (native-inputs
39439 (list python-aiohttp
39440 python-pytest
39441 python-pytest-asyncio
39442 python-setuptools))
39443 (home-page "https://github.com/uburuntu/throttler")
39444 (synopsis "Throttling with asyncio support")
39445 (description
39446 "This is a Python package for easy throttling with asyncio support.")
39447 (license license:expat)))
39448
39449(define-public python-tifffile
39450 (package
39451 (name "python-tifffile")
39452 (version "2025.10.4")
39453 (source
39454 (origin
39455 (method url-fetch)
39456 (uri (pypi-uri "tifffile" version))
39457 (sha256
39458 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39459 (build-system pyproject-build-system)
39460 ;; Tests require lfdfiles, which depends on tifffile
39461 (arguments (list #:tests? #f))
39462 (propagated-inputs
39463 (list python-numpy))
39464 (native-inputs
39465 (list python-setuptools))
39466 (home-page "https://www.lfd.uci.edu/~gohlke/")
39467 (synopsis "Read and write TIFF(r) files")
39468 (description
39469 "This package lets you read image and metadata from many bio-scientific
39470formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39471MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39472to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39473 (license license:bsd-3)))
39474
39475(define-public python-tiktoken
39476 (package
39477 (name "python-tiktoken")
39478 (version "0.9.0")
39479 (source
39480 (origin
39481 (method url-fetch)
39482 (uri (pypi-uri "tiktoken" version))
39483 (sha256
39484 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39485 (build-system cargo-build-system)
39486 (arguments
39487 (list
39488 #:install-source? #false
39489 #:imported-modules
39490 (append %pyproject-build-system-modules
39491 %cargo-build-system-modules)
39492 #:modules
39493 '((guix build cargo-build-system)
39494 ((guix build pyproject-build-system) #:prefix py:)
39495 (guix build utils))
39496 #:phases
39497 #~(modify-phases %standard-phases
39498 (replace 'build
39499 (assoc-ref py:%standard-phases 'build))
39500 (add-after 'install 'wrap
39501 (lambda _
39502 ;; Collection of python- and pyproject-build-system phases
39503 ;; between 'install and 'check.
39504 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39505 (assoc-ref py:%standard-phases 'add-install-to-path)
39506 (assoc-ref py:%standard-phases 'wrap)
39507 (assoc-ref py:%standard-phases 'create-entrypoints)
39508 (assoc-ref py:%standard-phases 'compile-bytecode)))
39509 (replace 'install
39510 (assoc-ref py:%standard-phases 'install)))))
39511 (propagated-inputs (list python-regex python-requests))
39512 (inputs (cargo-inputs 'python-tiktoken))
39513 (native-inputs
39514 (list python-setuptools
39515 python-setuptools-rust
39516 python-wheel
39517 python-wrapper))
39518 (home-page "https://github.com/openai/tiktoken/")
39519 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39520 (description
39521 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39522@code{OpenAI's} models.")
39523 (license license:expat)))
39524
39525(define-public python-timed-threads
39526 (package
39527 (name "python-timed-threads")
39528 (version "2.0.0")
39529 (source
39530 (origin
39531 (method git-fetch)
39532 (uri (git-reference
39533 (url "https://github.com/Mathics3/python-timed-threads/")
39534 (commit version)))
39535 (file-name (git-file-name name version))
39536 (sha256
39537 (base32 "062lml0dg13pi7b871q8fql5rff7g7gs6ljbb8rmm0vp98vqc5fp"))))
39538 (build-system pyproject-build-system)
39539 (native-inputs
39540 (list python-pytest python-setuptools))
39541 (home-page "https://github.com/Mathics3/python-timed-threads/")
39542 (synopsis "Ability to set absolute time deadlines on asynchronous threads")
39543 (description
39544 "This package adds the ability to set relative elapsed time deadlines on
39545asynchronous threads, and allows one thread to stop another by means of
39546raising an exception.")
39547 (license license:expat)))
39548
39549(define-public python-timeout-decorator
39550 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39551 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39552 (package
39553 (name "python-timeout-decorator")
39554 (version "0.5.0")
39555 (source
39556 (origin
39557 (method url-fetch)
39558 (uri (pypi-uri "timeout-decorator" version))
39559 (sha256
39560 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39561 (build-system pyproject-build-system)
39562 (arguments (list #:tests? #f))
39563 (native-inputs (list python-setuptools python-wheel))
39564 (home-page "https://github.com/pnpnpn/timeout-decorator")
39565 (synopsis "Timeout decorator")
39566 (description "This package provides a decorator that raises an error
39567when an operation takes longer than expected.")
39568 (license license:expat)))
39569
39570(define-public python-titlecase
39571 (package
39572 (name "python-titlecase")
39573 (version "2.4.1")
39574 (source
39575 (origin
39576 (method url-fetch)
39577 (uri (pypi-uri "titlecase" version))
39578 (sha256
39579 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39580 (build-system pyproject-build-system)
39581 (arguments
39582 (list
39583 #:test-backend #~'unittest))
39584 (native-inputs
39585 (list python-setuptools))
39586 (home-page "https://github.com/ppannuto/python-titlecase")
39587 (synopsis "Capitalize strings similar to book titles")
39588 (description
39589 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39590It capitalizes (predominantly English) strings in a way that is similar to
39591book titles, using the New York Times Manual of Style to leave certain words
39592lowercase.")
39593 (license license:expat)))
39594
39595(define-public python-tlsh
39596 (package
39597 (name "python-tlsh")
39598 (version "4.11.2")
39599 (home-page "https://github.com/trendmicro/tlsh")
39600 (source
39601 (origin
39602 (method git-fetch)
39603 (uri (git-reference (url home-page) (commit version)))
39604 (file-name (git-file-name name version))
39605 (sha256
39606 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39607 (build-system pyproject-build-system)
39608 (arguments
39609 (list
39610 #:phases
39611 #~(modify-phases %standard-phases
39612 (add-before 'build 'configure
39613 (lambda _
39614 (invoke "cmake" "."))) ;to generate tlsh_version.h
39615 (add-after 'configure 'chdir
39616 (lambda _
39617 (chdir "py_ext")))
39618 (replace 'check
39619 (lambda* (#:key tests? #:allow-other-keys)
39620 (when tests?
39621 (with-directory-excursion "../Testing"
39622 (invoke "./python_test.sh"))))))))
39623 (native-inputs (list cmake-minimal python-setuptools))
39624 (synopsis "Fuzzy matching library for Python")
39625 (description
39626 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39627Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39628value which can be used for similarity comparisons. Similar objects have
39629similar hash values, which allows for the detection of similar objects by
39630comparing their hash values. The byte stream should have a sufficient amount
39631of complexity; for example, a byte stream of identical bytes will not generate
39632a hash value.")
39633 (license license:asl2.0)))
39634
39635(define-public python-tlv8
39636 (package
39637 (name "python-tlv8")
39638 (version "0.10.0")
39639 (source
39640 (origin
39641 (method git-fetch)
39642 (uri (git-reference
39643 (url "https://github.com/jlusiardi/tlv8_python")
39644 (commit (string-append "v" version))))
39645 (file-name (git-file-name name version))
39646 (sha256
39647 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39648 (build-system pyproject-build-system)
39649 (native-inputs (list python-setuptools python-pytest))
39650 (home-page "https://github.com/jlusiardi/tlv8_python")
39651 (synopsis
39652 "Python library for @acronym{TLV, type-length-value} encoded data")
39653 (description
39654 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39655Represents type and length by one byte each, hence the name @code{tlv8}.")
39656 (license license:asl2.0)))
39657
39658(define-public python-tokenize-rt
39659 (package
39660 (name "python-tokenize-rt")
39661 (version "6.2.0")
39662 (source
39663 (origin
39664 (method git-fetch)
39665 (uri (git-reference
39666 (url "https://github.com/asottile/tokenize-rt")
39667 (commit (string-append "v" version))))
39668 (file-name (git-file-name name version))
39669 (sha256
39670 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39671 (build-system pyproject-build-system)
39672 (native-inputs (list python-pytest python-setuptools))
39673 (home-page "https://github.com/asottile/tokenize-rt")
39674 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39675 (description
39676 "This Python library is a wrapper around @code{tokenize} from the Python
39677standard library. It provides two additional tokens @code{ESCAPED_NL} and
39678@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39679and @code{tokens_to_src} to roundtrip.")
39680 (license license:expat)))
39681
39682(define-public python-tomlkit
39683 (package
39684 (name "python-tomlkit")
39685 (version "0.15.0")
39686 (source
39687 (origin
39688 (method git-fetch)
39689 (uri (git-reference
39690 (url "https://github.com/sdispater/tomlkit")
39691 (commit version)))
39692 (file-name (git-file-name name version))
39693 (sha256
39694 (base32 "00sv5x8j78zkirzh9rl89lkpwfwhkhrq4mql2p4rqws1j37zx88g"))))
39695 (build-system pyproject-build-system)
39696 (arguments
39697 (list
39698 #:phases
39699 #~(modify-phases %standard-phases
39700 ;; toml-test is submodule to
39701 ;; <https://github.com/toml-lang/toml-test>.
39702 (add-after 'unpack 'copy-toml-test-source
39703 (lambda _
39704 (copy-recursively
39705 #$(package-source (this-package-native-input "toml-test"))
39706 "tests/toml-test"))))))
39707 (native-inputs
39708 (list python-poetry-core
39709 python-pytest
39710 toml-test))
39711 (home-page "https://github.com/sdispater/tomlkit")
39712 (synopsis "Style-preserving TOML library")
39713 (description
39714 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39715preserves all comments, indentations, whitespace and internal element ordering,
39716and makes them accessible and editable via an intuitive API. It can also
39717create new TOML documents from scratch using the provided helpers. Part of the
39718implementation has been adapted, improved, and fixed from Molten.")
39719 (license license:expat)))
39720
39721(define-public python-toolrack
39722 (package
39723 (name "python-toolrack")
39724 (version "4.0.3")
39725 (source
39726 (origin
39727 (method git-fetch)
39728 (uri (git-reference
39729 (url "https://github.com/albertodonato/toolrack")
39730 (commit (string-append "v" version))))
39731 (file-name (git-file-name name version))
39732 (sha256
39733 (base32
39734 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39735 (build-system pyproject-build-system)
39736 (arguments
39737 (list
39738 #:phases
39739 #~(modify-phases %standard-phases
39740 (add-after 'unpack 'patch-/bin/sh
39741 (lambda _
39742 (substitute* "tests/aio/process_test.py"
39743 (("/bin/sh")
39744 (which "sh"))))))))
39745 (native-inputs
39746 (list python-pytest
39747 python-pytest-asyncio
39748 python-pytest-mock
39749 python-setuptools))
39750 (home-page "https://github.com/albertodonato/toolrack")
39751 (synopsis "Collection of Python utility functions and classes")
39752 (description "This package provides a collection of miscellaneous utility
39753functions and classes.")
39754 (license license:lgpl3+)))
39755
39756(define-public python-toolshed
39757 (package
39758 (name "python-toolshed")
39759 (version "0.4.8")
39760 (source
39761 (origin
39762 (method git-fetch)
39763 (uri (git-reference
39764 (url "https://github.com/brentp/toolshed")
39765 (commit (string-append "v" version))))
39766 (file-name (git-file-name name version))
39767 (sha256
39768 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39769 (build-system pyproject-build-system)
39770 (native-inputs
39771 (list python-pytest
39772 python-setuptools))
39773 (home-page "https://github.com/brentp/toolshed/")
39774 (synopsis "Collection of modules and functions for working with data")
39775 (description "This is a collection of well-tested, simple modules and
39776functions that aim to reduce boilerplate when working with data.")
39777 (license license:bsd-2)))
39778
39779(define-public python-toolz
39780 (package
39781 (name "python-toolz")
39782 (version "1.1.0")
39783 (source
39784 (origin
39785 (method git-fetch)
39786 (uri (git-reference
39787 (url "https://github.com/pytoolz/toolz")
39788 (commit version)))
39789 (file-name (git-file-name name version))
39790 (sha256
39791 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39792 (build-system pyproject-build-system)
39793 (arguments
39794 (list
39795 #:phases
39796 #~(modify-phases %standard-phases
39797 (add-after 'unpack 'set-version
39798 (lambda _
39799 (substitute* "pyproject.toml"
39800 (("\\[tool.setuptools-git-versioning\\]" all)
39801 (string-append "[tool.setuptools_scm]\n"
39802 "write_to = \"toolz/_version.py\"\n"
39803 all))))))))
39804 (native-inputs
39805 (list python-pytest
39806 python-setuptools
39807 ;; Project expects setuptools-git-versioning to build version, but
39808 ;; it does not support envar override as seuptools-scm.
39809 python-setuptools-scm))
39810 (home-page "https://github.com/pytoolz/toolz/")
39811 (synopsis "List processing tools and functional utilities")
39812 (description
39813 "This package provides a set of utility functions for iterators,
39814functions, and dictionaries.")
39815 (license license:bsd-3)))
39816
39817(define-public python-toposort
39818 (package
39819 (name "python-toposort")
39820 (version "1.10")
39821 (source
39822 (origin
39823 (method url-fetch)
39824 (uri (pypi-uri "toposort" version))
39825 (sha256
39826 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39827 (build-system pyproject-build-system)
39828 (arguments
39829 (list #:test-backend #~'custom
39830 #:test-flags #~(list "-m" "test.test_toposort")))
39831 (native-inputs (list python-setuptools))
39832 (home-page "https://gitlab.com/ericvsmith/toposort")
39833 (synopsis "Topological sort algorithm")
39834 (description
39835 "This package provides an implementation of a topological sort
39836algorithm.")
39837 (license license:asl2.0)))
39838
39839(define-public python-towncrier
39840 (package
39841 (name "python-towncrier")
39842 (version "25.8.0")
39843 (source
39844 (origin
39845 (method url-fetch)
39846 (uri (pypi-uri "towncrier" version))
39847 (sha256
39848 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39849 (build-system pyproject-build-system)
39850 (native-inputs
39851 (list git-minimal/pinned ;tests create git repositories
39852 python-hatchling
39853 python-pytest
39854 python-twisted))
39855 (propagated-inputs
39856 (list python-click
39857 python-jinja2))
39858 (home-page "https://towncrier.readthedocs.io/en/stable/")
39859 (synopsis "Manage release notes")
39860 (description
39861 "@code{towncrier} is a utility to produce useful, summarized news files
39862 (also known as changelogs) for a project.")
39863 (license license:expat)))
39864
39865(define-public python-tqdm
39866 (package
39867 (name "python-tqdm")
39868 (version "4.67.1")
39869 (source
39870 (origin
39871 (method url-fetch)
39872 (uri (pypi-uri "tqdm" version))
39873 (sha256
39874 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39875 (build-system pyproject-build-system)
39876 (arguments
39877 (list #:test-flags
39878 '(list "-o" "asyncio_mode=auto"
39879 "-k" "not perf and not test_rlock_creation")))
39880 (native-inputs
39881 (list python-pytest
39882 python-pytest-asyncio
39883 python-pytest-timeout
39884 python-setuptools
39885 python-setuptools-scm
39886 python-toml
39887 python-wheel))
39888 (home-page "https://github.com/tqdm/tqdm")
39889 (synopsis "Fast, extensible progress meter")
39890 (description
39891 "Make loops show a progress bar on the console by just wrapping any
39892iterable with @code{|tqdm(iterable)|}. Offers many options to define
39893design and layout.")
39894 (license (list license:mpl2.0 license:expat))))
39895
39896(define-public python-traitlets
39897 (package
39898 (name "python-traitlets")
39899 (version "5.14.3")
39900 (source
39901 (origin
39902 (method url-fetch)
39903 (uri (pypi-uri "traitlets" version))
39904 (sha256
39905 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39906 (build-system pyproject-build-system)
39907 ;; tests: 566 passed, 3 skipped, 1 warning
39908 (native-inputs
39909 (list python-hatchling
39910 python-pytest))
39911 (home-page "https://ipython.org")
39912 (synopsis "Configuration system for Python applications")
39913 (description
39914 "Traitlets is a framework that lets Python classes have attributes with
39915type checking, dynamically calculated default values, and ‘on change’
39916callbacks. The package also includes a mechanism to use traitlets for
39917configuration, loading values from files or from command line arguments. This
39918is a distinct layer on top of traitlets, so you can use traitlets in your code
39919without using the configuration machinery.")
39920 (license license:bsd-3)))
39921
39922(define-public python-translate-toolkit
39923 (package
39924 (name "python-translate-toolkit")
39925 (version "3.15.6")
39926 (source
39927 (origin
39928 (method url-fetch)
39929 (uri (pypi-uri "translate_toolkit" version))
39930 (sha256
39931 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39932 (build-system pyproject-build-system)
39933 (arguments
39934 (list
39935 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39936 #:test-flags
39937 ;; TODO: Some of the optional inputs are not packaged yet.
39938 #~(list #$@(map (lambda (file) (string-append "--ignore="
39939 "tests/translate/"
39940 file))
39941 (list "convert/test_ini2po.py"
39942 "convert/test_php2po.py"
39943 "convert/test_po2ini.py"
39944 "convert/test_po2php.py"
39945 "storage/test_cpo.py"
39946 "storage/test_fluent.py"
39947 "storage/test_ini.py"
39948 "storage/test_php.py"
39949 "storage/test_po.py"
39950 "storage/test_pypo.py"
39951 "storage/test_subtitles.py"))
39952 #$@(map (lambda (test) (string-append "--deselect="
39953 "tests/translate/storage/"
39954 test))
39955 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39956 ;; 0xff in position 0: invalid start byte
39957 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39958 ;; FileNotFoundError: [Errno 2] No such file or
39959 ;; directory: 'msgfmt'
39960 "test_mo.py::TestMOFile::test_output"
39961 ;; assert 0 == -16200
39962 "test_poheader.py::test_timezones"))
39963 #$@(map (lambda (test) (string-append "--deselect="
39964 "tests/translate/tools/"
39965 test))
39966 ;; XXX: Some issues with XML parsing.
39967 (list "test_junitmsgfmt.py::test_output"
39968 "test_pocount.py::test_output"
39969 "test_pocount.py::test_cases"))
39970 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
39971 (native-inputs
39972 (list python-pytest
39973 python-setuptools
39974 python-setuptools-scm))
39975 (propagated-inputs
39976 (list python-cwcwidth
39977 python-cheroot
39978 ;; python-aeidon
39979 ;; python-fluent
39980 python-iniparse
39981 python-lxml
39982 python-mistletoe
39983 python-phply
39984 python-pyparsing
39985 python-ruamel.yaml
39986 python-vobject))
39987 (home-page "https://toolkit.translatehouse.org")
39988 (synopsis "Tools and API for translation and localization engineering")
39989 (description
39990 "Tools and API for translation and localization engineering. It contains
39991several utilities, as well as an API for building localization tools.")
39992 (license license:gpl2+)))
39993
39994(define-public python-translitcodec
39995 (package
39996 (name "python-translitcodec")
39997 (version "0.7.0")
39998 (source
39999 (origin
40000 (method git-fetch)
40001 (uri (git-reference
40002 (url "https://github.com/claudep/translitcodec")
40003 (commit (string-append "version-" version))))
40004 (file-name (git-file-name name version))
40005 (sha256
40006 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
40007 (build-system pyproject-build-system)
40008 (native-inputs (list python-pytest python-setuptools))
40009 (home-page "https://github.com/claudep/translitcodec")
40010 (synopsis "Unicode to 8-bit charset transliteration codec")
40011 (description
40012 "This package contains codecs for transliterating ISO 10646 texts into
40013best-effort representations using smaller coded character sets (ASCII,
40014ISO 8859, etc.).")
40015 (license license:expat)))
40016
40017(define-public python-treelib
40018 (package
40019 (name "python-treelib")
40020 (version "1.8.0")
40021 (source
40022 (origin
40023 (method git-fetch)
40024 (uri (git-reference
40025 (url "https://github.com/caesar0301/treelib")
40026 (commit (string-append "v" version))))
40027 (file-name (git-file-name name version))
40028 (sha256
40029 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
40030 (patches
40031 (search-patches "python-treelib-remove-python2-compat.patch"))))
40032 (build-system pyproject-build-system)
40033 (native-inputs (list python-poetry-core python-pytest))
40034 (home-page "https://github.com/caesar0301/treelib")
40035 (synopsis "Implementation of a tree structure in Python")
40036 (description
40037 "This package provides a Python implementation of a tree structure.")
40038 (license license:asl2.0)))
40039
40040(define-public python-trio
40041 (package
40042 (name "python-trio")
40043 (version "0.33.0")
40044 (source
40045 (origin
40046 (method git-fetch)
40047 (uri (git-reference
40048 (url "https://github.com/python-trio/trio")
40049 (commit (string-append "v" version))))
40050 (file-name (git-file-name name version))
40051 (sha256
40052 (base32 "1ibkp7bgdv0k099szk8181rfn7jm60kh8kpfrkfr4pnwjd6abslf"))))
40053 (build-system pyproject-build-system)
40054 (arguments
40055 (list
40056 ;; tests: 507 passed, 45 skipped, 37 deselected
40057 #:test-flags
40058 #~(list
40059 #$@(if (package? (this-package-native-input "python-trustme"))
40060 #~()
40061 #~("--ignore=src/trio/_tests/test_dtls.py"
40062 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
40063 "--ignore=src/trio/_tests/test_ssl.py"))
40064 ;; Skip tests for the upstream repository's tooling.
40065 "--ignore=src/trio/_tests/tools"
40066 "-k" (string-join
40067 (list
40068 ;; Keyboard interrupts misbehave in the build sandbox.
40069 "not test_ki_in_repl"
40070 "test_KI_interrupts"
40071 "test_run_in_trio_thread_ki"
40072 ;; Somehow f'{check_errno_is_5!r}' evaluates
40073 ;; to "'check_errno_is_5'" instead of "<function ...>",
40074 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
40075 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
40076 ;; will probably be removed in version 0.35.
40077 "test_Matcher_check"
40078 "test_matcher_tostring"
40079 "test_raisesgroup_tostring"
40080 ;; Failure in name resolution.
40081 "test_SocketType_resolve"
40082 ;; OSError: protocol not found.
40083 "test_getprotobyname"
40084 ;; Drop pylint and jedi.
40085 "test_static_tool_sees_all_symbols")
40086 " and not ")
40087 "src/trio/_tests")
40088 #:phases
40089 #~(modify-phases %standard-phases
40090 (add-after 'unpack 'patch-pthread-path
40091 (lambda* (#:key inputs #:allow-other-keys)
40092 (substitute* '("src/trio/_core/_thread_cache.py"
40093 "src/trio/_tests/test_threads.py")
40094 (("ctypes.util.find_library\\(\"pthread\"\\)")
40095 (simple-format #f "~s"
40096 (search-input-file inputs "lib/libpthread.so.0"))))))
40097 (add-before 'check 'set-env
40098 (lambda _
40099 ;; Tests require a writable home.
40100 (setenv "HOME" "/tmp"))))))
40101 (native-inputs
40102 (append
40103 (if (supported-package? python-pyopenssl)
40104 (list python-pyopenssl)
40105 '())
40106 (if (supported-package? python-trustme)
40107 (list python-trustme)
40108 '())
40109 (list python-async-generator)
40110 (if (supported-package? python-cryptography)
40111 (list python-cryptography)
40112 '())
40113 (list python-pytest
40114 python-setuptools)))
40115 (propagated-inputs
40116 (list python-attrs
40117 python-idna
40118 python-outcome
40119 python-sniffio
40120 python-sortedcontainers))
40121 (home-page "https://github.com/python-trio/trio")
40122 ;; (home-page "https://trio.readthedocs.io")
40123 (synopsis "Friendly Python library for async concurrency and I/O")
40124 (description
40125 "Trio strives to be a production-quality, async/await-native I/O library
40126for Python. Like all async libraries, its main purpose is to help you write
40127programs that do multiple things at the same time with parallelized I/O.")
40128 ;; Either license applies.
40129 (license (list license:expat license:asl2.0))))
40130
40131(define-public python-trio-typing
40132 (package
40133 (name "python-trio-typing")
40134 (version "0.10.0")
40135 (source
40136 (origin
40137 (method git-fetch)
40138 (uri (git-reference
40139 (url "https://github.com/python-trio/trio-typing")
40140 (commit (string-append "v" version))))
40141 (file-name (git-file-name name version))
40142 (sha256
40143 (base32 "127zpngp6r87kapvx5bwcl5awhyrsykwmvnxrb67qv7yz1s4z278"))))
40144 (build-system pyproject-build-system)
40145 (arguments
40146 (list #:tests? #f )) ;no proper tests
40147 (native-inputs
40148 (list python-setuptools))
40149 (propagated-inputs
40150 (list python-async-generator
40151 python-importlib-metadata
40152 python-mypy-extensions
40153 python-packaging
40154 python-trio
40155 python-typing-extensions))
40156 (home-page "https://github.com/python-trio/trio-typing")
40157 (synopsis "Static type checking support for Trio and related projects")
40158 (description
40159 "This package provides:
40160
40161@itemize
40162@item PEP 561 typing stubs packages for the Trio project packages:
40163
40164@itemize
40165@item trio (@code{trio-stubs})
40166@item outcome (@code{outcome-stubs})
40167@item async_generator (@code{async_generator-stubs})
40168@end itemize
40169
40170@item A package @code{trio_typing} containing types that Trio programs often
40171want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
40172a mypy plugin that smooths over some limitations in the basic type hints.
40173@end itemize")
40174 ;; Either license applies.
40175 (license (list license:expat license:asl2.0))))
40176
40177(define-public python-trubar
40178 (package
40179 (name "python-trubar")
40180 (version "0.3.4")
40181 (source
40182 (origin
40183 (method url-fetch)
40184 (uri (pypi-uri "trubar" version))
40185 (sha256
40186 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
40187 (build-system pyproject-build-system)
40188 (arguments
40189 (list
40190 #:test-flags
40191 #~(list "-k" (string-join
40192 ;; AttributeError: module 'libcst' has no attribute
40193 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
40194 (list "not test_import_from_future"
40195 "test_inport_after_docstring"
40196 ;; AssertionError: Items in the second set but not
40197 ;; the first
40198 "test_walk_files")
40199 " and not "))))
40200 (native-inputs
40201 (list python-pytest
40202 python-setuptools
40203 python-wheel))
40204 (propagated-inputs
40205 (list python-libcst
40206 python-pyyaml))
40207 (home-page "https://github.com/janezd/trubar")
40208 (synopsis "Utility for translation of Python sources")
40209 (description
40210 "This package provides a tool for translation and localization of Python
40211programs via modification of source files. Trubar supports f-strings and does
40212not require any changes to the original source code, such as marking strings
40213for translation.")
40214 (license license:expat)))
40215
40216(define-public python-twine
40217 (package
40218 (name "python-twine")
40219 (version "6.2.0")
40220 (source
40221 (origin
40222 (method url-fetch)
40223 (uri (pypi-uri "twine" version))
40224 (sha256
40225 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
40226 (build-system pyproject-build-system)
40227 (arguments
40228 (list
40229 ;; tests: 228 passed, 1 deselected
40230 #:test-flags
40231 ;; Assertion is not equal for one tests.
40232 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
40233 (native-inputs
40234 (list python-pretend
40235 python-pytest
40236 python-pytest-socket
40237 python-setuptools
40238 python-setuptools-scm))
40239 (propagated-inputs
40240 (list python-id
40241 python-keyring
40242 python-packaging
40243 python-readme-renderer
40244 python-requests
40245 python-requests-toolbelt
40246 python-rfc3986
40247 python-rich
40248 python-urllib3))
40249 (home-page "https://github.com/pypa/twine")
40250 (synopsis "Collection of utilities for interacting with PyPI")
40251 (description
40252 "@code{twine} currently supports registering projects and uploading
40253distributions. It authenticates the user over HTTPS, allows them to pre-sign
40254their files and supports any packaging format (including wheels).")
40255 (license license:asl2.0)))
40256
40257(define-public python-twisted
40258 (package
40259 (name "python-twisted")
40260 (version "25.5.0")
40261 (source
40262 (origin
40263 (method git-fetch)
40264 (uri (git-reference
40265 (url "https://github.com/twisted/twisted")
40266 (commit (string-append "twisted-" version))))
40267 (file-name (git-file-name name version))
40268 (sha256
40269 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
40270 (build-system pyproject-build-system)
40271 (arguments
40272 (list
40273 ;; tests: skips=638, successes=9759
40274 #:test-backend #~'custom
40275 #:test-flags
40276 #~(list "-m" "twisted.trial"
40277 "--temp-directory=/tmp/_trial_temp"
40278 (string-append "-j" (number->string (min 8 (parallel-job-count))))
40279 "twisted")
40280 #:phases
40281 #~(modify-phases %standard-phases
40282 (add-after 'unpack 'disable-broken-tests
40283 (lambda _
40284 (for-each delete-file
40285 (list
40286 ;; No idea why they fail
40287 "src/twisted/test/test_log.py"
40288 ;; Network tests
40289 "src/twisted/conch/test/test_cftp.py"
40290 "src/twisted/internet/test/test_endpoints.py"
40291 "src/twisted/protocols/test/test_tls.py"
40292 "src/twisted/test/test_sslverify.py"
40293 "src/twisted/web/test/test_agent.py"
40294 "src/twisted/web/test/test_tap.py"
40295 ;; These need a git executable
40296 "src/twisted/python/test/test_release.py"
40297 ;; These leave behind a socket file, which breaks the
40298 ;; build with "...has an unsupported type"
40299 "src/twisted/internet/test/test_unix.py"
40300 "src/twisted/test/test_unix.py"
40301 ;; These complain about missing test modules.
40302 "src/twisted/test/test_failure.py"
40303 "src/twisted/web/test/test_http2.py"
40304 "src/twisted/conch/test/test_forwarding.py")))))))
40305 (propagated-inputs
40306 (list python-attrs
40307 python-automat
40308 python-bcrypt
40309 python-constantly
40310 python-hyperlink
40311 python-incremental
40312 python-typing-extensions
40313 python-zope-interface
40314 ;; [conch]
40315 (list python "tk")
40316 python-appdirs
40317 python-bcrypt
40318 python-cryptography
40319 ;; [http2]
40320 python-h2
40321 python-priority
40322 ;; [tls]
40323 python-idna
40324 python-pyopenssl
40325 python-service-identity
40326 ;; [serial]
40327 python-pyserial))
40328 (native-inputs
40329 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
40330 python-hatch-fancy-pypi-readme
40331 python-hatchling
40332 python-httpx
40333 python-hypothesis
40334 python-incremental
40335 python-pyhamcrest
40336 python-pytest))
40337 (home-page "https://twistedmatrix.com/")
40338 (synopsis "Asynchronous networking framework written in Python")
40339 (description
40340 "Twisted is an extensible framework for Python programming, with special
40341focus on event-based network programming and multiprotocol integration.")
40342 (license license:expat)))
40343
40344(define-public python-txredisapi
40345 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40346 ;; The latest version is 1.4.11, but it contains a bug:
40347 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40348 ;; patched in commit d2259a3.
40349 (revision "0"))
40350 (package
40351 (name "python-txredisapi")
40352 (version (git-version "1.4.11" revision commit))
40353 (source
40354 (origin
40355 (method git-fetch)
40356 ;; The source distribution on PyPi is missing test files:
40357 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40358 (uri (git-reference
40359 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40360 (commit commit)))
40361 (file-name (git-file-name name version))
40362 (sha256
40363 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40364 (build-system pyproject-build-system)
40365 (arguments
40366 (list #:test-backend #~'custom
40367 #:test-flags #~(list "-m" "twisted.trial" "tests")
40368 #:phases
40369 #~(modify-phases %standard-phases
40370 ;; The tests require a running Redis server.
40371 (add-before 'check 'start-redis
40372 (lambda _
40373 (invoke "redis-server" "--daemonize" "yes"))))))
40374 (propagated-inputs (list python-twisted))
40375 (native-inputs (list python-mock python-setuptools redis))
40376 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40377 (synopsis "Non-blocking Redis client for Python")
40378 (description "txredisapi is a non-blocking client driver for the Redis
40379database, written in Python. It uses Twisted for asynchronous communication
40380with Redis.")
40381 (license license:asl2.0))))
40382
40383(define-public python-typeapi
40384 (package
40385 (name "python-typeapi")
40386 (version "2.2.4")
40387 (source
40388 (origin
40389 (method url-fetch)
40390 (uri (pypi-uri "typeapi" version))
40391 (sha256
40392 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40393 (build-system pyproject-build-system)
40394 (arguments
40395 (list
40396 #:tests? #false)) ;there are none
40397 (propagated-inputs (list python-typing-extensions))
40398 (native-inputs (list python-hatchling))
40399 (home-page "https://pypi.org/project/typeapi/")
40400 (synopsis "Type hints")
40401 (description "The typeapi package provides an object-oriented interface
40402for introspecting PEP484 type hints at runtime, including forward references
40403that make use of the more recent PEP585 and PEP604 type hint features in
40404Python versions that don't natively support them.")
40405 (license license:expat)))
40406
40407(define-public python-typer
40408 (package
40409 (name "python-typer")
40410 ;; XXX: starting from 0.26.0, Typer vendors Click.
40411 (version "0.26.4")
40412 (source
40413 (origin
40414 (method git-fetch)
40415 (uri (git-reference
40416 (url "https://github.com/fastapi/typer")
40417 (commit version)))
40418 (file-name (git-file-name name version))
40419 (sha256
40420 (base32 "0cmk9wsnml1yykzs5sxfdww3bchh9f2f63cj6nirw39zilp1jjw0"))))
40421 (build-system pyproject-build-system)
40422 (arguments
40423 (list
40424 #:phases
40425 #~(modify-phases %standard-phases
40426 (add-before 'check 'pre-check
40427 (lambda _
40428 (setenv "HOME" "/tmp"))))
40429 #:test-flags
40430 #~(list "-k" "not test_cli"
40431 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40432 (native-inputs
40433 (list python-coverage ;this is required in tests
40434 python-pdm-backend
40435 python-pytest
40436 python-pytest-xdist))
40437 (propagated-inputs
40438 (list python-annotated-doc
40439 python-rich
40440 python-shellingham))
40441 (home-page "https://github.com/fastapi/typer")
40442 (synopsis "Typer builds CLI based on Python type hints")
40443 (description
40444 "Typer is a library for building CLI applications. It's based on Python
404453.6+ type hints.")
40446 (license license:expat)))
40447
40448;; Starting from 0.26.0, Typer vendors its own fork of Click (typer._click) and no longer
40449;; recognises subclasses of the real click.Context as the injected CLI
40450;; context, breaking some packages at import time. Keep until all dependents migrated.
40451(define-public python-typer-without-click
40452 (hidden-package
40453 (package
40454 (inherit python-typer)
40455 (version "0.25.1")
40456 (source
40457 (origin
40458 (method git-fetch)
40459 (uri (git-reference
40460 (url "https://github.com/fastapi/typer")
40461 (commit version)))
40462 (file-name (git-file-name "python-typer" version))
40463 (sha256
40464 (base32 "0z6k7qpd49wqvxl3q5jwq2kl0y3w8dxwxmp42qbkbvwixfqxg2qw"))))
40465 (propagated-inputs
40466 (list python-click
40467 python-typing-extensions
40468 python-annotated-doc
40469 python-rich
40470 python-shellingham))
40471 (arguments
40472 (substitute-keyword-arguments arguments
40473 ((#:test-flags flags #~'())
40474 ;; Ignore tests that fail due to Click error-message wording.
40475 ;; These happen because Click version is more recent than expected.
40476 #~(cons*
40477 (string-append "--deselect=tests/test_suggest_commands.py"
40478 "::test_typo_suggestion_disabled")
40479 (string-append "--ignore=tests/test_tutorial/test_commands/"
40480 "test_callback/test_tutorial001.py")
40481 (string-append "--ignore-glob=tests/test_tutorial/"
40482 "test_parameter_types/test_bool/test_tutorial0*.py")
40483 #$flags)))))))
40484
40485(define-public python-types-aiofiles
40486 (package
40487 (name "python-types-aiofiles")
40488 (version "25.1.0.20251011")
40489 (source
40490 (origin
40491 (method url-fetch)
40492 (uri (pypi-uri "types_aiofiles" version))
40493 (sha256
40494 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40495 (build-system pyproject-build-system)
40496 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40497 (native-inputs (list python-setuptools))
40498 (home-page "https://github.com/python/typeshed")
40499 (synopsis "Typing stubs for python-aiofiles")
40500 (description "This package providis typing stubs for python-aiofiles.")
40501 (license license:asl2.0)))
40502
40503(define-public python-types-colorama
40504 (package
40505 (name "python-types-colorama")
40506 (version "0.4.15.20250801")
40507 (source
40508 (origin
40509 (method url-fetch)
40510 (uri (pypi-uri "types_colorama" version))
40511 (sha256
40512 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40513 (build-system pyproject-build-system)
40514 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40515 (native-inputs
40516 (list python-setuptools))
40517 (home-page "https://github.com/python/typeshed")
40518 (synopsis "Typing stubs for colorama")
40519 (description "This package provides typing stubs for colorama.")
40520 (license license:asl2.0)))
40521
40522(define-public python-types-dataclasses
40523 (package
40524 (name "python-types-dataclasses")
40525 (version "0.6.6")
40526 (source
40527 (origin
40528 (method url-fetch)
40529 (uri (pypi-uri "types-dataclasses" version))
40530 (sha256
40531 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40532 (build-system pyproject-build-system)
40533 (arguments (list #:tests? #f)) ;no tests
40534 (native-inputs (list python-setuptools))
40535 (home-page "https://github.com/python/typeshed")
40536 (synopsis "Typing stubs for dataclasses")
40537 (description
40538 "This package provides a collection of library stubs for Python, with
40539static types.")
40540 (license license:asl2.0)))
40541
40542(define-public python-types-dateutil
40543 (package
40544 (name "python-types-dateutil")
40545 (version "2.9.0.20240316")
40546 (source
40547 (origin
40548 (method url-fetch)
40549 (uri (pypi-uri "types-python-dateutil" version))
40550 (sha256
40551 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40552 (build-system pyproject-build-system)
40553 (arguments (list #:tests? #f)) ; no tests
40554 (native-inputs
40555 (list python-pytest python-setuptools python-wheel))
40556 (home-page "https://github.com/python/typeshed")
40557 (synopsis "Typing stubs for python-dateutil")
40558 (description
40559 "This is a PEP 561 type stub package for the @code{python-dateutil}
40560package.")
40561 (license license:asl2.0)))
40562
40563(define-public python-types-docutils
40564 (package
40565 (name "python-types-docutils")
40566 (version "0.22.2.20251006")
40567 (source
40568 (origin
40569 (method url-fetch)
40570 (uri (pypi-uri "types_docutils" version))
40571 (sha256
40572 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40573 (build-system pyproject-build-system)
40574 (arguments (list #:tests? #f)) ;no tests
40575 (native-inputs (list python-setuptools))
40576 (home-page "https://github.com/python/typeshed")
40577 (synopsis "Typing stubs for docutils")
40578 (description "This package provides a collection of library stubs for
40579Python, with static types.")
40580 (license license:asl2.0)))
40581
40582(define-public python-types-freezegun
40583 (package
40584 (name "python-types-freezegun")
40585 (version "1.1.8")
40586 (source
40587 (origin
40588 (method url-fetch)
40589 (uri (pypi-uri "types-freezegun" version))
40590 (sha256
40591 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40592 (build-system pyproject-build-system)
40593 (arguments
40594 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40595 ;; right files from source, so ignore them for now.
40596 (list #:tests? #f))
40597 (native-inputs (list python-setuptools python-wheel))
40598 (home-page "https://github.com/python/typeshed")
40599 (synopsis "Typing stubs for @code{freezegun}")
40600 (description "This package contains typing stubs for for @code{freezegun}, a
40601very small subset the Python stubs contained in the complete @code{typeshed}
40602collection.")
40603 (license license:asl2.0)))
40604
40605(define-public python-types-orjson
40606 (package
40607 (name "python-types-orjson")
40608 (version "3.6.2")
40609 (source
40610 (origin
40611 (method url-fetch)
40612 (uri (pypi-uri "types-orjson" version))
40613 (sha256
40614 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40615 (build-system pyproject-build-system)
40616 (arguments (list #:tests? #f)) ;no tests
40617 (native-inputs (list python-setuptools))
40618 (home-page "https://github.com/python/typeshed")
40619 (synopsis "Typing stubs for orjson")
40620 (description "This is a PEP 561 type stub package for the @code{orjson}
40621package. It can be used by type-checking tools like mypy, PyCharm, pytype
40622etc. to check code that uses @code{orjson}.")
40623 (license license:asl2.0)))
40624
40625(define-public python-types-protobuf
40626 (package
40627 (name "python-types-protobuf")
40628 (version "3.20.1")
40629 (source (origin
40630 (method url-fetch)
40631 (uri (pypi-uri "types-protobuf" version))
40632 (sha256
40633 (base32
40634 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40635 (build-system pyproject-build-system)
40636 (arguments
40637 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40638 ;; right files from source, so ignore them for now.
40639 (list #:tests? #f))
40640 (native-inputs (list python-setuptools python-wheel))
40641 (home-page "https://github.com/python/typeshed")
40642 (synopsis "Typing stubs for @code{protobuf}")
40643 (description "This package contains typing stubs for @code{protobuf}, a
40644very small subset the Python stubs contained in the complete @code{typeshed}
40645collection.")
40646 (license license:asl2.0)))
40647
40648(define-public python-types-pyside6
40649 (package
40650 (name "python-types-pyside6")
40651 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40652 ;; variant.
40653 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40654 (revision . "0")))
40655 (version (git-version "6.10.1.1"
40656 (assoc-ref properties 'revision)
40657 (assoc-ref properties 'commit)))
40658 (source
40659 (origin
40660 (method git-fetch)
40661 (uri (git-reference
40662 (url "https://github.com/LumaPictures/cg-stubs")
40663 (commit (assoc-ref properties 'commit))))
40664 (file-name (git-file-name name version))
40665 (sha256
40666 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40667 (build-system pyproject-build-system)
40668 (arguments
40669 (list
40670 #:tests? #f ;XXX: all tests failed
40671 #:phases
40672 #~(modify-phases %standard-phases
40673 (add-after 'unpack 'select-pyside6
40674 (lambda _
40675 (chdir "pyside6"))))))
40676 (native-inputs
40677 (list python-hatchling))
40678 (home-page "https://github.com/LumaPictures/cg-stubs")
40679 (synopsis "Accurate stubs for PySide6")
40680 (description
40681 "This package provides PySide6 stubs produced with @code{mypy}'s official
40682stubgen tool to directly generate stubs, with a set of corrections applied.")
40683 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40684 ;; v2.1 . See file LICENSE for more details.
40685 ;;
40686 ;; MIT in pyproject.toml
40687 (license (list license:lgpl2.1+
40688 license:expat))))
40689
40690(define-public python-types-python-dateutil
40691 (package
40692 (name "python-types-python-dateutil")
40693 (version "2.9.0.20250708")
40694 (source
40695 (origin
40696 (method url-fetch)
40697 (uri (pypi-uri "types_python_dateutil" version))
40698 (sha256
40699 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40700 (build-system pyproject-build-system)
40701 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40702 (native-inputs (list python-setuptools))
40703 (home-page "https://github.com/python/typeshed")
40704 (synopsis "Typing stubs for python-dateutil")
40705 (description "This package providis typing stubs for python-dateutil.")
40706 (license license:asl2.0)))
40707
40708(define-public python-types-pytz
40709 (package
40710 (name "python-types-pytz")
40711 (version "2025.2.0.20250809")
40712 (source
40713 (origin
40714 (method url-fetch)
40715 (uri (pypi-uri "types_pytz" version))
40716 (sha256
40717 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40718 (build-system pyproject-build-system)
40719 (arguments
40720 (list #:tests? #f)) ;no tests provided
40721 (native-inputs (list python-setuptools))
40722 (home-page "https://github.com/python/typeshed")
40723 (synopsis "Typing stubs for pytz")
40724 (description "This package contains typing stubs for @code{pytz}, a very
40725small subset the Python stubs contained in the complete @code{typeshed}
40726collection.")
40727 (license license:asl2.0)))
40728
40729(define-public python-types-pyyaml
40730 (package
40731 (name "python-types-pyyaml")
40732 (version "6.0.12.20250915")
40733 (source
40734 (origin
40735 (method url-fetch)
40736 (uri (pypi-uri "types_pyyaml" version))
40737 (sha256
40738 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40739 (build-system pyproject-build-system)
40740 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40741 (native-inputs
40742 (list python-setuptools))
40743 (home-page " https://github.com/python/typeshed")
40744 (synopsis "Typing stubs for PyYAML")
40745 (description "This package provides typing stubs for @code{PyYAML}.")
40746 (license license:asl2.0)))
40747
40748(define-public python-types-regex
40749 (package
40750 (name "python-types-regex")
40751 (version "2025.9.18.20250921")
40752 (source
40753 (origin
40754 (method url-fetch)
40755 (uri (pypi-uri "types_regex" version))
40756 (sha256
40757 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40758 (build-system pyproject-build-system)
40759 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40760 (native-inputs (list python-setuptools))
40761 (home-page "https://github.com/python/typeshed")
40762 (synopsis "Typing stubs for regex")
40763 (description "This package provides typing stubs for regex.")
40764 (license license:asl2.0)))
40765
40766(define-public python-types-requests
40767 (package
40768 (name "python-types-requests")
40769 (version "2.32.4.20250611")
40770 (source
40771 (origin
40772 (method url-fetch)
40773 (uri (pypi-uri "types_requests" version))
40774 (sha256
40775 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40776 (build-system pyproject-build-system)
40777 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40778 (native-inputs
40779 (list python-setuptools))
40780 (propagated-inputs
40781 (list python-urllib3))
40782 (home-page "https://github.com/python/typeshed")
40783 (synopsis "Typing stubs for requests")
40784 (description "This package provides typing stubs for requests.")
40785 (license license:asl2.0)))
40786
40787(define-public python-types-setuptools
40788 (package
40789 (name "python-types-setuptools")
40790 (version "80.9.0.20250529")
40791 (source
40792 (origin
40793 (method url-fetch)
40794 (uri (pypi-uri "types_setuptools" version))
40795 (sha256
40796 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40797 (build-system pyproject-build-system)
40798 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40799 (native-inputs
40800 (list python-setuptools))
40801 (home-page "https://github.com/python/typeshed")
40802 (synopsis "Typing stubs for setuptools")
40803 (description "This package provides typing stubs for setuptools.")
40804 (license license:asl2.0)))
40805
40806(define-public python-types-simplejson
40807 (package
40808 (name "python-types-simplejson")
40809 (version "3.19.0.20241221")
40810 (source
40811 (origin
40812 (method url-fetch)
40813 (uri (pypi-uri "types_simplejson" version))
40814 (sha256
40815 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40816 (build-system pyproject-build-system)
40817 (arguments
40818 (list
40819 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40820 (native-inputs
40821 (list python-setuptools python-wheel))
40822 (home-page "https://github.com/python/typeshed")
40823 (synopsis "Typing stubs for simplejson")
40824 (description "Typing stubs for simplejson.")
40825 (license license:asl2.0)))
40826
40827(define-public python-types-toml
40828 (package
40829 (name "python-types-toml")
40830 (version "0.10.8.20240310")
40831 (source
40832 (origin
40833 (method url-fetch)
40834 (uri (pypi-uri "types-toml" version))
40835 (sha256
40836 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40837 (build-system pyproject-build-system)
40838 (arguments
40839 (list #:tests? #f)) ;no tests provided
40840 (native-inputs (list python-setuptools))
40841 (home-page "https://github.com/python/typeshed")
40842 (synopsis "Typing stubs for TOML")
40843 (description
40844 "This package contains typing stubs for TOML, a very small subset the
40845Python stubs contained in the complete @code{typeshed} collection.")
40846 (license license:asl2.0)))
40847
40848(define-public python-types-tqdm
40849 (package
40850 (name "python-types-tqdm")
40851 (version "4.67.0.20250809")
40852 (source
40853 (origin
40854 (method url-fetch)
40855 (uri (pypi-uri "types_tqdm" version))
40856 (sha256
40857 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40858 (build-system pyproject-build-system)
40859 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40860 (native-inputs (list python-setuptools))
40861 (propagated-inputs (list python-types-requests))
40862 (home-page "https://github.com/python/typeshed")
40863 (synopsis "Typing stubs for python-tqdm")
40864 (description "This package providis typing stubs for python-tqdm.")
40865 (license license:asl2.0)))
40866
40867(define-public python-types-ujson
40868 (package
40869 (name "python-types-ujson")
40870 (version "5.10.0.20250822")
40871 (source
40872 (origin
40873 (method url-fetch)
40874 (uri (pypi-uri "types_ujson" version))
40875 (sha256
40876 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40877 (build-system pyproject-build-system)
40878 (arguments
40879 (list #:tests? #f)) ;no tests provided
40880 (native-inputs (list python-setuptools))
40881 (home-page "https://github.com/python/typeshed")
40882 (synopsis "Typing stubs for ujson")
40883 (description
40884 "This is a PEP 561 type stub package for the ujson package. It can be
40885used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40886uses ujson.")
40887 (license license:asl2.0)))
40888
40889(define-public python-types-urllib3
40890 (package
40891 (name "python-types-urllib3")
40892 (version "1.26.25.14")
40893 (source
40894 (origin
40895 (method url-fetch)
40896 (uri (pypi-uri "types-urllib3" version))
40897 (sha256
40898 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40899 (build-system pyproject-build-system)
40900 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40901 (native-inputs
40902 (list python-setuptools))
40903 (home-page "https://github.com/python/typeshed")
40904 (synopsis "Typing stubs for urllib3")
40905 (description "This package provides typing stubs for urllib3.")
40906 (license license:asl2.0)))
40907
40908(define-public python-typeshed-client
40909 (package
40910 (name "python-typeshed-client")
40911 (version "2.8.2")
40912 (source
40913 (origin
40914 (method git-fetch)
40915 (uri (git-reference
40916 (url "https://github.com/JelleZijlstra/typeshed_client")
40917 (commit (string-append "v" version))))
40918 (file-name (git-file-name name version))
40919 (sha256
40920 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40921 (build-system pyproject-build-system)
40922 (arguments
40923 (list #:test-backend #~'custom
40924 #:test-flags #~(list "tests/test.py")))
40925 (native-inputs
40926 (list python-setuptools))
40927 (propagated-inputs
40928 (list python-importlib-resources
40929 python-typing-extensions))
40930 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40931 (synopsis "Library for accessing stubs in typeshed")
40932 (description
40933 "This package provides a library for accessing stubs in typeshed.")
40934 (license license:expat)))
40935
40936(define-public python-typing-inspect
40937 (package
40938 (name "python-typing-inspect")
40939 (version "0.9.0")
40940 (source
40941 (origin
40942 (method url-fetch)
40943 (uri (pypi-uri "typing_inspect" version))
40944 (sha256
40945 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40946 (build-system pyproject-build-system)
40947 (native-inputs
40948 (list python-pytest
40949 python-setuptools
40950 python-wheel))
40951 (propagated-inputs
40952 (list python-mypy-extensions
40953 python-typing-extensions))
40954 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40955 (synopsis "API for inspection of types in the Python @code{typing} module")
40956 (description
40957 "The @code{typing_inspect} module defines experimental API for runtime
40958inspection of types defined in the Python standard typing module.")
40959 (license license:expat)))
40960
40961(define-public python-typing-inspection
40962 (package
40963 (name "python-typing-inspection")
40964 (version "0.4.2")
40965 (source
40966 (origin
40967 (method git-fetch)
40968 (uri (git-reference
40969 (url "https://github.com/pydantic/typing-inspection")
40970 (commit (string-append "v" version))))
40971 (file-name (git-file-name name version))
40972 (sha256
40973 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
40974 (build-system pyproject-build-system)
40975 ;; tests: 89 passed, 3 skipped
40976 (native-inputs
40977 (list python-pytest
40978 python-hatchling))
40979 (propagated-inputs
40980 (list python-typing-extensions))
40981 (home-page "https://github.com/pydantic/typing-inspection")
40982 (synopsis "Runtime typing introspection tools")
40983 (description
40984 "@code{typing-inspection} provides tools to inspect type annotations at
40985runtime.")
40986 (license license:expat)))
40987
40988(define-public python-typogrify
40989 (package
40990 (name "python-typogrify")
40991 (version "2.1.0")
40992 (source
40993 (origin
40994 (method url-fetch)
40995 (uri (pypi-uri "typogrify" version))
40996 (sha256
40997 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
40998 (build-system pyproject-build-system)
40999 (arguments
41000 (list
41001 #:test-flags
41002 #~(list "--doctest-modules"
41003 "typogrify/filters.py"
41004 "typogrify/packages/titlecase/tests.py")))
41005 (native-inputs
41006 (list python-pytest
41007 python-hatchling))
41008 (propagated-inputs
41009 (list python-smartypants))
41010 (home-page "https://github.com/justinmayer/typogrify")
41011 (synopsis "Filters to transform text into typographically-improved HTML")
41012 (description
41013 "@code{typogrify} provides a set of custom filters that automatically
41014apply various transformations to plain text in order to yield
41015typographically-improved HTML. While often used in conjunction with Jinja and
41016Django template systems, the filters can be used in any environment.")
41017 (license license:bsd-3)))
41018
41019(define-public python-ua-parser
41020 (package
41021 (name "python-ua-parser")
41022 (version "0.10.0")
41023 (source
41024 (origin
41025 (method url-fetch)
41026 (uri (pypi-uri "ua-parser" version))
41027 (sha256
41028 (base32
41029 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
41030 (build-system pyproject-build-system)
41031 (arguments
41032 `(#:tests? #f)) ;no test suite in release
41033 (native-inputs
41034 (list python-pyyaml
41035 python-setuptools))
41036 (home-page "https://github.com/ua-parser/uap-python")
41037 (synopsis "User agent parser")
41038 (description
41039 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
41040 (license license:asl2.0)))
41041
41042(define-public python-ubelt
41043 (package
41044 (name "python-ubelt")
41045 (version "1.3.6")
41046 (source
41047 (origin
41048 (method git-fetch)
41049 (uri (git-reference
41050 (url "https://github.com/Erotemic/ubelt")
41051 (commit (string-append "v" version))))
41052 (file-name (git-file-name name version))
41053 (sha256
41054 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
41055 (build-system pyproject-build-system)
41056 (arguments
41057 (list
41058 ;; The builder user home doesn't match HOME, which causes this test to
41059 ;; fail.
41060 #:test-flags #~(list "-k" "not userhome")
41061 #:phases
41062 #~(modify-phases %standard-phases
41063 (add-before 'check 'pre-check
41064 (lambda _
41065 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
41066 (native-inputs
41067 (list python-pytest
41068 python-requests
41069 python-setuptools
41070 python-wheel
41071 python-xdoctest))
41072 (propagated-inputs
41073 (list python-ordered-set))
41074 (home-page "https://github.com/Erotemic/ubelt")
41075 (synopsis "Python library for hashing, caching, timing and more")
41076 (description
41077 "Ubelt is a small library of simple functions that extend the Python
41078standard library. It includes an @acronym{API, Application Programming
41079Interface} to simplify common problems such as caching, timing, computing
41080progress, among other things.")
41081 (license license:asl2.0)))
41082
41083(define-public python-uc-micro-py
41084 (package
41085 (name "python-uc-micro-py")
41086 (version "2.0.0")
41087 (source (origin
41088 (method git-fetch)
41089 (uri (git-reference
41090 (url "https://github.com/tsutsu3/uc.micro-py")
41091 (commit (string-append "v" version))))
41092 (file-name (git-file-name name version))
41093 (sha256
41094 (base32
41095 "06dx8zh0fa13aldqxhzghdnbbaqbb1dklbyqzdxy14dcbqmx92m3"))))
41096 (build-system pyproject-build-system)
41097 (native-inputs (list python-pytest python-setuptools))
41098 (home-page "https://github.com/tsutsu3/uc.micro-py")
41099 (synopsis "Unicode data files for linkify-it-py projects")
41100 (description "This package contains a micro subset of Unicode data files
41101for linkify-it-py projects.")
41102 (license license:expat)))
41103
41104(define-public python-udapi
41105 (package
41106 (name "python-udapi")
41107 (version "0.5.2")
41108 (source
41109 (origin
41110 (method git-fetch)
41111 (uri (git-reference
41112 (url "https://github.com/udapi/udapi-python")
41113 (commit version)))
41114 (file-name (git-file-name name version))
41115 (sha256
41116 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
41117 (build-system pyproject-build-system)
41118 (native-inputs
41119 (list python-pytest python-setuptools))
41120 (propagated-inputs
41121 (list python-colorama python-termcolor))
41122 (home-page "http://udapi.readthedocs.io")
41123 (synopsis "Framework for processing Universal Dependencies data")
41124 (description
41125 "This package is a Python library providing an API for processing
41126Universal Dependencies data.")
41127 (license license:gpl3+)))
41128
41129(define-public python-ujson
41130 (package
41131 (name "python-ujson")
41132 (version "5.10.0")
41133 (source
41134 (origin
41135 (method url-fetch)
41136 (uri (pypi-uri "ujson" version))
41137 (sha256
41138 (base32
41139 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
41140 (modules '((guix build utils)))
41141 (snippet
41142 #~(begin (delete-file-recursively "deps")))))
41143 (build-system pyproject-build-system)
41144 (arguments
41145 (list
41146 #:phases
41147 #~(modify-phases %standard-phases
41148 (add-after 'unpack 'link-to-system-double-conversion
41149 (lambda* (#:key inputs #:allow-other-keys)
41150 (let ((d-c (assoc-ref inputs "double-conversion")))
41151 (substitute* "setup.py"
41152 (("./deps/double-conversion/double-conversion\"")
41153 (string-append d-c "/include/double-conversion\""))
41154 (("-lstdc++" stdc)
41155 (string-append "-L" d-c "/lib\","
41156 " \"-ldouble-conversion\","
41157 " \"" stdc)))))))))
41158 (native-inputs
41159 (list double-conversion
41160 python-pytest
41161 python-setuptools
41162 python-setuptools-scm
41163 python-wheel))
41164 (home-page "https://github.com/ultrajson/ultrajson")
41165 (synopsis "Ultra fast JSON encoder and decoder for Python")
41166 (description
41167 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
41168bindings for Python 3.")
41169 (license license:bsd-3)))
41170
41171(define-public python-ukkonen
41172 (package
41173 (name "python-ukkonen")
41174 (version "1.0.1")
41175 (source
41176 (origin
41177 ;; There are no tests in the PyPI tarball.
41178 (method git-fetch)
41179 (uri (git-reference
41180 (url "https://github.com/asottile/ukkonen")
41181 (commit (string-append "v" version))))
41182 (file-name (git-file-name name version))
41183 (sha256
41184 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
41185 (build-system pyproject-build-system)
41186 (native-inputs (list python-pytest python-setuptools python-wheel))
41187 (propagated-inputs (list python-cffi))
41188 (home-page "https://github.com/asottile/ukkonen")
41189 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
41190 (description "This package is an implementation of of bounded Levenshtein
41191distance (Ukkonen).")
41192 (license license:expat)))
41193
41194(define-public python-ulid
41195 (package
41196 (name "python-ulid")
41197 (version "3.1.0")
41198 (source
41199 (origin
41200 (method git-fetch)
41201 (uri (git-reference
41202 (url "https://github.com/mdomke/python-ulid")
41203 (commit version)))
41204 (file-name (git-file-name name version))
41205 (sha256
41206 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
41207 (build-system pyproject-build-system)
41208 (arguments
41209 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
41210 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
41211 ;; 68 passed, 1 deselected in 2.55s
41212 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
41213 (native-inputs
41214 (list python-freezegun
41215 python-hatch-fancy-pypi-readme
41216 python-hatch-vcs
41217 python-hatchling
41218 python-pytest))
41219 (propagated-inputs
41220 (list python-pydantic))
41221 (home-page "https://github.com/mdomke/python-ulid")
41222 (synopsis "Universally unique lexicographically sortable identifier")
41223 (description
41224 "ULID is a universally unique lexicographically sortable identifier.
41225It is:
41226@itemize
41227@item 128-bit compatible with UUID
41228@item 1.21e+24 unique ULIDs per millisecond
41229@item lexicographically sortable!
41230@item canonically encoded as a 26 character string, as opposed to the 36
41231character UUID
41232@item uses Crockford's base32 for better efficiency and readability (5 bits
41233per character)
41234@item case insensitive
41235@item no special characters (URL safe)
41236@item monotonic sort order (correctly detects and handles the same
41237millisecond)
41238@end itemize")
41239 (license license:expat)))
41240
41241(define-public python-uncertainties
41242 (package
41243 (name "python-uncertainties")
41244 (version "3.2.3")
41245 (source
41246 (origin
41247 (method url-fetch)
41248 (uri (pypi-uri "uncertainties" version))
41249 (sha256
41250 (base32
41251 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
41252 (build-system pyproject-build-system)
41253 (native-inputs
41254 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
41255 (propagated-inputs (list python-numpy))
41256 (home-page "https://uncertainties.readthedocs.io/en/latest/")
41257 (synopsis "Calculations with uncertainties")
41258 (description
41259 "The uncertainties package transparently handles calculations with
41260numbers with uncertainties. It can also yield the derivatives of any
41261expression.")
41262 (license license:bsd-3)))
41263
41264(define-public python-unicode-linebreak
41265 (package
41266 (name "python-unicode-linebreak")
41267 (version "0.0.2")
41268 (source
41269 (origin
41270 (method git-fetch)
41271 (uri (git-reference
41272 (url "https://github.com/mondeja/py-unicode-linebreak")
41273 (commit (string-append "v" version))))
41274 (file-name (git-file-name name version))
41275 (sha256
41276 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
41277 (build-system pyproject-build-system)
41278 (arguments
41279 (list
41280 #:imported-modules `(,@%cargo-build-system-modules
41281 ,@%pyproject-build-system-modules)
41282 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41283 (guix build pyproject-build-system)
41284 (guix build utils))
41285 #:test-backend #~'unittest
41286 #:phases
41287 #~(modify-phases %standard-phases
41288 (add-after 'unpack 'prepare-cargo-build-system
41289 (lambda args
41290 (for-each
41291 (lambda (phase)
41292 (format #t "Running cargo phase: ~a~%" phase)
41293 (apply (assoc-ref cargo:%standard-phases phase)
41294 #:cargo-target #$(cargo-triplet)
41295 args))
41296 '(unpack-rust-crates
41297 configure
41298 check-for-pregenerated-files
41299 patch-cargo-checksums)))))))
41300 (native-inputs
41301 (append
41302 (list maturin
41303 rust
41304 `(,rust "cargo"))
41305 (or (and=> (%current-target-system)
41306 (compose list make-rust-sysroot))
41307 '())))
41308 (inputs (cargo-inputs 'unicode_linebreak))
41309 (home-page "https://github.com/mondeja/py-unicode-linebreak")
41310 (synopsis "Markdown paragraph wrapper")
41311 (description
41312 "This package provides a Markdown paragraph wrapper using Unicode Line
41313Breaking Algorithm written in Rust with Python bindings.")
41314 (license license:expat)))
41315
41316(define-public python-unicodedata2
41317 (package
41318 (name "python-unicodedata2")
41319 (version "16.0.0")
41320 (source
41321 (origin
41322 (method url-fetch)
41323 (uri (pypi-uri "unicodedata2" version))
41324 (sha256
41325 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
41326 (build-system pyproject-build-system)
41327 (native-inputs
41328 (list python-pytest
41329 python-setuptools))
41330 (home-page "https://github.com/fonttools/unicodedata2")
41331 (synopsis "Python unicodedata backport")
41332 (description "This package corresponds to the latest @code{unicodedata}
41333standard Python module.")
41334 (license license:asl2.0)))
41335
41336(define-public python-unicodeitplus
41337 (package
41338 (name "python-unicodeitplus")
41339 (version "0.3.1")
41340 (source
41341 (origin
41342 (method url-fetch)
41343 (uri (pypi-uri "unicodeitplus" version))
41344 (sha256
41345 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
41346 (build-system pyproject-build-system)
41347 (native-inputs
41348 (list python-pytest
41349 python-setuptools
41350 python-setuptools-scm))
41351 (propagated-inputs
41352 (list python-lark))
41353 (home-page "https://github.com/HDembinski/unicodeitplus")
41354 (synopsis "Convert simple LaTeX to an Unicode approximation")
41355 (description
41356 "This package provides a more complete LaTeX to Unicode converter than
41357@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
41358Backus-Naur Form} with the Lark library.")
41359 (license license:bsd-3)))
41360
41361(define-public python-unidecode
41362 (package
41363 (name "python-unidecode")
41364 (version "1.4.0")
41365 (source
41366 (origin
41367 (method url-fetch)
41368 (uri (pypi-uri "Unidecode" version))
41369 (sha256
41370 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
41371 (build-system pyproject-build-system)
41372 (native-inputs
41373 (list python-pytest python-setuptools))
41374 (home-page "https://pypi.org/project/Unidecode/")
41375 (synopsis "ASCII transliterations of Unicode text")
41376 (description
41377 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
41378useful when integrating with legacy code that doesn't support Unicode, or for
41379ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41380machine identifiers from human-readable Unicode strings that should still be
41381somewhat intelligible.")
41382 (license license:gpl2+)))
41383
41384(define-public python-unique-log-filter
41385 (package
41386 (name "python-unique-log-filter")
41387 (version "0.1.0")
41388 (source
41389 (origin
41390 (method git-fetch)
41391 (uri (git-reference
41392 (url "https://github.com/twizmwazin/unique_log_filter")
41393 (commit (string-append "v" version))))
41394 (file-name (git-file-name name version))
41395 (sha256
41396 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41397 (build-system pyproject-build-system)
41398 (arguments
41399 (list #:test-backend #~'custom
41400 #:test-flags #~(list "test_unique_log_filter.py")))
41401 (native-inputs (list python-flit-core))
41402 (home-page "https://github.com/twizmwazin/unique_log_filter")
41403 (synopsis "Log filter that removes duplicate log messages")
41404 (description
41405 "This library provides a filter for the @code{logging} module
41406from the Python standard library which allows removing duplicate log
41407messages.")
41408 (license license:bsd-2)))
41409
41410(define-public python-uniseg
41411 (package
41412 (name "python-uniseg")
41413 (version "0.10.0")
41414 (source
41415 (origin
41416 (method url-fetch)
41417 (uri (pypi-uri "uniseg" version))
41418 (sha256
41419 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41420 (build-system pyproject-build-system)
41421 (native-inputs
41422 (list python-pytest
41423 python-setuptools
41424 python-setuptools-scm))
41425 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41426 (synopsis "Python library to determine Unicode text segmentations")
41427 (description
41428 "Uniseg is a Python package used to determine Unicode text segmentations.
41429Supported segmentations include:
41430@enumerate
41431@item @dfn{Code point} (any value in the Unicode codespace)
41432@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41433multiple Unicode code points, e.g. \"G\" + acute-accent)
41434@item Word break
41435@item Sentence break
41436@item Line break
41437@end enumerate")
41438 (license license:expat)))
41439
41440(define-public python-universal-pathlib
41441 (package
41442 (name "python-universal-pathlib")
41443 (version "0.2.6")
41444 (source
41445 (origin
41446 (method git-fetch)
41447 (uri (git-reference
41448 (url "https://github.com/fsspec/universal_pathlib")
41449 (commit (string-append "v" version))))
41450 (file-name (git-file-name name version))
41451 (sha256
41452 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41453 (build-system pyproject-build-system)
41454 (arguments
41455 (list
41456 #:tests? #f)) ;requires network
41457 (native-inputs
41458 (list python-setuptools
41459 python-setuptools-scm))
41460 (propagated-inputs
41461 (list python-fsspec
41462 python-pathlib-abc))
41463 (home-page "https://github.com/fsspec/universal_pathlib")
41464 (synopsis
41465 "@code{pathlib} API extended to use @code{fsspec} backends")
41466 (description
41467 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41468API to support a variety of backend filesystems via filesystem_spec.")
41469 (license license:expat)))
41470
41471(define-public python-unpaddedbase64
41472 (package
41473 (name "python-unpaddedbase64")
41474 (version "2.1.0")
41475 (source
41476 (origin
41477 (method git-fetch)
41478 (uri (git-reference
41479 (url "https://github.com/matrix-org/python-unpaddedbase64")
41480 (commit (string-append "v" version))))
41481 (file-name (git-file-name name version))
41482 (sha256
41483 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41484 (build-system pyproject-build-system)
41485 (native-inputs (list python-poetry-core
41486 python-pytest
41487 python-setuptools
41488 python-wheel))
41489 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41490 (synopsis "Encode and decode Base64 without “=” padding")
41491 (description
41492 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41493using “=” characters. However this conveys no benefit so many protocols
41494choose to use Base64 without the “=” padding.")
41495 (license license:asl2.0)))
41496
41497(define-public python-update-checker
41498 (package
41499 (name "python-update-checker")
41500 (version "0.18.0")
41501 (source
41502 (origin
41503 (method url-fetch)
41504 (uri (pypi-uri "update-checker" version))
41505 (sha256
41506 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41507 (build-system pyproject-build-system)
41508 (native-inputs
41509 (list python-pytest
41510 python-setuptools))
41511 (propagated-inputs
41512 (list python-requests))
41513 (home-page "https://github.com/bboe/update_checker")
41514 (synopsis "Python module that will check for package updates")
41515 (description "This package provides a Python module that will check for
41516package updates.")
41517 (license license:bsd-2)))
41518
41519(define-public python-uri-template
41520 (package
41521 (name "python-uri-template")
41522 (version "1.3.0")
41523 (source
41524 (origin
41525 (method git-fetch)
41526 (uri (git-reference
41527 (url "https://gitlab.linss.com/open-source/python/uri-template")
41528 (commit (string-append "v" version))))
41529 (file-name (git-file-name name version))
41530 (sha256
41531 (base32 "0z1g5hpxzi5rh4xsra6bsvyg5qzmnx7a8j5q7rngmj9slcbcbhfz"))))
41532 (build-system pyproject-build-system)
41533 (arguments
41534 (list
41535 #:test-backend #~'custom
41536 #:test-flags #~(list "test.py")))
41537 (native-inputs
41538 (list python-setuptools
41539 python-setuptools-scm))
41540 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41541 (synopsis "RFC 6570 URI Template Processor")
41542 (description "This package implements URI Template expansion in strict
41543adherence to RFC 6570, but adds a few extensions.")
41544 (license license:expat)))
41545
41546(define-public python-uritools
41547 (package
41548 (name "python-uritools")
41549 (version "6.0.1")
41550 (source
41551 (origin
41552 (method git-fetch)
41553 (uri (git-reference
41554 (url "https://github.com/tkem/uritools/")
41555 (commit (string-append "v" version))))
41556 (file-name (git-file-name name version))
41557 (sha256
41558 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41559 (build-system pyproject-build-system)
41560 (native-inputs
41561 (list python-pytest
41562 python-setuptools))
41563 (home-page "https://github.com/tkem/uritools/")
41564 (synopsis "URI parsing, classification and composition")
41565 (description
41566 "This package provides RFC 3986 compliant functions for parsing,
41567classifying and composing URIs and URI references, largely replacing the
41568Python Standard Library's urllib.parse module.")
41569 (license license:expat)))
41570
41571(define-public python-urwid
41572 (package
41573 (name "python-urwid")
41574 (version "3.0.3")
41575 (source
41576 (origin
41577 (method url-fetch)
41578 (uri (pypi-uri "urwid" version))
41579 (sha256
41580 (base32
41581 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41582 (build-system pyproject-build-system)
41583 (arguments
41584 (list
41585 #:test-flags
41586 #~(list "tests"
41587 ;; According to Debian these tests are cursed.
41588 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41589 "--ignore=tests/test_vterm.py")))
41590 (native-inputs
41591 (list python-pytest python-setuptools python-setuptools-scm))
41592 (propagated-inputs
41593 (list python-wcwidth
41594 ;; [optional]
41595 python-pygobject
41596 python-pyzmq
41597 python-tornado
41598 python-pyserial
41599 python-twisted))
41600 (home-page "https://urwid.org")
41601 (synopsis "Console user interface library for Python")
41602 (description
41603 "Urwid is a curses-based UI/widget library for Python. It includes many
41604features useful for text console applications.")
41605 (license license:lgpl2.1+)))
41606
41607(define-public python-urwid-2
41608 (package
41609 (inherit python-urwid)
41610 (name "python-urwid")
41611 (version "2.6.16")
41612 (source
41613 (origin
41614 (method url-fetch)
41615 (uri (pypi-uri "urwid" version))
41616 (sha256
41617 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41618
41619(define-deprecated/public-alias python-urwid-3
41620 python-urwid) ;may be removed after 2025-11-12
41621
41622(define-public python-urwid-for-zulip-term
41623 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41624 ;; to pass, remove when no longer required.
41625 (hidden-package
41626 (package
41627 (inherit python-urwid)
41628 (version "2.1.2")
41629 (source
41630 (origin
41631 (method url-fetch)
41632 (uri (pypi-uri "urwid" version))
41633 (sha256
41634 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41635 (arguments
41636 (list #:tests? #f)))))
41637
41638(define-public python-urwid-readline
41639 (package
41640 (name "python-urwid-readline")
41641 (version "0.15.1")
41642 (source
41643 (origin
41644 (method git-fetch)
41645 (uri (git-reference
41646 (url "https://github.com/rr-/urwid_readline")
41647 (commit version)))
41648 (file-name (git-file-name name version))
41649 (sha256
41650 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41651 (build-system pyproject-build-system)
41652 (native-inputs
41653 (list python-pytest
41654 python-setuptools))
41655 (propagated-inputs
41656 (list python-urwid))
41657 (home-page "https://github.com/rr-/urwid_readline")
41658 (synopsis "Text input widget for urwid that supports readline shortcuts")
41659 (description
41660 "This package provides a textbox edit widget for @code{python-urwid} that
41661supports @code{readline} shortcuts.")
41662 (license license:expat)))
41663
41664(define-public python-urwidgets
41665 (package
41666 (name "python-urwidgets")
41667 (version "0.2.1")
41668 (source
41669 (origin
41670 (method url-fetch)
41671 (uri (pypi-uri "urwidgets" version))
41672 (sha256
41673 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41674 (build-system pyproject-build-system)
41675 (arguments
41676 (list #:tests? #f)) ;no tests
41677 (native-inputs
41678 (list python-setuptools))
41679 (propagated-inputs
41680 (list python-urwid-2))
41681 (home-page "https://github.com/AnonymouX47/urwidgets")
41682 (synopsis "Collection of widgets for urwid")
41683 (description
41684 "This package provides a collection of widgets for urwid.")
41685 (license license:expat)))
41686
41687(define-public python-urwidtrees
41688 (package
41689 (name "python-urwidtrees")
41690 (version "1.0.4")
41691 (source
41692 (origin
41693 (method git-fetch)
41694 ;; package author intends on distributing via github rather than pypi:
41695 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41696 (uri (git-reference
41697 (url "https://github.com/pazz/urwidtrees")
41698 (commit version)))
41699 (file-name (git-file-name name version))
41700 (sha256
41701 (base32
41702 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41703 (build-system pyproject-build-system)
41704 (arguments
41705 '(#:tests? #f)) ; no tests
41706 (propagated-inputs (list python-urwid))
41707 (native-inputs (list python-mock python-setuptools python-wheel))
41708 (home-page "https://github.com/pazz/urwidtrees")
41709 (synopsis "Tree widgets for urwid")
41710 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41711toolkit. Use it to build trees of widgets.")
41712 (license license:gpl3+)))
41713
41714(define-public python-user-agents
41715 (package
41716 (name "python-user-agents")
41717 (version "2.2.0")
41718 (source
41719 (origin
41720 (method git-fetch)
41721 (uri (git-reference
41722 (url "https://github.com/selwin/python-user-agents")
41723 (commit (string-append "v" version))))
41724 (file-name (git-file-name name version))
41725 (sha256
41726 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41727 (build-system pyproject-build-system)
41728 (arguments
41729 (list #:test-backend #~'unittest))
41730 (native-inputs
41731 (list python-setuptools))
41732 (propagated-inputs
41733 (list python-ua-parser))
41734 (home-page "https://github.com/selwin/python-user-agents")
41735 (synopsis "User Agent strings parsing library")
41736 (description
41737 "A library to identify devices (phones, tablets) and their capabilities by
41738parsing (browser/HTTP) user agent strings.")
41739 (license license:expat)))
41740
41741(define-public python-userpath
41742 (package
41743 (name "python-userpath")
41744 (version "1.9.2")
41745 (source
41746 (origin
41747 (method url-fetch)
41748 (uri (pypi-uri "userpath" version))
41749 (sha256
41750 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41751 (build-system pyproject-build-system)
41752 (arguments
41753 ;; See https://github.com/ofek/userpath/issues/43.
41754 ;; In Guix, tests try to find the temporary build directory in PATH, but
41755 ;; only the store output is present.
41756 (list #:tests? #f))
41757 (native-inputs (list python-hatchling python-pytest))
41758 (propagated-inputs (list python-click))
41759 (home-page "https://github.com/ofek/userpath")
41760 (synopsis "Add locations to the user's PATH")
41761 (description "This package provides a tool for modifying a user's PATH.")
41762 (license license:expat)))
41763
41764(define-public python-userspacefs
41765 (package
41766 (name "python-userspacefs")
41767 (version "3.2.1")
41768 (source
41769 (origin
41770 (method url-fetch)
41771 (uri (pypi-uri "userspacefs" version))
41772 (sha256
41773 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41774 (build-system pyproject-build-system)
41775 (arguments
41776 (list #:tests? #f ;no tests
41777 #:phases
41778 #~(modify-phases %standard-phases
41779 (add-after 'unpack 'hardcode-libfuse
41780 (lambda* (#:key inputs #:allow-other-keys)
41781 (substitute* "userspacefs/fusepy.py"
41782 (("^_libfuse_path.*")
41783 (string-append "_libfuse_path = '"
41784 (search-input-file inputs "lib/libfuse3.so")
41785 "'\n"))))))))
41786 (inputs (list fuse))
41787 (native-inputs (list python-setuptools))
41788 (propagated-inputs (list python-aiohttp python-typing-extensions))
41789 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41790 (synopsis "User-space file systems for Python")
41791 (description
41792 "@code{userspacefs} is a library that allows you to easily write
41793user-space file systems in Python.")
41794 (license license:gpl3+)))
41795
41796(define-public python-utils
41797 (package
41798 (name "python-utils")
41799 (version "3.9.1")
41800 (source
41801 (origin
41802 (method url-fetch)
41803 (uri (pypi-uri "python_utils" version))
41804 (sha256
41805 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41806 (build-system pyproject-build-system)
41807 (native-inputs
41808 (list python-pytest
41809 python-pytest-asyncio
41810 python-setuptools))
41811 (propagated-inputs
41812 (list python-loguru
41813 python-typing-extensions))
41814 (home-page "https://github.com/WoLpH/python-utils")
41815 (synopsis "Convenient utilities not included with the standard Python install")
41816 (description
41817 "Python Utils is a collection of small Python functions and classes
41818which make common patterns shorter and easier.")
41819 (license license:bsd-2)))
41820
41821(define-public python-uuid6
41822 (package
41823 (name "python-uuid6")
41824 (version "2025.0.1")
41825 (source
41826 (origin
41827 (method git-fetch)
41828 (uri (git-reference
41829 (url "https://github.com/oittaa/uuid6-python")
41830 (commit version)))
41831 (file-name (git-file-name name version))
41832 (sha256
41833 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41834 (build-system pyproject-build-system)
41835 (arguments
41836 (list
41837 #:test-flags
41838 ;; Test is time based: AssertionError: 13987034766.015247 !=
41839 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41840 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41841 (native-inputs
41842 (list python-pytest
41843 python-setuptools
41844 python-setuptools-scm))
41845 (home-page "https://github.com/oittaa/uuid6-python")
41846 (synopsis "Time-based UUID formats which are suited for use as a database key")
41847 (description
41848 "This module extends immutable UUID objects (the UUID class) with the
41849functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41850@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41851 (license license:expat)))
41852
41853(define-public python-validate-email
41854 (package
41855 (name "python-validate-email")
41856 (version "1.3")
41857 (source
41858 (origin
41859 (method url-fetch)
41860 (uri (pypi-uri "validate_email" version))
41861 (sha256
41862 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41863 (build-system pyproject-build-system)
41864 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41865 (native-inputs
41866 (list python-setuptools))
41867 (home-page "https://github.com/syrusakbary/validate_email")
41868 (synopsis "Verifies if an email address is valid and really exists")
41869 (description
41870 "@code{validate_email} can be used to verify if an email address is
41871valid and really exists.")
41872 (license license:lgpl3+)))
41873
41874(define-public python-validators
41875 ;; TODO: Move to (gnu packages python-web) or (gnu packages python-crypto).
41876 (package
41877 (name "python-validators")
41878 (version "0.35.0")
41879 (source
41880 (origin
41881 (method git-fetch)
41882 (uri (git-reference
41883 (url "https://github.com/kvesteri/validators")
41884 (commit version)))
41885 (file-name (git-file-name name version))
41886 (sha256
41887 (base32 "1q4mhcr10f22f8lwbsplhjyy0m3axddawd3mcax7qzm6p8lj6ybg"))))
41888 (build-system pyproject-build-system)
41889 (native-inputs
41890 (list python-pytest
41891 python-setuptools))
41892 (propagated-inputs
41893 (list python-eth-hash))
41894 (home-page "https://github.com/kvesteri/validators")
41895 (synopsis "Data validation library")
41896 (description
41897 "This package contains validators for different things such as email
41898addresses, IP addresses, URLs, hashes and more. It has been designed to be
41899easy to use and not require defining a schema or form just to validate some
41900input.")
41901 (license license:expat)))
41902
41903(define-public python-valkey
41904 (package
41905 (name "python-valkey")
41906 (version "6.1.1")
41907 (source
41908 (origin
41909 (method git-fetch)
41910 (uri (git-reference
41911 (url "https://github.com/valkey-io/valkey-py")
41912 (commit (string-append "v" version))))
41913 (file-name (git-file-name name version))
41914 (sha256
41915 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41916 (build-system pyproject-build-system)
41917 (arguments
41918 ;; XXX: A lot of tests fail with ConnectionError
41919 ;; Maybe we need to spawn a valkey server?
41920 (list #:tests? #f))
41921 (native-inputs
41922 (list python-setuptools))
41923 (home-page "https://github.com/valkey-io/valkey-py")
41924 (synopsis "Python client for Valkey")
41925 (description
41926 "This package provides a python client for the @code{Valkey} key-value
41927store, forked from redis-py.")
41928 (license license:expat)))
41929
41930;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41931;; package.
41932(define-public python-vcversioner
41933 (package
41934 (name "python-vcversioner")
41935 (version "2.16.0.0")
41936 (source
41937 (origin
41938 (method url-fetch)
41939 (uri (pypi-uri "vcversioner" version))
41940 (sha256
41941 (base32
41942 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41943 (build-system pyproject-build-system)
41944 (arguments
41945 (list #:tests? #f)) ;no tests in PyPI archive
41946 (native-inputs
41947 (list python-setuptools))
41948 (home-page "https://github.com/habnabit/vcversioner")
41949 (synopsis "Python library for version number discovery")
41950 (description
41951 "Vcversioner is a Python library that inspects tagging information in a
41952variety of version control systems in order to discover version numbers.")
41953 (license license:isc)))
41954
41955(define-public python-vdf
41956 (package
41957 (name "python-vdf")
41958 (version "3.4")
41959 (source
41960 (origin
41961 (method git-fetch) ; no tests in PyPI release
41962 (uri (git-reference
41963 (url "https://github.com/ValvePython/vdf")
41964 (commit (string-append "v" version))))
41965 (file-name (git-file-name name version))
41966 (sha256
41967 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
41968 (build-system pyproject-build-system)
41969 (native-inputs
41970 (list python-pytest python-setuptools))
41971 (home-page "https://github.com/ValvePython/vdf")
41972 (synopsis "Work with Valve's VDF text format")
41973 (description
41974 "This package provides @code{python-vdf}, a library for working with
41975 Valve's VDF text format.")
41976 (license license:expat)))
41977
41978(define-public python-vendetect
41979 (package
41980 (name "python-vendetect")
41981 (version "0.0.3")
41982 (source
41983 (origin
41984 (method url-fetch)
41985 (uri (pypi-uri "vendetect" version))
41986 (sha256
41987 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
41988 (build-system pyproject-build-system)
41989 (propagated-inputs (list python-copydetect python-rich))
41990 (native-inputs (list python-hatchling python-pytest))
41991 (home-page "https://github.com/trailofbits/vendetect")
41992 (synopsis "Detect vendored and copy-pasted code")
41993 (description
41994 "Vendetect helps identify copied or vendored code between repositories,
41995making it easier to detect when code has been copied with or without
41996attribution. It uses similarity detection algorithms to compare code files
41997and highlight matching sections.")
41998 (license license:agpl3+)))
41999
42000;; XXX: No updates since 2017.
42001(define-public python-verboselogs
42002 (package
42003 (name "python-verboselogs")
42004 (version "1.7")
42005 (source
42006 (origin
42007 (method url-fetch)
42008 (uri (pypi-uri "verboselogs" version))
42009 (sha256
42010 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
42011 (build-system pyproject-build-system)
42012 (arguments
42013 (list
42014 #:test-flags
42015 ;; Do not run pylint plugin test, as astroid is an old unsupported
42016 ;; version.
42017 #~(list "-k" "not test_pylint_plugin"
42018 "verboselogs/tests.py")))
42019 (native-inputs
42020 (list python-mock
42021 python-pytest
42022 python-setuptools))
42023 (home-page "https://verboselogs.readthedocs.io")
42024 (synopsis "Verbose logging level for Python's logging module")
42025 (description
42026 "The @code{verboselogs} package extends Python's @code{logging} module to
42027add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
42028 (license license:expat)))
42029
42030(define-public python-verlib2
42031 (package
42032 (name "python-verlib2")
42033 (version "0.3.1")
42034 (source
42035 (origin
42036 (method git-fetch)
42037 (uri (git-reference
42038 (url "https://github.com/pyveci/verlib2")
42039 (commit (string-append "v" version))))
42040 (file-name (git-file-name name version))
42041 (sha256
42042 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
42043 (build-system pyproject-build-system)
42044 (native-inputs
42045 (list python-pretend python-pytest python-setuptools))
42046 (home-page "https://github.com/pyveci/verlib2")
42047 (synopsis "Python versioning utilities")
42048 (description
42049 "This package provides a standalone variant of @code{distutils.version} and
42050@code{packaging.version}, without anything else.")
42051 (license license:bsd-2)))
42052
42053;; XXX: No updates since 2018, consider to remove when fails to build, it's a
42054;; leaf package.
42055(define-public python-version
42056 ;; No version tags available in the git repo; just using bare commit instead.
42057 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
42058 (revision "1"))
42059 (package
42060 (name "python-version")
42061 (version (git-version "0.0.2" revision commit))
42062 (source
42063 (origin
42064 (method git-fetch)
42065 (uri (git-reference
42066 (url "https://gitlab.com/halfak/python_version")
42067 (commit commit)))
42068 (file-name (git-file-name name version))
42069 (sha256
42070 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
42071 (build-system pyproject-build-system)
42072 (arguments
42073 (list #:tests? #f)) ;no tests
42074 (native-inputs
42075 (list python-setuptools))
42076 (home-page "https://gitlab.com/halfak/python_version")
42077 (synopsis "Python version checking utility")
42078 (description
42079 "This package provides a simple utility for checking the python version.")
42080 (license license:expat))))
42081
42082(define-public python-versioneer
42083 (package
42084 (name "python-versioneer")
42085 (version "0.29")
42086 (source
42087 (origin
42088 (method url-fetch)
42089 (uri (pypi-uri "versioneer" version))
42090 (sha256
42091 (base32
42092 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
42093 (patches (search-patches "python-versioneer-guix-support.patch"))))
42094 (build-system pyproject-build-system)
42095 (arguments
42096 (list
42097 ;; Minimize test requirements.
42098 #:test-flags
42099 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
42100 "--ignore=test/git/test_invocations.py"
42101 "--ignore=test/test_render.py")
42102 #:phases
42103 #~(modify-phases %standard-phases
42104 (add-before 'check 'pre-check
42105 (lambda _
42106 (invoke "python" "setup.py" "make_versioneer"
42107 "make_long_version_py_git"))))))
42108 (native-inputs
42109 (list git-minimal/pinned
42110 python-pytest
42111 python-setuptools))
42112 (propagated-inputs
42113 (list python-tomli))
42114 (home-page "https://github.com/python-versioneer/python-versioneer")
42115 (synopsis "Version-string management for VCS-controlled trees")
42116 (description
42117 "@code{versioneer} is a tool for managing a recorded version number in
42118distutils-based python projects. The goal is to remove the tedious and
42119error-prone \"update the embedded version string\" step from your release
42120process.")
42121 (license license:unlicense)))
42122
42123(define-public python-verspec
42124 (package
42125 (name "python-verspec")
42126 (version "0.1.0")
42127 (source
42128 (origin
42129 (method url-fetch)
42130 (uri (pypi-uri "verspec" version))
42131 (sha256
42132 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
42133 (build-system pyproject-build-system)
42134 (arguments
42135 (list
42136 #:phases
42137 #~(modify-phases %standard-phases
42138 (add-before 'check 'pre-check
42139 (lambda _
42140 (invoke "touch" "test/__init__.py"))))))
42141 (native-inputs
42142 (list python-pretend
42143 python-pytest
42144 python-setuptools))
42145 (home-page "https://github.com/jimporter/verspec")
42146 (synopsis "Flexible version handling for Python")
42147 (description
42148 "This Python library handles software versions and specifiers. It is
42149adapted from the @code{packaging} package.")
42150 (license (list license:bsd-2 license:asl2.0))))
42151
42152(define-public python-vine
42153 (package
42154 (name "python-vine")
42155 (version "5.1.0")
42156 (source
42157 (origin
42158 (method url-fetch)
42159 (uri (pypi-uri "vine" version))
42160 (sha256
42161 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
42162 (build-system pyproject-build-system)
42163 (arguments
42164 (list
42165 #:test-flags
42166 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
42167 #~(list "-k" (string-join
42168 (list "not test_evaluate"
42169 "test_reverse"
42170 "test_cancel"
42171 "test_throw")
42172 " and not "))))
42173 (native-inputs
42174 (list python-pytest python-setuptools python-wheel))
42175 (home-page "https://github.com/celery/vine")
42176 (synopsis "Promises for Python")
42177 (description
42178 "@code{vine} provides a special implementation of promises in that it can
42179be used both for \"promise of a value\" and lazy evaluation. The biggest
42180upside for this is that everything in a promise can also be a promise,
42181e.g. filters, callbacks and errbacks can all be promises.")
42182 (license license:bsd-3)))
42183
42184(define-public python-virtualenv
42185 (package
42186 (name "python-virtualenv")
42187 (version "20.35.4")
42188 (source
42189 (origin
42190 (method git-fetch)
42191 (uri (git-reference
42192 (url "https://github.com/pypa/virtualenv")
42193 (commit version)))
42194 (file-name (git-file-name name version))
42195 (sha256
42196 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
42197 (build-system pyproject-build-system)
42198 (arguments
42199 (list
42200 ;; tests: 347 passed, 43 skipped, 8 deselected
42201 #:test-flags
42202 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
42203 (string-join ls "::")))
42204 '(("discovery/py_info/test_py_info.py"
42205 "test_fallback_existent_system_executable")
42206 ("discovery/test_discovery.py"
42207 "test_get_paths_no_path_env")
42208 ("create/via_global_ref/test_build_c_ext.py"
42209 "test_can_build_c_extensions[cpython3-posix]")
42210 ("create/via_global_ref/test_build_c_ext.py"
42211 "test_can_build_c_extensions[venv]")
42212 ("create/test_creator.py"
42213 "test_create_distutils_cfg[cpython3-posix]")
42214 ("create/test_creator.py"
42215 "test_create_distutils_cfg[venv]")
42216 ("seed/embed/test_bootstrap_link_via_app_data.py"
42217 "test_seed_link_via_app_data[True]")
42218 ("seed/embed/test_bootstrap_link_via_app_data.py"
42219 "test_seed_link_via_app_data[False]"))))))
42220 (native-inputs
42221 (list python-flaky
42222 python-hatch-vcs
42223 python-hatchling
42224 python-packaging
42225 python-pytest
42226 python-pytest-env
42227 python-pytest-freezer
42228 python-pytest-mock
42229 python-pytest-timeout
42230 python-setuptools
42231 python-time-machine))
42232 (propagated-inputs
42233 (list python-distlib
42234 python-filelock
42235 python-platformdirs))
42236 (home-page "https://virtualenv.pypa.io/")
42237 (synopsis "Virtual Python environment builder")
42238 (description
42239 "Virtualenv is a tool to create isolated Python environments.")
42240 (license license:expat)))
42241
42242(define-public python-vncdotool
42243 (package
42244 (name "python-vncdotool")
42245 (version "1.2.0")
42246 (source
42247 (origin
42248 (method git-fetch)
42249 (uri (git-reference
42250 (url "http://github.com/sibson/vncdotool")
42251 (commit (string-append "v" version))))
42252 (file-name (git-file-name name version))
42253 (sha256
42254 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
42255 (build-system pyproject-build-system)
42256 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
42257 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
42258 python-setuptools python-wheel))
42259 (home-page "http://github.com/sibson/vncdotool")
42260 (synopsis "Command line VNC client")
42261 (description
42262 "This package provides a Python command line VNC client. It can be
42263useful to automating interactions with virtual machines or hardware devices
42264that are otherwise difficult to control.")
42265 (license license:expat)))
42266
42267(define-public python-vncdotool-bootstrap
42268 (hidden-package
42269 (package/inherit python-vncdotool
42270 (arguments (list #:tests? #f))
42271 (native-inputs (list python-pexpect python-pytest python-setuptools
42272 python-wheel)))))
42273
42274(define-public python-vobject
42275 (package
42276 (name "python-vobject")
42277 (version "0.9.9")
42278 (source (origin
42279 (method url-fetch)
42280 (uri (pypi-uri "vobject" version))
42281 (sha256
42282 (base32
42283 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
42284 (build-system pyproject-build-system)
42285 (arguments
42286 '(;; The test suite relies on some non-portable Windows interfaces. Tests
42287 ;; are rewokred on master's HEAD.
42288 #:tests? #f))
42289 (native-inputs
42290 (list python-setuptools))
42291 (propagated-inputs
42292 (list python-dateutil
42293 python-pytz
42294 python-six)) ;it's dropped on master's HEAD
42295 (home-page "https://py-vobject.github.io/")
42296 (synopsis "Parse and generate vCard and vCalendar files")
42297 (description
42298 "Vobject is intended to be a full featured Python package for parsing
42299and generating vCard and vCalendar files. Currently, iCalendar files are
42300supported and well tested. vCard 3.0 files are supported, and all data should
42301be imported, but only a few components are understood in a sophisticated way.")
42302 (license license:asl2.0)))
42303
42304(define-public python-voluptuous
42305 (package
42306 (name "python-voluptuous")
42307 (version "0.15.2")
42308 (source
42309 (origin
42310 (method url-fetch)
42311 (uri (pypi-uri "voluptuous" version))
42312 (sha256
42313 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
42314 (build-system pyproject-build-system)
42315 (native-inputs
42316 (list python-pytest
42317 python-setuptools))
42318 (home-page "https://github.com/alecthomas/voluptuous")
42319 (synopsis "Python data validation library")
42320 (description
42321 "Voluptuous is a Python data validation library. It is primarily
42322intended for validating data coming into Python as JSON, YAML, etc.")
42323 (license license:bsd-3)))
42324
42325(define-public python-wadler-lindig
42326 (package
42327 (name "python-wadler-lindig")
42328 (version "0.1.7")
42329 (source
42330 (origin
42331 ;; GitHub includes the tests, unlike the PyPI tarball
42332 (method git-fetch)
42333 (uri (git-reference
42334 (url "https://github.com/patrick-kidger/wadler_lindig")
42335 (commit (string-append "v" version))))
42336 (file-name (git-file-name name version))
42337 (sha256
42338 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
42339 (build-system pyproject-build-system)
42340 (native-inputs (list python-hatchling python-pytest python-numpy))
42341 (home-page "https://docs.kidger.site/wadler_lindig")
42342 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
42343 (description
42344 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
42345library for Python that implements a simplified version of the Wadler-Lindig
42346algorithm. Designed to consume less horizontal space than Python's
42347built-in pprint.pprint, it produces compact, well-formatted representations
42348even for complex custom types.")
42349 (license license:asl2.0)))
42350
42351(define-public python-wand
42352 (package
42353 (name "python-wand")
42354 (version "0.7.2")
42355 (source
42356 (origin
42357 (method git-fetch)
42358 (uri (git-reference
42359 (url "https://github.com/emcconville/wand")
42360 (commit version)))
42361 (file-name (git-file-name name version))
42362 (sha256
42363 (base32 "0h6r9mk66w5wk8g2rfx6rlh26dvkix2rr08kv38bmqvg34kjz6fm"))))
42364 (build-system pyproject-build-system)
42365 (arguments
42366 (list
42367 #:phases
42368 #~(modify-phases %standard-phases
42369 (add-after 'unpack 'hardcode-lib-path
42370 (lambda _
42371 (substitute* "wand/api.py"
42372 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42373 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42374 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42375 "\".Q16\"")))))))
42376 (native-inputs
42377 (list python-setuptools python-pytest))
42378 (inputs
42379 (list imagemagick))
42380 (home-page "https://docs.wand-py.org/")
42381 (synopsis "MagickWand API binding for Python")
42382 (description
42383 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42384 (license license:expat)))
42385
42386(define-public python-wasabi
42387 (package
42388 (name "python-wasabi")
42389 (version "1.1.3")
42390 (source
42391 (origin
42392 (method url-fetch)
42393 (uri (pypi-uri "wasabi" version))
42394 (sha256
42395 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42396 (build-system pyproject-build-system)
42397 (arguments
42398 (list
42399 #:test-flags
42400 ;; Test requires nbconvert which is huge.
42401 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42402 (native-inputs
42403 (list python-pytest
42404 python-setuptools))
42405 (propagated-inputs
42406 (list python-colorama))
42407 (home-page "https://github.com/ines/wasabi")
42408 (synopsis "Console printing and formatting toolkit")
42409 (description
42410 "This package provides a lightweight console printing and formatting
42411toolkit for Python.")
42412 (license license:expat)))
42413
42414(define-public python-watchdog
42415 (package
42416 (name "python-watchdog")
42417 (version "6.0.0")
42418 (source
42419 (origin
42420 (method url-fetch)
42421 (uri (pypi-uri "watchdog" version))
42422 (sha256
42423 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42424 (build-system pyproject-build-system)
42425 (arguments
42426 (list
42427 #:test-flags
42428 #~(list "-k" (string-join
42429 (list "not test_kill_auto_restart"
42430 "test_auto_restart_on_file_change_debounce"
42431 ;; Fails with too many open files.
42432 "test_select_fd")
42433 " and not "))))
42434 (native-inputs
42435 (list python-pytest python-setuptools))
42436 (propagated-inputs
42437 (list python-pyyaml))
42438 (home-page "https://github.com/gorakhargosh/watchdog")
42439 (synopsis "File system events monitoring")
42440 (description
42441 "This package provides a way to monitor file system events such as a file
42442modification and trigger an action. This is similar to inotify, but
42443portable.")
42444 (license license:asl2.0)))
42445
42446(define-public python-watchfiles
42447 (package
42448 (name "python-watchfiles")
42449 (version "1.1.1")
42450 (source
42451 (origin
42452 (method git-fetch)
42453 (uri (git-reference
42454 (url "https://github.com/samuelcolvin/watchfiles")
42455 (commit (string-append "v" version))))
42456 (file-name (git-file-name name version))
42457 (sha256
42458 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42459 (build-system pyproject-build-system)
42460 (arguments
42461 (list
42462 ;; Missing file in source.
42463 #:test-flags ''("-k" "not test_docs_examples")
42464 #:imported-modules `(,@%cargo-build-system-modules
42465 ,@%pyproject-build-system-modules)
42466 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42467 (guix build pyproject-build-system)
42468 (guix build utils))
42469 #:phases
42470 #~(modify-phases %standard-phases
42471 (add-after 'unpack 'prepare-cargo-build-system
42472 (lambda args
42473 (for-each
42474 (lambda (phase)
42475 (format #t "Running cargo phase: ~a~%" phase)
42476 (apply (assoc-ref cargo:%standard-phases phase)
42477 #:cargo-target #$(cargo-triplet)
42478 args))
42479 '(unpack-rust-crates
42480 configure
42481 check-for-pregenerated-files
42482 patch-cargo-checksums))))
42483 (add-after 'build 'install-rust-library
42484 (lambda _
42485 (copy-file "target/release/lib_rust_notify.so"
42486 "watchfiles/_rust_notify.so"))))))
42487 (native-inputs
42488 (append
42489 (list maturin
42490 python-anyio
42491 python-dirty-equals
42492 python-pytest
42493 python-pytest-mock
42494 python-pytest-timeout
42495 rust
42496 `(,rust "cargo"))
42497 (or (and=> (%current-target-system)
42498 (compose list make-rust-sysroot))
42499 '())))
42500 (inputs
42501 (cargo-inputs 'python-watchfiles))
42502 (propagated-inputs
42503 (list python-anyio))
42504 (home-page "https://github.com/samuelcolvin/watchfiles")
42505 (synopsis "Simple, modern file watching and code reload in Python")
42506 (description
42507 "Simple, modern file watching and code reload in Python inspired by
42508@code{watchdog}. Among the differences are a unified approach for each
42509operating systems and an elegant approach to concurrency using threading.")
42510 (license license:expat)))
42511
42512(define-public python-wcmatch
42513 (package
42514 (name "python-wcmatch")
42515 (version "10.1")
42516 (source
42517 (origin
42518 (method git-fetch)
42519 (uri (git-reference
42520 (url "https://github.com/facelessuser/wcmatch")
42521 (commit version)))
42522 (file-name (git-file-name name version))
42523 (sha256
42524 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42525 (build-system pyproject-build-system)
42526 (arguments
42527 (list #:test-flags
42528 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42529 ;; the build directory which the sandbox does not permit.
42530 #~(list "-k" "not test_glob_match_real_outside_curdir")
42531 #:phases
42532 #~(modify-phases %standard-phases
42533 (add-before 'check 'set-home
42534 (lambda _
42535 (setenv "HOME" (getcwd)))))))
42536 (native-inputs
42537 (list python-hatchling
42538 python-pytest))
42539 (propagated-inputs
42540 (list python-bracex))
42541 (home-page "https://facelessuser.github.io/wcmatch/")
42542 (synopsis "Wildcard and glob file name matcher")
42543 (description
42544 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42545@code{pathlib} library. It adds features such as brace expansion,extended
42546glob patterns, and recursive globbing with configurable behavior.")
42547 (license license:expat)))
42548
42549(define-public python-wcwidth
42550 (package
42551 (name "python-wcwidth")
42552 (version "0.2.13")
42553 (source (origin
42554 (method url-fetch)
42555 (uri (pypi-uri "wcwidth" version))
42556 (sha256
42557 (base32
42558 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42559 (build-system pyproject-build-system)
42560 (native-inputs (list python-pytest python-setuptools))
42561 (home-page "https://github.com/jquast/wcwidth")
42562 (synopsis "Measure number of terminal column cells of wide-character codes")
42563 (description
42564 "Wcwidth measures the number of terminal column cells of wide-character
42565codes. It is useful for those implementing a terminal emulator, or programs
42566that carefully produce output to be interpreted by one. It is a Python
42567implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42568in POSIX.1-2001 and POSIX.1-2008.")
42569 (license license:expat)))
42570
42571(define-public python-whatever
42572 (package
42573 (name "python-whatever")
42574 (version "0.7")
42575 (source
42576 (origin
42577 (method git-fetch)
42578 (uri (git-reference
42579 (url "https://github.com/Suor/whatever")
42580 (commit version)))
42581 (file-name (git-file-name name version))
42582 (sha256
42583 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42584 (build-system pyproject-build-system)
42585 (native-inputs
42586 (list python-pytest python-setuptools python-wheel))
42587 (home-page "https://github.com/Suor/whatever")
42588 (synopsis "Make anonymous functions by partial application of operators")
42589 (description "@code{whatever} provides an easy way to make anonymous
42590functions by partial application of operators.")
42591 (license license:bsd-3)))
42592
42593(define-public python-whatthepatch
42594 (package
42595 (name "python-whatthepatch")
42596 (version "1.0.7")
42597 (source
42598 (origin
42599 (method url-fetch)
42600 (uri (pypi-uri "whatthepatch" version))
42601 (sha256
42602 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42603 (build-system pyproject-build-system)
42604 (native-inputs (list python-pytest python-setuptools))
42605 (home-page "https://github.com/cscorley/whatthepatch")
42606 (synopsis "Patch parsing and application library")
42607 (description
42608 "This package provides a patch parsing and application library.")
42609 (license license:expat)))
42610
42611(define-public python-wheel-filename
42612 (package
42613 (name "python-wheel-filename")
42614 (version "1.4.2")
42615 (source
42616 (origin
42617 (method url-fetch)
42618 (uri (pypi-uri "wheel_filename" version))
42619 (sha256
42620 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42621 (build-system pyproject-build-system)
42622 (native-inputs (list python-hatchling python-pytest))
42623 (home-page "https://github.com/wheelodex/wheel-filename")
42624 (synopsis "Parse wheel filenames")
42625 (description
42626 "This software allows you to verify
42627@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42628filenames and parse them into their component fields.
42629
42630This package adheres strictly to the standard, with the following
42631exceptions:
42632
42633@itemize @bullet
42634@item
42635Version components may be any sequence of the relevant set of
42636characters; they are not verified for PEP 440 compliance.
42637@item
42638The @file{.whl} file extension is matched case-insensitively.
42639@end itemize")
42640 (license license:expat)))
42641
42642(define-public python-wheezy-template
42643 (package
42644 (name "python-wheezy-template")
42645 (version "3.2.5")
42646 (source
42647 (origin
42648 (method git-fetch)
42649 (uri (git-reference
42650 (url "https://github.com/akornatskyy/wheezy.template")
42651 (commit version)))
42652 (file-name (git-file-name name version))
42653 (sha256
42654 (base32 "1ky0j2d5znsx4pxb2szbpmxg6qw71134n4x5y22fiiicbbw8bm49"))))
42655 (build-system pyproject-build-system)
42656 (native-inputs (list python-setuptools python-pytest))
42657 (home-page "https://github.com/akornatskyy/wheezy.template")
42658 (synopsis "Lightweight template library")
42659 (description "This package provides a lightweight template library which
42660aims to be compact, expressive, intuitive and fast.")
42661 (license license:expat)))
42662
42663(define-public python-whenever
42664 (package
42665 (name "python-whenever")
42666 (version "0.9.2")
42667 (source
42668 (origin
42669 (method url-fetch)
42670 (uri (pypi-uri "whenever" version))
42671 (sha256
42672 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42673 (build-system pyproject-build-system)
42674 (arguments
42675 (list
42676 ;; tests: 2170 passed, 3 skipped, 2 warnings
42677 #:phases
42678 #~(modify-phases %standard-phases
42679 ;; Use the pure python version
42680 (add-before 'build 'setenv
42681 (lambda _
42682 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42683 (add-before 'check 'set-check-environment
42684 (lambda* (#:key inputs #:allow-other-keys)
42685 (setenv "TZ" "UTC")
42686 (setenv "TZDIR"
42687 (search-input-directory inputs
42688 "share/zoneinfo")))))))
42689 (propagated-inputs
42690 (list python-time-machine python-tzdata python-tzlocal))
42691 (native-inputs
42692 (list python-pytest
42693 python-setuptools
42694 tzdata-for-tests))
42695 (home-page "https://whenever.readthedocs.io/")
42696 (synopsis "Modern datetime library for Python")
42697 (description "Modern datetime library for Python. Supports:
42698@itemize
42699@item DST-safe arithmetic
42700@item Nanosecond precision
42701@item Date arithmetic
42702@end itemize")
42703 (license license:expat)))
42704
42705;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42706(define-public python-whichcraft
42707 (package
42708 (name "python-whichcraft")
42709 (version "0.6.1")
42710 (source
42711 (origin
42712 (method url-fetch)
42713 (uri (pypi-uri "whichcraft" version))
42714 (sha256
42715 (base32
42716 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42717 (build-system pyproject-build-system)
42718 (native-inputs
42719 (list python-pytest python-setuptools))
42720 (home-page "https://github.com/pydanny/whichcraft")
42721 (synopsis "Cross-platform cross-python shutil.which functionality")
42722 (description
42723 "This package provides a shim of the shutil.which function that's
42724designed to work across multiple versions of Python.")
42725 (license license:bsd-3)))
42726
42727(define-public python-widgetsnbextension
42728 (package
42729 (name "python-widgetsnbextension")
42730 (version "4.0.14")
42731 (source
42732 (origin
42733 (method url-fetch)
42734 (uri (pypi-uri "widgetsnbextension" version))
42735 (sha256
42736 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42737 (build-system pyproject-build-system)
42738 (arguments
42739 (list #:tests? #f)) ;no tests in PyPI or git
42740 (native-inputs
42741 (list python-jupyter-packaging
42742 python-setuptools))
42743 (home-page "https://ipython.org")
42744 (synopsis "IPython HTML widgets for Jupyter")
42745 (description "This package provides interactive HTML widgets for Jupyter
42746notebooks.")
42747 (license license:bsd-3)))
42748
42749(define-public python-wrapt
42750 (package
42751 (name "python-wrapt")
42752 (version "2.0.1")
42753 (source
42754 (origin
42755 (method url-fetch)
42756 (uri (pypi-uri "wrapt" version))
42757 (sha256
42758 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42759 (build-system pyproject-build-system)
42760 (arguments
42761 (list
42762 ;; tests: 562 passed, 1 deselected
42763 #:test-flags
42764 ;; AssertionError: Output did not match expected for
42765 ;; mypy_function_wrapper_fn_t6.py
42766 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42767 (native-inputs
42768 (list python-mypy-for-tests ;hard dependencies in tests
42769 python-pytest
42770 python-setuptools))
42771 (home-page "https://github.com/GrahamDumpleton/wrapt")
42772 (synopsis "Module for decorators, wrappers and monkey patching")
42773 (description
42774 "The aim of the wrapt module is to provide a transparent object proxy for
42775 Python, which can be used as the basis for the construction of function
42776 wrappers and decorator functions.")
42777 (license license:bsd-2)))
42778
42779(define-public python-wurlitzer
42780 (package
42781 (name "python-wurlitzer")
42782 (version "3.1.1")
42783 (source
42784 (origin
42785 (method url-fetch)
42786 (uri (pypi-uri "wurlitzer" version))
42787 (sha256
42788 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42789 (build-system pyproject-build-system)
42790 (arguments
42791 (list #:test-flags #~(list "test.py")))
42792 (native-inputs
42793 (list python-pytest
42794 python-setuptools))
42795 (home-page "https://github.com/minrk/wurlitzer")
42796 (synopsis "Capture C-level output in context managers")
42797 (description
42798 "This library helps to redirect @code{sys.stdout} to a stream or a file
42799while executing some piece of code, including C code running within a Python
42800process.")
42801 (license license:expat)))
42802
42803(define-public python-xattr
42804 (package
42805 (name "python-xattr")
42806 (version "1.2.0")
42807 (source
42808 (origin
42809 (method url-fetch)
42810 (uri (pypi-uri "xattr" version))
42811 (sha256
42812 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42813 (build-system pyproject-build-system)
42814 (native-inputs
42815 (list python-pytest
42816 python-setuptools))
42817 (propagated-inputs
42818 (list python-cffi))
42819 (home-page "https://github.com/xattr/xattr")
42820 (synopsis "Python wrapper for extended file system attributes")
42821 (description "This package provides a Python wrapper for using extended
42822file system attributes. Extended attributes extend the basic attributes of files
42823and directories in the file system. They are stored as name:data pairs
42824associated with file system objects (files, directories, symlinks, etc).")
42825 (license license:expat)))
42826
42827(define-public python-xdg-base-dirs
42828 (package
42829 (name "python-xdg-base-dirs")
42830 (version "6.0.2")
42831 (source
42832 (origin
42833 (method git-fetch)
42834 (uri (git-reference
42835 (url "https://github.com/srstevenson/xdg-base-dirs")
42836 (commit version)))
42837 (file-name (git-file-name name version))
42838 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42839 (modules '((guix build utils)))
42840 ;; All pytest options are for coverage; remove snippet in next release:
42841 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42842 (snippet #~(substitute* "pyproject.toml"
42843 (("^addopts = .*") "")))))
42844 (build-system pyproject-build-system)
42845 (native-inputs
42846 (list python-poetry-core python-pytest))
42847 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42848 (synopsis "Variables defined by the XDG Base Directory Specification")
42849 (description "xdg-base-dirs is a Python module that provides functions to
42850return paths to the directories defined by the XDG Base Directory
42851Specification, to save you from duplicating the same snippet of logic in every
42852Python utility you write that deals with user cache, configuration, or data
42853files.")
42854 (license license:isc)))
42855
42856(define-public python-xkbcommon
42857 (package
42858 (name "python-xkbcommon")
42859 (version "1.0.1")
42860 (source
42861 (origin
42862 (method git-fetch)
42863 (uri (git-reference
42864 (url "https://github.com/sde1000/python-xkbcommon")
42865 (commit (string-append "v" version))))
42866 (file-name (git-file-name name version))
42867 (sha256
42868 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42869 (build-system pyproject-build-system)
42870 (propagated-inputs (list python-cffi))
42871 (native-inputs (list libxkbcommon python-setuptools))
42872 (arguments
42873 (list
42874 #:test-backend
42875 #~'unittest
42876 #:phases
42877 #~(modify-phases %standard-phases
42878 (add-before 'check 'cleanup
42879 (lambda _
42880 (delete-file-recursively "xkbcommon"))))))
42881 (home-page "https://github.com/sde1000/python-xkbcommon")
42882 (synopsis "Bindings for libxkbcommon using cffi")
42883 (description "Bindings for libxkbcommon using cffi.")
42884 (license license:expat)))
42885
42886(define-public python-xlib
42887 (package
42888 (name "python-xlib")
42889 (version "0.33")
42890 (source
42891 (origin
42892 (method git-fetch)
42893 (uri (git-reference
42894 (url "https://github.com/python-xlib/python-xlib")
42895 (commit version)))
42896 (file-name (git-file-name name version))
42897 (sha256
42898 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42899 (build-system pyproject-build-system)
42900 (arguments
42901 `(#:phases
42902 (modify-phases %standard-phases
42903 (add-before 'check 'start-xserver
42904 (lambda* (#:key inputs #:allow-other-keys)
42905 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42906 ;; There must be a running X server and make check doesn't
42907 ;; start one. Therefore we must do it.
42908 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42909 (setenv "DISPLAY" ":1")))))))
42910 (native-inputs
42911 (list python-mock
42912 python-pytest
42913 python-setuptools
42914 xorg-server))
42915 (propagated-inputs
42916 (list python-six))
42917 (home-page "https://github.com/python-xlib/python-xlib")
42918 (synopsis "Python X11 client library")
42919 (description
42920 "The Python X Library is intended to be a fully functional
42921X client library for Python programs. It is useful to implement
42922low-level X clients. It is written entirely in Python.")
42923 (license license:gpl2+)))
42924
42925(define-public python-xlrd
42926 (package
42927 (name "python-xlrd")
42928 (version "2.0.2")
42929 (source
42930 (origin
42931 (method git-fetch) ;no tests in PyPI archive
42932 (uri (git-reference
42933 (url "https://github.com/python-excel/xlrd")
42934 (commit version)))
42935 (file-name (git-file-name name version))
42936 (sha256
42937 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42938 (build-system pyproject-build-system)
42939 (native-inputs
42940 (list python-pytest
42941 python-setuptools))
42942 (home-page "https://www.python-excel.org/")
42943 (synopsis "Library for extracting data from Excel files")
42944 (description "This package provides a library to extract data from
42945spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42946@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42947Unicode-aware. It is not intended as an end-user tool.")
42948 (license license:bsd-3)))
42949
42950(define-public python-xlsxwriter
42951 (package
42952 (name "python-xlsxwriter")
42953 (version "3.2.0")
42954 (source
42955 (origin
42956 ;; There are no tests in the PyPI tarball.
42957 (method git-fetch)
42958 (uri (git-reference
42959 (url "https://github.com/jmcnamara/XlsxWriter")
42960 (commit (string-append "RELEASE_" version))))
42961 (file-name (git-file-name name version))
42962 (sha256
42963 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42964 (build-system pyproject-build-system)
42965 (native-inputs
42966 (list python-setuptools
42967 python-wheel))
42968 (home-page "https://github.com/jmcnamara/XlsxWriter")
42969 (synopsis "Python module for creating Excel XLSX files")
42970 (description
42971 "XlsxWriter is a Python module that can be used to write text, numbers,
42972formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
42973 (license license:bsd-2)))
42974
42975;;; Note: this package is unmaintained since 2018 (archived on GitHub).
42976(define-public python-xlwt
42977 (package
42978 (name "python-xlwt")
42979 (version "1.3.0")
42980 (source
42981 (origin
42982 (method url-fetch)
42983 (uri (pypi-uri "xlwt" version))
42984 (sha256
42985 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
42986 (build-system pyproject-build-system)
42987 (native-inputs (list python-pytest python-setuptools python-wheel))
42988 (home-page "https://www.python-excel.org/")
42989 (synopsis "Library for creating spreadsheet Excel files")
42990 (description
42991 "@code{xlwt} is a library for writing data and formatting information to
42992older Excel files (i.e. .xls). The package itself is pure Python with no
42993dependencies on modules or packages outside the standard Python distribution.
42994It is not intended as an end-user tool.")
42995 (license license:bsd-3)))
42996
42997(define-public python-xmldiff
42998 (package
42999 (name "python-xmldiff")
43000 (version "3.0b1")
43001 (source
43002 (origin
43003 (method git-fetch)
43004 (uri (git-reference
43005 (url "https://github.com/Shoobx/xmldiff")
43006 (commit version)))
43007 (file-name (git-file-name name version))
43008 (sha256
43009 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
43010 (build-system pyproject-build-system)
43011 (native-inputs (list python-pytest python-setuptools))
43012 (propagated-inputs (list python-lxml))
43013 (home-page "https://github.com/Shoobx/xmldiff")
43014 (synopsis "Creates diffs of XML files")
43015 (description "This Python tool figures out the differences between two
43016similar XML files, in the same way the @command{diff} utility does it.")
43017 (license license:expat)))
43018
43019(define-public python-xmlsec
43020 (package
43021 (name "python-xmlsec")
43022 (version "1.3.17")
43023 (source
43024 (origin
43025 (method git-fetch)
43026 (uri (git-reference
43027 (url "https://github.com/xmlsec/python-xmlsec")
43028 (commit version)))
43029 (file-name (git-file-name name version))
43030 (sha256
43031 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
43032 (build-system pyproject-build-system)
43033 (arguments
43034 (list
43035 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
43036 #:test-flags #~(list "-n" "1")))
43037 (inputs (list openssl libltdl libxslt libxml2))
43038 (propagated-inputs (list python-lxml xmlsec-openssl))
43039 (native-inputs (list pkg-config
43040 python-lxml
43041 python-pkgconfig
43042 python-pytest
43043 python-pytest-xdist
43044 python-setuptools
43045 python-setuptools-scm
43046 python-wheel))
43047 (home-page "https://github.com/xmlsec/python-xmlsec")
43048 (synopsis "Python bindings for the XML Security Library")
43049 (description "This package provides Python bindings for the XML Security
43050Library.")
43051 (license license:expat)))
43052
43053(define-public python-xmod
43054 (package
43055 (name "python-xmod")
43056 (version "1.10.0")
43057 (source
43058 (origin
43059 (method git-fetch)
43060 (uri (git-reference
43061 (url "https://github.com/rec/xmod")
43062 (commit (string-append "v" version))))
43063 (file-name (git-file-name name version))
43064 (sha256
43065 (base32 "0a2ywlfa0s4aqs1yag9xirv69029xmw307mbfqz7vhy8dadc2z30"))))
43066 (build-system pyproject-build-system)
43067 (native-inputs (list python-hatchling python-pytest))
43068 (home-page "https://rec.github.io/xmod/")
43069 (synopsis "Turn any object into a module")
43070 (description
43071 "@code{xmod} is a tiny library that lets a module to do things that
43072normally only a class could do.")
43073 (license license:expat)))
43074
43075(define-public python-xmp-toolkit
43076 (package
43077 (name "python-xmp-toolkit")
43078 (version "2.1.0")
43079 (source
43080 (origin
43081 (method url-fetch)
43082 (uri (pypi-uri "python_xmp_toolkit" version))
43083 (sha256
43084 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
43085 (build-system pyproject-build-system)
43086 (arguments
43087 (list
43088 #:phases
43089 #~(modify-phases %standard-phases
43090 (add-after 'unpack 'patch-source
43091 (lambda* (#:key inputs #:allow-other-keys)
43092 (substitute* "libxmp/exempi.py"
43093 (("ctypes.util.find_library\\('exempi'\\)")
43094 (format #f "~s" (search-input-file
43095 inputs "lib/libexempi.so")))))))))
43096 (native-inputs
43097 (list python-pytest
43098 python-flit-core))
43099 (inputs
43100 (list exempi))
43101 (propagated-inputs
43102 (list python-pytz))
43103 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
43104 (synopsis "Python XMP Toolkit for working with metadata")
43105 (description "Python XMP Toolkit is a library for working with XMP
43106metadata, as well as reading/writing XMP metadata stored in many different
43107file formats.
43108
43109Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
43110based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
43111are easily incorporated into the library with a minimum amount of work.")
43112 (license license:bsd-3)))
43113
43114(define-public python-yamlcore
43115 (package
43116 (name "python-yamlcore")
43117 (version "0.0.4")
43118 (source
43119 (origin
43120 (method git-fetch)
43121 (uri (git-reference
43122 (url "https://github.com/perlpunk/pyyaml-core")
43123 (commit (string-append "v" version))))
43124 (file-name (git-file-name name version))
43125 (sha256
43126 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
43127 (build-system pyproject-build-system)
43128 (arguments
43129 (list
43130 #:phases
43131 #~(modify-phases %standard-phases
43132 (add-after 'unpack 'fix-test-file-names
43133 (lambda _
43134 (rename-file "tests/test-schema.py" "tests/test_schema.py")
43135 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
43136 (native-inputs (list python-pytest python-setuptools))
43137 (inputs (list python-pyyaml))
43138 (home-page "https://github.com/perlpunk/pyyaml-core")
43139 (synopsis "YAML 1.2 support for PyYAML")
43140 (description "This module can be used on top of PyYAML to load YAML 1.2
43141files.")
43142 (license license:expat)))
43143
43144(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
43145
43146(define-public python-yamllint
43147 (package
43148 (name "python-yamllint")
43149 (version "1.38.0")
43150 (source
43151 (origin
43152 (method git-fetch)
43153 (uri (git-reference
43154 (url "https://github.com/adrienverge/yamllint")
43155 (commit (string-append "v" version))))
43156 (file-name (git-file-name name version))
43157 (sha256
43158 (base32 "18wqyj600jhzwm01wnpc48cyppbkwrwz93vr47338iwkgmp2szz0"))))
43159 (build-system pyproject-build-system)
43160 (arguments
43161 (list #:test-backend #~'unittest))
43162 (native-inputs
43163 (list python-setuptools))
43164 (propagated-inputs
43165 (list python-pathspec python-pyyaml))
43166 (home-page "https://github.com/adrienverge/yamllint")
43167 (synopsis "Linter for YAML files")
43168 (description
43169 "Yamllint is a linter for YAML files. yamllint does not only check for
43170syntax validity, but for weirdnesses like key repetition and cosmetic problems
43171such as lines length, trailing spaces, indentation, etc.")
43172 (license license:gpl3+)))
43173
43174(define-public python-yamlloader
43175 (package
43176 (name "python-yamlloader")
43177 (version "1.6.0")
43178 (source
43179 (origin
43180 (method url-fetch)
43181 (uri (pypi-uri "yamlloader" version))
43182 (sha256
43183 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
43184 (build-system pyproject-build-system)
43185 (arguments
43186 (list #:test-backend #~'unittest
43187 #:test-flags #~(list "discover" "-v")))
43188 (native-inputs
43189 (list python-hatch-vcs
43190 python-hatchling
43191 python-hypothesis
43192 python-pytest))
43193 (propagated-inputs
43194 (list python-pyyaml))
43195 (home-page "https://github.com/Phynix/yamlloader")
43196 (synopsis "Ordered YAML loader and dumper for PyYAML")
43197 (description
43198 "This package provides loaders and dumpers for PyYAML. Currently, an
43199OrderedDict loader/dumper is implemented, allowing to keep items order when
43200loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
43201dicts are supported and are the default items to be loaded to. As of Python
432023.7 preservation of insertion order is a language feature of regular dicts.)
43203It was originally mirrored from
43204@url{https://github.com/fmenabe/python-yamlordereddictloader,
43205yamlordereddict}.")
43206 (license license:expat)))
43207
43208;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
43209;; an improved version of this library with unit tests, performance
43210;; improvements (by providing access to the C implementation of PyYAML) and is
43211;; more actively developed.
43212(define-public python-yamlordereddictloader
43213 (package
43214 (name "python-yamlordereddictloader")
43215 (version "0.4.2")
43216 (source
43217 (origin
43218 (method git-fetch)
43219 (uri (git-reference
43220 (url "https://github.com/fmenabe/python-yamlordereddictloader")
43221 (commit version)))
43222 (file-name (git-file-name name version))
43223 (sha256
43224 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
43225 (build-system pyproject-build-system)
43226 (arguments
43227 (list #:tests? #f)) ;no tests
43228 (native-inputs
43229 (list python-setuptools))
43230 (propagated-inputs
43231 (list python-pyyaml))
43232 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
43233 (synopsis "Loader and a dumper for PyYAML")
43234 (description
43235 "yamlordereddictloader is a Python package that provides a loader and a
43236dumper for PyYAML allowing to keep items order when loading a file (by putting
43237them in OrderedDict objects) and to manage OrderedDict objects when dumping to
43238a file.")
43239 (license license:expat)))
43240
43241(define-public python-yapf
43242 (package
43243 (name "python-yapf")
43244 (version "0.43.0")
43245 (source
43246 (origin
43247 (method url-fetch)
43248 (uri (pypi-uri "yapf" version))
43249 (sha256
43250 (base32
43251 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
43252 (build-system pyproject-build-system)
43253 (propagated-inputs
43254 (list python-platformdirs python-tomli))
43255 (native-inputs
43256 (list python-pytest python-setuptools python-wheel))
43257 (home-page "https://github.com/google/yapf")
43258 (synopsis "Formatter for Python code")
43259 (description "YAPF is a formatter for Python code. It's based off of
43260@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
43261takes the code and reformats it to the best formatting that conforms to the
43262style guide, even if the original code didn't violate the style guide.")
43263 (license license:asl2.0)))
43264
43265(define-public python-yappi
43266 (package
43267 (name "python-yappi")
43268 (version "1.7.6")
43269 (source
43270 (origin
43271 (method git-fetch)
43272 (uri (git-reference
43273 (url "https://github.com/sumerc/yappi")
43274 (commit (string-append "v" version))))
43275 (file-name (git-file-name name version))
43276 (sha256
43277 (base32 "08jhsflxyj3vf1m06vngsw9d6qyblykcx1j2mq4qn0ray0s7v8qj"))))
43278 (build-system pyproject-build-system)
43279 (arguments
43280 (list #:test-backend #~'unittest
43281 #:test-flags #~'("discover" "tests")))
43282 (native-inputs (list python-gevent python-setuptools))
43283 (home-page "https://github.com/sumerc/yappi")
43284 (synopsis "Python Profiler")
43285 (description "@acronym{YAPPI, Yet Another Python Profiler} is a robust and
43286intuitive, standard compliant Python profiler.")
43287 (license license:expat)))
43288
43289(define-public python-yapsy
43290 (package
43291 (name "python-yapsy")
43292 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
43293 ;; 3.12+; move back to git tag when released.
43294 (properties '((base-version . "1.12.2")
43295 (commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
43296 (revision . "0")))
43297 (version (git-version (assoc-ref properties 'base-version)
43298 (assoc-ref properties 'revision)
43299 (assoc-ref properties 'commit)))
43300 (source
43301 (origin
43302 (method git-fetch)
43303 (uri (git-reference
43304 (url "https://github.com/tibonihoo/yapsy")
43305 (commit (assoc-ref properties 'commit))))
43306 (file-name (git-file-name name version))
43307 (sha256
43308 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
43309 (build-system pyproject-build-system)
43310 (arguments
43311 (list
43312 #:phases
43313 #~(modify-phases %standard-phases
43314 (add-after 'unpack 'change-source-dir
43315 (lambda _
43316 (chdir "package")))
43317 (add-after 'change-source-dir 'patch-version
43318 (lambda _
43319 (substitute* "yapsy/__init__.py"
43320 (("__version__=\"2.0.0\"")
43321 (format #nil "__version__=\"~a\"" #$(assoc-ref properties 'base-version)))))))))
43322 (native-inputs
43323 (list python-pytest python-setuptools))
43324 (home-page "https://yapsy.sourceforge.net")
43325 (synopsis "Simple plugin system for Python applications")
43326 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
43327implementing the core mechanisms needed to build a plugin system into a wider
43328application.
43329
43330The main purpose is to depend only on Python's standard libraries and to
43331implement only the basic functionalities needed to detect, load and keep track
43332of several plugins.")
43333 (license license:bsd-3)))
43334
43335(define-public python-yaspin
43336 (package
43337 (name "python-yaspin")
43338 (version "3.2.0")
43339 (source
43340 (origin
43341 (method url-fetch)
43342 (uri
43343 (pypi-uri "yaspin" version))
43344 (sha256
43345 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
43346 (build-system pyproject-build-system)
43347 ;; tests: 3007 passed, 1758 skipped
43348 (native-inputs
43349 (list python-poetry-core
43350 python-pytest
43351 python-pytest-mock))
43352 (propagated-inputs
43353 (list python-termcolor-next))
43354 (home-page "https://github.com/pavdmyt/yaspin")
43355 (synopsis "Yet Another Terminal Spinner")
43356 (description "Yaspin provides a terminal spinner to indicate the progress
43357during long operations.")
43358 (license license:expat)))
43359
43360(define-public python-yattag
43361 (package
43362 (name "python-yattag")
43363 (version "1.16.1")
43364 (source
43365 (origin
43366 (method url-fetch)
43367 (uri (pypi-uri "yattag" version))
43368 (sha256
43369 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
43370 (build-system pyproject-build-system)
43371 (native-inputs
43372 (list python-pytest
43373 python-setuptools
43374 python-wheel))
43375 (home-page "https://www.yattag.org/")
43376 (synopsis "HTML or XML generator for Python")
43377 (description
43378 "Yattag is a Python library for generating HTML or XML in a pythonic
43379way.")
43380 (license license:lgpl2.1)))
43381
43382(define-public python-yq
43383 (package
43384 (name "python-yq")
43385 (version "3.4.3")
43386 (source
43387 (origin
43388 (method url-fetch)
43389 (uri (pypi-uri "yq" version))
43390 (sha256
43391 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
43392 (build-system pyproject-build-system)
43393 (arguments
43394 (list
43395 #:test-backend #~'custom
43396 #:test-flags #~(list "test/test.py" "-v")
43397 #:phases
43398 #~(modify-phases %standard-phases
43399 (add-after 'unpack 'patch
43400 (lambda _
43401 (substitute* "yq/__init__.py"
43402 (("Popen\\(\\[\"jq")
43403 (string-append
43404 "Popen([\""
43405 #$(this-package-input "jq") "/bin/jq"))))))))
43406 (native-inputs
43407 (list python-hatchling
43408 python-hatch-vcs))
43409 (inputs
43410 (list jq))
43411 (propagated-inputs
43412 (list python-argcomplete
43413 python-pyyaml
43414 python-tomlkit
43415 python-xmltodict))
43416 (home-page "https://github.com/kislyuk/yq")
43417 (synopsis "Command-line YAML/XML processor")
43418 (description
43419 "This package provides @command{yq} and @command{xq} for processing YAML
43420and XML respectively. The processing is done through @command{jq},
43421@command{jq} filters can be used to process the data as it passes through.")
43422 (license license:asl2.0)))
43423
43424(define-public python-yte
43425 (package
43426 (name "python-yte")
43427 (version "1.8.1") ;TODO higher versions depend on uv_build
43428 (source
43429 (origin
43430 (method git-fetch)
43431 (uri (git-reference
43432 (url "https://github.com/koesterlab/yte")
43433 (commit (string-append "v" version))))
43434 (sha256
43435 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43436 (build-system pyproject-build-system)
43437 (arguments
43438 (list
43439 #:test-flags #~(list "tests.py")
43440 #:phases
43441 '(modify-phases %standard-phases
43442 (add-after 'unpack 'set-HOME
43443 (lambda _ (setenv "HOME" "/tmp"))))))
43444 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43445 (native-inputs (list python-numpy python-poetry-core python-pytest))
43446 (home-page "https://github.com/koesterlab/yte")
43447 (synopsis "YAML template engine with Python expressions")
43448 (description
43449 "This package provides a YAML template engine with Python expressions.")
43450 (license license:expat)))
43451
43452(define-public python-zarr
43453 (package
43454 (name "python-zarr")
43455 (version "3.2.1")
43456 (source
43457 (origin
43458 (method git-fetch)
43459 (uri (git-reference
43460 (url "https://github.com/zarr-developers/zarr-python")
43461 (commit (string-append "v" version))))
43462 (file-name (git-file-name name version))
43463 (sha256
43464 (base32 "1qzbpy6j8mgpr6wb69j8yyjyr95rmagn64v8pcdljjl3969rmjf6"))))
43465 (build-system pyproject-build-system)
43466 (arguments
43467 (list
43468 ;; tests: 5339 passed, 384 skipped, 1 deselected, 7 xfailed
43469 #:test-flags
43470 #~(list "--ignore=tests/benchmarks/"
43471 ;; This test wants uv.
43472 (string-append "--deselect=tests/test_examples.py"
43473 "::test_scripts_can_run[script_path0]"))
43474 #:phases
43475 #~(modify-phases %standard-phases
43476 (add-after 'unpack 'disable-service-tests
43477 (lambda _
43478 (setenv "ZARR_TEST_ABS" "0")
43479 (setenv "ZARR_TEST_MONGO" "0")
43480 (setenv "ZARR_TEST_REDIS" "0"))))))
43481 (native-inputs
43482 (list python-hatch-vcs
43483 python-hatchling
43484 python-numpydoc ;tests/test_api/test_synchronous.py
43485 python-pytest
43486 python-pytest-asyncio
43487 python-pytest-benchmark
43488 python-tomlkit))
43489 (propagated-inputs
43490 (list python-donfig
43491 python-google-crc32c
43492 python-numcodecs
43493 python-numpy
43494 python-packaging
43495 python-typing-extensions))
43496 (home-page "https://github.com/zarr-developers/zarr-python")
43497 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43498 (description
43499 "This package provides an implementation of chunked, compressed,
43500N-dimensional arrays for Python.")
43501 (license license:expat)))
43502
43503(define-public python-zeroc-ice
43504 (package
43505 (name "python-zeroc-ice")
43506 (version "3.7.10.1")
43507 (source (origin
43508 (method url-fetch)
43509 (uri (pypi-uri "zeroc-ice" version))
43510 (sha256
43511 (base32
43512 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43513 (build-system pyproject-build-system)
43514 (arguments
43515 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43516 ;; tag.
43517 ;;
43518 ;; See:
43519 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43520 ;; - File: <ice/refs/heads/main/python/allTests.py>
43521 (list #:tests? #f))
43522 (inputs (list openssl))
43523 (native-inputs (list python-setuptools))
43524 (home-page "https://zeroc.com")
43525 (synopsis "RPC framework")
43526 (description
43527 "Ice is a comprehensive RPC framework. Ice helps you network your
43528software by taking care of all interactions with low-level network programming
43529interfaces.")
43530 (license license:gpl2)))
43531
43532;; Package variant to build [email protected]
43533(define-public python-zeroc-ice-3.6
43534 (package
43535 (inherit python-zeroc-ice)
43536 (version "3.6.5")
43537 (source (origin
43538 (method url-fetch)
43539 (uri (pypi-uri "zeroc-ice" version))
43540 (sha256
43541 (base32
43542 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43543 (patches
43544 (search-patches
43545 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43546 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43547 (arguments
43548 (substitute-keyword-arguments arguments
43549 ((#:phases phases #~%standard-phases)
43550 #~(modify-phases #$phases
43551 (add-before 'build 'relax-gcc-14-strictness
43552 (lambda _
43553 (setenv "CFLAGS"
43554 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43555
43556(define-public python-zeroconf
43557 (package
43558 (name "python-zeroconf")
43559 (version "0.38.1")
43560 (source
43561 (origin
43562 (method git-fetch)
43563 (uri (git-reference
43564 (url "https://github.com/jstasiak/python-zeroconf")
43565 (commit version)))
43566 (file-name (git-file-name name version))
43567 (sha256
43568 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43569 (build-system pyproject-build-system)
43570 (arguments
43571 (list
43572 #:test-flags
43573 #~(list
43574 "-k" (string-append
43575 ;; XXX: Despite asyncio, this test fails.
43576 "not test_run_coro_with_timeout and not "
43577 ;; XXX: Networking isn't available.
43578 (string-join
43579 (list "test_integration_with_listener_ipv6"
43580 "test_launch_and_close_v4_v6"
43581 "test_launch_and_close_context_manager"
43582 "test_launch_and_close"
43583 "test_close_multiple_times")
43584 " and not ")))))
43585 (native-inputs
43586 (list python-pytest python-pytest-asyncio python-setuptools))
43587 (propagated-inputs
43588 (list python-ifaddr))
43589 (home-page "https://github.com/jstasiak/python-zeroconf")
43590 (synopsis "Pure Python mDNS service discovery")
43591 (description "Pure Python multicast DNS (mDNS) service discovery library
43592(Bonjour/Avahi compatible).")
43593 (license license:lgpl2.1+)))
43594
43595(define-public python-zict
43596 (package
43597 (name "python-zict")
43598 (version "3.0.0")
43599 (source
43600 (origin
43601 (method url-fetch)
43602 (uri (pypi-uri "zict" version))
43603 (sha256
43604 (base32
43605 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43606 (build-system pyproject-build-system)
43607 (arguments
43608 (list
43609 #:test-flags
43610 ;; This uses "importorskip", but it won't skip.
43611 '(list "--ignore=tests/test_lmdb.py")))
43612 (propagated-inputs
43613 (list python-heapdict))
43614 (native-inputs
43615 (list python-pytest
43616 python-pytest-asyncio
43617 python-pytest-repeat
43618 python-pytest-timeout
43619 python-setuptools
43620 python-wheel))
43621 (home-page "https://zict.readthedocs.io/en/latest/")
43622 (synopsis "Composable mutable mapping tools")
43623 (description "This package provides abstract @code{MutableMapping} classes
43624that consume and build on other @code{MutableMappings}. Several of these can
43625be composed with one another to form intuitive interfaces over complex storage
43626systems policies.")
43627 (license license:bsd-3)))
43628
43629(define-public python-zipfly
43630 (package
43631 (name "python-zipfly")
43632 (version "6.0.5")
43633 (source
43634 (origin
43635 (method url-fetch)
43636 (uri (pypi-uri "zipfly" version))
43637 (sha256
43638 (base32
43639 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43640 (build-system pyproject-build-system)
43641 (arguments
43642 (list #:test-backend #~'unittest))
43643 (native-inputs (list python-setuptools))
43644 (home-page "https://github.com/sandes/zipfly")
43645 (synopsis "Zip archive generator")
43646 (description "ZipFly is a zip archive generator. It was created to
43647generate very large zip archives for immediate sending out to clients, or
43648for writing large zip archives without memory inflation.")
43649 (license license:expat)))
43650
43651(define-public python-zipstream-new
43652 (package
43653 (name "python-zipstream-new")
43654 (version "1.1.8")
43655 (source
43656 (origin
43657 (method git-fetch) ; no tests in PyPI release
43658 (uri (git-reference
43659 (url "https://github.com/arjan-s/python-zipstream")
43660 (commit (string-append "v" version))))
43661 (file-name (git-file-name name version))
43662 (sha256
43663 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43664 (build-system pyproject-build-system)
43665 (arguments
43666 (list #:test-backend #~'unittest))
43667 (native-inputs (list python-setuptools))
43668 (home-page "https://github.com/arjan-s/python-zipstream")
43669 (synopsis "Zipfile generator that takes input files as well as streams")
43670 (description "@code{zipstream.py} is a zip archive generator based on
43671@code{zipfile.py}. It was created to generate a zip file generator for
43672streaming. This is beneficial for when you want to provide a downloadable
43673archive of a large collection of regular files, which would be infeasible
43674to generate the archive prior to downloading or of a very large file that
43675you do not want to store entirely on disk or on memory.")
43676 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43677 (license license:gpl3)))
43678
43679(define-public shrinkwrap
43680 (package
43681 (name "shrinkwrap")
43682 (version "0.1.0")
43683 (source
43684 (origin
43685 (method git-fetch)
43686 (uri (git-reference
43687 (url "https://github.com/fzakaria/shrinkwrap")
43688 (commit (string-append "v" version))))
43689 (file-name (git-file-name name version))
43690 (sha256
43691 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43692 (build-system pyproject-build-system)
43693 (native-inputs
43694 (list python-click
43695 python-poetry-core
43696 python-pypa-build
43697 python-pytest))
43698 (inputs (list python-lief python-sh))
43699 (home-page "https://github.com/fzakaria/shrinkwrap")
43700 (synopsis "Emboss needed dependencies on the top level executable")
43701 (description
43702 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43703shared objects, and lift them up to the executable referenced by absolute
43704path.")
43705 (license license:expat)))
43706
43707(define-public staticsite
43708 (package
43709 (name "staticsite")
43710 (version "2.5")
43711 (source
43712 (origin
43713 (method git-fetch)
43714 (uri (git-reference
43715 (url "https://github.com/spanezz/staticsite")
43716 (commit (string-append "v" version))))
43717 (file-name (git-file-name name version))
43718 (sha256
43719 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43720 (build-system pyproject-build-system)
43721 (arguments
43722 (list
43723 #:phases
43724 #~(modify-phases %standard-phases
43725 (add-after 'unpack 'use-themes-in-output
43726 (lambda _
43727 (substitute* "staticsite/global_settings.py"
43728 (("/usr/share/staticsite") #$output))))
43729 (add-after 'install 'install-themes
43730 (lambda _
43731 (let ((themedir (string-append #$output "/themes")))
43732 (copy-recursively "themes" themedir)))))))
43733 (native-inputs
43734 (list python-hatchling
43735 python-pytest))
43736 (inputs
43737 (list perl-image-exiftool
43738 python-dateutil
43739 python-docutils
43740 python-jinja2
43741 python-markdown
43742 python-pillow
43743 python-pytz
43744 python-pyyaml
43745 python-ruamel.yaml
43746 python-slugify
43747 python-toml
43748 tzdata-for-tests))
43749 (home-page "https://github.com/spanezz/staticsite")
43750 (synopsis "Static site generator")
43751 (description
43752 "Statistic is a static site generator based on Markdown and Jinja2.")
43753 (license (list license:gpl3+ license:expat))))
43754
43755;;;
43756;;; Avoid adding new packages to the end of this file. To reduce the chances
43757;;; of a merge conflict, place them above in alphabetic order:
43758;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43759;;;