projects/guix·blob java-team · refs

43794 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 node-xyz)
279 #:use-module (gnu packages nss)
280 #:use-module (gnu packages openstack)
281 #:use-module (gnu packages pcre)
282 #:use-module (gnu packages pdf)
283 #:use-module (gnu packages perl)
284 #:use-module (gnu packages photo)
285 #:use-module (gnu packages pkg-config)
286 #:use-module (gnu packages protobuf)
287 #:use-module (gnu packages python)
288 #:use-module (gnu packages python-build)
289 #:use-module (gnu packages python-check)
290 #:use-module (gnu packages python-compression)
291 #:use-module (gnu packages python-crypto)
292 #:use-module (gnu packages python-science)
293 #:use-module (gnu packages python-web)
294 #:use-module (gnu packages qt)
295 #:use-module (gnu packages rdf)
296 #:use-module (gnu packages readline)
297 #:use-module (gnu packages regex)
298 #:use-module (gnu packages rpc)
299 #:use-module (gnu packages rust)
300 #:use-module (gnu packages scanner)
301 #:use-module (gnu packages search)
302 #:use-module (gnu packages serialization)
303 #:use-module (gnu packages shells)
304 #:use-module (gnu packages specifications)
305 #:use-module (gnu packages sphinx)
306 #:use-module (gnu packages ssh)
307 #:use-module (gnu packages statistics)
308 #:use-module (gnu packages task-management)
309 #:use-module (gnu packages tcl)
310 #:use-module (gnu packages tex)
311 #:use-module (gnu packages texinfo)
312 #:use-module (gnu packages time)
313 #:use-module (gnu packages tls)
314 #:use-module (gnu packages tree-sitter)
315 #:use-module (gnu packages valgrind)
316 #:use-module (gnu packages version-control)
317 #:use-module (gnu packages video)
318 #:use-module (gnu packages web)
319 #:use-module (gnu packages wxwidgets)
320 #:use-module (gnu packages xdisorg)
321 #:use-module (gnu packages xml)
322 #:use-module (gnu packages xorg)
323 #:use-module (gnu packages)
324 #:use-module (guix build-system cargo)
325 #:use-module (guix build-system cmake)
326 #:use-module (guix build-system copy)
327 #:use-module (guix build-system gnu)
328 #:use-module (guix build-system meson)
329 #:use-module (guix build-system pyproject)
330 #:use-module (guix deprecation)
331 #:use-module (guix download)
332 #:use-module (guix gexp)
333 #:use-module (guix git-download)
334 #:use-module (guix hg-download)
335 #:use-module ((guix licenses) #:prefix license:)
336 #:use-module (guix packages)
337 #:use-module (guix utils)
338 #:use-module (ice-9 match)
339 #:use-module (srfi srfi-1)
340 #:use-module (srfi srfi-26))
341
342(define-public python-aenum
343 (package
344 (name "python-aenum")
345 (version "3.1.17")
346 (source
347 (origin
348 (method git-fetch)
349 (uri (git-reference
350 (url "https://github.com/ethanfurman/aenum")
351 (commit version)))
352 (file-name (git-file-name name version))
353 (sha256
354 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
355 (build-system pyproject-build-system)
356 (arguments
357 (list
358 #:phases
359 #~(modify-phases %standard-phases
360 (add-after 'unpack 'fix
361 (lambda _
362 (substitute* "aenum/_py2.py"
363 (("raise exc.*")
364 "raise exc.with_traceback(tb)")))))
365 #:tests? #f)) ;no tests
366 (native-inputs (list python-setuptools))
367 (home-page "https://github.com/ethanfurman/aenum")
368 (synopsis
369 "Support for advanced enumerations, namedtuples and namedconstants")
370 (description
371 "AEnum is a set of symbolic names (members) bound to unique, constant
372values. Within an enumeration, the members can be compared by identity, and
373the enumeration itself can be iterated over. There is built-in support for
374unique values, multiple values, auto-numbering, and suspension of aliasing
375(members with the same value are not identical), plus the ability to have
376values automatically bound to attributes.")
377 (license license:bsd-3)))
378
379(define-public python-accumulation-tree
380 ;; Only minor releases (0.x) are tagged, not patch versions.
381 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
382 (revision "0"))
383 (package
384 (name "python-accumulation-tree")
385 (version (git-version "0.6.4" revision commit))
386 (source
387 (origin
388 (method git-fetch)
389 (uri (git-reference
390 (url "https://github.com/tkluck/accumulation_tree")
391 (commit commit)))
392 (file-name (git-file-name name version))
393 (sha256
394 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
395 (modules '((guix build utils)))
396 (snippet ;use src layout for isolated tests
397 #~(let* ((src "src/")
398 (old "accumulation_tree/")
399 (new (string-append src old)))
400 (mkdir src)
401 (rename-file old new)
402 (substitute* "setup.py"
403 (("packages=" all)
404 (string-append "package_dir={'': '" src "'}, " all))
405 ((old)
406 new))))))
407 (build-system pyproject-build-system)
408 (arguments
409 (list #:test-backend #~'custom
410 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
411 (native-inputs (list python-cloudpickle python-cython python-setuptools))
412 (home-page "https://github.com/tkluck/accumulation_tree")
413 (synopsis "Red-black tree with fast value accumulation in a key range")
414 (description
415 "This Python package implements a red-black tree which also stores
416partial aggregations at each node, making getting aggregations
417of key range slices an O(log(N)) operation.
418
419This data structure is very similar to a binary indexed tree,
420with heap allocation instead of a flat array to represent a tree.")
421 (license license:expat))))
422
423(define-public python-anaconda-cli-base
424 (package
425 (name "python-anaconda-cli-base")
426 (version "0.8.2")
427 (source
428 (origin
429 (method git-fetch)
430 (uri (git-reference
431 (url "https://github.com/anaconda/anaconda-cli-base")
432 (commit (string-append "v" version))))
433 (file-name (git-file-name name version))
434 (sha256
435 (base32 "1vsbxcgn05d7mlwl17f0bfq25lydl7i8n4x0a95hmjdl45n1q9wx"))))
436 (build-system pyproject-build-system)
437 (arguments
438 (list
439 #:test-flags
440 #~(list "--deselect=tests/test_cli.py::test_cli_version"
441 "--deselect=tests/test_cli.py::test_load_plugin")))
442 (native-inputs
443 (list python-hatch-vcs
444 python-hatchling
445 python-pytest
446 python-pytest-mock
447 python-setuptools-scm
448 python-types-requests))
449 (propagated-inputs
450 (list python-click
451 python-packaging
452 python-pydantic
453 python-pydantic-settings
454 python-readchar
455 python-rich
456 python-tomli
457 python-tomlkit
458 python-typer))
459 (home-page "https://anaconda.github.io/anaconda-cli-base/")
460 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
461 (description
462 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
463 (license license:bsd-3)))
464
465(define-public python-annexremote
466 (package
467 (name "python-annexremote")
468 (version "1.6.6")
469 (source
470 (origin
471 (method git-fetch)
472 (uri (git-reference
473 (url "https://github.com/Lykos153/AnnexRemote")
474 (commit (string-append "v" version))))
475 (file-name (git-file-name name version))
476 (sha256
477 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
478 (build-system pyproject-build-system)
479 (native-inputs
480 (list python-pytest
481 python-setuptools
482 python-setuptools-scm))
483 (home-page "https://github.com/Lykos153/AnnexRemote")
484 (synopsis "Helper module to easily develop git-annex special remotes")
485 (description
486 "This package provides a helper module to develop special remotes for
487git-annex. AnnexRemote implements the line-based external special remote
488protocol of git-annex, while leaving the behavior of the remote up to the
489user.")
490 (license license:gpl3)))
491
492(define-public python-annotated-doc
493 (package
494 (name "python-annotated-doc")
495 (version "0.0.4")
496 (source
497 (origin
498 (method git-fetch)
499 (uri (git-reference
500 (url "https://github.com/fastapi/annotated-doc")
501 (commit version)))
502 (file-name (git-file-name name version))
503 (sha256
504 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
505 (build-system pyproject-build-system)
506 (native-inputs
507 (list python-pytest
508 python-pdm-backend))
509 (home-page "https://github.com/fastapi/annotated-doc")
510 (synopsis "Annotated for some Python objects")
511 (description
512 "This package implements a functionality for document parameters, class
513attributes, return types, and variables inline, with
514Annotated.")
515 (license license:expat)))
516
517(define-public python-archspec
518 (package
519 (name "python-archspec")
520 (version "0.2.5")
521 (source
522 (origin
523 (method git-fetch)
524 (uri (git-reference
525 (url "https://github.com/archspec/archspec")
526 (commit (string-append "v" version))
527 (recursive? #t)))
528 (file-name (git-file-name name version))
529 (sha256
530 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
531 (build-system pyproject-build-system)
532 (native-inputs
533 (list python-jsonschema
534 python-poetry-core
535 python-pytest))
536 (home-page "https://github.com/archspec/archspec")
537 (synopsis "Library to query system architecture")
538 (description
539 "Archspec offers human-readable labels for system architecture aspects.
540These aspects include CPU, network fabrics, etc. In addition, it offers
541APIs to detect, query, and compare them.")
542 (license license:expat)))
543
544(define-public python-astar
545 ;; The Git repository has no tag.
546 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
547 (revision "0"))
548 (package
549 (name "python-astar")
550 (version (git-version "0.99" revision commit))
551 (source
552 (origin
553 (method git-fetch)
554 (uri (git-reference
555 (url "https://github.com/jrialland/python-astar")
556 (commit commit)))
557 (file-name (git-file-name name version))
558 (sha256
559 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
560 (build-system pyproject-build-system)
561 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
562 ;; the test suite has been written for unittest.
563 (native-inputs (list python-poetry-core))
564 (home-page "https://github.com/jrialland/python-astar")
565 (synopsis "Implementation of the A* search algorithm")
566 (description
567 "The @code{astar} Python package provide a generic implementation
568of the A* graph traversal and pathfinding algorithm.")
569 (license license:bsd-3))))
570
571(define-public python-asyncclick
572 (package
573 (name "python-asyncclick")
574 (version "8.3.0.3")
575 (source
576 (origin
577 (method url-fetch)
578 (uri (pypi-uri "asyncclick" version))
579 (sha256
580 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
581 (build-system pyproject-build-system)
582 ;; tests: 1418 passed, 21 skipped, 1 xfailed
583 (native-inputs
584 (list less
585 python-flit-core
586 python-pytest
587 python-trio))
588 (propagated-inputs
589 (list python-anyio))
590 (home-page "https://github.com/python-trio/asyncclick")
591 (synopsis "Python composable command line utility, trio-compatible version ")
592 (description
593 "AsyncClick is a fork of Click that works well with anyio, Trio, or
594asyncio.")
595 (license license:bsd-3)))
596
597(define-public python-asyncstdlib
598 (package
599 (name "python-asyncstdlib")
600 (version "3.13.0")
601 (source
602 (origin
603 (method url-fetch)
604 (uri (pypi-uri "asyncstdlib" version))
605 (sha256
606 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
607 (build-system pyproject-build-system)
608 (native-inputs (list python-flit-core python-pytest))
609 (home-page "https://asyncstdlib.readthedocs.io")
610 (synopsis "Compatibility layer between the Python stdlib and @code{async}
611callables")
612 (description
613 "The @code{asyncstdlib} library re-implements functions and classes of
614the Python standard library to make them compatible with @code{async}
615callables, iterables and context managers. It is fully agnostic to
616@code{async} event loops and seamlessly works with @code{asyncio}, third-party
617libraries such as @code{trio}, as well as any custom @code{async} event
618loop.")
619 (license license:expat)))
620
621(define-public python-awesomeversion
622 (package
623 (name "python-awesomeversion")
624 (version "24.6.0")
625 (source
626 (origin
627 (method git-fetch)
628 (uri (git-reference
629 (url "https://github.com/ludeeus/awesomeversion")
630 (commit version)))
631 (file-name (git-file-name name version))
632 (sha256
633 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
634 (modules '((guix build utils)))
635 (snippet #~(substitute* "pyproject.toml"
636 (("version = \"0\"")
637 (format #f "version = \"~a\"" #$version))))))
638 (build-system pyproject-build-system)
639 (native-inputs
640 (list python-poetry-core
641 python-pytest
642 python-pytest-snapshot))
643 (home-page "https://github.com/ludeeus/awesomeversion")
644 (synopsis "Create and compare version objects")
645 (description
646 "This package provides a way to make anything a version object, and
647compare against a vast section of other version formats.")
648 (license license:expat)))
649
650(define-public python-awkward-cpp
651 (package
652 (name "python-awkward-cpp")
653 ;; TODO: any higher versions need pybind11 >= 3, see:
654 ;; <https://codeberg.org/guix/guix/pulls/4696>.
655 (version "47")
656 (source
657 (origin
658 (method url-fetch)
659 (uri (pypi-uri "awkward_cpp" version))
660 (sha256
661 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
662 (build-system pyproject-build-system)
663 ;; tests: 22304 passed, 524 skipped
664 (native-inputs
665 (list cmake-minimal
666 pybind11-2
667 python-pytest
668 python-scikit-build-core))
669 (propagated-inputs
670 (list python-numpy))
671 (home-page "https://awkward-array.org/")
672 (synopsis "CPU kernels and compiled extensions for Awkward Array")
673 (description "Awkward CPP provides precompiled routines for the awkward
674package. It is not useful on its own, only as a dependency for awkward.")
675 (license license:bsd-3)))
676
677(define-public python-awkward
678 (package
679 (name "python-awkward")
680 (version "2.8.5")
681 (source
682 (origin
683 (method url-fetch)
684 (uri (pypi-uri "awkward" version))
685 (sha256
686 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
687 (build-system pyproject-build-system)
688 (arguments
689 (list
690 ;; tests: 2798 passed, 156 skipped
691 #:test-flags
692 ;; CUDA is and requires proprietary software.
693 #~(list "--ignore=tests-cuda-kernels/"
694 "--ignore=tests-cuda/")))
695 (native-inputs
696 (list python-hatch-fancy-pypi-readme
697 python-hatchling
698 python-pytest))
699 (propagated-inputs
700 (list python-awkward-cpp
701 python-fsspec
702 python-importlib-metadata
703 python-numpy
704 python-packaging))
705 (home-page "https://awkward-array.org/")
706 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
707 (description "Awkward Array is a library for nested, variable-sized data,
708including arbitrary-length lists, records, mixed types, and missing data,
709using NumPy-like idioms.")
710 (license license:bsd-3)))
711
712(define-public python-bracex
713 (package
714 (name "python-bracex")
715 (version "2.6")
716 (source
717 (origin
718 (method git-fetch)
719 (uri (git-reference
720 (url "https://github.com/facelessuser/bracex")
721 (commit version)))
722 (file-name (git-file-name name version))
723 (sha256
724 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
725 (build-system pyproject-build-system)
726 (native-inputs
727 (list python-hatchling
728 python-pytest))
729 (home-page "https://facelessuser.github.io/bracex/")
730 (synopsis "Bash-style brace expansion for Python")
731 (description
732 "Bracex is a brace expansion library for Python that implements
733Bash-style brace expansion. It can generate strings from patterns like
734@code{@{a,b,c@}} or @code{@{1..10@}}.")
735 (license license:expat)))
736
737(define-public python-bresenham
738 (package
739 (name "python-bresenham")
740 (version "0.2.1")
741 (source
742 (origin
743 (method git-fetch)
744 (uri (git-reference
745 (url "https://github.com/encukou/bresenham")
746 (commit (string-append "v" version))))
747 (file-name (git-file-name name version))
748 (sha256
749 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
750 (build-system pyproject-build-system)
751 (native-inputs
752 (list python-pytest
753 python-setuptools
754 python-wheel))
755 (home-page "https://github.com/encukou/bresenham")
756 (synopsis "Implementation of Bresenham's line drawing algorithm")
757 (description
758 "This package provides a Python implementation of
759@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
760line drawing algorithm}.")
761 (license license:expat)))
762
763(define-public python-cachey
764 (package
765 (name "python-cachey")
766 (version "0.2.1")
767 (source
768 (origin
769 (method git-fetch)
770 (uri (git-reference
771 (url "https://github.com/dask/cachey/")
772 (commit version)))
773 (file-name (git-file-name name version))
774 (sha256
775 (base32 "12rkn4cvdwlpjhlmyxi1glvn1nzlx147xs96h9k6pbgbwyxaci75"))))
776 (build-system pyproject-build-system)
777 (native-inputs
778 (list python-pytest
779 python-setuptools))
780 (propagated-inputs
781 (list python-heapdict))
782 (home-page "https://github.com/dask/cachey/")
783 (synopsis "Caching based on computation time and storage space")
784 (description
785 "This package provides a Python module for caching mindful of
786computation/storage costs.")
787 (license license:bsd-3)))
788
789(define-public python-catalogus
790 (package
791 (name "python-catalogus")
792 (version "0.1.0")
793 (source
794 (origin
795 (method git-fetch)
796 (uri (git-reference
797 (url "https://github.com/breezy-team/catalogus")
798 (commit (string-append "v" version))))
799 (file-name (git-file-name name version))
800 (sha256
801 (base32 "0l34anf0h4rcsimq78q6y1s2m91605pxwpzfzxr2vh2hl45sy4w5"))))
802 (build-system pyproject-build-system)
803 (native-inputs
804 (list python-pytest
805 python-setuptools
806 python-setuptools-scm))
807 (home-page "https://github.com/breezy-team/catalogus")
808 (synopsis "Classes to provide name-to-object registry-like support")
809 (description
810 "This package provides classes to provide name-to-object registry-like
811support.")
812 (license license:gpl2+)))
813
814(define-public python-catppuccin
815 (package
816 (name "python-catppuccin")
817 (version "2.5.0")
818 (source
819 (origin
820 (method url-fetch)
821 (uri (pypi-uri "catppuccin" version))
822 (sha256
823 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
824 (build-system pyproject-build-system)
825 (native-inputs
826 (list python-hatchling python-pytest
827 ;; These are optional dependencies but required for tests.
828 python-matplotlib python-pygments python-rich))
829 (home-page "https://github.com/catppuccin/python")
830 (synopsis "Pastel palette for Python libraries")
831 (description "Catppuccin for Python is a soothing pastel palette for Python
832libraries. It aims to be the middle ground between low and high contrast
833themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
834 (license license:expat)))
835
836(define-public python-calmjs-parse
837 (package
838 (name "python-calmjs-parse")
839 (version "1.3.3")
840 (source
841 (origin
842 (method git-fetch)
843 (uri (git-reference
844 (url "https://github.com/calmjs/calmjs.parse/")
845 (commit version)))
846 (file-name (git-file-name name version))
847 (sha256
848 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
849 (build-system pyproject-build-system)
850 ;; tests: 797 passed, 1 warning
851 (native-inputs (list python-pytest python-setuptools))
852 (propagated-inputs (list python-ply))
853 (home-page "https://github.com/calmjs/calmjs.parse/")
854 (synopsis "Parsers for ECMA standards")
855 (description
856 "@code{Calmjs-parse} is a collection of helper libraries for
857understanding ECMA script.")
858 (license license:expat)))
859
860(define-public python-chameleon
861 (package
862 (name "python-chameleon")
863 (version "4.6.0")
864 (source
865 (origin
866 (method url-fetch)
867 (uri (pypi-uri "Chameleon" version))
868 (sha256
869 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
870 (build-system pyproject-build-system)
871 (native-inputs
872 (list python-pytest
873 python-setuptools))
874 (home-page "https://chameleon.readthedocs.io")
875 (synopsis "Fast HTML/XML Template Compiler")
876 (description
877 "Chameleon is an HTML/XML template engine for Python. It uses the page
878templates language.")
879 ;; Project is duo licensed, see: LICENSE.txt.
880 (license (list license:zpl2.1
881 license:psfl))))
882
883(define-public python-click-extra
884 (package
885 (name "python-click-extra")
886 (version "8.8.1")
887 (source
888 (origin
889 (method git-fetch)
890 (uri (git-reference
891 (url "https://github.com/kdeldycke/click-extra")
892 (commit (string-append "v" version))))
893 (file-name (git-file-name name version))
894 (sha256
895 (base32 "0i22as7f22qhnp69c7zwdh7k4pzl45ywa0hdj71j0n07lqdmdqc7"))))
896 (build-system pyproject-build-system)
897 (arguments
898 (list
899 ;; Upstream uses uv-build which is not yet available in Guix.
900 #:build-backend "setuptools.build_meta"
901 ;; tets: 3659 passed, 509 skipped, 4 deselected, 4 xfailed, 1267 warnings
902 #:test-flags
903 ;; Skip the network tests.
904 #~(list "-m" "not network"
905 ;; Prevent adding python-sphinx into scope.
906 (string-append "--deselect=tests/test_blocks.py"
907 "::test_blocks_reexported_from_sphinx_package"))))
908 (native-inputs
909 ;; Optional libraries imported at module level by the test suite.
910 (list python-hjson
911 python-jsonschema
912 python-pygments
913 python-pytest
914 python-pytest-httpserver
915 python-pyyaml
916 python-requests
917 python-setuptools
918 python-tomlkit
919 python-xmltodict))
920 (propagated-inputs
921 (list python-boltons
922 python-click
923 python-cloup
924 python-deepmerge
925 python-extra-platforms
926 python-tabulate
927 python-wcmatch
928 python-wcwidth))
929 (home-page "https://kdeldycke.github.io/click-extra/")
930 (synopsis "Drop-in replacement for Click to build colorful CLIs")
931 (description
932 "Click Extra extends the Click framework with colored help screens,
933configuration file support, table rendering, and platform detection. It
934serves as a drop-in replacement adding features for user-friendly command-line
935interfaces.")
936 (license license:gpl2+)))
937
938(define-public python-comrak
939 (package
940 (name "python-comrak")
941 (version "0.0.16")
942 (source
943 (origin
944 (method url-fetch)
945 (uri (pypi-uri "comrak" version))
946 (sha256
947 (base32 "1nzr1d957vac16kvy4si3hykx5cbcm73vpy94nm74rf66hgpx8m3"))))
948 (build-system pyproject-build-system)
949 (arguments
950 (list
951 #:imported-modules (append %cargo-build-system-modules
952 %pyproject-build-system-modules)
953 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
954 (guix build pyproject-build-system)
955 (guix build utils))
956 #:phases
957 #~(modify-phases %standard-phases
958 (add-after 'unpack 'prepare-cargo-build-system
959 (lambda args
960 (for-each (lambda (phase)
961 (format #t "Running cargo phase: ~a~%" phase)
962 (apply (assoc-ref cargo:%standard-phases phase)
963 #:cargo-target #$(cargo-triplet)
964 args))
965 '(prepare-rust-crates
966 unpack-rust-crates
967 configure
968 check-for-pregenerated-files
969 patch-cargo-checksums)))))))
970 (native-inputs
971 (append
972 (list maturin
973 python-pytest
974 rust
975 `(,rust "cargo"))
976 (or (and=> (%current-target-system)
977 (compose list make-rust-sysroot))
978 '())))
979 (inputs (cargo-inputs 'python-comrak))
980 (home-page "https://github.com/lmmx/comrak")
981 (synopsis "Python bindings for the Comrak Rust library")
982 (description
983 "This package provides Python bindings for the Comrak Rust library, a
984fast @code{CommonMark/GFM} parser.")
985 (license license:expat)))
986
987(define-public python-conda-content-trust
988 (package
989 (name "python-conda-content-trust")
990 (version "0.2.0")
991 (source
992 (origin
993 (method git-fetch)
994 (uri (git-reference
995 (url "https://github.com/conda/conda-content-trust")
996 (commit version)))
997 (file-name (git-file-name name version))
998 (sha256
999 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
1000 (build-system pyproject-build-system)
1001 (arguments
1002 (list
1003 #:test-flags
1004 ;; XXX: Not packaged yet:
1005 ;; <https://github.com/secure-systems-lab/securesystemslib>.
1006 ;;
1007 ;; ImportError: The securesystemslib library is required, which appears
1008 ;; to be unavailable.
1009 #~(list #$@(map (lambda (test) (string-append "--deselect="
1010 "tests/test_root.py::"
1011 test))
1012 (list "test_sign_root_metadata_dict_via_gpg"
1013 "test_sign_root_metadata_via_gpg"
1014 "test_gpg_pubkey_in_ssl_format")))))
1015 (native-inputs
1016 (list python-hatch-vcs
1017 python-hatchling
1018 python-pytest))
1019 (propagated-inputs
1020 (list python-cryptography))
1021 (home-page "https://github.com/conda/conda-content-trust")
1022 (synopsis "Signing and verification tools for Conda")
1023 (description
1024 "This package implements a functionalit of signing and verification tools
1025for Conda. @url{https://theupdateframework.io/, Based on The Update
1026Framework (TUF)}, conda-content-trust is intended to ensure that when users in
1027the conda ecosystem obtain a package or data about that package, they can know
1028whether or not it is trustworthy (e.g. originally comes from a reliable source
1029and has not been tampered with). A basic library and basic CLI are included
1030to provide signing, verification, and trust delegation functionality.")
1031 (license license:bsd-3)))
1032
1033(define-public python-conda-inject
1034 (package
1035 (name "python-conda-inject")
1036 (version "1.3.2")
1037 (source
1038 (origin
1039 (method git-fetch)
1040 (uri (git-reference
1041 (url "https://github.com/koesterlab/conda-inject")
1042 (commit (string-append "v" version))))
1043 (file-name (git-file-name name version))
1044 (sha256
1045 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
1046 (build-system pyproject-build-system)
1047 (arguments
1048 (list #:tests? #f)) ; tests require setting up Conda
1049 (native-inputs
1050 (list python-poetry-core))
1051 (propagated-inputs
1052 (list python-pyyaml))
1053 (home-page "https://github.com/koesterlab/conda-inject")
1054 (synopsis "Inject a conda environment into the current python environment")
1055 (description
1056 "This package provides helper functions for injecting a conda
1057environment into the current python environment (by modifying @code{sys.path},
1058without actually changing the current python environment).")
1059 (license license:expat)))
1060
1061(define-public python-copydetect
1062 (package
1063 (name "python-copydetect")
1064 (version "0.5.0")
1065 (source
1066 (origin
1067 (method git-fetch)
1068 (uri (git-reference
1069 (url "https://github.com/blingenf/copydetect")
1070 (commit version)))
1071 (sha256
1072 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
1073 (build-system pyproject-build-system)
1074 (propagated-inputs (list python-jinja2
1075 python-matplotlib
1076 python-numpy
1077 python-pygments
1078 python-tqdm))
1079 (native-inputs (list python-setuptools
1080 python-pytest
1081 python-wheel))
1082 (home-page "https://github.com/blingenf/copydetect")
1083 (synopsis "Code plagiarism detection tool")
1084 (description "Copydetect is a tool to detect likely instances of plagiarism
1085based on the winnowing algorithm. It takes a list of directories as input and
1086generates an HTML report displaying copied slices as output.")
1087 (license license:expat)))
1088
1089(define-public python-couleur
1090 (package
1091 (name "python-couleur")
1092 (version "0.7.4")
1093 (source
1094 (origin
1095 (method url-fetch)
1096 (uri (pypi-uri "couleur" version))
1097 (sha256
1098 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
1099 (build-system pyproject-build-system)
1100 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1101 (native-inputs
1102 (list python-setuptools
1103 python-wheel))
1104 (home-page "https://github.com/gabrielfalcao/couleur")
1105 (synopsis "ANSI terminal tool for Python")
1106 (description
1107 "This package provides an ANSI terminal tool for Python, colored shell
1108and other handy fancy features.")
1109 (license license:lgpl3+)))
1110
1111(define-public python-crc
1112 (package
1113 (name "python-crc")
1114 (version "7.1.0")
1115 (source
1116 (origin
1117 (method git-fetch)
1118 (uri (git-reference
1119 (url "https://github.com/Nicoretti/crc/")
1120 (commit version)))
1121 (file-name (git-file-name name version))
1122 (sha256
1123 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1124 (build-system pyproject-build-system)
1125 (native-inputs
1126 (list python-poetry-core
1127 python-pytest
1128 python-wheel))
1129 (home-page "https://nicoretti.github.io/crc/")
1130 (synopsis "Pure Python CRC library")
1131 (description
1132 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1133CRC} checksums, using predefined and custom CRC configurations.
1134
1135Configurations:
1136@table @asis
1137@item CRC8
1138 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1139@item CRC16
1140 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1141@item CRC32
1142 CRC32 AUTOSAR BZIP2 POSIX
1143@item CRC64
1144 CRC64
1145@end table")
1146 (license license:bsd-2)))
1147
1148(define-public python-cron-converter
1149 (package
1150 (name "python-cron-converter")
1151 (version "1.3.1")
1152 (source
1153 (origin
1154 (method git-fetch)
1155 (uri (git-reference
1156 (url "https://github.com/Sonic0/cron-converter")
1157 (commit (string-append "v" version))))
1158 (file-name (git-file-name name version))
1159 (sha256
1160 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1161 (build-system pyproject-build-system)
1162 (arguments
1163 (list #:test-backend #~'unittest
1164 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1165 (native-inputs
1166 (list python-dateutil
1167 python-setuptools))
1168 (propagated-inputs
1169 (list python-dateutil))
1170 (home-page "https://github.com/Sonic0/cron-converter")
1171 (synopsis "Cron string parser and scheduler for Python")
1172 (description
1173 "Cron-converter provides a Cron string parser (from string/lists to
1174string/lists) and iteration for the datetime object with a cron like format.")
1175 (license license:expat)))
1176
1177(define-public python-curtsies
1178 (package
1179 (name "python-curtsies")
1180 (version "0.4.3")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "curtsies" version))
1185 (sha256
1186 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1187 (build-system pyproject-build-system)
1188 (native-inputs
1189 (list python-pyte
1190 python-pytest
1191 python-setuptools
1192 python-wheel))
1193 (propagated-inputs
1194 (list python-blessed
1195 python-cwcwidth))
1196 (home-page "https://github.com/bpython/curtsies")
1197 (synopsis "Library for curses-like terminal interaction with colored strings")
1198 (description
1199 "Curtsies is a Python library for interacting with the terminal. It
1200features string-like objects which carry formatting information, per-line
1201fullscreen terminal rendering, and keyboard input event reporting.")
1202 (license license:expat)))
1203
1204(define-public python-customtkinter
1205 (package
1206 (name "python-customtkinter")
1207 (version "5.2.2")
1208 (source
1209 (origin
1210 (method git-fetch)
1211 (uri (git-reference
1212 (url "https://github.com/TomSchimansky/CustomTkinter")
1213 (commit (string-append "v" version))))
1214 (file-name (git-file-name name version))
1215 (sha256
1216 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1217 (build-system pyproject-build-system)
1218 (arguments
1219 (list
1220 #:phases
1221 #~(modify-phases %standard-phases
1222 (add-before 'check 'start-xorg-server
1223 (lambda _
1224 (setenv "HOME" "/tmp")
1225 ;; The test suite requires a running X server.
1226 (system "Xvfb :99 -screen 0 1024x768x24 &")
1227 (setenv "DISPLAY" ":99.0")))
1228 (replace 'check
1229 (lambda* (#:key tests? #:allow-other-keys)
1230 (when tests?
1231 (with-directory-excursion "test"
1232 (invoke "python" "unit_tests/test_all.py"))))))))
1233 (propagated-inputs
1234 (list (list python "tk")
1235 python-darkdetect
1236 python-packaging))
1237 (native-inputs
1238 (list python-setuptools
1239 xorg-server-for-tests))
1240 (home-page "https://customtkinter.tomschimansky.com")
1241 (synopsis
1242 "Python @acronym{User Interface, UI} library based on Tkinter")
1243 (description
1244 "CustomTkinter provides fully customizable widgets, created and used
1245like normal Tkinter widgets, which can also be used in combination with normal
1246Tkinter elements.")
1247 (license license:expat)))
1248
1249(define-public python-cyclopts
1250 (package
1251 (name "python-cyclopts")
1252 (version "4.14.0")
1253 (source
1254 (origin
1255 (method git-fetch)
1256 (uri (git-reference
1257 (url "https://github.com/BrianPugh/cyclopts")
1258 (commit (string-append "v" version))))
1259 (file-name (git-file-name name version))
1260 (sha256
1261 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1262 (build-system pyproject-build-system)
1263 (arguments
1264 (list
1265 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1266 #:test-flags
1267 #~(list #$@(map (lambda (test) (string-append "--deselect="
1268 "tests/completion/"
1269 "test_bash.py::"
1270 test))
1271 (list "test_list_path_multi_positional_default_case"
1272 "test_eq_form_path_completion"
1273 "test_bash_path_completion_reflects_caller_cwd"))
1274 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1275 (native-inputs
1276 (list python-docutils
1277 python-hatch-vcs
1278 python-hatchling
1279 python-mkdocs
1280 python-pexpect
1281 python-pydantic
1282 python-pytest
1283 python-pytest-mock
1284 python-pyyaml
1285 python-sphinx
1286 python-syrupy
1287 python-toml
1288 python-trio))
1289 (propagated-inputs
1290 (list python-attrs
1291 python-docstring-parser
1292 python-rich
1293 python-rich-rst
1294 python-tomli
1295 python-typing-extensions))
1296 (home-page "https://github.com/BrianPugh/cyclopts")
1297 (synopsis "Intuitive, easy CLIs based on type hints")
1298 (description
1299 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1300that aims to provide an intuitive & efficient developer experience.")
1301 (license license:asl2.0)))
1302
1303(define-public python-darkdetect
1304 (package
1305 (name "python-darkdetect")
1306 (version "0.8.0")
1307 (source
1308 (origin
1309 (method url-fetch)
1310 (uri (pypi-uri "darkdetect" version))
1311 (sha256
1312 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1313 (build-system pyproject-build-system)
1314 (arguments
1315 (list
1316 #:tests? #f)) ;no tests in PyPI or Git.
1317 (native-inputs (list python-setuptools))
1318 (home-page "https://github.com/albertosottile/darkdetect")
1319 (synopsis "Detect OS dark mode from Python")
1320 (description
1321 "This package allows to detect if the user is using Dark Mode.")
1322 (license license:bsd-3)))
1323
1324(define-public python-dbus-deviation
1325 (package
1326 (name "python-dbus-deviation")
1327 (version "0.6.1")
1328 (source
1329 (origin
1330 (method url-fetch)
1331 (uri (pypi-uri "dbus-deviation" version))
1332 (sha256
1333 (base32 "18xp1s6k2x08d7a4ksh4dwf3sikvkdycylfz4lkmv213wbpqhsz0"))))
1334 (build-system pyproject-build-system)
1335 (arguments
1336 (list
1337 #:phases
1338 #~(modify-phases %standard-phases
1339 (add-after 'unpack 'patch-sources
1340 ;; See: <https://github.com/pwithnall/dbus-deviation/issues/22>.
1341 (lambda _
1342 (with-directory-excursion "dbusapi/tests"
1343 (substitute* '("test_interfaceparser.py" "test_ast.py")
1344 (("assertEquals") "assertEqual"))))))))
1345 (propagated-inputs (list python-lxml))
1346 (native-inputs (list python-pytest python-setuptools))
1347 (home-page "https://tecnocode.co.uk/dbus-deviation/")
1348 (synopsis "D-Bus introspection XML parser")
1349 (description "The @{dbus-deviation} library and utility parses D-Bus
1350introspection XML and processes it in various ways. For example, it can
1351represent a parsed D-Bus API XML description as an @acronym{AST, abstract
1352syntax tree}, or calculate the differences between two D-Bus APIs.")
1353 (license license:lgpl2.1+)))
1354
1355(define-public python-decopatch
1356 (package
1357 (name "python-decopatch")
1358 (version "1.4.10")
1359 (source
1360 (origin
1361 (method url-fetch)
1362 (uri (pypi-uri "decopatch" version))
1363 (sha256
1364 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1365 (build-system pyproject-build-system)
1366 (arguments
1367 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1368 (native-inputs
1369 (list python-setuptools
1370 python-setuptools-scm))
1371 (propagated-inputs
1372 (list python-makefun))
1373 (home-page "https://github.com/smarie/python-decopatch")
1374 (synopsis "Create decorators easily in Python")
1375 (description
1376 "This package provide implements a functionality to simplify writing
1377decorators in Python.")
1378 (license license:bsd-3)))
1379
1380(define-public python-dek
1381 (package
1382 (name "python-dek")
1383 (version "1.6.0")
1384 (source
1385 (origin
1386 (method git-fetch)
1387 (uri (git-reference
1388 (url "https://github.com/rec/dek")
1389 (commit (string-append "v" version))))
1390 (file-name (git-file-name name version))
1391 (sha256
1392 (base32 "14y4d1vv9w13ng12x0gk1y4gfqn2sqz91r6bf4019gpgr6kvqj8v"))))
1393 (build-system pyproject-build-system)
1394 (native-inputs (list python-hatchling python-pytest))
1395 (propagated-inputs (list python-xmod))
1396 (home-page "https://rec.github.io/dek/")
1397 (synopsis "The decorator-decorator")
1398 (description
1399 "This package implements a functionality to write a Python decorator
1400which takes no parameters isn't hard.")
1401 (license license:expat)))
1402
1403(define-public python-discovery
1404 (package
1405 (name "python-discovery")
1406 (version "1.2.1")
1407 (source
1408 (origin
1409 (method git-fetch)
1410 (uri (git-reference
1411 (url "https://github.com/tox-dev/python-discovery")
1412 (commit version)))
1413 (file-name (git-file-name name version))
1414 (sha256
1415 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1416 (build-system pyproject-build-system)
1417 (arguments
1418 (list
1419 #:test-flags
1420 ;; assert []
1421 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1422 (native-inputs
1423 (list python-pytest
1424 python-pytest-mock
1425 python-hatchling
1426 python-hatch-vcs))
1427 (propagated-inputs
1428 (list python-filelock
1429 python-platformdirs))
1430 (home-page "https://github.com/tox-dev/python-discovery")
1431 (synopsis "Python interpreter discovery")
1432 (description
1433 "@code{python-discovery} is a library for discovering Python interpreters
1434installed on the current machine which may have multiple Python versions from
1435system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1436Windows registry (PEP 514). This library finds the right one.")
1437 (license license:expat)))
1438
1439(define-public python-distance
1440 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1441 (revision "0"))
1442 (package
1443 (name "python-distance")
1444 (version (git-version "0.1.3" revision commit))
1445 (source
1446 (origin
1447 (method git-fetch)
1448 (uri (git-reference
1449 (url "https://github.com/doukremt/distance")
1450 (commit commit)))
1451 (file-name (git-file-name name version))
1452 (sha256
1453 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1454 (build-system pyproject-build-system)
1455 (arguments
1456 (list #:test-backend #~'custom
1457 #:test-flags #~(list "tests/tests.py")))
1458 (native-inputs (list python-setuptools))
1459 (home-page "https://github.com/doukremt/distance")
1460 (synopsis "Utilities for comparing sequences")
1461 (description
1462 "This package provides helpers for computing similarities between
1463arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1464Sorensen distance, plus some bonuses. All distance computations are
1465implemented in pure Python, and most of them are also implemented in C.")
1466 (license license:gpl2+))))
1467
1468(define-public python-docopt-ng
1469 (package
1470 (name "python-docopt-ng")
1471 (version "0.9.0")
1472 (source
1473 (origin
1474 (method git-fetch)
1475 (uri (git-reference
1476 (url "https://github.com/jazzband/docopt-ng")
1477 (commit version)))
1478 (file-name (git-file-name name version))
1479 (sha256
1480 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1481 (build-system pyproject-build-system)
1482 (native-inputs
1483 (list python-pdm-backend
1484 python-pytest-8))
1485 (home-page "https://github.com/jazzband/docopt-ng")
1486 (synopsis "Humane command line arguments parser")
1487 (description
1488 "This package provides Jazzband-maintained fork of docopt, the humane
1489command line arguments parser.")
1490 (license license:expat)))
1491
1492(define-public python-doi
1493 (package
1494 (name "python-doi")
1495 (version "0.2.0")
1496 (source
1497 (origin
1498 (method url-fetch)
1499 (uri (pypi-uri "python-doi" version))
1500 (sha256
1501 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1502 (build-system pyproject-build-system)
1503 (arguments
1504 (list #:test-flags
1505 #~(list "-vv"
1506 (string-append "-k not (test_validate_doi "
1507 "or test_get_real_url_from_doi)"))))
1508 (native-inputs
1509 (list python-pytest
1510 python-pytest-xdist
1511 python-setuptools
1512 python-sphinx
1513 python-sphinx-autobuild
1514 python-sphinx-rtd-theme))
1515 (home-page "https://github.com/papis/python-doi")
1516 (synopsis "Python package to work with Document Object Identifier (doi)")
1517 (description
1518 "Python package to work with Document Object Identifier (doi).")
1519 (license license:gpl3)))
1520
1521(define-public python-domdf-python-tools
1522 (package
1523 (name "python-domdf-python-tools")
1524 (version "3.10.0")
1525 (source
1526 (origin
1527 (method url-fetch)
1528 (uri (pypi-uri "domdf_python_tools" version))
1529 (sha256
1530 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1531 (build-system pyproject-build-system)
1532 (native-inputs (list python-hatch-requirements-txt))
1533 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1534 (propagated-inputs
1535 (list python-natsort
1536 python-typing-extensions))
1537 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1538 (synopsis "Helpful functions for Python")
1539 (description
1540 "This package provide helpful functions for Python's testing and
1541packaging tasks.")
1542 (license license:expat)))
1543
1544(define-public python-donfig
1545 (package
1546 (name "python-donfig")
1547 (version "0.8.1.post1")
1548 (source
1549 (origin
1550 (method git-fetch)
1551 (uri (git-reference
1552 (url "https://github.com/pytroll/donfig")
1553 (commit (string-append "v" version))))
1554 (file-name (git-file-name name version))
1555 (sha256
1556 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1557 (build-system pyproject-build-system)
1558 (native-inputs
1559 (list python-cloudpickle
1560 python-pytest
1561 python-setuptools
1562 python-versioneer))
1563 (propagated-inputs
1564 (list python-pyyaml))
1565 (home-page "https://github.com/pytroll/donfig")
1566 (synopsis "Python package for configuring a python package")
1567 (description
1568 "Donfig is a Python library meant to make configuration easier for other
1569python packages. Donfig can be configured programmatically, by environment
1570variables, or from YAML files in standard locations. The below examples show
1571the basics of using donfig.")
1572 (license license:expat)))
1573
1574(define-public python-duet
1575 (package
1576 (name "python-duet")
1577 (version "0.2.9")
1578 (source
1579 (origin
1580 (method git-fetch)
1581 (uri (git-reference
1582 (url "https://github.com/google/duet")
1583 (commit (string-append "v" version))))
1584 (file-name (git-file-name name version))
1585 (sha256
1586 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1587 (build-system pyproject-build-system)
1588 (native-inputs (list python-pytest python-setuptools))
1589 (home-page "https://github.com/google/duet")
1590 (synopsis "Simple future-based async library for Python")
1591 (description
1592 "This package provides a simple @code{Future}-based async library for
1593Python. Duet uses a structured concurrency approach to async programming,
1594relying on the @code{Future} interface for parallelism. Duet also provides
1595a way to run async/await coroutines around those @code{Future}s. Unlike most
1596async libraries, duet is re-entrant.")
1597 (license license:asl2.0)))
1598
1599(define-public python-encutils
1600 (package
1601 (name "python-encutils")
1602 (version "1.0.0")
1603 (source
1604 (origin
1605 (method git-fetch)
1606 (uri (git-reference
1607 (url "https://github.com/coherent-oss/encutils")
1608 (commit (string-append "v" version))))
1609 (file-name (git-file-name name version))
1610 (sha256
1611 (base32 "09q2rnlnkfw0pjg95can05xf8z4x5ighbckxnzkccz1f0z2y8xrc"))
1612 (snippet
1613 #~(begin
1614 ;; Upstream is badly packaged, prepare to use Flit-core build
1615 ;; backend.
1616 (use-modules (guix build utils))
1617 (mkdir "encutils")
1618 (rename-file "__init__.py" "encutils/__init__.py")))))
1619 (build-system pyproject-build-system)
1620 (arguments
1621 (list
1622 #:phases
1623 #~(modify-phases %standard-phases
1624 (add-after 'unpack 'prepare-python-module-with-flit
1625 (lambda _
1626 (call-with-output-file "pyproject.toml"
1627 (lambda (port)
1628 (format port "[build-system]
1629requires = ['flit_core']
1630build-backend = 'flit_core.buildapi'
1631[project]
1632name = ~s
1633version = ~s
1634description = ~s
1635[tool.flit.module]
1636name = ~s~%"
1637 "encutils"
1638 #$version
1639 #$(package-description this-package)
1640 "encutils"))))))))
1641 (propagated-inputs (list python-chardet))
1642 (native-inputs (list python-flit-core python-pytest))
1643 (home-page "https://github.com/coherent-oss/encutils")
1644 (synopsis "Encoding detection collection for Python")
1645 (description
1646 "This package provides a collection of helper functions to detect
1647encodings of text files (like HTML, XHTML, XML, CSS, etc.) retrieved via HTTP,
1648file or string.")
1649 ;; See: <https://github.com/coherent-oss/encutils/issues/1>.
1650 (license license:lgpl3+)))
1651
1652(define-public python-envs
1653 (package
1654 (name "python-envs")
1655 (version "1.4")
1656 (source
1657 (origin
1658 (method url-fetch)
1659 (uri (pypi-uri "envs" version))
1660 (sha256
1661 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1662 (build-system pyproject-build-system)
1663 (arguments
1664 (list #:test-backend #~'unittest))
1665 (native-inputs
1666 (list python-packaging python-poetry-core))
1667 (propagated-inputs
1668 (list python-click python-jinja2 python-terminaltables))
1669 (home-page "https://github.com/capless/envs")
1670 (synopsis "Easy access of environment variables from Python")
1671 (description
1672 "This package implements a functionality to access of environment
1673variables from Python with support for strings, booleans, list, tuples, and
1674dicts.")
1675 (license license:asl2.0)))
1676
1677(define-public python-exitcode
1678 (package
1679 (name "python-exitcode")
1680 (version "0.1.0")
1681 (source
1682 (origin
1683 (method url-fetch)
1684 (uri (pypi-uri "exitcode" version))
1685 (sha256
1686 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1687 (build-system pyproject-build-system)
1688 (arguments
1689 (list #:tests? #f)) ; no tests in PyPI or Git
1690 (native-inputs
1691 (list python-poetry-core
1692 python-setuptools))
1693 (home-page "https://github.com/rumpelsepp/exitcode")
1694 (synopsis "Preferred system exit codes as defined by sysexits.h")
1695 (description
1696 "This package implements a preferred system exit codes as defined by
1697@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1698Rust's @url{https://docs.rs/exitcode, exitcode}.")
1699 (license license:expat)))
1700
1701(define-public python-exrex
1702 (package
1703 (name "python-exrex")
1704 (version "0.12.0")
1705 (source
1706 (origin
1707 (method git-fetch)
1708 (uri (git-reference
1709 (url "https://github.com/asciimoo/exrex")
1710 (commit (string-append "v" version))))
1711 (file-name (git-file-name name version))
1712 (sha256
1713 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1714 (build-system pyproject-build-system)
1715 (arguments (list #:test-backend #~'custom
1716 #:test-flags #~'("tests.py")))
1717 (native-inputs (list python-setuptools))
1718 (home-page "https://github.com/asciimoo/exrex")
1719 (synopsis "Irregular methods for regular expressions")
1720 (description
1721 "Exrex is a command line tool and Python module that generates all,
1722or random, matching strings to a given regular expression.")
1723 (license license:agpl3+)))
1724
1725(define-public python-extra-platforms
1726 (package
1727 (name "python-extra-platforms")
1728 (version "13.6.0")
1729 (source
1730 (origin
1731 (method git-fetch)
1732 (uri (git-reference
1733 (url "https://github.com/kdeldycke/extra-platforms")
1734 (commit (string-append "v" version))))
1735 (file-name (git-file-name name version))
1736 (sha256
1737 (base32 "0h9bg8dn5zzcm0nnn5wvnc7yrwlglg5yvbxfzwkg4vm123l72zsa"))))
1738 (build-system pyproject-build-system)
1739 (arguments
1740 (list
1741 #:build-backend "setuptools.build_meta"
1742 ;; Skip the network tests.
1743 #:test-flags #~(list "-m" "not network")))
1744 (native-inputs
1745 (list python-pytest
1746 python-setuptools))
1747 (home-page "https://kdeldycke.github.io/extra-platforms/")
1748 (synopsis "Detection of architectures, platforms, and OS families")
1749 (description
1750 "Extra Platforms detects and identifies operating systems, platforms,
1751architectures, and OS families. It groups them by family for conditional
1752logic in cross-platform applications.")
1753 (license license:asl2.0)))
1754
1755(define-public python-ezdxf
1756 (package
1757 (name "python-ezdxf")
1758 (version "1.3.5")
1759 (source
1760 (origin
1761 (method git-fetch)
1762 (uri (git-reference
1763 (url "https://github.com/mozman/ezdxf")
1764 (commit (string-append "v" version))))
1765 (sha256
1766 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1767 (build-system pyproject-build-system)
1768 (native-inputs (list python-cython python-pillow python-pytest
1769 python-setuptools unzip))
1770 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1771 python-typing-extensions))
1772 (home-page "https://ezdxf.mozman.at/")
1773 (synopsis "Python library to read and write DXF drawings")
1774 (description "ezdxf is a Python package to create new DXF files and
1775read/modify/write existing DXF files.")
1776 (license license:expat)))
1777
1778(define-public python-fastnumbers
1779 (package
1780 (name "python-fastnumbers")
1781 (version "5.1.1")
1782 (source
1783 (origin
1784 (method url-fetch)
1785 (uri (pypi-uri "fastnumbers" version))
1786 (sha256
1787 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1788 (build-system pyproject-build-system)
1789 (native-inputs
1790 (list python-numpy
1791 python-pytest
1792 python-setuptools
1793 python-setuptools-scm))
1794 (home-page "https://github.com/SethMMorton/fastnumbers")
1795 (synopsis "Super-fast and clean conversions to numbers")
1796 (description
1797 "This package provides provides drop-in replacements for the Python
1798built-in @code{int} and @code{float} that are on par or faster with the Python
1799equivalents.")
1800 (license license:expat)))
1801
1802(define-public python-findpython
1803 (package
1804 (name "python-findpython")
1805 (version "0.7.0")
1806 (source
1807 (origin
1808 (method url-fetch)
1809 (uri (pypi-uri "findpython" version))
1810 (sha256
1811 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1812 (build-system pyproject-build-system)
1813 (native-inputs
1814 (list python-pdm-backend
1815 python-pytest))
1816 (propagated-inputs
1817 (list python-packaging
1818 python-platformdirs))
1819 (home-page "https://github.com/frostming/findpython")
1820 (synopsis "Find Python versions the system")
1821 (description
1822 "This package provides a utility to find Python versions on the current
1823system.")
1824 (license license:expat)))
1825
1826(define-public python-flexcache
1827 (package
1828 (name "python-flexcache")
1829 (version "0.3")
1830 (source
1831 (origin
1832 (method git-fetch)
1833 (uri (git-reference
1834 (url "https://github.com/hgrecco/flexcache")
1835 (commit version)))
1836 (file-name (git-file-name name version))
1837 (sha256
1838 (base32 "08b1i79q6gxcn6c5gkgscwjnzwlwaaz9vmlgrr7z9kbindxx61ih"))))
1839 (build-system pyproject-build-system)
1840 (native-inputs
1841 (list python-pytest
1842 python-setuptools
1843 python-setuptools-scm))
1844 (propagated-inputs
1845 (list python-typing-extensions))
1846 (home-page "https://github.com/hgrecco/flexcache")
1847 (synopsis "Caching transformed versions of a source object")
1848 (description
1849 "This package implements a functionality to cache on disk the result of
1850expensive calculations. It was started as part of
1851@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1852 (license license:bsd-3)))
1853
1854(define-public python-flexparser
1855 (package
1856 (name "python-flexparser")
1857 (version "0.4")
1858 (source
1859 (origin
1860 (method git-fetch)
1861 (uri (git-reference
1862 (url "https://github.com/hgrecco/flexparser")
1863 (commit version)))
1864 (file-name (git-file-name name version))
1865 (sha256
1866 (base32 "1aj6b2a5w0z814x4gr8z4lmpf4ivp41gikx998lkk7rbdgh2kryh"))))
1867 (build-system pyproject-build-system)
1868 (native-inputs
1869 (list python-pytest
1870 python-setuptools
1871 python-setuptools-scm))
1872 (propagated-inputs
1873 (list python-typing-extensions))
1874 (home-page "https://github.com/hgrecco/flexparser")
1875 (synopsis "Parsing made fun ... using typing")
1876 (description "This project provides a typed parser. It was started as
1877part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1878package. ")
1879 (license license:bsd-3)))
1880
1881(define-public python-fortranformat
1882 (package
1883 (name "python-fortranformat")
1884 (version "2.0.3")
1885 (source
1886 (origin
1887 (method git-fetch)
1888 (uri (git-reference
1889 (url "https://github.com/brendanarnold/py-fortranformat")
1890 (commit (string-append "v" version))))
1891 (file-name (git-file-name name version))
1892 (sha256
1893 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1894 (build-system pyproject-build-system)
1895 (native-inputs
1896 (list python-poetry-core
1897 python-pytest))
1898 (home-page "https://github.com/brendanarnold/py-fortranformat")
1899 (synopsis "FORTRAN format interpreter for Python")
1900 (description
1901 "This package mimics FORTRAN textual IO in Python - generates text from a
1902Python list of variables or will read a line of text into Python variables
1903according to the FORTRAN format statement passed.")
1904 (license license:expat)))
1905
1906(define-public python-gest-api
1907 (package
1908 (name "python-gest-api")
1909 (version "0.1")
1910 (source
1911 (origin
1912 (method url-fetch)
1913 (uri (pypi-uri "gest_api" version))
1914 (sha256
1915 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1916 (build-system pyproject-build-system)
1917 (native-inputs
1918 (list python-pytest
1919 python-setuptools))
1920 (propagated-inputs
1921 (list python-pydantic))
1922 (home-page "https://github.com/campa-consortium/gest-api")
1923 (synopsis "Standardization for generators")
1924 (description
1925 "This package provides a standard for generating test points and
1926exchanging variables, objectives, and constraints in optimization problems.
1927
1928It is an effort to standardize the interface of the generators in optimization
1929libraries such as:
1930@itemize
1931@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1932high-level optimization in Python
1933@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1934scale, powered by @code{libEnsemble}
1935@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1936toolkit for coordinating asynchronous and dynamic ensembles of calculations
1937@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1938and execution of large, black-box optimization problems
1939@end itemize")
1940 (license license:bsd-3)))
1941
1942(define-public python-grapheme
1943 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1944 ;; branch.
1945 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1946 (revision "0"))
1947 (package
1948 (name "python-grapheme")
1949 (version (git-version "0.6.0" revision commit))
1950 (source
1951 (origin
1952 (method git-fetch)
1953 (uri (git-reference
1954 (url "https://github.com/alvinlindstam/grapheme")
1955 (commit commit)))
1956 (file-name (git-file-name name version))
1957 (sha256
1958 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1959 (build-system pyproject-build-system)
1960 (native-inputs
1961 (list python-pytest
1962 python-setuptools))
1963 (home-page "https://github.com/alvinlindstam/grapheme")
1964 (synopsis "Unicode grapheme helpers")
1965 (description
1966 "This package provides a functionality for working with user perceived
1967characters. More specifically, string manipulation and calculation functions
1968for working with grapheme cluster groups (graphemes) as defined by the
1969@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1970 (license license:expat))))
1971
1972(define-public python-halo
1973 (package
1974 (name "python-halo")
1975 (version "0.0.31")
1976 (source
1977 (origin
1978 (method url-fetch)
1979 (uri (pypi-uri "halo" version))
1980 (sha256
1981 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1982 (build-system pyproject-build-system)
1983 (arguments
1984 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1985 (native-inputs
1986 (list python-setuptools))
1987 (propagated-inputs
1988 (list python-colorama
1989 python-log-symbols
1990 python-six
1991 python-spinners
1992 python-termcolor))
1993 (home-page "https://github.com/manrajgrover/halo")
1994 (synopsis "Python library to display graphical spinners in the terminal")
1995 (description
1996 "Halo is a Python library to display graphical spinners in the terminal.
1997It also supports IPython/Jupyter.")
1998 (license license:expat)))
1999
2000(define-public python-hatch-argparse-manpage
2001 (package
2002 (name "python-hatch-argparse-manpage")
2003 (version "1.0.0")
2004 (source
2005 (origin
2006 (method git-fetch)
2007 (uri (git-reference
2008 (url "https://github.com/damonlynch/hatch-argparse-manpage")
2009 (commit (string-append "v" version))))
2010 (file-name (git-file-name name version))
2011 (sha256
2012 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
2013 (build-system pyproject-build-system)
2014 (arguments (list #:tests? #f)) ; No tests upstream.
2015 (native-inputs (list python-hatchling))
2016 (propagated-inputs (list python-argparse-manpage python-rich))
2017 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
2018 (synopsis "Hatch build hook plugin to generate manual pages")
2019 (description
2020 "This package provides a build hook plugin for Hatch to automatically
2021 bs generate a manual page from an ArgumentParser object, using argparse-manpage
2022by Pavel Raiskup.")
2023 (license license:gpl3+)))
2024
2025(define-public python-hatch-gettext
2026 (package
2027 (name "python-hatch-gettext")
2028 (version "1.1.0")
2029 (source
2030 (origin
2031 (method git-fetch)
2032 (uri (git-reference
2033 (url "https://github.com/damonlynch/hatch-gettext")
2034 (commit (string-append "v" version))))
2035 (file-name (git-file-name name version))
2036 (sha256
2037 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
2038 (build-system pyproject-build-system)
2039 (arguments (list #:tests? #f)) ; No tests upstream.
2040 (native-inputs (list python-hatchling))
2041 (propagated-inputs (list python-rich))
2042 (home-page "https://github.com/damonlynch/hatch-gettext")
2043 (synopsis "Hatch build hook plugin for GNU gettext")
2044 (description
2045 "This package provides a build hook plugin for Hatch that compiles
2046 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
2047 (license license:gpl3+)))
2048
2049(define-public python-hatch-nodejs-version
2050 (package
2051 (name "python-hatch-nodejs-version")
2052 (version "0.4.0")
2053 (source
2054 (origin
2055 (method git-fetch)
2056 (uri (git-reference
2057 (url "https://github.com/agoose77/hatch-nodejs-version")
2058 (commit (string-append "v" version))))
2059 (file-name (git-file-name name version))
2060 (sha256
2061 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
2062 (build-system pyproject-build-system)
2063 (propagated-inputs (list python-hatchling))
2064 (native-inputs (list python-hatchling python-pytest))
2065 (home-page "https://github.com/agoose77/hatch-nodejs-version")
2066 (synopsis "Hatch plugin for versioning from a package.json file")
2067 (description "This package provides a hatch plugin for fetching a version
2068from a @code{package.json} file.")
2069 (license license:expat)))
2070
2071(define-public python-hatch-regex-commit
2072 (package
2073 (name "python-hatch-regex-commit")
2074 (version "0.0.4")
2075 (source
2076 (origin
2077 (method git-fetch)
2078 (uri (git-reference
2079 (url "https://github.com/frankie567/hatch-regex-commit")
2080 (commit (string-append "v" version))))
2081 (file-name (git-file-name name version))
2082 (sha256
2083 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
2084 (build-system pyproject-build-system)
2085 (arguments (list #:tests? #f)) ;test directory is empty
2086 (propagated-inputs (list python-hatchling))
2087 (native-inputs (list python-hatchling))
2088 (home-page "https://github.com/frankie567/hatch-regex-commit")
2089 (synopsis "Hatch plugin to create a commit and tag when bumping version")
2090 (description
2091 "This provides a plugin for Hatch that automatically creates a Git commit
2092and tag after version bumping.")
2093 (license license:expat)))
2094
2095;; TODO: Move to ci or task-runners, see:
2096;; <https://codeberg.org/guix/guix/issues/3096>.
2097(define-public python-huey
2098 (package
2099 (name "python-huey")
2100 (version "2.5.3")
2101 (source
2102 (origin
2103 (method git-fetch)
2104 (uri (git-reference
2105 (url "https://github.com/coleifer/huey")
2106 (commit version)))
2107 (file-name (git-file-name name version))
2108 (sha256
2109 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
2110 (build-system pyproject-build-system)
2111 (arguments
2112 (list
2113 #:phases
2114 #~(modify-phases %standard-phases
2115 (add-after 'unpack 'remove-which
2116 (lambda _
2117 (substitute* "huey/tests/test_kt_huey.py"
2118 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
2119 "has_ktserver = False"))))
2120 (replace 'check
2121 (lambda* (#:key tests? #:allow-other-keys)
2122 (when tests?
2123 (spawn "redis-server" '("redis-server"))
2124 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
2125 (native-inputs (list python-setuptools redis tzdata-for-tests))
2126 (propagated-inputs (list python-redis))
2127 (home-page "https://huey.readthedocs.io")
2128 (synopsis "Lightweight task queue for Python")
2129 (description
2130 "Huey is a lightweight task queue for Python applications. Huey
2131supports:
2132@itemize
2133@item Redis, SQLite, file-system, or in-memory storage
2134@item multi-process, multi-thread or greenlet task execution models
2135@item scheduling tasks to execute at a given time, or after a given delay
2136@item scheduling recurring tasks, like a crontab
2137@item automatically retrying tasks that fail
2138@item task prioritization
2139@item task result storage
2140@item task expiration
2141@item task locking
2142@item task pipelines and chains
2143@end itemize")
2144 (license license:expat)))
2145
2146(define-public python-id
2147 (package
2148 (name "python-id")
2149 (version "1.5.0")
2150 (source
2151 (origin
2152 (method url-fetch)
2153 (uri (pypi-uri "id" version))
2154 (sha256
2155 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
2156 (build-system pyproject-build-system)
2157 (native-inputs
2158 (list python-flit-core
2159 python-pretend
2160 python-pytest))
2161 (propagated-inputs
2162 (list python-requests))
2163 (home-page "https://github.com/di/id")
2164 (synopsis "Tool for generating OIDC identities")
2165 (description
2166 "This package provides a tool for generating @code{OIDC, OpenID Connect}
2167identities.")
2168 (license license:asl2.0)))
2169
2170(define-public python-iniparse
2171 (package
2172 (name "python-iniparse")
2173 (version "0.5.1")
2174 (source
2175 (origin
2176 (method git-fetch)
2177 (uri (git-reference
2178 (url "https://github.com/candlepin/python-iniparse")
2179 (commit version)))
2180 (file-name (git-file-name name version))
2181 (sha256
2182 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
2183 (build-system pyproject-build-system)
2184 (arguments
2185 (list
2186 #:test-backend #~'custom
2187 #:test-flags #~(list "runtests.py")
2188 #:phases
2189 #~(modify-phases %standard-phases
2190 (add-before 'check 'disable-tests
2191 (lambda _
2192 ;; XXX: Three tests failed to compare lists.
2193 (substitute* "tests/test_compat.py"
2194 (("test_read_returns_file_list")
2195 "disabled_test_read_returns_file_list")))))))
2196 (native-inputs
2197 (list python-setuptools))
2198 (home-page "https://github.com/candlepin/python-iniparse")
2199 (synopsis "Accessing and Modifying INI files")
2200 (description
2201 "iniparse is a INI parser for Python which is:
2202@itemize
2203@item Compatible with ConfigParser: Backward compatible implementations of
2204ConfigParser, RawConfigParser, and SafeConfigParser are included that are
2205API-compatible with the Python standard library.
2206@item Preserves structure of INI files: Order of sections & options,
2207indentation, comments, and blank lines are preserved as far as possible when
2208data is updated.
2209@item More convenient: Values can be accessed using dotted notation
2210(@code{cfg.user.name}), or using container syntax
2211(@code{cfg['user']['name']}).
2212@end itemize")
2213 (license license:expat)))
2214
2215(define-public python-inotify
2216 (package
2217 (name "python-inotify")
2218 (version "0.2.12")
2219 (source
2220 (origin
2221 (method git-fetch)
2222 (uri (git-reference
2223 (url "https://github.com/dsoprea/PyInotify")
2224 (commit version)))
2225 (file-name (git-file-name name version))
2226 (sha256
2227 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2228 (build-system pyproject-build-system)
2229 (arguments
2230 (list
2231 #:phases
2232 #~(modify-phases %standard-phases
2233 (add-after 'unpack 'fix-requirements
2234 (lambda _
2235 (substitute* "inotify/resources/requirements.txt"
2236 (("build")
2237 "")))))))
2238 (native-inputs (list python-pytest python-setuptools))
2239 (propagated-inputs (list python-pyasyncore))
2240 (home-page "https://github.com/dsoprea/PyInotify")
2241 (synopsis "Linux filesystem activity monitor library for Python")
2242 (description
2243 "This package provides an efficient and elegant inotify (Linux filesystem
2244activity monitor) library for Python.")
2245 (license license:gpl2)))
2246
2247(define-public python-intervaltree
2248 (package
2249 (name "python-intervaltree")
2250 (version "3.1.0")
2251 (source
2252 (origin
2253 (method url-fetch)
2254 (uri (pypi-uri "intervaltree" version))
2255 (sha256
2256 (base32
2257 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2258 (build-system pyproject-build-system)
2259 (arguments
2260 `(#:phases
2261 (modify-phases %standard-phases
2262 ;; pytest seems to have a check to make sure the user is testing
2263 ;; their checked-out code and not an installed, potentially
2264 ;; out-of-date copy. This is harmless here, since we just installed
2265 ;; the package, so we disable the check to avoid skipping tests
2266 ;; entirely.
2267 (add-before 'check 'import-mismatch-error-workaround
2268 (lambda _
2269 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2270 #t)))))
2271 (propagated-inputs
2272 (list python-sortedcontainers))
2273 (native-inputs
2274 (list python-setuptools python-pytest))
2275 (home-page "https://github.com/chaimleib/intervaltree")
2276 (synopsis "Editable interval tree data structure")
2277 (description
2278 "This package provides a mutable, self-balancing interval tree
2279implementation for Python. Queries may be by point, by range overlap, or by
2280range envelopment. This library was designed to allow tagging text and time
2281intervals, where the intervals include the lower bound but not the upper
2282bound.")
2283 (license license:asl2.0)))
2284
2285(define-public python-jschon
2286 (package
2287 (name "python-jschon")
2288 (version "0.11.1")
2289 (source
2290 (origin
2291 (method git-fetch)
2292 (uri (git-reference
2293 (url "https://github.com/marksparkza/jschon/")
2294 (commit (string-append "v" version))
2295 (recursive? #t))) ;required for tests
2296 (sha256
2297 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2298 (file-name (git-file-name name version))))
2299 (build-system pyproject-build-system)
2300 (propagated-inputs
2301 (list python-rfc3986))
2302 (native-inputs
2303 (list python-coverage
2304 python-hypothesis
2305 python-pytest
2306 python-pytest-benchmark
2307 python-pytest-httpserver
2308 python-requests
2309 python-setuptools))
2310 (home-page "https://jschon.readthedocs.io/")
2311 (synopsis "Object-oriented JSON Schema implementation for Python")
2312 (description
2313 "This package provides a JSON toolkit for Python developers.")
2314 (license license:expat)))
2315
2316(define-public python-jsonpath-ng
2317 (package
2318 (name "python-jsonpath-ng")
2319 (version "1.7.0" )
2320 (source
2321 (origin
2322 (method git-fetch)
2323 (uri (git-reference
2324 (url "https://github.com/h2non/jsonpath-ng")
2325 (commit (string-append "v" version))))
2326 (file-name (git-file-name name version))
2327 (sha256
2328 (base32 "0z0qm5sgzal0qzml2fmc9h5nim8m3x6sz55gqhcd9c2jrq8jmwmi"))))
2329 (build-system pyproject-build-system)
2330 (native-inputs
2331 (list python-pytest
2332 python-setuptools))
2333 (propagated-inputs
2334 (list python-ply))
2335 (home-page "https://github.com/h2non/jsonpath-ng")
2336 (synopsis "JSONPath Next-Generation")
2337 (description
2338 "This package provides a final implementation of @code{JSONPath} for
2339Python that aims to be standard compliant, including arithmetic and binary
2340comparison operators, as defined in the original
2341@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2342 (license license:asl2.0)))
2343
2344(define-public python-json-log-formatter
2345 (package
2346 (name "python-json-log-formatter")
2347 (version "1.1.1")
2348 (source
2349 (origin
2350 (method git-fetch)
2351 (uri (git-reference
2352 (url "https://github.com/marselester/json-log-formatter")
2353 (commit (string-append "v" version))))
2354 (file-name (git-file-name name version))
2355 (sha256
2356 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2357 (build-system pyproject-build-system)
2358 (arguments
2359 (list
2360 #:phases
2361 #~(modify-phases %standard-phases
2362 (replace 'check
2363 (lambda* (#:key tests? #:allow-other-keys)
2364 (when tests?
2365 (invoke "pytest" "-s" "tests.py")))))))
2366 (native-inputs (list python-django
2367 python-pytest
2368 python-setuptools
2369 python-simplejson
2370 python-ujson
2371 python-wheel))
2372 (home-page "https://github.com/marselester/json-log-formatter")
2373 (synopsis "JSON log formatter")
2374 (description "The library helps you to store logs in JSON format.")
2375 (license license:expat)))
2376
2377(define-public python-keeper-secrets-manager-core
2378 ;; released from a monorepo with other packages following various versioning
2379 ;; schemes. This commit was selected because some failing tests were fixed
2380 ;; since the most recent release of the Python SDK packages.
2381 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2382 (revision "0"))
2383 (package
2384 (name "python-keeper-secrets-manager-core")
2385 (version (git-version "17.0.0" revision commit))
2386 (source
2387 (origin
2388 (method git-fetch)
2389 (uri (git-reference
2390 (url "https://github.com/Keeper-Security/secrets-manager")
2391 (commit commit)))
2392 (file-name (git-file-name name version))
2393 (sha256
2394 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2395 (build-system pyproject-build-system)
2396 (arguments
2397 (list
2398 #:phases
2399 #~(modify-phases %standard-phases
2400 (add-after 'unpack 'chdir
2401 (lambda _
2402 (chdir "sdk/python/core"))))))
2403 (propagated-inputs
2404 (list python-cryptography
2405 python-importlib-metadata
2406 python-requests))
2407 (native-inputs
2408 (list python-pytest
2409 python-setuptools))
2410 (home-page "https://github.com/Keeper-Security/secrets-manager")
2411 (synopsis "Keeper Secrets Manager for Python SDK")
2412 (description
2413 "The Keeper Secrets Manager Python SDK provides access to
2414@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2415Management} services.")
2416 (license license:expat))))
2417
2418(define-public python-keeper-secrets-manager-helper
2419 ;; released alongside keeper-secrets-manager-core, but with a different
2420 ;; versioning scheme.
2421 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2422 (revision "0"))
2423 (package
2424 (name "python-keeper-secrets-manager-helper")
2425 (version (git-version "1.0.6" revision commit))
2426 (source
2427 (origin
2428 (method git-fetch)
2429 (uri (git-reference
2430 (url "https://github.com/Keeper-Security/secrets-manager")
2431 (commit commit)))
2432 (file-name (git-file-name name version))
2433 (sha256
2434 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2435 (build-system pyproject-build-system)
2436 (arguments
2437 (list
2438 #:phases
2439 #~(modify-phases %standard-phases
2440 (add-after 'unpack 'chdir
2441 (lambda _
2442 (chdir "sdk/python/helper"))))))
2443 (propagated-inputs
2444 (list python-iso8601
2445 python-keeper-secrets-manager-core
2446 python-pyyaml))
2447 (native-inputs
2448 (list python-pytest
2449 python-setuptools))
2450 (home-page "https://github.com/Keeper-Security/secrets-manager")
2451 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2452 (description
2453 "Keeper Secrets Manager SDK helper is for creating and managing secret
2454records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2455 (license license:expat))))
2456
2457(define-public python-language-data
2458 (package
2459 (name "python-language-data")
2460 (version "1.3.0")
2461 (source
2462 (origin
2463 (method url-fetch)
2464 (uri (pypi-uri "language_data" version))
2465 (sha256
2466 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2467 (build-system pyproject-build-system)
2468 (native-inputs
2469 (list python-pytest
2470 python-setuptools
2471 python-setuptools-scm))
2472 (propagated-inputs
2473 (list python-marisa-trie))
2474 (home-page "https://github.com/georgkrause/language_data")
2475 (synopsis "Supplementary data about languages used by the langcodes module")
2476 (description
2477 "language_data is a supplement to the langcodes module, for working with
2478standardized codes for human languages. It stores the more bulky and
2479hard-to-index data about languages, particularly what they are named in
2480various languages.")
2481 (license license:expat)))
2482
2483(define-public python-log-symbols
2484 (package
2485 (name "python-log-symbols")
2486 (version "0.0.14")
2487 (source
2488 (origin
2489 (method url-fetch)
2490 (uri (pypi-uri "log_symbols" version))
2491 (sha256
2492 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2493 (build-system pyproject-build-system)
2494 (arguments
2495 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2496 (native-inputs
2497 (list python-setuptools))
2498 (propagated-inputs
2499 (list python-colorama))
2500 (home-page "https://github.com/manrajgrover/py-log-symbols")
2501 (synopsis "Python library with graphical symbols for logging on the terminal")
2502 (description
2503 "This package provides a Python library with graphical symbols that can
2504be displayed on the terminal, with color if possible, for logging purposes.")
2505 (license license:expat)))
2506
2507(define-public python-lsprotocol
2508 (package
2509 (name "python-lsprotocol")
2510 (version "2025.0.0")
2511 (source
2512 (origin
2513 (method git-fetch)
2514 (uri (git-reference
2515 (url "https://github.com/microsoft/lsprotocol")
2516 (commit version)))
2517 (file-name (git-file-name name version))
2518 (sha256
2519 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2520 (build-system pyproject-build-system)
2521 (arguments
2522 (list
2523 #:tests? #f ;no tests for Python package
2524 #:phases
2525 #~(modify-phases %standard-phases
2526 (add-after 'unpack 'cd-packages-python
2527 (lambda _
2528 (chdir "packages/python"))))))
2529 (native-inputs
2530 (list python-flit-core))
2531 (propagated-inputs
2532 (list python-attrs
2533 python-cattrs))
2534 (home-page "https://github.com/microsoft/lsprotocol")
2535 (synopsis "Python types for Language Server Protocol.")
2536 (description
2537 "@code{lsprotocol} is a Python implementation of object types used in
2538the Language Server Protocol (LSP). This repository contains the code
2539generator and the generated types for LSP.")
2540 (license license:expat)))
2541
2542(define-public python-marisa-trie
2543 (package
2544 (name "python-marisa-trie")
2545 (version "1.3.1")
2546 (source
2547 (origin
2548 (method url-fetch)
2549 (uri (pypi-uri "marisa_trie" version))
2550 (sha256
2551 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2552 (build-system pyproject-build-system)
2553 (native-inputs
2554 (list python-cython
2555 python-hypothesis
2556 python-pytest
2557 python-readme-renderer
2558 python-setuptools))
2559 (home-page "https://github.com/pytries/marisa-trie")
2560 (synopsis "Static memory-efficient Trie-like structures for Python")
2561 (description
2562 "This package provides static memory-efficient and fast Trie-like structures
2563for Python.")
2564 (license license:expat)))
2565
2566(define-public python-materialyoucolor
2567 (package
2568 (name "python-materialyoucolor")
2569 (version "3.0.2")
2570 (source
2571 (origin
2572 (method git-fetch)
2573 (uri (git-reference
2574 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2575 (commit (string-append "v" version))))
2576 (file-name (git-file-name name version))
2577 (sha256
2578 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2579 (build-system pyproject-build-system)
2580 (arguments
2581 (list #:test-backend #~'custom
2582 #:test-flags #~(list "tests/test_all.py")))
2583 (propagated-inputs (list python-pillow))
2584 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2585 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2586 (synopsis "Material You color generation algorithms")
2587 (description
2588 "@code{python-materialyoucolor} provides a tool that generates harmonious
2589color palettes from the dominant colors of an image, based on the
2590@uref{https://m3.material.io/styles/color/system/overview, Material color
2591system}.")
2592 (license license:expat)))
2593
2594(define-public python-menuinst
2595 (package
2596 (name "python-menuinst")
2597 (version "2.4.1")
2598 (source
2599 (origin
2600 (method git-fetch)
2601 (uri (git-reference
2602 (url "https://github.com/conda/menuinst")
2603 (commit version)))
2604 (file-name (git-file-name name version))
2605 (sha256
2606 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2607 (build-system pyproject-build-system)
2608 (arguments
2609 (list
2610 #:tests? #f)) ;tests need conda
2611 (native-inputs
2612 (list python-setuptools
2613 python-setuptools-scm))
2614 (home-page "https://conda.github.io/menuinst/")
2615 (synopsis "Cross platform menu item installation")
2616 (description
2617 "This package provides cross platform menu item installation for conda
2618packages.")
2619 (license license:bsd-3)))
2620
2621(define-public python-multiplex
2622 (package
2623 (name "python-multiplex")
2624 (version "0.6.1")
2625 (source
2626 (origin
2627 (method git-fetch) ;no tests in PyPI archive
2628 (uri (git-reference
2629 (url "https://github.com/dankilman/multiplex")
2630 (commit version)))
2631 (file-name (git-file-name name version))
2632 (sha256
2633 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2634 (build-system pyproject-build-system)
2635 (native-inputs
2636 (list python-poetry-core
2637 python-pytest
2638 python-pytest-asyncio))
2639 (propagated-inputs
2640 (list python-aiofiles
2641 python-aiostream
2642 python-click
2643 python-easy-ansi-0.3
2644 python-pyte))
2645 (home-page "https://github.com/dankilman/multiplex")
2646 (synopsis "Parallel stream of outputs from multiple processes")
2647 (description
2648 "This package provides a functionality to view output of multiple
2649processes, in parallel, in the console, with an interactive TUI.")
2650 (license license:expat)))
2651
2652(define-public python-nrepl
2653 (package
2654 (name "python-nrepl")
2655 (version "0.3.4")
2656 (source
2657 (origin
2658 (method git-fetch)
2659 (uri (git-reference
2660 (url "https://git.sr.ht/~ngraves/nrepl-python")
2661 (commit version)))
2662 (file-name (git-file-name name version))
2663 (sha256
2664 (base32 "12fi4ilkslh9rg5dilqknrr6sm2rhs2v91xhyfi432f0dp5920lp"))))
2665 (build-system pyproject-build-system)
2666 (arguments
2667 (list
2668 #:test-flags
2669 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2670 (native-inputs
2671 (list python-flit-core
2672 python-pytest
2673 python-pytest-asyncio
2674 python-pytest-xdist))
2675 (propagated-inputs
2676 (list python-fastbencode
2677 python-gevent
2678 python-ipython))
2679 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2680 (synopsis "NREPL server for Python")
2681 (description
2682 "This package provides an implementation of the @url{https://nrepl.org,
2683NREPL} protocol for Python.")
2684 (license license:gpl3+)))
2685
2686(define-public python-num2words
2687 (package
2688 (name "python-num2words")
2689 (version "0.5.14")
2690 (source
2691 (origin
2692 (method git-fetch)
2693 (uri (git-reference
2694 (url "https://github.com/savoirfairelinux/num2words")
2695 (commit (string-append "v" version))))
2696 (file-name (git-file-name name version))
2697 (sha256
2698 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2699 (build-system pyproject-build-system)
2700 (arguments
2701 (list
2702 #:test-flags
2703 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2704 (native-inputs (list python-pytest python-setuptools))
2705 (propagated-inputs (list python-docopt))
2706 (home-page "https://github.com/savoirfairelinux/num2words")
2707 (synopsis "Convert numbers to words in multiple languages")
2708 (description
2709 "@code{num2words} is a library that converts numbers like 42 to words like
2710forty-two. It supports multiple languages, and can even generate ordinal
2711numbers like forty-second.")
2712 (license license:lgpl2.1)))
2713
2714(define-public python-orderly-set
2715 (package
2716 (name "python-orderly-set")
2717 (version "5.5.0")
2718 (source
2719 (origin
2720 (method url-fetch)
2721 (uri (pypi-uri "orderly_set" version))
2722 (sha256
2723 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2724 (build-system pyproject-build-system)
2725 (native-inputs (list python-flit-core python-pytest))
2726 (home-page "https://github.com/seperman/orderly-set")
2727 (synopsis "Multiple implementations of Ordered Set")
2728 (description "Orderly Set is a package containing multiple implementations
2729of Ordered Set.")
2730 (license license:expat)))
2731
2732(define-public python-packageurl
2733 (package
2734 (name "python-packageurl")
2735 (version "0.17.6")
2736 (source
2737 (origin
2738 (method git-fetch)
2739 (uri (git-reference
2740 (url "https://github.com/package-url/packageurl-python")
2741 (commit (string-append "v" version))))
2742 (file-name (git-file-name name version))
2743 (sha256
2744 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2745 (modules '((guix build utils)))
2746 ;; Remove bundled virtualenv and license files used only for
2747 ;; development; not needed at build or runtime.
2748 (snippet '(delete-file-recursively "thirdparty"))))
2749 (build-system pyproject-build-system)
2750 (arguments
2751 (list #:test-flags
2752 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2753 ;; submodule at import time; skip it when the submodule is absent.
2754 #~(list "--ignore=tests/test_purl_spec.py")))
2755 (native-inputs
2756 (list python-pytest
2757 python-setuptools))
2758 (home-page "https://www.packageurl.org")
2759 (synopsis "Package URL parser and builder")
2760 (description
2761 "This library parses and builds Package URLs (purls) as defined in the
2762purl specification. It provides a @code{PackageURL} class for creating,
2763parsing, and normalizing package URL strings across different package
2764management ecosystems.")
2765 (license license:expat)))
2766
2767(define-public python-pandocfilters
2768 (package
2769 (name "python-pandocfilters")
2770 (version "1.5.1")
2771 (source
2772 (origin
2773 (method url-fetch)
2774 (uri (pypi-uri "pandocfilters" version))
2775 (sha256
2776 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2777 (build-system pyproject-build-system)
2778 (arguments
2779 (list #:tests? #f)) ;require pandoc to run tests
2780 (native-inputs
2781 (list python-setuptools))
2782 (home-page "https://github.com/jgm/pandocfilters")
2783 (synopsis "Python module for writing Pandoc filters")
2784 (description "Pandoc is a powerful utility to transform various
2785input formats into a wide range of output formats. To alter the
2786exported output document, Pandoc allows the usage of filters, which
2787are pipes that read a JSON serialization of the Pandoc AST from stdin,
2788transform it in some way, and write it to stdout. It allows therefore
2789to alter the processing of Pandoc's supported input formats, for
2790instance one can add new syntax elements to markdown, etc.
2791
2792This package provides Python bindings.")
2793 (license license:bsd-3)))
2794
2795(define-public python-panflute
2796 (package
2797 (name "python-panflute")
2798 (version "2.3.1")
2799 (source
2800 (origin
2801 (method url-fetch)
2802 (uri (pypi-uri "panflute" version))
2803 (sha256
2804 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2805 (build-system pyproject-build-system)
2806 (arguments
2807 (list #:tests? #f)) ;require pandoc to run tests
2808 (native-inputs
2809 (list python-setuptools))
2810 (propagated-inputs
2811 (list python-click
2812 python-pyyaml))
2813 (home-page "http://scorreia.com/software/panflute/")
2814 (synopsis "Pythonic Pandoc filters")
2815 (description
2816 "Panflute is a Python package that makes Pandoc filters fun to write.
2817It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2818is heavily inspired.")
2819 (license license:bsd-3)))
2820
2821(define-public python-pastel
2822 (package
2823 (name "python-pastel")
2824 (version "0.2.1")
2825 (source
2826 (origin
2827 (method git-fetch)
2828 (uri (git-reference
2829 (url "https://github.com/sdispater/pastel")
2830 (commit version)))
2831 (file-name (git-file-name name version))
2832 (sha256
2833 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2834 (build-system pyproject-build-system)
2835 (arguments
2836 (list
2837 #:test-flags
2838 #~(list "pastel" "tests/")
2839 #:phases
2840 #~(modify-phases %standard-phases
2841 (add-after 'unpack 'use-poetry-core
2842 (lambda _
2843 ;; Patch to use the core poetry API.
2844 (substitute* "pyproject.toml"
2845 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2846 (native-inputs (list python-poetry-core python-pytest))
2847 (home-page "https://github.com/sdispater/pastel")
2848 (synopsis "Library to colorize strings in your terminal")
2849 (description
2850 "Pastel is a simple library to help you colorize strings in your
2851terminal.")
2852 (license license:expat)))
2853
2854(define-public python-pathlib-abc
2855 (package
2856 (name "python-pathlib-abc")
2857 (version "0.5.0")
2858 (source
2859 (origin
2860 (method url-fetch)
2861 (uri (pypi-uri "pathlib_abc" version))
2862 (sha256
2863 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2864 (build-system pyproject-build-system)
2865 (native-inputs (list python-pytest python-hatchling))
2866 (home-page "https://github.com/barneygale/pathlib-abc")
2867 (synopsis "Python base classes for rich path objects")
2868 (description
2869 "This package is a preview of pathlib functionality planned for a future
2870release of Python; specifically, it provides three ABCs that can be used to
2871implement path classes for non-local filesystems")
2872 (license license:psfl)))
2873
2874;; XXX: It's for [email protected], remove when no longer required.
2875(define-public python-pathlib-abc-for-python-pathy
2876 (hidden-package
2877 (package
2878 (inherit python-pathlib-abc)
2879 (version "0.1.1")
2880 (source
2881 (origin
2882 (method url-fetch)
2883 (uri (pypi-uri "pathlib_abc" version))
2884 (sha256
2885 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2886
2887(define-public python-pbs-installer
2888 (package
2889 (name "python-pbs-installer")
2890 (version "2025.09.18")
2891 (source
2892 (origin
2893 (method git-fetch)
2894 (uri (git-reference
2895 (url "https://github.com/frostming/pbs-installer")
2896 (commit version)))
2897 (file-name (git-file-name name version))
2898 (sha256
2899 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2900 (build-system pyproject-build-system)
2901 (arguments
2902 (list
2903 #:tests? #f ;no tests provided
2904 #:phases
2905 #~(modify-phases %standard-phases
2906 (add-before 'build 'set-version
2907 (lambda _
2908 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2909 (native-inputs
2910 (list python-pdm-backend
2911 python-pytest))
2912 (propagated-inputs
2913 (list python-httpx
2914 python-zstandard))
2915 (home-page "https://github.com/frostming/pbs-installer")
2916 (synopsis "Installer for Python Build Standalone")
2917 (description
2918 "This package implements an installer for
2919@url{https://github.com/astral-sh/python-build-standalone, Python Build
2920Standalone}.")
2921 (license license:expat)))
2922
2923(define-public python-phply
2924 (package
2925 (name "python-phply")
2926 (version "1.2.6")
2927 (source
2928 (origin
2929 (method url-fetch)
2930 (uri (pypi-uri "phply" version))
2931 (sha256
2932 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2933 (build-system pyproject-build-system)
2934 (native-inputs
2935 (list python-pytest
2936 python-setuptools))
2937 (propagated-inputs
2938 (list python-ply))
2939 (home-page "https://github.com/viraptor/phply")
2940 (synopsis "PHP parser written in Python using PLY")
2941 (description
2942 "@code{phply} is a parser for the PHP programming language written using
2943PLY,a Lex/YACC-style parser generator toolkit for Python.")
2944 (license license:bsd-3)))
2945
2946(define-public python-puccinialin
2947 (package
2948 (name "python-puccinialin")
2949 (version "0.1.5")
2950 (source
2951 (origin
2952 (method url-fetch)
2953 (uri (pypi-uri "puccinialin" version))
2954 (sha256
2955 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2956 (build-system pyproject-build-system)
2957 (arguments
2958 (list #:tests? #f)) ;no tests in PyPI or Git
2959 (native-inputs
2960 (list python-hatchling))
2961 (propagated-inputs
2962 (list python-httpx
2963 python-platformdirs
2964 python-tqdm))
2965 (home-page "https://github.com/konstin/puccinialin")
2966 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2967 (description
2968 "This tool helps to install Rust into a temporary directory, allowing
2969support of Rust-based Python builds. Cargo and rustc are installed into a
2970cache directory, to avoid modifying the host's environment, and further
2971activated using a set of environment variables.")
2972 (license (list license:expat license:asl2.0))))
2973
2974(define-public python-py010parser
2975 (package
2976 (name "python-py010parser")
2977 (version "0.1.18")
2978 (source
2979 (origin
2980 (method git-fetch)
2981 (uri (git-reference
2982 (url "https://github.com/d0c-s4vage/py010parser")
2983 (commit (string-append "v" version))))
2984 (file-name (git-file-name name version))
2985 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2986 (modules '((guix build utils)))
2987 (snippet #~(begin
2988 ;; Unbundle ply.
2989 (substitute* "requirements.txt"
2990 (("^six\\>.*") ""))
2991 (substitute* "setup.py"
2992 (("(packages += \\['py010parser').*\\]" all first)
2993 (string-append first "]")))
2994 (delete-file-recursively "py010parser/ply")
2995 (substitute* (find-files "py010parser" "\\.py$")
2996 ((" .*\\.ply\\>") " ply"))
2997 ;; Avoid regenerating the lex table.
2998 (substitute* '("py010parser/__init__.py"
2999 "py010parser/c_parser.py")
3000 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
3001 (string-append open "False" close)))
3002 (substitute* '("py010parser/__init__.py"
3003 "setup.py")
3004 (("\\{\\{VERSION\\}\\}") #$version))
3005 (substitute* "setup.cfg"
3006 (("description-file") "description_file"))))))
3007 (build-system pyproject-build-system)
3008 (arguments (list #:test-backend #~'unittest
3009 #:test-flags #~'("discover" "tests")))
3010 (propagated-inputs (list python-regex python-ply))
3011 (native-inputs (list python-setuptools))
3012 (home-page "https://github.com/d0c-s4vage/py010parser")
3013 (synopsis "Parser of 010 editor's template")
3014 (description
3015 "@code{py010parser} is a Python library for parsing templates
3016for the Sweetscape 010 binary-format editor.")
3017 (license license:bsd-3)))
3018
3019(define-public python-pyasynchat
3020 (package
3021 (name "python-pyasynchat")
3022 (version "1.0.5")
3023 (source
3024 (origin
3025 (method git-fetch)
3026 (uri (git-reference
3027 (url "https://github.com/simonrob/pyasynchat")
3028 (commit (string-append "v" version))))
3029 (file-name (git-file-name name version))
3030 (sha256
3031 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
3032 (build-system pyproject-build-system)
3033 (native-inputs
3034 (list python-pytest
3035 python-setuptools))
3036 (propagated-inputs
3037 (list python-pyasyncore))
3038 (home-page "https://github.com/simonrob/pyasynchat")
3039 (synopsis "Make asynchat available for Python 3.12 onwards")
3040 (description
3041 "This package contains the
3042@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
3043found in Python versions prior to 3.12. It is provided so that existing code
3044relying on @code{import asynchat} is able to continue being used without
3045significant refactoring.")
3046 (license license:psfl)))
3047
3048(define-public python-pyasyncore
3049 (package
3050 (name "python-pyasyncore")
3051 (version "1.0.5")
3052 (source
3053 (origin
3054 (method git-fetch)
3055 (uri (git-reference
3056 (url "https://github.com/simonrob/pyasyncore")
3057 (commit (string-append "v" version))))
3058 (file-name (git-file-name name version))
3059 (sha256
3060 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
3061 (build-system pyproject-build-system)
3062 (native-inputs (list python-pytest python-setuptools))
3063 (home-page "https://github.com/simonrob/pyasyncore")
3064 (synopsis "Make asyncore available for Python 3.12 onwards")
3065 (description
3066 "This package contains the
3067@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
3068found in Python versions prior to 3.12. It is provided so that existing code
3069relying on @code{import asyncore} is able to continue being used without
3070significant refactoring.")
3071 (license license:psfl)))
3072
3073(define-public python-pyconify
3074 (package
3075 (name "python-pyconify")
3076 (version "0.2.1")
3077 (source
3078 (origin
3079 (method git-fetch)
3080 (uri (git-reference
3081 (url "https://github.com/pyapp-kit/pyconify")
3082 (commit (string-append "v" version))))
3083 (file-name (git-file-name name version))
3084 (sha256
3085 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
3086 (build-system pyproject-build-system)
3087 (arguments
3088 (list #:tests? #f)) ;require netwok access
3089 (native-inputs
3090 (list python-hatch-vcs
3091 python-hatchling))
3092 (propagated-inputs
3093 (list python-requests))
3094 (home-page "https://github.com/pyapp-kit/pyconify")
3095 (synopsis "Python wrapper for the Iconify API")
3096 (description
3097 "This packge provides a Python wrapper for the
3098@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
3099framework that includes 100+ icon sets with more than 100,000 icons from
3100FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
3101Emoji and many other open source icon sets.")
3102 (license license:bsd-3)))
3103
3104(define-public python-pygls
3105 (package
3106 (name "python-pygls")
3107 (version "2.0.0")
3108 (source
3109 (origin
3110 (method git-fetch)
3111 (uri (git-reference
3112 (url "https://github.com/openlawlibrary/pygls")
3113 (commit (string-append "v" version))))
3114 (file-name (git-file-name name version))
3115 (sha256
3116 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
3117 (build-system pyproject-build-system)
3118 ;; tests: 265 passed, 8 skipped
3119 (native-inputs
3120 (list python-pytest
3121 python-pytest-asyncio
3122 python-poetry-core))
3123 (propagated-inputs
3124 (list python-attrs
3125 python-cattrs
3126 python-lsprotocol))
3127 (home-page "https://github.com/openlawlibrary/pygls")
3128 (synopsis "Pythonic generic language server")
3129 (description
3130 "This package provides a pythonic generic language server (pronounced
3131like pie glass').")
3132 (license license:asl2.0)))
3133
3134(define-public python-pyls-spyder
3135 (package
3136 (name "python-pyls-spyder")
3137 (version "0.4.0")
3138 (source
3139 (origin
3140 (method git-fetch)
3141 (uri (git-reference
3142 (url "https://github.com/spyder-ide/pyls-spyder")
3143 (commit (string-append "v" version))))
3144 (file-name (git-file-name name version))
3145 (sha256
3146 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
3147 (build-system pyproject-build-system)
3148 (propagated-inputs (list python-lsp-server))
3149 (native-inputs (list python-pytest python-setuptools))
3150 (home-page "https://github.com/spyder-ide/pyls-spyder")
3151 (synopsis "Spyder extensions for @code{python-lsp-server}")
3152 (description "This package provides Spyder-specific extras for the
3153Language Server Protocol (LSP) on Python, such as document symbol searching
3154and others.")
3155 (license license:expat)))
3156
3157(define-public python-pylsp-rope
3158 (package
3159 (name "python-pylsp-rope")
3160 (version "0.1.17")
3161 (source
3162 (origin
3163 (method git-fetch)
3164 (uri (git-reference
3165 (url "https://github.com/python-rope/pylsp-rope")
3166 (commit version)))
3167 (file-name (git-file-name name version))
3168 (sha256
3169 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
3170 (build-system pyproject-build-system)
3171 (native-inputs
3172 (list python-pytest
3173 python-setuptools))
3174 (propagated-inputs
3175 (list python-lsp-server
3176 python-rope))
3177 (home-page "https://github.com/python-rope/pylsp-rope")
3178 (synopsis
3179 "Extended refactoring capabilities for Python LSP Server using Rope")
3180 (description
3181 "This plugs in to Python LSP Server, adding code actions that refactor
3182using Rope.")
3183 (license license:expat)))
3184
3185(define-public python-pypydispatcher
3186 (package
3187 (name "python-pypydispatcher")
3188 (version "2.1.2")
3189 (source
3190 (origin
3191 (method url-fetch)
3192 (uri (pypi-uri "PyPyDispatcher" version))
3193 (sha256
3194 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
3195 (build-system pyproject-build-system)
3196 (native-inputs
3197 (list python-pytest
3198 python-setuptools
3199 python-setuptools-scm))
3200 (home-page "https://github.com/scrapy/pypydispatcher")
3201 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
3202 (description
3203 "This package implements a functionality of pulti-producer-multi-consumer
3204signal dispatching mechanism. It's a fork of
3205http://pydispatcher.sourceforge.net/ with PyPy support.")
3206 (license license:bsd-3)))
3207
3208(define-public python-pyread-eagle
3209 (package
3210 (name "python-pyread-eagle")
3211 (version "1.0.3")
3212 (source
3213 (origin
3214 (method git-fetch)
3215 (uri (git-reference
3216 (url "https://github.com/kyleaoman/pyread_eagle")
3217 (commit version)))
3218 (file-name (git-file-name name version))
3219 (sha256
3220 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3221 (build-system pyproject-build-system)
3222 (arguments
3223 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3224 (list #:tests? #f))
3225 (native-inputs
3226 (list python-setuptools))
3227 (propagated-inputs
3228 (list python-h5py
3229 python-numpy))
3230 (home-page "https://github.com/kyleaoman/pyread_eagle")
3231 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3232 (description
3233 "This package provides a pure-python port of
3234@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3235 (license license:gpl3)))
3236
3237(define-public python-pyte
3238 (package
3239 (name "python-pyte")
3240 (version "0.8.2")
3241 (source
3242 (origin
3243 (method git-fetch)
3244 (uri (git-reference
3245 (url "https://github.com/selectel/pyte")
3246 (commit version)))
3247 (file-name (git-file-name name version))
3248 (sha256
3249 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3250 (build-system pyproject-build-system)
3251 (propagated-inputs (list python-wcwidth))
3252 (native-inputs (list python-pytest python-setuptools python-wheel))
3253 (home-page "https://pyte.readthedocs.io/")
3254 (synopsis "Simple VTXXX-compatible terminal emulator")
3255 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3256emulator. @var{VTxxx} stands for a series of video terminals, developed by
3257DEC between 1970 and 1995. The first and probably most famous one was the
3258VT100 terminal, which is now a de-facto standard for all virtual terminal
3259emulators.
3260
3261pyte is a fork of vt102, which was an incomplete pure Python implementation
3262of VT100 terminal.")
3263 (license license:lgpl3+)))
3264
3265(define-public python-pytokens
3266 (package
3267 (name "python-pytokens")
3268 (version "0.4.1")
3269 (source
3270 (origin
3271 (method git-fetch)
3272 (uri (git-reference
3273 (url "https://github.com/tusharsadhwani/pytokens")
3274 (commit version)))
3275 (file-name (git-file-name name version))
3276 (sha256
3277 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3278 (build-system pyproject-build-system)
3279 (arguments
3280 (list
3281 #:phases
3282 #~(modify-phases %standard-phases
3283 (add-before 'build 'build-with-cython
3284 (lambda _
3285 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3286 (native-inputs
3287 (list python-cython
3288 python-pytest
3289 python-setuptools))
3290 (home-page "https://github.com/tusharsadhwani/pytokens")
3291 (synopsis "Spec compliant Python 3.14+ tokenizer")
3292 (description
3293 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3294runs on older Pythons.")
3295 (license license:expat)))
3296
3297(define-public python-pyuca
3298 (package
3299 (name "python-pyuca")
3300 (version "1.2")
3301 (source
3302 (origin
3303 (method git-fetch)
3304 (uri (git-reference
3305 (url "https://github.com/jtauber/pyuca")
3306 (commit (string-append "v" version))))
3307 (file-name (git-file-name name version))
3308 (sha256
3309 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3310 (build-system pyproject-build-system)
3311 (arguments
3312 (list #:tests? #f)) ; there are no tests
3313 (native-inputs (list python-setuptools))
3314 (home-page "https://github.com/jtauber/pyuca")
3315 (synopsis "Python implementation of the Unicode Collation Algorithm")
3316 (description "This package provides a Python implementation of the
3317@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3318 (license license:expat)))
3319
3320(define-public python-pyxdameraulevenshtein
3321 (package
3322 (name "python-pyxdameraulevenshtein")
3323 (version "1.8.0")
3324 (source
3325 (origin
3326 (method git-fetch)
3327 (uri (git-reference
3328 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3329 (commit (string-append "v" version))))
3330 (file-name (git-file-name name version))
3331 (sha256
3332 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3333 (build-system pyproject-build-system)
3334 (native-inputs (list python-cython python-pytest python-setuptools))
3335 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3336 (synopsis "Damerau-Levenshtein edit distance algorithm")
3337 (description
3338 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3339edit distance algorithm for Python in Cython for high performance.")
3340 (license license:bsd-3)))
3341
3342(define-public python-qrcodegen
3343 (package
3344 (name "python-qrcodegen")
3345 (version "1.8.0")
3346 (source
3347 (origin
3348 (method git-fetch)
3349 (uri (git-reference
3350 (url "https://github.com/nayuki/QR-Code-generator")
3351 (commit (string-append "v" version))))
3352 (sha256
3353 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3354 (build-system pyproject-build-system)
3355 (arguments
3356 (list
3357 #:tests? #f ;no tests
3358 #:phases
3359 #~(modify-phases %standard-phases
3360 (add-before 'build 'chdir
3361 (lambda _
3362 (chdir "python"))))))
3363 (native-inputs (list python-setuptools))
3364 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3365 (synopsis "QR Code generator")
3366 (description
3367 "@code{python-qrcodegen} is a QR code generator library in Python.")
3368 (license license:expat)))
3369
3370(define-public python-rectpack
3371 (package
3372 (name "python-rectpack")
3373 (version "0.2.2")
3374 (source
3375 (origin
3376 (method git-fetch)
3377 (uri (git-reference
3378 (url "https://github.com/secnot/rectpack/")
3379 (commit version)))
3380 (file-name (git-file-name name version))
3381 (sha256
3382 (base32 "0y6nzpqny2knlq5g53wdnrznv10xv21rbzmlbq5xgf92gi7i6kci"))))
3383 (build-system pyproject-build-system)
3384 (arguments (list #:test-backend #~'unittest))
3385 (native-inputs (list python-setuptools))
3386 (home-page "https://github.com/secnot/rectpack/")
3387 (synopsis "2D Rectangle packing Python library")
3388 (description "Rectpack is a collection of heuristic algorithms for solving
3389the 2D knapsack or bin packing problem, consisting on packing a set of
3390rectangles into the smallest number of bins.")
3391 (license license:asl2.0)))
3392
3393(define-public python-refleak
3394 (package
3395 (name "python-refleak")
3396 (version "0.2.2")
3397 (source
3398 (origin
3399 (method git-fetch)
3400 (uri (git-reference
3401 (url "https://github.com/mne-tools/refleak")
3402 (commit (string-append "v" version))))
3403 (file-name (git-file-name name version))
3404 (sha256
3405 (base32 "1851pxcbvdab1wq64drkw873mis9yqrvamsv0cxj7p6p4l7nfj4h"))))
3406 (build-system pyproject-build-system)
3407 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
3408 (home-page "https://github.com/mne-tools/refleak")
3409 (synopsis "Track down reference leaks in Python")
3410 (description
3411 "This package provides a library to find out what is still holding a
3412reference to an object that should be dead. It is used to track down reference
3413leaks in @code{MNE-Python}, @code{PyVista} and @code{pyvistaqt}.")
3414 (license license:bsd-3)))
3415
3416(define-public python-represent
3417 (package
3418 (name "python-represent")
3419 (version "2.1")
3420 (source
3421 (origin
3422 (method url-fetch)
3423 (uri (pypi-uri "Represent" version))
3424 (sha256
3425 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3426 (build-system pyproject-build-system)
3427 (native-inputs
3428 ;; XXX This might be too much for testing, maybe switch them off as it's
3429 ;; a simple middleware library.
3430 (list python-ipython
3431 python-pytest
3432 python-rich
3433 python-setuptools))
3434 (home-page "https://github.com/RazerM/represent")
3435 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3436 (description
3437 "This package implements a functionality to generate Python
3438@code{__repr__} methods automatically or declaratively.")
3439 (license license:expat)))
3440
3441(define-public python-rich-argparse
3442 (package
3443 (name "python-rich-argparse")
3444 (version "1.8.0")
3445 (source
3446 (origin
3447 (method git-fetch)
3448 (uri (git-reference
3449 (url "https://github.com/hamdanal/rich-argparse")
3450 (commit (string-append "v" version))))
3451 (file-name (git-file-name name version))
3452 (sha256
3453 (base32
3454 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3455 (build-system pyproject-build-system)
3456 (native-inputs
3457 (list python-pytest
3458 python-hatchling))
3459 (propagated-inputs
3460 (list python-rich))
3461 (home-page "https://github.com/hamdanal/rich-argparse")
3462 (synopsis "Format argparse and optparse help using rich")
3463 (description
3464 "This package improves the look and readability of argparse's help while
3465requiring minimal changes to the code.")
3466 (license license:expat)))
3467
3468(define-public python-rich-rst
3469 (package
3470 (name "python-rich-rst")
3471 (version "2.0.1")
3472 (source
3473 (origin
3474 (method git-fetch)
3475 (uri (git-reference
3476 (url "https://github.com/wasi-master/rich-rst")
3477 (commit (string-append "v" version))))
3478 (file-name (git-file-name name version))
3479 (sha256
3480 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3481 (build-system pyproject-build-system)
3482 (native-inputs
3483 (list python-pytest
3484 python-setuptools))
3485 (propagated-inputs
3486 (list python-pygments
3487 python-rich))
3488 (home-page "https://wasi-master.github.io/rich-rst")
3489 (synopsis "Beautiful reStructuredText renderer for Rich")
3490 (description
3491 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3492documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3493renderables.")
3494 (license license:expat)))
3495
3496(define-public python-roman-numerals
3497 (package
3498 (name "python-roman-numerals")
3499 (version "3.1.0")
3500 (source
3501 (origin
3502 (method url-fetch)
3503 (uri (pypi-uri "roman_numerals" version))
3504 (sha256
3505 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3506 (build-system pyproject-build-system)
3507 (native-inputs (list python-flit-core python-pytest))
3508 (home-page "https://pypi.org/project/roman-numbers/")
3509 (synopsis "Python library to manipulate Roman numerals")
3510 (description "This package provides a Python library to manipulate
3511well-formed Roman numerals.")
3512 (license license:expat)))
3513
3514(define-public python-runs
3515 (package
3516 (name "python-runs")
3517 (version "1.3.0")
3518 (source
3519 (origin
3520 (method git-fetch)
3521 (uri (git-reference
3522 (url "https://github.com/rec/runs")
3523 (commit (string-append "v" version))))
3524 (file-name (git-file-name name version))
3525 (sha256
3526 (base32 "0grzfnamxgnpvf3m0c139sknyj31vsvcplvcng6maq60xvnqrbw1"))))
3527 (build-system pyproject-build-system)
3528 (arguments
3529 (list
3530 #:test-flags
3531 ;; Expecting ".git".
3532 #~(list "--deselect=test/test_runs.py::TestRunsActual::test_many")))
3533 (native-inputs (list python-pytest python-tdir python-uv-build))
3534 (propagated-inputs (list python-xmod))
3535 (home-page "https://github.com/rec/runs")
3536 (synopsis "Run a block of text as a subprocess")
3537 (description
3538 "@code{runs} has improved versions of @code{call()}, @code{check_call()},
3539@code{check_output()}, and @code{run()} from Python's subprocess module that
3540handle multiple commands and blocks of text, fix some defects, and add some
3541features.")
3542 (license license:expat)))
3543
3544(define-public python-rush
3545 (package
3546 (name "python-rush")
3547 (version "2021.04.0")
3548 (source
3549 (origin
3550 (method git-fetch)
3551 (uri (git-reference
3552 (url "https://github.com/sigmavirus24/rush")
3553 (commit version)))
3554 (file-name (git-file-name name version))
3555 (sha256
3556 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3557 (build-system pyproject-build-system)
3558 (arguments
3559 (list
3560 #:test-flags
3561 ;; E ValueError: Redis URL must specify one of the following schemes
3562 ;; (redis://, rediss://, unix://)
3563 #~(list "-k" (string-append "not test_valid_url[redis://]"
3564 " and not test_valid_url[rediss://]"))))
3565 (native-inputs
3566 (list python-mock
3567 python-redis
3568 python-rfc3986
3569 python-pytest
3570 python-setuptools))
3571 (propagated-inputs
3572 (list python-attrs))
3573 (home-page "https://github.com/sigmavirus24/rush")
3574 (synopsis "Throttling and rate-limiting algorithms for Python")
3575 (description
3576 "This package provides is a small collection of algorithms that can be
3577reused when throttling user interactions with a resource (e.g., an API).")
3578 (license license:expat)))
3579
3580(define-public python-rustworkx
3581 (package
3582 (name "python-rustworkx")
3583 (version "0.17.1")
3584 (source
3585 (origin
3586 (method git-fetch)
3587 (uri (git-reference
3588 (url "https://github.com/Qiskit/rustworkx")
3589 (commit version)))
3590 (file-name (git-file-name name version))
3591 (sha256
3592 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3593 (build-system pyproject-build-system)
3594 (arguments
3595 (list
3596 #:test-flags #~(list "--test-path" "tests")
3597 #:imported-modules (append %cargo-build-system-modules
3598 %pyproject-build-system-modules)
3599 #:modules '(((guix build cargo-build-system)
3600 #:prefix cargo:)
3601 (guix build pyproject-build-system)
3602 (guix build utils))
3603 #:phases
3604 #~(modify-phases %standard-phases
3605 (add-after 'unpack 'prepare-cargo-build-system
3606 (lambda args
3607 (for-each
3608 (lambda (phase)
3609 (format #t "Running cargo phase: ~a~%" phase)
3610 (apply (assoc-ref cargo:%standard-phases phase)
3611 #:cargo-target #$(cargo-triplet) args))
3612 '(unpack-rust-crates
3613 configure
3614 check-for-pregenerated-files
3615 patch-cargo-checksums))))
3616 (add-before 'check 'pre-check
3617 (lambda _
3618 ;; Delete the source directory to avoid interference.
3619 (delete-file-recursively "rustworkx")
3620 ;; Matplotlib needs to be able to write its configuration file
3621 ;; somewhere.
3622 (setenv "MPLCONFIGDIR" "/tmp")
3623 ;; For fontconfig.
3624 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3625 (propagated-inputs (list python-numpy))
3626 (native-inputs
3627 (append (list graphviz
3628 python-matplotlib
3629 python-networkx
3630 python-pillow
3631 python-setuptools
3632 python-setuptools-rust
3633 python-stestr
3634 rust
3635 `(,rust "cargo"))
3636 (or (and=> (%current-target-system)
3637 (compose list make-rust-sysroot))
3638 '())))
3639 (inputs (cargo-inputs 'python-rustworkx))
3640 (home-page "https://www.rustworkx.org")
3641 (synopsis "High performance graph library for Python")
3642 (description
3643 "@code{rustworkx} is a Python package for working with graphs and complex
3644networks. It enables the creation, interaction with, and study of graphs and
3645networks.")
3646 (license license:asl2.0)))
3647
3648(define-public python-safety-schemas
3649 (package
3650 (name "python-safety-schemas")
3651 (version "0.0.19")
3652 (source
3653 (origin
3654 (method url-fetch)
3655 (uri (pypi-uri "safety_schemas" version))
3656 (sha256
3657 (base32 "13dany62q262l08441aps815nz42k9mcd3lgjs5z592j91nz10a7"))))
3658 (build-system pyproject-build-system)
3659 (arguments
3660 (list
3661 #:test-flags
3662 #~(list "-k" (string-join
3663 ;; These tests are failing for unknown reasons.
3664 ;; (AssertionError).
3665 (list "not test_model[ConfigModel-ConfigModel]"
3666 "test_model[MetadataModel-MetadataModel]"
3667 "test_model[PolicyFileModel-PolicyFileModel]"
3668 "test_model[ProjectModel-ProjectModel]"
3669 "test_model[ReportModel-ReportModel]")
3670 " and not "))))
3671 (propagated-inputs (list python-dparse
3672 python-packaging
3673 python-pydantic
3674 python-ruamel.yaml
3675 python-typing-extensions))
3676 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3677 ;; Source code is not yet published outside of PyPI:
3678 ;; https://github.com/pyupio/safety/issues/494
3679 (home-page "https://pypi.org/project/safety-schemas/")
3680 (synopsis "Schemas for Safety tools")
3681 (description "This package contains models and schemas used by Safety.")
3682 (license license:expat)))
3683
3684(define-public python-scverse-misc
3685 (package
3686 (name "python-scverse-misc")
3687 (version "0.1.1")
3688 (source
3689 (origin
3690 (method git-fetch)
3691 (uri (git-reference
3692 (url "https://github.com/scverse/scverse-misc")
3693 (commit (string-append "v" version))))
3694 (file-name (git-file-name name version))
3695 (sha256
3696 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3697 (build-system pyproject-build-system)
3698 (arguments
3699 (list
3700 #:test-flags
3701 ;; Optinal tests, Pydantic fails to validate inputs.
3702 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3703 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3704 (native-inputs
3705 (list python-hatch-vcs
3706 python-hatchling
3707 python-pytest
3708 python-pyyaml))
3709 (propagated-inputs
3710 (list python-session-info2
3711 python-typing-extensions
3712 ;; [optional]
3713 python-dotenv
3714 python-pydantic-settings))
3715 (home-page "https://github.com/scverse/scverse-misc")
3716 (synopsis "Miscellaneous utility code used by scverse packages")
3717 (description
3718 "This package provides miscellaneous utility code used by scverse
3719packages.")
3720 (license license:bsd-3)))
3721
3722(define-public python-senf
3723 (package
3724 (name "python-senf")
3725 (version "1.5.1")
3726 (source
3727 (origin
3728 (method git-fetch)
3729 (uri (git-reference
3730 (url "https://github.com/quodlibet/senf")
3731 (commit (string-append "v" version))))
3732 (file-name (git-file-name name version))
3733 (sha256
3734 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3735 (build-system pyproject-build-system)
3736 (arguments
3737 (list
3738 #:test-flags
3739 ;; These tests fail due to various home fetching methods during build.
3740 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3741 "--deselect" "tests/test_api.py::test_expanduser_user")))
3742 (native-inputs (list python-pytest python-setuptools))
3743 (home-page "https://github.com/quodlibet/senf")
3744 (synopsis "Text, bytes and paths conversion functions for Python")
3745 (description "Senf introduces a new platform native string type called
3746fsnative. It adds functions to convert text, bytes and paths to and from that
3747new type and helper functions to integrate it nicely with the Python
3748stdlib.")
3749 (license license:expat)))
3750
3751(define-public python-session-info2
3752 (package
3753 (name "python-session-info2")
3754 (version "0.2")
3755 (source
3756 (origin
3757 (method url-fetch)
3758 (uri (pypi-uri "session_info2" version))
3759 (sha256
3760 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3761 (build-system pyproject-build-system)
3762 (arguments
3763 (list
3764 #:test-flags
3765 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3766 ;; Tests require Jupyter Client.
3767 "--ignore=tests/test_subprocess.py")))
3768 (native-inputs
3769 (list python-hatch-docstring-description
3770 python-hatch-vcs
3771 python-hatchling
3772 python-pytest
3773 python-pytest-asyncio))
3774 (home-page "https://session-info2.readthedocs.io/")
3775 (synopsis "Print versions of imported packages")
3776 (description
3777 "This package implements a functionality to print versions of imported
3778Python packages.")
3779 (license license:mpl2.0)))
3780
3781(define-public python-show-in-file-manager
3782 (package
3783 (name "python-show-in-file-manager")
3784 (version "1.1.6")
3785 (source
3786 (origin
3787 (method git-fetch)
3788 (uri (git-reference
3789 (url "https://github.com/damonlynch/showinfilemanager")
3790 (commit (string-append "v" version))))
3791 (file-name (git-file-name name version))
3792 (sha256
3793 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3794 (build-system pyproject-build-system)
3795 (arguments (list #:tests? #f)) ;no tests upstream
3796 (native-inputs
3797 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3798 (propagated-inputs
3799 (list python-packaging python-pyxdg))
3800 (home-page "https://github.com/damonlynch/showinfilemanager")
3801 (synopsis "Open the system file manager and select files in it")
3802 (description
3803 "Show in File Manager is a Python package to open the system file manager
3804and optionally select files in it. The point is not to open the files, but to
3805select them in the file manager, thereby highlighting the files and allowing
3806the user to quickly do something with them.")
3807 (license license:expat)))
3808
3809(define-public python-shxparser
3810 (package
3811 (name "python-shxparser")
3812 (version "0.0.2")
3813 (source
3814 (origin
3815 (method url-fetch)
3816 (uri (pypi-uri "shxparser" version))
3817 (sha256
3818 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3819 (build-system pyproject-build-system)
3820 (arguments (list #:test-backend #~'unittest))
3821 (native-inputs
3822 (list python-svgelements python-setuptools))
3823 (home-page "https://github.com/tatarize/shxparser")
3824 (synopsis "SHX line font parser")
3825 (description
3826 "This is a pure python parser for SHX Hershey font files that are an
3827AutoCad format which can encode single line fonts. This format is used for
3828many CNC and laser operations.")
3829 (license license:expat)))
3830
3831(define-public python-simplify-polyline
3832 (package
3833 (name "python-simplify-polyline")
3834 (version "0.1.0")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "simplify_polyline" version))
3839 (sha256
3840 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3841 (build-system pyproject-build-system)
3842 (native-inputs
3843 (list python-pytest
3844 python-setuptools
3845 python-setuptools-scm
3846 python-wheel))
3847 (propagated-inputs
3848 (list python-numpy))
3849 (home-page "https://github.com/ShayHill/simplify_polyline")
3850 (synopsis "Simplify an open or closed polyline")
3851 (description
3852 "This package implements functionality to work with plyline.
3853Features:
3854@itemize
3855@item Visvalingham-Whyatt - removes the smallest triangles formed by
3856three consecutive points in a polyline or polygon
3857@item Douglas-Peucker - gives a better representation of the convex hull
3858@end itemize")
3859 (license license:expat)))
3860
3861(define-public python-siphash24
3862 (package
3863 (name "python-siphash24")
3864 (version "1.8")
3865 (source
3866 (origin
3867 (method git-fetch)
3868 (uri (git-reference
3869 (url "https://github.com/dnicolodi/python-siphash24/")
3870 (commit (string-append "v" version))))
3871 (file-name (git-file-name name version))
3872 (sha256
3873 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3874 (build-system pyproject-build-system)
3875 (arguments
3876 (list
3877 #:test-backend #~'custom
3878 #:test-flags #~(list "test.py")
3879 #:phases
3880 #~(modify-phases %standard-phases
3881 (add-after 'unpack 'patch-pyproject
3882 (lambda _
3883 (substitute* "pyproject.toml"
3884 ;; meson-python: error: Field `project.license` has an invalid
3885 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3886 ;; LGPL-2.1-or-later`)
3887 (("^license = .*")
3888 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3889 (native-inputs
3890 (list pkg-config
3891 python-meson
3892 python-pytest))
3893 (inputs
3894 (list c-siphash))
3895 (home-page "https://github.com/dnicolodi/python-siphash24/")
3896 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3897 (description
3898 "This package provides a C-based implementation of
3899@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3900compatible with the hash functions provided by the hashlib standard library
3901module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3902 ;; They are in LICENSES directory:
3903 (license (list license:asl2.0
3904 license:lgpl2.1+))))
3905
3906(define-public python-snakesay
3907 (package
3908 (name "python-snakesay")
3909 (version "0.10.4")
3910 (source
3911 (origin
3912 (method git-fetch)
3913 (uri (git-reference
3914 (url "https://github.com/pythonanywhere/snakesay")
3915 (commit (string-append "v" version))))
3916 (file-name (git-file-name name version))
3917 (sha256
3918 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3919 (build-system pyproject-build-system)
3920 (native-inputs (list python-pytest python-uv-build))
3921 (home-page "https://github.com/pythonanywhere/snakesay")
3922 (synopsis "Like @command{cowsay} but with Python flavor")
3923 (description
3924 "This package provides a simple ASCII art pictures generator of a
3925Snake with a message.")
3926 (license license:expat)))
3927
3928(define-public python-jaconv
3929 (package
3930 (name "python-jaconv")
3931 ;; Last release is not tagged.
3932 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3933 (revision . "0")))
3934 (version (git-version "0.4.0"
3935 (assoc-ref properties 'revision)
3936 (assoc-ref properties 'commit)))
3937 (source
3938 (origin
3939 (method git-fetch)
3940 (uri (git-reference
3941 (url "https://github.com/ikegami-yukino/jaconv")
3942 (commit (assoc-ref properties 'commit))))
3943 (file-name (git-file-name name version))
3944 (sha256
3945 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3946 (build-system pyproject-build-system)
3947 (native-inputs (list python-setuptools python-pynose))
3948 (home-page "https://github.com/ikegami-yukino/jaconv")
3949 (synopsis
3950 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3951Hankaku, Zenkaku")
3952 (description
3953 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3954Hankaku (half-width character) and Zenkaku (full-width character)")
3955 (license license:expat)))
3956
3957(define-public python-janus
3958 (package
3959 (name "python-janus")
3960 (version "1.0.0")
3961 (source
3962 (origin
3963 (method url-fetch)
3964 (uri (pypi-uri "janus" version))
3965 (sha256
3966 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3967 (build-system pyproject-build-system)
3968 (native-inputs
3969 (list python-pytest python-pytest-asyncio
3970 python-setuptools python-wheel))
3971 (propagated-inputs (list python-typing-extensions))
3972 (home-page "https://github.com/aio-libs/janus/")
3973 (synopsis
3974 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3975 (description
3976 "Mixed sync-async queue, supposed to be used for communicating between
3977classic synchronous (threaded) code and asynchronous (in terms of
3978@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3979@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3980library has two faces: synchronous and asynchronous interface. Synchronous is
3981fully compatible with
3982@url{https://docs.python.org/3/library/queue.html,standard queue},
3983asynchronous one follows
3984@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3985design}.")
3986 (license license:asl2.0)))
3987
3988(define-public python-concurrent-log-handler
3989 (package
3990 (name "python-concurrent-log-handler")
3991 (version "0.9.25")
3992 ;; No tests in the PyPI tarball.
3993 (source
3994 (origin
3995 (method git-fetch)
3996 (uri (git-reference
3997 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3998 (commit version)))
3999 (file-name (git-file-name name version))
4000 (sha256
4001 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
4002 (build-system pyproject-build-system)
4003 (arguments
4004 (list
4005 ;; XXX: Tests are broken, no new version fixing them yet.
4006 #:tests? #f))
4007 (native-inputs
4008 (list python-hatchling))
4009 (propagated-inputs
4010 (list python-portalocker))
4011 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
4012 (synopsis
4013 "Additional log handler for Python's standard @code{logging} package")
4014 (description
4015 "This package provides an additional log handler for Python's standard
4016@code{logging} package (PEP 282). This handler will write log events to a log
4017file which is rotated when the log file reaches a certain size. Multiple
4018processes can safely write to the same log file concurrently and rotated logs
4019can be gzipped if desired. An optional threaded queue logging handler is
4020provided to perform logging in the background.")
4021 (license license:asl2.0)))
4022
4023(define-public python-lazy
4024 (package
4025 (name "python-lazy")
4026 (version "1.6")
4027 (source
4028 (origin
4029 (method url-fetch)
4030 (uri (pypi-uri "lazy" version))
4031 (sha256
4032 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
4033 (build-system pyproject-build-system)
4034 (native-inputs (list python-pytest python-setuptools python-wheel))
4035 (home-page "https://github.com/stefanholek/lazy")
4036 (synopsis "Lazy attributes for Python objects")
4037 (description "This package provides a decorator to create lazy
4038attributes.")
4039 (license license:bsd-2)))
4040
4041(define-public python-logfury
4042 (package
4043 (name "python-logfury")
4044 (version "1.0.1")
4045 (source
4046 (origin
4047 (method url-fetch)
4048 (uri (pypi-uri "logfury" version))
4049 (sha256
4050 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
4051 (build-system pyproject-build-system)
4052 (native-inputs
4053 (list python-pytest
4054 python-setuptools
4055 python-setuptools-scm
4056 python-testfixtures
4057 python-wheel))
4058 (home-page "https://github.com/reef-technologies/logfury/")
4059 (synopsis "Logging of method calls for python libraries")
4060 (description
4061 "Logfury is a tool for python library maintainers. It allows for
4062responsible, low-boilerplate logging of method calls.")
4063 (license license:bsd-3)))
4064
4065(define-public python-logzero
4066 (package
4067 (name "python-logzero")
4068 (version "1.7.0")
4069 (source
4070 (origin
4071 (method git-fetch)
4072 (uri (git-reference
4073 (url "https://github.com/metachris/logzero")
4074 (commit (string-append "v" version))))
4075 (file-name (git-file-name name version))
4076 (sha256
4077 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
4078 (build-system pyproject-build-system)
4079 (native-inputs (list python-pytest python-setuptools))
4080 (home-page "https://github.com/metachris/logzero")
4081 (synopsis "Robust and effective logging for Python")
4082 (description
4083 "@code{logzero} provides a fully configured Python logger object for
4084easy logging and rotating to a console or a file.")
4085 (license license:expat)))
4086
4087(define-public python-logbook
4088 (package
4089 (name "python-logbook")
4090 (version "1.8.2")
4091 (source
4092 (origin
4093 (method url-fetch)
4094 (uri (pypi-uri "logbook" version))
4095 (sha256
4096 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
4097 (build-system pyproject-build-system)
4098 (native-inputs
4099 (list python-brotli
4100 python-cython
4101 python-pytest
4102 python-setuptools
4103 python-wheel))
4104 (home-page "https://github.com/getlogbook/logbook")
4105 (synopsis "Logbook is a logging replacement for Python")
4106 (description
4107 "Logbook is a logging system for Python that replaces the standard
4108library’s logging module. It was designed with both complex and simple
4109applications in mind and the idea to make logging fun.")
4110 (license license:bsd-3)))
4111
4112(define-public python-databind-core
4113 (package
4114 (name "python-databind-core")
4115 (version "4.4.2")
4116 (source
4117 (origin
4118 (method url-fetch)
4119 (uri (pypi-uri "databind.core" version))
4120 (sha256
4121 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
4122 (snippet
4123 #~(begin (use-modules (guix build utils))
4124 ;; The problem with python-typing-extensions >= 4.7 is only
4125 ;; with python-3.7.
4126 (substitute* "pyproject.toml"
4127 ((",<4.7.*") "\"\n"))))))
4128 (build-system pyproject-build-system)
4129 (arguments
4130 (list
4131 #:phases
4132 #~(modify-phases %standard-phases
4133 (add-after 'install 'fix-name
4134 (lambda* (#:key inputs outputs #:allow-other-keys)
4135 (let* ((sitedir (site-packages inputs outputs))
4136 (dist-info
4137 (string-append sitedir "/databind_core-" #$version ".dist-info")))
4138 (substitute* (string-append dist-info "/METADATA")
4139 (("Name: databind-core")
4140 "Name: databind.core"))
4141 (substitute* (string-append dist-info "/RECORD")
4142 (("databind_core") "databind.core"))
4143 (rename-file dist-info
4144 (string-append sitedir
4145 "/databind.core-"
4146 #$version ".dist-info"))))))))
4147 (propagated-inputs
4148 (list python-deprecated
4149 python-nr-date
4150 python-nr-stream
4151 python-typeapi
4152 python-typing-extensions))
4153 (native-inputs
4154 (list python-poetry-core python-pytest))
4155 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
4156 (synopsis
4157 "Library for de-/serializing Python dataclasses")
4158 (description
4159 "Databind is a library inspired by jackson-databind to de-/serialize
4160Python dataclasses.")
4161 (license license:expat)))
4162
4163(define-public python-databind-json
4164 (package
4165 (name "python-databind-json")
4166 (version "4.4.2")
4167 (source
4168 (origin
4169 (method url-fetch)
4170 (uri (pypi-uri "databind.json" version))
4171 (sha256
4172 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
4173 (snippet
4174 #~(begin (use-modules (guix build utils))
4175 ;; The problem with python-typing-extensions >= 4.7 is only
4176 ;; with python-3.7.
4177 (substitute* "pyproject.toml"
4178 ((",<4.7.*") "\"\n"))))))
4179 (build-system pyproject-build-system)
4180 (arguments
4181 (list
4182 #:phases
4183 #~(modify-phases %standard-phases
4184 (add-after 'install 'fix-name
4185 (lambda* (#:key inputs outputs #:allow-other-keys)
4186 (let* ((sitedir (site-packages inputs outputs))
4187 (dist-info
4188 (string-append sitedir "/databind_json-" #$version ".dist-info")))
4189 (substitute* (string-append dist-info "/METADATA")
4190 (("Name: databind-json")
4191 "Name: databind.json"))
4192 (substitute* (string-append dist-info "/RECORD")
4193 (("databind_json") "databind.json"))
4194 (rename-file dist-info
4195 (string-append sitedir
4196 "/databind.json-"
4197 #$version ".dist-info"))))))))
4198 (propagated-inputs
4199 (list python-databind-core python-nr-date
4200 python-typeapi python-typing-extensions))
4201 (native-inputs (list python-poetry-core python-pytest))
4202 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
4203 (synopsis
4204 "De-/serialize Python dataclasses to or from JSON payloads")
4205 (description
4206 "The @code{databind.json} package implements the de-/serialization to or
4207from JSON payloads using the @code{databind.core} framework.")
4208 (license license:expat)))
4209
4210(define-public python-docspec
4211 (package
4212 (name "python-docspec")
4213 (version "2.2.1")
4214 (source
4215 (origin
4216 (method url-fetch)
4217 (uri (pypi-uri "docspec" version))
4218 (sha256
4219 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
4220 (build-system pyproject-build-system)
4221 (arguments (list #:tests? #false)) ;there are none
4222 (propagated-inputs
4223 (list python-databind-core
4224 python-databind-json
4225 python-deprecated))
4226 (native-inputs
4227 (list python-poetry-core))
4228 (home-page "https://github.com/NiklasRosenstein/python-docspec")
4229 (synopsis "Represent API documentation of programming languages")
4230 (description
4231 "Docspec is a JSON object specification for representing API
4232documentation of programming languages.")
4233 (license license:expat)))
4234
4235(define-public python-docspec-python
4236 (package
4237 (name "python-docspec-python")
4238 (version "2.2.1")
4239 (source
4240 (origin
4241 (method url-fetch)
4242 (uri (pypi-uri "docspec_python" version))
4243 (sha256
4244 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
4245 (build-system pyproject-build-system)
4246 (arguments
4247 (list #:tests? #false)) ;there are none
4248 (propagated-inputs (list python-docspec python-nr-util))
4249 (native-inputs (list python-poetry-core))
4250 (home-page "https://github.com/NiklasRosenstein/docspec/")
4251 (synopsis "Produce docspec data from Python source code")
4252 (description
4253 "This package provides a parser based on @code{lib2to3} producing
4254@code{docspec} data from Python source code.")
4255 (license license:expat)))
4256
4257(define-public python-fqdn
4258 (package
4259 (name "python-fqdn")
4260 (version "1.5.1")
4261 (source
4262 (origin
4263 (method git-fetch)
4264 (uri (git-reference
4265 (url "https://github.com/ypcrts/fqdn")
4266 (commit (string-append "v" version))))
4267 (file-name (git-file-name name version))
4268 (sha256
4269 (base32 "1cfxpvlvfi9s20v93m3rgw7jn6ybc5ga5rwxhrap59zwd9crsh2g"))))
4270 (build-system pyproject-build-system)
4271 (native-inputs
4272 (list python-pytest
4273 python-setuptools))
4274 (home-page "https://github.com/ypcrts/fqdn")
4275 (synopsis "Validate domain names against RFC 1123")
4276 (description
4277 "This package validates fully-qualified domain names against RFC 1123, so
4278that they are acceptable to modern bowsers")
4279 (license license:mpl2.0)))
4280
4281(define-public python-fire
4282 (package
4283 (name "python-fire")
4284 (version "0.7.0")
4285 (source
4286 (origin
4287 (method url-fetch)
4288 (uri (pypi-uri "fire" version))
4289 (sha256
4290 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4291 (build-system pyproject-build-system)
4292 (propagated-inputs (list python-termcolor))
4293 (native-inputs (list python-pytest python-setuptools python-wheel))
4294 (synopsis "Library for automatically generating command line interfaces")
4295 (description
4296 "Fire is a library for automatically generating command line interfaces
4297from absolutely any Python object. The following are the advantages:
4298@itemize
4299@item A simple way to create a CLI in Python.
4300@item A helpful tool for developing and debugging Python code.
4301@item Helps with exploring existing code or turning other people's code into a
4302command line interface.
4303@item Makes transitioning between Bash and Python easier.
4304@item Makes using a Python REPL easier by setting up the REPL with the modules
4305and variables you'll need already imported and created.
4306@end itemize")
4307 (home-page "https://github.com/google/python-fire")
4308 (license license:asl2.0)))
4309
4310(define-public python-fit-nbinom
4311 (package
4312 (name "python-fit-nbinom")
4313 (version "1.1")
4314 (source (origin
4315 (method url-fetch)
4316 (uri (pypi-uri "fit_nbinom" version))
4317 (sha256
4318 (base32
4319 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4320 (build-system pyproject-build-system)
4321 (arguments
4322 (list
4323 #:tests? #false ;there are none
4324 #:phases
4325 '(modify-phases %standard-phases
4326 (add-after 'unpack 'remove-invalid-syntax
4327 (lambda _
4328 (substitute* "setup.py"
4329 ((".\\*\"") "\"")))))))
4330 (propagated-inputs (list python-numpy python-scipy))
4331 (native-inputs (list python-setuptools python-wheel))
4332 (home-page "https://github.com/joachimwolff/fit_nbinom")
4333 (synopsis "Negative binomial maximum likelihood estimator")
4334 (description "This package provides an implementation in Python using
4335scipy and numpy of negative binomial maximum likelihood estimation.")
4336 (license license:gpl3+)))
4337
4338(define-public python-docrep
4339 (package
4340 (name "python-docrep")
4341 (version "0.3.2")
4342 (source (origin
4343 (method url-fetch)
4344 (uri (pypi-uri "docrep" version))
4345 (sha256
4346 (base32
4347 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4348 (build-system pyproject-build-system)
4349 (propagated-inputs (list python-six))
4350 (native-inputs (list python-pytest python-setuptools python-wheel))
4351 (home-page "https://github.com/Chilipp/docrep")
4352 (synopsis "Python package for docstring repetition")
4353 (description "Docrep is the documentation repetition module. This module
4354targets developers that develop complex and nested Python APIs and helps them
4355to create a well-documented piece of software.")
4356 (license license:asl2.0)))
4357
4358(define-public python-dotmap
4359 (package
4360 (name "python-dotmap")
4361 (version "1.3.30")
4362 (source
4363 (origin
4364 (method url-fetch)
4365 (uri (pypi-uri "dotmap" version))
4366 (sha256
4367 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4368 (build-system pyproject-build-system)
4369 (arguments (list #:test-backend #~'unittest))
4370 (native-inputs (list python-setuptools))
4371 (home-page "https://github.com/drgrib/dotmap")
4372 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4373 (description
4374 "DotMap is a dot-access dictionary subclass that has dynamic
4375hierarchy creation, can be initialized with keys, can be initialized from a
4376dictionary, can be convert to a dictionary, and is ordered by insertion.")
4377 (license license:expat)))
4378
4379(define-public python-dotty-dict
4380 (package
4381 (name "python-dotty-dict")
4382 (version "1.3.1")
4383 (source
4384 (origin
4385 (method git-fetch)
4386 (uri (git-reference
4387 (url "https://github.com/pawelzny/dotty_dict")
4388 (commit (string-append "v" version))))
4389 (sha256
4390 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4391 (build-system pyproject-build-system)
4392 (native-inputs
4393 (list python-poetry-core
4394 python-pytest
4395 python-setuptools))
4396 (home-page "https://github.com/pawelzny/dotty_dict")
4397 (synopsis "Python library for accessing dictionaries using a dot syntax")
4398 (description "This package provides a library that wraps the traditional
4399Python dictionaries and provides a syntax to access nested dictionaries values
4400using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4401 (license license:expat)))
4402
4403(define-public python-affine
4404 (package
4405 (name "python-affine")
4406 (version "2.4.0")
4407 (source (origin
4408 (method url-fetch)
4409 (uri (pypi-uri "affine" version))
4410 (sha256
4411 (base32
4412 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4413 (build-system pyproject-build-system)
4414 (propagated-inputs (list python-flake8
4415 python-pytest python-pytest-cov))
4416 (native-inputs (list python-flit-core))
4417 (home-page "https://github.com/rasterio/affine")
4418 (synopsis "Matrices describing affine transformation of the plane")
4419 (description "This is a package for matrices describing the affine
4420transformation of the plane.")
4421 (license license:bsd-3)))
4422
4423(define-public python-argopt
4424 (package
4425 (name "python-argopt")
4426 (version "0.9.1")
4427 (source
4428 (origin
4429 (method url-fetch)
4430 (uri (pypi-uri "argopt" version))
4431 (sha256
4432 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4433 (build-system pyproject-build-system)
4434 (native-inputs
4435 (list python-pytest
4436 python-pytest-timeout
4437 python-setuptools
4438 python-setuptools-scm
4439 python-wheel))
4440 (home-page "https://github.com/casperdcl/argopt")
4441 (synopsis "Generate a command-line interface from a docstring")
4442 (description
4443 "This package provides tools to define a command line interface
4444from a docstring rather than the other way around.")
4445 (license license:mpl2.0)))
4446
4447(define-public python-array-api-compat
4448 (package
4449 (name "python-array-api-compat")
4450 (version "1.12.0")
4451 (source
4452 (origin
4453 (method url-fetch)
4454 (uri (pypi-uri "array_api_compat" version))
4455 (sha256
4456 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4457 (build-system pyproject-build-system)
4458 ;; Tests would require all supported array libraries, including pytorch
4459 (arguments (list #:tests? #false))
4460 (native-inputs
4461 (list python-setuptools))
4462 (home-page "https://data-apis.org/array-api-compat/")
4463 (synopsis "Array API compatibility wrapper for NumPy et al")
4464 (description
4465 "This package provides a wrapper around @code{NumPy} and other array
4466libraries to make them compatible with the Array API standard")
4467 (license license:expat)))
4468
4469(define-public python-array-api-strict
4470 (package
4471 (name "python-array-api-strict")
4472 (version "2.5")
4473 (source
4474 (origin
4475 (method url-fetch)
4476 (uri (pypi-uri "array_api_strict" version))
4477 (sha256
4478 (base32 "1ig116ld5k8wx82ahld4l7qcb0d4s5s4f4a0nrflrh3hzabyarvp"))))
4479 (build-system pyproject-build-system)
4480 (arguments
4481 (list
4482 ;; tests: 585 passed, 2 deselected
4483 #:test-flags
4484 ;; hypothesis.errors.InvalidArgument:
4485 ;; xp.__array_api_version__='2025.12', but it must be a valid version
4486 ;; string ('2021.12', '2022.12', '2023.12', '2024.12'). If the standard
4487 ;; version you want is not available, please ensure you're using the
4488 ;; latest version of Hypothesis, then open an issue if one doesn't
4489 ;; already exist.
4490 #~(list "--ignore=array_api_strict/tests/test_set_functions.py"
4491 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4492 "-k" (string-append "not test_disabled_extensions"
4493 " and not test_environment_variables"))))
4494 (native-inputs
4495 (list python-hypothesis
4496 python-pytest
4497 python-setuptools
4498 python-setuptools-scm))
4499 (propagated-inputs
4500 (list python-numpy))
4501 (home-page "https://data-apis.org/array-api-strict/")
4502 (synopsis "Strict implementation of the Python array API")
4503 (description
4504 "@code{array_api_strict} is a strict, minimal implementation of the
4505@url{https://data-apis.org/array-api/latest/, Python array API}.
4506
4507The purpose of array-api-strict is to provide an implementation of the array
4508API for consuming libraries to test against so they can be completely sure
4509their usage of the array API is portable.")
4510 (license license:bsd-3)))
4511
4512(define-public python-cachedir-tag
4513 (package
4514 (name "python-cachedir-tag")
4515 (version "0.0.4")
4516 (source
4517 (origin
4518 (method git-fetch)
4519 (uri (git-reference
4520 (url "https://github.com/moreati/python-cachedir-tag")
4521 (commit (string-append "v" version))))
4522 (file-name (git-file-name name version))
4523 (sha256
4524 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4525 (build-system pyproject-build-system)
4526 (arguments '(#:tests? #f)) ;no test
4527 (native-inputs (list python-setuptools))
4528 (home-page "https://github.com/moreati/python-cachedir-tag")
4529 (synopsis
4530 "Handle @file{CACHEDIR.TAG} in cache directories")
4531 (description
4532 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4533a file llowing any arbitrary directory to be marked as a cache directory.")
4534 (license license:expat)))
4535
4536(define-public python-cachetools
4537 (package
4538 (name "python-cachetools")
4539 (version "6.1.0")
4540 (source
4541 (origin
4542 (method url-fetch)
4543 (uri (pypi-uri "cachetools" version))
4544 (sha256
4545 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4546 (build-system pyproject-build-system)
4547 (native-inputs
4548 (list python-pytest
4549 python-setuptools
4550 python-wheel))
4551 (home-page "https://github.com/tkem/cachetools/")
4552 (synopsis "Extensible memoizing collections and decorators")
4553 (description "This module provides various memoizing collections and
4554decorators, including variants of the Python standard library's
4555@code{lru_cache} function decorator.")
4556 (license license:expat)))
4557
4558(define-public python-cachetools-5
4559 (package
4560 (inherit python-cachetools)
4561 (version "5.5.2")
4562 (source
4563 (origin
4564 (method url-fetch)
4565 (uri (pypi-uri "cachetools" version))
4566 (sha256
4567 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4568
4569(define-public python-colorclass
4570 (package
4571 (name "python-colorclass")
4572 (version "2.2.2")
4573 (source
4574 (origin
4575 (method git-fetch)
4576 (uri (git-reference
4577 (url "https://github.com/matthewdeanmartin/colorclass")
4578 (commit (string-append "v" version))))
4579 (file-name (git-file-name name version))
4580 (sha256
4581 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4582 (build-system pyproject-build-system)
4583 (arguments
4584 (list
4585 #:test-flags
4586 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4587 #:phases
4588 #~(modify-phases %standard-phases
4589 (add-after 'unpack 'use-poetry-core
4590 (lambda _
4591 ;; Patch to use the core poetry API.
4592 (substitute* "pyproject.toml"
4593 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4594 (native-inputs (list python-poetry-core python-pytest))
4595 (home-page "https://github.com/matthewdeanmartin/colorclass")
4596 (synopsis "Colorful console applications with Python")
4597 (description
4598 "This package provides an ANSI color text library for Python. It
4599provides automatic coloring for dark or light terminals.")
4600 (license license:expat)))
4601
4602(define-public python-colorcet
4603 (package
4604 (name "python-colorcet")
4605 (version "3.1.1a1")
4606 (source
4607 (origin
4608 (method url-fetch)
4609 (uri (pypi-uri "colorcet" version))
4610 (sha256
4611 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4612 (build-system pyproject-build-system)
4613 (native-inputs (list python-nbval
4614 python-packaging
4615 python-pytest
4616 python-pytest-mpl
4617 python-setuptools
4618 python-setuptools-scm))
4619 (home-page "https://colorcet.holoviz.org/")
4620 (synopsis "Collection of perceptually uniform colormaps")
4621 (description "Colorcet is a collection of perceptually accurate 256-color
4622colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4623HoloViews, and Datashader.")
4624 (license license:cc-by4.0)))
4625
4626(define-public python-colored
4627 (package
4628 (name "python-colored")
4629 (version "2.3.0")
4630 (source (origin
4631 (method git-fetch)
4632 (uri (git-reference
4633 (url "https://gitlab.com/dslackw/colored")
4634 (commit version)))
4635 (file-name (git-file-name name version))
4636 (sha256
4637 (base32
4638 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4639 (build-system pyproject-build-system)
4640 (arguments
4641 (list
4642 #:phases
4643 #~(modify-phases %standard-phases
4644 (add-before 'check 'pre-check
4645 (lambda _
4646 ;; Tests expect ANSI escape codes for colors.
4647 (setenv "FORCE_COLOR" "1"))))))
4648 (native-inputs (list python-flit-core python-pytest))
4649 (home-page "https://gitlab.com/dslackw/colored")
4650 (synopsis "Simple library for color and formatting to terminal")
4651 (description "This is a very simple Python library for color and
4652formatting in the terminal. It comes with a collection of color codes and
4653names for 256 color terminal setups.")
4654 (license license:expat)))
4655
4656(define-public python-colored-traceback
4657 ;; No tags in upstream repository.
4658 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4659 (revision "0"))
4660 (package
4661 (name "python-colored-traceback")
4662 (version (git-version "0.4.2" revision commit))
4663 (source
4664 (origin
4665 (method git-fetch)
4666 (uri (git-reference
4667 (url "https://github.com/staticshock/colored-traceback.py")
4668 (commit commit)))
4669 (file-name (git-file-name name version))
4670 (sha256
4671 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4672 (build-system pyproject-build-system)
4673 (arguments
4674 ;; Tests are incompatible with current python version.
4675 (list #:tests? #f))
4676 (propagated-inputs (list python-colorama python-pygments))
4677 (native-inputs (list python-setuptools python-wheel))
4678 (home-page "https://github.com/staticshock/colored-traceback.py")
4679 (synopsis "Automatically color uncaught exception tracebacks")
4680 (description "This package provides python utilities to automatically
4681color uncaught exception tracebacks.")
4682 (license license:isc))))
4683
4684(define-public python-colorful
4685 (package
4686 (name "python-colorful")
4687 (version "0.5.8")
4688 (source
4689 (origin
4690 (method git-fetch)
4691 (uri (git-reference
4692 (url "https://github.com/timofurrer/colorful")
4693 (commit (string-append "v" version))))
4694 (file-name (git-file-name name version))
4695 (sha256
4696 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4697 (build-system pyproject-build-system)
4698 (native-inputs
4699 (list python-pytest
4700 python-setuptools))
4701 (propagated-inputs
4702 (list python-colorama))
4703 (home-page "http://github.com/timofurrer/colorful")
4704 (synopsis "Terminal string styling")
4705 (description "Colorful provides an array of text styles, that can be used
4706as functions or string constants to form colored terminal output.")
4707 (license license:expat)))
4708
4709(define-public python-colorthief
4710 (package
4711 (name "python-colorthief")
4712 (version "0.2.1")
4713 (source
4714 (origin
4715 (method url-fetch)
4716 (uri (pypi-uri "colorthief" version))
4717 (sha256
4718 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4719 (build-system pyproject-build-system)
4720 (arguments
4721 (list #:tests? #f)) ;no tests in PyPI or Git
4722 (native-inputs (list python-setuptools))
4723 (propagated-inputs (list python-pillow))
4724 (home-page "https://github.com/fengsp/color-thief-py")
4725 (synopsis "Grab the color palette of an image")
4726 (description
4727 "This package provides methods to determine the dominant color
4728of an image, as well as constructing a representative color palette.")
4729 (license license:bsd-3)))
4730
4731(define-public python-construct-classes
4732 (package
4733 (name "python-construct-classes")
4734 (version "0.1.2")
4735 (source
4736 (origin
4737 (method git-fetch)
4738 (uri (git-reference
4739 (url "https://github.com/matejcik/construct-classes")
4740 (commit (string-append "v" version))))
4741 (file-name (git-file-name name version))
4742 (sha256
4743 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4744 (build-system pyproject-build-system)
4745 (propagated-inputs
4746 (list python-construct))
4747 (native-inputs
4748 (list python-poetry-core
4749 python-pytest))
4750 (home-page "https://github.com/matejcik/construct-classes")
4751 (synopsis "Parse binary structs into dataclasses")
4752 (description "This package provides a parser to parse binary structs
4753into dataclasses.")
4754 (license license:expat)))
4755
4756(define-public python-contourpy
4757 (package
4758 (name "python-contourpy")
4759 (version "1.3.3")
4760 (source
4761 (origin
4762 (method url-fetch)
4763 (uri (pypi-uri "contourpy" version))
4764 (sha256
4765 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4766 (build-system pyproject-build-system)
4767 (arguments
4768 (list
4769 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4770 #:test-flags
4771 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4772 #~(list "-m" "not image"
4773 ;; Tests that pass but avoided for load reasons.
4774 "-k" "not test_filled_random_big and not test_lines_random_big")))
4775 (native-inputs
4776 (list pybind11-2
4777 python-meson
4778 python-pytest
4779 python-wurlitzer))
4780 (propagated-inputs
4781 (list python-numpy))
4782 (home-page "https://contourpy.readthedocs.io/")
4783 (synopsis
4784 "Python library for calculating contours of 2D quadrilateral grids")
4785 (description
4786 "ContourPy is a Python library for calculating contours of 2D
4787quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4788 (license license:bsd-3)))
4789
4790(define-public python-lunr
4791 (package
4792 (name "python-lunr")
4793 (version "0.8.0")
4794 (source
4795 (origin
4796 (method url-fetch)
4797 (uri
4798 (pypi-uri "lunr" version))
4799 (sha256
4800 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4801 (build-system pyproject-build-system)
4802 (arguments
4803 (list
4804 #:test-flags
4805 '(list "-k" "not TestLanguageSupport"
4806 "--ignore-glob=tests/acceptance_tests/*")))
4807 (native-inputs
4808 (list python-hatch-fancy-pypi-readme
4809 python-hatchling
4810 python-pytest
4811 python-pytest-timeout))
4812 (propagated-inputs
4813 (list python-nltk))
4814 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4815 (synopsis "Full-text search library")
4816 (description "This package provides python library for full-text search.
4817It indexes documents and provides a search interface for retrieving documents
4818that best match text queries.")
4819 (license license:expat)))
4820
4821(define-public python-mdit-py-plugins
4822 (package
4823 (name "python-mdit-py-plugins")
4824 (version "0.5.0")
4825 (source (origin
4826 (method git-fetch) ;for tests
4827 (uri (git-reference
4828 (url "https://github.com/executablebooks/mdit-py-plugins")
4829 (commit (string-append "v" version))))
4830 (file-name (git-file-name name version))
4831 (sha256
4832 (base32
4833 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4834 (build-system pyproject-build-system)
4835 (propagated-inputs
4836 (list python-markdown-it-py
4837 python-attrs))
4838 (native-inputs
4839 (list python-flit-core
4840 python-pytest
4841 python-pytest-regressions))
4842 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4843 (synopsis "Collection of plugins for markdown-it-py")
4844 (description "This package contains a collection of plugins for
4845@code{markdown-it-py} like:
4846@enumerate
4847@item amsmath,
4848@item attrs,
4849@item container,
4850@item definition list,
4851@item dollarmath,
4852@item field list,
4853@item footnote,
4854@item textmath, and
4855@item wordcount.
4856@end enumerate")
4857 (license license:expat)))
4858
4859(define-public python-mdurl
4860 (package
4861 (name "python-mdurl")
4862 (version "0.1.2")
4863 (source
4864 (origin
4865 (method git-fetch)
4866 (uri (git-reference
4867 (url "https://github.com/executablebooks/mdurl")
4868 (commit version)))
4869 (file-name (git-file-name name version))
4870 (sha256
4871 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4872 (build-system pyproject-build-system)
4873 (native-inputs (list python-flit-core python-pytest))
4874 (home-page "https://github.com/executablebooks/mdurl")
4875 (synopsis "Markdown URL utilities")
4876 (description
4877 "This package implements a Python port of the JavaScript @code{mdurl}.")
4878 (license license:expat)))
4879
4880(define-public python-mkdocs
4881 (package
4882 (name "python-mkdocs")
4883 (version "1.6.1")
4884 (source
4885 (origin
4886 (method git-fetch)
4887 (uri (git-reference
4888 (url "https://github.com/mkdocs/mkdocs")
4889 (commit version)))
4890 (file-name (git-file-name name version))
4891 (sha256
4892 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4893 (build-system pyproject-build-system)
4894 (arguments
4895 (list
4896 ;; tests: 687 passed
4897 #:test-backend #~'unittest
4898 #:test-flags
4899 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4900 #:phases
4901 #~(modify-phases %standard-phases
4902 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4903 ;; to run tests with pytest (and thus ignore them selectively).
4904 (add-before 'check 'delete-failing-tests
4905 (lambda _
4906 (delete-file "mkdocs/tests/cli_tests.py"))))))
4907 (native-inputs
4908 (list python-hatchling
4909 python-setuptools))
4910 (propagated-inputs
4911 (list python-click
4912 python-ghp-import
4913 python-jinja2
4914 python-markdown
4915 python-markupsafe
4916 python-mergedeep
4917 python-mkdocs-get-deps
4918 python-packaging
4919 python-pathspec
4920 python-pyyaml
4921 python-pyyaml-env-tag
4922 python-watchdog
4923 ;; [optional]
4924 python-babel))
4925 (home-page "https://www.mkdocs.org")
4926 (synopsis "Project documentation with Markdown")
4927 (description
4928 "MkDocs is a static site generator geared towards building project
4929documentation. Documentation source files are written in Markdown, and
4930configured with a single YAML configuration file.")
4931 (license license:bsd-3)))
4932
4933(define-public python-mkdocs-get-deps
4934 (package
4935 (name "python-mkdocs-get-deps")
4936 (version "0.2.0")
4937 (source
4938 (origin
4939 (method git-fetch)
4940 (uri (git-reference
4941 (url "https://github.com/mkdocs/get-deps")
4942 (commit (string-append "v" version))))
4943 (file-name (git-file-name name version))
4944 (sha256
4945 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4946 (build-system pyproject-build-system)
4947 (native-inputs
4948 (list python-pytest
4949 python-hatchling))
4950 (propagated-inputs
4951 (list python-mergedeep
4952 python-platformdirs
4953 python-pyyaml))
4954 (home-page "https://github.com/mkdocs/get-deps")
4955 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4956 (description
4957 "This package provides an @code{MkDocs} extension that lists all dependencies
4958according to a mkdocs.yml file. This command guesses the Python dependencies
4959that a MkDocs site requires in order to build. It simply prints the PyPI
4960packages that need to be installed.")
4961 (license license:expat)))
4962
4963(define-public python-mkdocs-markdownextradata-plugin
4964 (package
4965 (name "python-mkdocs-markdownextradata-plugin")
4966 (version "0.2.5")
4967 (source
4968 (origin
4969 (method git-fetch)
4970 (uri (git-reference
4971 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4972 (commit version)))
4973 (file-name (git-file-name name version))
4974 (sha256
4975 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4976 (build-system pyproject-build-system)
4977 (native-inputs (list python-pytest python-setuptools))
4978 (propagated-inputs (list python-mkdocs python-pyyaml))
4979 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4980 (synopsis "Inject extra variables into the MkDocs markdown template")
4981 (description
4982 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4983variables into the markdown template.")
4984 (license license:expat)))
4985
4986(define-public python-docstring-to-markdown
4987 (package
4988 (name "python-docstring-to-markdown")
4989 (version "0.15")
4990 (source
4991 (origin
4992 (method url-fetch)
4993 (uri (pypi-uri "docstring-to-markdown" version))
4994 (sha256
4995 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4996 (build-system pyproject-build-system)
4997 (native-inputs
4998 (list python-pytest
4999 python-setuptools))
5000 (home-page "https://github.com/python-lsp/docstring-to-markdown")
5001 (synopsis "On the fly conversion of Python docstrings to markdown")
5002 (description
5003 "This module can convert Python docstrings to Markdown. It can recognise
5004reStructuredText inside docstrings and convert multiple of its features to
5005Markdown. It also includes initial support for Google-formatted docstrings.")
5006 (license license:lgpl2.1+)))
5007
5008(define-public python-pdoc
5009 (package
5010 (name "python-pdoc")
5011 (version "13.0.1")
5012 (source (origin
5013 (method git-fetch)
5014 (uri (git-reference
5015 (url "https://github.com/mitmproxy/pdoc")
5016 (commit (string-append "v" version))))
5017 (file-name (git-file-name name version))
5018 (sha256
5019 (base32
5020 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
5021 (build-system pyproject-build-system)
5022 (native-inputs (list python-pytest python-jinja2 python-pygments
5023 python-setuptools python-wheel))
5024 (arguments
5025 (list
5026 ;; Some tests fail, presumably because of slight version mismatches of
5027 ;; the dependencies.
5028 #:test-flags
5029 '(list "-k" (string-append "not test_var_with_raising_repr and "
5030 "not test_smoke[mock] and "
5031 "not test_snapshots[html"))))
5032 (home-page "https://pdoc.dev/")
5033 (synopsis "API documentation for Python projects")
5034 (description "pdoc auto-generates API documentation that follows your
5035project's Python module hierarchy. It requires no configuration, has
5036first-class support for type annotations, cross-links between identifiers,
5037comes with an integrated live-reloading web server, uses customizable HTML
5038templates, understands numpydoc and Google-style docstrings.")
5039 (license license:unlicense)))
5040
5041(define-public python-py4j
5042 (package
5043 (name "python-py4j")
5044 (version "0.10.9.7")
5045 (source (origin
5046 (method url-fetch)
5047 (uri (pypi-uri "py4j" version))
5048 (sha256
5049 (base32
5050 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
5051 (build-system pyproject-build-system)
5052 (arguments (list #:tests? #f)) ; Requires a running JVM?
5053 (native-inputs (list python-setuptools))
5054 (home-page "https://www.py4j.org/")
5055 (synopsis "Dynamically access arbitrary Java objects from Python")
5056 (description
5057 "This package enables Python programs to dynamically access arbitrary
5058Java objects.")
5059 (license license:bsd-3)))
5060
5061(define-public python-pymdown-extensions
5062 (package
5063 (name "python-pymdown-extensions")
5064 (version "10.16.1")
5065 (source
5066 (origin
5067 (method git-fetch)
5068 (uri (git-reference
5069 (url "https://github.com/facelessuser/pymdown-extensions")
5070 (commit version)))
5071 (file-name (git-file-name name version))
5072 (sha256
5073 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
5074 (build-system pyproject-build-system)
5075 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
5076 (arguments
5077 (list #:tests? #f))
5078 (native-inputs (list python-hatchling python-pytest python-pyyaml))
5079 (propagated-inputs (list python-markdown))
5080 (home-page "https://github.com/facelessuser/pymdown-extensions")
5081 (synopsis "Extension pack for Python Markdown")
5082 (description
5083 "PyMdown Extensions is a collection of extensions for Python Markdown.
5084All extensions are found under the module namespace of pymdownx.")
5085 (license license:expat)))
5086
5087(define-public python-plotext
5088 (package
5089 (name "python-plotext")
5090 (version "5.2.8")
5091 (source (origin
5092 (method url-fetch)
5093 (uri (pypi-uri "plotext" version))
5094 (sha256
5095 (base32
5096 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
5097 (build-system pyproject-build-system)
5098 (arguments (list #:tests? #false)) ;there are none
5099 (native-inputs (list python-setuptools python-wheel))
5100 (home-page "https://github.com/piccolomo/plotext")
5101 (synopsis "Plots in the terminal")
5102 (description "Plotext lets you plot directly to the terminal.")
5103 (license license:expat)))
5104
5105(define-public python-plotille
5106 (package
5107 (name "python-plotille")
5108 (version "5.0.0")
5109 (source
5110 (origin
5111 (method git-fetch)
5112 (uri (git-reference
5113 (url "https://github.com/tammoippen/plotille")
5114 (commit (string-append "v" version))))
5115 (file-name (git-file-name name version))
5116 (sha256
5117 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
5118 (modules '((guix build utils)))
5119 (snippet
5120 #~(begin
5121 ;; Without deleting ./imgs setuptools complains as follows: error:
5122 ;; Multiple top-level packages discovered in a flat-layout:
5123 ;; ['imgs', 'plotille'].
5124 (delete-file-recursively "./imgs")))))
5125 (build-system pyproject-build-system)
5126 (native-inputs
5127 (list python-pytest
5128 python-mock
5129 python-pendulum
5130 python-pytest-mock
5131 python-setuptools
5132 python-wheel))
5133 (home-page "https://github.com/tammoippen/plotille")
5134 (synopsis "Plot in the terminal using braille dots")
5135 (description
5136 "Plotille provides a figure class and graphing functions to create plots,
5137scatter plots, histograms and heatmaps in the terminal using braille dots.")
5138 (license license:expat)))
5139
5140(define-public python-poetry-dynamic-versioning
5141 (package
5142 (name "python-poetry-dynamic-versioning")
5143 (version "1.9.1")
5144 (source
5145 (origin
5146 (method url-fetch)
5147 (uri (pypi-uri "poetry_dynamic_versioning" version))
5148 (sha256
5149 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
5150 (build-system pyproject-build-system)
5151 (arguments
5152 (list
5153 #:test-flags
5154 #~(list "--ignore=tests/test_integration.py"
5155 "-k" (string-join
5156 ;; Tests searching for VCS back end.
5157 (list "not test__get_version__defaults"
5158 "test__enable_in_doc__project_with_dynamic"
5159 "test__enable_in_doc__project_with_version"
5160 "test__get_version__format_jinja"
5161 "test__get_version__format_jinja_imports_with_module_and_item"
5162 "test__get_version__format_jinja_imports_with_module_only"
5163 "test__get_version__format_jinja_with_enforced_style")
5164 " and not "))))
5165 (native-inputs
5166 (list python-poetry-core
5167 python-pytest))
5168 (propagated-inputs
5169 (list python-dunamai
5170 python-jinja2
5171 python-tomlkit))
5172 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
5173 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
5174 (description
5175 "This package provides a build backend that patches Poetry Core to enable
5176the versioning system in PEP 517 build frontends.")
5177 (license license:expat)))
5178
5179(define-public python-poetry-plugin-export
5180 (package
5181 (name "python-poetry-plugin-export")
5182 (version "1.10.0")
5183 (source
5184 (origin
5185 (method url-fetch)
5186 (uri (pypi-uri "poetry_plugin_export" version))
5187 (sha256
5188 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
5189 (build-system pyproject-build-system)
5190 (arguments
5191 (list
5192 #:tests? #f)) ;tests cycle with poetry
5193 (native-inputs
5194 (list python-poetry-core))
5195 (propagated-inputs
5196 (list python-cachy
5197 python-pendulum
5198 python-poetry-core
5199 python-tomlkit))
5200 (home-page "https://python-poetry.org/")
5201 (synopsis "Poetry plugin to export the dependencies to various formats")
5202 (description
5203 "Poetry plugin to export the dependencies to various formats.")
5204 (license license:expat)))
5205
5206(define-public python-portpicker
5207 (package
5208 (name "python-portpicker")
5209 (version "1.6.0")
5210 (source
5211 (origin
5212 (method url-fetch)
5213 (uri (pypi-uri "portpicker" version))
5214 (sha256
5215 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
5216 (build-system pyproject-build-system)
5217 (arguments
5218 (list
5219 #:test-flags
5220 ;; This fails because portserver ends up in bin, not site-packages
5221 '(list "--ignore=src/tests/portserver_test.py")))
5222 (propagated-inputs (list python-psutil))
5223 (native-inputs (list python-pytest python-setuptools python-wheel
5224 net-tools))
5225 (home-page "https://github.com/google/python_portpicker")
5226 (synopsis "Choose unique available network ports")
5227 (description
5228 "This package provides a library to choose unique available network
5229ports.")
5230 (license license:asl2.0)))
5231
5232(define-public python-md-ulb-pwrap
5233 (package
5234 (name "python-md-ulb-pwrap")
5235 (version "0.1.3")
5236 (source
5237 (origin
5238 (method git-fetch)
5239 (uri (git-reference
5240 (url "https://github.com/mondeja/md-ulb-pwrap")
5241 (commit (string-append "v" version))))
5242 (file-name (git-file-name name version))
5243 (sha256
5244 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
5245 (build-system pyproject-build-system)
5246 (arguments
5247 (list
5248 #:imported-modules `(,@%cargo-build-system-modules
5249 ,@%pyproject-build-system-modules)
5250 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5251 (guix build pyproject-build-system)
5252 (guix build utils))
5253 #:test-backend #~'custom
5254 #:test-flags #~(list "test.py")
5255 #:phases
5256 #~(modify-phases %standard-phases
5257 (add-after 'unpack 'prepare-cargo-build-system
5258 (lambda args
5259 (for-each
5260 (lambda (phase)
5261 (format #t "Running cargo phase: ~a~%" phase)
5262 (apply (assoc-ref cargo:%standard-phases phase)
5263 #:cargo-target #$(cargo-triplet)
5264 args))
5265 '(unpack-rust-crates
5266 configure
5267 check-for-pregenerated-files
5268 patch-cargo-checksums))))
5269 (add-after 'prepare-cargo-build-system 'chdir
5270 (lambda _
5271 (chdir "python"))))))
5272 (native-inputs
5273 (append
5274 (list maturin
5275 python-pytest
5276 python-unicode-linebreak
5277 rust
5278 `(,rust "cargo"))
5279 (or (and=> (%current-target-system)
5280 (compose list make-rust-sysroot))
5281 '())))
5282 (inputs (cargo-inputs 'md_ulb_pwrap))
5283 (home-page "https://github.com/mondeja/md-ulb-pwrap")
5284 (synopsis "Markdown paragraph wrapper")
5285 (description
5286 "This package provides a Markdown paragraph wrapper using Unicode Line
5287Breaking Algorithm written in Rust with Python bindings.")
5288 (license license:expat)))
5289
5290(define-public python-mdx-gh-links
5291 (package
5292 (name "python-mdx-gh-links")
5293 (version "0.4")
5294 (source
5295 (origin
5296 (method url-fetch)
5297 (uri (pypi-uri "mdx_gh_links" version))
5298 (sha256
5299 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5300 (build-system pyproject-build-system)
5301 (arguments (list #:tests? #f)) ;tests connect github
5302 (native-inputs (list python-setuptools))
5303 (propagated-inputs (list python-markdown))
5304 (home-page "https://github.com/Python-Markdown/github-links/")
5305 (synopsis "Python-Markdown extension adding support for shorthand links")
5306 (description "This package is an extension to Python-Markdown which adds
5307support for shorthand links to GitHub users, repositories, issues and
5308commits.")
5309 (license license:bsd-3)))
5310
5311(define-public python-mkdocs-material
5312 (package
5313 (name "python-mkdocs-material")
5314 (version "7.3.6")
5315 (source
5316 (origin
5317 (method git-fetch)
5318 (uri (git-reference
5319 (url "https://github.com/squidfunk/mkdocs-material")
5320 (commit version)))
5321 (file-name (git-file-name name version))
5322 (sha256
5323 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5324 (modules '((guix build utils)))
5325 (snippet
5326 ;; TODO There are still bundled assets and minified JS.
5327 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5328 (build-system pyproject-build-system)
5329 (arguments
5330 (list
5331 #:tests? #f ; No tests.
5332 #:phases
5333 #~(let ((symlink-js
5334 (lambda (inputs)
5335 (for-each
5336 (lambda (lang)
5337 (let* ((filename (string-append "lunr." lang ".min.js"))
5338 (file (string-append "share/javascript/" filename)))
5339 (symlink (search-input-file inputs file) filename)))
5340 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5341 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5342 "vi")))))
5343 (modify-phases %standard-phases
5344 ;; Requirement mkdocs-material-extensions
5345 ;; in-turn requires mkdocs-material. This causes
5346 ;; circular dependency, so we remove this requirement.
5347 (add-after 'unpack 'patch-requirements
5348 (lambda _
5349 (substitute* "requirements.txt"
5350 (("mkdocs-material-extensions.*$")
5351 ""))))
5352 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5353 (lambda* (#:key inputs #:allow-other-keys)
5354 (mkdir-p "material/assets/javascripts/lunr/min")
5355 (with-directory-excursion "material/assets/javascripts/lunr/min"
5356 (symlink-js inputs))))
5357 (add-after 'wrap 'replace-javascript-assets
5358 (lambda* (#:key inputs outputs #:allow-other-keys)
5359 (let* ((site (site-packages inputs outputs))
5360 (js-assets (string-append site "/material/"
5361 "assets/javascripts")))
5362 (with-directory-excursion js-assets
5363 (delete-file-recursively "lunr/min")
5364 (mkdir-p "lunr/min")
5365 (with-directory-excursion "lunr/min"
5366 (symlink-js inputs))))))))))
5367 (native-inputs (list python-setuptools))
5368 (inputs (list js-lunr-ar
5369 js-lunr-da
5370 js-lunr-de
5371 js-lunr-es
5372 js-lunr-fi
5373 js-lunr-fr
5374 js-lunr-hu
5375 js-lunr-it
5376 js-lunr-ja
5377 js-lunr-nl
5378 js-lunr-no
5379 js-lunr-pt
5380 js-lunr-ro
5381 js-lunr-ru
5382 js-lunr-sv
5383 js-lunr-tr
5384 js-lunr-vi
5385 js-lunr-multi
5386 js-lunr-stemmer-support))
5387 (propagated-inputs
5388 (list python-markdown python-mkdocs python-pygments
5389 python-pymdown-extensions))
5390 (home-page "https://squidfunk.github.io/mkdocs-material/")
5391 (synopsis "Material Design theme for MkDocs")
5392 (description "This package provides a theme plugin for the static site
5393generator MkDocs.")
5394 (license license:expat)))
5395
5396(define-public python-nanobind
5397 (package
5398 (name "python-nanobind")
5399 (version "2.10.2")
5400 (source
5401 (origin
5402 (method url-fetch)
5403 (uri (pypi-uri "nanobind" version))
5404 (sha256
5405 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5406 (build-system pyproject-build-system)
5407 (arguments
5408 (list
5409 ;; tests: 466 passed, 27 skipped
5410 #:phases
5411 #~(modify-phases %standard-phases
5412 (add-before 'build 'configure-cmake
5413 (lambda _
5414 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5415 (add-after 'configure-cmake 'build-c++
5416 (lambda _
5417 (invoke "cmake" "--build" "build" "-j" "2")))
5418 (add-before 'check 'pre-check
5419 (lambda _ (chdir "build"))))))
5420 (native-inputs
5421 (list cmake-minimal
5422 python-numpy
5423 python-pathspec
5424 python-pytest
5425 python-scikit-build-core
5426 python-scipy))
5427 (inputs
5428 (list eigen))
5429 (home-page "https://github.com/wjakob/nanobind/")
5430 (synopsis "Tiny and efficient C++/Python bindings")
5431 (description "Nanobind is a small binding library that exposes C++ types
5432in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5433@code{pybind11} and uses near-identical syntax. In contrast to these existing
5434tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5435of time, produce smaller binaries, and have better runtime performance.")
5436 (license license:bsd-3)))
5437
5438(define-public python-nr-date
5439 (package
5440 (name "python-nr-date")
5441 (version "2.1.0")
5442 (source
5443 (origin
5444 (method url-fetch)
5445 (uri (pypi-uri "nr_date" version))
5446 (sha256
5447 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5448 (build-system pyproject-build-system)
5449 (arguments (list #:tests? #false)) ;there are none
5450 (native-inputs (list python-poetry-core))
5451 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5452 (synopsis "Fast, regex-based date parsing library in plain Python")
5453 (description "This package provides a fast, regex-based date parsing
5454library in pure Python.")
5455 (license license:expat)))
5456
5457(define-public python-nr-stream
5458 (package
5459 (name "python-nr-stream")
5460 (version "1.1.5")
5461 (source
5462 (origin
5463 (method url-fetch)
5464 (uri (pypi-uri "nr_stream" version))
5465 (sha256
5466 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5467 (build-system pyproject-build-system)
5468 (arguments (list #:tests? #false)) ;there are none
5469 (native-inputs (list python-poetry-core))
5470 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5471 (synopsis "Stream and Optional classes for Python")
5472 (description "This package provides a @code{Stream} and @code{Optional}
5473class.")
5474 (license license:expat)))
5475
5476(define-public python-nr-util
5477 (package
5478 (name "python-nr-util")
5479 (version "0.8.12")
5480 (source
5481 (origin
5482 (method url-fetch)
5483 (uri (pypi-uri "nr.util" version))
5484 (sha256
5485 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5486 (build-system pyproject-build-system)
5487 (arguments
5488 (list
5489 #:tests? #false ;there are none
5490 #:phases
5491 #~(modify-phases %standard-phases
5492 (add-after 'unpack 'patch-build-system
5493 (lambda _
5494 (substitute* "pyproject.toml"
5495 (("^config =.*") "config = []\n"))))
5496 (add-after 'install 'fix-name
5497 (lambda* (#:key inputs outputs #:allow-other-keys)
5498 (let* ((sitedir (site-packages inputs outputs))
5499 (dist-info
5500 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5501 (substitute* (string-append dist-info "/METADATA")
5502 (("Name: nr-util")
5503 "Name: nr.util"))
5504 (substitute* (string-append dist-info "/RECORD")
5505 (("nr_util") "nr.util"))
5506 (rename-file dist-info
5507 (string-append sitedir
5508 "/nr.util-"
5509 #$version ".dist-info"))))))))
5510 (propagated-inputs (list python-deprecated python-typing-extensions))
5511 (native-inputs (list python-poetry-core))
5512 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5513 (synopsis "General purpose Python utility library")
5514 (description "This package provides a general purpose Python utility
5515library.")
5516 (license license:expat)))
5517
5518(define-public python-slicerator
5519 (package
5520 (name "python-slicerator")
5521 (version "1.1.0")
5522 (source
5523 (origin
5524 (method url-fetch)
5525 (uri (pypi-uri "slicerator" version))
5526 (sha256
5527 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5528 (build-system pyproject-build-system)
5529 (native-inputs
5530 (list python-numpy
5531 python-pytest
5532 python-setuptools))
5533 (home-page "https://github.com/soft-matter/slicerator")
5534 (synopsis "Lazy-loading, fancy-sliceable iterable")
5535 (description
5536 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5537of it like a generator that is \"reusable\" and has a length.")
5538 (license license:bsd-3)))
5539
5540(define-public python-pytelegrambotapi
5541 (package
5542 (name "python-pytelegrambotapi")
5543 (version "4.22.0")
5544 (source
5545 (origin
5546 (method git-fetch)
5547 (uri (git-reference
5548 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5549 (commit version)))
5550 (file-name (git-file-name name version))
5551 (sha256
5552 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5553 (build-system pyproject-build-system)
5554 (arguments
5555 (list
5556 #:phases
5557 #~(modify-phases %standard-phases
5558 (replace 'check
5559 (lambda* (#:key tests? #:allow-other-keys)
5560 (when tests?
5561 (with-directory-excursion "tests"
5562 (invoke "py.test"))))))))
5563 (propagated-inputs
5564 (list python-requests))
5565 (native-inputs
5566 (list python-hatchling python-pytest))
5567 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5568 (synopsis "Python Telegram bot api")
5569 (description "This package provides a simple, but extensible Python
5570implementation for the Telegram Bot API.")
5571 (license license:gpl2)))
5572
5573(define-public python-pytoolconfig
5574 (package
5575 (name "python-pytoolconfig")
5576 (version "1.3.1")
5577 (source
5578 (origin
5579 (method url-fetch)
5580 (uri (pypi-uri "pytoolconfig" version))
5581 (sha256
5582 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5583 (build-system pyproject-build-system)
5584 (arguments
5585 (list
5586 #:test-flags
5587 ;; Requires Sphinx.
5588 #~(list "--ignore=tests/test_documentation.py")))
5589 (native-inputs
5590 (list python-pdm-backend
5591 python-pytest))
5592 (propagated-inputs
5593 (list python-tomli
5594 python-packaging
5595 python-platformdirs))
5596 (home-page "https://pypi.org/project/pytoolconfig/")
5597 (synopsis "Python tool configuration")
5598 (description "The goal of this project is to manage configuration for
5599Python tools, such as rope and add support for a @file{pyproject.toml}
5600configuration file.")
5601 (license license:lgpl3+)))
5602
5603(define-public python-pytooling
5604 (package
5605 (name "python-pytooling")
5606 (version "9.0.0")
5607 (source
5608 (origin
5609 (method git-fetch)
5610 (uri (git-reference
5611 (url "https://github.com/pyTooling/pyTooling/")
5612 (commit (string-append "v" version))))
5613 (file-name (git-file-name name version))
5614 (sha256
5615 (base32 "19zbpy35bfcq3m49xd80qsy7f4b4r98dhv4vx76199a425n61932"))))
5616 (build-system pyproject-build-system)
5617 (arguments
5618 (list
5619 ;; Tests do not support linux-i686 system: Exception: Unknown
5620 ;; architecture 'linux-i686' for a native Linux.
5621 #:tests? (not (or (%current-target-system)
5622 (target-x86-32?)))
5623 #:test-flags
5624 #~(list
5625 "tests/unit"
5626 ;; These tests try to access the network.
5627 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5628 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5629 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5630 #:phases
5631 #~(modify-phases %standard-phases
5632 (add-after 'unpack 'patch-git-bin-for-tests
5633 (lambda* (#:key inputs #:allow-other-keys)
5634 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5635 "tests/unit/CLIAbstraction/Program.py")
5636 (("/usr/bin")
5637 (dirname (search-input-file inputs "/bin/git")))))))))
5638 (native-inputs
5639 (list git-minimal/pinned
5640 python-aiohttp
5641 python-colorama
5642 python-pytest
5643 python-requests
5644 python-ruamel.yaml
5645 python-setuptools))
5646 (home-page "https://pytooling.github.io/pyTooling/")
5647 (synopsis "Miscellaneous Python tools")
5648 (description
5649 "pyTooling is a collection of (abstract) data models, lacking classes,
5650decorators, a new performance boosting meta-class, and enhanced exceptions.
5651It also provides lots of helper functions---e.g., to ease the handling of
5652package descriptions or to unify multiple existing APIs into a single API.")
5653 (license license:asl2.0)))
5654
5655(define-public python-colorlog
5656 (package
5657 (name "python-colorlog")
5658 (version "6.9.0")
5659 (source
5660 (origin
5661 (method url-fetch)
5662 (uri (pypi-uri "colorlog" version))
5663 (sha256
5664 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5665 (build-system pyproject-build-system)
5666 (native-inputs
5667 (list python-pytest
5668 python-setuptools))
5669 (home-page "https://github.com/borntyping/python-colorlog")
5670 (synopsis "Log formatting with colors for python")
5671 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5672with Python's logging module that outputs records using terminal colors.")
5673 (license license:expat)))
5674
5675(define-public python-pyprind
5676 (package
5677 (name "python-pyprind")
5678 (version "2.11.3")
5679 (source
5680 (origin
5681 (method url-fetch)
5682 (uri (pypi-uri "PyPrind" version))
5683 (sha256
5684 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5685 (build-system pyproject-build-system)
5686 (native-inputs (list python-pytest python-setuptools))
5687 (propagated-inputs (list python-psutil))
5688 (home-page "https://github.com/rasbt/pyprind")
5689 (synopsis "Python Progress Bar and Percent Indicator Utility")
5690 (description
5691 "The PyPrind (Python Progress Indicator) module provides a progress bar
5692and a percentage indicator object that let you track the progress of a loop
5693structure or other iterative computation.")
5694 (license license:bsd-3)))
5695
5696(define-public python-gh-md-to-html
5697 (package
5698 (name "python-gh-md-to-html")
5699 (version "1.21.2")
5700 (source
5701 (origin
5702 (method url-fetch)
5703 (uri (pypi-uri "gh_md_to_html" version))
5704 (sha256
5705 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5706 (build-system pyproject-build-system)
5707 (arguments
5708 (list
5709 #:tests? #false ;there are none
5710 #:phases
5711 #~(modify-phases %standard-phases
5712 (add-after 'unpack 'relax-shellescape-requirement
5713 (lambda _
5714 (substitute* "src/__init__.py"
5715 (("import shellescape")
5716 "import shlex")
5717 (("shellescape\\.quote")
5718 "shlex.quote"))
5719 (substitute* "setup.py"
5720 (("\"shellescape\",")
5721 "")))))))
5722 (propagated-inputs
5723 (list python-beautifulsoup4
5724 python-emoji-for-gh-md-to-html
5725 python-pillow
5726 python-requests
5727 python-webcolors))
5728 (native-inputs (list python-setuptools))
5729 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5730 (synopsis "Github-flavored Markdown")
5731 (description
5732 "This package provides a feature-rich Github-flavored Markdown to HTML
5733Python library and command line interface.")
5734 (license license:expat)))
5735
5736(define-public python-gfloat
5737 (package
5738 (name "python-gfloat")
5739 (version "0.5.2")
5740 (source
5741 (origin
5742 (method url-fetch)
5743 (uri (pypi-uri "gfloat" version))
5744 (sha256
5745 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5746 (build-system pyproject-build-system)
5747 (arguments
5748 (list
5749 #:test-flags
5750 #~(list
5751 "--ignore=test/test_array_api.py" ;requires array_api_strict
5752 "--ignore=test/test_jax.py" ;requires python-jax
5753 "--ignore=test/test_microxcaling.py" ;requires torchao
5754 ;; Jupyter.
5755 "--ignore-glob=docs/source/*.ipynb")))
5756 (propagated-inputs
5757 (list python-array-api-compat python-more-itertools python-numpy))
5758 (native-inputs (list python-nbval
5759 python-ml-dtypes
5760 python-pytest
5761 python-pytorch
5762 python-setuptools
5763 openssl))
5764 (home-page "https://github.com/graphcore-research/gfloat")
5765 (synopsis "Generic floating point handling in Python")
5766 (description
5767 "This package provides an implementation of generic floating point encode
5768and decode logic in Python. It handles various current and proposed floating
5769point types:
5770
5771@itemize
5772@item IEEE 754: Binary16, Binary32
5773@item OCP Float8: E5M2, E4M3
5774@item IEEE WG P3109
5775@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5776@end itemize")
5777 (license license:expat)))
5778
5779(define-public python-glymur
5780 (package
5781 (name "python-glymur")
5782 (version "0.14.8")
5783 (source
5784 (origin
5785 (method git-fetch)
5786 (uri (git-reference
5787 (url "https://github.com/quintusdias/glymur")
5788 (commit (string-append "v" version))))
5789 (file-name (git-file-name name version))
5790 (sha256
5791 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5792 (build-system pyproject-build-system)
5793 (arguments
5794 (list
5795 #:test-flags
5796 #~(list "--numprocesses" (number->string (parallel-job-count))
5797 ;; Failing test due to inability of ctypes.util.find_library()
5798 ;; to determine library path, which is patched above.
5799 "--ignore=tests/test_config.py")
5800 #:phases
5801 #~(modify-phases %standard-phases
5802 (add-after 'unpack 'patch-library-locations
5803 (lambda* (#:key inputs #:allow-other-keys)
5804 ;; XXX: It's a workaround for Python inability to find the
5805 ;; .so libraries with ctypes.util.find_library()
5806 (substitute* '("glymur/config.py")
5807 (("path = find_library\\(libname\\)")
5808 (string-append
5809 "if libname == \"openjp2\":\n"
5810 " path = \""
5811 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5812 " elif libname == \"tiff\":\n"
5813 " path = \""
5814 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5815 " elif libname == \"c\":\n"
5816 " path = \""
5817 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5818 (native-inputs
5819 (list python-pytest
5820 python-pytest-xdist
5821 python-scikit-image
5822 python-setuptools))
5823 (inputs
5824 (list openjpeg ; glymur/lib/openjp2.py
5825 libtiff)) ; glymur/lib/tiff.py
5826 (propagated-inputs
5827 (list python-lxml
5828 python-numpy
5829 python-pillow ))
5830 (home-page "https://github.com/quintusdias/glymur")
5831 (synopsis "Python interface to OpenJPEG and LibTIFF")
5832 (description
5833 "This package provides Python interface to the OpenJPEG library which
5834allows one to read and write JPEG 2000 files")
5835 (license license:expat)))
5836
5837(define-public python-gphoto2
5838 (package
5839 (name "python-gphoto2")
5840 (version "2.6.1")
5841 (source
5842 (origin
5843 (method git-fetch) ; no tests in PyPI
5844 (uri (git-reference
5845 (url "https://github.com/jim-easterbrook/python-gphoto2")
5846 (commit (string-append "v" version))))
5847 (file-name (git-file-name name version))
5848 (sha256
5849 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5850 (build-system pyproject-build-system)
5851 (native-inputs
5852 (list pkg-config python-pytest python-setuptools python-wheel))
5853 (inputs
5854 (list libgphoto2))
5855 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5856 (synopsis "Python interface to libgphoto2")
5857 (description "@code{python-gphoto2} is a comprehensive Python interface
5858(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5859automatically generate the interface code.")
5860 (license license:lgpl3+)))
5861
5862(define-public python-colour
5863 (package
5864 (name "python-colour")
5865 (version "0.1.5")
5866 (source
5867 (origin
5868 (method git-fetch)
5869 (uri (git-reference
5870 (url "https://github.com/vaab/colour")
5871 (commit version)))
5872 (file-name (git-file-name name version))
5873 (sha256
5874 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5875 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5876 (build-system pyproject-build-system)
5877 (arguments
5878 (list
5879 #:tests? #f ; No tests.
5880 #:phases
5881 #~(modify-phases %standard-phases
5882 (add-after 'unpack 'set-version
5883 (lambda _
5884 (substitute* "autogen.sh"
5885 (("if ! \"\\$git\".*")
5886 "if false ; then\n")
5887 (("depends git grep")
5888 "depends grep")
5889 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5890 (format #f "version=~s" #$version))))))))
5891 (native-inputs (list python-setuptools))
5892 (home-page "https://github.com/vaab/colour")
5893 (synopsis "Convert and manipulate various color representations")
5894 (description
5895 "This package provides a pythonic way to manipulate color representations
5896(HSL, RVB,web, X11, ...).")
5897 (license license:expat)))
5898
5899(define-public python-rapidfuzz
5900 (package
5901 (name "python-rapidfuzz")
5902 (version "3.14.5")
5903 (source
5904 (origin
5905 (method git-fetch)
5906 (uri (git-reference
5907 (url "https://github.com/rapidfuzz/RapidFuzz")
5908 (commit (string-append "v" version))))
5909 (file-name (git-file-name name version))
5910 (sha256
5911 (base32 "0ic219rfw4nlj9jp3idhxpk8vjlcw3x0xc23s36hf6gs41wxwpn0"))))
5912 (build-system pyproject-build-system)
5913 (native-inputs
5914 (list python-cython
5915 python-pandas-minimal
5916 python-pytest
5917 python-scikit-build-core
5918 rapidfuzz-cpp
5919 taskflow))
5920 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5921 (synopsis "Rapid fuzzy string matching")
5922 (description
5923 "RapidFuzz is a fast string matching library for Python and
5924C++, which is using the string similarity calculations from FuzzyWuzzy.")
5925 (license license:expat)))
5926
5927(define-public python-easygui
5928 (package
5929 (name "python-easygui")
5930 (version "0.98.1")
5931 (source
5932 (origin
5933 (method git-fetch)
5934 (uri (git-reference
5935 (url "https://github.com/robertlugg/easygui")
5936 (commit version)))
5937 (file-name (git-file-name name version))
5938 (sha256
5939 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5940 (build-system pyproject-build-system)
5941 (arguments
5942 ;; XXX: There seem to be no tests upstream, although the package itself
5943 ;; seems to provide a lot of demo elements.
5944 (list #:tests? #f))
5945 (native-inputs (list python-pytest python-setuptools))
5946 (propagated-inputs (list `(,python "tk")))
5947 (home-page "https://github.com/robertlugg/easygui")
5948 (synopsis "GUI programming module for Python")
5949 (description
5950 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5951different from other GUI generators in that EasyGUI is NOT event-driven.
5952Instead, all GUI interactions are invoked by simple function calls.")
5953 (license license:bsd-3)))
5954
5955(define-public python-echo
5956 (package
5957 (name "python-echo")
5958 (version "0.12.1")
5959 (source
5960 (origin
5961 (method url-fetch)
5962 (uri (pypi-uri "echo" version))
5963 (sha256
5964 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5965 (build-system pyproject-build-system)
5966 (arguments
5967 (list
5968 #:phases
5969 #~(modify-phases %standard-phases
5970 (add-before 'check 'start-xorg-server
5971 (lambda _
5972 ;; The test suite requires a running X server.
5973 (system "Xvfb :99 -screen 0 1024x768x24 &")
5974 (setenv "DISPLAY" ":99.0"))))))
5975 (propagated-inputs
5976 (list python-numpy
5977 python-qtpy
5978 python-pyqt-6))
5979 (native-inputs
5980 (list python-pytest
5981 python-setuptools
5982 python-setuptools-scm
5983 xorg-server-for-tests))
5984 (home-page "https://github.com/glue-viz/echo")
5985 (synopsis "Callback Properties in Python")
5986 (description
5987 "Echo is a small library for attaching callback functions to property
5988state changes.")
5989 (license license:expat)))
5990
5991(define-public python-pymd4c
5992 (package
5993 (name "python-pymd4c")
5994 (version "1.3.0")
5995 (source
5996 (origin
5997 (method git-fetch)
5998 (uri (git-reference
5999 (url "https://github.com/dominickpastore/pymd4c")
6000 (commit (string-append "v" version))))
6001 (file-name (git-file-name name version))
6002 (sha256
6003 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
6004 (build-system pyproject-build-system)
6005 (arguments (list #:test-flags #~(list "test")))
6006 (inputs (list md4c))
6007 (native-inputs
6008 (list pkg-config python-pkgconfig python-pytest python-setuptools))
6009 (home-page "https://github.com/dominickpastore/pymd4c")
6010 (synopsis "Python bindings for MD4C")
6011 (description
6012 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
6013to CommonMark.")
6014 (license license:expat)))
6015
6016(define-public python-pymediainfo
6017 (package
6018 (name "python-pymediainfo")
6019 (version "4.1")
6020 (source
6021 (origin
6022 (method url-fetch)
6023 (uri (pypi-uri "pymediainfo" version))
6024 (sha256
6025 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
6026 (build-system pyproject-build-system)
6027 (arguments
6028 (list
6029 ;; The only failing test requires internet access.
6030 #:test-flags
6031 #~(list "-k" "not test_parse_url")
6032 #:phases
6033 #~(modify-phases %standard-phases
6034 (add-after 'unpack 'patch-libmediainfo
6035 (lambda* (#:key inputs #:allow-other-keys)
6036 (substitute* "pymediainfo/__init__.py"
6037 (("libmediainfo.so.0")
6038 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
6039 (native-inputs (list python-pytest python-setuptools))
6040 (inputs (list libmediainfo))
6041 (home-page "https://github.com/sbraz/pymediainfo")
6042 (synopsis "Python wrapper for the mediainfo library")
6043 (description
6044 "This package provides a Python wrapper for the mediainfo library to
6045access the technical and tag data for video and audio files.")
6046 (license license:expat)))
6047
6048(define-public python-psutil
6049 (package
6050 (name "python-psutil")
6051 (version "7.2.2")
6052 (source
6053 (origin
6054 (method git-fetch)
6055 (uri (git-reference
6056 (url "https://github.com/giampaolo/psutil")
6057 (commit (string-append "release-" version))))
6058 (file-name (git-file-name name version))
6059 (sha256
6060 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
6061 (build-system pyproject-build-system)
6062 (arguments
6063 (list
6064 ;; tests: X86_64-linux 414 passed, 278 skipped
6065 ;; i686-linux 410 passed, 278 skipped
6066 #:test-flags
6067 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
6068 "--dist" "loadgroup"
6069 #$@(map (lambda (ls) (string-append "--deselect=tests/"
6070 (string-join ls "::")))
6071 ;; assert None is not None
6072 '(("test_linux.py" "TestRootFsDeviceFinder"
6073 "test_comparisons")
6074 ;; FileNotFoundError: [Errno 2] No such file or
6075 ;; directory: '/sys/class/net/lo/mtu'
6076 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
6077 ;; AssertionError: assert '/dev/root' != '/dev/root'
6078 ("test_linux.py" "TestRootFsDeviceFinder"
6079 "test_disk_partitions_mocked")
6080 ;; psutil.AccessDenied: (pid=426)
6081 ("test_process.py" "TestProcess" "test_weird_environ")
6082 ;; assert []
6083 ("test_system.py" "TestMiscAPIs" "test_users")
6084 ;; ModuleNotFoundError: No module named '_common'
6085 ("test_scripts.py" "TestSetupScript"
6086 "test_invocation")
6087 ;; AssertionError: assert ''
6088 ("test_scripts.py" "TestExampleScripts" "test_who")
6089 ;; AssertionError: no disks on this system? assert
6090 ;; None is not None
6091 ("test_system.py" "TestDiskAPIs"
6092 "test_disk_io_counters")
6093 ;; psutil.NoSuchProcess: process no longer exists
6094 ;; (pid=247))
6095 ("test_process_all.py" "TestFetchAllProcesses"
6096 "test_all")
6097 ;; ModuleNotFoundError: No module named 'pypinfo'
6098 ("test_scripts.py" "TestInternalScripts"
6099 "test_import_all")
6100 ;; FileNotFoundError: [Errno 2] No such file or
6101 ;; directory: '/sys/class/power_supply'
6102 ("test_misc.py" "TestMisc" "test_serialization")))
6103 #$@(if (target-32bit?)
6104 (map (lambda (ls) (string-append "--deselect=tests/"
6105 (string-join ls "::")))
6106 ;; assert 12884901915 < 500 where 12884901915 =
6107 ;; abs((2596570605 - 15481472520))
6108 '(("test_linux.py" "TestSystemCPUStats"
6109 "test_interrupts")
6110 ;; OSError: [Errno 22] Invalid argument
6111 ("test_process.py" "TestProcess"
6112 "test_zombie_process")))
6113 '()))
6114 #:phases
6115 #~(modify-phases %standard-phases
6116 (add-before 'check 'pre-check
6117 (lambda _
6118 (delete-file-recursively "psutil")
6119 (substitute* "tests/test_linux.py"
6120 (("\"(free|vmstat)\"" _ cmd)
6121 (format #f "~s" (which cmd))))
6122 (setenv "PYTHONWARNINGS" "always")
6123 (setenv "PYTHONUNBUFFERED" "1")
6124 (setenv "PSUTIL_DEBUG" "1")
6125 (setenv "PSUTIL_TESTING" "1"))))))
6126 (native-inputs
6127 (list procps
6128 python-packaging
6129 python-psleak
6130 python-pyperf
6131 python-pytest
6132 python-pytest-instafail
6133 python-pytest-xdist
6134 python-setuptools))
6135 (home-page "https://github.com/giampaolo/psutil")
6136 (synopsis "Library for retrieving information on running processes")
6137 (description
6138 "@code{psutil} (Python system and process utilities) is a library for
6139retrieving information on running processes and system utilization (CPU,
6140memory, disks, network) in Python. It is useful mainly for system monitoring,
6141profiling and limiting process resources and management of running processes.
6142It implements many functionalities offered by command line tools such as: ps,
6143top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
6144iotop, uptime, pidof, tty, taskset, pmap.")
6145 (license license:bsd-3)))
6146
6147(define-public python-psutil-bootstrap
6148 (hidden-package
6149 (package/inherit python-psutil
6150 (name "python-psutil-bootstrap")
6151 (arguments
6152 (list #:tests? #f))
6153 (propagated-inputs '())
6154 (native-inputs
6155 (list python-setuptools)))))
6156
6157(define-public python-scapy
6158 (package
6159 (name "python-scapy")
6160 (version "2.6.1")
6161 (source (origin
6162 (method url-fetch)
6163 (uri (pypi-uri "scapy" version))
6164 (sha256
6165 (base32
6166 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
6167 (arguments
6168 '(#:tests? #f)) ; There is a test directory, but apparently no
6169 ; automatic testing framework.
6170 ;; The package has more optional dependencies such as ipython and
6171 ;; matplotlib. If functionality is missing, these should be added.
6172 ;; See
6173 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
6174 (build-system pyproject-build-system)
6175 (native-inputs (list python-setuptools python-wheel))
6176 (home-page "https://scapy.net")
6177 (synopsis "Python network packet crafting library")
6178 (description
6179 "Scapy is a Python library and executable for interactively
6180manipulating network packets. It can forge or decode packets of a number
6181of protocols, send them on the wire, capture them, store or read them
6182using pcap files, match requests and replies, and so on.
6183It can handle tasks such as scanning, tracerouting, probing, unit tests,
6184attacks or network discovery.")
6185 (license license:gpl2)))
6186
6187(define-public python-icmplib
6188 (package
6189 (name "python-icmplib")
6190 (version "3.0.4")
6191 (source
6192 (origin
6193 (method git-fetch)
6194 (uri (git-reference
6195 (url "https://github.com/ValentinBELYN/icmplib")
6196 (commit (string-append "v" version))))
6197 (file-name (git-file-name name version))
6198 (sha256
6199 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
6200 (build-system pyproject-build-system)
6201 (arguments (list #:tests? #f)) ; No tests.
6202 (native-inputs (list python-setuptools))
6203 (home-page "https://github.com/ValentinBELYN/icmplib")
6204 (synopsis
6205 "Python implementation of the Internet Control Message Protocol (ICMP)")
6206 (description
6207 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
6208ICMP is typically used for diagnostic or control purposes - well known from
6209utilities such as ping(1).")
6210 (license license:lgpl3)))
6211
6212(define-public python-iron-core
6213 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
6214 (revision "0"))
6215 (package
6216 (name "python-iron-core")
6217 (version (git-version "1.2.1" revision commit))
6218 (source
6219 (origin
6220 (method git-fetch)
6221 (uri (git-reference
6222 (url "https://www.github.com/iron-io/iron_core_python")
6223 (commit commit)))
6224 (file-name (git-file-name name version))
6225 (sha256
6226 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
6227 (build-system pyproject-build-system)
6228 (arguments
6229 (list
6230 ;; XXX: Tests are run, but they seem too old/not updated.
6231 #:tests? #f
6232 #:test-backend #~'unittest))
6233 (propagated-inputs (list python-dateutil python-requests))
6234 (native-inputs (list python-setuptools))
6235 (home-page "https://www.github.com/iron-io/iron_core_python")
6236 (synopsis "Universal classes and methods for Iron.io API wrappers")
6237 (description
6238 "This package provides universal classes and methods for the Iron.io
6239API wrappers to build on.")
6240 (license license:bsd-2))))
6241
6242(define-public python-iron-mq
6243 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
6244 (revision "0"))
6245 (package
6246 (name "python-iron-mq")
6247 (version (git-version "0.9" revision commit))
6248 (source
6249 (origin
6250 (method git-fetch)
6251 (uri (git-reference
6252 (url "https://github.com/iron-io/iron_mq_python")
6253 (commit commit)))
6254 (file-name (git-file-name name version))
6255 (sha256
6256 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
6257 (build-system pyproject-build-system)
6258 (arguments
6259 (list
6260 ;; XXX: Tests are broken and require network access.
6261 #:tests? #f
6262 #:test-backend #~'unittest))
6263 (propagated-inputs (list python-iron-core))
6264 (native-inputs (list python-setuptools))
6265 (home-page "https://github.com/iron-io/iron_mq_python")
6266 (synopsis "Client library for IronMQ, a message queue in the cloud")
6267 (description
6268 "This package provides Python language bindings for IronMQ. IronMQ is an
6269elastic message queue for managing data and event flow within cloud
6270applications and between systems.")
6271 (license license:bsd-2))))
6272
6273(define-public python-rasterio
6274 (package
6275 (name "python-rasterio")
6276 (version "1.3.7")
6277 (source (origin
6278 (method url-fetch)
6279 (uri (pypi-uri "rasterio" version))
6280 (sha256
6281 (base32
6282 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
6283 (properties
6284 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
6285 (build-system pyproject-build-system)
6286 (arguments
6287 (list
6288 #:tests? #false ;test data not present
6289 #:phases
6290 '(modify-phases %standard-phases
6291 (add-before 'check 'build-extensions
6292 (lambda _
6293 ;; Cython extensions have to be built before running the tests.
6294 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6295 (propagated-inputs (list python-affine
6296 python-attrs
6297 python-certifi
6298 python-click
6299 python-click-plugins
6300 python-cligj
6301 python-numpy
6302 python-setuptools ; For pkg_resources.
6303 python-snuggs))
6304 (native-inputs (list gdal
6305 python-boto3
6306 python-cython
6307 python-hypothesis
6308 python-packaging
6309 python-pytest
6310 python-shapely
6311 python-wheel))
6312 (home-page "https://github.com/rasterio/rasterio")
6313 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6314 (description "This package implements fast and direct raster I/O for use
6315with Numpy and SciPy.")
6316 (license license:bsd-3)))
6317
6318(define-public python-rich-tables
6319 (package
6320 (name "python-rich-tables")
6321 (version "0.8.0")
6322 (source
6323 (origin
6324 (method git-fetch) ; no tests data in PyPi package
6325 (uri (git-reference
6326 (url "https://github.com/snejus/rich-tables")
6327 (commit version)))
6328 (file-name (git-file-name name version))
6329 (sha256
6330 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6331 (build-system pyproject-build-system)
6332 (arguments
6333 (list
6334 #:test-flags
6335 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6336 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6337 (native-inputs
6338 (list python-freezegun
6339 python-poetry-core
6340 python-pytest))
6341 (propagated-inputs
6342 (list python-funcy
6343 python-humanize
6344 python-multimethod
6345 python-platformdirs
6346 python-rgbxy
6347 python-rich
6348 python-sqlparse))
6349 (home-page "https://github.com/snejus/rich-tables")
6350 (synopsis "Ready-made rich tables for various purposes")
6351 (description
6352 "This package implements rich tables for various purposes, it's JSON
6353human-prettifier based on the @code{rich} Python library.")
6354 (license license:expat)))
6355
6356(define-public python-rich-toolkit
6357 (package
6358 (name "python-rich-toolkit")
6359 (version "0.12.0")
6360 (source
6361 (origin
6362 (method url-fetch)
6363 (uri (pypi-uri "rich_toolkit" version))
6364 (sha256
6365 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6366 (build-system pyproject-build-system)
6367 (propagated-inputs (list python-click python-rich python-typing-extensions))
6368 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6369 (home-page "https://pypi.org/project/rich-toolkit/")
6370 (synopsis "Rich toolkit for building command-line applications")
6371 (description "This package provides the Rich toolkit for building
6372command-line applications.")
6373 (license license:expat)))
6374
6375(define-public python-shapely
6376 (package
6377 (name "python-shapely")
6378 (version "2.1.1")
6379 (source
6380 (origin
6381 (method url-fetch)
6382 (uri (pypi-uri "shapely" version))
6383 (sha256
6384 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6385 (build-system pyproject-build-system)
6386 (arguments
6387 (list
6388 #:phases
6389 '(modify-phases %standard-phases
6390 (add-before 'check 'build-extensions
6391 (lambda _
6392 ;; Cython extensions have to be built before running the tests.
6393 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6394 (native-inputs
6395 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6396 (inputs
6397 (list geos))
6398 (propagated-inputs
6399 (list python-numpy))
6400 (home-page "https://github.com/shapely/shapely")
6401 (synopsis "Library for the manipulation and analysis of geometric objects")
6402 (description "Shapely is a Python package for manipulation and analysis of
6403planar geometric objects. It is based on the @code{GEOS} library.")
6404 (license license:bsd-3)))
6405
6406(define-public python-shortuuid
6407 (package
6408 (name "python-shortuuid")
6409 (version "1.0.13")
6410 (source
6411 (origin
6412 (method url-fetch)
6413 (uri (pypi-uri "shortuuid" version))
6414 (sha256
6415 (base32
6416 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6417 (build-system pyproject-build-system)
6418 (native-inputs
6419 (list python-poetry-core python-pytest))
6420 (home-page "https://github.com/skorokithakis/shortuuid")
6421 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6422 (description
6423 "@code{shortuuid} is a Python library for generating concise, unambiguous
6424and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6425module and then similar looking characters are removed.")
6426 (license license:bsd-3)))
6427
6428(define-public python-logwrap
6429 (package
6430 (name "python-logwrap")
6431 (version "11.1.1")
6432 (source
6433 (origin
6434 (method git-fetch) ; no tests in PyPI release
6435 (uri (git-reference
6436 (url "https://github.com/python-useful-helpers/logwrap")
6437 (commit version)))
6438 (file-name (git-file-name name version))
6439 (sha256
6440 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6441 (build-system pyproject-build-system)
6442 (native-inputs (list python-pytest
6443 python-setuptools
6444 python-setuptools-scm
6445 python-wheel))
6446 (home-page "https://github.com/python-useful-helpers/logwrap")
6447 (synopsis "Decorator for logging function arguments")
6448 (description "This package provides a decorator to log function arguments
6449and function call return values in a human-readable way.")
6450 (license license:asl2.0)))
6451
6452(define-public python-babel
6453 (package
6454 (name "python-babel")
6455 (version "2.16.0")
6456 (source
6457 (origin
6458 (method url-fetch)
6459 (uri (pypi-uri "babel" version))
6460 (sha256
6461 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6462 (build-system pyproject-build-system)
6463 (native-inputs
6464 (list python-freezegun
6465 python-pytest
6466 python-setuptools
6467 tzdata-for-tests))
6468 (propagated-inputs
6469 (list python-pytz))
6470 (home-page "https://babel.pocoo.org/")
6471 (synopsis
6472 "Tools for internationalizing Python applications")
6473 (description
6474 "Babel is composed of two major parts:
6475- tools to build and work with gettext message catalogs
6476- a Python interface to the CLDR (Common Locale Data Repository), providing
6477access to various locale display names, localized number and date formatting,
6478etc.")
6479 (license license:bsd-3)))
6480
6481(define-public python-bidict
6482 (package
6483 (name "python-bidict")
6484 (version "0.23.1")
6485 (source
6486 (origin
6487 (method git-fetch) ; no tests in PyPI.
6488 (uri (git-reference
6489 (url "https://github.com/jab/bidict")
6490 (commit (string-append "v" version))))
6491 (file-name (git-file-name name version))
6492 (sha256
6493 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6494 (build-system pyproject-build-system)
6495 (native-inputs
6496 (list python-pytest
6497 python-pytest-benchmark
6498 python-pytest-xdist
6499 python-setuptools
6500 python-sortedcollections
6501 python-wheel))
6502 (home-page "https://bidict.readthedocs.io")
6503 (synopsis "Bidirectional mapping library")
6504 (description "The @code{bidict} library provides several data structures
6505for working with bidirectional mappings in Python.")
6506 (license license:mpl2.0)))
6507
6508(define-public python-bip39
6509 (package
6510 (name "python-bip39")
6511 (version "0.0.2")
6512 (source
6513 (origin
6514 (method url-fetch)
6515 (uri (pypi-uri "bip39" version))
6516 (sha256
6517 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6518 (build-system pyproject-build-system)
6519 (native-inputs (list python-pytest python-setuptools))
6520 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6521 (synopsis "Self-contained and simple BIP39 implementation in Python")
6522 (description
6523 "This package provides a self-contained and simple BIP39
6524implementation written in Python. It includes a @code{bip39.py} executable.
6525
6526BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6527and a list of words that are easier to remember for humans (the
6528@emph{mnemonic}).")
6529 (license license:expat)))
6530
6531(define-public python-bitarray
6532 (package
6533 (name "python-bitarray")
6534 (version "3.4.3")
6535 (source (origin
6536 (method url-fetch)
6537 (uri (pypi-uri "bitarray" version))
6538 (sha256
6539 (base32
6540 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6541 (build-system pyproject-build-system)
6542 (arguments
6543 (list #:phases
6544 #~(modify-phases %standard-phases
6545 (replace 'check
6546 (lambda* (#:key tests? #:allow-other-keys)
6547 (when tests?
6548 ;; Step out of the source directory to avoid interference.
6549 (with-directory-excursion "/tmp"
6550 (invoke "python" "-c"
6551 "import bitarray; bitarray.test()"))))))))
6552 (native-inputs (list python-setuptools python-wheel))
6553 (home-page "https://github.com/ilanschnell/bitarray")
6554 (synopsis "Efficient arrays of booleans")
6555 (description "This package provides an object type which efficiently
6556represents an array of booleans. Bitarrays are sequence types and behave very
6557much like usual lists. Eight bits are represented by one byte in a contiguous
6558block of memory. The user can select between two representations:
6559little-endian and big-endian. All of the functionality is implemented in C.
6560Methods for accessing the machine representation are provided. This can be
6561useful when bit level access to binary files is required, such as portable
6562bitmap image files. Also, when dealing with compressed data which uses
6563variable bit length encoding, you may find this module useful.")
6564 (license license:psfl)))
6565
6566(define-public python-bitarray-2
6567 (package
6568 (inherit python-bitarray)
6569 (version "2.8.1")
6570 (source (origin
6571 (method url-fetch)
6572 (uri (pypi-uri "bitarray" version))
6573 (sha256
6574 (base32
6575 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6576
6577(define-public python-boolean.py
6578 (package
6579 (name "python-boolean.py")
6580 (version "5.0")
6581 (source
6582 (origin
6583 (method url-fetch)
6584 (uri (pypi-uri "boolean_py" version))
6585 (sha256
6586 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6587 (build-system pyproject-build-system)
6588 (native-inputs (list python-pytest python-setuptools python-wheel))
6589 (home-page "https://github.com/bastikr/boolean.py")
6590 (synopsis "Boolean algebra in one Python module")
6591 (description
6592 "This is a small Python library that implements boolean algebra.
6593It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6594@code{Symbol} class that can take on one of these two values. Calculations
6595are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6596compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6597Expressions are constructed from parsed strings or directly in Python.")
6598 (license license:bsd-2)))
6599
6600(define-public python-h5netcdf
6601 (package
6602 (name "python-h5netcdf")
6603 (version "1.3.0")
6604 (source
6605 (origin
6606 (method url-fetch)
6607 (uri (pypi-uri "h5netcdf" version))
6608 (sha256
6609 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6610 (build-system pyproject-build-system)
6611 (native-inputs
6612 (list python-netcdf4
6613 python-pytest
6614 python-setuptools
6615 python-setuptools-scm
6616 python-wheel))
6617 (propagated-inputs
6618 (list python-h5py python-packaging))
6619 (home-page "https://h5netcdf.org")
6620 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6621 (description "This package provides a Python interface for the netCDF4
6622file-format that reads and writes local or remote HDF5 files directly via
6623@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6624https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6625library.")
6626 (license license:bsd-3)))
6627
6628(define-public python-h5py
6629 ;; TODO: Move to (gnu packages python-science) or maths, prevent import mpi
6630 ;; module here.
6631 (package
6632 (name "python-h5py")
6633 (version "3.16.0")
6634 (source
6635 (origin
6636 (method git-fetch)
6637 (uri (git-reference
6638 (url "https://github.com/h5py/h5py")
6639 (commit version)))
6640 (file-name (git-file-name name version))
6641 (sha256
6642 (base32 "1s5nqhylp7daizljnwr8bwwsxd92kqgz2106vi9q1c1q920ihsyy"))))
6643 (build-system pyproject-build-system)
6644 (arguments
6645 (list
6646 ;; tests: 849 passed, 50 skipped
6647 #:test-flags
6648 #~(list "--pyargs" "h5py")
6649 #:phases
6650 #~(modify-phases %standard-phases
6651 (add-after 'unpack 'set-hdf5-options
6652 ;; For custom installation with Parallel HDF5 see:
6653 ;; <https://docs.h5py.org/en/latest/build.html#custom-installation>.
6654 (lambda _
6655 ;; XXX: Check if we need this:
6656 ;; <https://github.com/h5py/h5py/issues/2560>.
6657 ;; (setenv "H5PY_SETUP_REQUIRES" "0")
6658 ;;
6659 ;; Project is part of h5py, but availalbe at
6660 ;; <https://oldhome.schmorp.de/marc/liblzf.html>, version 3.6
6661 ;; was released on 2019.
6662 ;; (setenv "H5PY_SYSTEM_LZF" "1")
6663 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
6664 (setenv "HDF5_MPI" "ON")))
6665 (add-before 'check 'pre-check
6666 (lambda _
6667 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6668 (delete-file-recursively "h5py"))))))
6669 (native-inputs
6670 (list pkg-config
6671 python-cython
6672 python-pkgconfig
6673 python-pytest
6674 python-pytest-mpi
6675 python-setuptools))
6676 (inputs
6677 (list hdf5-parallel-openmpi))
6678 (propagated-inputs
6679 (list python-mpi4py
6680 python-numpy))
6681 (home-page "https://www.h5py.org/")
6682 (synopsis "Read and write HDF5 files from Python")
6683 (description
6684 "The h5py package provides both a high- and low-level interface to the
6685HDF5 library from Python. The low-level interface is intended to be a
6686complete wrapping of the HDF5 API, while the high-level component supports
6687access to HDF5 files, datasets and groups using established Python and NumPy
6688concepts.")
6689 (license license:bsd-3)))
6690
6691(define-public python-hdf5storage
6692 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6693 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6694 ;;
6695 ;; This package probably is sun setting, consider to remove when stops
6696 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6697 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6698 (revision "0"))
6699 (package
6700 (name "python-hdf5storage")
6701 (version (git-version "0.1.19" revision commit))
6702 (source
6703 (origin
6704 (method git-fetch)
6705 (uri (git-reference
6706 (url "https://github.com/frejanordsiek/hdf5storage")
6707 (commit commit)))
6708 (file-name (git-file-name name version))
6709 (sha256
6710 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6711 (build-system pyproject-build-system)
6712 (arguments
6713 ;; Started failing with the move to [email protected], due to modules changes.
6714 (list
6715 #:test-flags
6716 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6717 (native-inputs
6718 (list python-pytest
6719 python-setuptools))
6720 (propagated-inputs
6721 (list python-h5py
6722 python-numpy-1))
6723 (home-page "https://github.com/frejanordsiek/hdf5storage")
6724 (synopsis "Read and write Python data types from and to HDF5 files")
6725 (description
6726 "This Python package provides high-level utilities to read and write a
6727variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6728formatted files. This package also provides support for MATLAB MAT v7.3
6729formatted files, which are HDF5 files with a different extension and some
6730extra metadata. Because HDF5 and MAT files might need to be read from
6731untrusted sources, pickling is avoided in this package.")
6732 (license license:bsd-2))))
6733
6734(define-public python-prctl
6735 (package
6736 (name "python-prctl")
6737 (version "1.8.1")
6738 (source (origin
6739 (method url-fetch)
6740 (uri (pypi-uri "python-prctl" version))
6741 (sha256
6742 (base32
6743 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6744 (build-system pyproject-build-system)
6745 (arguments
6746 (list #:test-backend ''custom
6747 #:test-flags ''("test_prctl.py")
6748 #:phases
6749 #~(modify-phases %standard-phases
6750 (add-after 'unpack 'patch-tests
6751 (lambda _
6752 (substitute* "test_prctl.py"
6753 ;; actual suffix used in cpython build output dir name
6754 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6755 ;; test_no_new_privs assumes existence of /bin/ping, but
6756 ;; can never run anyway due to it requiring setuid ping.
6757 ;; just short circuit it instead.
6758 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6759 (inputs (list libcap))
6760 (native-inputs (list python-setuptools))
6761 (supported-systems (filter target-linux? %supported-systems))
6762 (home-page "https://pythonhosted.org/python-prctl")
6763 (synopsis "Linux capabilities library")
6764 (description "This package provides a Python library for controlling Linux
6765capabilities and attributes, similar to the prctl syscall.")
6766 (license license:gpl3+)))
6767
6768(define-public python-pyhimitsu
6769 (package
6770 (name "python-pyhimitsu")
6771 (version "0.0.9")
6772 (source (origin
6773 (method url-fetch)
6774 (uri (pypi-uri "py_himitsu" version))
6775 (sha256
6776 (base32
6777 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6778 (build-system pyproject-build-system)
6779 (arguments
6780 (list
6781 #:phases
6782 #~(modify-phases %standard-phases
6783 (replace 'check
6784 (lambda _
6785 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6786 (invoke "make" "check"))))))
6787 (native-inputs (list python-hatchling))
6788 (propagated-inputs (list python-pyxdg))
6789 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6790 (synopsis "Himitsu client protocol implementation in Python")
6791 (description "This package provides a library for writing Himitsu client
6792programs in Python.")
6793 (license license:expat)))
6794
6795(define-public python-hjson
6796 ;; Using commit from master branch as the PyPI version does not contain
6797 ;; the hjson/tests/ directory.
6798 (let ((revision "0")
6799 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6800 (package
6801 (name "python-hjson")
6802 (version (git-version "3.1.0" revision commit))
6803 (source (origin
6804 (method git-fetch)
6805 (uri (git-reference
6806 (url "https://github.com/hjson/hjson-py")
6807 (commit commit)))
6808 (file-name (git-file-name name version))
6809 (sha256
6810 (base32
6811 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6812 (modules '((guix build utils)))
6813 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6814 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6815 (snippet #~(substitute* "hjson/__init__.py"
6816 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6817 "{'foo': 'a', 'bar': 1}")))))
6818 (build-system pyproject-build-system)
6819 (native-inputs (list python-setuptools python-wheel))
6820 (home-page "https://github.com/hjson/hjson-py")
6821 (synopsis "Python package to parse HJSON documents")
6822 (description "This package provides a Python library and a command-line
6823interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6824 (license license:expat))))
6825
6826(define-public python-hnswlib
6827 (package
6828 (name "python-hnswlib")
6829 (version "0.8.0")
6830 (source
6831 (origin
6832 (method git-fetch)
6833 (uri (git-reference
6834 (url "https://github.com/nmslib/hnswlib")
6835 (commit (string-append "v" version))))
6836 (file-name (git-file-name name version))
6837 (sha256
6838 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6839 (build-system pyproject-build-system)
6840 (arguments
6841 (list
6842 #:phases
6843 #~(modify-phases %standard-phases
6844 (add-after 'unpack 'disable-native-optimization
6845 (lambda _
6846 (substitute* "setup.py"
6847 ((", '-march=native'")
6848 "")))))))
6849 (native-inputs
6850 (list pybind11-2
6851 python-pytest
6852 python-setuptools))
6853 (propagated-inputs
6854 (list python-numpy))
6855 (home-page "https://github.com/nmslib/hnswlib")
6856 (synopsis "Fast approximate nearest neighbor search")
6857 (description "Hnswlib is a header-only C++ implementation of fast
6858approximate nearest neighbor search with Python bindings.")
6859 (license license:asl2.0)))
6860
6861(define-public python-pylatex
6862 (package
6863 (name "python-pylatex")
6864 (version "1.4.2")
6865 (source
6866 (origin
6867 (method git-fetch)
6868 (uri (git-reference
6869 (url "https://github.com/JelteF/PyLaTeX")
6870 (commit (string-append "v" version))))
6871 (file-name (git-file-name name version))
6872 (sha256
6873 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6874 (build-system pyproject-build-system)
6875 (arguments
6876 (list #:phases
6877 #~(modify-phases %standard-phases
6878 ;; some tests attempt to create directories
6879 (add-before 'check 'set-home-directory
6880 (lambda _
6881 (setenv "HOME" "/tmp"))))))
6882 (propagated-inputs (list python-ordered-set))
6883 (native-inputs (list python-matplotlib
6884 python-pytest
6885 python-quantities
6886 python-setuptools
6887 (texlive-local-tree
6888 (list texlive-lastpage
6889 texlive-latexmk
6890 texlive-parskip))))
6891 (home-page "https://github.com/JelteF/PyLaTeX")
6892 (synopsis "Library for creating LaTeX files and snippets")
6893 (description
6894 "This package provides a Python library for creating LaTeX files and
6895snippets.")
6896 (license license:expat)))
6897
6898(define-public python-pylatexenc
6899 (package
6900 (name "python-pylatexenc")
6901 (version "2.10")
6902 (source
6903 (origin
6904 (method url-fetch)
6905 (uri (pypi-uri "pylatexenc" version))
6906 (sha256
6907 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6908 (build-system pyproject-build-system)
6909 (native-inputs (list python-pytest python-setuptools python-wheel))
6910 (home-page "https://github.com/phfaist/pylatexenc")
6911 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6912 (description
6913 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6914Unicode-to-LaTeX conversion.")
6915 (license license:expat)))
6916
6917(define-public python-lsp-black
6918 (package
6919 (name "python-lsp-black")
6920 (version "2.0.0")
6921 (source
6922 (origin
6923 (method git-fetch)
6924 (uri (git-reference
6925 (url "https://github.com/python-lsp/python-lsp-black")
6926 (commit (string-append "v" version))))
6927 (file-name (git-file-name name version))
6928 (sha256
6929 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6930 (build-system pyproject-build-system)
6931 (arguments
6932 ;; The python version is too old for these tests to pass properly.
6933 (list #:test-flags
6934 `'("-k" ,(string-append
6935 "not test_pylsp_format_document_syntax_error"
6936 " and not test_pylsp_format_range_syntax_error"
6937 " and not test_load_config_defaults"
6938 " and not test_load_config_with_skip_options"))))
6939 (propagated-inputs
6940 (list python-black python-lsp-server python-tomli))
6941 (native-inputs
6942 (list python-pytest python-setuptools python-wheel))
6943 (home-page "https://github.com/python-lsp/python-lsp-black")
6944 (synopsis "Black plugin for the Python LSP Server")
6945 (description "This package provides a plugin with support for the
6946@code{python-black} formatter for the Python LSP Server.")
6947 (license license:expat)))
6948
6949(define-public python-pylsp-mypy
6950 (package
6951 (name "python-pylsp-mypy")
6952 (version "0.7.1")
6953 (source
6954 (origin
6955 ;; "The newest version on PyPI is indeed not published on GitHub."
6956 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6957 (method url-fetch)
6958 (uri (pypi-uri "pylsp_mypy" version))
6959 (sha256
6960 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6961 (build-system pyproject-build-system)
6962 (native-inputs (list python-pytest python-setuptools))
6963 (propagated-inputs (list python-mypy python-lsp-server))
6964 (home-page "https://github.com/python-lsp/pylsp-mypy")
6965 (synopsis "Mypy linter for the Python LSP Server")
6966 (description
6967 "Mypy linter integration for use with @code{python-lsp-server}.")
6968 (license license:expat)))
6969
6970(define-public python-sh
6971 (package
6972 (name "python-sh")
6973 (version "2.2.2")
6974 (source
6975 (origin
6976 (method url-fetch)
6977 (uri (pypi-uri "sh" version))
6978 (sha256
6979 (base32
6980 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6981 (build-system pyproject-build-system)
6982 (arguments
6983 (list
6984 #:test-flags
6985 #~(list "-k" (string-join
6986 ;; These tests are shaky.
6987 (list "not test_bad_sig_raise_exception"
6988 "test_doesnt_execute_directories"
6989 "test_environment"
6990 "test_ok_code_ignores_bad_sig_exception"
6991 "test_unicode_path")
6992 " and not ")
6993 "tests")
6994 #:phases
6995 #~(modify-phases %standard-phases
6996 (add-before 'check 'pre-check
6997 (lambda _
6998 (setenv "HOME" "/tmp"))))))
6999 (native-inputs
7000 (list python-poetry-core python-pytest))
7001 (home-page "https://github.com/amoffat/sh")
7002 (synopsis "Python subprocess replacement")
7003 (description "This package provides a replacement for Python's
7004@code{subprocess} feature.")
7005 (license license:expat)))
7006
7007;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
7008;; that is updated.
7009(define-public python-sh-1
7010 (package
7011 (inherit python-sh)
7012 (version "1.14.2")
7013 (source
7014 (origin
7015 (method url-fetch)
7016 (uri (pypi-uri "sh" version))
7017 (sha256
7018 (base32
7019 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
7020 (arguments
7021 '(#:phases
7022 (modify-phases %standard-phases
7023 (replace 'check
7024 (lambda _
7025 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
7026 (setenv "HOME" "/tmp")
7027 (invoke "python" "sh.py" "test"))))))
7028 (native-inputs
7029 (list python-setuptools))))
7030
7031(define-public python-cftime
7032 (package
7033 (name "python-cftime")
7034 (version "1.6.5")
7035 (source
7036 (origin
7037 (method url-fetch)
7038 (uri (pypi-uri "cftime" version))
7039 (sha256
7040 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
7041 (build-system pyproject-build-system)
7042 (propagated-inputs
7043 (list python-numpy))
7044 (native-inputs
7045 (list python-cython
7046 python-pytest
7047 python-setuptools
7048 python-wheel))
7049 (home-page "https://unidata.github.io/cftime/")
7050 (synopsis "Library for time handling")
7051 (description
7052 "This package provides time-handling functionality that used to be part
7053of the netcdf4 package before.")
7054 (license license:expat)))
7055
7056(define-public python-netcdf4
7057 ;; TODO: Move to (gnu packages python-science).
7058 (package
7059 (name "python-netcdf4")
7060 (version "1.7.4")
7061 (source
7062 (origin
7063 (method git-fetch)
7064 (uri (git-reference
7065 (url "https://github.com/Unidata/netcdf4-python")
7066 (commit (string-append "v" version "rel"))))
7067 (file-name (git-file-name name version))
7068 (sha256
7069 (base32 "0lmapnqc4rivv0nggm8865xpni1gbcg6dc7khf5r0p16jk8gv41c"))))
7070 (build-system pyproject-build-system)
7071 (arguments
7072 (list
7073 ;; tests: Ran 115 tests
7074 #:phases
7075 #~(modify-phases %standard-phases
7076 (add-before 'build 'set-configure-flags
7077 (lambda _
7078 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
7079 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
7080 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
7081 (setenv "USE_NCCONFIG" "0")))
7082 (replace 'check
7083 (lambda* (#:key tests? #:allow-other-keys)
7084 (when tests?
7085 (with-directory-excursion "test"
7086 (setenv "NO_NET" "1")
7087 (setenv "NO_CDL" "1")
7088 (invoke "python" "run_all.py"))))))))
7089 (native-inputs
7090 (list python-cython
7091 python-packaging
7092 python-pytest
7093 python-setuptools
7094 python-setuptools-scm
7095 python-typing-extensions))
7096 (inputs
7097 ;; After python-h5py was built with MPI support it can't be used together
7098 ;; with hdf5 and netcdf built without MPI support tests and load may
7099 ;; brake when python-netcdf4 and python-h5py are used together.
7100 (list netcdf-parallel-openmpi
7101 hdf5-parallel-openmpi
7102 zlib))
7103 (propagated-inputs
7104 (list python-certifi
7105 python-cftime
7106 python-mpi4py
7107 python-numpy))
7108 (home-page "https://github.com/Unidata/netcdf4-python")
7109 (synopsis "Python/numpy interface to the netCDF library")
7110 (description "Netcdf4-python is a Python interface to the netCDF C
7111library. netCDF version 4 has many features not found in earlier
7112versions of the library and is implemented on top of HDF5. This module
7113can read and write files in both the new netCDF 4 and the old netCDF 3
7114format, and can create files that are readable by HDF5 clients. The
7115API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
7116to users of that module.")
7117 ;; The software is mainly ISC, but includes some files covered
7118 ;; by the Expat license.
7119 (license (list license:isc license:expat))))
7120
7121(define-public python-ncclient
7122 (package
7123 (name "python-ncclient")
7124 (version "0.6.19")
7125 (source
7126 (origin
7127 (method git-fetch) ;no tests in PyPI release
7128 (uri (git-reference
7129 (url "https://github.com/ncclient/ncclient")
7130 (commit (string-append "v" version))))
7131 (file-name (git-file-name name version))
7132 (sha256
7133 (base32
7134 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
7135 (build-system pyproject-build-system)
7136 (native-inputs
7137 (list python-pytest
7138 python-setuptools
7139 python-wheel))
7140 (propagated-inputs
7141 (list python-lxml
7142 python-paramiko))
7143 (home-page "https://github.com/ncclient/ncclient")
7144 (synopsis "Python library for NETCONF clients")
7145 (description "@code{ncclient} is a Python library that facilitates
7146client-side scripting and application development around the NETCONF
7147protocol.")
7148 (license license:asl2.0)))
7149
7150(define-public python-ncls
7151 (package
7152 (name "python-ncls")
7153 (version "0.0.68")
7154 (source (origin
7155 (method url-fetch)
7156 (uri (pypi-uri "ncls" version))
7157 (sha256
7158 (base32
7159 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
7160 (build-system pyproject-build-system)
7161 (arguments
7162 ;; Those tests fail with warnings (not errors) for the Numpy update.
7163 ;; Remove it at next python-team iteration.
7164 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
7165 "--ignore=examples/test_find_overlap_list.py")))
7166 (native-inputs (list python-cython
7167 python-pandas
7168 python-pytest
7169 python-setuptools
7170 python-wheel))
7171 (propagated-inputs (list python-numpy))
7172 (home-page "https://github.com/endrebak/ncls")
7173 (synopsis "Nested containment list data structure")
7174 (description
7175 "This package provides a wrapper for the nested containment list data
7176structure. It is a static interval-tree that is fast for both construction
7177and lookups.")
7178 (license license:bsd-3)))
7179
7180(define-public python-license-expression
7181 (package
7182 (name "python-license-expression")
7183 (version "30.1.0")
7184 (source
7185 (origin
7186 (method url-fetch)
7187 (uri (pypi-uri "license-expression" version))
7188 (sha256
7189 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
7190 (build-system pyproject-build-system)
7191 (native-inputs
7192 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
7193 (propagated-inputs
7194 (list python-boolean.py))
7195 (home-page "https://github.com/nexB/license-expression")
7196 (synopsis "Apply boolean logic to license expressions")
7197 (description
7198 "This Python module defines a tiny language to evaluate and compare
7199license expressions using boolean logic. Logical combinations of licenses can
7200be tested for equality, containment, and equivalence. They can be normalised
7201and simplified. It supports SPDX license expressions as well as other naming
7202conventions and aliases in the same expression.")
7203 (license license:gpl2+)))
7204
7205(define-public python-limits
7206 (package
7207 (name "python-limits")
7208 (version "5.8.0")
7209 (source
7210 (origin
7211 (method git-fetch)
7212 (uri (git-reference
7213 (url "https://github.com/alisaifee/limits")
7214 (commit version)))
7215 (file-name (git-file-name name version))
7216 (sha256
7217 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
7218 (build-system pyproject-build-system)
7219 (arguments
7220 (list
7221 ;; tests: 155 passed, 620 deselected
7222 #:test-flags
7223 #~(list
7224 ;; The test suite spawns storages in Docker.
7225 "-k" (simple-format #f "not (~a)"
7226 (string-join
7227 '("lazy_dependency" ;importing redis
7228 "memcache"
7229 "mongo"
7230 "redis"
7231 "valkey")
7232 " or "))
7233 "--ignore=tests/benchmarks")
7234 #:phases
7235 #~(modify-phases %standard-phases
7236 (add-before 'check 'adjust-tests
7237 (lambda _
7238 (substitute* "pytest.ini"
7239 ((".*--cov=.*") "")
7240 ((".*-K.*") ""))
7241 (substitute* (find-files "tests" "\\.py$")
7242 (("import pymemcache.*") "")
7243 (("import pymongo.*") "")
7244 (("import redis.*") "")
7245 (("import valkey.*") "")
7246 ;; Lazy fixtures are only used for storages.
7247 (("from pytest_lazy_fixtures import lf.*") "")
7248 (("lf\\((.+)\\)" all fixture) fixture))
7249 (substitute* "tests/test_storage.py"
7250 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
7251 (propagated-inputs (list python-deprecated python-packaging))
7252 (native-inputs
7253 (list python-flaky
7254 python-hatch-vcs
7255 python-hatchling
7256 python-pytest
7257 python-pytest-asyncio))
7258 (home-page "https://limits.readthedocs.io/")
7259 (synopsis "Rate limiting utilities")
7260 (description
7261 "This package provides a Python library to perform rate limiting with
7262commonly used storage backends.")
7263 (license license:expat)))
7264
7265(define-public python-fb-re2
7266 (package
7267 (name "python-fb-re2")
7268 (version "1.0.7")
7269 (source
7270 (origin
7271 (method git-fetch)
7272 (uri (git-reference
7273 (url "https://github.com/facebook/pyre2")
7274 (commit (string-append "v" version))))
7275 (file-name (git-file-name name version))
7276 (sha256
7277 (base32
7278 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
7279 (build-system pyproject-build-system)
7280 (arguments
7281 (list
7282 #:phases
7283 #~(modify-phases %standard-phases
7284 (add-after 'unpack 'fix-tests
7285 (lambda _
7286 (substitute* "tests/test_match.py"
7287 (("assertRaisesRegexp")
7288 "assertRaisesRegex")))))))
7289 (native-inputs
7290 (list python-pytest python-setuptools))
7291 (inputs
7292 (list re2))
7293 (home-page "https://github.com/facebook/pyre2")
7294 (synopsis "Python wrapper for RE2")
7295 (description "This package provides a Python extension that wraps Google's
7296RE2 regular expression library. It implements many of the features of
7297Python's built-in @code{re} module with compatible interfaces.")
7298 (license license:bsd-3)))
7299
7300(define-public python-filelock
7301 ;; Try to update simultaneously with the bootstrap version in
7302 ;; (gnu packages python-build).
7303 (package
7304 (name "python-filelock")
7305 (version "3.16.1")
7306 (source
7307 (origin
7308 (method url-fetch)
7309 (uri (pypi-uri "filelock" version))
7310 (sha256
7311 (base32
7312 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7313 (build-system pyproject-build-system)
7314 (arguments
7315 (list
7316 ;; Break cycle with virtualenv.
7317 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7318 (native-inputs
7319 (list python-hatch-vcs
7320 python-hatchling
7321 python-pytest
7322 python-pytest-asyncio
7323 python-pytest-mock
7324 python-setuptools-scm))
7325 (home-page "https://github.com/tox-dev/py-filelock")
7326 (synopsis "Platform independent file lock")
7327 (description "@code{filelock} contains a single module implementing
7328a platform independent file lock in Python, which provides a simple way of
7329inter-process communication.")
7330 (license license:unlicense)))
7331
7332(define-public python-filelock-next
7333 (package
7334 (inherit python-filelock)
7335 (name "python-filelock")
7336 (version "3.20.0")
7337 (source
7338 (origin
7339 (method url-fetch)
7340 (uri (pypi-uri "filelock" version))
7341 (sha256
7342 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7343 (native-inputs
7344 (list python-hatch-vcs
7345 python-hatchling
7346 python-pytest
7347 python-pytest-asyncio
7348 python-pytest-mock
7349 python-pytest-timeout))))
7350
7351(define-public python-seedir
7352 (package
7353 (name "python-seedir")
7354 (version "0.5.0")
7355 (source
7356 (origin
7357 (method url-fetch)
7358 (uri (pypi-uri "seedir" version))
7359 (sha256
7360 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7361 (build-system pyproject-build-system)
7362 (propagated-inputs (list python-natsort))
7363 (native-inputs (list python-pytest python-setuptools python-wheel))
7364 (home-page "https://github.com/earnestt1234/seedir")
7365 (synopsis
7366 "Package for creating, editing, and reading folder tree diagrams.")
7367 (description
7368 "This is a package for creating, editing, and reading folder tree
7369diagrams.")
7370 (license license:expat)))
7371
7372(define-public python-semantic-version
7373 (package
7374 (name "python-semantic-version")
7375 (version "2.10.0")
7376 (source
7377 (origin
7378 (method url-fetch)
7379 (uri (pypi-uri "semantic_version" version))
7380 (sha256
7381 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7382 (build-system pyproject-build-system)
7383 (arguments (list #:test-backend #~'nose2))
7384 (native-inputs
7385 (list python-nose2
7386 python-setuptools))
7387 (home-page "https://github.com/rbarrois/python-semanticversion")
7388 (synopsis "Semantic versioning module for Python")
7389 (description
7390 "The @code{semantic_version} class is a small library for handling
7391@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7392
7393It can compare versions, generate a new version that represents a bump in one
7394of the version levels, and check whether any given string is a proper semantic
7395version identifier.")
7396 (license license:bsd-3)))
7397
7398(define-public python-serpent
7399 (package
7400 (name "python-serpent")
7401 (version "1.41")
7402 (source
7403 (origin
7404 (method git-fetch)
7405 (uri (git-reference
7406 (url "https://github.com/irmen/Serpent")
7407 (commit (string-append "serpent-" version))))
7408 (file-name (git-file-name name version))
7409 (sha256
7410 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7411 (build-system pyproject-build-system)
7412 (arguments (list #:test-backend #~'unittest
7413 #:test-flags #~(list "discover" "-s" "tests")))
7414 (native-inputs
7415 (list python-attrs python-pytz python-setuptools))
7416 (home-page "https://github.com/irmen/Serpent")
7417 (synopsis "Serializer for literal Python expressions")
7418 (description
7419 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7420serialization. It serializes an object tree into bytes (an utf-8 encoded
7421string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7422to rebuild the original object tree.
7423
7424Because only safe literals are encoded, it is safe to send serpent data to
7425other machines, such as over the network.")
7426 (license license:expat)))
7427
7428(define-public python-setuptools-declarative-requirements
7429 (package
7430 (name "python-setuptools-declarative-requirements")
7431 (version "1.3.0")
7432 (source
7433 (origin
7434 (method url-fetch)
7435 (uri (pypi-uri "setuptools-declarative-requirements" version))
7436 (sha256
7437 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7438 (build-system pyproject-build-system)
7439 (arguments
7440 (list #:tests? #f)) ;require dated inputs
7441 (native-inputs
7442 (list python-setuptools-scm))
7443 (propagated-inputs
7444 (list python-setuptools))
7445 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7446 (synopsis "File support for setuptools declarative setup.cfg")
7447 (description
7448 "This package provides file support for setuptools declarative
7449@code{setup.cfg}.")
7450 (license license:asl2.0)))
7451
7452(define-public python-humanfriendly
7453 (package
7454 (name "python-humanfriendly")
7455 (version "10.0")
7456 (source
7457 (origin
7458 (method git-fetch)
7459 (uri (git-reference
7460 (url "https://github.com/xolox/python-humanfriendly")
7461 (commit version)))
7462 (file-name (git-file-name name version))
7463 (sha256
7464 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7465 (build-system pyproject-build-system)
7466 (arguments
7467 (list
7468 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7469 #:tests? #f))
7470 (native-inputs (list python-setuptools))
7471 (home-page "https://humanfriendly.readthedocs.io")
7472 (synopsis "Human-friendly input and output in Python")
7473 (description
7474 "The functions and classes in @code{humanfriendly} can be used to make
7475text interfaces more user-friendly. It includes tools to parse and format
7476numbers, file sizes, and timespans, timers for long-running operations, menus
7477to allow the user to choose from a list of options, and terminal interaction
7478helpers.")
7479 (license license:expat)))
7480
7481(define-public python-calver
7482 (package
7483 (name "python-calver")
7484 (version "2022.06.26")
7485 (source
7486 (origin
7487 (method git-fetch)
7488 (uri (git-reference
7489 (url "https://github.com/di/calver")
7490 (commit version)))
7491 (file-name (git-file-name name version))
7492 (sha256
7493 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7494 (build-system pyproject-build-system)
7495 (native-inputs
7496 (list python-pretend
7497 python-pytest
7498 python-setuptools
7499 python-wheel))
7500 (home-page "https://github.com/di/calver")
7501 (synopsis "Setuptools extension for CalVer package versions")
7502 (description
7503 "The calver package is a setuptools extension for automatically defining
7504your Python package version as a calendar version.")
7505 (license license:asl2.0)))
7506
7507(define-public python-can
7508 (package
7509 (name "python-can")
7510 (version "4.6.1")
7511 (source
7512 (origin
7513 (method git-fetch)
7514 (uri (git-reference
7515 (url "https://github.com/hardbyte/python-can")
7516 (commit (string-append "v" version))))
7517 (file-name (git-file-name name version))
7518 (sha256
7519 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7520 (build-system pyproject-build-system)
7521 (arguments
7522 (list
7523 #:test-flags
7524 #~(list
7525 ;; TODO: Check if it could be packed:
7526 ;; https://github.com/projectgus/python-canalystii
7527 ;;
7528 ;; Disable tests which require specific CAN drivers we have no
7529 ;; package for in Guix.
7530 "--ignore=test/test_interface_canalystii.py"
7531 ;; These tests fail with "OSError: [Errno 19] No such device".
7532 "-k" "not BasicTestUdpMulticastBusIPv")
7533 #:phases
7534 #~(modify-phases %standard-phases
7535 (add-after 'unpack 'relax-requirements
7536 (lambda _
7537 (substitute* "pyproject.toml"
7538 (("\"wrapt~=.*\"")
7539 "\"wrapt\"")))))))
7540 (propagated-inputs (list python-packaging python-wrapt))
7541 (native-inputs
7542 (list ;; python-canalystii ; Not packed yet
7543 python-hypothesis
7544 python-mock
7545 python-parameterized
7546 python-pyserial
7547 python-pytest
7548 python-pytest-timeout
7549 python-setuptools
7550 python-setuptools-scm))
7551 (home-page "https://github.com/hardbyte/python-can")
7552 (synopsis "Controller Area Network (CAN) interface module for Python")
7553 (description
7554 "This package defines the @code{can} module, which provides controller
7555area network (CAN) support for Python developers; providing common
7556abstractions to different hardware devices, and a suite of utilities for
7557sending and receiving messages on a CAN bus.")
7558 (license license:lgpl3+)))
7559
7560(define-public python-canmatrix
7561 (package
7562 (name "python-canmatrix")
7563 (version "1.2")
7564 (source
7565 (origin
7566 (method git-fetch) ; no tests data in PyPi package
7567 (uri (git-reference
7568 (url "https://github.com/ebroecker/canmatrix")
7569 (commit version)))
7570 (file-name (git-file-name name version))
7571 (sha256
7572 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7573 (build-system pyproject-build-system)
7574 (native-inputs
7575 (list python-pytest
7576 python-pytest-timeout
7577 python-setuptools
7578 python-wheel))
7579 (propagated-inputs
7580 (list python-attrs
7581 python-canopen
7582 python-click
7583 ;; python-ldfparser
7584 python-lxml
7585 python-openpyxl
7586 python-pyyaml
7587 python-xlrd
7588 python-xlwt))
7589 (home-page "https://github.com/ebroecker/canmatrix")
7590 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7591 (description
7592 "This package implements a @acronym{CAN, Controller Area Network} matrix
7593object in Python which describes the CAN-communication and its needed objects
7594such as board units, frames, signals, and values. It also includes two
7595command-line tools (@command{canconvert} and @command{cancompare}) for
7596converting and comparing CAN databases.")
7597 (license license:bsd-2)))
7598
7599(define-public python-canopen
7600 (package
7601 (name "python-canopen")
7602 (version "2.4.1")
7603 (source
7604 (origin
7605 (method git-fetch)
7606 (uri (git-reference
7607 (url "https://github.com/canopen-python/canopen")
7608 (commit (string-append "v" version))))
7609 (file-name (git-file-name name version))
7610 (sha256
7611 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7612 (build-system pyproject-build-system)
7613 (native-inputs (list python-pytest python-setuptools))
7614 (propagated-inputs (list python-can))
7615 (home-page "https://github.com/canopen-python/canopen")
7616 (synopsis "CANopen stack implementation")
7617 (description
7618 "This package provides a Python implementation of the
7619@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7620@acronym{CANs, controller-area networks}. The aim of the project is to
7621support the most common parts of the CiA 301 standard in a simple
7622Pythonic interface. It is mainly targeted for testing and automation
7623tasks rather than a standard compliant master implementation.")
7624 (license license:expat)))
7625
7626(define-public python-diskcache
7627 (package
7628 (name "python-diskcache")
7629 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7630 ;; Django fixing failing tests.
7631 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7632 (revision . "0")))
7633 (version (git-version "5.6.3"
7634 (assoc-ref properties 'revision)
7635 (assoc-ref properties 'commit)))
7636 (source
7637 (origin
7638 (method git-fetch)
7639 (uri (git-reference
7640 (url "https://github.com/grantjenks/python-diskcache")
7641 (commit (assoc-ref properties 'commit))))
7642 (file-name (git-file-name name version))
7643 (sha256
7644 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7645 (build-system pyproject-build-system)
7646 (arguments
7647 (list
7648 #:phases
7649 #~(modify-phases %standard-phases
7650 (add-after 'unpack 'fix-pytest-config
7651 (lambda _
7652 ;; Prevent full threads utilization.
7653 (substitute* "tox.ini"
7654 (("-n auto") "")))))))
7655 (native-inputs
7656 (list python-django
7657 python-pytest
7658 python-setuptools))
7659 (home-page "https://www.grantjenks.com/docs/diskcache/")
7660 (synopsis "Disk and file backed cache library")
7661 (description "DiskCache is a disk and file backed persistent cache.")
7662 (license license:asl2.0)))
7663
7664(define-public python-optparse-pretty
7665 (package
7666 (name "python-optparse-pretty")
7667 (version "0.1.1")
7668 (source
7669 (origin
7670 (method url-fetch)
7671 (uri (pypi-uri "optparse-pretty" version))
7672 (sha256
7673 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7674 (build-system pyproject-build-system)
7675 (arguments (list #:tests? #false)) ;There are none
7676 (native-inputs (list python-setuptools python-wheel))
7677 (home-page "https://github.com/gvalkov/optparse-pretty")
7678 (synopsis "Compact help formatter for optparse")
7679 (description
7680 "This module provides two help formatters for optparse. They provide
7681terser and more customizable option formatting in comparison to the default
7682help formatter.")
7683 (license license:bsd-3)))
7684
7685(define-public python-orjson
7686 (package
7687 (name "python-orjson")
7688 (version "3.9.7")
7689 (source (origin
7690 (method url-fetch)
7691 (uri (pypi-uri "orjson" version))
7692 (sha256
7693 (base32
7694 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7695 (build-system cargo-build-system)
7696 (arguments
7697 (list
7698 #:imported-modules `(,@%cargo-build-system-modules
7699 ,@%pyproject-build-system-modules)
7700 #:modules '((guix build cargo-build-system)
7701 ((guix build pyproject-build-system) #:prefix py:)
7702 (guix build utils))
7703 #:phases
7704 #~(modify-phases %standard-phases
7705 (add-after 'build 'build-python-module
7706 (assoc-ref py:%standard-phases 'build))
7707 (add-after 'build-python-module 'install-python-module
7708 (assoc-ref py:%standard-phases 'install)))
7709 #:install-source? #false))
7710 (inputs
7711 (cons maturin (cargo-inputs 'python-orjson)))
7712 (native-inputs
7713 (list python-wrapper))
7714 (home-page "https://github.com/ijl/orjson")
7715 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7716 (description "Orjson is a fast, correct JSON library for Python. It
7717benchmarks as the fastest Python library for JSON and is more correct than the
7718standard @code{json} library or other third-party libraries. It serializes
7719dataclass, datetime, numpy, and UUID instances natively.")
7720 ;; Either of these licenses
7721 (license (list license:asl2.0 license:expat))))
7722
7723(define-public python-overrides
7724 (package
7725 (name "python-overrides")
7726 (version "7.7.0")
7727 (source
7728 (origin
7729 (method url-fetch)
7730 (uri (pypi-uri "overrides" version))
7731 (sha256
7732 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7733 (build-system pyproject-build-system)
7734 (native-inputs (list python-pytest python-setuptools python-wheel))
7735 (home-page "https://github.com/mkorpela/overrides")
7736 (synopsis "Decorator to detect mismatch when overriding a method")
7737 (description
7738 "This package provides a decorator to automatically detect mismatch when
7739overriding a method.")
7740 (license license:asl2.0)))
7741
7742(define-public python-argparse-addons
7743 (package
7744 (name "python-argparse-addons")
7745 (version "0.12.0")
7746 (source
7747 (origin
7748 (method url-fetch)
7749 (uri (pypi-uri "argparse_addons" version))
7750 (sha256
7751 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7752 (build-system pyproject-build-system)
7753 (native-inputs
7754 (list python-pytest python-setuptools))
7755 (home-page "https://github.com/eerimoq/argparse_addons")
7756 (synopsis "Extensions for Python's @code{argparse} library")
7757 (description "This Python library provides additional types and actions
7758for the standard @code{argparse} library.")
7759 (license license:expat)))
7760
7761(define-public python-bitstruct
7762 (package
7763 (name "python-bitstruct")
7764 (version "8.21.0")
7765 (source
7766 (origin
7767 (method url-fetch)
7768 (uri (pypi-uri "bitstruct" version))
7769 (sha256
7770 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7771 (build-system pyproject-build-system)
7772 (native-inputs
7773 (list python-pytest
7774 python-setuptools
7775 python-wheel))
7776 (home-page "https://github.com/eerimoq/bitstruct")
7777 (synopsis "Python values to and C bit field structs converter")
7778 (description
7779 "This module performs conversions between Python values and C bit field
7780structs represented as Python byte strings. It is intended to have a similar
7781interface as the @code{struct} module from Python, but working on bits instead
7782of primitive data types like @code{char}, @code{int}, etc.")
7783 (license license:expat)))
7784
7785(define-public python-cantools
7786 (package
7787 (name "python-cantools")
7788 (version "40.5.0")
7789 (source
7790 (origin
7791 (method git-fetch)
7792 (uri (git-reference
7793 (url "https://github.com/eerimoq/cantools")
7794 (commit version)))
7795 (file-name (git-file-name name version))
7796 (sha256
7797 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7798 (build-system pyproject-build-system)
7799 (native-inputs
7800 (list python-freezegun
7801 python-parameterized
7802 python-pytest
7803 python-setuptools
7804 python-setuptools-scm))
7805 (propagated-inputs
7806 (list python-argparse-addons
7807 python-bitstruct
7808 python-can
7809 python-crccheck
7810 python-diskcache
7811 python-matplotlib
7812 python-textparser))
7813 (home-page "https://github.com/eerimoq/cantools")
7814 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7815 (description
7816 "This package includes Controller Area Network (CAN) related tools that
7817can be used to:
7818@itemize
7819@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7820@item encode and decode CAN messages
7821@item multiplex simple and extended signals
7822@item diagnose DID encoding and decoding
7823@item dump the CAN decoder output
7824@item test CAN nodes
7825@item generate C source code
7826@item monitor the CAN bus
7827@end itemize")
7828 (license license:expat)))
7829
7830(define-public python-capturer
7831 (package
7832 (name "python-capturer")
7833 (version "3.0")
7834 (source
7835 (origin
7836 (method git-fetch)
7837 (uri (git-reference
7838 (url "https://github.com/xolox/python-capturer")
7839 (commit version)))
7840 (file-name (git-file-name name version))
7841 (sha256
7842 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7843 (build-system pyproject-build-system)
7844 (native-inputs (list python-pytest python-setuptools))
7845 (propagated-inputs (list python-humanfriendly))
7846 (home-page "https://capturer.readthedocs.io")
7847 (synopsis "Capture stdout and stderr streams of the current process")
7848 (description
7849 "The capturer package makes it easy to capture the stdout and stderr
7850streams of the current process and subprocesses. Output can be relayed
7851to the terminal in real time but is also available to the Python program
7852for additional processing.")
7853 (license license:expat)))
7854
7855(define-public python-fastprogress
7856 (package
7857 (name "python-fastprogress")
7858 (version "1.0.3")
7859 (source (origin
7860 (method git-fetch)
7861 (uri (git-reference
7862 (url "https://github.com/fastai/fastprogress")
7863 (commit version)))
7864 (file-name (git-file-name name version))
7865 (sha256
7866 (base32
7867 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7868 (build-system pyproject-build-system)
7869 (arguments
7870 (list #:tests? #f ;there are no tests
7871 #:phases #~(modify-phases %standard-phases
7872 ;; XXX: Fails with: "In procedure utime: No such file
7873 ;; or directory".
7874 (delete 'ensure-no-mtimes-pre-1980))))
7875 (native-inputs (list python-setuptools python-wheel))
7876 (home-page "https://github.com/fastai/fastprogress")
7877 (synopsis "Progress bar for Jupyter Notebook and console")
7878 (description
7879 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7880 (license license:asl2.0)))
7881
7882(define-public python-coloredlogs
7883 (package
7884 (name "python-coloredlogs")
7885 (version "15.0.1")
7886 (source
7887 (origin
7888 (method git-fetch)
7889 (uri (git-reference
7890 (url "https://github.com/xolox/python-coloredlogs")
7891 (commit version)))
7892 (file-name (git-file-name name version))
7893 (sha256
7894 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7895 (build-system pyproject-build-system)
7896 (arguments
7897 (list
7898 #:test-flags
7899 #~(list "-k"
7900 (string-join
7901 (list "not test_auto_install" ; Unclear why this fails.
7902 ;; XXX: Require a "script" executable.
7903 "test_cli_conversion"
7904 "test_empty_conversion"
7905 "test_output_interception")
7906 " and not "))))
7907 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7908 (propagated-inputs (list python-capturer))
7909 (home-page "https://coloredlogs.readthedocs.io")
7910 (synopsis "Colored stream handler for Python's logging module")
7911 (description
7912 "The @code{coloredlogs} package enables colored terminal output for
7913Python's logging module. The @code{ColoredFormatter} class inherits from
7914@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7915messages in color.")
7916 (license license:expat)))
7917
7918(define-public python-editorconfig
7919 (package
7920 (name "python-editorconfig")
7921 (version "0.17.1")
7922 (source
7923 (origin
7924 (method git-fetch)
7925 (uri (git-reference
7926 (url "https://github.com/editorconfig/editorconfig-core-py")
7927 (commit (string-append "v" version))
7928 (recursive? #t)))
7929 (file-name (git-file-name name version))
7930 (sha256
7931 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7932 (build-system pyproject-build-system)
7933 (arguments
7934 (list
7935 #:phases
7936 #~(modify-phases %standard-phases
7937 (replace 'check
7938 (lambda _
7939 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7940 (invoke "cmake" ".")
7941 (invoke "ctest" "."))))))
7942 (native-inputs (list cmake python-setuptools python-wheel))
7943 (home-page "https://editorconfig.org/")
7944 (synopsis "EditorConfig bindings for python")
7945 (description "The EditorConfig project consists of a file format for
7946defining coding styles and a collection of text editor plugins that enable
7947editors to read the file format and adhere to defined styles. EditorConfig
7948files are easily readable and they work nicely with version control systems.")
7949 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7950 (license (list license:bsd-2 license:psfl))))
7951
7952(define-public dosage
7953 (package
7954 (name "dosage")
7955 (version "3.3")
7956 (source
7957 (origin
7958 (method git-fetch)
7959 (uri (git-reference
7960 (url "https://github.com/webcomics/dosage")
7961 (commit version)))
7962 (file-name (git-file-name name version))
7963 (sha256
7964 (base32 "1111hs9f9k0w303vgidlxdngbfp71x6fnc5lfb62jc5kw2sgfn6z"))))
7965 (build-system pyproject-build-system)
7966 (arguments
7967 ;; It requires additional modules for integration tests.
7968 (list #:test-flags #~(list "--ignore=tests/modules/")))
7969 (native-inputs
7970 (list python-pytest
7971 python-responses
7972 python-setuptools
7973 python-setuptools-scm))
7974 (inputs
7975 (list python-imagesize
7976 python-importlib-resources
7977 python-lxml
7978 python-platformdirs
7979 python-requests
7980 python-rich))
7981 (home-page "https://github.com/webcomics/dosage")
7982 (synopsis "Comic strip downloader and archiver")
7983 (description
7984 "Dosage is designed to keep a local copy of specific webcomics and other
7985picture-based content such as Picture of the Day sites. With the
7986@command{dosage} command-line script you can get the latest strip of a
7987webcomic, catch-up to the last strip downloaded, or download a strip for a
7988particular date or index, if possible.")
7989 (license license:expat)))
7990
7991(define-public python-etcd3
7992 (package
7993 (name "python-etcd3")
7994 (version "0.12.0")
7995 (source
7996 (origin
7997 (method git-fetch)
7998 (uri (git-reference
7999 (url "https://github.com/kragniz/python-etcd3")
8000 (commit (string-append "v" version))))
8001 (file-name (git-file-name name version))
8002 (sha256
8003 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
8004 (build-system pyproject-build-system)
8005 (arguments
8006 (list
8007 ;; XXX: Tests require the etcd package.
8008 #:tests? #f
8009 #:test-backend #~'custom
8010 #:test-flags ; Taken from tox.ini.
8011 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
8012 (propagated-inputs
8013 (list python-grpcio python-protobuf python-six python-tenacity))
8014 (native-inputs
8015 (list python-mock python-pifpaf python-pytest python-setuptools))
8016 (home-page "https://github.com/kragniz/python-etcd3")
8017 (synopsis "Python client for the etcd3 API")
8018 (description
8019 "This package provide a Python client for the @code{etcd3} API.")
8020 (license license:asl2.0)))
8021
8022(define-public python-et-xmlfile
8023 (package
8024 (name "python-et-xmlfile")
8025 (version "2.0.0")
8026 (source
8027 (origin
8028 ;; Use a checkout because the PyPI archive does not contain tests.
8029 (method hg-fetch)
8030 (uri (hg-reference
8031 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
8032 (changeset version)))
8033 (file-name (string-append name "-" version "-checkout"))
8034 (sha256
8035 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
8036 (build-system pyproject-build-system)
8037 (native-inputs
8038 (list python-pytest
8039 python-lxml
8040 python-setuptools))
8041 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
8042 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
8043 (description "This Python library is based upon the @code{xmlfile} module
8044from @code{lxml}. It aims to provide a low memory, compatible implementation
8045of @code{xmlfile}.")
8046 (license license:expat)))
8047
8048(define-public python-omero-py
8049 (let ((omero-blitz-version "5.8.2"))
8050 (package
8051 (name "python-omero-py")
8052 (version "5.20.0")
8053 (source
8054 (origin
8055 (method git-fetch)
8056 (uri (git-reference
8057 (url "https://github.com/ome/omero-py")
8058 (commit (string-append "v" version))))
8059 (file-name (git-file-name name version))
8060 (sha256
8061 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
8062 (build-system pyproject-build-system)
8063 (arguments
8064 (list
8065 #:test-flags
8066 #~(list
8067 "-m" "not broken" "-rf" "test" "-s"
8068 ;; TestImport tries to download Java things; TestSessions
8069 ;; and TestBuildQuery require networking.
8070 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
8071 #:modules '((guix build pyproject-build-system)
8072 (guix build utils)
8073 (ice-9 match)
8074 (srfi srfi-1)
8075 (srfi srfi-26))
8076 #:phases
8077 #~(modify-phases %standard-phases
8078 (add-after 'unpack 'find-artifacts
8079 (lambda* (#:key inputs #:allow-other-keys)
8080 (let ((zip-file
8081 (match inputs
8082 (((labels . files) ...)
8083 (find (cut string-suffix?
8084 (string-append "omero-blitz-"
8085 #$omero-blitz-version
8086 "-python.zip")
8087 <>)
8088 files)))))
8089 (setenv "ZIP_FILE"
8090 (or zip-file (error "failed to find artifact file"))))))
8091 ;; Some tests need this, such as TestTempFileManager
8092 (add-after 'build 'set-HOME
8093 (lambda _ (setenv "HOME" "/tmp")))
8094 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
8095 ;; module to load.
8096 (delete 'sanity-check)
8097 ;; The argument parser is picky and interprets the "-real" part as
8098 ;; the first argument.
8099 (add-after 'wrap 'rename-executable
8100 (lambda _
8101 (with-directory-excursion (string-append #$output "/bin")
8102 (rename-file ".omero-real" ".omero")
8103 (substitute* "omero"
8104 (("bin/.omero-real") "bin/.omero"))))))))
8105 (propagated-inputs
8106 (list python-appdirs
8107 python-future
8108 python-numpy
8109 python-pillow
8110 python-pyyaml
8111 python-requests
8112 python-tables
8113 python-zeroc-ice-3.6))
8114 (native-inputs
8115 (list python-portalocker
8116 python-pytest
8117 python-pytest-mock
8118 python-pytest-rerunfailures
8119 python-pytest-xdist
8120 python-setuptools
8121 python-wheel
8122 unzip
8123 (origin
8124 (method url-fetch)
8125 (uri (format #f "\
8126https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
8127openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
8128 omero-blitz-version
8129 omero-blitz-version))
8130 (sha256
8131 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
8132 (home-page "https://github.com/ome/omero-py")
8133 (synopsis "Python bindings to the OMERO.blitz server")
8134 (description "This package provides Python bindings to the OMERO.blitz
8135server.")
8136 (license license:gpl2))))
8137
8138(define-public python-openpyxl
8139 (package
8140 (name "python-openpyxl")
8141 (version "3.1.5")
8142 (source
8143 (origin
8144 (method hg-fetch)
8145 (uri (hg-reference
8146 (url "https://foss.heptapod.net/openpyxl/openpyxl")
8147 (changeset version)))
8148 (file-name (string-append name "-" version "-checkout"))
8149 (sha256
8150 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
8151 (build-system pyproject-build-system)
8152 (arguments
8153 (list
8154 ;; tests: 2577 passed, 17 skipped, 4 deselected, 7 xfailed
8155 #:test-flags
8156 #~(list (string-append "--deselect=openpyxl/xml/tests/"
8157 "test_functions.py::test_iterparse"))))
8158 (native-inputs
8159 (list python-lxml
8160 python-pillow
8161 python-pytest
8162 python-setuptools))
8163 (propagated-inputs
8164 (list python-et-xmlfile))
8165 (home-page "https://openpyxl.readthedocs.io")
8166 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
8167 (description
8168 "This Python library allows reading and writing to the Excel XLSX, XLSM,
8169XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
8170standard.")
8171 (license license:expat)))
8172
8173(define-public python-sinfo
8174 (package
8175 (name "python-sinfo")
8176 (version "1.0.1")
8177 (source
8178 (origin
8179 (method git-fetch)
8180 (uri (git-reference
8181 (url "https://gitlab.com/joelostblom/session_info")
8182 (commit (string-append "v" version))))
8183 (file-name (git-file-name name version))
8184 (sha256
8185 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
8186 (build-system pyproject-build-system)
8187 (arguments
8188 (list #:tests? #f)) ; no tests in PyPI or Git
8189 (native-inputs
8190 (list python-setuptools))
8191 (propagated-inputs
8192 (list python-stdlib-list))
8193 (home-page "https://gitlab.com/joelostblom/session_info")
8194 (synopsis "Output module version information loaded in a Python session")
8195 (description "This package outputs version information for modules loaded
8196in the current session, Python, and the OS.")
8197 (license license:bsd-3)))
8198
8199(define-public python-schedule
8200 (package
8201 (name "python-schedule")
8202 (version "1.2.2")
8203 (source
8204 (origin
8205 (method url-fetch)
8206 (uri (pypi-uri "schedule" version))
8207 (sha256
8208 (base32
8209 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
8210 (build-system pyproject-build-system)
8211 (native-inputs
8212 (list python-pytest python-setuptools python-wheel))
8213 (home-page "https://github.com/dbader/schedule")
8214 (synopsis "Schedule periodic function calls in Python")
8215 (description
8216 "Schedule is an in-process scheduler for periodic jobs that uses the
8217builder pattern for configuration. Schedule lets you run Python functions (or
8218any other callable) periodically at pre-determined intervals using a simple,
8219human-friendly syntax.")
8220 (license license:expat)))
8221
8222;; XXX: This project is unmaintained since 2020, see:
8223;; <https://github.com/scour-project/scour/issues/321>.
8224;;
8225;; The only user is Inkscape, see:
8226;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
8227(define-public python-scour
8228 (package
8229 (name "python-scour")
8230 (version "0.38.2")
8231 (source
8232 (origin
8233 (method git-fetch)
8234 (uri
8235 (git-reference
8236 (url "https://gitlab.com/inkscape/extras/scour")
8237 (commit
8238 (string-append "v" version))))
8239 (file-name (git-file-name name version))
8240 (sha256
8241 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
8242 (build-system pyproject-build-system)
8243 (arguments
8244 (list #:test-backend #~'custom
8245 #:test-flags #~(list "test_scour.py")))
8246 (native-inputs
8247 (list python-setuptools))
8248 (propagated-inputs
8249 (list python-six))
8250 (home-page "https://gitlab.com/inkscape/extras/scour")
8251 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
8252 (description
8253 "The goal of Scour is to output a file that renders identically at a
8254fraction of the size by removing a lot of redundant information created by
8255most SVG editors. Optimization options are typically lossless but can be
8256tweaked for more aggressive cleaning.")
8257 (license license:asl2.0)))
8258
8259(define-public python-mechanize
8260 (package
8261 (name "python-mechanize")
8262 (version "0.4.10")
8263 (source
8264 (origin
8265 (method url-fetch)
8266 (uri (pypi-uri "mechanize" version))
8267 (sha256
8268 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
8269 (build-system pyproject-build-system)
8270 (arguments
8271 ;; XXX: Unclear why tests are failing.
8272 (list #:tests? #f
8273 #:phases
8274 #~(modify-phases %standard-phases
8275 (add-before 'check 'configure-tests
8276 (lambda _
8277 (setenv "GUIX_PYTHONPATH"
8278 (string-append (getcwd) "/test-tools:"
8279 (getenv "GUIX_PYTHONPATH"))))))))
8280 (native-inputs
8281 (list python-html5-parser
8282 python-html5lib
8283 python-lxml
8284 python-service-identity
8285 python-setuptools
8286 python-six
8287 python-twisted
8288 python-wheel))
8289 (propagated-inputs
8290 (list python-html5lib))
8291 (home-page "https://github.com/python-mechanize/mechanize")
8292 (synopsis
8293 "Stateful programmatic web browsing in Python")
8294 (description
8295 "Mechanize implements stateful programmatic web browsing in Python,
8296after Andy Lester’s Perl module WWW::Mechanize.")
8297 (license license:bsd-3)))
8298
8299(define-public python-mediapy
8300 (package
8301 (name "python-mediapy")
8302 (version "1.2.6")
8303 (source
8304 (origin
8305 (method git-fetch)
8306 (uri (git-reference
8307 (url "https://github.com/google/mediapy")
8308 (commit (string-append "v" version))))
8309 (file-name (git-file-name name version))
8310 (sha256
8311 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8312 (build-system pyproject-build-system)
8313 (arguments
8314 (list
8315 #:phases
8316 '(modify-phases %standard-phases
8317 (add-after 'unpack 'fix-references
8318 (lambda _
8319 (substitute* "mediapy_test.py"
8320 (("'/bin/bash")
8321 (string-append "'" (which "bash")))))))))
8322 (inputs (list ffmpeg-6))
8323 (propagated-inputs (list python-absl-py
8324 python-ipython
8325 python-matplotlib
8326 python-numpy
8327 python-pillow))
8328 (native-inputs
8329 (list python-flit-core
8330 python-pytest
8331 python-pytest-xdist))
8332 (home-page "https://github.com/google/mediapy")
8333 (synopsis "Read/write/show images and videos in an IPython notebook")
8334 (description "This Python library makes it easy to display images and
8335videos in a notebook.")
8336 (license license:asl2.0)))
8337
8338(define-public python-simpleaudio
8339 (package
8340 (name "python-simpleaudio")
8341 (version "1.0.4")
8342 (source
8343 (origin
8344 (method git-fetch)
8345 (uri (git-reference
8346 (url "https://github.com/hamiltron/py-simple-audio")
8347 (commit version)))
8348 (file-name (git-file-name name version))
8349 (sha256
8350 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8351 (build-system pyproject-build-system)
8352 (arguments
8353 (list
8354 #:test-backend #~'unittest
8355 #:phases
8356 #~(modify-phases %standard-phases
8357 (add-before 'check 'fix-test-run
8358 (lambda _
8359 (delete-file-recursively "simpleaudio"))))))
8360 (native-inputs (list python-setuptools))
8361 (inputs (list alsa-lib))
8362 (home-page "https://github.com/hamiltron/py-simple-audio")
8363 (synopsis "Simple, asynchronous audio playback for Python 3")
8364 (description
8365 "The @code{simplaudio} package provides cross-platform, dependency-free
8366audio playback capability for Python 3 on OSX, Windows, and Linux.")
8367 (license license:expat))) ; MIT license
8368
8369(define-public python-jsonalias
8370 (package
8371 (name "python-jsonalias")
8372 (version "0.1.2")
8373 (source (origin
8374 (method url-fetch)
8375 (uri (pypi-uri "jsonalias" version))
8376 (sha256
8377 (base32
8378 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8379 (build-system pyproject-build-system)
8380 (arguments
8381 (list #:tests? #f)) ; no tests in PyPI or Git
8382 (native-inputs
8383 (list python-poetry-core))
8384 (home-page "https://github.com/kevinheavey/jsonalias/")
8385 (synopsis "JSON type alias for Python")
8386 (description
8387 "This package provides a microlibrary that defines a JSON type alias for
8388Python.")
8389 (license license:expat)))
8390
8391(define-public python-jsonargparse
8392 (package
8393 (name "python-jsonargparse")
8394 (version "4.49.0")
8395 (source
8396 (origin
8397 (method git-fetch)
8398 (uri (git-reference
8399 (url "https://github.com/omni-us/jsonargparse/")
8400 (commit (string-append "v" version))))
8401 (file-name (git-file-name name version))
8402 (sha256
8403 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8404 (build-system pyproject-build-system)
8405 (propagated-inputs
8406 (list python-pyyaml))
8407 (native-inputs
8408 (list python-attrs
8409 python-pydantic
8410 python-pytest
8411 python-requests
8412 python-responses
8413 python-setuptools
8414 python-types-pyyaml
8415 python-types-requests))
8416 (home-page "https://github.com/omni-us/jsonargparse/")
8417 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8418 (description
8419 "This package lets you implement minimal boilerplate CLIs derived from
8420type hints and parse from command line, config files and environment
8421variables.")
8422 (license license:expat)))
8423
8424(define-public python-pymarshal
8425 (package
8426 (name "python-pymarshal")
8427 (version "2.2.3")
8428 (source (origin
8429 (method url-fetch)
8430 (uri (pypi-uri "pymarshal" version))
8431 (sha256
8432 (base32
8433 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8434 (build-system pyproject-build-system)
8435 (arguments
8436 ;; Test fails with this error:
8437 ;; "CovReportWarning: Failed to generate report: No data to report."
8438 (list #:tests? #f))
8439 (native-inputs
8440 (list python-pytest python-setuptools python-wheel))
8441 (propagated-inputs (list python-bson python-pyyaml))
8442 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8443 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8444 (description "PyMarshal replicates the feature of (un)marshalling structs
8445in Golang.")
8446 (license license:bsd-2)))
8447
8448(define-public python-simplejson
8449 (package
8450 (name "python-simplejson")
8451 (version "3.20.1")
8452 (source
8453 (origin
8454 (method url-fetch)
8455 (uri (pypi-uri "simplejson" version))
8456 (sha256
8457 (base32
8458 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8459 (build-system pyproject-build-system)
8460 (native-inputs
8461 (list python-pytest python-setuptools))
8462 (home-page "https://simplejson.readthedocs.io/en/latest")
8463 (synopsis
8464 "Json library for Python")
8465 (description
8466 "JSON (JavaScript Object Notation) is a subset of JavaScript
8467syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8468format.
8469
8470Simplejson exposes an API familiar to users of the standard library marshal
8471and pickle modules. It is the externally maintained version of the json
8472library contained in Python 2.6, but maintains compatibility with Python 2.5
8473and (currently) has significant performance advantages, even without using
8474the optional C extension for speedups. Simplejson is also supported on
8475Python 3.3+.")
8476 (license license:x11)))
8477
8478(define-public python-simple-rlp
8479 (package
8480 (name "python-simple-rlp")
8481 (version "0.1.3")
8482 (source
8483 (origin
8484 (method git-fetch)
8485 (uri (git-reference
8486 (url "https://github.com/SamuelHaidu/simple-rlp")
8487 ;; Upstream doesn't tag the git repo.
8488 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8489 (file-name (git-file-name name version))
8490 (sha256
8491 (base32
8492 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8493 (build-system pyproject-build-system)
8494 (native-inputs
8495 (list
8496 python-pytest
8497 python-setuptools))
8498 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8499 (synopsis
8500 "Python implementation of RLP (Recursive Length Prefix) encoding")
8501 (description
8502 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8503Prefix) - Encode and decode data structures.")
8504 (license license:expat)))
8505
8506(define-public python-pyicu
8507 (package
8508 (name "python-pyicu")
8509 (version "2.15.2")
8510 (source
8511 (origin
8512 (method url-fetch)
8513 (uri (pypi-uri "pyicu" version))
8514 (sha256
8515 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8516 (build-system pyproject-build-system)
8517 (native-inputs
8518 (list pkg-config
8519 python-pytest
8520 python-setuptools
8521 python-six))
8522 (inputs
8523 (list icu4c))
8524 (home-page "https://gitlab.pyicu.org/main/pyicu")
8525 (synopsis "Python extension wrapping the ICU C++ API")
8526 (description
8527 "PyICU is a python extension wrapping the ICU C++ API.")
8528 (license license:x11)))
8529
8530(define-public python-dogtail
8531 (package
8532 (name "python-dogtail")
8533 (version "0.9.11")
8534 (source
8535 (origin
8536 (method url-fetch)
8537 (uri (string-append
8538 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8539 version ".tar.gz"))
8540 (sha256
8541 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8542 (build-system pyproject-build-system)
8543 (arguments
8544 (list
8545 #:tests? #f ;TODO Launching dbus for the tests fails
8546 #:phases
8547 #~(modify-phases %standard-phases
8548 (replace 'check
8549 (lambda* (#:key tests? #:allow-other-keys)
8550 (when tests?
8551 (system "Xvfb :1 &")
8552 (setenv "DISPLAY" ":1")
8553 (invoke "dbus-run-session" "--"
8554 "nosetests" "-v" "tests/")))))))
8555 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8556 (native-inputs
8557 (list python-pynose
8558 gtk+
8559 xorg-server-for-tests
8560 dbus
8561 gsettings-desktop-schemas
8562 gobject-introspection
8563 python-setuptools))
8564 (home-page "https://gitlab.com/dogtail/dogtail/")
8565 (synopsis "GUI test tool and automation framework written in Python")
8566 (description
8567 "Dogtail is a GUI test tool and automation framework written in Python.
8568It uses Accessibility (a11y) technologies to communicate with desktop
8569applications. dogtail scripts are written in Python and executed like any
8570other Python program.")
8571 (license license:gpl2+)))
8572
8573(define-public python-doxyqml
8574 (package
8575 (name "python-doxyqml")
8576 (version "0.5.3")
8577 (source (origin
8578 (method url-fetch)
8579 (uri (pypi-uri "doxyqml" version))
8580 (sha256
8581 (base32
8582 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8583 (build-system pyproject-build-system)
8584 (arguments
8585 (list #:test-backend #~'custom
8586 #:test-flags #~(list "tests/functional/tests.py")))
8587 (native-inputs
8588 (list python-setuptools))
8589 (home-page "https://agateau.com/projects/doxyqml")
8590 (synopsis "Doxygen input filter for QML files")
8591 (description
8592 "This package provides a Doxygen input filter for QML files.")
8593 (license license:bsd-3)))
8594
8595(define-public python-doxypypy
8596 (package
8597 (name "python-doxypypy")
8598 (version "0.8.8.7")
8599 (source (origin
8600 (method url-fetch)
8601 (uri (pypi-uri "doxypypy" version))
8602 (sha256
8603 (base32
8604 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8605 (build-system pyproject-build-system)
8606 (arguments
8607 (list
8608 #:test-flags
8609 #~(list "-k" (string-join
8610 ;; Test files are not in UTF-8 format and attmet to
8611 ;; substitute shebang fails, while tests fail with error:
8612 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8613 ;; File w[387 chars]g.')" !=
8614 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8615 ;; chars]g.')"
8616 (list "not test_utf16be_bom"
8617 "test_utf16le_bom"
8618 "test_utf32be_bom"
8619 "test_utf32le_bom"
8620 "test_utf8_bom")
8621 " and not "))
8622 #:phases
8623 #~(modify-phases %standard-phases
8624 ;; compile-bytecode phases fails with error: SyntaxError: source
8625 ;; code string cannot contain null bytes.
8626 (add-after 'unpack 'fix-setup.py
8627 (lambda _
8628 (substitute* "setup.py"
8629 (("packages=.*") "packages=['doxypypy'],\n")))))))
8630 (native-inputs
8631 (list python-pytest
8632 python-setuptools
8633 python-wheel))
8634 (propagated-inputs
8635 (list python-chardet))
8636 (home-page "https://github.com/Feneric/doxypypy")
8637 (synopsis "Doxygen filter for Python")
8638 (description
8639 "This package provides a Doxygen filter for Python.")
8640 (license license:gpl2+)))
8641
8642(define-public python-empy
8643 (package
8644 (name "python-empy")
8645 (version "3.3.4")
8646 (source
8647 (origin
8648 (method url-fetch)
8649 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8650 version ".tar.gz"))
8651 (sha256
8652 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8653 (build-system pyproject-build-system)
8654 (arguments
8655 (list
8656 #:phases
8657 #~(modify-phases %standard-phases
8658 (replace 'check
8659 (lambda* (#:key tests? #:allow-other-keys)
8660 (when tests?
8661 (invoke "./test.sh")))))))
8662 (native-inputs (list python-setuptools))
8663 (home-page "http://www.alcyone.com/software/empy/")
8664 (synopsis "Templating system for Python")
8665 (description
8666 "EmPy is a system for embedding Python expressions and statements in
8667template text; it takes an EmPy source file, processes it, and produces
8668output. This is accomplished via expansions, which are special signals to the
8669EmPy system and are set off by a special prefix (by default the at sign, @@).
8670EmPy can expand arbitrary Python expressions and statements in this way, as
8671well as a variety of special forms. Textual data not explicitly delimited in
8672this way is sent unaffected to the output, allowing Python to be used in
8673effect as a markup language. Also supported are callbacks via hooks,
8674recording and playback via diversions, and dynamic, chainable filters. The
8675system is highly configurable via command line options and embedded
8676commands.")
8677 (license license:lgpl2.1+)))
8678
8679(define-public python-palettable
8680 (package
8681 (name "python-palettable")
8682 (version "3.3.3")
8683 (source (origin
8684 (method url-fetch)
8685 (uri (pypi-uri "palettable" version))
8686 (sha256
8687 (base32
8688 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8689 (build-system pyproject-build-system)
8690 (native-inputs (list python-pytest python-setuptools python-wheel))
8691 (home-page "https://jiffyclub.github.io/palettable/")
8692 (synopsis "Color palettes for Python")
8693 (description "Palettable (formerly brewer2mpl) is a library of color
8694palettes for Python. It’s written in pure Python with no dependencies, but it
8695can supply color maps for matplotlib. You can use Palettable to customize
8696matplotlib plots or supply colors for a web application.")
8697 (license license:expat)))
8698
8699(define-public python-parse-type
8700 (package
8701 (name "python-parse-type")
8702 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8703 ;; 3.12+; move back to git tag when released.
8704 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8705 (revision . "0")))
8706 (version (git-version "0.6.6"
8707 (assoc-ref properties 'revision)
8708 (assoc-ref properties 'commit)))
8709 (source
8710 (origin
8711 (method git-fetch)
8712 (uri (git-reference
8713 (url "https://github.com/jenisys/parse_type")
8714 (commit (assoc-ref properties 'commit))))
8715 (file-name (git-file-name name version))
8716 (sha256
8717 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8718 (build-system pyproject-build-system)
8719 (arguments
8720 (list
8721 ;; tests: 332 passed, 2 skipped
8722 #:phases
8723 #~(modify-phases %standard-phases
8724 (add-after 'unpack 'fix-pytest-config
8725 ;; To bypass options: --metadata, --html and --junit-xml.
8726 (lambda _
8727 (delete-file "pytest.ini"))))))
8728 (native-inputs
8729 (list python-pytest
8730 python-setuptools
8731 python-setuptools-scm))
8732 (propagated-inputs
8733 (list python-six ;hard dependency
8734 python-parse))
8735 (home-page "https://github.com/jenisys/parse_type")
8736 (synopsis "Extended parse module")
8737 (description "Parse_type extends the python parse module.")
8738 (license license:expat)))
8739
8740(define-public python-parse
8741 (package
8742 (name "python-parse")
8743 (version "1.20.2")
8744 (source
8745 (origin
8746 (method git-fetch)
8747 (uri (git-reference
8748 (url "https://github.com/r1chardj0n3s/parse")
8749 (commit version)))
8750 (file-name (git-file-name name version))
8751 (sha256
8752 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8753 (build-system pyproject-build-system)
8754 (native-inputs (list python-pytest python-setuptools))
8755 (home-page "https://github.com/r1chardj0n3s/parse")
8756 (synopsis "Parse strings")
8757 (description
8758 "Parse strings using a specification based on the Python @code{format()}
8759syntax.")
8760 (license license:x11)))
8761
8762(define-public python-parsley
8763 (package
8764 (name "python-parsley")
8765 (version "1.3")
8766 (source
8767 (origin
8768 (method git-fetch)
8769 (uri (git-reference
8770 (url "https://github.com/pyga/parsley")
8771 (commit version)))
8772 (file-name (git-file-name name version))
8773 (sha256
8774 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8775 (patches
8776 (list
8777 (origin
8778 (method url-fetch)
8779 (uri
8780 (string-append "https://github.com/pyga/parsley/commit/"
8781 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8782 (sha256
8783 (base32
8784 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8785 (build-system pyproject-build-system)
8786 (arguments
8787 (list
8788 #:test-flags #~(list "ometa/test" "terml/test")))
8789 (native-inputs
8790 (list python-pytest
8791 python-setuptools
8792 python-twisted))
8793 (home-page "https://launchpad.net/parsley")
8794 (synopsis "Parsing and pattern matching Python library")
8795 (description
8796 "Parsley is a parsing library using PEG algorithm, so each expression in
8797the grammar rules works like a Python expression. In particular, alternatives
8798are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8799Parsley is an implementation of OMeta, an object-oriented pattern-matching
8800language.")
8801 (license license:expat)))
8802
8803(define-public python-petl
8804 (package
8805 (name "python-petl")
8806 (version "1.7.16")
8807 (source
8808 (origin
8809 (method url-fetch)
8810 (uri (pypi-uri "petl" version))
8811 (sha256
8812 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8813 (build-system pyproject-build-system)
8814 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8815 python-pytest))
8816 (home-page "https://github.com/petl-developers/petl")
8817 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8818processing pipelines.")
8819 (description
8820 "This package provides a library for extracting, transforming and loading
8821tables of data. It can read from and write to databases or files in multiple
8822formats, including:
8823@itemize @bullet
8824@item python objects
8825@item delimited files
8826@item pickle files
8827@item text/XML/JSON/HTML files
8828@item python I/O streams
8829@item Excel XLS/XLSX files
8830@item HDF5 files
8831@end itemize")
8832 (license license:expat)))
8833
8834(define-public python-polib
8835 (package
8836 (name "python-polib")
8837 (version "1.2.0")
8838 (source
8839 (origin
8840 (method git-fetch)
8841 (uri (git-reference
8842 (url "https://github.com/izimobil/polib/")
8843 (commit version)))
8844 (file-name (git-file-name name version))
8845 (sha256
8846 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8847 (build-system pyproject-build-system)
8848 (arguments
8849 (list #:test-backend #~'custom
8850 #:test-flags #~(list "tests/tests.py")))
8851 (native-inputs (list python-setuptools))
8852 (home-page "https://github.com/izimobil/polib/")
8853 (synopsis "Manipulate, create and modify gettext files")
8854 (description
8855 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8856be used to create po files from scratch or to modify existing ones.")
8857 (license license:expat)))
8858
8859(define-public python-polling2
8860 (package
8861 (name "python-polling2")
8862 (version "0.5.0")
8863 (source
8864 (origin
8865 (method git-fetch)
8866 (uri (git-reference
8867 (url "https://github.com/ddmee/polling2")
8868 (commit (string-append "v" version))))
8869 (file-name (git-file-name name version))
8870 (sha256
8871 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8872 (build-system pyproject-build-system)
8873 (arguments
8874 ;; XXX: Additional , in string comparison.
8875 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8876 (native-inputs (list python-mock python-pytest python-setuptools))
8877 (home-page "https://github.com/ddmee/polling2")
8878 (synopsis "Polling utility with many configurable options")
8879 (description "Polling2 is a utility used to wait for a function to return
8880a certain expected condition.")
8881 (license license:expat)))
8882
8883(define-public python-daft
8884 (package
8885 (name "python-daft")
8886 (version "0.1.2")
8887 (source (origin
8888 (method url-fetch)
8889 (uri (pypi-uri "daft" version))
8890 (sha256
8891 (base32
8892 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8893 (build-system pyproject-build-system)
8894 (arguments
8895 (list
8896 #:test-flags
8897 '(list "-k"
8898 (string-append
8899 ;; The following tests compare matplotlib output with
8900 ;; previously generated images. They fail due to minor
8901 ;; differences in where matplotlib places labels.
8902 "not test_bca[png]"
8903 " and not test_classic[png]"
8904 " and not test_deconvolution[png]"
8905 " and not test_exoplanets[png]"
8906 " and not test_fixed[png]"
8907 " and not test_gaia[png]"
8908 " and not test_galex[png]"
8909 " and not test_huey_p_newton[png]"
8910 " and not test_logo[png]"
8911 " and not test_no_circles[png]"
8912 " and not test_no_gray[png]"
8913 " and not test_recursive[png]"
8914 " and not test_thick_lines[png]"
8915 " and not test_weaklensing[png]"
8916 " and not test_wordy[png]"))))
8917 (native-inputs
8918 (list python-pytest
8919 python-setuptools
8920 python-wheel))
8921 (propagated-inputs (list python-matplotlib python-numpy))
8922 (home-page "https://docs.daft-pgm.org/")
8923 (synopsis "PGM rendering library")
8924 (description "Daft is a Python package that uses matplotlib to
8925render pixel-perfect probabilistic graphical models for publication in
8926a journal or on the internet. With a short Python script and an
8927intuitive model-building syntax you can design directed (Bayesian
8928Networks, directed acyclic graphs) and undirected (Markov random fields)
8929models and save them in any formats that matplotlib supports (including
8930PDF, PNG, EPS and SVG).")
8931 (license license:expat)))
8932
8933(define-public python-portalocker
8934 (package
8935 (name "python-portalocker")
8936 (version "2.7.0")
8937 (source (origin
8938 (method url-fetch)
8939 (uri (pypi-uri "portalocker" version))
8940 (sha256
8941 (base32
8942 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8943 (build-system pyproject-build-system)
8944 (native-inputs (list python-pytest
8945 python-pytest-timeout
8946 python-redis
8947 python-setuptools
8948 python-wheel))
8949 (home-page "https://github.com/WoLpH/portalocker")
8950 (synopsis "Python library for file locking")
8951 (description "Portalocker is a library to provide an easy API to file
8952locking..")
8953 (license license:bsd-3)))
8954
8955(define-public python-poyo
8956 (package
8957 (name "python-poyo")
8958 (version "0.5.0")
8959 (source
8960 (origin
8961 (method url-fetch)
8962 (uri (pypi-uri "poyo" version))
8963 (sha256
8964 (base32
8965 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8966 (build-system pyproject-build-system)
8967 (native-inputs
8968 (list python-pytest python-setuptools))
8969 (home-page "https://github.com/hackebrot/poyo")
8970 (synopsis "Lightweight YAML Parser for Python")
8971 (description
8972 "This package provides a lightweight YAML Parser for Python. It supports
8973only a chosen subset of the YAML format that is required to parse cookiecutter
8974user configuration files. It does not have support for serializing into YAML
8975and is not compatible with JSON.")
8976 (license license:expat)))
8977
8978(define-public python-expandvars
8979 (package
8980 (name "python-expandvars")
8981 (version "1.1.2")
8982 (source
8983 (origin
8984 (method url-fetch)
8985 (uri (pypi-uri "expandvars" version))
8986 (sha256
8987 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8988 (build-system pyproject-build-system)
8989 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8990 (native-inputs
8991 (list python-hatchling python-pytest))
8992 (home-page "https://pypi.org/project/expandvars/")
8993 (synopsis "Expand system variables Unix style")
8994 (description "This module is inspired by GNU bash's variable expansion
8995features. It can be used as an alternative to Python's
8996@code{os.path.expandvars} function. A good use case is reading config files
8997with the flexibility of reading values from environment variables using
8998advanced features like returning a default value if some variable is not
8999defined.")
9000 (license license:expat)))
9001
9002(define-public python-expiringdict
9003 (package
9004 (name "python-expiringdict")
9005 (version "1.2.2")
9006 (source
9007 (origin
9008 (method git-fetch)
9009 (uri (git-reference
9010 (url "https://github.com/mailgun/expiringdict")
9011 (commit (string-append "v" version))))
9012 (file-name (git-file-name name version))
9013 (sha256
9014 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
9015 (build-system pyproject-build-system)
9016 (arguments
9017 ;; Started failing with [email protected], but it's only repr not functionality
9018 ;; so we should be fine.
9019 (list #:test-flags #~'("-v" "-e" "test_repr")))
9020 (native-inputs
9021 (list python-dill python-mock python-pynose python-setuptools))
9022 (home-page "https://github.com/mailgun/expiringdict")
9023 (synopsis "Dictionary with auto-expiring values for caching purposes")
9024 (description
9025 "This Python library provides an ordered dictionary
9026with a maximum capacity and auto-expiring values for caching purposes.
9027Expiration happens on any access, object is locked during cleanup
9028from expired values.")
9029 (license license:asl2.0)))
9030
9031(define-public python-extension-helpers
9032 (package
9033 (name "python-extension-helpers")
9034 (version "1.4.0")
9035 (source
9036 (origin
9037 (method git-fetch) ; no tests in the PyPI tarball
9038 (uri (git-reference
9039 (url "https://github.com/astropy/extension-helpers")
9040 (commit (string-append "v" version))))
9041 (file-name (git-file-name name version))
9042 (sha256
9043 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
9044 (build-system pyproject-build-system)
9045 (arguments
9046 (list
9047 #:test-flags
9048 #~(list "--pyargs" "extension_helpers"
9049 "-k" (string-join
9050 ;; XXX: Tests try to check various compilation options and
9051 ;; fail with some incomparability or trying to download
9052 ;; missing modules.
9053 (list "not test_only_pyproject"
9054 "test_no_setup_py"
9055 "test_limited_api")
9056 " and not "))))
9057 (native-inputs
9058 (list python-pytest
9059 python-setuptools-scm))
9060 (propagated-inputs
9061 (list python-setuptools))
9062 (home-page "https://extension-helpers.readthedocs.io")
9063 (synopsis "Astropy ecosystem utilities for building and installing packages")
9064 (description
9065 "The extension-helpers package includes convenience helpers to assist
9066with building Python packages with compiled C/Cython extensions. It is
9067developed by the Astropy project but is intended to be general and usable by
9068any Python package.")
9069 (license license:bsd-3)))
9070
9071(define-public python-milc
9072 (package
9073 (name "python-milc")
9074 (version "1.9.1")
9075 (source
9076 (origin
9077 (method git-fetch) ;no tests in PyPI archive
9078 (uri (git-reference
9079 (url "https://github.com/clueboard/milc")
9080 (commit version)))
9081 (file-name (git-file-name name version))
9082 (sha256
9083 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
9084 (build-system pyproject-build-system)
9085 (native-inputs
9086 (list python-pytest
9087 python-semver
9088 python-setuptools))
9089 (propagated-inputs
9090 (list python-argcomplete
9091 python-colorama
9092 python-halo
9093 python-platformdirs
9094 python-spinners
9095 python-types-colorama))
9096 (home-page "https://github.com/clueboard/milc")
9097 (synopsis "Python library for command line interface programs")
9098 (description "MILC is a Python library for developing command line
9099interface programs. This library provides features to parse arguments,
9100automatic tab-completion, color support, logging to @code{std}, etc.")
9101 (license license:expat)))
9102
9103(define-public python-extract-dtb
9104 (package
9105 (name "python-extract-dtb")
9106 (version "1.2.3")
9107 (source
9108 (origin
9109 (method git-fetch)
9110 (uri (git-reference
9111 (url "https://github.com/PabloCastellano/extract-dtb/")
9112 (commit version)))
9113 (file-name (git-file-name name version))
9114 (sha256
9115 (base32
9116 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
9117 (build-system pyproject-build-system)
9118 (arguments
9119 (list #:tests? #f)) ;no tests
9120 (native-inputs
9121 (list python-setuptools))
9122 (home-page "https://github.com/PabloCastellano/extract-dtb/")
9123 (synopsis "Extract device tree blobs (DTB) from kernel images")
9124 (description
9125 "This package provides a tool to split a kernel image with appended
9126@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
9127 (license license:gpl3+)))
9128
9129(define-public python-mimeparse
9130 (package
9131 (name "python-mimeparse")
9132 (version "2.0.0")
9133 (source
9134 (origin
9135 (method url-fetch)
9136 (uri (pypi-uri "python_mimeparse" version))
9137 (sha256
9138 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
9139 (build-system pyproject-build-system)
9140 (native-inputs
9141 (list python-pytest
9142 python-setuptools))
9143 (home-page "https://github.com/falconry/python-mimeparse")
9144 (synopsis "Python library for parsing MIME types")
9145 (description
9146 "Mimeparse provides basic functions for parsing MIME type names and
9147matching them against a list of media-ranges.")
9148 (license license:expat)))
9149
9150(define-public python-miniboa
9151 (package
9152 (name "python-miniboa")
9153 (version "1.0.9")
9154 (source
9155 (origin
9156 (method git-fetch) ;no tests in PyPI archive
9157 (uri (git-reference
9158 (url "https://github.com/shmup/miniboa")
9159 (commit (string-append "v" version))))
9160 (file-name (git-file-name name version))
9161 (sha256
9162 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
9163 (build-system pyproject-build-system)
9164 (native-inputs
9165 (list python-pytest
9166 python-setuptools
9167 python-wheel))
9168 (home-page "https://github.com/shmup/miniboa")
9169 (synopsis "Simple, single-threaded Telnet server")
9170 (description
9171 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
9172server.")
9173 (license license:asl2.0)))
9174
9175(define-public python-mir-eval
9176 (package
9177 (name "python-mir-eval")
9178 (version "0.8.2")
9179 (source (origin
9180 (method git-fetch)
9181 (uri (git-reference
9182 (url "https://github.com/mir-evaluation/mir_eval")
9183 (commit version)))
9184 (file-name (git-file-name name version))
9185 (sha256
9186 (base32
9187 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
9188 (build-system pyproject-build-system)
9189 (arguments
9190 (list
9191 #:phases
9192 #~(modify-phases %standard-phases
9193 (add-before 'check 'cd-tests
9194 (lambda _
9195 ;; Move to 'tests' directory because tests read data files from
9196 ;; a relative path.
9197 (chdir "tests"))))))
9198 (propagated-inputs (list python-decorator python-numpy python-scipy))
9199 (native-inputs (list python-matplotlib
9200 python-pytest
9201 python-pytest-mpl
9202 python-setuptools
9203 python-wheel))
9204 (home-page "https://github.com/mir-evaluation/mir_eval")
9205 (synopsis "Common metrics for common audio/music processing tasks")
9206 (description "This is a Python library for computing common heuristic
9207accuracy scores for various music/audio information retrieval/signal
9208processing tasks.")
9209 (license license:expat)))
9210
9211(define-public python-mizani
9212 (package
9213 (name "python-mizani")
9214 (version "0.14.4")
9215 (source
9216 (origin
9217 (method git-fetch)
9218 (uri (git-reference
9219 (url "https://github.com/has2k1/mizani")
9220 (commit (string-append "v" version))))
9221 (file-name (git-file-name name version))
9222 (sha256
9223 (base32 "00n8jbsk35ywa3saypc83p8624kr65xz6m2sbf5js5n17b9m6438"))))
9224 (build-system pyproject-build-system)
9225 (propagated-inputs
9226 (list python-matplotlib
9227 python-numpy
9228 python-pandas
9229 python-scipy))
9230 (native-inputs
9231 (list python-pytest
9232 python-setuptools
9233 python-setuptools-scm
9234 tzdata-for-tests))
9235 (home-page "https://github.com/has2k1/mizani")
9236 (synopsis "Create data visualizations in Python")
9237 (description
9238 "Mizani is a Python package for creating data visualizations. It
9239provides functions and tools to help with the creation of visually appealing
9240and informative visualizations, including scales, transformations and color
9241palettes.")
9242 (license license:bsd-3)))
9243
9244(define-public python-miniupnpc
9245 (package
9246 (name "python-miniupnpc")
9247 (version "2.3.3")
9248 (source
9249 (origin
9250 (method git-fetch)
9251 (uri
9252 (git-reference
9253 ;; The project tags miniupnpd_ as well but with a different version,
9254 ;; where updater may select a wrong version.
9255 (url "https://github.com/miniupnp/miniupnp")
9256 (commit
9257 (string-append
9258 "miniupnpc_" (string-replace-substring version "." "_")))))
9259 (file-name
9260 (git-file-name name version))
9261 (sha256
9262 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
9263 (build-system pyproject-build-system)
9264 (arguments
9265 (list
9266 #:phases
9267 #~(modify-phases %standard-phases
9268 (add-after 'unpack 'subdir
9269 (lambda* (#:key inputs #:allow-other-keys)
9270 (chdir "miniupnpc")
9271 (setenv "CC" #$(cc-for-target))
9272 (substitute* "Makefile"
9273 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
9274 (add-before 'subdir 'remove-kernel-version
9275 ;; Avoid embedding the running kernel version for reproducible builds
9276 (lambda _
9277 (substitute*
9278 "miniupnpc/updateminiupnpcstrings.sh"
9279 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
9280 (replace 'check
9281 (lambda* (#:key tests? #:allow-other-keys)
9282 (when tests?
9283 (invoke "make" "check")))))))
9284 (native-inputs
9285 (list python-setuptools
9286 python-wheel))
9287 (inputs (list python)) ;we are building a Python extension
9288 (synopsis "UPnP client for Python")
9289 (description "Miniupnpc is a client library for Python programs to set up
9290port forwards using @acronym{UPnP, Universal Plug and Play}.")
9291 (home-page "http://miniupnp.free.fr")
9292 (license license:bsd-3)))
9293
9294(define-public python-pyrsistent
9295 (package
9296 (name "python-pyrsistent")
9297 (version "0.20.0")
9298 (home-page "https://github.com/tobgu/pyrsistent")
9299 (source (origin
9300 (method url-fetch)
9301 (uri (pypi-uri "pyrsistent" version))
9302 (sha256
9303 (base32
9304 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9305 (build-system pyproject-build-system)
9306 (native-inputs
9307 (list python-pytest python-setuptools python-wheel))
9308 (synopsis "Persistent data structures for Python")
9309 (description
9310 "Pyrsistent is a number of persistent collections (by some referred to as
9311functional data structures). Persistent in the sense that they are immutable.
9312
9313All methods on a data structure that would normally mutate it instead return a
9314new copy of the structure containing the requested updates. The original
9315structure is left untouched.")
9316 (license license:expat)))
9317
9318(define-public python-exif-read
9319 (package
9320 (name "python-exif-read")
9321 (version "3.3.2")
9322 (source
9323 (origin
9324 (method git-fetch) ;PyPI doesn't contain the test images
9325 (uri (git-reference
9326 (url "https://github.com/ianare/exif-py")
9327 (commit version)))
9328 (file-name (git-file-name name version))
9329 (sha256
9330 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9331 (build-system pyproject-build-system)
9332 (native-inputs (list python-pytest python-setuptools python-wheel))
9333 (home-page "https://github.com/ianare/exif-py")
9334 (synopsis "Python library to extract EXIF data from image files")
9335 (description
9336 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9337files.")
9338 (license license:bsd-3)))
9339
9340(define-public python-pyld
9341 (package
9342 (name "python-pyld")
9343 (version "2.0.4")
9344 (source
9345 (origin
9346 (method git-fetch)
9347 (uri (git-reference
9348 (url "https://github.com/digitalbazaar/pyld")
9349 ;; Not all tags have the 'v' prefix.
9350 (commit (string-append "v" version))))
9351 (file-name (git-file-name name version))
9352 (sha256
9353 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9354 (build-system pyproject-build-system)
9355 (arguments
9356 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9357 (list #:tests? #f))
9358 (native-inputs
9359 (list python-lxml
9360 python-setuptools))
9361 (propagated-inputs
9362 (list python-aiohttp
9363 python-cachetools
9364 python-frozendict
9365 python-requests))
9366 (home-page "https://github.com/digitalbazaar/pyld")
9367 (synopsis "Python implementation of the JSON-LD specification")
9368 (description "PyLD is an implementation of the JSON-LD specification.")
9369 (license license:bsd-3)))
9370
9371(define-public python-cli-helpers
9372 (package
9373 (name "python-cli-helpers")
9374 (version "2.7.0")
9375 (source
9376 (origin
9377 (method url-fetch)
9378 (uri (pypi-uri "cli_helpers" version))
9379 (sha256
9380 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9381 (build-system pyproject-build-system)
9382 (native-inputs
9383 (list python-pytest
9384 python-setuptools))
9385 (propagated-inputs
9386 (list python-configobj
9387 python-tabulate))
9388 (home-page "https://github.com/dbcli/cli_helpers")
9389 (synopsis "Helpers for building command-line apps")
9390 (description
9391 "CLI Helpers is a Python package that makes it easy to perform common
9392tasks when building command-line apps. It's a helper library for command-line
9393interfaces.")
9394 (license license:bsd-3)))
9395
9396(define-public python-click
9397 (package
9398 (name "python-click")
9399 (version "8.4.1")
9400 (source
9401 (origin
9402 (method git-fetch)
9403 (uri (git-reference
9404 (url "https://github.com/pallets/click")
9405 (commit version)))
9406 (file-name (git-file-name name version))
9407 (sha256
9408 (base32 "18fhb6j3fz90088j5xw9vbd9k8xpq0cbk9i7izik4n3q3pm6vq3k"))))
9409 (build-system pyproject-build-system)
9410 (native-inputs
9411 (list less
9412 python-flit-core
9413 python-pytest))
9414 (home-page "https://palletsprojects.com/p/click/")
9415 (synopsis "Command line library for Python")
9416 (description
9417 "Click is a Python package for creating command line interfaces in a
9418composable way with as little code as necessary. Its name stands for
9419\"Command Line Interface Creation Kit\". It's highly configurable but comes
9420with sensible defaults out of the box.")
9421 (license license:bsd-3)))
9422
9423(define-public python-click-7
9424 (package (inherit python-click)
9425 (name "python-click")
9426 (version "7.1.2")
9427 (source
9428 (origin
9429 (method url-fetch)
9430 (uri (pypi-uri "click" version))
9431 (sha256
9432 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9433 (arguments (list #:tests? #f)) ;no tests in PyPI
9434 (native-inputs
9435 (list python-setuptools))))
9436
9437(define-public python-click-8.1
9438 (package
9439 (inherit python-click)
9440 (name "python-click")
9441 (version "8.1.7")
9442 (source
9443 (origin
9444 (method git-fetch)
9445 (uri (git-reference
9446 (url "https://github.com/pallets/click")
9447 (commit version)))
9448 (file-name (git-file-name name version))
9449 (sha256
9450 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9451 (native-inputs
9452 (list less
9453 python-pytest
9454 python-setuptools))))
9455
9456(define-public python-click-aliases
9457 (package
9458 (name "python-click-aliases")
9459 (version "1.0.6")
9460 (source
9461 (origin
9462 (method git-fetch)
9463 (uri (git-reference
9464 (url "https://github.com/click-contrib/click-aliases")
9465 (commit (string-append "v" version))))
9466 (file-name (git-file-name name version))
9467 (sha256
9468 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9469 (build-system pyproject-build-system)
9470 (native-inputs
9471 (list python-pytest
9472 python-poetry-core))
9473 (propagated-inputs
9474 (list python-click))
9475 (home-page "https://github.com/click-contrib/click-aliases")
9476 (synopsis "Enable aliases for Click")
9477 (description
9478 "This package helps to add (mutiple) aliases to a click group or command.")
9479 (license license:expat)))
9480
9481(define-public python-click-option-group
9482 (package
9483 (name "python-click-option-group")
9484 (version "0.5.9")
9485 (source
9486 (origin
9487 (method git-fetch)
9488 (uri (git-reference
9489 (url "https://github.com/click-contrib/click-option-group")
9490 (commit (string-append "v" version))))
9491 (file-name (git-file-name name version))
9492 (sha256
9493 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9494 (build-system pyproject-build-system)
9495 (native-inputs
9496 (list python-hatch-vcs
9497 python-hatchling
9498 python-pytest))
9499 (propagated-inputs
9500 (list python-click))
9501 (home-page "https://click-option-group.readthedocs.io/")
9502 (synopsis "Option groups missing in Click")
9503 (description
9504 "Click is a package for creating powerful and beautiful command line
9505interfaces (CLI) in Python, but it has no the functionality for creating option
9506groups. The aim of this package is to provide group options with extensible
9507functionality using canonical and clean API (Click-like API as far as
9508possible).")
9509 (license license:bsd-3)))
9510
9511(define-public python-clickgen
9512 (package
9513 (name "python-clickgen")
9514 (version "2.2.5")
9515 (source (origin
9516 (method git-fetch)
9517 (uri (git-reference
9518 (url "https://github.com/ful1e5/clickgen")
9519 (commit (string-append "v" version))))
9520 (file-name (git-file-name name version))
9521 (sha256
9522 (base32
9523 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9524 (build-system pyproject-build-system)
9525 (arguments
9526 (list
9527 #:test-flags
9528 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9529 '(list "-k" "not test_clickgen_raises")))
9530 (native-inputs
9531 (list python-pytest
9532 python-setuptools))
9533 (propagated-inputs
9534 (list python-attrs
9535 python-numpy
9536 python-pillow
9537 python-pyyaml
9538 python-toml))
9539 (home-page "https://github.com/ful1e5/clickgen")
9540 (synopsis "The hassle-free cursor building toolbox")
9541 (description
9542 "Clickgen is an API for building X11 and Windows cursors from .png files.
9543clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9544 (license license:expat)))
9545
9546(define-public python-clickhouse-connect
9547 (package
9548 (name "python-clickhouse-connect")
9549 (version "0.6.1")
9550 (source (origin
9551 (method git-fetch)
9552 (uri (git-reference
9553 (url "https://github.com/ClickHouse/clickhouse-connect")
9554 (commit (string-append "v" version))))
9555 (file-name (git-file-name name version))
9556 (sha256
9557 (base32
9558 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9559 (build-system pyproject-build-system)
9560 (arguments
9561 (list
9562 #:test-flags
9563 ;; All these tests require docker-compose
9564 '(list "--ignore-glob=tests/integration_tests/*")
9565 #:phases
9566 '(modify-phases %standard-phases
9567 (add-after 'unpack 'patch-pyproject
9568 (lambda _
9569 ;; Our version of pytest is confused by this field.
9570 (substitute* "pyproject.toml"
9571 (("^env_files.*") ""))))
9572 (add-before 'check 'build-extensions
9573 (lambda _
9574 ;; Cython extensions have to be built before running the tests.
9575 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9576 (propagated-inputs
9577 (list python-arrow
9578 python-certifi
9579 python-lz4
9580 python-numpy
9581 python-orjson
9582 python-pandas
9583 python-pytz
9584 python-setuptools ; For pkg_resources.
9585 python-sqlalchemy
9586 python-urllib3
9587 python-zstandard))
9588 (native-inputs
9589 (list python-cython
9590 python-pytest
9591 python-wheel))
9592 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9593 (synopsis
9594 "ClickHouse database core driver for Python, Pandas, and Superset")
9595 (description
9596 "This package provides a high performance core database driver for
9597connecting ClickHouse to Python, Pandas, and Superset.")
9598 (license license:asl2.0)))
9599
9600(define-public python-cligj
9601 (package
9602 (name "python-cligj")
9603 (version "0.7.2")
9604 (source
9605 (origin
9606 (method url-fetch)
9607 (uri (pypi-uri "cligj" version))
9608 (sha256
9609 (base32
9610 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9611 (build-system pyproject-build-system)
9612 (native-inputs
9613 (list python-pytest
9614 python-setuptools))
9615 (propagated-inputs
9616 (list python-click))
9617 (home-page "https://github.com/mapbox/cligj")
9618 (synopsis "Click params for command line interfaces to GeoJSON")
9619 (description
9620 "cligj is for Python developers who create command line interfaces
9621for geospatial data. cligj allows you to quickly build consistent,
9622well-tested and interoperable CLIs for handling GeoJSON.")
9623 (license license:bsd-3)))
9624
9625(define-public python-cloup
9626 (package
9627 (name "python-cloup")
9628 (version "3.0.8")
9629 (source (origin
9630 (method url-fetch)
9631 (uri (pypi-uri "cloup" version))
9632 (sha256
9633 (base32
9634 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9635 (build-system pyproject-build-system)
9636 (propagated-inputs (list python-click))
9637 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9638 (home-page "https://github.com/janLuke/cloup")
9639 (synopsis "Extension library for python-click")
9640 (description
9641 "Cloup enriches Click with several features that make it more expressive
9642and configurable such as option groups, constraints, subcommand aliases,
9643subcommands sections and a themeable HelpFormatter.")
9644 (license license:bsd-3)))
9645
9646(define-public python-jsondiff
9647 (package
9648 (name "python-jsondiff")
9649 (version "2.2.1")
9650 (source
9651 (origin
9652 (method url-fetch)
9653 (uri (pypi-uri "jsondiff" version))
9654 (sha256
9655 (base32
9656 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9657 (build-system pyproject-build-system)
9658 (arguments
9659 (list
9660 #:phases
9661 #~(modify-phases %standard-phases
9662 (add-before 'build 'set-version
9663 (lambda _
9664 (substitute* "pyproject.toml"
9665 (("^version_file.*") "")
9666 (("dynamic = \\[\"version\"\\]")
9667 (string-append "version = \"" #$version "\""))))))))
9668 (propagated-inputs (list python-pyyaml))
9669 (native-inputs
9670 (list python-hypothesis
9671 python-pytest
9672 python-setuptools
9673 python-setuptools-scm
9674 python-wheel))
9675 (home-page "https://github.com/fzumstein/jsondiff")
9676 (synopsis "Compare JSON and JSON-like structures in Python")
9677 (description "@code{jsondiff} is a Python library which lets you compare,
9678diff, and patch JSON and JSON-like structures in Python.")
9679 (license license:expat)))
9680
9681(define-public python-ddlparse
9682 (package
9683 (name "python-ddlparse")
9684 (version "1.10.0")
9685 (source
9686 (origin
9687 (method url-fetch)
9688 (uri (pypi-uri "ddlparse" version))
9689 (sha256
9690 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9691 (build-system pyproject-build-system)
9692 (native-inputs
9693 (list python-pytest python-setuptools))
9694 (propagated-inputs (list python-pyparsing))
9695 (home-page "https://github.com/shinichi-takii/ddlparse")
9696 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9697 (description "This package provides @code{ddlparse}, a Python library to parse
9698and convert DDL to BigQuery JSON schema.")
9699 (license license:bsd-3)))
9700
9701(define-public python-jsonschema
9702 (package
9703 (name "python-jsonschema")
9704 (version "4.26.0")
9705 (source
9706 (origin
9707 (method git-fetch)
9708 (uri (git-reference
9709 (url "https://github.com/Julian/jsonschema")
9710 (commit (string-append "v" version))))
9711 (file-name (git-file-name name version))
9712 (sha256
9713 (base32 "0p89jy7s1agi2zqrsdm56p843k847n9cixjsc12hnzscll37kysk"))))
9714 (build-system pyproject-build-system)
9715 (arguments
9716 (list
9717 ;; tests: 7762 passed, 53 skipped
9718 #:phases
9719 #~(modify-phases %standard-phases
9720 (add-before 'check 'pre-check
9721 (lambda _
9722 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9723 (native-inputs
9724 (list python-hatchling
9725 python-hatch-fancy-pypi-readme
9726 python-hatch-vcs
9727 python-jsonpath-ng
9728 python-pytest))
9729 (propagated-inputs
9730 (list python-attrs
9731 python-jsonschema-specifications
9732 python-referencing
9733 python-rpds-py
9734 ;; [optional]
9735 python-fqdn
9736 python-idna
9737 python-isoduration
9738 python-jsonpointer
9739 python-rfc3339-validator
9740 python-rfc3986-validator
9741 python-rfc3987-syntax ;sanity-check fails without this
9742 python-uri-template
9743 python-webcolors))
9744 (home-page "https://github.com/Julian/jsonschema")
9745 (synopsis "Implementation of JSON Schema for Python")
9746 (description
9747 "Jsonschema is an implementation of JSON Schema for Python.")
9748 (license license:expat)))
9749
9750;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9751;; version.
9752(define-public python-jsonschema-3
9753 (package
9754 (inherit python-jsonschema)
9755 (version "3.2.0")
9756 (source (origin
9757 (method url-fetch)
9758 (uri (pypi-uri "jsonschema" version))
9759 (sha256
9760 (base32
9761 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9762 (arguments
9763 (substitute-keyword-arguments arguments
9764 ((#:tests? _ #t) #f)))
9765 (propagated-inputs
9766 (list python-attrs
9767 python-pyrsistent
9768 python-typing-extensions))
9769 (native-inputs
9770 (list python-setuptools-scm python-twisted
9771 python-setuptools python-wheel))))
9772
9773;; A bare minimal package, mainly to use in tests and reduce closure size.
9774;; Tests are left out in the main package to slim down native-inputs and
9775;; propagated-inputs.
9776(define-public python-jsonschema-minimal
9777 (package/inherit python-jsonschema
9778 (name "python-jsonschema-minimal")
9779 (arguments
9780 (substitute-keyword-arguments arguments
9781 ((#:tests? _ #t) #f)))
9782 (native-inputs
9783 (list python-hatchling
9784 python-hatch-fancy-pypi-readme
9785 python-hatch-vcs))
9786 (propagated-inputs
9787 (list python-attrs
9788 python-jsonschema-specifications
9789 python-referencing
9790 python-rpds-py))))
9791
9792(define-public python-jsonschema-path
9793 (package
9794 (name "python-jsonschema-path")
9795 (version "0.3.2")
9796 (source
9797 (origin
9798 (method url-fetch)
9799 (uri (pypi-uri "jsonschema_path" version))
9800 (sha256
9801 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9802 (build-system pyproject-build-system)
9803 (arguments
9804 (list
9805 #:tests? #false ;there are none
9806 #:phases
9807 '(modify-phases %standard-phases
9808 (add-after 'unpack 'relax-requirements
9809 (lambda _
9810 (substitute* "pyproject.toml"
9811 (("referencing = \">=0.28.0,<0.32.0\"")
9812 "referencing = \">=0.28.0\"")))))))
9813 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9814 python-requests))
9815 (native-inputs (list python-poetry-core))
9816 (home-page "https://github.com/p1c2u/jsonschema-path")
9817 (synopsis "JSONSchema Spec with object-oriented paths")
9818 (description "This package implements object-oriented JSONSchema. It lets
9819you traverse a schema like paths and access a schema on demand with separate
9820dereferencing accessor layer.")
9821 (license license:asl2.0)))
9822
9823(define-public python-jsonschema-objects
9824 (package
9825 (name "python-jsonschema-objects")
9826 (version "0.5.7")
9827 (source
9828 (origin
9829 (method git-fetch)
9830 (uri (git-reference
9831 (url "https://github.com/cwacek/python-jsonschema-objects/")
9832 (commit version)))
9833 (file-name (git-file-name name version))
9834 (sha256
9835 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9836 (build-system pyproject-build-system)
9837 (native-inputs
9838 (list python-pytest
9839 python-pytest-mock
9840 python-setuptools))
9841 (propagated-inputs
9842 (list python-inflection
9843 python-jsonschema
9844 python-markdown))
9845 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9846 (synopsis "Automatic Python binding generation from JSON schemas")
9847 (description
9848 "This package provides an automatic class-based binding to JSON
9849Schemas for use in python.")
9850 (license license:expat)))
9851
9852(define-public python-jsonschema-specifications
9853 (package
9854 (name "python-jsonschema-specifications")
9855 (version "2025.9.1")
9856 (source
9857 (origin
9858 (method git-fetch)
9859 (uri (git-reference
9860 (url "https://github.com/python-jsonschema/jsonschema-specifications")
9861 (commit (string-append "v" version))))
9862 (file-name (git-file-name name version))
9863 (sha256
9864 (base32 "0fxjcq2qqzahfi9jinns2gmrnjq1zf216dr3i480aphabdx1c67z"))))
9865 (build-system pyproject-build-system)
9866 (native-inputs
9867 (list python-hatch-vcs
9868 python-hatchling
9869 python-pytest))
9870 (propagated-inputs
9871 (list python-referencing))
9872 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9873 (synopsis
9874 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9875 (description
9876 "This package provides JSON support files from the JSON Schema
9877Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9878from Python as a referencing-based Schema Registry.")
9879 (license license:expat)))
9880
9881(define-public python-schema
9882 (package
9883 (name "python-schema")
9884 (version "0.7.8")
9885 (source
9886 (origin
9887 (method git-fetch)
9888 (uri (git-reference
9889 (url "https://github.com/keleshev/schema")
9890 (commit (string-append "v" version))))
9891 (file-name (git-file-name name version))
9892 (sha256
9893 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9894 (build-system pyproject-build-system)
9895 (native-inputs
9896 (list python-pytest python-setuptools))
9897 (home-page "https://github.com/keleshev/schema")
9898 (synopsis "Simple data validation library")
9899 (description
9900 "@code{python-schema} is a library for validating Python data
9901structures, such as those obtained from config-files, forms, external
9902services or command-line parsing, converted from JSON/YAML (or
9903something else) to Python data-types.")
9904 (license license:psfl)))
9905
9906(define-public python-kitchen
9907 (package
9908 (name "python-kitchen")
9909 (version "1.2.6")
9910 (source
9911 (origin
9912 (method git-fetch)
9913 (uri (git-reference
9914 (url "https://github.com/fedora-infra/kitchen")
9915 (commit version)))
9916 (file-name (git-file-name name version))
9917 (sha256
9918 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9919 (build-system pyproject-build-system)
9920 (arguments
9921 (list
9922 #:test-flags
9923 #~(list "kitchen3"
9924 ;; XXX: Unclear why these tests fail.
9925 "-e" "test_invalid_fallback_no_raise"
9926 "-e" "test_internal_generate_combining_table"
9927 "-e" "test_lgettext"
9928 "-e" "test_lngettext"
9929 "-e" "test_easy_gettext_setup_non_unicode")
9930 #:phases
9931 #~(modify-phases %standard-phases
9932 (add-before 'check 'delete-broken-test-files
9933 (lambda _
9934 (delete-file "kitchen3/tests/test__all__.py")
9935 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9936 (native-inputs (list python-pynose python-setuptools))
9937 (home-page "https://github.com/fedora-infra/kitchen")
9938 (synopsis "Python API for snippets")
9939 (description
9940 "@code{kitchen} module provides a python API for all sorts of little
9941useful snippets of code that everybody ends up writing for their projects but
9942never seem big enough to build an independent release. Use kitchen and stop
9943cutting and pasting that code over and over.")
9944 (license (list license:lgpl2.1+
9945 ;; subprocess.py, test_subprocess.py,
9946 ;; kitchen/pycompat25/defaultdict.py:
9947 license:psfl))))
9948
9949(define-public python-roman
9950 (package
9951 (name "python-roman")
9952 (version "5.2")
9953 (source
9954 (origin
9955 (method git-fetch)
9956 (uri (git-reference
9957 (url "https://github.com/zopefoundation/roman")
9958 (commit version)))
9959 (file-name (git-file-name name version))
9960 (sha256
9961 (base32
9962 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9963 (build-system pyproject-build-system)
9964 (arguments
9965 (list
9966 #:test-backend #~'unittest
9967 #:test-flags #~(list "discover" "-s" "src")))
9968 (native-inputs (list python-setuptools))
9969 (home-page "https://github.com/zopefoundation/roman")
9970 (synopsis "Integer to Roman numerals converter")
9971 (description
9972 "This package provides a small helper library to convert Arabic Numbers
9973to Roman Numerals.")
9974 (license license:zpl2.1)))
9975
9976(define-public python-rollbar
9977 (package
9978 (name "python-rollbar")
9979 (version "1.3.0")
9980 (source (origin
9981 (method url-fetch)
9982 (uri (pypi-uri "rollbar" version))
9983 (sha256
9984 (base32
9985 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9986 (build-system pyproject-build-system)
9987 (native-inputs (list python-httpx
9988 python-pytest
9989 python-setuptools
9990 python-webob
9991 python-wheel))
9992 (inputs (list python-requests))
9993 (home-page "https://github.com/rollbar/pyrollbar")
9994 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9995 (description
9996 "Python SDK for reporting exceptions, errors, and log messages
9997to @url{https://rollbar.com/, Rollbar}.
9998
9999Capabilities include:
10000
10001@itemize @bullet
10002@item Sending messages and exceptions with arbitrary context
10003@item Getting back aggregates
10004@item Debugging production issues
10005@end itemize")
10006 (license license:expat)))
10007
10008(define-public python-pyjwt
10009 (package
10010 (name "python-pyjwt")
10011 (version "2.10.1")
10012 (source
10013 (origin
10014 (method url-fetch)
10015 (uri (pypi-uri "pyjwt" version))
10016 (sha256
10017 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
10018 (build-system pyproject-build-system)
10019 (arguments
10020 (list
10021 ;; tests: 286 passed, 4 skipped, 1 deselected
10022 ;;
10023 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
10024 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
10025 ;; resolution>"
10026 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
10027 (native-inputs
10028 (list python-pytest
10029 python-setuptools))
10030 (propagated-inputs
10031 (if (supported-package? python-cryptography)
10032 (list python-cryptography)
10033 '()))
10034 (home-page "https://github.com/progrium/pyjwt")
10035 (synopsis "JSON Web Token implementation in Python")
10036 (description
10037 "PyJWT is a JSON Web Token implementation written in Python.")
10038 (license license:expat)))
10039
10040(define-public python-pymsgbox
10041 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
10042 (revision "1"))
10043 (package
10044 (name "python-pymsgbox")
10045 (version (git-version "1.0.6" revision commit))
10046 (source
10047 (origin
10048 (method git-fetch)
10049 (uri (git-reference
10050 (url "https://github.com/asweigart/PyMsgBox")
10051 (commit commit)))
10052 (file-name (git-file-name name version))
10053 (sha256
10054 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
10055 (build-system pyproject-build-system)
10056 (arguments
10057 ;; Circular dependency to run tests:
10058 ;; Tests need pyautogui, which depends on pymsgbox.
10059 '(#:tests? #f))
10060 (native-inputs (list python-setuptools python-wheel))
10061 (home-page "https://github.com/asweigart/PyMsgBox")
10062 (synopsis "Python module for JavaScript-like message boxes")
10063 (description
10064 "PyMsgBox is a simple, cross-platform, pure Python module for
10065JavaScript-like message boxes. Types of dialog boxes include:
10066@enumerate
10067@item alert
10068@item confirm
10069@item prompt
10070@item password
10071@end enumerate
10072")
10073 (license license:bsd-3))))
10074
10075(define-public python-pympler
10076 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
10077 (revision "0"))
10078 (package
10079 (name "python-pympler")
10080 (version (git-version "1.1" revision commit))
10081 (source
10082 (origin
10083 (method git-fetch)
10084 (uri (git-reference
10085 (url "https://github.com/pympler/pympler")
10086 (commit commit)))
10087 (file-name (git-file-name name version))
10088 (sha256
10089 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
10090 (build-system pyproject-build-system)
10091 (arguments
10092 (list
10093 #:tests? #f ;FIXME: tests timeout.
10094 #:test-flags
10095 #~(list
10096 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
10097 ;; != 'function (muppy.test_summary.func)'.
10098 ;; See <https://github.com/pympler/pympler/issues/134>.
10099 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
10100 ;; This test times out.
10101 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback"
10102 "--deselect=test/muppy/test_tracker.py::TrackerTest::test_otracker_diff")))
10103 (native-inputs
10104 (list python-pytest python-setuptools))
10105 (home-page "https://pythonhosted.org/Pympler/")
10106 (synopsis "Measure, monitor and analyze memory behavior")
10107 (description
10108 "Pympler is a development tool to measure, monitor and analyze
10109the memory behavior of Python objects in a running Python application.
10110
10111By pympling a Python application, detailed insight in the size and the
10112lifetime of Python objects can be obtained. Undesirable or unexpected
10113runtime behavior like memory bloat and other @samp{pymples} can easily
10114be identified.
10115
10116A web profiling frontend exposes process statistics, garbage
10117visualisation and class tracker statistics.")
10118 (license license:asl2.0))))
10119
10120(define-public python-itsdangerous
10121 (package
10122 (name "python-itsdangerous")
10123 (version "2.2.0")
10124 (source
10125 (origin
10126 (method url-fetch)
10127 (uri (pypi-uri "itsdangerous" version))
10128 (sha256
10129 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
10130 (build-system pyproject-build-system)
10131 (native-inputs
10132 (list python-flit-core
10133 python-freezegun
10134 python-pytest))
10135 (home-page "https://palletsprojects.com/p/itsdangerous/")
10136 (synopsis "Python library for passing data to/from untrusted environments")
10137 (description
10138 "Itsdangerous provides various helpers to pass trusted data to untrusted
10139environments and back.")
10140 (license license:bsd-3)))
10141
10142;; WARNING: This package is a dependency of mesa.
10143(define-public python-pyyaml
10144 (package
10145 (name "python-pyyaml")
10146 (version "6.0.3")
10147 (source
10148 (origin
10149 (method git-fetch)
10150 (uri (git-reference
10151 (url "https://github.com/yaml/pyyaml")
10152 (commit version)))
10153 (file-name (git-file-name name version))
10154 (sha256
10155 (base32 "0w00gkjqx1g8c5gdm9qqznnj7ijzfjqwqgymppqw5lbw38h2hjld"))))
10156 (build-system pyproject-build-system)
10157 (native-inputs
10158 (list python-cython
10159 python-pytest
10160 python-setuptools))
10161 (inputs
10162 (list libyaml))
10163 (home-page "https://pyyaml.org")
10164 (synopsis "YAML parser and emitter for Python")
10165 (description
10166 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
10167complete YAML 1.1 parser, Unicode support, pickle support, capable extension
10168API, and sensible error messages. PyYAML supports standard YAML tags and
10169provides Python-specific tags that represent an arbitrary Python object.")
10170 (license license:expat)))
10171
10172(define-public python-crossenv
10173 (package
10174 (name "python-crossenv")
10175 (version "1.6.1")
10176 (source
10177 (origin
10178 (method git-fetch)
10179 (uri (git-reference
10180 (url "https://github.com/benfogle/crossenv")
10181 (commit (string-append "v" version))))
10182 (file-name (git-file-name name version))
10183 (sha256
10184 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
10185 (build-system pyproject-build-system)
10186 (arguments
10187 (list
10188 ;; XXX: Running test require setting environment variables for
10189 ;; architectures.
10190 #:tests? #f))
10191 (native-inputs (list python-hatchling))
10192 (home-page "https://github.com/benfogle/crossenv")
10193 (synopsis "Cross-compiling virtualenv for Python")
10194 (description
10195 "This package is a tool for cross-compiling extension modules. It
10196creates a special virtual environment such that @command{pip} or
10197@file{setup.py} will cross compile packages for you, usually with no further
10198work on your part.")
10199 (license license:expat)))
10200
10201(define-public python-linkify-it-py
10202 (package
10203 (name "python-linkify-it-py")
10204 (version "2.1.0")
10205 (source (origin
10206 (method git-fetch)
10207 (uri (git-reference
10208 (url "https://github.com/tsutsu3/linkify-it-py")
10209 (commit (string-append "v" version))))
10210 (file-name (git-file-name name version))
10211 (sha256
10212 (base32
10213 "006yvm2pcilq60zb02ijhdma26csynhkffb8wscjmjzbwqq8fzqh"))))
10214 (build-system pyproject-build-system)
10215 (propagated-inputs (list python-uc-micro-py))
10216 (native-inputs (list python-pytest python-setuptools))
10217 (home-page "https://github.com/tsutsu3/linkify-it-py")
10218 (synopsis "Links recognition library with full Unicode support")
10219 (description "This is Python port of
10220@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
10221recognition library with full Unicode support. It has features like:
10222@itemize
10223@item Full unicode support, with @i{astral} characters
10224@item International domains support
10225@item Allows rules extension and custom normalizers.
10226@end itemize")
10227 (license license:expat)))
10228
10229(define-public python-makefun
10230 (package
10231 (name "python-makefun")
10232 ;; Released version fails tests in Python 3.12 due to asyncio
10233 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
10234 (revision . "0")))
10235 (version (git-version "1.16.0"
10236 (assoc-ref properties 'revision)
10237 (assoc-ref properties 'commit)))
10238 (source
10239 (origin
10240 (method git-fetch)
10241 (uri (git-reference
10242 (url "https://github.com/smarie/python-makefun")
10243 (commit (assoc-ref properties 'commit))))
10244 (file-name (git-file-name name version))
10245 (sha256
10246 (base32
10247 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
10248 (build-system pyproject-build-system)
10249 (native-inputs
10250 (list python-pytest
10251 python-pytest-asyncio
10252 python-setuptools
10253 python-setuptools-scm))
10254 (home-page "https://github.com/smarie/python-makefun")
10255 (synopsis "Library to dynamically create python functions")
10256 (description "@code{makefun} helps create functions dynamically with a
10257given signature. It was largely inspired by @code{python-decorator} and
10258@code{functools}.")
10259 (license license:bsd-3)))
10260
10261(define-public python-markdown-it-py
10262 (package
10263 (name "python-markdown-it-py")
10264 (version "4.0.0")
10265 (source
10266 (origin
10267 (method git-fetch)
10268 (uri (git-reference
10269 (url "https://github.com/executablebooks/markdown-it-py")
10270 (commit (string-append "v" version))))
10271 (file-name (git-file-name name version))
10272 (sha256
10273 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
10274 (build-system pyproject-build-system)
10275 (arguments (list #:test-flags #~(list "--benchmark-disable")))
10276 (native-inputs
10277 (list python-flit-core
10278 python-pytest
10279 python-pytest-benchmark
10280 python-pytest-regressions
10281 python-requests))
10282 (propagated-inputs
10283 (list python-commonmark
10284 python-linkify-it-py
10285 python-markdown
10286 python-mdurl
10287 python-mistletoe
10288 python-mistune
10289 python-panflute
10290 python-pyyaml))
10291 (home-page "https://github.com/executablebooks/markdown-it-py")
10292 (synopsis "Python port of markdown-it")
10293 (description
10294 "This is a Python port of @code{markdown-it}, and some of its associated
10295plugins. The driving design philosophy of the port has been to change as
10296little of the fundamental code structure (file names, function name, etc) as
10297possible.")
10298 (license license:expat)))
10299
10300(define-public python-markupsafe
10301 (package
10302 (name "python-markupsafe")
10303 (version "3.0.3")
10304 (source
10305 (origin
10306 (method url-fetch)
10307 (uri (pypi-uri "markupsafe" version))
10308 (sha256
10309 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10310 (build-system pyproject-build-system)
10311 ;; tests: 79 passed, 1 skipped
10312 (native-inputs
10313 (list python-pytest
10314 python-setuptools))
10315 (home-page "https://markupsafe.palletsprojects.com")
10316 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10317 (description
10318 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10319for Python.")
10320 (license license:bsd-3)))
10321
10322(define-public python-jinja2
10323 (package
10324 (name "python-jinja2")
10325 (version "3.1.6")
10326 (source
10327 (origin
10328 (method git-fetch)
10329 (uri (git-reference
10330 (url "https://github.com/pallets/jinja")
10331 (commit version)))
10332 (file-name (git-file-name name version))
10333 (sha256
10334 (base32 "01ds59a1cync34xq7s0q6f50k9nvn2n80zh62qa2a8vnr7fz5nlv"))))
10335 (build-system pyproject-build-system)
10336 (native-inputs
10337 (list python-flit-core
10338 python-pytest
10339 python-trio))
10340 (propagated-inputs
10341 (list python-markupsafe))
10342 (home-page "https://jinja.palletsprojects.com/")
10343 (synopsis "Python template engine")
10344 (description
10345 "Jinja2 is a small but fast and easy to use stand-alone template engine
10346written in pure Python.")
10347 (license license:bsd-3)))
10348
10349(define-public python-jinja2-fragments
10350 (package
10351 (name "python-jinja2-fragments")
10352 (version "1.11.0")
10353 (source
10354 (origin
10355 (method git-fetch)
10356 (uri (git-reference
10357 (url "https://github.com/sponsfreixes/jinja2-fragments")
10358 (commit version)))
10359 (file-name (git-file-name name version))
10360 (sha256
10361 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10362 (patches
10363 ;; Remove test setup code related to `litestar` and `sanic`
10364 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10365 (build-system pyproject-build-system)
10366 (arguments
10367 (list
10368 #:test-flags
10369 #~(list "--ignore=tests/test_litestar.py"
10370 "--ignore=tests/test_sanic.py")))
10371 (native-inputs
10372 (list python-fastapi
10373 python-flask
10374 python-pytest
10375 python-pytest-asyncio
10376 python-quart
10377 python-setuptools))
10378 (propagated-inputs
10379 (list python-jinja2))
10380 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10381 (synopsis "Jinja2 extension for template fragments")
10382 (description
10383 "Render Jinja2 template block as HTML page fragments on Python web
10384frameworks.")
10385 (license license:expat)))
10386
10387(define-public python-pypugjs
10388 (package
10389 (name "python-pypugjs")
10390 (version "5.12.0")
10391 (source
10392 (origin
10393 (method git-fetch)
10394 (uri (git-reference
10395 (url "https://github.com/kakulukia/pypugjs")
10396 (commit (string-append "v" version))))
10397 (file-name (git-file-name name version))
10398 (sha256
10399 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10400 (build-system pyproject-build-system)
10401 (native-inputs (list python-django
10402 python-jinja2
10403 python-flask
10404 python-mako
10405 python-poetry-core
10406 python-pytest
10407 python-tornado))
10408 (propagated-inputs (list python-charset-normalizer python-six))
10409 (home-page "https://github.com/kakulukia/pypugjs")
10410 (synopsis "Convert Pug source files into different template languages")
10411 (description
10412 "PyPugJS is a high-performance port of PugJS for Python, that converts
10413any @file{.pug} source into different template languages: Django, Jinja2,
10414Mako, and Tornado.")
10415 (license license:expat))) ;; MIT
10416
10417(define-public python-pysrt
10418 (package
10419 (name "python-pysrt")
10420 (version "1.1.2")
10421 (source
10422 (origin
10423 (method git-fetch)
10424 (uri (git-reference
10425 (url "https://github.com/byroot/pysrt")
10426 (commit (string-append "v" version))))
10427 (file-name (git-file-name name version))
10428 (sha256
10429 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10430 (build-system pyproject-build-system)
10431 (arguments
10432 (list
10433 #:test-backend #~'unittest
10434 #:phases
10435 #~(modify-phases %standard-phases
10436 (add-after 'unpack 'fix-python-incompatibilities
10437 (lambda _
10438 (substitute* (find-files "tests" "\\.py$")
10439 (("assertEquals") "assertEqual")))))))
10440 (propagated-inputs (list python-chardet))
10441 (native-inputs (list python-setuptools))
10442 (home-page "https://github.com/byroot/pysrt")
10443 (synopsis "SubRip Text subtitle parser and writer")
10444 (description
10445 "This package provides a Python library to edit or create
10446SubRip Text files, and additionally a command-line program @command{srt}
10447to shift, split or rescale them.")
10448 (license license:gpl3+)))
10449
10450(define-public python-pystache
10451 (package
10452 (name "python-pystache")
10453 (version "0.6.8")
10454 (source (origin
10455 (method url-fetch)
10456 (uri (pypi-uri "pystache" version))
10457 (sha256
10458 (base32
10459 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10460 (build-system pyproject-build-system)
10461 (native-inputs (list python-pytest python-setuptools python-wheel))
10462 (home-page "http://defunkt.io/pystache/")
10463 (synopsis "Python logic-less template engine")
10464 (description
10465 "Pystache is a Python implementation of the framework agnostic,
10466logic-free templating system Mustache.")
10467 (license license:expat)))
10468
10469(define-public python-pystack
10470 (package
10471 (name "python-pystack")
10472 (version "1.5.1")
10473 (source
10474 (origin
10475 (method git-fetch)
10476 (uri (git-reference
10477 (url "https://github.com/bloomberg/pystack")
10478 (commit (string-append "v" version))))
10479 (file-name (git-file-name name version))
10480 (sha256
10481 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10482 (build-system pyproject-build-system)
10483 (arguments
10484 (list
10485 ;; Integration tests need ptrace and gcore (gdb).
10486 #:test-flags #~(list "tests/unit")))
10487 (native-inputs
10488 (list python-cython
10489 python-pkgconfig
10490 python-pytest
10491 python-setuptools))
10492 (inputs
10493 (list elfutils))
10494 (home-page "https://github.com/bloomberg/pystack")
10495 (synopsis "Python stack trace analyzer for core dumps and live processes")
10496 (description
10497 "PyStack analyzes stack frames of running Python processes or Python core
10498dumps. It can inspect what a process is doing or what it was doing when it
10499crashed, without modifying any memory or executing code in the target process.")
10500 (license license:asl2.0)))
10501
10502(define-public python-pystitcher
10503 (package
10504 (name "python-pystitcher")
10505 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10506 (revision . "0")
10507 (upstream-version . "1.0.5")))
10508 (version (git-version (assoc-ref properties 'upstream-version)
10509 (assoc-ref properties 'revision)
10510 (assoc-ref properties 'commit)))
10511 (source
10512 (origin
10513 (method git-fetch)
10514 (uri (git-reference
10515 (url "https://github.com/captn3m0/pystitcher")
10516 (commit (assoc-ref properties 'commit))))
10517 (file-name (git-file-name name version))
10518 (sha256
10519 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10520 (build-system pyproject-build-system)
10521 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10522 (inputs (list python-html5lib
10523 python-markdown
10524 python-pypdf
10525 python-validators))
10526 (home-page "https://github.com/captn3m0/pystitcher")
10527 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10528 (description
10529 "This package stitches your PDF files together, generating customizable
10530bookmarks using a declarative input in the form of a markdown file.")
10531 (license license:expat)))
10532
10533(define-public python-joblib
10534 (package
10535 (name "python-joblib")
10536 (version "1.5.3")
10537 (source
10538 (origin
10539 (method git-fetch)
10540 (uri (git-reference
10541 (url "https://github.com/joblib/joblib")
10542 (commit version)))
10543 (file-name (git-file-name name version))
10544 (sha256
10545 (base32 "0vblgi0mb1jcwgf8f3rslw82g28fjl6n52mwgsm7p7y2nrixdrjb"))))
10546 (build-system pyproject-build-system)
10547 (arguments
10548 (list
10549 ;; tests: 1319 passed, 103 skipped, 3 xpassed, 563 warnings
10550 #:test-flags
10551 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10552 ;; Disabled to avoid having to depend on ipython/jupyter.
10553 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10554 (native-inputs
10555 (list python-pytest
10556 python-pytest-asyncio
10557 python-pytest-xdist
10558 python-setuptools))
10559 (home-page "https://joblib.readthedocs.io/")
10560 (synopsis "Using Python functions as pipeline jobs")
10561 (description
10562 "Joblib is a set of tools to provide lightweight pipelining in Python.
10563In particular, joblib offers: transparent disk-caching of the output values
10564and lazy re-evaluation (memoize pattern), easy simple parallel computing
10565logging and tracing of the execution.")
10566 (license license:bsd-3)))
10567
10568(define-public python-daemon
10569 (package
10570 (name "python-daemon")
10571 (version "3.1.2")
10572 (source
10573 (origin
10574 (method git-fetch)
10575 (uri (git-reference
10576 (url "https://pagure.io/python-daemon")
10577 (commit (string-append "release/" version))))
10578 (file-name (git-file-name name version))
10579 (sha256
10580 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10581 (patches
10582 (search-patches "python-daemon-relax-lockfile.patch"))))
10583 (build-system pyproject-build-system)
10584 (arguments
10585 (list
10586 #:phases
10587 #~(modify-phases %standard-phases
10588 (add-after 'unpack 'discard-dynamic-metadata
10589 (lambda _
10590 (substitute* "pyproject.toml"
10591 (("^dynamic = " all)
10592 (format #f "version = ~s~%~a" #$version all))
10593 (("\"(description|readme|version|maintainers)\",")
10594 ""))
10595 (for-each delete-file
10596 '("setup.py"
10597 "test/test_util_metadata.py"
10598 "test/test_setup.py")))))))
10599 (propagated-inputs (list python-filelock))
10600 (native-inputs (list python-testscenarios python-setuptools))
10601 (home-page "https://pagure.io/python-daemon/")
10602 (synopsis "Python library for making a Unix daemon process")
10603 (description
10604 "Python-daemon is a library that assists a Python program to turn itself
10605into a well-behaved Unix daemon process, as specified in PEP 3143.
10606
10607This library provides a @code{DaemonContext} class that manages the following
10608important tasks for becoming a daemon process:
10609@enumerate
10610@item Detach the process into its own process group.
10611@item Set process environment appropriate for running inside a chroot.
10612@item Renounce suid and sgid privileges.
10613@item Close all open file descriptors.
10614@item Change the working directory, uid, gid, and umask.
10615@item Set appropriate signal handlers.
10616@item Open new file descriptors for stdin, stdout, and stderr.
10617@item Manage a specified PID lock file.
10618@item Register cleanup functions for at-exit processing.
10619@end enumerate")
10620 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10621 (license (list license:asl2.0 license:gpl3+))))
10622
10623(define-public python-annotated-types
10624 (package
10625 (name "python-annotated-types")
10626 (version "0.7.0")
10627 (source
10628 (origin
10629 (method url-fetch)
10630 (uri (pypi-uri "annotated_types" version))
10631 (sha256
10632 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10633 (build-system pyproject-build-system)
10634 (native-inputs
10635 (list python-hatchling
10636 python-pytest))
10637 (propagated-inputs (list python-typing-extensions))
10638 (home-page "https://github.com/annotated-types/annotated-types")
10639 (synopsis "Reusable constraint types to use with typing.Annotated")
10640 (description "This package provides metadata objects which can be used to
10641represent common constraints such as upper and lower bounds on scalar values and
10642collection sizes, a Predicate marker for runtime checks, and descriptions of how
10643we intend these metadata to be interpreted. In some cases, we also note
10644alternative representations which do not require this package.")
10645 (license license:expat)))
10646
10647(define-public python-anytree
10648 (package
10649 (name "python-anytree")
10650 (version "2.13.0")
10651 (source
10652 (origin
10653 (method git-fetch) ; no tests data in PyPi package
10654 (uri (git-reference
10655 (url "https://github.com/c0fec0de/anytree")
10656 (commit version)))
10657 (file-name (git-file-name name version))
10658 (sha256
10659 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10660 (build-system pyproject-build-system)
10661 (arguments
10662 (list
10663 #:phases
10664 #~(modify-phases %standard-phases
10665 (add-before 'check 'pre-check
10666 (lambda _
10667 ;; Tests need to write to that direcroty.
10668 (mkdir-p "tests/dotexport/"))))))
10669 (native-inputs
10670 (list graphviz ;for 'dot'
10671 python-pdm-backend
10672 python-pytest
10673 python-pyyaml
10674 python-test2ref))
10675 (home-page "https://github.com/c0fec0de/anytree")
10676 (synopsis "Lightweight tree data library")
10677 (description
10678 "@code{anytree} is a simple, lightweight, and extensible tree data
10679structure for Python.")
10680 (license license:asl2.0)))
10681
10682(define-public kalamine
10683 (package
10684 (name "kalamine")
10685 (version "0.38")
10686 (source
10687 (origin
10688 (method url-fetch)
10689 (uri (pypi-uri "kalamine" version))
10690 (sha256
10691 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10692 (build-system pyproject-build-system)
10693 (arguments
10694 (list
10695 #:phases
10696 #~(modify-phases %standard-phases
10697 (add-before 'check 'make-test-layouts
10698 (lambda _
10699 (apply invoke
10700 (cons* "python" "-m" "kalamine.cli" "build"
10701 (find-files "layouts" "\\.toml")))
10702 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10703 (propagated-inputs
10704 (list python-click
10705 python-livereload
10706 python-lxml
10707 python-progress
10708 python-pyyaml
10709 python-tomli))
10710 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10711 ;; packaged.
10712 (native-inputs
10713 (list python-hatchling python-pytest))
10714 (home-page "https://github.com/OneDeadKey/kalamine")
10715 (synopsis "Keyboard layout maker")
10716 (description
10717 "Kalamine provides a CLI to create advanced keyboard layout from a
10718textual portable description. It also supports layout emulation via web
10719browser.")
10720 (license license:expat)))
10721
10722(define-public python-dm-tree
10723 (package
10724 (name "python-dm-tree")
10725 (version "0.1.9")
10726 (source
10727 (origin
10728 (method url-fetch)
10729 (uri (pypi-uri "dm_tree" version))
10730 (sha256
10731 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10732 (build-system pyproject-build-system)
10733 (arguments
10734 (list #:tests? #f
10735 #:phases
10736 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10737 ;; and USE_SYSTEM_PYBIND11=true.
10738 #~(modify-phases %standard-phases
10739 (add-before 'build 'build-shared-lib
10740 (lambda _
10741 (let* ((pybind11 #$(this-package-input "pybind11"))
10742 (python #$(this-package-input "python"))
10743 (version (python-version python))
10744 (abseil-cpp #$(this-package-input "abseil-cpp")))
10745 ;; Delete default cmake build.
10746 (substitute* "setup.py"
10747 (("ext_modules.*") "")
10748 (("cmdclass.*") ""))
10749 ;; Actual build phase.
10750 (mkdir-p "build/temp/tree/")
10751 (invoke
10752 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10753 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10754 "-fno-semantic-interposition" "-fPIC"
10755 "-I" (string-append pybind11
10756 "/lib/python" version
10757 "/site-packages/pybind11/include")
10758 "-I" (string-append python "/include/python"
10759 version)
10760 "-I" (string-append abseil-cpp "/include")
10761 "-c" "tree/tree.cc"
10762 "-o" "build/temp/tree/tree.o"
10763 "-fvisibility=hidden" "-g0")
10764 (mkdir-p "build/lib/tree")
10765 (invoke
10766 "g++" "-pthread" "-shared"
10767 (string-append "-Wl," "-rpath=" python "/lib")
10768 "-fno-semantic-interposition"
10769 "build/temp/tree/tree.o"
10770 "-L" (string-append python "/lib")
10771 (string-append abseil-cpp "/lib/libabsl_int128.a")
10772 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10773 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10774 (string-append abseil-cpp "/lib/libabsl_strings.a")
10775 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10776 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10777 "-o" "build/lib/tree/_tree.so")))))))
10778 ;; We link the static abseil libraries here to avoid problems in
10779 ;; downstream libraries using potentially different variants of
10780 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10781 (native-inputs
10782 (list python-setuptools))
10783 (inputs
10784 (list pybind11-2
10785 static-abseil-cpp
10786 python))
10787 (propagated-inputs
10788 (list python-absl-py
10789 python-attrs
10790 python-numpy
10791 python-wrapt))
10792 (home-page "https://github.com/deepmind/tree")
10793 (synopsis "Work with nested data structures in Python")
10794 (description "Tree is a python library for working with nested data
10795structures. In a way, @code{tree} generalizes the builtin @code{map} function
10796which only supports flat sequences, and allows you to apply a function to each
10797leaf preserving the overall structure.")
10798 (license license:asl2.0)))
10799
10800(define-public python-pyment
10801 (package
10802 (name "python-pyment")
10803 (version "0.3.4")
10804 (source
10805 (origin
10806 (method git-fetch)
10807 (uri
10808 (git-reference
10809 (url "https://github.com/dadadel/pyment")
10810 (commit (string-append "v" version))))
10811 (file-name (git-file-name name version))
10812 (sha256
10813 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10814 (build-system pyproject-build-system)
10815 (native-inputs (list python-pytest python-setuptools))
10816 (home-page "https://github.com/dadadel/pyment/")
10817 (synopsis "Convert Python docstrings automatically")
10818 (description "Pyment is a command line tool and library that can be
10819used to convert between several docstring styles.")
10820 (license license:gpl3+)))
10821
10822(define-public python-docstring-parser
10823 (package
10824 (name "python-docstring-parser")
10825 (version "0.15")
10826 (source (origin
10827 (method url-fetch)
10828 (uri (pypi-uri "docstring_parser" version))
10829 (sha256
10830 (base32
10831 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10832 (build-system pyproject-build-system)
10833 (native-inputs (list python-poetry-core python-pytest))
10834 (home-page "https://github.com/rr-/docstring_parser")
10835 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10836 (description "This package lets you parse Python docstrings in reST,
10837Google and Numpydoc format.")
10838 (license license:expat)))
10839
10840(define-public python-docutils
10841 (package
10842 (name "python-docutils")
10843 (version "0.22.4")
10844 (source
10845 (origin
10846 (method url-fetch)
10847 (uri (pypi-uri "docutils" version))
10848 (sha256
10849 (base32 "0s4ryafs954ivgb7bifzpbv98vb2mcr0s8wi9nvwpglsvqgkpdad"))))
10850 (build-system pyproject-build-system)
10851 (arguments
10852 (list
10853 #:test-backend #~'custom
10854 #:test-flags #~(list "test/alltests.py")
10855 #:phases
10856 (if (target-hurd?)
10857 #~(modify-phases %standard-phases
10858 (add-before 'check 'fix-errno
10859 (lambda _
10860 ;; Some tests check for an exact error message
10861 ;; Expecting ENOENT == 2.
10862 (substitute* (find-files "test" "\\.py$")
10863 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10864 #~%standard-phases)))
10865 (native-inputs
10866 (list python-flit-core))
10867 (home-page "https://docutils.sourceforge.net/")
10868 (synopsis "Python Documentation Utilities")
10869 (description
10870 "Docutils is a modular system for processing documentation into useful
10871formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10872easy to use markup language, for input.
10873
10874This package provides tools for converting @file{.rst} files to other formats
10875via commands such as @command{rst2man}, as well as supporting Python code.")
10876 ;; Most of the source code is public domain, but some source files are
10877 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10878 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10879
10880(define-public python-docutils-0.19
10881 (hidden-package
10882 (package
10883 (inherit python-docutils)
10884 (version "0.19")
10885 (source (origin
10886 (method url-fetch)
10887 (uri (pypi-uri "docutils" version))
10888 (sha256
10889 (base32
10890 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10891 (native-inputs
10892 (list python-setuptools)))))
10893
10894(define-public python-docx
10895 (package
10896 (name "python-docx")
10897 (version "1.2.0")
10898 (source (origin
10899 (method url-fetch)
10900 (uri (pypi-uri "python_docx" version))
10901 (sha256
10902 (base32
10903 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10904 (build-system pyproject-build-system)
10905 (native-inputs
10906 (list behave
10907 python-pyparsing
10908 python-pytest
10909 python-setuptools
10910 python-wheel))
10911 (propagated-inputs
10912 (list python-lxml python-typing-extensions))
10913 (home-page "https://github.com/python-openxml/python-docx/")
10914 (synopsis "Python library to create and modify Microsoft Word documents")
10915 (description "This Python library can be used to create and update
10916Microsoft Word (.docx) documents.")
10917 (license license:expat)))
10918
10919(define-public python-repoze-lru
10920 (package
10921 (name "python-repoze-lru")
10922 (version "0.7")
10923 (source
10924 (origin
10925 (method url-fetch)
10926 (uri (pypi-uri "repoze.lru" version))
10927 (sha256
10928 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10929 (build-system pyproject-build-system)
10930 (arguments
10931 (list
10932 #:test-backend #~'unittest
10933 #:test-flags #~(list "discover" "repoze")))
10934 (native-inputs
10935 (list python-setuptools))
10936 (home-page "https://www.repoze.org")
10937 (synopsis "Tiny LRU cache implementation and decorator")
10938 (description
10939 "This package provides a tiny LRU cache implementation and decorator.")
10940 (license license:bsd-4)))
10941
10942(define-public python-reretry
10943 (package
10944 (name "python-reretry")
10945 (version "0.11.8")
10946 (source
10947 (origin
10948 (method git-fetch)
10949 (uri (git-reference
10950 (url "https://github.com/leshchenko1979/reretry")
10951 (commit version)))
10952 (file-name (git-file-name name version))
10953 (sha256
10954 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10955 (build-system pyproject-build-system)
10956 (native-inputs
10957 (list python-pytest python-pytest-asyncio python-setuptools))
10958 (home-page "https://github.com/leshchenko1979/reretry")
10959 (synopsis "Functional decorator for retrying on exceptions")
10960 (description
10961 "This package is a fork from the retry package, but with some of added
10962community-sourced features. It provides an easy to use, but functional
10963decorator for retrying on exceptions.")
10964 (license license:asl2.0)))
10965
10966(define-public python-restructuredtext-lint
10967 (package
10968 (name "python-restructuredtext-lint")
10969 (version "2.0.2")
10970 (source
10971 (origin
10972 (method git-fetch)
10973 (uri (git-reference
10974 (url "https://github.com/twolfson/restructuredtext-lint")
10975 (commit version)))
10976 (file-name (git-file-name name version))
10977 (sha256
10978 (base32 "1q86a1qd9xwyl5h76b4yk2hpbnbyq6llla7rmnnp9ifrgax6vx6j"))))
10979 (build-system pyproject-build-system)
10980 (arguments (list #:test-backend #~'unittest))
10981 (propagated-inputs (list python-docutils))
10982 (native-inputs (list python-setuptools))
10983 (home-page "https://github.com/twolfson/restructuredtext-lint")
10984 (synopsis "Linter")
10985 (description
10986 "This package provides a linter for the reStructuredText format.")
10987 (license license:unlicense)))
10988
10989(define-public python-click-repl
10990 (package
10991 (name "python-click-repl")
10992 ;; To support Python 3.12, see:
10993 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10994 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10995 (revision . "1")))
10996 (version (git-version "0.3.0"
10997 (assoc-ref properties 'revision)
10998 (assoc-ref properties 'commit)))
10999 (source
11000 (origin
11001 (method git-fetch)
11002 (uri (git-reference
11003 (url "https://github.com/click-contrib/click-repl")
11004 (commit (assoc-ref properties 'commit))))
11005 (file-name (git-file-name name version))
11006 (sha256
11007 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
11008 (build-system pyproject-build-system)
11009 (native-inputs
11010 (list python-pytest
11011 python-setuptools))
11012 (propagated-inputs
11013 (list python-click
11014 python-prompt-toolkit))
11015 (home-page "https://github.com/click-contrib/click-repl")
11016 (synopsis "REPL plugin for Click")
11017 (description "This package provides a REPL plugin for Click.")
11018 (license license:expat)))
11019
11020(define-public python-pygdbmi
11021 (package
11022 (name "python-pygdbmi")
11023 (version "0.11.0.0")
11024 (source
11025 (origin
11026 (method url-fetch)
11027 (uri (pypi-uri "pygdbmi" version))
11028 (sha256
11029 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
11030 (build-system pyproject-build-system)
11031 (arguments (list #:tests? #f)) ;no tests in PyPI archive
11032 (native-inputs (list python-setuptools python-wheel))
11033 (home-page "https://github.com/cs01/pygdbmi")
11034 (synopsis "Parse gdb machine interface output with Python")
11035 (description "This package provides a parse gdb machine interface output
11036with Python.")
11037 (license license:expat)))
11038
11039(define-public python-pygtrie
11040 (package
11041 (name "python-pygtrie")
11042 (version "2.5.0")
11043 (source
11044 (origin
11045 (method git-fetch)
11046 (uri (git-reference
11047 (url "https://github.com/mina86/pygtrie")
11048 (commit (string-append "v" version))))
11049 (file-name (git-file-name name version))
11050 (sha256
11051 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
11052 (build-system pyproject-build-system)
11053 (arguments
11054 (list
11055 #:test-backend #~'unittest
11056 #:phases
11057 #~(modify-phases %standard-phases
11058 (add-after 'unpack 'set-version
11059 (lambda _
11060 (delete-file "version.py")
11061 (substitute* "setup.py"
11062 (("import version")
11063 "")
11064 (("version\\.get_version\\(\\)")
11065 (format #f "~s" #$version))))))))
11066 (native-inputs (list python-setuptools))
11067 (home-page "https://github.com/mina86/pygtrie")
11068 (synopsis "Pure Python trie data structure implementation")
11069 (description
11070 "This package provides a pure Python trie data structure implementation.")
11071 (license license:asl2.0)))
11072
11073(define-public python-bump2version
11074 (package
11075 (name "python-bump2version")
11076 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
11077 (revision . "1")))
11078 (version (git-version "1.0.1"
11079 (assoc-ref properties 'revision)
11080 (assoc-ref properties 'commit)))
11081 (source
11082 (origin
11083 (method git-fetch)
11084 (uri (git-reference
11085 (url "https://github.com/c4urself/bump2version")
11086 (commit (assoc-ref properties 'commit))))
11087 (file-name (git-file-name name version))
11088 (sha256
11089 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
11090 (build-system pyproject-build-system)
11091 (arguments
11092 ;; XXX: Single flaky failing test.
11093 (list #:test-flags #~(list "-k" "not test_usage_string")))
11094 (native-inputs (list python-pytest python-setuptools python-testfixtures))
11095 (home-page "https://github.com/c4urself/bump2version")
11096 (synopsis "Version-bump your software with a single command!")
11097 (description
11098 "This package provides a small command line tool to simplify releasing
11099software by updating all version strings in your source code by the correct
11100increment. It also creates commits and tags.")
11101 (license license:expat)))
11102
11103(define-public python-deprecated
11104 (package
11105 (name "python-deprecated")
11106 (version "1.3.1")
11107 (source
11108 (origin
11109 (method git-fetch)
11110 (uri (git-reference
11111 (url "https://github.com/tantale/deprecated")
11112 (commit (string-append "v" version))))
11113 (file-name (git-file-name name version))
11114 (sha256
11115 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
11116 (build-system pyproject-build-system)
11117 (native-inputs
11118 (list python-pytest
11119 python-setuptools))
11120 (propagated-inputs
11121 (list python-wrapt))
11122 (home-page "https://github.com/tantale/deprecated")
11123 (synopsis "Python decorator to deprecate classes, functions or methods")
11124 (description
11125 "The @code{deprecated} decorator provides a convenient way to deprecate
11126to deprecate classes, functions or methods.")
11127 (license license:expat)))
11128
11129(define-public python-pygithub
11130 (package
11131 (name "python-pygithub")
11132 (version "2.8.1")
11133 (source
11134 (origin
11135 (method git-fetch)
11136 (uri (git-reference
11137 (url "https://github.com/PyGithub/PyGithub")
11138 (commit (string-append "v" version))))
11139 (file-name (git-file-name name version))
11140 (sha256
11141 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
11142 (build-system pyproject-build-system)
11143 (propagated-inputs
11144 (list python-pyjwt
11145 python-pynacl
11146 python-requests
11147 python-typing-extensions
11148 python-urllib3))
11149 (native-inputs
11150 (list python-responses
11151 python-pytest
11152 python-setuptools
11153 python-setuptools-scm))
11154 (home-page "https://pygithub.readthedocs.io/en/latest/")
11155 (synopsis "Python library for the GitHub API")
11156 (description "This library allows managing GitHub resources such as
11157repositories, user profiles, and organizations in your Python applications,
11158using version 3 of the GitHub application programming interface (API).")
11159 (license license:lgpl3+)))
11160
11161(define-public python-rellu
11162 (package
11163 (name "python-rellu")
11164 (version "0.7")
11165 (source
11166 (origin
11167 (method git-fetch)
11168 (uri (git-reference
11169 (url "https://github.com/robotframework/rellu")
11170 (commit (string-append "v" version))))
11171 (file-name (git-file-name name version))
11172 (sha256
11173 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
11174 (build-system pyproject-build-system)
11175 (native-inputs (list python-pytest python-setuptools))
11176 (propagated-inputs (list python-invoke python-pygithub))
11177 (home-page "https://github.com/robotframework/rellu")
11178 (synopsis "Utilities to create PyPI releases")
11179 (description
11180 "This collection of utilities contains tooling and templates to assist in
11181creating releases on GitHub and publishing them on PyPI. It is designed to be
11182used by Robot Framework and tools and libraries in its ecosystem, but can
11183naturally be used also by other projects.")
11184 (license license:asl2.0)))
11185
11186(define-public python-robotframework
11187 (package
11188 (name "python-robotframework")
11189 (version "7.3.2")
11190 (source
11191 (origin
11192 (method git-fetch) ; no tests in the PyPI archive
11193 (uri (git-reference
11194 (url "https://github.com/robotframework/robotframework")
11195 (commit (string-append "v" version))))
11196 (file-name (git-file-name name version))
11197 (sha256
11198 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
11199 (outputs '("out" "doc"))
11200 (build-system pyproject-build-system)
11201 (arguments
11202 (list
11203 #:modules '((guix build pyproject-build-system)
11204 (guix build utils)
11205 (ice-9 ftw)
11206 (ice-9 match)
11207 (srfi srfi-26))
11208 #:phases
11209 #~(modify-phases %standard-phases
11210 (add-before 'build 'build-and-install-doc
11211 (lambda* (#:key outputs #:allow-other-keys)
11212 (let ((doc (string-append #$output:doc
11213 "/share/doc/robotframework")))
11214 (invoke "invoke" "library-docs" "all")
11215 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
11216 (mkdir-p doc)
11217 (with-directory-excursion "dist"
11218 (define user-guide-dir
11219 (match (scandir "." (cut string-prefix?
11220 "robotframework-userguide-" <>))
11221 ((dir) dir)
11222 (_ (error "could not find the user guide directory"))))
11223 (copy-recursively user-guide-dir doc)))))
11224 (replace 'check
11225 (lambda* (#:key tests? #:allow-other-keys)
11226 (when tests?
11227 ;; TODO: Some acceptance failed and took near 30min to
11228 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
11229 ;; to skip failing ones.
11230 (format #t "Running unit tests...~%")
11231 (invoke "utest/run.py")))))))
11232 (native-inputs
11233 (list python-docutils
11234 python-invoke
11235 python-jsonschema
11236 python-pygments
11237 python-rellu
11238 python-typing-extensions
11239 python-setuptools
11240 `(,python "tk") ;used when building the HTML doc
11241 python-wheel))
11242 (home-page "https://robotframework.org")
11243 (synopsis "Generic automation framework")
11244 (description "Robot Framework is a generic automation framework for
11245acceptance testing, acceptance test driven development (ATDD), and robotic
11246process automation (RPA).")
11247 (license license:asl2.0)))
11248
11249(define-public python-robotframework-datadriver
11250 (package
11251 (name "python-robotframework-datadriver")
11252 (version "1.11.2")
11253 (source
11254 (origin
11255 (method git-fetch) ; no tests in PyPI release
11256 (uri (git-reference
11257 (url "https://github.com/Snooz82/robotframework-datadriver")
11258 (commit version)))
11259 (file-name (git-file-name name version))
11260 (sha256
11261 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
11262 (build-system pyproject-build-system)
11263 (arguments
11264 (list
11265 #:phases
11266 #~(modify-phases %standard-phases
11267 (add-before 'check 'skip-problematic-tests
11268 (lambda _
11269 (for-each delete-file-recursively
11270 (list
11271 ;; The test file 'tab-csv-file-name.tsv' contains
11272 ;; special characters for which there is no locale
11273 ;; in the build environment, causing one test to
11274 ;; fail.
11275 "atest/TestCases/csv_reader_config"
11276 ;; Error in file on line 6: Non-existing setting
11277 ;; 'Test Tags'.
11278 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
11279 (replace 'check
11280 (lambda* (#:key tests? #:allow-other-keys)
11281 (when tests?
11282 (with-directory-excursion "atest"
11283 (invoke "sh" "run_atest.sh"))))))))
11284 (native-inputs
11285 (list python-docutils
11286 python-robotframework-stacktrace
11287 python-setuptools
11288 python-xlrd))
11289 (propagated-inputs
11290 (list python-openpyxl
11291 python-pandas
11292 python-pygments
11293 python-robotframework))
11294 (home-page "https://github.com/Snooz82/robotframework-datadriver")
11295 (synopsis "Data-driven test extension for Robot Framework")
11296 (description "DataDriver is a data-driven extension for Robot Framework.
11297DataDriver uses the Listener Interface of Robot Framework to create new test
11298cases based on a data file that contains the test data. DataDriver supports
11299data files in the CSV, XLS or XLSX formats.")
11300 (license license:asl2.0)))
11301
11302(define-public python-robotframework-pabot
11303 (package
11304 (name "python-robotframework-pabot")
11305 (version "4.2.0")
11306 (source
11307 (origin
11308 ;; There are no tests in the PyPI archive.
11309 (method git-fetch)
11310 (uri (git-reference
11311 (url "https://github.com/mkorpela/pabot")
11312 (commit version)))
11313 (file-name (git-file-name name version))
11314 (sha256
11315 (base32
11316 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11317 (build-system pyproject-build-system)
11318 (arguments
11319 (list
11320 #:test-flags
11321 #~(list "-k" (string-join
11322 ;; XXX: Maybe it's a bad idea to skip these tests which
11323 ;; failing assertions highlight incomparability issues.
11324 ;;
11325 ;; 93 passed, 23 deselected, 11 warnings
11326 (list "not test_argumentfile_outputs"
11327 "test_dependency_ok"
11328 "test_longnames_in_tests"
11329 "test_multiple_dependencies_ok"
11330 "test_orders"
11331 "test_pabotprerunmodifier"
11332 "test_pabotprerunmodifier_with_prerunmodifier"
11333 "test_pabotprerunmodifier_with_testlevelsplit"
11334 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11335 "test_parallel_execution"
11336 "test_parallel_execution_with_testlevelsplit"
11337 "test_pre_run_with_new_name"
11338 "test_pre_run_with_new_tag"
11339 "test_run_dir_2_then_dir_3"
11340 "test_run_dir_3_then_dir_2"
11341 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11342 "test_sleep_test_cases_and_group"
11343 "test_stdout_should_display_passed_test"
11344 "test_stdout_should_display_passed_test"
11345 "test_stdout_should_display_passed_test_and_not_"
11346 "test_testlevelsplit_output_task_order"
11347 "test_too_big_testname"
11348 "test_two_orders")
11349 " and not "))
11350 #:phases
11351 #~(modify-phases %standard-phases
11352 (add-after 'unpack 'relax-requirements
11353 (lambda _
11354 (substitute* "setup.cfg"
11355 ;; natsort>=8.2.0
11356 ((">=8.2.0") "")))))))
11357 (native-inputs
11358 (list python-pytest
11359 python-setuptools
11360 python-wheel))
11361 (propagated-inputs
11362 (list python-natsort
11363 python-robotframework
11364 python-robotframework-stacktrace))
11365 (home-page "https://pabot.org")
11366 (synopsis "Parallel test runner for Robot Framework")
11367 (description "Pabot is a parallel executor for Robot Framework tests.")
11368 (license license:asl2.0)))
11369
11370(define-public python-robotframework-stacktrace
11371 (package
11372 (name "python-robotframework-stacktrace")
11373 (version "0.4.1")
11374 (source
11375 (origin
11376 (method git-fetch)
11377 (uri (git-reference
11378 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11379 (commit version)))
11380 (file-name (git-file-name name version))
11381 (sha256
11382 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11383 (build-system pyproject-build-system)
11384 (arguments
11385 ;; XXX: The test suite fails (see:
11386 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11387 (list
11388 #:tests? #f
11389 #:phases
11390 #~(modify-phases %standard-phases
11391 (add-after 'unpack 'set-version
11392 (lambda _
11393 (substitute* "setup.py"
11394 (("VERSION =.*")
11395 (string-append "VERSION = '" #$version "'"))))))))
11396 (native-inputs (list python-setuptools))
11397 (propagated-inputs (list python-robotframework))
11398 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11399 (synopsis "Robot Framework listener to print a stack trace on error")
11400 (description "StackTrace is a Robot Framework listener that prints a stack
11401trace directly to the terminal to ease debugging.")
11402 (license license:asl2.0)))
11403
11404(define-public python-robotframework-sshlibrary
11405 (package
11406 (name "python-robotframework-sshlibrary")
11407 (version "3.8.0")
11408 ;; There are no tests in the PyPI archive.
11409 (source
11410 (origin
11411 (method git-fetch)
11412 (uri (git-reference
11413 (url "https://github.com/robotframework/SSHLibrary")
11414 (commit (string-append "v" version))))
11415 (file-name (git-file-name name version))
11416 (sha256
11417 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11418 (patches (search-patches
11419 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11420 (build-system pyproject-build-system)
11421 (arguments
11422 (list
11423 #:phases
11424 #~(modify-phases %standard-phases
11425 (add-after 'unpack 'fix-python-incompatibilities
11426 (lambda _
11427 (substitute* (find-files "utest" "\\.py$")
11428 (("assertEquals") "assertEqual"))))
11429 (add-before 'build 'build-and-install-doc
11430 (lambda _
11431 (let ((doc (string-append #$output:doc
11432 "/share/doc/robotframework-sshlibrary")))
11433 (invoke "chmod" "-R" "+w" "docs")
11434 (invoke "invoke" "kw-docs" "project-docs")
11435 (mkdir-p doc)
11436 (for-each delete-file
11437 (find-files "docs" "\\.rst"))
11438 (copy-recursively "docs" doc))))
11439 (replace 'check
11440 (lambda* (#:key tests? #:allow-other-keys)
11441 (when tests?
11442 ;; Some tests require an SSH server; we remove them.
11443 (delete-file "utest/test_client_api.py")
11444 (delete-file "utest/test_scp.py")
11445 (invoke "python" "utest/run.py")))))))
11446 (propagated-inputs
11447 (list python-robotframework python-paramiko python-scp))
11448 (native-inputs
11449 (list openssh
11450 which
11451 ;; To generate the documentation
11452 python-docutils
11453 python-invoke
11454 python-pygments
11455 python-rellu
11456 python-setuptools))
11457 (outputs '("out" "doc"))
11458 (home-page "https://github.com/robotframework/SSHLibrary")
11459 (synopsis "Robot Framework library for SSH and SFTP")
11460 (description
11461 "SSHLibrary is a Robot Framework library providing support for SSH and
11462SFTP. It has the following main usages:
11463@itemize @bullet
11464@item Executing commands on the remote machine, either blocking or non-blocking.
11465@item Writing and reading in an interactive shell.
11466@item Transferring files and directories over SFTP.
11467@item Ensuring that files and directories exist on the remote machine.
11468@end itemize")
11469 (license license:asl2.0)))
11470
11471(define-public python-robotframework-pythonlibcore
11472 (package
11473 (name "python-robotframework-pythonlibcore")
11474 (version "4.4.1")
11475 (source
11476 (origin
11477 (method git-fetch) ;no tests in pypi archive
11478 (uri (git-reference
11479 (url "https://github.com/robotframework/PythonLibCore")
11480 (commit (string-append "v" version))))
11481 (file-name (git-file-name name version))
11482 (sha256
11483 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11484 (build-system pyproject-build-system)
11485 (arguments
11486 (list
11487 #:test-backend #~'custom
11488 #:test-flags #~(list "utest/run.py")))
11489 (native-inputs
11490 (list python-approvaltests
11491 python-pytest
11492 python-pytest-cov ; This package has a custom way to run tests.
11493 python-pytest-mockito
11494 python-robotframework
11495 python-setuptools))
11496 (home-page "https://github.com/robotframework/PythonLibCore")
11497 (synopsis "Robot Framework Python library tools")
11498 (description
11499 "PythonLibCore provides tools for creating larger test libraries for
11500Robot Framework using Python. The Robot Framework hybrid and dynamic library
11501APIs give more flexibility for library than the static library API, but they
11502also set requirements for libraries which need to be implemented in the
11503library side. PythonLibCore eases the problem by providing a simpler
11504interface and by handling all the requirements towards the Robot Framework
11505library APIs.")
11506 (license license:asl2.0)))
11507
11508(define-public python-robotframework-seleniumlibrary
11509 (package
11510 (name "python-robotframework-seleniumlibrary")
11511 (version "6.8.0")
11512 (source
11513 (origin
11514 (method git-fetch)
11515 (uri (git-reference
11516 (url "https://github.com/robotframework/SeleniumLibrary")
11517 (commit (string-append "v" version))))
11518 (file-name (git-file-name name version))
11519 (sha256
11520 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11521 (build-system pyproject-build-system)
11522 (arguments
11523 (list
11524 #:test-flags
11525 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11526 "-k" (string-join
11527 (list "not test_create_firefox_with_options"
11528 "test_create_headless_firefox_with_options"
11529 "test_create_driver_firefox")
11530 " and not "))))
11531 (native-inputs
11532 (list python-approvaltests
11533 python-pytest
11534 python-pytest-mockito
11535 python-setuptools))
11536 (propagated-inputs
11537 (list python-click
11538 python-robotframework
11539 python-robotframework-pythonlibcore
11540 python-selenium))
11541 (home-page "https://github.com/robotframework/SeleniumLibrary")
11542 (synopsis "Web testing library for Robot Framework")
11543 (description "SeleniumLibrary is a web testing library for Robot Framework
11544that utilizes the Selenium tool internally.")
11545 (license license:asl2.0)))
11546
11547(define-public python-robotframework-seleniumscreenshots
11548 (package
11549 (name "python-robotframework-seleniumscreenshots")
11550 (version "0.9.5")
11551 (source
11552 (origin
11553 (method git-fetch)
11554 (uri (git-reference
11555 (url
11556 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11557 (commit version)))
11558 (file-name (git-file-name name version))
11559 (sha256
11560 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11561 (build-system pyproject-build-system)
11562 (arguments
11563 ;; XXX: The tests require a relatively complicated setup configured in
11564 ;; their CI with Nix (!).
11565 `(#:tests? #f))
11566 (native-inputs (list python-setuptools))
11567 (propagated-inputs
11568 (list python-robotframework python-robotframework-seleniumlibrary))
11569 (home-page
11570 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11571 (synopsis
11572 "Robot Framework library for annotating and cropping screenshots")
11573 (description
11574 "The SeleniumScreenshots library for Robot Framework provides keywords
11575for annotating and cropping screenshots taken with SeleniumLibrary. It is
11576useful for scripting automatically updated screenshots for documentation or
11577for visual regression testing purposes.")
11578 (license license:bsd-3)))
11579
11580(define-public python-rstr
11581 (package
11582 (name "python-rstr")
11583 (version "3.2.2")
11584 (source
11585 (origin
11586 (method git-fetch)
11587 (uri (git-reference
11588 (url "https://github.com/leapfrogonline/rstr")
11589 (commit version)))
11590 (file-name (git-file-name name version))
11591 (sha256
11592 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11593 (build-system pyproject-build-system)
11594 (native-inputs (list python-pytest
11595 python-setuptools
11596 python-setuptools-scm
11597 python-wheel))
11598 (home-page "https://github.com/leapfrogonline/rstr")
11599 (synopsis "Generate random strings in Python")
11600 (description "This package provides a python module for generating
11601random strings of various types. It could be useful for fuzz testing,
11602generating dummy data, or other applications. It has no dependencies
11603outside the standard library.")
11604 (license license:bsd-3)))
11605
11606(define-public python-scp
11607 (package
11608 (name "python-scp")
11609 (version "0.15.0")
11610 (source
11611 (origin
11612 (method git-fetch)
11613 (uri (git-reference
11614 (url "https://github.com/jbardin/scp.py")
11615 (commit (string-append "v" version))))
11616 (file-name (git-file-name name version))
11617 (sha256
11618 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11619 (build-system pyproject-build-system)
11620 (arguments (list #:tests? #f)) ;tests require an SSH server
11621 (native-inputs (list python-setuptools))
11622 (propagated-inputs (list python-paramiko))
11623 (home-page "https://github.com/jbardin/scp.py")
11624 (synopsis "SCP protocol module for Python and Paramiko")
11625 (description
11626 "The scp module extends the Paramiko library to send and receive files
11627via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11628 (license license:gpl2+)))
11629
11630(define-public python-rst-linker
11631 (package
11632 (name "python-rst-linker")
11633 (version "2.6.0")
11634 (source
11635 (origin
11636 (method git-fetch)
11637 (uri (git-reference
11638 (url "https://github.com/jaraco/rst.linker")
11639 (commit (string-append "v" version))))
11640 (file-name (git-file-name name version))
11641 (sha256
11642 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11643 (build-system pyproject-build-system)
11644 (propagated-inputs (list python-jaraco-context))
11645 (native-inputs
11646 (list python-path
11647 python-jaraco-vcs
11648 python-pytest
11649 python-pytest-subprocess
11650 python-setuptools-scm
11651 python-setuptools))
11652 (home-page "https://github.com/jaraco/rst.linker")
11653 (synopsis "Sphinx plugin to add links and timestamps")
11654 (description
11655 "rst.linker automatically replaces text by a reStructuredText external
11656reference or timestamps. It's primary purpose is to augment the changelog,
11657but it can be used for other documents, too.")
11658 (license license:expat)))
11659
11660(define-public python-feedgenerator
11661 (package
11662 (name "python-feedgenerator")
11663 (version "2.1.0")
11664 (source
11665 (origin
11666 (method url-fetch)
11667 (uri (pypi-uri "feedgenerator" version))
11668 (sha256
11669 (base32
11670 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11671 (build-system pyproject-build-system)
11672 (native-inputs
11673 (list python-pytest python-setuptools python-wheel))
11674 (propagated-inputs
11675 (list python-pytz))
11676 (home-page "https://github.com/getpelican/feedgenerator")
11677 (synopsis
11678 "Standalone version of Django's Atom/RSS feed generator")
11679 (description
11680 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11681which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11682 (license license:bsd-3)))
11683
11684(define-public python-lsp-jsonrpc
11685 (package
11686 (name "python-lsp-jsonrpc")
11687 (version "1.1.2")
11688 (source
11689 (origin
11690 (method url-fetch)
11691 (uri (pypi-uri "python-lsp-jsonrpc" version))
11692 (sha256
11693 (base32
11694 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11695 (build-system pyproject-build-system)
11696 (native-inputs
11697 (list python-pyflakes
11698 python-pytest
11699 python-setuptools
11700 python-setuptools-scm
11701 python-wheel))
11702 (propagated-inputs
11703 (list python-ujson))
11704 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11705 (synopsis "JSON RPC 2.0 server library")
11706 (description
11707 "This package provides a JSON RPC 2.0 server library for Python.")
11708 (license license:expat)))
11709
11710(define-public python-pydantic
11711 (package
11712 (name "python-pydantic")
11713 (version "2.12.5")
11714 (source
11715 (origin
11716 (method git-fetch)
11717 (uri (git-reference
11718 (url "https://github.com/samuelcolvin/pydantic")
11719 (commit (string-append "v" version))))
11720 (file-name (git-file-name name version))
11721 (sha256
11722 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11723 (build-system pyproject-build-system)
11724 (arguments
11725 (list
11726 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11727 #:test-flags
11728 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11729 (native-inputs
11730 (list tzdata-for-tests
11731 python-dirty-equals-bootstrap
11732 python-faker
11733 python-hatch-fancy-pypi-readme
11734 python-hatchling
11735 python-jsonschema
11736 python-pytest
11737 python-pytest-benchmark
11738 python-pytest-examples
11739 python-pytest-mock
11740 python-pytest-run-parallel
11741 python-pytz))
11742 (propagated-inputs
11743 (list python-annotated-types
11744 python-pydantic-core ;it's hard == requirement, keep it in sync
11745 python-typing-extensions
11746 python-typing-inspection))
11747 (home-page "https://github.com/samuelcolvin/pydantic")
11748 (synopsis "Python data validation and settings management")
11749 (description
11750 "Pydantic enforces type hints at runtime, and provides user friendly
11751errors when data is invalid.")
11752 (license license:expat)))
11753
11754(define-public python-pydantic-core
11755 (package
11756 (name "python-pydantic-core")
11757 (version "2.41.5")
11758 (source
11759 (origin
11760 (method url-fetch)
11761 (uri (pypi-uri "pydantic_core" version))
11762 (sha256
11763 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11764 (build-system pyproject-build-system)
11765 (arguments
11766 (list
11767 #:imported-modules `(,@%cargo-build-system-modules
11768 ,@%pyproject-build-system-modules)
11769 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11770 (guix build pyproject-build-system)
11771 (guix build utils))
11772 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11773 #:test-flags
11774 #~(list "--ignore=tests/benchmarks"
11775 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11776 ;; python-pydantic-core -> python-pydantic ->
11777 ;; python-inline-snapshot -> python-pydantic-core
11778 "--ignore=tests/test_docstrings.py"
11779 "--ignore=tests/test_hypothesis.py"
11780 "--ignore=tests/validators/test_allow_partial.py"
11781 "--ignore=tests/validators/test_frozenset.py"
11782 "--ignore=tests/validators/test_list.py"
11783 "--ignore=tests/validators/test_set.py")
11784 #:phases
11785 #~(modify-phases %standard-phases
11786 (add-after 'unpack 'prepare-cargo-build-system
11787 (lambda args
11788 (for-each (lambda (phase)
11789 (format #t "Running cargo phase: ~a~%" phase)
11790 (apply (assoc-ref cargo:%standard-phases phase)
11791 #:cargo-target #$(cargo-triplet)
11792 args))
11793 '(unpack-rust-crates
11794 configure
11795 check-for-pregenerated-files
11796 patch-cargo-checksums)))))))
11797 (native-inputs
11798 (append
11799 (list maturin
11800 python-dirty-equals-bootstrap
11801 python-pytest
11802 python-pytest-benchmark ;TODO: disable in pyproject.toml
11803 python-pytest-mock
11804 python-pytest-timeout
11805 python-typing-inspection
11806 python-tzdata
11807 rust
11808 `(,rust "cargo"))
11809 (or (and=> (%current-target-system)
11810 (compose list make-rust-sysroot))
11811 '())))
11812 (inputs
11813 (cargo-inputs 'python-pydantic-core))
11814 (propagated-inputs
11815 (list python-typing-extensions))
11816 (home-page "https://github.com/pydantic/pydantic-core")
11817 (synopsis "Core validation logic for pydantic")
11818 (description "This package provides the core functionality for pydantic
11819validation and serialization.")
11820 (license license:expat)))
11821
11822(define-public python-pydantic-cli
11823 (package
11824 (name "python-pydantic-cli")
11825 (version "9.1.0")
11826 (source
11827 (origin
11828 (method git-fetch) ;for tests
11829 (uri (git-reference
11830 (url "https://github.com/mpkocher/pydantic-cli")
11831 (commit (string-append "v" version))))
11832 (file-name (git-file-name name version))
11833 (sha256
11834 (base32
11835 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11836 (build-system pyproject-build-system)
11837 (propagated-inputs
11838 (list python-pydantic))
11839 (native-inputs
11840 (list python-hatchling python-pytest))
11841 (home-page "https://github.com/mpkocher/pydantic-cli")
11842 (synopsis "Turn Pydantic defined data models into CLI tools")
11843 (description
11844 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11845Interfaces} via data models provided in the JSON format.")
11846 (license license:expat)))
11847
11848(define-public python-pydantic-extra-types
11849 (package
11850 (name "python-pydantic-extra-types")
11851 (version "2.10.6")
11852 (source
11853 (origin
11854 (method git-fetch)
11855 (uri (git-reference
11856 (url "https://github.com/pydantic/pydantic-extra-types")
11857 (commit (string-append "v" version))))
11858 (file-name (git-file-name name version))
11859 (sha256
11860 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11861 (build-system pyproject-build-system)
11862 (arguments
11863 (list
11864 ;; tests: 13079 passed, 1 deselected
11865 #:test-flags
11866 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11867 #~(list "--ignore=tests/test_s3.py"
11868 "--deselect=tests/test_coordinate.py::test_json_schema"
11869 ;; XXX: The most of the tests fail, pendulum is optional package
11870 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11871 ;; requires Rust.
11872 "--ignore=tests/test_pendulum_dt.py"
11873 "--ignore=tests/test_json_schema.py")
11874 #:phases
11875 #~(modify-phases %standard-phases
11876 (add-before 'check 'pre-check
11877 (lambda* (#:key inputs #:allow-other-keys)
11878 (setenv "TZ" "UTC")
11879 (setenv "TZDIR" (search-input-directory inputs
11880 "share/zoneinfo")))))))
11881 (native-inputs
11882 (list python-pytest
11883 python-hatchling
11884 tzdata-for-tests))
11885 (propagated-inputs
11886 (list python-pydantic
11887 python-typing-extensions
11888 ;; [optional]
11889 python-cron-converter
11890 ;; python-pendulum
11891 python-phonenumbers
11892 python-pycountry
11893 python-pymongo
11894 python-pytz
11895 python-semver
11896 python-tzdata
11897 python-ulid))
11898 (home-page "https://github.com/pydantic/pydantic-extra-types")
11899 (synopsis "Extra Pydantic types")
11900 (description "This package provides sxtra types for Pydantic.")
11901 (license license:expat)))
11902
11903(define-public python-pydantic-settings
11904 (package
11905 (name "python-pydantic-settings")
11906 (version "2.12.0")
11907 (source
11908 (origin
11909 (method url-fetch)
11910 (uri (pypi-uri "pydantic_settings" version))
11911 (sha256
11912 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11913 (build-system pyproject-build-system)
11914 (arguments
11915 (list
11916 ;; tests: 399 passed, 27 skipped
11917 #:test-flags
11918 ;; XXX: Ignore tests requiring python-ruff.
11919 #~(list "--ignore=tests/test_docs.py")
11920 #:phases
11921 #~(modify-phases %standard-phases
11922 (add-before 'check 'set-home
11923 (lambda _
11924 ;; FileNotFoundError: [Errno 2] No such file or directory:
11925 ;; '/homeless-shelter/
11926 (setenv "HOME" "/tmp"))))))
11927 (native-inputs
11928 (list python-hatchling
11929 python-pytest
11930 python-pytest-examples
11931 python-pytest-mock))
11932 (propagated-inputs
11933 (list python-dotenv
11934 python-pydantic
11935 python-typing-inspection
11936 ;; [optional]
11937 python-pyyaml
11938 python-tomli))
11939 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11940 (synopsis "Settings management using Pydantic")
11941 (description
11942 "Pydantic Settings provides optional Pydantic features for loading a
11943settings or config class from environment variables or secrets files.")
11944 (license license:expat)))
11945
11946(define-public python-pydoc-markdown
11947 (package
11948 (name "python-pydoc-markdown")
11949 (version "4.8.2")
11950 (source
11951 (origin
11952 (method url-fetch)
11953 (uri (pypi-uri "pydoc_markdown" version))
11954 (sha256
11955 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11956 (build-system pyproject-build-system)
11957 (arguments
11958 (list
11959 #:tests? #false ;there are none
11960 #:phases
11961 '(modify-phases %standard-phases
11962 ;; This is probably not a good idea, but it wants a rather old
11963 ;; version of docstring-parser.
11964 (add-after 'unpack 'relax-requirements
11965 (lambda _
11966 (substitute* "pyproject.toml"
11967 (("docstring-parser = .*")
11968 "docstring-parser = \"^0\"\n")))))))
11969 (propagated-inputs (list python-click
11970 python-databind-core
11971 python-databind-json
11972 python-docspec
11973 python-docspec-python
11974 python-docstring-parser
11975 python-jinja2
11976 python-nr-util
11977 python-pyyaml
11978 python-requests
11979 python-tomli
11980 python-tomli-w
11981 python-watchdog
11982 python-yapf))
11983 (native-inputs (list python-poetry-core))
11984 (home-page "https://pypi.org/project/pydoc-markdown/")
11985 (synopsis "Create Python API documentation in Markdown format")
11986 (description "Pydoc-Markdown is a tool to create Python API documentation
11987in Markdown format. Instead of executing your Python code like so many other
11988documentation tools, it parses it using docspec instead.")
11989 (license license:expat)))
11990
11991;; XXX: The project is deprecated upstream, still in use by some packages,
11992;; consider to remove when nothing depends on it.
11993(define-public python-pydocstyle
11994 (package
11995 (name "python-pydocstyle")
11996 (version "6.3.0")
11997 (source
11998 (origin
11999 (method git-fetch) ;no tests in PyPI archive
12000 (uri (git-reference
12001 (url "https://github.com/PyCQA/pydocstyle")
12002 (commit version)))
12003 (file-name (git-file-name name version))
12004 (sha256
12005 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
12006 (patches (search-patches
12007 "python-pydocstyle-add-support-for-pep701.patch"))))
12008 (build-system pyproject-build-system)
12009 (arguments
12010 (list
12011 ;; It tries to install with pip.
12012 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
12013 #:phases
12014 #~(modify-phases %standard-phases
12015 (add-after 'unpack 'set-version
12016 (lambda _
12017 (substitute* "pyproject.toml"
12018 (("0.0.0-dev") #$version)))))))
12019 (native-inputs
12020 (list python-poetry-core
12021 python-pytest
12022 python-tomli))
12023 (propagated-inputs
12024 (list python-six
12025 python-snowballstemmer))
12026 (home-page "https://github.com/PyCQA/pydocstyle/")
12027 (synopsis "Python docstring style checker")
12028 (description
12029 "This package provides a style checker for the Python Language
12030Server (PLS).")
12031 (license license:expat)))
12032
12033(define-public python-lsp-server
12034 (package
12035 (name "python-lsp-server")
12036 (version "1.15.0")
12037 (source
12038 (origin
12039 (method git-fetch)
12040 (uri (git-reference
12041 (url "https://github.com/python-lsp/python-lsp-server")
12042 (commit (string-append "v" version))))
12043 (file-name (git-file-name name version))
12044 (sha256
12045 (base32 "0bmwshwdlnbj15ki2vld832lbp6j1slyhvgmwrr8kjbhgk3v8vic"))
12046 (patches
12047 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
12048 (build-system pyproject-build-system)
12049 (arguments
12050 (list
12051 #:test-flags
12052 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
12053 "-k"
12054 (string-append
12055 "not test_concurrent_ws_requests " ; flaky
12056 "and not test_pyqt_completion " ; avoid pyqt5
12057 "and not test_pandas_completion")) ; avoid pandas
12058 #:phases
12059 #~(modify-phases %standard-phases
12060 (add-after 'unpack 'relax-deps
12061 (lambda _
12062 (substitute* "pyproject.toml"
12063 (("autopep8>=2.0.4,<2.1.0") "autopep8")
12064 (("pycodestyle>=2.12.0,<2.13.0") "pycodestyle")
12065 (("pyflakes>=3.2.0,<3.3.0") "pyflakes"))))
12066 (add-before 'check 'set-HOME
12067 (lambda _ (setenv "HOME" "/tmp"))))))
12068 (propagated-inputs
12069 (list python-autopep8
12070 python-black
12071 python-docstring-to-markdown
12072 python-flake8
12073 python-jedi
12074 python-lsp-jsonrpc
12075 python-mccabe
12076 python-pluggy
12077 python-pycodestyle
12078 python-pydocstyle
12079 python-pyflakes
12080 python-pylint
12081 python-rope
12082 python-ujson
12083 python-whatthepatch
12084 python-yapf))
12085 (native-inputs
12086 (list python-flaky
12087 python-matplotlib
12088 python-pytest
12089 python-setuptools
12090 python-setuptools-scm
12091 python-websockets))
12092 (home-page "https://github.com/python-lsp/python-lsp-server")
12093 (synopsis "Python implementation of the Language Server Protocol")
12094 (description
12095 "The Python Language Server @command{pylsp} is an implementation of the
12096Python 3 language specification for the Language Server Protocol (LSP).
12097This tool is used in text editing environments to provide a complete
12098and integrated feature-set for programming Python effectively.")
12099 (license license:expat)))
12100
12101(define-public python-black
12102 (package
12103 (name "python-black")
12104 (version "26.5.1")
12105 (source
12106 (origin
12107 (method git-fetch)
12108 (uri (git-reference
12109 (url "https://github.com/psf/black")
12110 (commit version)))
12111 (file-name (git-file-name name version))
12112 (sha256
12113 (base32 "13fsaasnbgvlnxzsy81mlyp2pjni7fpp1v9gwh7xmq0pzxzai8h8"))))
12114 (build-system pyproject-build-system)
12115 (arguments
12116 (list
12117 ;; tests: 443 passed, 3 skipped, 4 subtests passed
12118 #:test-flags
12119 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
12120 ;; Diffs are not equal.
12121 (string-append "--deselect=tests/test_format.py"
12122 "::test_simple_format"
12123 "[module_docstring_after_comment]"))
12124 #:phases
12125 #~(modify-phases %standard-phases
12126 (add-after 'patch-source-shebangs 'use-absolute-file-names
12127 (lambda* (#:key inputs #:allow-other-keys)
12128 (substitute* (find-files "tests" "\\.py$")
12129 (("#!/usr/bin/env python3")
12130 (string-append
12131 "#!" (search-input-file inputs "/bin/python3")))))))))
12132 (propagated-inputs
12133 (list python-click
12134 python-mypy-extensions
12135 python-packaging
12136 python-pathspec
12137 python-platformdirs
12138 python-pytokens
12139 ;; [optional]
12140 python-aiohttp))
12141 (native-inputs
12142 (list python-hatch-fancy-pypi-readme
12143 python-hatch-vcs
12144 python-hatchling
12145 python-pytest
12146 python-pytest-xdist))
12147 (home-page "https://github.com/psf/black")
12148 (synopsis "The uncompromising code formatter")
12149 (description "Black is the uncompromising Python code formatter.")
12150 (license license:expat)))
12151
12152(define-public python-black-macchiato
12153 (package
12154 (name "python-black-macchiato")
12155 (version "1.3.0")
12156 (source
12157 (origin
12158 (method git-fetch)
12159 (uri (git-reference
12160 (url "https://github.com/wbolster/black-macchiato")
12161 (commit version)))
12162 (file-name (git-file-name name version))
12163 (sha256
12164 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
12165 (build-system pyproject-build-system)
12166 (arguments
12167 (list
12168 #:phases
12169 #~(modify-phases %standard-phases
12170 (add-after 'unpack 'ignore-failing-tests
12171 (lambda _
12172 (substitute* "test_macchiato.py"
12173 (("\\(.*\\n'\\)," all)
12174 (string-append "# " all))))))))
12175 (native-inputs (list python-pytest python-setuptools))
12176 (propagated-inputs (list python-black))
12177 (home-page "https://github.com/wbolster/black-macchiato")
12178 (synopsis "Partial @code{python-black} formatting")
12179 (description
12180 "This package is built on top the @code{python-black} code formatter to
12181enable formatting of partial files.")
12182 (license license:bsd-3)))
12183
12184(define-public python-blinker
12185 (package
12186 (name "python-blinker")
12187 (version "1.9.0")
12188 (source
12189 (origin
12190 (method url-fetch)
12191 (uri (pypi-uri "blinker" version))
12192 (sha256
12193 (base32
12194 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
12195 (build-system pyproject-build-system)
12196 (native-inputs
12197 (list python-flit-core
12198 python-pytest
12199 python-pytest-asyncio))
12200 (home-page "https://pythonhosted.org/blinker/")
12201 (synopsis "Fast, simple object-to-object and broadcast signaling")
12202 (description
12203 "Blinker provides a fast dispatching system that allows any number of
12204interested parties to subscribe to events, or \"signals\".")
12205 (license license:expat)))
12206
12207(define-public pelican
12208 (package
12209 (name "pelican")
12210 (version "4.11.0")
12211 (source
12212 (origin
12213 (method url-fetch)
12214 (uri (pypi-uri "pelican" version))
12215 (sha256
12216 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
12217 (build-system pyproject-build-system)
12218 (arguments
12219 (list
12220 #:test-flags #~(list "-k" (string-append
12221 ;; These tests failed with AssertionError.
12222 "not test_typogrify_ignore_filters"
12223 " and not test_typogrify_ignore_tags"
12224 " and not test_error_on_warning"))))
12225 (native-inputs
12226 (list python-anyio
12227 python-beautifulsoup4
12228 python-lxml
12229 python-pdm-backend
12230 python-pytest
12231 python-smartypants
12232 python-typogrify))
12233 (inputs
12234 (list python-blinker
12235 python-dateutil
12236 ;; Ignoring `guix lint` warning as python-docutils is used to support
12237 ;; reStructuredText processing at runtime.
12238 python-docutils
12239 python-feedgenerator
12240 python-jinja2
12241 python-ordered-set
12242 python-pygments
12243 python-rich
12244 python-tzdata
12245 python-unidecode
12246 python-watchfiles))
12247 (home-page "https://blog.getpelican.com/")
12248 (synopsis "Python-based static site publishing system")
12249 (description
12250 "Pelican is a tool to generate a static blog from reStructuredText,
12251Markdown input files, and more. Pelican uses Jinja2 for templating
12252and is very extensible.")
12253 (license license:agpl3+)))
12254
12255(define-public python-cykhash
12256 (package
12257 (name "python-cykhash")
12258 (version "2.0.1")
12259 (source
12260 (origin
12261 (method url-fetch)
12262 (uri (pypi-uri "cykhash" version))
12263 (sha256
12264 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
12265 (build-system pyproject-build-system)
12266 (arguments
12267 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
12268 (native-inputs
12269 (list python-cython
12270 python-setuptools))
12271 (home-page "https://github.com/realead/cykhash")
12272 (synopsis "Khash-sets and maps")
12273 (description
12274 "This package is a Cython wrapper for khash-sets/maps. It brings
12275functionality of
12276@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
12277Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
12278world is lacking the concept of a (hash-)set. This shortcoming is fixed and
12279efficient (memory- and speedwise compared to pandas) @code{unique} and
12280@code{isin} are implemented. Python-set/dict have a big memory-footprint.
12281For some datatypes the overhead can be reduced by using khash by factor 4-8.")
12282 (license license:expat)))
12283
12284(define-public python-cython
12285 ;; TODO: Move to python-build.
12286 (package
12287 (name "python-cython")
12288 (version "3.2.5")
12289 (source
12290 (origin
12291 (method git-fetch)
12292 (uri (git-reference
12293 (url "https://github.com/cython/cython")
12294 (commit version)))
12295 (file-name (git-file-name name version))
12296 (sha256
12297 (base32 "07n0x4z0ifkhl8hi47amqhqfjc6jlh5dra9r54nlsnwnai83psy1"))))
12298 (build-system pyproject-build-system)
12299 (arguments
12300 (list
12301 #:test-backend #~'custom
12302 #:test-flags
12303 #~(list "runtests.py"
12304 "-vv"
12305 ;; Some tests fail when number of cores are 24, keep on save
12306 ;; minimal count.
12307 "-j" (number->string (min 8 (parallel-job-count)))
12308 "-x" (string-join
12309 (list "annotate_html"
12310 "Debugger"
12311 ;; It fails with AssertionError: Failed doctest test
12312 ;; for complex_numbers_cpp.double_abs.
12313 ;; See: <https://github.com/cython/cython/issues/6528>.
12314 "complex_numbers_cpp"
12315 #$@(if (target-32bit?)
12316 ;; XXX: On 32-bit architectures, running the
12317 ;; parallel tests fails on many-core systems.
12318 ;; See: <https://github.com/cython/cython/issues/2807>.
12319 '("run.parallel"
12320 ;; Test cpp_stl_any.cast_test fails.
12321 ;; See: <https://github.com/cython/cython/issues/5928>.
12322 "cpp_stl_any")
12323 '())
12324 #$@(if (system-hurd?)
12325 '("test_class_ref"
12326 "test_compiler_directives"
12327 "test_lang_version")
12328 '()))
12329 "|"))
12330 #:phases
12331 #~(modify-phases %standard-phases
12332 (add-before 'check 'pre-check
12333 (lambda* (#:key tests? test-flags #:allow-other-keys)
12334 ;; Disable compiler optimizations to greatly reduce the running
12335 ;; time of the test suite.
12336 (setenv "CFLAGS" "-O0")
12337 ;; Some tests require access to "$HOME/.cython".
12338 (setenv "HOME" "/tmp"))))))
12339 (native-inputs
12340 (list libxcrypt
12341 python-setuptools))
12342 ;; we need the full python package and not just the python-wrapper
12343 ;; because we need libpython3.3m.so
12344 (inputs
12345 (list python))
12346 (home-page "https://cython.org/")
12347 (synopsis "C extensions for Python")
12348 (description "Cython is an optimising static compiler for both the Python
12349programming language and the extended Cython programming language. It makes
12350writing C extensions for Python as easy as Python itself.")
12351 (license license:asl2.0)))
12352
12353(define-public python-cython-0
12354 (package
12355 (inherit python-cython)
12356 ;; It's the latest version of 0.29. See
12357 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12358 (version "0.29.37")
12359 (source
12360 (origin
12361 (method url-fetch)
12362 (uri (pypi-uri "Cython" version))
12363 (sha256
12364 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12365 (arguments
12366 (list
12367 ;; XXX: Tests are broken with [email protected], but dependent packages
12368 ;; build, so keep it until unnecessary.
12369 #:tests? #f
12370 #:test-backend #~'custom
12371 #:test-flags
12372 #~(list "runtests.py"
12373 "-vv"
12374 "-j" (number->string (parallel-job-count))
12375 ;; XXX: On 32-bit architectures, running the parallel tests
12376 ;; fails on many-core systems, see
12377 ;; <https://github.com/cython/cython/issues/2807>.
12378 #$@(if (target-32bit?)
12379 #~("-x" "run.parallel")
12380 #~())
12381 #$@(if (system-hurd?)
12382 #~("-x" "test_class_ref"
12383 "-x" "test_compiler_directives"
12384 "-x" "test_lang_version")
12385 #~())
12386 ;; This test fails when running on 24 cores.
12387 "-x" "cpp_stl_conversion")
12388 #:phases
12389 #~(modify-phases %standard-phases
12390 (add-after 'unpack 'fix-pyximport-python-3.12
12391 (lambda _
12392 (let ((importlib-util-load-dynamic "\
12393import importlib.util
12394from importlib.machinery import ExtensionFileLoader
12395
12396def load_dynamic(name, path):
12397 loader = ExtensionFileLoader(name, path)
12398 spec = importlib.util.spec_from_file_location(name, loader=loader)
12399 module = importlib.util.module_from_spec(spec)
12400 spec.loader.exec_module(module)
12401 return module
12402"))
12403 (substitute* "pyximport/pyximport.py"
12404 (("^import imp")
12405 importlib-util-load-dynamic)
12406 (("imp\\.load_dynamic")
12407 "load_dynamic")))))
12408 (add-before 'check 'pre-check
12409 ;; some tests require access to "$HOME/.cython"
12410 (lambda _
12411 (setenv "HOME" "/tmp")
12412 ;; Disable compiler optimizations to greatly reduce the running
12413 ;; time of the test suite.
12414 (setenv "CFLAGS" "-O0"))))))))
12415
12416;; XXX: Deprecated on <2026-05-28>.
12417(define-public python-cython-next python-cython)
12418
12419;; NOTE: when upgrading numpy please make sure that python-numba,
12420;; python-pandas and python-scipy still build, as these three packages are
12421;; often used together.
12422(define-public python-numpy
12423 (package
12424 (name "python-numpy")
12425 (version "2.4.6")
12426 (source
12427 (origin
12428 ;; XXX: When switching to Git it fails to find Numpy's fork of Meson
12429 ;; git submodule -- <https://github.com/numpy/meson>.
12430 (method url-fetch)
12431 (uri (string-append
12432 "https://github.com/numpy/numpy/releases/download/v"
12433 version "/numpy-" version ".tar.gz"))
12434 (sha256
12435 (base32 "1nkx73blw298dzdk6blhrsann60cgdy7q6n3q9m785ia9865g8zk"))))
12436 (build-system pyproject-build-system)
12437 (arguments
12438 (list
12439 ;; tests: 47255 passed, 1079 skipped, 32 xfailed, 2 xpassed, 318 warnings
12440 #:modules '((guix build utils)
12441 (guix build pyproject-build-system)
12442 (ice-9 format))
12443 #:test-flags
12444 #~(list "-m" "not slow"
12445 "--numprocesses" (number->string (min 8 (parallel-job-count))))
12446 #:phases
12447 #~(modify-phases %standard-phases
12448 (add-after 'unpack 'fix-executable-paths
12449 (lambda* (#:key inputs #:allow-other-keys)
12450 (substitute* "numpy/distutils/exec_command.py"
12451 (("'/bin/sh'")
12452 (format #f "~s" (which "bash"))))
12453 (substitute* "numpy/meson.build"
12454 ;; Relay on python from the PATH instead of full reference
12455 ;; stored in built wheel.
12456 (("'py.full_path\\(\\)'") "'python'"))
12457 (substitute* "numpy/_core/tests/test_cpu_features.py"
12458 (("/bin/true")
12459 (search-input-file inputs "bin/true")))))
12460 (add-before 'build 'parallelize-build
12461 (lambda _
12462 (setenv "OMP_NUM_THREAD"
12463 (number->string (parallel-job-count)))
12464 (setenv "NPY_NUM_BUILD_JOBS"
12465 (number->string (parallel-job-count)))))
12466 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12467 ;; when the gfortran header is used. Remove gfortran from
12468 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12469 ;; <https://issues.guix.gnu.org/73439#45>.
12470 (add-after 'set-paths 'hide-gfortran
12471 (lambda* (#:key inputs #:allow-other-keys)
12472 (let ((gfortran (assoc-ref inputs "gfortran")))
12473 (setenv "CPLUS_INCLUDE_PATH"
12474 (string-join
12475 (delete (string-append gfortran "/include/c++")
12476 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12477 ":")))))
12478 (add-before 'build 'configure-blas
12479 (lambda _
12480 (call-with-output-file "site.cfg"
12481 (lambda (port)
12482 (format port
12483 "[openblas]
12484libraries = openblas
12485library_dirs = ~a/lib
12486include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12487 (replace 'check
12488 (lambda* (#:key tests? test-flags #:allow-other-keys)
12489 (when tests?
12490 (with-directory-excursion #$output
12491 (apply invoke "pytest" test-flags)
12492 (let ((pytest-cache (string-append #$output
12493 "/.pytest_cache")))
12494 (when (access? pytest-cache X_OK)
12495 (delete-file-recursively pytest-cache)))))))
12496 ;; The executables provided by this package ('f2py' and 'numpy-config')
12497 ;; only depend on Python. By customizing the wrap phase we can ensure
12498 ;; that we don't add all Python packages listed in native-inputs to
12499 ;; the closure. This significantly reduces the overall closure size.
12500 ;;
12501 ;; See also <https://bugs.gnu.org/25235>.
12502 (replace 'wrap
12503 (lambda* (#:key inputs outputs #:allow-other-keys)
12504 (for-each
12505 (lambda (program)
12506 (wrap-program program
12507 `("GUIX_PYTHONPATH" ":" suffix
12508 ,(list (site-packages inputs outputs)))))
12509 (find-files (in-vicinity #$output "/bin"))))))))
12510 (native-inputs
12511 (list gfortran
12512 python-cython
12513 python-hypothesis
12514 python-meson
12515 python-pytest
12516 python-pytest-xdist))
12517 (inputs
12518 (list bash
12519 openblas))
12520 (home-page "https://numpy.org")
12521 (synopsis "Fundamental package for scientific computing with Python")
12522 (description "NumPy is the fundamental package for scientific computing
12523with Python. It contains among other things: a powerful N-dimensional array
12524object, sophisticated (broadcasting) functions, tools for integrating C/C++
12525and Fortran code, useful linear algebra, Fourier transform, and random number
12526capabilities.")
12527 (properties
12528 '((upstream-name . "numpy")))
12529 (license license:bsd-3)))
12530
12531(define-public python-numpy-1
12532 (package
12533 (inherit python-numpy)
12534 (name "python-numpy")
12535 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12536 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12537 ;; in upstream Meson.
12538 ;;
12539 ;; See:
12540 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12541 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12542 ;; - file <doc/source/building/understanding_meson.rst>
12543 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12544 (source
12545 (origin
12546 (method url-fetch)
12547 (uri (string-append
12548 "https://github.com/numpy/numpy/releases/download/v"
12549 version "/numpy-" version ".tar.gz"))
12550 (sha256
12551 (base32
12552 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12553 (patches (search-patches "python-numpy-gcc-14.patch"))))
12554 (arguments
12555 (list
12556 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12557 #:modules '((guix build utils)
12558 (guix build pyproject-build-system)
12559 (ice-9 format))
12560 #:phases
12561 #~(modify-phases %standard-phases
12562 (add-after 'unpack 'delete-test-files
12563 (lambda _
12564 ;; These tests depend on older setuptools, see:
12565 ;; <https://github.com/numpy/numpy/issues/27531>.
12566 ;;
12567 ;; E ModuleNotFoundError: No module named
12568 ;; 'distutils.msvccompiler'
12569 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12570 (delete-file "numpy/distutils/tests/test_system_info.py")))
12571 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12572 ;; when the gfortran header is used. Remove gfortran from
12573 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12574 ;; <https://issues.guix.gnu.org/73439#45>.
12575 (add-after 'set-paths 'hide-gfortran
12576 (lambda* (#:key inputs #:allow-other-keys)
12577 (let ((gfortran (assoc-ref inputs "gfortran")))
12578 (setenv "CPLUS_INCLUDE_PATH"
12579 (string-join
12580 (delete (string-append gfortran "/include/c++")
12581 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12582 ":")))))
12583 (add-before 'build 'relax-gcc-14-strictness
12584 (lambda _
12585 (setenv "CFLAGS"
12586 "-g -O2 -Wno-error=implicit-function-declaration")))
12587 (add-before 'build 'parallelize-build
12588 (lambda _
12589 (setenv "NPY_NUM_BUILD_JOBS"
12590 (number->string (parallel-job-count)))))
12591 (add-before 'build 'configure-blas
12592 (lambda* (#:key inputs #:allow-other-keys)
12593 (call-with-output-file "site.cfg"
12594 (lambda (port)
12595 (format port
12596 "\
12597[openblas]
12598libraries = openblas
12599library_dirs = ~a/lib
12600include_dirs = ~:*~a/include~%"
12601 (dirname (dirname
12602 (search-input-file
12603 inputs "include/openblas_config.h"))))))))
12604 (add-before 'build 'fix-executable-paths
12605 (lambda* (#:key inputs #:allow-other-keys)
12606 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12607 ;; instead of /bin/sh.
12608 (substitute* "numpy/distutils/exec_command.py"
12609 (("'/bin/sh'")
12610 (format #f "~s" (search-input-file inputs "bin/bash"))))
12611 ;; Don't try to call '/bin/true' specifically.
12612 (substitute* "numpy/core/tests/test_cpu_features.py"
12613 (("/bin/true") (search-input-file inputs "bin/true")))))
12614 (replace 'check
12615 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12616 (when tests?
12617 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12618 "-j" (number->string (parallel-job-count))
12619 ;; Contrary to scipy, the runtests.py script of numpy
12620 ;; does *not* automatically provide -n when -j is used
12621 ;; (see: https://github.com/numpy/numpy/issues/21359).
12622 "--" "-n" (number->string (parallel-job-count))
12623 ;; Disable Pytest Warnings, they are resolved in the
12624 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12625 ;; applied to fixtures have no effect,
12626 ;; DeprecationWarning.
12627 "-p" "no:warnings"
12628 "-k" (string-append
12629 ;; These tests may fail on 32-bit systems (see:
12630 ;; https://github.com/numpy/numpy/issues/18387).
12631 "not test_float_remainder_overflow "
12632 "and not test_pareto "
12633 ;; The 'test_rint_big_int' test fails on older
12634 ;; x86_64 CPUs such as the Core 2 Duo (see:
12635 ;; https://github.com/numpy/numpy/issues/22170).
12636 "and not test_rint_big_int "
12637 ;; They fail to detect compiler.
12638 "and not test_compile1 "
12639 "and not test_compile2 "
12640 ;; Due to disabled warnings
12641 "and not test_getattr_warning "
12642 "and not test_integer_signs "
12643 "and not test_implicit_cast_float_to_int_fails "
12644 "and not test_integer_signs "
12645 ;; The huge_array test is too large for 32-bit (see:
12646 ;; https://bugs.gentoo.org/843599 and
12647 ;; https://bugs.gentoo.org/846548).
12648 ;; TestKind.test_all is a Fortran type failure
12649 ;; that may be toolchain or environment related.
12650 #$@(if (or (target-x86?) (target-arm32?))
12651 `(" and not test_identityless_reduction_huge_array"
12652 " and not (TestKind and test_all)")
12653 '())
12654 ;; This test fails with a Fortran failure (16
12655 ;; expected but got -1), due to the fact that it
12656 ;; requires a 64-bit system.
12657 #$@(if (or (target-x86-32?) (target-arm32?))
12658 `(" and not test_int")
12659 '())
12660 ;; These tests fail when building from aarch64-linux.
12661 #$@(if (target-arm32?)
12662 `(" and not test_features"
12663 " and not test_unary_spurious_fpexception")
12664 '())
12665 ;; These tests seem to fail on machines without
12666 ;; an FPU is still under investigation upstream.
12667 ;; https://github.com/numpy/numpy/issues/20635
12668 #$@(if (target-riscv64?)
12669 `(" and not test_fp_noncontiguous")
12670 '())
12671 ;; They also fail with gcc-14
12672 " and not test_float"
12673 " and not test_fpclass"
12674
12675 ;; These tests fail with gcc-14
12676 " and not test_context_locality"
12677 " and not test_cosh"
12678 " and not test_default_policy_singleton"
12679 " and not test_exp_exceptions"
12680 " and not test_half_fpe"
12681 " and not test_owner_is_base"
12682 " and not test_policy_propagation"
12683 " and not test_set_policy"
12684 " and not test_sinh"
12685 " and not test_square_values"
12686 " and not test_sum"
12687 " and not test_switch_owner"
12688 " and not test_thread_locality"
12689
12690 ;; These tests depend on older setuptools, see:
12691 ;; <https://github.com/numpy/numpy/issues/27531>.
12692 " and not test_api_importable"
12693 " and not test_all_modules_are_expected_2")))))
12694 ;; See comment for custom python-numpy wrap phase above.
12695 (replace 'wrap
12696 (lambda* (#:key inputs outputs #:allow-other-keys)
12697 (for-each
12698 (lambda (program)
12699 (wrap-program program
12700 `("GUIX_PYTHONPATH" ":" suffix
12701 ,(list (site-packages inputs outputs)))))
12702 (find-files (in-vicinity #$output "/bin"))))))))
12703 (native-inputs
12704 (list python-hypothesis
12705 python-meson
12706 python-pytest
12707 python-pytest-xdist
12708 python-setuptools
12709 python-typing-extensions
12710 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12711 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12712 ;; <https://github.com/numpy/numpy/issues/24318>.
12713 gcc ;fevn.h c[++] include must precede fortran's
12714 gfortran))
12715 (inputs (list bash openblas))))
12716
12717(define-deprecated/public-alias python-numpy-2 python-numpy)
12718
12719(define-public python-numpysane
12720 (package
12721 (name "python-numpysane")
12722 (version "0.43")
12723 (source
12724 (origin
12725 (method git-fetch)
12726 (uri (git-reference
12727 (url "https://github.com/dkogan/numpysane.git")
12728 (commit (string-append "v" version))))
12729 (file-name (git-file-name name version))
12730 (sha256
12731 (base32 "1ls1nrdcizscdpv4712jr7wiaxkmryrai7w0ci06fiq5haq54hrn"))))
12732 (build-system pyproject-build-system)
12733 (arguments
12734 (list
12735 #:phases
12736 #~(modify-phases %standard-phases
12737 (add-after 'unpack 'patch
12738 (lambda* (#:key inputs outputs #:allow-other-keys)
12739 (let* ((numpy (assoc-ref inputs "python-numpy"))
12740 (site (site-packages inputs `(("out" . ,numpy)))))
12741 (substitute* "Makefile.common.header"
12742 ;; See: <https://github.com/dkogan/numpysane/issues/3>.
12743 (("pkg-config --cflags-only-I numpy")
12744 (format #f "echo -I~a/numpy/_core/include" site))))))
12745 (replace 'check
12746 (lambda _
12747 (setenv "CC"
12748 #$(cc-for-target))
12749 (invoke "make" "check"))))))
12750 (propagated-inputs (list python-numpy))
12751 (native-inputs (list perl pkg-config python-setuptools))
12752 (home-page "https://github.com/dkogan/numpysane")
12753 (synopsis "More-reasonable core functionality for numpy")
12754 (description
12755 "This package provides more-reasonable core functionality for numpy.
12756
12757A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12758
12759numpysane has:
12760@itemize
12761@item easier broadcasting
12762@item nicer array manipulation
12763@item array concatenation
12764@item manipulation of dimensions
12765@item broadcast-aware inner product
12766@item broadcast-aware outer product
12767@item broadcast-aware 2-norm
12768@item broadcast-aware matrix multiplication
12769@end itemize
12770")
12771 (license license:lgpl2.0+)))
12772
12773(define-public python-numpy-documentation
12774 (package
12775 (inherit python-numpy)
12776 (name "python-numpy-documentation")
12777 (arguments
12778 (list
12779 #:tests? #f ;we're only generating the documentation
12780 #:phases
12781 #~(modify-phases %standard-phases
12782 (add-after 'unpack 'avoid-external-deps
12783 (lambda _
12784 ;; XXX: Avoid search-button to avoid sphinx error
12785 ;; TemplateNotFound('search-button.html')
12786 (substitute* "doc/source/conf.py"
12787 (("\"search-button\",") ""))
12788 ;; XXX: Avoid theme-switcher to avoid sphinx error
12789 ;; TemplateNotFound('theme-switcher.html')
12790 (substitute* "doc/source/conf.py"
12791 (("\"theme-switcher\",") ""))
12792 ;; XXX: Avoid version-switcher because it depends on the value
12793 ;; of external https://numpy.org/doc/_static/versions.json
12794 (substitute* "doc/source/conf.py"
12795 (("\"version-switcher\",") ""))))
12796 (add-before 'build 'add-gnu-freefont-to-texmf
12797 (lambda _
12798 ;; XXX: The Sphinx-generated tex output specifies the GNU
12799 ;; FreeFont font to be searched via its extension, which uses
12800 ;; kpathsea instead of fontconfig and fail (see:
12801 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12802 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12803 ;; GUIX_TEXMF.
12804 (mkdir-p "texmf-dist/fonts/opentype/public")
12805 (symlink (string-append
12806 #$(this-package-native-input "font-gnu-freefont")
12807 "/share/fonts/opentype")
12808 (string-append
12809 (getcwd) "/"
12810 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12811 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12812 (getcwd) "/texmf-dist"))))
12813 (replace 'build
12814 (lambda _
12815 (chdir "doc")
12816 (let ((sphinxopts (string-append
12817 "SPHINXOPTS=-j"
12818 (number->string (parallel-job-count)))))
12819 ;; Do not treat warnings as errors.
12820 (substitute* "Makefile"
12821 ((" -WT ") " -T "))
12822 (setenv "HOME" "/tmp")
12823 ;; Build the PDF documentation.
12824 (invoke "make" "latex-build" sphinxopts)
12825 ;; FIXME: PDF build fails
12826 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12827 ;; Build the HTML documentation
12828 (invoke "make" "html" sphinxopts)
12829 ;; Build the Info documentation. The issues worked around
12830 ;; below can be tracked at
12831 ;; https://github.com/numpy/numpy/issues/12278.
12832 (substitute* "source/conf.py"
12833 ;; The root document should be "index", not "contents".
12834 (("\"contents\"") "'index'")
12835 ;; Disable Sphinx extensions that produce broken Texinfo.
12836 ((".*'numpydoc'.*") "")
12837 ((".*'sphinx.ext.autodoc'.*") "")
12838 ((".*'sphinx.ext.autosummary'.*") ""))
12839 (invoke "make" "info" sphinxopts))))
12840 (replace 'install
12841 (lambda _
12842 (let* ((data (string-append #$output "/share"))
12843 (doc (string-append data "/doc/numpy"))
12844 (html (string-append doc "/html"))
12845 (info (string-append data "/info")))
12846 ;; Install the HTML documentation.
12847 (mkdir-p html)
12848 (copy-recursively "build/html" html)
12849 ;; Install the PDF reference and user manuals.
12850 ;; FIXME:
12851 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12852 ;; (install-file "build/latex/numpy-user.pdf" doc)
12853 ;; Install the info manual.
12854 (install-file "build/texinfo/numpy.info" info)
12855 (symlink (string-append html "/_images")
12856 (string-append info "/numpy-figures"))))))))
12857 (native-inputs
12858 (list font-gnu-freefont
12859 perl
12860 python-breathe
12861 python-ipython
12862 python-jupyterlite-sphinx
12863 python-matplotlib
12864 python-numpy
12865 python-numpydoc
12866 python-pandas
12867 python-pydata-sphinx-theme
12868 python-scipy ;used by matplotlib
12869 python-setuptools
12870 python-sphinx
12871 python-sphinx-copybutton
12872 python-sphinx-design
12873 texinfo
12874 (texlive-local-tree
12875 (list texlive-cbfonts
12876 texlive-cm-super
12877 texlive-cmap
12878 texlive-expdlist
12879 texlive-fandol
12880 texlive-greek-fontenc
12881 texlive-latexmk
12882 texlive-polyglossia
12883 texlive-xetex
12884 texlive-xindy))))
12885 (inputs '())
12886 (propagated-inputs '())
12887 (synopsis "Documentation for the @code{python-numpy} package")
12888 (description "This package provides the complete NumPy documentation in
12889the Texinfo, and HTML formats.")))
12890
12891(define-public python-numpy-stl
12892 (package
12893 (name "python-numpy-stl")
12894 (version "3.2.0")
12895 (source
12896 (origin
12897 (method url-fetch)
12898 (uri (pypi-uri "numpy_stl" version))
12899 (sha256
12900 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12901 (build-system pyproject-build-system)
12902 (native-inputs
12903 (list python-cython
12904 python-pytest
12905 python-setuptools
12906 python-wheel))
12907 (propagated-inputs
12908 (list python-numpy
12909 python-utils))
12910 (home-page "https://github.com/WoLpH/numpy-stl/")
12911 (synopsis "Read, write and modify binary/ASCII STL files library")
12912 (description
12913 "Library to make reading, writing and modifying both binary and ascii STL
12914files, file format native to the stereolithography CAD software created by 3D
12915Systems, easy.")
12916 (license license:bsd-3)))
12917
12918(define-public python-npx
12919 (package
12920 (name "python-npx")
12921 (version "0.1.6")
12922 (source
12923 (origin
12924 (method git-fetch) ; no source archive in PyPI
12925 (uri (git-reference
12926 (url "https://github.com/sigma-py/npx")
12927 (commit (string-append "v" version))))
12928 (file-name (git-file-name name version))
12929 (sha256
12930 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12931 (build-system pyproject-build-system)
12932 (native-inputs
12933 (list python-networkx
12934 python-pytest
12935 python-setuptools
12936 python-wheel))
12937 (propagated-inputs
12938 (list python-numpy))
12939 (home-page "https://github.com/nschloe/npx")
12940 (synopsis "Extensions for NumPy")
12941 (description "NumPy is a large library used everywhere in scientific
12942computing. That's why breaking backwards-compatibility comes at a
12943significant cost and is almost always avoided, even if the API of some
12944methods is arguably lacking. This package provides drop-in wrappers
12945\"fixing\" those.")
12946 (license license:bsd-3)))
12947
12948(define-public python-munch
12949 (package
12950 (name "python-munch")
12951 (version "4.0.0")
12952 (source
12953 (origin
12954 (method url-fetch)
12955 (uri (pypi-uri "munch" version))
12956 (sha256
12957 (base32
12958 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12959 (build-system pyproject-build-system)
12960 (native-inputs
12961 (list python-astroid
12962 python-pytest
12963 python-setuptools
12964 python-wheel))
12965 (home-page "https://github.com/Infinidat/munch")
12966 (synopsis "Dot-accessible dictionary")
12967 (description "Munch is a dot-accessible dictionary similar to JavaScript
12968objects.")
12969 (license license:expat)))
12970
12971(define-public python-colormath2
12972 (package
12973 (name "python-colormath2")
12974 (version "3.0.3")
12975 (source
12976 (origin
12977 (method git-fetch)
12978 (uri (git-reference
12979 (url "https://github.com/bkmgit/python-colormath2")
12980 (commit version)))
12981 (file-name (git-file-name name version))
12982 (sha256
12983 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12984 (build-system pyproject-build-system)
12985 (propagated-inputs (list python-networkx python-numpy))
12986 (native-inputs (list python-nose2 python-setuptools))
12987 (home-page "https://github.com/bkmgit/python-colormath2")
12988 (synopsis "Color math and conversion library")
12989 (description
12990 "This is a Python library for color math and conversions.")
12991 (license license:bsd-3)))
12992
12993(define-public python-pam
12994 (package
12995 (name "python-pam")
12996 (version "2.0.2")
12997 (source
12998 (origin
12999 (method git-fetch)
13000 (uri (git-reference
13001 (url "https://github.com/FirefighterBlu3/python-pam")
13002 (commit (string-append "v" version))))
13003 (file-name (git-file-name name version))
13004 (sha256
13005 (base32 "05fvf9rg4h7sigzvipm1ghq34zk6i8na7wkyk905nvk4gdhln7ri"))))
13006 (build-system pyproject-build-system)
13007 (arguments
13008 (list
13009 #:test-flags
13010 #~(list "-k"
13011 (string-append " not __normal_"
13012 " and not __env_requires_"
13013 " and not __getenv"
13014 " and not __putenv"
13015 " and not __unset"
13016 " and not _setenv"
13017 " and not _env_set"
13018 " and not __pam_end"
13019 " and not _session_unauthenticated"))
13020 #:phases
13021 #~(modify-phases %standard-phases
13022 (add-after 'unpack 'bake-pam
13023 (lambda* (#:key inputs #:allow-other-keys)
13024 (substitute* "src/pam/__internals.py"
13025 (("find_library\\(\"(pam|pam_misc)\"\\)" all lib)
13026 (string-append
13027 "\""
13028 (search-input-file inputs
13029 (string-append "lib/lib" lib ".so"))
13030 "\"")))))
13031 (add-before 'check 'fix-test-config
13032 (lambda _
13033 (substitute* "pyproject.toml"
13034 (("\"test_\\*.py\"")
13035 (format
13036 #f "[~{~s~^,~}]"
13037 (map basename (find-files "tests" "test_.*\\.py$"))))
13038 (("norecursedirs = (\".*\")" all dirs)
13039 (string-append "norecursedirs = [" dirs "]"))))))))
13040 (inputs (list linux-pam))
13041 (propagated-inputs (list python-six))
13042 (native-inputs (list python-pytest
13043 python-setuptools))
13044 (home-page "https://github.com/FirefighterBlu3/python-pam")
13045 (synopsis "Python PAM module")
13046 (description "This package provides a Python module to interface with
13047@acronym{PAM, pluggable authentication modules}.")
13048 (license license:expat)))
13049
13050(define-public python-pyspnego
13051 (package
13052 (name "python-pyspnego")
13053 (version "0.8.0")
13054 (source (origin
13055 (method url-fetch)
13056 (uri (pypi-uri "pyspnego" version))
13057 (sha256
13058 (base32
13059 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
13060 (build-system pyproject-build-system)
13061 (native-inputs
13062 (list python-pytest python-pytest-mock python-setuptools python-wheel))
13063 (propagated-inputs
13064 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
13065 (home-page "https://github.com/jborean93/pyspnego")
13066 (synopsis "Python SPNEGO library")
13067 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
13068Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
13069parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
13070readable format.")
13071 (license license:expat)))
13072
13073(define-public python-pygit2
13074 (package
13075 (name "python-pygit2")
13076 (version "1.18.2")
13077 (source
13078 (origin
13079 (method url-fetch)
13080 (uri (pypi-uri "pygit2" version))
13081 (sha256
13082 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
13083 (build-system pyproject-build-system)
13084 (propagated-inputs (list python-cffi libgit2))
13085 (native-inputs (list python-pytest python-setuptools python-wheel))
13086 (home-page "https://github.com/libgit2/pygit2")
13087 (synopsis "Python bindings for libgit2")
13088 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
13089 ;; GPL2.0 only, with linking exception.
13090 (license license:gpl2)))
13091
13092(define-public python-patiencediff
13093 (package
13094 (name "python-patiencediff")
13095 (version "0.2.15")
13096 (source
13097 (origin
13098 (method url-fetch)
13099 (uri (pypi-uri "patiencediff" version))
13100 (sha256
13101 (base32
13102 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
13103 (build-system pyproject-build-system)
13104 (arguments
13105 (list
13106 #:phases #~(modify-phases %standard-phases
13107 ;; Fails because bin/patiencediff expects two files to diff
13108 (delete 'sanity-check))))
13109 (native-inputs (list python-pytest python-setuptools python-wheel))
13110 (home-page "https://www.breezy-vcs.org/")
13111 (synopsis "Python implementation of the patiencediff algorithm")
13112 (description
13113 "This package contains a Python implementation of the @code{patiencediff}
13114algorithm. Patiencediff provides a good balance of performance, nice output for
13115humans, and implementation simplicity.")
13116 (license license:gpl2+)))
13117
13118(define-public python-merge3
13119 (package
13120 (name "python-merge3")
13121 (version "0.0.16")
13122 (source
13123 (origin
13124 (method git-fetch)
13125 (uri (git-reference
13126 (url "https://github.com/breezy-team/merge3")
13127 (commit (string-append "v" version))))
13128 (file-name (git-file-name name version))
13129 (sha256
13130 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
13131 (build-system pyproject-build-system)
13132 (arguments (list #:test-backend #~'unittest))
13133 (native-inputs (list python-setuptools))
13134 (home-page "https://github.com/breezy-team/merge3")
13135 (synopsis "Python implementation of 3-way merge")
13136 (description "This Python library implements 3-way merge for text.")
13137 (license license:gpl2+)))
13138
13139(define-public python-fancycompleter
13140 (package
13141 (name "python-fancycompleter")
13142 (version "0.9.1")
13143 (source
13144 (origin
13145 (method git-fetch)
13146 (uri (git-reference
13147 (url "https://github.com/pdbpp/fancycompleter")
13148 (commit version)))
13149 (file-name (git-file-name name version))
13150 (sha256
13151 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
13152 (build-system pyproject-build-system)
13153 (arguments
13154 (list
13155 #:phases
13156 #~(modify-phases %standard-phases
13157 (add-after 'unpack 'fix-setup.py
13158 (lambda _
13159 (substitute* "setup.py"
13160 ((".*setupmeta.*")
13161 "")
13162 (("versioning=.*")
13163 (string-append "version='" #$version "',"))
13164 ((".*pyrepl.*") ; broken on Python 3
13165 "")))))))
13166 (native-inputs (list python-pytest python-setuptools))
13167 (home-page "https://github.com/pdbpp/fancycompleter")
13168 (synopsis "TAB completion library for Python")
13169 (description
13170 "@code{fancycompleter} is a module that adds TAB completion to the
13171interactive prompt. It is an extension of the @code{rlcompleter} module from
13172the standard Python library.")
13173 (license license:bsd-3)))
13174
13175(define-public python-ipdb
13176 (package
13177 (name "python-ipdb")
13178 (version "0.13.13")
13179 (source
13180 (origin
13181 (method git-fetch)
13182 (uri (git-reference
13183 (url "https://github.com/gotcha/ipdb")
13184 (commit version)))
13185 (file-name (git-file-name name version))
13186 (sha256
13187 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
13188 (build-system pyproject-build-system)
13189 (arguments (list #:test-backend #~'unittest))
13190 (native-inputs (list python-setuptools))
13191 (propagated-inputs (list python-ipython python-toml python-decorator))
13192 (home-page "https://github.com/gotcha/ipdb")
13193 (synopsis "IPython-enhanced Python debugger (pdb)")
13194 (description
13195 "@code{ipdb} exports functions to access the IPython debugger, which
13196features tab completion, syntax highlighting, better tracebacks and better
13197introspection than Python's standard @command{pdb} debugger, with which it
13198shares the same interface.")
13199 (license license:bsd-3)))
13200
13201(define-public python-ipfsspec
13202 (package
13203 (name "python-ipfsspec")
13204 (version "0.4.0")
13205 (source
13206 (origin
13207 (method url-fetch)
13208 (uri (pypi-uri "ipfsspec" version))
13209 (sha256
13210 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
13211 (build-system pyproject-build-system)
13212 (arguments
13213 (list
13214 #:test-flags
13215 '(list "-m not local_gw"
13216 ;; Require local gateway
13217 "--ignore=test/test_gateway.py"
13218 ;; Require internet
13219 "--ignore=test/test_async.py"
13220 "--ignore=test/test_ipfs.py")))
13221 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
13222 (native-inputs
13223 (list python-pytest
13224 python-pytest-asyncio
13225 python-setuptools
13226 python-wheel))
13227 (home-page "https://github.com/fsspec/ipfsspec")
13228 (synopsis "Read-only implementation of fsspec for IPFS")
13229 (description "This package provides a read-only implementation of
13230@code{fsspec} for IPFS.")
13231 (license license:expat)))
13232
13233(define-public python-pdftotext
13234 (package
13235 (name "python-pdftotext")
13236 (version "3.0.0")
13237 (source
13238 (origin
13239 (method url-fetch)
13240 (uri (pypi-uri "pdftotext" version))
13241 (sha256
13242 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
13243 (build-system pyproject-build-system)
13244 (native-inputs (list python-pytest python-setuptools python-wheel))
13245 (inputs (list poppler))
13246 (home-page "https://github.com/jalan/pdftotext")
13247 (synopsis "Simple PDF text extraction")
13248 (description "Pdftotext is a Python library of PDF text extraction.")
13249 (license license:expat)))
13250
13251(define-public python-pluginbase
13252 (package
13253 (name "python-pluginbase")
13254 (version "1.0.1")
13255 (source
13256 (origin
13257 (method git-fetch)
13258 (uri (git-reference
13259 (url "https://github.com/mitsuhiko/pluginbase")
13260 (commit (string-append "v" version))))
13261 (file-name (git-file-name name version))
13262 (sha256
13263 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
13264 (build-system pyproject-build-system)
13265 (arguments
13266 (list
13267 #:phases
13268 #~(modify-phases %standard-phases
13269 (replace 'check
13270 (lambda* (#:key tests? #:allow-other-keys)
13271 (when tests?
13272 (invoke "make" "test")))))))
13273 (native-inputs (list python-pytest python-setuptools))
13274 (home-page "https://github.com/mitsuhiko/pluginbase")
13275 (synopsis "Simple but flexible plugin system for Python")
13276 (description
13277 "PluginBase is a library useful in the development of flexible plugin
13278systems in Python.")
13279 (license license:bsd-3)))
13280
13281(define-public python-node-semver
13282 (package
13283 (name "python-node-semver")
13284 (version "0.8.1")
13285 (source
13286 (origin
13287 (method git-fetch)
13288 (uri (git-reference
13289 (url "https://github.com/podhmo/python-node-semver")
13290 (commit version)))
13291 (file-name (git-file-name name version))
13292 (sha256
13293 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
13294 (build-system pyproject-build-system)
13295 (native-inputs (list python-pytest python-setuptools))
13296 (home-page "https://github.com/podhmo/python-node-semver")
13297 (synopsis "Python port of node-semver")
13298 (description
13299 "This module provides a Python version of node-semver, a semantic version
13300parser for Node.js.")
13301 (license license:expat)))
13302
13303(define-public python-norns
13304 (package
13305 (name "python-norns")
13306 (version "0.1.6")
13307 (source
13308 (origin
13309 (method git-fetch)
13310 (uri (git-reference
13311 (url "https://github.com/simonvh/norns")
13312 (commit version)))
13313 (file-name (git-file-name name version))
13314 (sha256
13315 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
13316 (patches
13317 (search-patches "python-norns-nose.patch"))))
13318 (build-system pyproject-build-system)
13319 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
13320 (native-inputs (list python-setuptools))
13321 (home-page "https://github.com/simonvh/norns")
13322 (synopsis "Simple YAML-based config module")
13323 (description "This package provides a simple YAML-based config module.")
13324 (license license:expat)))
13325
13326(define-public python-patch-ng
13327 (package
13328 (name "python-patch-ng")
13329 (version "1.18.1")
13330 (source
13331 (origin
13332 (method git-fetch)
13333 (uri (git-reference
13334 (url "https://github.com/conan-io/python-patch-ng")
13335 (commit version)))
13336 (file-name (git-file-name name version))
13337 (sha256
13338 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
13339 (build-system pyproject-build-system)
13340 (arguments
13341 (list
13342 #:test-backend #~'custom
13343 #:test-flags #~(list "tests/run_tests.py" "-v")))
13344 (native-inputs (list python-pytest python-setuptools))
13345 (home-page "https://github.com/conan-io/python-patch-ng")
13346 (synopsis "Python library to parse and apply unified diffs")
13347 (description
13348 "Patch NG (New Generation) is a command and Python library to parse and
13349apply unified diffs. It has features such as:
13350@itemize
13351@item automatic correction of common patch formatting corruption
13352@item patch format detection (SVN, Hg, Git)
13353@item nice diffstat histogram.
13354@end itemize")
13355 (license license:expat)))
13356
13357(define-public python-numpydoc
13358 (package
13359 (name "python-numpydoc")
13360 (version "1.10.0")
13361 (source
13362 (origin
13363 (method url-fetch)
13364 (uri (pypi-uri "numpydoc" version))
13365 (sha256
13366 (base32
13367 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13368 (build-system pyproject-build-system)
13369 (arguments
13370 (list
13371 #:test-flags
13372 '(list "numpydoc/tests"
13373 "-k" (string-append
13374 ;; TODO: unclear why these fail.
13375 "not test_MyClass and not test_my_function "
13376 ;; This test compares installed vs source absolute file
13377 ;; names.
13378 "and not test_source_file_name_with_properties"))))
13379 (propagated-inputs (list python-sphinx python-tomli))
13380 (native-inputs
13381 (list python-matplotlib python-pytest python-setuptools))
13382 (home-page "https://pypi.org/project/numpydoc/")
13383 (synopsis "Numpy's Sphinx extensions")
13384 (description "Sphinx extension to support docstrings in Numpy format.")
13385 (license license:bsd-2)))
13386
13387(define-public python-numexpr
13388 (package
13389 (name "python-numexpr")
13390 (version "2.14.1")
13391 (source
13392 (origin
13393 (method git-fetch)
13394 (uri (git-reference
13395 (url "https://github.com/pydata/numexpr")
13396 (commit (string-append "v" version))))
13397 (file-name (git-file-name name version))
13398 (sha256
13399 (base32 "1zbpi7whjh6sccn1fndii735gv14kjaaqm3c3w1g2ry0z9948v9v"))))
13400 (build-system pyproject-build-system)
13401 (arguments
13402 (list
13403 ;; tests: 6039 passed, 1 warning
13404 #:test-flags #~(list "--pyargs" "numexpr")
13405 #:phases
13406 #~(modify-phases %standard-phases
13407 (add-before 'check 'remove-local-source
13408 (lambda _
13409 (delete-file-recursively "numexpr"))))))
13410 (native-inputs
13411 (list python-pytest
13412 python-setuptools))
13413 (propagated-inputs
13414 (list python-numpy))
13415 (home-page "https://github.com/pydata/numexpr")
13416 (synopsis "Fast numerical expression evaluator for NumPy")
13417 (description
13418 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13419expressions that operate on arrays are accelerated and use less memory than
13420doing the same calculation in Python. In addition, its multi-threaded
13421capabilities can make use of all your cores, which may accelerate
13422computations, most specially if they are not memory-bounded (e.g. those using
13423transcendental functions).")
13424 (license license:expat)))
13425
13426(define-public python-cycler
13427 (package
13428 (name "python-cycler")
13429 (version "0.12.1")
13430 (source
13431 (origin
13432 (method git-fetch) ;no tests in PyPI archive
13433 (uri (git-reference
13434 (url "https://github.com/matplotlib/cycler")
13435 (commit (string-append "v" version))))
13436 (file-name (git-file-name name version))
13437 (sha256
13438 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13439 (build-system pyproject-build-system)
13440 (native-inputs
13441 (list python-pytest
13442 python-setuptools))
13443 (home-page "https://matplotlib.org/cycler/")
13444 (synopsis "Composable keyword argument iterator")
13445 (description
13446 "When using @code{matplotlib} and plotting more than one line, it is
13447common to want to be able to want to be able to cycle over one or more artist
13448styles; but the plotting logic can quickly become involved.
13449To address this and enable easy cycling over arbitrary @code{kwargs}, the
13450@code{Cycler} class was developed.")
13451 (license license:bsd-3)))
13452
13453(define-public python-colorspacious
13454 (package
13455 (name "python-colorspacious")
13456 (version "1.1.2")
13457 (source
13458 (origin
13459 (method git-fetch)
13460 (uri (git-reference
13461 (url "https://github.com/njsmith/colorspacious")
13462 (commit (string-append "v" version))))
13463 (file-name (git-file-name name version))
13464 (sha256
13465 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13466 (build-system pyproject-build-system)
13467 (arguments (list #:tests? #f)) ; No tests.
13468 (propagated-inputs (list python-numpy))
13469 (native-inputs (list python-pytest python-setuptools))
13470 (home-page "https://github.com/njsmith/colorspacious")
13471 (synopsis "Python library for colorspace conversions")
13472 (description
13473 "@code{colorspacious} is a Python library that lets you convert between
13474colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13475 (license license:expat)))
13476
13477(define-public python-propcache
13478 (package
13479 (name "python-propcache")
13480 (version "0.2.1")
13481 (source
13482 (origin
13483 (method url-fetch)
13484 (uri (pypi-uri "propcache" version))
13485 (sha256
13486 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13487 (build-system pyproject-build-system)
13488 (arguments
13489 (list
13490 #:test-flags
13491 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13492 "--ignore=tests/test_benchmarks.py")
13493 #:phases
13494 '(modify-phases %standard-phases
13495 (add-after 'unpack 'patch-build-system
13496 (lambda _
13497 ;; XXX: I don't know how to tell it to build the extensions in
13498 ;; place.
13499 (substitute* "packaging/pep517_backend/_backend.py"
13500 (("build_inplace=False") "build_inplace=True")))))))
13501 (native-inputs
13502 (list python-cython
13503 python-expandvars
13504 python-pytest
13505 python-pytest-xdist
13506 python-setuptools
13507 python-tomli))
13508 (home-page "https://github.com/aio-libs/propcache")
13509 (synopsis "Accelerated property cache")
13510 (description "The module provides a fast implementation of cached
13511properties for Python 3.9+.")
13512 (license license:asl2.0)))
13513
13514(define-public python-proto-matcher
13515 (package
13516 (name "python-proto-matcher")
13517 (version "0.0.3")
13518 (source
13519 (origin
13520 (method git-fetch)
13521 (uri (git-reference
13522 (url "https://github.com/dayfine/proto-matcher")
13523 (commit version)))
13524 (file-name (git-file-name name version))
13525 (sha256
13526 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13527 (build-system pyproject-build-system)
13528 (native-inputs (list python-pytest python-setuptools))
13529 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13530 (propagated-inputs (list python-protobuf python-pyhamcrest))
13531 (home-page "https://github.com/dayfine/proto-matcher")
13532 (synopsis "PyHamcrest test matchers for protocol buffers")
13533 (description
13534 "This package provides the following PyHamcrest test matchers, that
13535enable matching a protocol buffer message:
13536@table @code
13537@item equals_proto
13538Test the argument equals the given protobuf message.
13539@item approximately
13540Test the argument equals the given protobuf message, while comparing any float
13541field using approximation.
13542@item ignoring_field_paths
13543Test the argument equals the given protobuf message, while ignoring those
13544fields specified in the field paths.
13545@item ignoring_repeated_field_ordering
13546Test the argument equals the given protobuf message, ignoring the ordering of
13547any repeated field.
13548@item partially
13549Test the argument partially equals the given protobuf message, i.e. if a field
13550is in the argument but not in the expected message, it's ignored in the
13551comparison.
13552@end table")
13553 (license license:asl2.0)))
13554
13555(define-public python-matplotlib
13556 (package
13557 (name "python-matplotlib")
13558 (version "3.10.9")
13559 (source
13560 (origin
13561 (method git-fetch)
13562 (uri (git-reference
13563 (url "https://github.com/matplotlib/matplotlib")
13564 (commit (string-append "v" version))))
13565 (file-name (git-file-name name version))
13566 (sha256
13567 (base32 "1mff6s0nldfgdczjrfkkg68j2sx9l7jpslbcyq0d4slhnkx1lp2g"))))
13568 (build-system pyproject-build-system)
13569 (arguments
13570 (list
13571 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13572 #:configure-flags
13573 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13574 "-Dsystem-freetype=true"
13575 "-Dsystem-qhull=true"))
13576 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13577 #:test-flags
13578 #~(list "-m" "not network"
13579 "-n" (number->string (parallel-job-count))
13580 ;; Run the installed tests, which is what we want since not
13581 ;; everything gets built in the source directory.
13582 "--pyargs" "matplotlib"
13583 "-k"
13584 (string-join
13585 (list
13586 ;; XXX: Disable all image comparison tests because we're using
13587 ;; a newer version of FreeType than matplotlib expects. This
13588 ;; leads to minor differences throughout the tests.
13589 "not image_comparison"
13590 "check_figures_equal"
13591 "png" ;disables many problematic image tests
13592 "test_figure_legend_outside"
13593 "test_ft2font_get_kerning"
13594 "test_normal_axes"
13595 "test_get_tightbbox_polar"
13596 ;; The invisible line ordering test fails due to a too short
13597 ;; timeout (see:
13598 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13599 "test_invisible_Line_rendering"
13600 ;; The determinism check test is not deterministic (see:
13601 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13602 "test_determinism_check")
13603 " and not "))
13604 #:phases
13605 #~(modify-phases %standard-phases
13606 (add-after 'unpack 'patch-commands
13607 (lambda _
13608 (substitute* "lib/matplotlib/tests/test_animation.py"
13609 (("/bin/sh") (which "sh")))))
13610 (add-after 'unpack 'patch-dlopen
13611 (lambda* (#:key inputs #:allow-other-keys)
13612 (substitute* "src/_c_internal_utils.cpp"
13613 (("libX11.so.6")
13614 (search-input-file inputs "lib/libX11.so.6")))))
13615 (add-before 'build 'configure-environment
13616 (lambda* (#:key inputs #:allow-other-keys)
13617 ;; Fix rounding errors when using the x87 FPU.
13618 (when (string-prefix? "i686" #$(%current-system))
13619 (setenv "CFLAGS" "-ffloat-store"))))
13620 (add-before 'check 'chdir
13621 (lambda _
13622 ;; Step out of the source directory to avoid interference.
13623 (chdir "/tmp"))))))
13624 (propagated-inputs
13625 (list python-contourpy
13626 python-cycler
13627 python-dateutil
13628 python-fonttools-minimal
13629 python-importlib-resources
13630 python-kiwisolver
13631 python-numpy
13632 python-packaging
13633 python-pillow
13634 python-pyparsing
13635 `(,python "tk")))
13636 (inputs
13637 (list cairo
13638 freetype
13639 glib
13640 libpng
13641 qhull
13642 tcl
13643 tk))
13644 (native-inputs
13645 (list pkg-config
13646 python-meson
13647 pybind11
13648 python-pytest
13649 python-pytest-timeout
13650 python-pytest-xdist
13651 python-setuptools
13652 python-setuptools-scm))
13653 (home-page "https://matplotlib.org/")
13654 (synopsis "2D plotting library for Python")
13655 (description
13656 "Matplotlib is a Python 2D plotting library which produces publication
13657quality figures in a variety of hardcopy formats and interactive environments
13658across platforms. Matplotlib can be used in Python scripts, the python and
13659ipython shell, web application servers, and six graphical user interface
13660toolkits.")
13661 (license license:psfl)))
13662
13663(define-public python-matplotlib-documentation
13664 (package
13665 (inherit python-matplotlib)
13666 (name "python-matplotlib-documentation")
13667 (arguments
13668 (list
13669 #:tests? #f ;we're only generating documentation
13670 #:phases
13671 #~(modify-phases %standard-phases
13672 (add-after 'unpack 'avoid-external-deps
13673 (lambda _
13674 ;; XXX: Avoid theme-switcher to avoid sphinx error
13675 ;; TemplateNotFound('theme-switcher.html')
13676 ;; XXX: Avoid version-switcher because it depends on an
13677 ;; external file, and we pack only one version anyway.
13678 (substitute* "doc/conf.py"
13679 (("\
13680\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13681 "\"navbar_end\": ["))))
13682 (replace 'build
13683 (lambda _
13684 (setenv "HOME" "/tmp")
13685 (chdir "doc")
13686 (invoke "make" "html" "info"
13687 ;; Don't abort on warnings; build in parallel.
13688 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13689 (replace 'install
13690 (lambda _
13691 (let* ((data (string-append #$output "/share"))
13692 (doc (string-append data "/doc/matplotlib"))
13693 (info (string-append data "/info"))
13694 (html (string-append doc "/html")))
13695 (mkdir-p html)
13696 (copy-recursively "build/html" html)
13697 (install-file "build/texinfo/matplotlib.info" info)
13698 ;; The "matplotlib-figures" directory contains are a subset of
13699 ;; the images produced for the html target; simply create a
13700 ;; symlink to it, saving about 11 MiB.
13701 (symlink (string-append html "/_images")
13702 (string-append info "/matplotlib-figures"))))))))
13703 ;; Move all propagated inputs to inputs. *-documentation packages are
13704 ;; expected to be installed as standalone leaf packages, and not as
13705 ;; libraries with propagated inputs.
13706 (propagated-inputs '())
13707 (inputs (append
13708 (package-inputs python-matplotlib)
13709 (package-propagated-inputs python-matplotlib)))
13710 (native-inputs
13711 (list ffmpeg ;for matplotlib animation support
13712 graphviz
13713 inkscape/pinned
13714 python-colorspacious
13715 python-ipython
13716 python-ipykernel
13717 python-ipywidgets
13718 python-matplotlib
13719 python-mpl-sphinx-theme
13720 python-numpydoc
13721 python-pyyaml
13722 python-scipy
13723 python-setuptools
13724 ;; XXX: investigate how to build using a newer version of sphinx.
13725 python-sphinx-6
13726 python-sphinx-copybutton
13727 python-sphinx-design
13728 python-sphinx-gallery
13729 python-sphinx-tags
13730 python-sphinxcontrib-svg2pdfconverter
13731 python-sphinxcontrib-video
13732 texinfo
13733 texlive-dvipng-bin
13734 (texlive-local-tree
13735 (list texlive-amsfonts
13736 texlive-amsmath
13737 texlive-babel
13738 texlive-cm-super
13739 texlive-etoolbox
13740 texlive-expdlist
13741 texlive-fontspec
13742 texlive-times
13743 texlive-type1cm
13744 texlive-underscore
13745 texlive-unicode-math))))
13746 (synopsis "Documentation for the @code{python-matplotlib} package")))
13747
13748(define-public python-matplotlib-inline
13749 (package
13750 (name "python-matplotlib-inline")
13751 (version "0.1.7")
13752 (source
13753 (origin
13754 (method url-fetch)
13755 (uri (pypi-uri "matplotlib_inline" version))
13756 (sha256
13757 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13758 (build-system pyproject-build-system)
13759 (arguments
13760 (list
13761 ;; Tests disabled because of a circular dependency with IPython.
13762 #:tests? #f
13763 #:phases
13764 #~(modify-phases %standard-phases
13765 ;; Disabled because of a circular dependency with IPython.
13766 (delete 'sanity-check))))
13767 (native-inputs
13768 (list python-setuptools))
13769 (propagated-inputs
13770 (list python-matplotlib
13771 python-traitlets))
13772 (home-page "https://github.com/ipython/matplotlib-inline")
13773 (synopsis "Inline Matplotlib backend for Jupyter")
13774 (description
13775 "This package provides a Matplotlib inline back-end for IPython and
13776Jupyter.")
13777 (license license:bsd-3)))
13778
13779(define-public python-matplotlib-venn
13780 (package
13781 (name "python-matplotlib-venn")
13782 (version "1.1.2")
13783 (source
13784 (origin
13785 (method url-fetch)
13786 (uri (pypi-uri "matplotlib-venn" version))
13787 (sha256
13788 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13789 (build-system pyproject-build-system)
13790 (native-inputs (list python-pytest
13791 python-setuptools
13792 python-shapely
13793 python-wheel))
13794 (propagated-inputs
13795 (list python-matplotlib python-numpy python-scipy))
13796 (home-page "https://github.com/konstantint/matplotlib-venn")
13797 (synopsis "Plot area-proportional Venn diagrams")
13798 (description
13799 "This package provides tools for plotting area-proportional two- and
13800three-way Venn diagrams in @code{matplotlib}.")
13801 (license license:expat)))
13802
13803(define-public python-matplotx
13804 (package
13805 (name "python-matplotx")
13806 (version "0.3.10")
13807 (source
13808 (origin
13809 (method git-fetch)
13810 (uri (git-reference
13811 (url "https://github.com/nschloe/matplotx")
13812 (commit (string-append "v" version))))
13813 (file-name (git-file-name name version))
13814 (sha256
13815 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13816 (build-system pyproject-build-system)
13817 (arguments
13818 (list
13819 #:test-flags
13820 ;; This test fails with ValueError: not enough values to unpack.
13821 #~(list "--deselect" "tests/test_spy.py::test_cli"
13822 ;; XXX: unknown failure
13823 "--deselect" "tests/test_spy.py::test_png")))
13824 (native-inputs
13825 (list python-imageio
13826 python-meshzoo
13827 python-pytest
13828 python-scipy-minimal
13829 python-setuptools
13830 python-scikit-fem))
13831 (propagated-inputs
13832 (list python-matplotlib
13833 python-numpy
13834 ;; [optional]
13835 python-networkx
13836 python-pypng
13837 python-scipy))
13838 (home-page "https://github.com/nschloe/matplotx")
13839 (synopsis "Minimal matplotlib styles")
13840 (description
13841 "This package includes some extensions for Matplotlib to create clean
13842plots with a minimalistic style.")
13843 (license license:expat)))
13844
13845(define-public python-cplot
13846 (package
13847 (name "python-cplot")
13848 (version "0.9.3")
13849 (source
13850 (origin
13851 (method git-fetch)
13852 (uri (git-reference
13853 (url "https://github.com/nschloe/cplot")
13854 (commit (string-append "v" version))))
13855 (file-name (git-file-name name version))
13856 (sha256
13857 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13858 (build-system pyproject-build-system)
13859 (native-inputs
13860 (list python-pytest
13861 python-setuptools))
13862 (propagated-inputs
13863 (list python-matplotlib
13864 python-matplotx
13865 python-npx
13866 python-numpy))
13867 (home-page "https://github.com/nschloe/cplot")
13868 (synopsis "Plot complex-valued functions")
13869 (description "@code{cplot} is a Python library for plotting
13870complex-valued functions.")
13871 (license license:gpl3+)))
13872
13873(define-public python-cppheaderparser
13874 (package
13875 (name "python-cppheaderparser")
13876 (version "2.7.4")
13877 (source
13878 (origin
13879 (method url-fetch)
13880 (uri (pypi-uri "CppHeaderParser" version))
13881 (sha256
13882 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13883 (build-system pyproject-build-system)
13884 (arguments
13885 (list
13886 #:tests? #f)) ; no tests
13887 (propagated-inputs (list python-ply))
13888 (native-inputs (list python-setuptools python-wheel))
13889 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13890 (synopsis
13891 "Parse C++ header files and generate a data structure representing the class")
13892 (description
13893 "CppHeaderParser is a pure python module that will parse C++ header files
13894and generate a data structure representing the class.")
13895 (license license:bsd-3)))
13896
13897(define-public python-cppy
13898 (package
13899 (name "python-cppy")
13900 (version "1.3.1")
13901 (source
13902 (origin
13903 (method git-fetch)
13904 (uri (git-reference
13905 (url "https://github.com/nucleic/cppy")
13906 (commit version)))
13907 (file-name (git-file-name name version))
13908 (sha256
13909 (base32 "16g0f9kjyybmlxy9w5bbxm98g7wqhcvh4pw77r0jk3dgd11lkvzy"))))
13910 (build-system pyproject-build-system)
13911 (arguments
13912 (list #:tests? #f)) ;there is just one test coping include directory
13913 (native-inputs
13914 (list python-setuptools
13915 python-setuptools-scm))
13916 (home-page "https://github.com/nucleic/cppy")
13917 (synopsis "C++ header library for Python extension modules")
13918 (description "This package is a small C++ header library which makes it
13919easier to write Python extension modules. The primary feature is a
13920@code{PyObject} smart pointer which automatically handles reference counting
13921and provides convenience methods for performing common object operations.")
13922 (license license:bsd-3)))
13923
13924(define-public python-perfplot
13925 (package
13926 (name "python-perfplot")
13927 (version "0.10.2")
13928 (source
13929 (origin
13930 (method git-fetch)
13931 (uri (git-reference
13932 (url "https://github.com/nschloe/perfplot")
13933 (commit (string-append "v" version))))
13934 (file-name (git-file-name name version))
13935 (sha256
13936 (base32 "1j73m8v9l8bhf79qa9apj6lcw1afxbvdq4mrn0yb31541dhrxvkf"))))
13937 (build-system pyproject-build-system)
13938 (native-inputs
13939 (list python-flit-core
13940 python-pytest))
13941 (propagated-inputs
13942 (list python-matplotlib
13943 python-matplotx
13944 python-numpy
13945 python-rich))
13946 (home-page "https://github.com/nschloe/perfplot")
13947 (synopsis "Performance plots for Python code snippets")
13948 (description "@code{perfplot} extends Python's timeit by testing
13949snippets with input parameters (e.g., the size of an array) and plotting
13950the results.")
13951 (license license:gpl3+)))
13952
13953(define-public python-persist-queue
13954 (package
13955 (name "python-persist-queue")
13956 (version "1.1.0")
13957 (source
13958 (origin
13959 (method git-fetch)
13960 (uri (git-reference
13961 (url "https://github.com/peter-wangxu/persist-queue")
13962 (commit (string-append "v" version))))
13963 (file-name (git-file-name name version))
13964 (sha256
13965 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13966 (build-system pyproject-build-system)
13967 (native-inputs
13968 (list python-pytest
13969 python-pytest-asyncio
13970 python-setuptools))
13971 (propagated-inputs
13972 (list python-aiofiles
13973 python-aiosqlite
13974 python-cbor2
13975 python-dbutils
13976 python-msgpack))
13977 (home-page "https://github.com/peter-wangxu/persist-queue")
13978 (synopsis "Thread-safe disk based persistent queue in Python")
13979 (description
13980 "This package provides a thread-safe disk (file and sqlite) based
13981persistent queue in Python.")
13982 (license license:bsd-3)))
13983
13984(define-public python-pycodestyle
13985 (package
13986 (name "python-pycodestyle")
13987 (version "2.14.0")
13988 (source
13989 (origin
13990 (method url-fetch) ;git has no the same version tag as PyPI
13991 (uri (pypi-uri "pycodestyle" version))
13992 (sha256
13993 (base32 "10xpcy8m54cvnk4a37j4cwrjl9lprlcwkpmbs3wry23qs8bvbdf4"))))
13994 (build-system pyproject-build-system)
13995 (arguments
13996 (list
13997 #:test-backend #~'custom
13998 #:test-flags
13999 ;; Taken from Tox config
14000 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
14001 #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")))
14002 (native-inputs
14003 (list python-setuptools))
14004 (home-page "https://pycodestyle.readthedocs.io/")
14005 (synopsis "Python style guide checker")
14006 (description "@code{pycodestyle} (formerly pep8) is a tool to check
14007Python code against some of the style conventions in
14008@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
14009 (license license:expat)))
14010
14011(define-public python-pycollada
14012 (package
14013 (name "python-pycollada")
14014 (version "0.9.2")
14015 (source
14016 (origin
14017 (method git-fetch)
14018 (uri (git-reference
14019 (url "https://github.com/pycollada/pycollada")
14020 (commit (string-append "v" version))))
14021 (file-name (git-file-name name version))
14022 (sha256
14023 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
14024 (build-system pyproject-build-system)
14025 (native-inputs
14026 (list python-pytest
14027 python-setuptools))
14028 (propagated-inputs
14029 (list python-numpy
14030 python-dateutil))
14031 (home-page "https://pycollada.readthedocs.io")
14032 (synopsis "Reading and writing collada documents library")
14033 (description
14034 "This package implements a functionality for creating, editing and
14035loading @url{https://www.khronos.org/collada/,COLLADA},which is a
14036COLLAborative Design Activity for establishing an interchange file format for
14037interactive 3D applications.
14038
14039The library allows you to load a COLLADA file and interact with it as a python
14040object. In addition, it supports creating a collada python object from
14041scratch, as well as in-place editing.")
14042 (license license:bsd-3)))
14043
14044(define-public python-pyct
14045 (package
14046 (name "python-pyct")
14047 (version "0.5.0")
14048 (source
14049 (origin
14050 (method url-fetch)
14051 (uri (pypi-uri "pyct" version))
14052 (sha256
14053 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
14054 (build-system pyproject-build-system)
14055 (arguments
14056 (list
14057 #:test-flags
14058 ;; These tests want to download example data from the internet.
14059 '(list "-k" (string-append
14060 "not test_examples_with_use_test_data"
14061 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
14062 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
14063 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
14064 (propagated-inputs (list python-param python-pyyaml))
14065 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
14066 (home-page "https://github.com/holoviz-dev/pyct")
14067 (synopsis "Common packaging tasks")
14068 (description
14069 "This Python package provides utilities to run common packaging tasks,
14070e.g. copy examples, fetch data, etc.")
14071 (license license:bsd-3)))
14072
14073(define-public python-multidict
14074 (package
14075 (name "python-multidict")
14076 (version "6.7.0")
14077 (source
14078 (origin
14079 (method git-fetch)
14080 (uri (git-reference
14081 (url "https://github.com/aio-libs/multidict/")
14082 (commit (string-append "v" version))))
14083 (file-name (git-file-name name version))
14084 (sha256
14085 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
14086 (build-system pyproject-build-system)
14087 (arguments
14088 (list
14089 ;; tests: 1395 passed
14090 #:test-flags
14091 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
14092 "--ignore-glob=tests/test_*_benchmarks.py")))
14093 (native-inputs
14094 (list python-objgraph
14095 python-psutil
14096 python-pytest
14097 python-setuptools))
14098 (home-page "https://github.com/aio-libs/multidict/")
14099 (synopsis "Multidict implementation")
14100 (description
14101 "Multidict is dict-like collection of key-value pairs where key might be
14102occurred more than once in the container.")
14103 (license license:asl2.0)))
14104
14105(define-public python-orderedmultidict
14106 (package
14107 (name "python-orderedmultidict")
14108 (version "1.0.1")
14109 (source
14110 (origin
14111 (method url-fetch)
14112 (uri (pypi-uri "orderedmultidict" version))
14113 (sha256
14114 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
14115 (build-system pyproject-build-system)
14116 (propagated-inputs
14117 (list python-six))
14118 (native-inputs
14119 (list python-pytest
14120 python-setuptools))
14121 (home-page "https://github.com/gruns/orderedmultidict")
14122 (synopsis "Python Ordered Multivalue Dictionary - omdict")
14123 (description "This package contains a library for ordered multivalue
14124dictionaries. A multivalue dictionary is a dictionary that can store
14125multiple values for the same key. An ordered multivalue dictionary is a
14126multivalue dictionary that retains the order of insertions and deletions.")
14127 (license license:unlicense)))
14128
14129(define-public python-autopage
14130 (package
14131 (name "python-autopage")
14132 (version "0.5.1")
14133 (source (origin
14134 (method url-fetch)
14135 (uri (pypi-uri "autopage" version))
14136 (sha256
14137 (base32
14138 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
14139 (build-system pyproject-build-system)
14140 (arguments
14141 (list
14142 #:phases
14143 #~(modify-phases %standard-phases
14144 (add-before 'check 'disable-e2e-tests
14145 (lambda _
14146 ;; These tests rely on KeyboardInterrupts which do not
14147 ;; work in the build container.
14148 (delete-file "autopage/tests/test_end_to_end.py"))))))
14149 (native-inputs
14150 (list python-pypa-build
14151 python-setuptools
14152 python-wheel
14153 ;; For tests.
14154 python-fixtures
14155 python-pytest
14156 python-testtools))
14157 (home-page "https://github.com/zaneb/autopage")
14158 (synopsis "Automatic paging for console output")
14159 (description
14160 "Autopage is a Python library to automatically display terminal output
14161from a program in a @dfn{pager} such as @command{less}.")
14162 (license license:asl2.0)))
14163
14164(define-public python-dirty-equals
14165 (package
14166 (name "python-dirty-equals")
14167 (version "0.11.0")
14168 (source
14169 (origin
14170 (method git-fetch)
14171 (uri (git-reference
14172 (url "https://github.com/samuelcolvin/dirty-equals")
14173 (commit (string-append "v" version))))
14174 (file-name (git-file-name name version))
14175 (sha256
14176 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
14177 (build-system pyproject-build-system)
14178 ;; tests: 551 passed, 60 skipped
14179 (native-inputs
14180 (list python-hatchling
14181 python-pydantic
14182 python-pytest
14183 python-pytest-examples
14184 tzdata-for-tests))
14185 (home-page "https://dirty-equals.helpmanual.io/")
14186 (synopsis "Do dirty (but useful) things with equals")
14187 (description
14188 "@code{dirty-equals} is a Python library that (mis)uses the
14189@code{__eq__} method to make code (generally unit tests) more declarative
14190and therefore easier to read and write.")
14191 (license license:expat)))
14192
14193(define-public python-dirty-equals-bootstrap
14194 (hidden-package
14195 (package
14196 (inherit python-dirty-equals)
14197 (name "python-dirty-equals-bootstrap")
14198 (arguments
14199 (list #:tests? #f))
14200 (native-inputs
14201 (list python-hatchling)))))
14202
14203(define-public python-distutils-extra
14204 (package
14205 (name "python-distutils-extra")
14206 (version "2.38")
14207 (source
14208 (origin
14209 (method url-fetch)
14210 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
14211 version "/+download/python-distutils-extra-"
14212 version ".tar.gz"))
14213 (sha256
14214 (base32
14215 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
14216 (build-system pyproject-build-system)
14217 (arguments
14218 (list #:tests? #f)) ;tests are outdated and broken
14219 (native-inputs (list python-setuptools python-wheel))
14220 (home-page "https://launchpad.net/python-distutils-extra/")
14221 (synopsis "Enhancements to Python's distutils")
14222 (description
14223 "The python-distutils-extra module enables you to easily integrate
14224gettext support, themed icons, and scrollkeeper-based documentation into
14225Python's distutils.")
14226 (license license:gpl2)))
14227
14228(define-public python-olefile
14229 (package
14230 (name "python-olefile")
14231 (version "0.47")
14232 (source
14233 (origin
14234 (method git-fetch)
14235 (uri (git-reference
14236 (url "https://github.com/decalage2/olefile")
14237 (commit (string-append "v" version))))
14238 (file-name (git-file-name name version))
14239 (sha256
14240 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
14241 (build-system pyproject-build-system)
14242 (native-inputs
14243 (list python-pytest
14244 python-setuptools))
14245 (home-page "https://www.decalage.info/python/olefileio")
14246 (synopsis "Read and write Microsoft OLE2 files")
14247 (description
14248 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
14249Storage or Compound Document, Microsoft Office). It is an improved version of
14250the OleFileIO module from PIL, the Python Image Library.")
14251 (license license:bsd-3)))
14252
14253(define-public python-property-cached
14254 (package
14255 (name "python-property-cached")
14256 (version "1.6.4")
14257 (source
14258 (origin
14259 (method url-fetch)
14260 (uri (pypi-uri "property-cached" version ".zip"))
14261 (sha256
14262 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
14263 (patches
14264 (search-patches "python-property-cached-asyncio-3_11.patch"))))
14265 (build-system pyproject-build-system)
14266 (arguments
14267 (list
14268 ;; AssertionError.
14269 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
14270 (native-inputs (list python-freezegun python-pytest unzip
14271 python-setuptools python-wheel))
14272 (home-page "https://github.com/althonos/property-cached/")
14273 (synopsis "Decorator for caching properties in classes")
14274 (description "This package provides a decorator for caching properties in
14275classes. It is forked from @code{cached-property}.")
14276 (license license:bsd-3)))
14277
14278(define-public python-pdf2image
14279 (package
14280 (name "python-pdf2image")
14281 (version "1.17.0")
14282 (source
14283 (origin
14284 (method git-fetch)
14285 (uri (git-reference
14286 (url "https://github.com/Belval/pdf2image")
14287 (commit (string-append "v" version))))
14288 (file-name (git-file-name name version))
14289 (sha256
14290 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
14291 (build-system pyproject-build-system)
14292 (arguments
14293 (list
14294 ;; The following excluded tests assume hardcoded binary paths to
14295 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
14296 #:test-flags
14297 #~(list "--exclude=^test_use_poppler_path$"
14298 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
14299 (propagated-inputs (list python-pillow))
14300 (inputs (list poppler))
14301 (native-inputs (list python-pynose which python-setuptools))
14302 (home-page "https://github.com/Belval/pdf2image")
14303 (synopsis
14304 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
14305 (description
14306 "This package provides a Python API wrapping the @command{pdftoppm} and
14307@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
14308Python list with elements of type @code{PIL.Image} (from the
14309@code{python-pillow} library).")
14310 (license license:expat)))
14311
14312(define-public python-pikepdf
14313 (package
14314 (name "python-pikepdf")
14315 (version "8.15.1")
14316 (source
14317 (origin
14318 (method git-fetch)
14319 (uri (git-reference
14320 (url "https://github.com/pikepdf/pikepdf")
14321 (commit (string-append "v" version))))
14322 (file-name (git-file-name name version))
14323 (sha256
14324 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
14325 (build-system pyproject-build-system)
14326 (native-inputs
14327 (list pybind11-2
14328 python-attrs
14329 python-hypothesis
14330 python-setuptools-scm
14331 python-psutil
14332 python-pytest
14333 python-pytest-timeout
14334 python-pytest-xdist
14335 python-dateutil
14336 python-xmp-toolkit
14337 python-tomli
14338 python-setuptools))
14339 (inputs
14340 (list qpdf))
14341 (propagated-inputs
14342 (list python-deprecated python-lxml python-packaging python-pillow))
14343 (home-page "https://github.com/pikepdf/pikepdf")
14344 (synopsis "Read and write PDFs with Python")
14345 (description
14346 "pikepdf is a Python library for reading and writing PDF files.")
14347 (license license:mpl2.0)))
14348
14349(define-public python-pillow
14350 (package
14351 (name "python-pillow")
14352 (version "12.2.0")
14353 (source
14354 (origin
14355 (method git-fetch)
14356 (uri (git-reference
14357 (url "https://github.com/python-pillow/Pillow")
14358 (commit version)))
14359 (file-name (git-file-name name version))
14360 (sha256
14361 (base32 "140ynzxpazq6gq041bhkzx314z4kkzv3wlmvph68a0nkj9nqa3pg"))))
14362 (build-system pyproject-build-system)
14363 (arguments
14364 (list
14365 #:phases
14366 #~(modify-phases %standard-phases
14367 (add-after 'unpack 'patch-ldconfig
14368 (lambda _
14369 (substitute* "setup.py"
14370 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14371 (replace 'check
14372 (lambda* (#:key tests? #:allow-other-keys)
14373 (when tests?
14374 (setenv "HOME" (getcwd))
14375 (invoke "python" "selftest.py" "--installed")
14376 (invoke "python" "-m" "pytest" "-vv")))))))
14377 (native-inputs (list pybind11
14378 python-defusedxml
14379 python-markdown2
14380 python-olefile
14381 python-pytest
14382 python-setuptools
14383 python-trove-classifiers))
14384 (inputs (list freetype
14385 lcms
14386 libjpeg-turbo
14387 libtiff
14388 libwebp
14389 openjpeg
14390 zlib))
14391 (home-page "https://python-pillow.github.io/")
14392 (synopsis "Fork of the Python Imaging Library")
14393 (description
14394 "The Python Imaging Library adds image processing capabilities to your
14395Python interpreter. This library provides extensive file format support, an
14396efficient internal representation, and fairly powerful image processing
14397capabilities. The core image library is designed for fast access to data
14398stored in a few basic pixel formats. It should provide a solid foundation for
14399a general image processing tool.")
14400 (properties `((cpe-name . "pillow")))
14401 (license (license:x11-style
14402 "https://github.com/python-pillow/Pillow/blob/12.2.0/LICENSE"
14403 "MIT-CMU License"))))
14404
14405(define-public python-pillow-avif-plugin
14406 (package
14407 (name "python-pillow-avif-plugin")
14408 (version "1.5.5")
14409 (source
14410 (origin
14411 (method git-fetch)
14412 (uri (git-reference
14413 (url "https://github.com/fdintino/pillow-avif-plugin/")
14414 (commit (string-append "v" version))))
14415 (file-name (git-file-name name version))
14416 (sha256
14417 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14418 (build-system pyproject-build-system)
14419 (propagated-inputs (list python-requests))
14420 (native-inputs (list python-packaging
14421 python-pillow
14422 python-pytest
14423 python-setuptools))
14424 (inputs (list libavif))
14425 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14426 (synopsis "Pillow plugin that adds avif support via libavif")
14427 (description
14428 "This package provides a pillow plugin that adds avif support via
14429libavif.")
14430 (license license:expat)))
14431
14432(define-public python-pillow-heif
14433 (package
14434 (name "python-pillow-heif")
14435 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14436 ;; commit is taken from the master branch.
14437 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14438 (revision . "0")))
14439 (version (git-version "1.3.0"
14440 (assoc-ref properties 'revision)
14441 (assoc-ref properties 'commit)))
14442 (source
14443 (origin
14444 (method git-fetch)
14445 (uri (git-reference
14446 (url "https://github.com/bigcat88/pillow_heif")
14447 (commit (assoc-ref properties 'commit))))
14448 (file-name (git-file-name name version))
14449 (sha256
14450 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14451 (build-system pyproject-build-system)
14452 (inputs (list libheif))
14453 (propagated-inputs (list python-pillow))
14454 (native-inputs (list opencv ; for opencv-python
14455 python-defusedxml
14456 python-numpy
14457 python-packaging
14458 python-pympler
14459 python-pytest
14460 python-setuptools))
14461 (home-page "https://github.com/bigcat88/pillow_heif")
14462 (synopsis "Python interface for libheif library")
14463 (description "This package provides Python bindings for the libheif library
14464and a plugin for Pillow.")
14465 (license license:bsd-3)))
14466
14467(define-public python-pillow-jxl-plugin
14468 (package
14469 (name "python-pillow-jxl-plugin")
14470 (version "1.3.7")
14471 (source
14472 (origin
14473 (method git-fetch)
14474 (uri (git-reference
14475 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14476 (commit (string-append "v" version))))
14477 (file-name (git-file-name name version))
14478 (sha256
14479 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14480 (build-system pyproject-build-system)
14481 (arguments
14482 (list
14483 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14484 ;; in Guix.
14485 #:tests? #f
14486 #:imported-modules `(,@%cargo-build-system-modules
14487 ,@%pyproject-build-system-modules)
14488 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14489 (guix build pyproject-build-system)
14490 (guix build utils))
14491 #:phases
14492 #~(modify-phases %standard-phases
14493 (add-after 'unpack 'prepare-cargo-build-system
14494 (lambda args
14495 (for-each (lambda (phase)
14496 (format #t "Running cargo phase: ~a~%" phase)
14497 (apply (assoc-ref cargo:%standard-phases phase)
14498 #:cargo-target #$(cargo-triplet)
14499 args))
14500 '(unpack-rust-crates
14501 configure
14502 check-for-pregenerated-files
14503 patch-cargo-checksums))))
14504 (add-after 'unpack 'patch-pyproject
14505 (lambda _
14506 ;; maturin failed to parse pyproject.toml.
14507 (substitute* "pyproject.toml"
14508 (("^license-files = .*") "")))))))
14509 (propagated-inputs (list python-brotli
14510 python-packaging
14511 python-pillow))
14512 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14513 (native-inputs (list maturin
14514 python-numpy
14515 python-pytest
14516 rust
14517 `(,rust "cargo")))
14518 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14519 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14520 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14521 (description "This package provides pillow plugin for JPEG-XL, using Rust
14522for bindings.")
14523 (license license:gpl3+)))
14524
14525(define-public python-jxlpy
14526 (package
14527 (name "python-jxlpy")
14528 (version "0.9.5")
14529 (source
14530 (origin
14531 (method git-fetch)
14532 (uri (git-reference
14533 (url "https://github.com/olokelo/jxlpy")
14534 (commit version)))
14535 (file-name (git-file-name name version))
14536 (sha256
14537 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14538 (build-system pyproject-build-system)
14539 (arguments (list #:tests? #f)) ; no tests, just examples
14540 (inputs (list libjxl))
14541 (propagated-inputs (list python-cython))
14542 (native-inputs (list python-cython python-setuptools))
14543 (home-page "https://github.com/olokelo/jxlpy")
14544 (synopsis "JPEG XL integration in Python")
14545 (description "This package provides Cython-based Python bindings for
14546libjxl, as well as a pillow plugin.")
14547 (license license:expat)))
14548
14549(define-public python-pixelmatch
14550 (package
14551 (name "python-pixelmatch")
14552 (version "0.3.0")
14553 (source
14554 (origin
14555 (method git-fetch)
14556 (uri (git-reference
14557 (url "https://github.com/whtsky/pixelmatch-py")
14558 (commit (string-append "v" version))))
14559 (file-name (git-file-name name version))
14560 (sha256
14561 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14562 (build-system pyproject-build-system)
14563 (arguments
14564 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14565 (list #:tests? #f))
14566 (native-inputs
14567 (list python-poetry-core
14568 python-pillow
14569 python-pytest
14570 python-pytest-benchmark))
14571 (home-page "https://github.com/whtsky/pixelmatch-py")
14572 (synopsis "Pixel-level image comparison library")
14573 (description
14574 "This package provides a pixel-level image comparison library for Python,
14575originally created to compare screenshots in tests. Its features include
14576accurate anti-aliased pixels detection and perceptual color difference
14577metrics.")
14578 (license license:isc)))
14579
14580(define-public python-imagecodecs
14581 (package
14582 (name "python-imagecodecs")
14583 (version "2025.8.2")
14584 (source
14585 (origin
14586 (method url-fetch)
14587 (uri (pypi-uri "imagecodecs" version))
14588 (sha256
14589 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14590 (modules '((guix build utils)))
14591 (snippet #~(for-each delete-file
14592 ;; Delete pre-generated Cython files.
14593 (find-files "imagecodecs" "_.*\\.c$")))))
14594 (build-system pyproject-build-system)
14595 (arguments
14596 (list
14597 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14598 #:test-flags
14599 ;; Some of those tests are flaky.
14600 #~(list "-k" "not test_cms_identity_transforms")
14601 #:phases
14602 #~(modify-phases %standard-phases
14603 (add-after 'unpack 'create-configuration
14604 (lambda _
14605 ;; By default everything is enabled. We can selectively disable
14606 ;; extensions (and thus dependencies) by deleting them from the
14607 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14608 (call-with-output-file "imagecodecs_distributor_setup.py"
14609 (lambda (port)
14610 (format port "\
14611def customize_build(EXTENSIONS, OPTIONS):
14612~{ del EXTENSIONS[~s]~%~}~%"
14613 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14614 ;; Those rely on unpackaged inputs.
14615 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14616 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14617 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14618 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14619 "zlibng" "zopfli"))))))
14620 (add-after 'unpack 'fix-sanity-check
14621 (lambda _
14622 ;; XXX: Don't exit twice. The generated script already does that.
14623 (substitute* "imagecodecs/__main__.py"
14624 (("sys\\.exit\\(main\\(\\)\\)")
14625 ""))))
14626 (add-before 'check 'configure-tests
14627 (lambda _
14628 (setenv "HOME" (getcwd)))))))
14629 (inputs
14630 (list brotli
14631 c-blosc
14632 c-blosc2
14633 giflib
14634 lcms
14635 libheif
14636 libjpeg-turbo
14637 libpng
14638 libtiff
14639 libwebp
14640 lz4
14641 lzfse
14642 snappy
14643 xz
14644 zlib
14645 `(,zstd "lib")))
14646 (propagated-inputs
14647 (list python-numpy python-matplotlib python-tifffile))
14648 (native-inputs
14649 (list python-cython python-pytest python-setuptools))
14650 (home-page "https://www.lfd.uci.edu/~gohlke/")
14651 (synopsis "Image transformation, compression, and decompression codecs")
14652 (description
14653 "Imagecodecs is a Python library that provides block-oriented, in-memory
14654buffer transformation, compression, and decompression functions for use in the
14655tifffile, czifile, and other scientific image input/output modules.")
14656 (license license:bsd-3)))
14657
14658(define-public python-property-manager
14659 (package
14660 (name "python-property-manager")
14661 (version "3.0")
14662 (source
14663 (origin
14664 (method git-fetch)
14665 (uri (git-reference
14666 (url "https://github.com/xolox/python-property-manager")
14667 (commit version)))
14668 (file-name (git-file-name name version))
14669 (sha256
14670 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14671 (build-system pyproject-build-system)
14672 (native-inputs (list python-pytest python-setuptools))
14673 (propagated-inputs
14674 (list python-verboselogs
14675 python-humanfriendly
14676 python-coloredlogs))
14677 (home-page "https://github.com/xolox/python-property-manager")
14678 (synopsis "Useful property variants for Python programming")
14679 (description
14680 "The @code{property-manager} package defines several custom property
14681variants for Python programming including required properties,writable
14682properties, cached properties, etc.")
14683 (license license:expat)))
14684
14685(define-public python-executing
14686 (package
14687 (name "python-executing")
14688 (version "2.2.0")
14689 (source
14690 (origin
14691 (method url-fetch)
14692 (uri (pypi-uri "executing" version))
14693 (sha256
14694 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14695 (build-system pyproject-build-system)
14696 (arguments
14697 (list
14698 #:test-flags
14699 ;; Test needs IPython
14700 #~(list "-k" "not test_two_statement_lookups")
14701 #:phases
14702 #~(modify-phases %standard-phases
14703 (add-after 'unpack 'fix-tests
14704 (lambda _
14705 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14706 (substitute* "pyproject.toml"
14707 (("ignore_missing_imports = true.*")
14708 "ignore_missing_imports = true
14709
14710[tool.pytest.ini_options]
14711python_functions = \"test_\"\n")))))))
14712 (native-inputs
14713 (list python-asttokens
14714 python-littleutils
14715 python-pytest
14716 python-rich
14717 python-setuptools
14718 python-setuptools-scm
14719 python-wheel))
14720 (home-page "https://github.com/alexmojaki/executing")
14721 (synopsis "Get information about what a Python frame is currently doing")
14722 (description "This package lets you get information about what a frame is
14723currently doing, particularly the AST node being executed.")
14724 (license license:expat)))
14725
14726(define-public python-executor
14727 (package
14728 (name "python-executor")
14729 (version "23.2")
14730 (source
14731 (origin
14732 (method git-fetch)
14733 (uri (git-reference
14734 (url "https://github.com/xolox/python-executor")
14735 (commit version)))
14736 (file-name (git-file-name name version))
14737 (sha256
14738 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14739 (build-system pyproject-build-system)
14740 (arguments
14741 (list #:tests? #f)) ;TODO: tests require root/sudo
14742 (native-inputs (list python-mock python-pytest python-setuptools))
14743 (propagated-inputs
14744 (list python-six
14745 python-property-manager
14746 python-fasteners
14747 python-virtualenv))
14748 (home-page "https://github.com/xolox/python-executor")
14749 (synopsis "Programmer friendly subprocess wrapper")
14750 (description
14751 "The @code{executor} package is a simple wrapper for Python’s subprocess
14752module that makes it very easy to handle subprocesses on UNIX systems with
14753proper escaping of arguments and error checking currently doing, particularly
14754the AST node being executed.")
14755 (license license:expat)))
14756
14757(define-public python-roifile
14758 (package
14759 (name "python-roifile")
14760 (version "2025.5.10")
14761 (source
14762 (origin
14763 (method url-fetch)
14764 (uri (pypi-uri "roifile" version))
14765 (sha256
14766 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14767 (build-system pyproject-build-system)
14768 (arguments (list #:tests? #f)) ; There are none.
14769 (native-inputs (list python-setuptools))
14770 (propagated-inputs (list python-numpy))
14771 (home-page "https://www.lfd.uci.edu/~gohlke/")
14772 (synopsis "Read and write ImageJ ROI format")
14773 (description "Roifile is a Python library to read, write, create, and plot
14774ImageJ ROIs, an undocumented and ImageJ application specific format to store
14775regions of interest, geometric shapes, paths, text, etc for image overlays.")
14776 (license license:bsd-3)))
14777
14778(define-public python-lfdfiles
14779 (package
14780 (name "python-lfdfiles")
14781 (version "2026.4.30")
14782 (source
14783 (origin
14784 (method url-fetch)
14785 (uri (pypi-uri "lfdfiles" version))
14786 (sha256
14787 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14788 (modules '((guix build utils)))
14789 (snippet
14790 ;; Delete pre-generated Cython files.
14791 #~(begin
14792 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14793 (delete-file "lfdfiles/conftest.py")))))
14794 (build-system pyproject-build-system)
14795 (arguments
14796 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14797 (list #:tests? #f))
14798 (native-inputs (list python-setuptools))
14799 (propagated-inputs (list python-click python-numpy python-tifffile))
14800 (home-page "https://www.lfd.uci.edu/~gohlke/")
14801 (synopsis "Work with LFD data files")
14802 (description
14803 "Lfdfiles is a Python library and console script for reading, writing,
14804converting, and viewing many of the proprietary file formats used to store
14805experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14806 (license license:bsd-3)))
14807
14808;; ~8Mo of test files.
14809(define python-av-testdata
14810 (file-union
14811 "python-av-testdata"
14812 (cons*
14813 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14814 `(,(string-append "pyav-curated/" file)
14815 ,(origin
14816 (method url-fetch)
14817 (uri (string-append "https://pyav.org/datasets/" file))
14818 (sha256
14819 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14820 (map
14821 (match-lambda
14822 ((file . hash)
14823 (list (string-append "fate-suite/" file)
14824 (origin
14825 (method url-fetch)
14826 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14827 (sha256 (base32 hash))))))
14828 '(("aac/latm_stereo_to_51.ts" .
14829 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14830 ("h264/extradata-reload-multi-stsd.mov" .
14831 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14832 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14833 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14834 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14835 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14836 ("h264/interlaced_crop.mp4" .
14837 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14838 ("hap/HAPQA_NoSnappy_127x1.mov" .
14839 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14840 ("mkv/codec_delay_opus.mkv" .
14841 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14842 ("mov/displaymatrix.mov" .
14843 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14844 ("mov/mov-1elist-ends-last-bframe.mov" .
14845 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14846 ("mov/white_zombie_scrunch-part.mov" .
14847 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14848 ("mpeg2/mpeg2_field_encoding.ts" .
14849 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14850 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14851 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14852 ("mxf/track_01_v02.mxf" .
14853 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14854 ("png1/55c99e750a5fd6_50314226.png" .
14855 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14856 ("qtrle/aletrek-rle.mov" .
14857 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14858 ("sub/MovText_capability_tester.mp4" .
14859 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14860 ("sub/vobsub.sub" .
14861 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14862
14863(define-public python-av
14864 (package
14865 (name "python-av")
14866 (version "16.0.1")
14867 (source
14868 (origin
14869 (method url-fetch)
14870 (uri (pypi-uri "av" version))
14871 (sha256
14872 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14873 (build-system pyproject-build-system)
14874 (arguments
14875 (list
14876 ;; Upstream is not great in responding to open issues or change requests.
14877 ;; See:
14878 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14879 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14880 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14881 #:test-flags
14882 ;; Writing to custom IO requires network access.
14883 #~(list "-k" "not test_writing_to_custom_io_dash")
14884 #:phases
14885 #~(modify-phases %standard-phases
14886 (add-before 'check 'pre-check
14887 (lambda _
14888 ;; This would otherwise interfere with finding the installed
14889 ;; av when running tests.
14890 (delete-file-recursively "av")
14891 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14892 (substitute* "tests/common.py"
14893 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14894 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14895 (native-inputs
14896 (list pkg-config
14897 python-cython
14898 python-numpy
14899 python-pillow
14900 python-pytest
14901 python-setuptools))
14902 (inputs (list ffmpeg))
14903 (home-page "https://github.com/PyAV-Org/PyAV")
14904 (synopsis "Pythonic bindings for FFmpeg's libraries")
14905 (description
14906 "PyAV is a Python library that allows for direct and precise manipulation
14907of media through containers, streams, packets, codecs, and frames. It provides
14908access to the powerful FFmpeg libraries while managing the complex details as
14909much as possible.
14910PyAV also facilitates data transformation and integration with
14911other packages such as Numpy and Pillow. However, working with media is a
14912challenging task and PyAV cannot abstract it away or make all the best decisions
14913for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14914be necessary. Nonetheless, PyAV is an essential tool when working with media
14915that requires its specific capabilities.")
14916 (license license:bsd-3)))
14917
14918(define-public python-ffmpeg-python
14919 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14920 (package
14921 (name "python-ffmpeg-python")
14922 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14923 (revision . "0")))
14924 (version (git-version "0.2.0"
14925 (assoc-ref properties 'revision)
14926 (assoc-ref properties 'commit)))
14927 (source
14928 (origin
14929 (method git-fetch)
14930 (uri (git-reference
14931 (url "https://github.com/kkroening/ffmpeg-python.git")
14932 (commit (assoc-ref properties 'commit))))
14933 (file-name (git-file-name name version))
14934 (sha256
14935 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14936 (build-system pyproject-build-system)
14937 (arguments
14938 (list
14939 #:test-flags
14940 #~(list "-k" "not test_pipe and not test__probe")
14941 #:phases
14942 #~(modify-phases %standard-phases
14943 (add-after 'unpack 'hardcode-ffmpeg
14944 (lambda* (#:key inputs #:allow-other-keys)
14945 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14946 (substitute* "ffmpeg/_run.py"
14947 (("cmd='ffmpeg'")
14948 (string-append "cmd='" ffmpeg "'")))
14949 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14950 (("out_file.compile\\(\\) == \\['ffmpeg'")
14951 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14952 (inputs (list ffmpeg))
14953 (propagated-inputs (list python-future))
14954 (native-inputs (list python-future
14955 python-numpy
14956 python-pytest
14957 python-pytest-mock
14958 python-setuptools))
14959 (home-page "https://github.com/kkroening/ffmpeg-python")
14960 (synopsis "Python bindings for FFmpeg with complex filtering support")
14961 (description
14962 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14963Python terms, taking care of running ffmpeg with the correct command-line
14964arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14965 (license license:asl2.0)))
14966
14967(define-public python-imageio-ffmpeg
14968 (package
14969 (name "python-imageio-ffmpeg")
14970 (version "0.6.0")
14971 (source
14972 (origin
14973 (method url-fetch)
14974 (uri (pypi-uri "imageio_ffmpeg" version))
14975 (sha256
14976 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14977 (build-system pyproject-build-system)
14978 (arguments
14979 (list
14980 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14981 #:phases
14982 #~(modify-phases %standard-phases
14983 (add-after 'unpack 'hardcode-ffmpeg
14984 (lambda* (#:key inputs #:allow-other-keys)
14985 (substitute* "imageio_ffmpeg/_utils.py"
14986 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14987 (string-append "(" all " or \""
14988 (search-input-file inputs "bin/ffmpeg")
14989 "\")"))))))))
14990 (native-inputs
14991 (list python-setuptools
14992 python-wheel))
14993 (inputs
14994 (list ffmpeg))
14995 (home-page "https://github.com/imageio/imageio-ffmpeg")
14996 (synopsis "FFMPEG wrapper for Python")
14997 (description
14998 "This package provides an FFMPEG wrapper for working with video files.
14999It implements generator functions for reading and writing data to and from
15000FFMPEG, reliably terminating the process when done.")
15001 (license license:bsd-2)))
15002
15003(define-public python-imageio
15004 (package
15005 (name "python-imageio")
15006 (version "2.36.1")
15007 (source
15008 (origin
15009 (method url-fetch)
15010 (uri (pypi-uri "imageio" version))
15011 (sha256
15012 (base32
15013 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
15014 (build-system pyproject-build-system)
15015 (arguments
15016 (list
15017 #:test-flags #~(list "-m" "not needs_internet"
15018 ;; This attempts to load libGL.so (provided by mesa)
15019 ;; at the Python store path (sys.base_prefix?).
15020 "-k" "not test_findlib2"
15021 "--ignore" "tests/test_freeimage.py")
15022 #:phases
15023 #~(modify-phases %standard-phases
15024 (add-after 'unpack 'fix-source
15025 (lambda* (#:key inputs #:allow-other-keys)
15026 (substitute* "imageio/core/util.py"
15027 (("\"/var/tmp\"")
15028 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
15029 (propagated-inputs
15030 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
15031 (native-inputs
15032 (list python-fsspec
15033 python-pytest
15034 python-setuptools))
15035 (home-page "https://imageio.github.io/")
15036 (synopsis "Library for reading and writing a wide range of image data")
15037 (description
15038 "Imageio is a Python library that provides an easy interface to read and
15039write a wide range of image data, including animated images, video, volumetric
15040data, and scientific formats.")
15041 (license license:bsd-2)))
15042
15043(define-public python-pyudorandom
15044 ;; Releases are not tagged in Git:
15045 ;; https://github.com/mewwts/pyudorandom/issues/3
15046 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
15047 (revision "0"))
15048 (package
15049 (name "python-pyudorandom")
15050 (version (git-version "1.0.0" revision commit))
15051 (source
15052 (origin
15053 (method git-fetch)
15054 (uri (git-reference
15055 (url "https://github.com/mewwts/pyudorandom")
15056 (commit commit)))
15057 (file-name (git-file-name name version))
15058 (sha256
15059 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
15060 (build-system pyproject-build-system)
15061 (arguments (list #:test-backend #~'unittest))
15062 (native-inputs (list python-setuptools))
15063 (home-page "https://github.com/mewwts/pyudorandom")
15064 (synopsis "Generate pseudorandom numbers by using algebra")
15065 (description
15066 "The @code{pyudorandom} module lets you iterate over a list
15067in a non-succsessive, yet deterministic way based on integer modulo.
15068It comes in handy when you want to mix up the items, but don't need
15069any guarantees of randomness. It might be slow on small data,
15070but shall be significantly faster than @code{random.shuffle}
15071for longer lists.")
15072 (license license:expat))))
15073
15074(define-public python-pyvips
15075 (package
15076 (name "python-pyvips")
15077 (version "3.1.1")
15078 (source
15079 (origin
15080 (method git-fetch) ; PyPI does not include test helpers
15081 (uri (git-reference
15082 (url "https://github.com/libvips/pyvips")
15083 (commit (string-append "v" version))))
15084 (file-name (git-file-name name version))
15085 (sha256
15086 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
15087 (build-system pyproject-build-system)
15088 (native-inputs
15089 (list pkg-config
15090 python-pytest
15091 python-setuptools
15092 python-wheel))
15093 (inputs
15094 (list glib vips))
15095 (propagated-inputs
15096 (list python-cffi python-pkgconfig))
15097 (home-page "https://github.com/libvips/pyvips")
15098 (synopsis "Python bindings for VIPS")
15099 (description "The @code{pyvips} package provides Python bindings for VIPS,
15100a multithreaded image-processing system with low memory needs.")
15101 (license license:expat)))
15102
15103;; WARNING: This package is a dependency of mesa.
15104;; There are no users in python-xyz for this package, consider to adopt closer
15105;; to Mesa.
15106(define-public python-pycparser
15107 (package
15108 (name "python-pycparser")
15109 (version "2.22")
15110 (source
15111 (origin
15112 (method url-fetch)
15113 (uri (pypi-uri "pycparser" version))
15114 (sha256
15115 (base32
15116 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
15117 (outputs '("out" "doc"))
15118 (build-system pyproject-build-system)
15119 (arguments
15120 (list
15121 #:test-backend #~'unittest
15122 #:phases
15123 #~(modify-phases %standard-phases
15124 (add-after 'install 'install-doc
15125 (lambda _
15126 (let* ((data (string-append #$output:doc "/share"))
15127 (doc (string-append data "/doc/" #$name "-" #$version))
15128 (examples (string-append doc "/examples")))
15129 (mkdir-p examples)
15130 (for-each (lambda (file)
15131 (copy-file (string-append "." file)
15132 (string-append doc file)))
15133 '("/README.rst" "/CHANGES" "/LICENSE"))
15134 (copy-recursively "examples" examples)))))))
15135 (native-inputs
15136 (list python-setuptools))
15137 (home-page "https://github.com/eliben/pycparser")
15138 (synopsis "C parser in Python")
15139 (description
15140 "Pycparser is a complete parser of the C language, written in pure Python
15141using the PLY parsing library. It parses C code into an AST and can serve as
15142a front-end for C compilers or analysis tools.")
15143 (license license:bsd-3)))
15144
15145(define-public python-pywavelets
15146 (package
15147 (name "python-pywavelets")
15148 (version "1.8.0")
15149 (home-page "https://github.com/PyWavelets/pywt")
15150 (source (origin
15151 (method url-fetch)
15152 (uri (pypi-uri "pywavelets" version))
15153 (sha256
15154 (base32
15155 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
15156 (build-system pyproject-build-system)
15157 (arguments
15158 (list
15159 #:test-flags '(list "--pyargs" "pywt")
15160 #:phases
15161 #~(modify-phases %standard-phases
15162 ;; The compiled libraries are only in the output at this point,
15163 ;; but they are needed to run tests.
15164 ;; FIXME: This should be handled by the pyargs pytest argument,
15165 ;; but is not for some reason.
15166 (add-before 'check 'pre-check
15167 (lambda _ (chdir #$output))))))
15168 (native-inputs
15169 (list meson
15170 ninja
15171 pkg-config
15172 python-cython
15173 python-meson
15174 python-numpy
15175 python-pytest))
15176 (propagated-inputs
15177 (list python-numpy python-scipy))
15178 (synopsis "Wavelet transforms in Python")
15179 (description
15180 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
15181mathematical basis functions that are localized in both time and frequency.
15182Wavelet transforms are time-frequency transforms employing wavelets. They are
15183similar to Fourier transforms, the difference being that Fourier transforms are
15184localized only in frequency instead of in time and frequency.")
15185 (license license:expat)))
15186
15187(define-public python-pywal
15188 (package
15189 (name "python-pywal")
15190 (version "3.3.0")
15191 (source
15192 (origin
15193 (method git-fetch)
15194 (uri (git-reference
15195 (url "https://github.com/dylanaraps/pywal")
15196 (commit version)))
15197 (file-name (git-file-name name version))
15198 (sha256
15199 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
15200 (build-system pyproject-build-system)
15201 (arguments
15202 `(#:phases
15203 (modify-phases %standard-phases
15204 (add-before 'check 'fix-home-directory
15205 (lambda _
15206 ;; Tests fail with "Permission denied: '/homeless-shelter'".
15207 (setenv "HOME" "/tmp"))))))
15208 (native-inputs
15209 (list python-pytest
15210 python-setuptools))
15211 (inputs
15212 (list imagemagick))
15213 (home-page "https://github.com/dylanaraps/pywal")
15214 (synopsis "Color palette generator and applicator")
15215 (description
15216 "Pywal is a tool that generates a color palette from the dominant colors
15217in an image. It then applies the colors system-wide and on-the-fly in all of
15218your favourite programs.")
15219 (license license:expat)))
15220
15221(define-public python-pywal16
15222 (package
15223 (name "python-pywal16")
15224 (version "3.8.10")
15225 (source
15226 (origin
15227 (method url-fetch)
15228 (uri (pypi-uri "pywal16" version))
15229 (sha256
15230 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
15231 (build-system pyproject-build-system)
15232 (arguments
15233 (list
15234 #:phases
15235 '(modify-phases %standard-phases
15236 (add-before 'check 'set-HOME
15237 (lambda _ (setenv "HOME" "/tmp"))))))
15238 (native-inputs
15239 (list imagemagick
15240 python-pytest
15241 python-setuptools))
15242 (home-page "https://github.com/eylles/pywal16")
15243 (synopsis "16 colors fork of pywal")
15244 (description
15245 "Pywal16 is a tool that generates a color palette from the dominant
15246colors in an image. It then applies the colors system-wide and on-the-fly in
15247all of your favorite programs.")
15248 (license license:expat)))
15249
15250(define-public python-click-didyoumean
15251 (package
15252 (name "python-click-didyoumean")
15253 (version "0.3.1")
15254 (source
15255 (origin
15256 (method git-fetch) ;no tests in PyPI archive
15257 (uri (git-reference
15258 (url "https://github.com/click-contrib/click-didyoumean")
15259 (commit (string-append "v" version))))
15260 (file-name (git-file-name name version))
15261 (sha256
15262 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
15263 (build-system pyproject-build-system)
15264 (native-inputs
15265 (list python-poetry-core python-pytest))
15266 (propagated-inputs
15267 (list python-click))
15268 (home-page "https://github.com/timofurrer/click-didyoumean")
15269 (synopsis "Git-like did-you-mean feature in Click")
15270 (description
15271 "This plugin enables git-like did-you-mean feature in Click.")
15272 (license license:expat)))
15273
15274(define-public python-pywinrm
15275 (package
15276 (name "python-pywinrm")
15277 (version "0.5.0")
15278 (source
15279 (origin
15280 (method git-fetch)
15281 (uri (git-reference
15282 (url "https://github.com/diyan/pywinrm/")
15283 (commit (string-append "v" version))))
15284 (file-name (git-file-name name version))
15285 (sha256
15286 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
15287 (build-system pyproject-build-system)
15288 (propagated-inputs
15289 (list python-requests python-requests-ntlm python-xmltodict))
15290 (native-inputs
15291 (list python-mock python-pytest python-setuptools))
15292 (home-page "https://github.com/diyan/pywinrm/")
15293 (synopsis "Python library for Windows Remote Management (WinRM)")
15294 (description
15295 "pywinrm is a Python client for the Windows Remote Management (WinRM)
15296service. It allows you to invoke commands on target Windows machines from
15297any machine that can run Python.")
15298 (license license:expat)))
15299
15300(define-public python-manimpango
15301 (package
15302 (name "python-manimpango")
15303 (version "0.5.0")
15304 (source
15305 (origin
15306 (method git-fetch) ; no tests data in PyPi package
15307 (uri (git-reference
15308 (url "https://github.com/ManimCommunity/ManimPango")
15309 (commit (string-append "v" version))))
15310 (file-name (git-file-name name version))
15311 (sha256
15312 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
15313 (build-system pyproject-build-system)
15314 (arguments
15315 (list
15316 #:phases
15317 #~(modify-phases %standard-phases
15318 (add-before 'check 'build-extensions
15319 (lambda _
15320 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
15321 (native-inputs
15322 (list pkg-config
15323 python-cython
15324 python-pytest
15325 python-setuptools
15326 python-wheel))
15327 (inputs
15328 (list pango))
15329 (home-page "https://manimpango.manim.community/")
15330 (synopsis "Bindings for Pango for using with Manim")
15331 (description
15332 "Python bindings for ManimPango which is a C binding for Pango,
15333using Cython.
15334
15335ManimPango is internally used in Manim to render (non-LaTeX) text.")
15336 (license license:expat)))
15337
15338(define-public python-cairocffi
15339 (package
15340 (name "python-cairocffi")
15341 (version "1.7.1")
15342 (source
15343 (origin
15344 ;; The PyPI archive does not include the documentation, so use Git.
15345 (method git-fetch)
15346 (uri (git-reference
15347 (url "https://github.com/Kozea/cairocffi")
15348 (commit (string-append "v" version))))
15349 (file-name (git-file-name name version))
15350 (sha256
15351 (base32
15352 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
15353 (build-system pyproject-build-system)
15354 (outputs '("out" "doc"))
15355 (inputs
15356 (list glib gtk+ gdk-pixbuf cairo))
15357 (native-inputs
15358 (list python-flit-core
15359 python-numpy
15360 python-pikepdf
15361 python-pytest
15362 python-sphinx
15363 python-sphinx-rtd-theme))
15364 (propagated-inputs
15365 (list python-xcffib)) ; used at run time
15366 (arguments
15367 (list
15368 #:phases
15369 #~(modify-phases %standard-phases
15370 (add-after 'unpack 'patch-paths
15371 (lambda* (#:key inputs #:allow-other-keys)
15372 (substitute* "cairocffi/__init__.py"
15373 ;; Hack the dynamic library loading mechanism.
15374 (("find_library\\(library_name\\)")
15375 "\"found\"")
15376 (("filenames = \\(library_filename,\\) \\+ filenames")
15377 "pass")
15378 (("libcairo.so.2")
15379 (search-input-file inputs "/lib/libcairo.so.2")))
15380 (substitute* "cairocffi/pixbuf.py"
15381 (("libgdk_pixbuf-2.0.so.0")
15382 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15383 (("libgobject-2.0.so.0")
15384 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15385 (("libglib-2.0.so.0")
15386 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15387 (("libgdk-3.so.0")
15388 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15389 (add-after 'install 'install-doc
15390 (lambda* (#:key inputs #:allow-other-keys)
15391 (let* ((data (string-append #$output:doc "/share"))
15392 (doc (string-append data "/doc/" #$name "-" #$version))
15393 (html (string-append doc "/html")))
15394 (setenv "LD_LIBRARY_PATH"
15395 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15396 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15397 (setenv "LANG" "en_US.UTF-8")
15398 (mkdir-p html)
15399 (for-each (lambda (file)
15400 (copy-file (string-append "." file)
15401 (string-append doc file)))
15402 '("/README.rst" "/NEWS.rst"))
15403 (system* "python" "setup.py" "build_sphinx")
15404 (copy-recursively "docs/_build/html" html)))))))
15405 (home-page "https://github.com/Kozea/cairocffi")
15406 (synopsis "Python bindings and object-oriented API for Cairo")
15407 (description
15408 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15409Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15410graphics library with support for multiple backends including image buffers,
15411PNG, PostScript, PDF, and SVG file output.")
15412 (license license:bsd-3)))
15413
15414(define-public python-decorator
15415 (package
15416 (name "python-decorator")
15417 (version "5.2.1")
15418 (source
15419 (origin
15420 (method url-fetch)
15421 (uri (pypi-uri "decorator" version))
15422 (sha256
15423 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15424 (build-system pyproject-build-system)
15425 (arguments
15426 (list #:test-backend #~'custom
15427 #:test-flags #~(list "tests/test.py")))
15428 (native-inputs
15429 (list python-setuptools))
15430 (home-page "https://pypi.org/project/decorator/")
15431 (synopsis "Python module to simplify usage of decorators")
15432 (description
15433 "The aim of the decorator module is to simplify the usage of decorators
15434for the average programmer, and to popularize decorators usage giving examples
15435of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15436etc. The core of this module is a decorator factory.")
15437 (license license:expat)))
15438
15439(define-public python-drmaa
15440 (package
15441 (name "python-drmaa")
15442 (version "0.7.7")
15443 (source
15444 (origin
15445 (method url-fetch)
15446 (uri (pypi-uri "drmaa" version))
15447 (sha256
15448 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15449 (build-system pyproject-build-system)
15450 ;; The test suite requires libdrmaa which is provided by the cluster
15451 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15452 ;; should be set to the path of the libdrmaa library.
15453 (arguments
15454 (list
15455 #:tests? #f
15456 #:phases
15457 #~(modify-phases %standard-phases
15458 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15459 ;; is not configured.
15460 (delete 'sanity-check))))
15461 (native-inputs (list python-setuptools))
15462 (home-page "https://pypi.org/project/drmaa/")
15463 (synopsis "Python bindings for the DRMAA library")
15464 (description
15465 "A Python package for Distributed Resource Management (DRM) job
15466submission and control. This package is an implementation of the DRMAA 1.0
15467Python language binding specification.")
15468 (license license:bsd-3)))
15469
15470(define-public python-grako
15471 (package
15472 (name "python-grako")
15473 (version "3.99.9")
15474 (source
15475 (origin
15476 (method url-fetch)
15477 (uri (pypi-uri "grako" version ".zip"))
15478 (sha256
15479 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15480 (snippet
15481 #~(begin (use-modules (guix build utils))
15482 (substitute* "grako/grammars.py"
15483 (("from collections import defaultdict, Mapping")
15484 (string-append "from collections import defaultdict\n"
15485 "from collections.abc import Mapping")))
15486 (substitute* '("grako/util.py"
15487 "grako/walkers.py")
15488 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15489 (build-system pyproject-build-system)
15490 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15491 (arguments (list #:tests? #f))
15492 (native-inputs (list unzip python-pytest python-setuptools))
15493 (home-page "https://pypi.org/project/grako")
15494 (synopsis "EBNF parser generator")
15495 (description
15496 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15497memoizing PEG/Packrat parser in Python.")
15498 (license license:bsd-3)))
15499
15500(define-public python-grandalf
15501 (package
15502 (name "python-grandalf")
15503 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15504 (version "0.8")
15505 (source
15506 (origin
15507 (method git-fetch)
15508 (uri (git-reference
15509 (url "https://github.com/bdcht/grandalf")
15510 (commit (string-append "v" version))))
15511 (file-name (git-file-name name version))
15512 (sha256
15513 (base32 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))
15514 (patches
15515 (list
15516 (origin
15517 (method url-fetch)
15518 (uri
15519 (string-append "https://github.com/bdcht/grandalf/commit/"
15520 "e61df12f00124b615a220cfcd58dd6f89d226264.patch"))
15521 (sha256
15522 (base32 "1p0315flsg4frpadcnn7fh41y5k3cdz4h722v6ri88a3s6hcpd36")))))))
15523 (build-system pyproject-build-system)
15524 (arguments
15525 (list
15526 #:phases
15527 #~(modify-phases %standard-phases
15528 (add-before 'build 'patch-requirements
15529 (lambda _
15530 (substitute* "setup.py"
15531 (("install_requires=\\['pyparsing'],") "")))))))
15532 (native-inputs
15533 (list python-setuptools python-pytest))
15534 (propagated-inputs
15535 (list python-numpy python-ply))
15536 (home-page "https://github.com/bdcht/grandalf")
15537 (synopsis "Graph and drawing algorithms framework")
15538 (description
15539 "Grandalf is a Python package made for experimentations with graphs
15540drawing algorithms. It is written in pure Python, and currently implements
15541two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15542minimization approach. While not as fast or featured as graphviz or other
15543libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15544than thousands of nodes, while keeping the source code simple enough to tweak
15545and hack any part of it for experimental purpose. With a total of about 1500
15546lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15547in less than 600 lines. The energy minimization approach is comprised of only
15548250 lines!
15549
15550Grandalf does only 2 not-so-simple things:
15551@itemize
15552@item computing the nodes (x,y) coordinates (based on provided nodes
15553dimensions, and a chosen layout)
15554@item routing the edges with lines or nurbs
15555@end itemize
15556
15557It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15558will help you find where to draw things like nodes and edges, but it’s up to
15559you to actually draw things with your favorite toolkit.")
15560 ;; The user can choose either license.
15561 (license (list license:gpl2 license:epl1.0))))
15562
15563(define-public python-gridmap
15564 ;; XXX: Project is unmaintained since 2020-08-24, see:
15565 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15566 (package
15567 (name "python-gridmap")
15568 (version "0.15.0")
15569 (source
15570 (origin
15571 (method git-fetch)
15572 (uri (git-reference
15573 (url "https://github.com/pygridtools/gridmap")
15574 (commit (string-append "v" version))))
15575 (file-name (git-file-name name version))
15576 (sha256
15577 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15578 (build-system pyproject-build-system)
15579 (arguments
15580 (list #:tests? #f ;XXX: freezes or timeout
15581 #:test-backend #~'nose))
15582 (native-inputs
15583 (list ;; python-pynose
15584 python-setuptools))
15585 (propagated-inputs
15586 (list python-cherrypy
15587 python-cloudpickle
15588 python-psutil
15589 python-drmaa
15590 python-pyzmq))
15591 (home-page "https://github.com/pygridtools/gridmap")
15592 (synopsis "Create jobs on a cluster directly from Python")
15593 (description
15594 "Gridmap is a Python package to allow you to easily create jobs on the
15595cluster directly from Python. You can directly map Python functions onto the
15596cluster without needing to write any wrapper code yourself.")
15597 (license license:gpl3+)))
15598
15599(define-public python-honcho
15600 (package
15601 (name "python-honcho")
15602 (version "2.0.0")
15603 (source
15604 (origin
15605 (method git-fetch)
15606 (uri (git-reference
15607 (url "https://github.com/nickstenning/honcho")
15608 (commit (string-append "v" version))))
15609 (file-name (git-file-name name version))
15610 (sha256
15611 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15612 (build-system pyproject-build-system)
15613 (arguments
15614 ;; Tests below fail with the error
15615 ;; ValueError: The 'honcho.export.xxx' package was not installed
15616 ;; in a way that PackageLoader understands.
15617 ;; Probably safe because it's testing for different init systems.
15618 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15619 "--ignore" "tests/test_export_runit.py"
15620 "--ignore" "tests/test_export_supervisord.py"
15621 "--ignore" "tests/test_export_systemd.py"
15622 "--ignore" "tests/test_export_upstart.py")))
15623 (native-inputs
15624 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15625 (propagated-inputs
15626 (list python-colorama))
15627 (home-page "https://github.com/nickstenning/honcho")
15628 (synopsis "Manage Procfile-based applications")
15629 (description
15630 "A Procfile is a file which describes how to run an application
15631consisting of several processes. honcho starts all listed processes.
15632The output of all running processes is collected by honcho and
15633displayed.")
15634 (license license:expat)))
15635
15636(define-public python-hsluv
15637 (package
15638 (name "python-hsluv")
15639 (version "5.0.4")
15640 (source
15641 (origin
15642 (method url-fetch)
15643 (uri (pypi-uri "hsluv" version))
15644 (sha256
15645 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15646 (build-system pyproject-build-system)
15647 (native-inputs
15648 (list python-pytest python-setuptools))
15649 (home-page "https://www.hsluv.org")
15650 (synopsis "Human-friendly HSL colour space implemented in Python")
15651 (description
15652 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15653@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15654component that allows you to span all the available chroma as a neat
15655percentage.")
15656 (license license:expat)))
15657
15658(define-public python-pebble
15659 (package
15660 (name "python-pebble")
15661 (version "5.1.3")
15662 (source
15663 (origin
15664 (method git-fetch)
15665 (uri (git-reference
15666 (url "https://github.com/noxdafox/pebble")
15667 (commit version)))
15668 (file-name (git-file-name name version))
15669 (sha256
15670 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15671 (build-system pyproject-build-system)
15672 (native-inputs (list python-pytest python-setuptools))
15673 (home-page "https://github.com/noxdafox/pebble")
15674 (synopsis "Threading and multiprocessing for Python")
15675 (description
15676 "Pebble aims to help manage threads and processes in an easier way. It
15677wraps Python's standard library threading and multiprocessing objects.")
15678 (license license:lgpl3+)))
15679
15680(define-public python-pexpect
15681 (package
15682 (name "python-pexpect")
15683 (version "4.9.0")
15684 (source
15685 (origin
15686 (method url-fetch)
15687 (uri (pypi-uri "pexpect" version))
15688 (sha256
15689 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15690 (build-system pyproject-build-system)
15691 (arguments
15692 (list
15693 #:test-flags
15694 ;; The socket tests can hang (most often, but not only, when run in
15695 ;; parallel, see: <https://github.com/pexpect/pexpect/issues/809>)
15696 #~(list "--ignore=tests/test_socket.py"
15697 "--ignore=tests/test_socket_fd.py"
15698 "-k" (string-join
15699 (list
15700 ;; Disable failing test, see
15701 ;; <https://github.com/pexpect/pexpect/issues/568>.
15702 "not test_bash"
15703 ;; Fails with attempt to find OpenSSL.
15704 "test_large_stdout_stream"
15705 ;; Tests fail while trying to find
15706 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15707 "test_run_uses_env"
15708 "test_run_uses_env_path"
15709 "test_run_uses_env_path_over_path"
15710 "test_spawn_uses_env"
15711 ;; Fails with assertion error: assert 0 == 500
15712 "test_before_across_chunks"
15713 ;; Bash is enough for tests.
15714 "test_zsh")
15715 " and not "))
15716 #:phases
15717 #~(modify-phases %standard-phases
15718 (add-before 'check 'prepare-tests
15719 (lambda _
15720 (substitute* (find-files "tests")
15721 (("/bin/bash") (which "bash"))
15722 (("/bin/echo") (which "echo"))
15723 (("/bin/ls") (which "ls"))
15724 (("/bin/which") (which "which"))
15725 ;; Many tests try to use the /bin directory which is not
15726 ;; present in the build environment. Use one that's non-empty
15727 ;; and unlikely to change.
15728 (("/bin'") "/dev'")))))))
15729 (native-inputs
15730 (list bash ;full Bash for 'test_replwrap.py'
15731 man-db
15732 python-pytest
15733 python-setuptools
15734 which))
15735 (propagated-inputs
15736 (list python-ptyprocess))
15737 (home-page "https://pexpect.readthedocs.org/")
15738 (synopsis "Controlling interactive console applications")
15739 (description
15740 "Pexpect is a pure Python module for spawning child applications;
15741controlling them; and responding to expected patterns in their output. Pexpect
15742works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15743application and control it as if a human were typing commands.")
15744 (license license:isc)))
15745
15746(define-public python-sexpdata
15747 (package
15748 (name "python-sexpdata")
15749 (version "1.0.2")
15750 (source
15751 (origin
15752 (method url-fetch)
15753 (uri (pypi-uri "sexpdata" version))
15754 (sha256
15755 (base32
15756 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15757 (build-system pyproject-build-system)
15758 (arguments
15759 (list #:tests? #f)) ; no tests
15760 (native-inputs (list python-setuptools python-wheel))
15761 (home-page "https://github.com/jd-boyd/sexpdata")
15762 (synopsis "S-expression parser for Python")
15763 (description
15764 "Sexpdata is an S-expression parser/serializer. It has load and dump
15765functions like pickle, json or PyYAML module.")
15766 (license license:bsd-3)))
15767
15768(define-public python-pathable
15769 (package
15770 (name "python-pathable")
15771 (version "0.4.3")
15772 (source
15773 (origin
15774 (method url-fetch)
15775 (uri (pypi-uri "pathable" version))
15776 (sha256
15777 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15778 (build-system pyproject-build-system)
15779 (arguments (list #:tests? #false)) ;there are none
15780 (native-inputs (list python-poetry-core))
15781 (home-page "https://github.com/p1c2u/pathable")
15782 (synopsis "Object-oriented paths")
15783 (description "With this package you can traverse resources like paths and
15784access resources on demand with separate accessor layer.")
15785 (license license:asl2.0)))
15786
15787(define-public python-importlib-resources
15788 (package
15789 (name "python-importlib-resources")
15790 (version "6.5.2")
15791 (source (origin
15792 (method url-fetch)
15793 (uri (pypi-uri "importlib_resources" version))
15794 (sha256
15795 (base32
15796 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15797 (build-system pyproject-build-system)
15798 (native-inputs
15799 (list python-jaraco-test
15800 python-jaraco-collections
15801 python-pytest
15802 python-setuptools
15803 python-setuptools-scm
15804 python-zipp))
15805 (home-page "https://importlib-resources.readthedocs.io/")
15806 (synopsis "Read resources from Python packages")
15807 (description
15808 "@code{importlib_resources} is a backport of Python 3's standard library
15809@code{importlib.resources} module for Python 2.7, and Python 3.")
15810 (license license:asl2.0)))
15811
15812(define-public python-importlib-metadata
15813 (package
15814 (name "python-importlib-metadata")
15815 (version "8.7.0")
15816 (source
15817 (origin
15818 (method url-fetch)
15819 (uri (pypi-uri "importlib_metadata" version))
15820 (sha256
15821 (base32
15822 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15823 (build-system pyproject-build-system)
15824 (arguments
15825 (list #:test-flags #~(list "tests")))
15826 (native-inputs
15827 (list python-jaraco-test
15828 python-packaging-bootstrap
15829 python-pyfakefs
15830 python-pytest-bootstrap
15831 python-setuptools
15832 python-setuptools-scm))
15833 (propagated-inputs
15834 (list python-zipp))
15835 (home-page "https://importlib-metadata.readthedocs.io/")
15836 (synopsis "Read metadata from Python packages")
15837 (description
15838 "@code{importlib_metadata} is a library which provides an API for
15839accessing an installed Python package's metadata, such as its entry points or
15840its top-level name. This functionality intends to replace most uses of
15841@code{pkg_resources} entry point API and metadata API. Along with
15842@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15843need to use the older and less efficient @code{pkg_resources} package.")
15844 (license license:asl2.0)))
15845
15846(define-public python-importlib-metadata-argparse-version
15847 (package
15848 (name "python-importlib-metadata-argparse-version")
15849 (version "2.0.1")
15850 (home-page
15851 "https://github.com/mondeja/importlib-metadata-argparse-version")
15852 (source
15853 (origin
15854 (method git-fetch)
15855 (uri (git-reference
15856 (url home-page)
15857 (commit (string-append "v" version))))
15858 (file-name (git-file-name name version))
15859 (sha256
15860 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15861 (build-system pyproject-build-system)
15862 (native-inputs (list python-pytest python-hatchling))
15863 (synopsis "Get Python package version more efficiently")
15864 (description
15865 "This package provides an @code{argparse} action to define CLI version
15866with a delayed call to @code{importlib.metadata}, avoiding to load this module
15867when not needed.")
15868 (license license:bsd-3)))
15869
15870(define-public python-importmagic
15871 (package
15872 (name "python-importmagic")
15873 (version "0.1.7")
15874 (source
15875 (origin
15876 (method git-fetch)
15877 (uri (git-reference
15878 (url "https://github.com/alecthomas/importmagic")
15879 (commit version)))
15880 (file-name (git-file-name name version))
15881 (sha256
15882 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15883 (build-system pyproject-build-system)
15884 (native-inputs (list python-pytest python-setuptools))
15885 (home-page "https://github.com/alecthomas/importmagic")
15886 (synopsis "Library for adding, removing and managing Python imports")
15887 (description
15888 "Importmagic is a Python library for automatically managing imports by
15889finding unresolved symbols in Python code and their corresponding imports.")
15890 (license license:bsd-3)))
15891
15892(define-public python-inotify-simple
15893 (package
15894 (name "python-inotify-simple")
15895 (version "1.3.5")
15896 (source
15897 (origin
15898 (method git-fetch)
15899 (uri (git-reference
15900 (url "https://github.com/chrisjbillington/inotify_simple")
15901 (commit version)))
15902 (file-name (git-file-name name version))
15903 (sha256
15904 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15905 (build-system pyproject-build-system)
15906 (arguments
15907 (list
15908 #:test-backend #~'custom
15909 #:test-flags #~(list "example.py")))
15910 (native-inputs (list python-setuptools))
15911 (home-page "https://github.com/chrisjbillington/inotify_simple")
15912 (synopsis "Simple wrapper around inotify library")
15913 (description
15914 "@code{inotify-simple} is a simple wrapper around inotify library.")
15915 (license license:bsd-3)))
15916
15917(define-public python-interface-meta
15918 (package
15919 (name "python-interface-meta")
15920 (version "1.3.0")
15921 (source
15922 (origin
15923 (method url-fetch)
15924 (uri (pypi-uri "interface_meta" version))
15925 (sha256
15926 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15927 (build-system pyproject-build-system)
15928 (native-inputs (list python-poetry-core python-pytest))
15929 (home-page "https://github.com/matthewwardrop/interface_meta")
15930 (synopsis
15931 "API for enforced method signatures and consistent documentation")
15932 (description
15933 "This package provides a convenient way to expose an extensible API with
15934enforced method signatures and consistent documentation.")
15935 (license license:expat)))
15936
15937(define-public python-jaraco-itertools
15938 (package
15939 (name "python-jaraco-itertools")
15940 (version "6.4.3")
15941 (source
15942 (origin
15943 (method git-fetch)
15944 (uri (git-reference
15945 (url "https://github.com/jaraco/jaraco.itertools")
15946 (commit (string-append "v" version))))
15947 (file-name (git-file-name name version))
15948 (sha256
15949 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15950 (build-system pyproject-build-system)
15951 (arguments
15952 (list #:tests? #f)) ;no tests
15953 (native-inputs
15954 (list python-setuptools
15955 python-setuptools-scm))
15956 (propagated-inputs
15957 (list python-inflect
15958 python-more-itertools))
15959 (home-page "https://github.com/jaraco/jaraco.itertools")
15960 (synopsis "Tools for working with iterables")
15961 (description
15962 "This package provides an utility collection based on no longer
15963maintained @code{jaraco.util}.")
15964 (license license:expat)))
15965
15966(define-public python-jaraco-logging
15967 (package
15968 (name "python-jaraco-logging")
15969 (version "3.4.0")
15970 (source
15971 (origin
15972 (method git-fetch)
15973 (uri (git-reference
15974 (url "https://github.com/jaraco/jaraco.logging")
15975 (commit (string-append "v" version))))
15976 (file-name (git-file-name name version))
15977 (sha256
15978 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15979 (build-system pyproject-build-system)
15980 (native-inputs
15981 (list python-pytest
15982 python-setuptools
15983 python-setuptools-scm))
15984 (propagated-inputs
15985 (list python-tempora))
15986 (home-page "https://github.com/jaraco/jaraco.logging")
15987 (synopsis "Support for Python's logging facility")
15988 (description
15989 "This package allows soliciting log-level info from command-line
15990parameters.")
15991 (license license:expat)))
15992
15993(define-public python-jaraco-packaging
15994 (package
15995 (name "python-jaraco-packaging")
15996 (version "9.4.0") ;the latest version compatible with [email protected]
15997 (source
15998 (origin
15999 (method url-fetch)
16000 (uri (pypi-uri "jaraco.packaging" version))
16001 (sha256
16002 (base32
16003 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
16004 (build-system pyproject-build-system)
16005 (arguments
16006 (list #:tests? #f)) ;no tests in PyPI archive
16007 (native-inputs
16008 (list python-setuptools
16009 python-setuptools-scm))
16010 (propagated-inputs
16011 (list python-pypa-build
16012 python-virtualenv
16013 python-domdf-python-tools
16014 python-jaraco-context
16015 python-sphinx))
16016 (home-page "https://github.com/jaraco/jaraco.packaging")
16017 (synopsis "Tools to supplement packaging Python releases")
16018 (description
16019 "This package provides various tools to supplement packaging Python
16020releases.")
16021 (license license:expat)))
16022
16023(define-public python-jaraco-vcs
16024 (package
16025 (name "python-jaraco-vcs")
16026 (version "2.4.1")
16027 (source
16028 (origin
16029 (method git-fetch)
16030 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
16031 (commit (string-append "v" version))))
16032 (file-name (git-file-name name version))
16033 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
16034 (build-system pyproject-build-system)
16035 (arguments
16036 (list
16037 #:test-flags
16038 ;; Ignore doctests.
16039 #~(list "--ignore-glob=jaraco/vcs/*.py")))
16040 (propagated-inputs (list python-jaraco-classes
16041 python-jaraco-path
16042 python-jaraco-versioning
16043 python-more-itertools
16044 python-packaging
16045 python-dateutil
16046 python-tempora))
16047 (native-inputs (list python-pygments
16048 python-pytest
16049 python-pytest-home
16050 python-setuptools
16051 python-setuptools-scm))
16052 (home-page "https://github.com/jaraco/jaraco.vcs")
16053 (synopsis "Utilities for working with VCS repositories")
16054 (description
16055 "This package provides facilities for working with VCS repositories in
16056Python.")
16057 (license license:expat)))
16058
16059(define-public python-jaraco-versioning
16060 (package
16061 (name "python-jaraco-versioning")
16062 (version "1.1.0")
16063 (source
16064 (origin
16065 (method git-fetch)
16066 (uri (git-reference
16067 (url "https://github.com/jaraco/jaraco.versioning")
16068 (commit (string-append "v" version))))
16069 (file-name (git-file-name name version))
16070 (sha256
16071 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
16072 (build-system pyproject-build-system)
16073 (arguments
16074 (list
16075 #:phases
16076 #~(modify-phases %standard-phases
16077 ;; doctest started failing with python-packaging 26.2
16078 (add-after 'unpack 'fix-doc-test
16079 (lambda _
16080 (substitute* "jaraco/versioning.py"
16081 (("<Version") "<SummableVersion")))))))
16082 (propagated-inputs (list python-packaging))
16083 (native-inputs
16084 (list python-pytest python-setuptools python-setuptools-scm))
16085 (home-page "https://github.com/jaraco/jaraco.versioning")
16086 (synopsis "Version manipulation utils")
16087 (description
16088 "This package builds upon @code{python-packaging} to provide more
16089sophisticated version manipulation.")
16090 (license license:expat)))
16091
16092(define-public python-simplegeneric
16093 (package
16094 (name "python-simplegeneric")
16095 (version "0.8.1")
16096 (source
16097 (origin
16098 (method url-fetch)
16099 (uri (pypi-uri "simplegeneric" version ".zip"))
16100 (sha256
16101 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
16102 (build-system pyproject-build-system)
16103 (arguments
16104 (list
16105 #:test-backend #~'custom
16106 #:test-flags #~(list "-m" "simplegeneric")))
16107 (native-inputs
16108 (list unzip python-setuptools))
16109 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
16110 (synopsis "Python module for simple generic functions")
16111 (description
16112 "The simplegeneric module lets you define simple single-dispatch generic
16113functions, akin to Python’s built-in generic functions like @code{len()},
16114@code{iter()} and so on. However, instead of using specially-named methods,
16115these generic functions use simple lookup tables, akin to those used by
16116e.g. @code{pickle.dump()} and other generic functions found in the Python
16117standard library.")
16118 (license license:zpl2.1)))
16119
16120(define-public python-ipython-genutils
16121 ;; TODO: This package is retired, check if can be removed, see description.
16122 (package
16123 (name "python-ipython-genutils")
16124 (version "0.1.0")
16125 (source
16126 (origin
16127 (method url-fetch)
16128 (uri (pypi-uri "ipython_genutils" version))
16129 (sha256
16130 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
16131 (build-system pyproject-build-system)
16132 (arguments `(#:tests? #f)) ; no tests
16133 (native-inputs
16134 (list python-setuptools))
16135 (home-page "https://ipython.org")
16136 (synopsis "Vestigial utilities from IPython")
16137 (description
16138 "This package provides retired utilities from IPython. No packages
16139outside IPython/Jupyter should depend on it.
16140
16141This package shouldn't exist. It contains some common utilities shared by
16142Jupyter and IPython projects during The Big Split. As soon as possible, those
16143packages will remove their dependency on this, and this package will go
16144away.")
16145 (license license:bsd-3)))
16146
16147;;; Variant used to break a cycle with python-ipykernel.
16148(define-public python-ipyparallel-bootstrap
16149 (hidden-package
16150 (package
16151 (name "python-ipyparallel-bootstrap")
16152 (version "9.0.1")
16153 (source
16154 (origin
16155 (method url-fetch)
16156 (uri (pypi-uri "ipyparallel" version))
16157 (sha256
16158 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
16159 (build-system pyproject-build-system)
16160 (arguments
16161 (list
16162 #:tests? #f
16163 #:phases #~(modify-phases %standard-phases
16164 ;; The python-ipykernel is normally propagated but is
16165 ;; removed from this package to break the cycle.
16166 (delete 'sanity-check))))
16167 (native-inputs
16168 (list python-hatchling))
16169 (propagated-inputs
16170 (list python-dateutil
16171 python-decorator
16172 python-entrypoints
16173 python-ipython
16174 ;; python-ipykernel is omitted here to break a cycle.
16175 python-jupyter-client-bootstrap
16176 python-psutil
16177 python-pyzmq
16178 python-tornado
16179 python-tqdm
16180 python-traitlets))
16181 (home-page "https://ipython.org/")
16182 (synopsis "Interactive Parallel Computing with IPython")
16183 (description
16184 "@code{ipyparallel} is a Python package and collection of CLI scripts
16185for controlling clusters for Jupyter. @code{ipyparallel} contains the
16186following CLI scripts:
16187@enumerate
16188@item ipcluster - start/stop a cluster
16189@item ipcontroller - start a scheduler
16190@item ipengine - start an engine
16191@end enumerate")
16192 (license license:bsd-3))))
16193
16194(define-public python-ipyparallel
16195 (package
16196 (inherit python-ipyparallel-bootstrap)
16197 (name "python-ipyparallel")
16198 (arguments
16199 (list
16200 #:test-flags
16201 ;; Disable warning because DeprecationWarnings make tests fail.
16202 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
16203 (native-inputs
16204 (modify-inputs native-inputs
16205 (append python-ipython
16206 python-pytest
16207 python-pytest-asyncio
16208 python-pytest-tornado
16209 python-testpath)))
16210 (propagated-inputs
16211 (modify-inputs propagated-inputs
16212 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
16213 (append python-ipykernel)))
16214 (properties (alist-delete 'hidden? (package-properties
16215 python-ipyparallel-bootstrap)))))
16216
16217;; TODO: Package python-jupysql which is the maintained fork of this one.
16218(define-public python-ipython-sql
16219 (package
16220 (name "python-ipython-sql")
16221 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
16222 (revision . "0")))
16223 (version (git-version "0.5.0"
16224 (assoc-ref properties 'revision)
16225 (assoc-ref properties 'commit)))
16226 (source
16227 (origin
16228 (method git-fetch)
16229 (uri (git-reference
16230 (url "https://github.com/catherinedevlin/ipython-sql")
16231 (commit (assoc-ref properties 'commit))))
16232 (file-name (git-file-name name version))
16233 (sha256
16234 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
16235 (build-system pyproject-build-system)
16236 (arguments
16237 (list #:tests? #f ;Fail because of prettytable.
16238 #:phases
16239 #~(modify-phases %standard-phases
16240 (replace 'check
16241 (lambda* (#:key tests? #:allow-other-keys)
16242 (setenv "HOME" (getcwd))
16243 (if tests?
16244 (invoke "ipython" "-c"
16245 "import pytest; pytest.main(['.'])")
16246 (format #t "test suite not run.~%")))))))
16247 (native-inputs (list python-pytest python-setuptools))
16248 (propagated-inputs
16249 (list python-ipython
16250 python-ipython-genutils
16251 python-prettytable
16252 python-sqlalchemy-2
16253 python-sqlparse))
16254 (home-page "https://github.com/catherinedevlin/ipython-sql")
16255 (synopsis "RDBMS access via IPython")
16256 (description "This library connects to a database, using SQLAlchemy URL
16257connect strings, then issue SQL commands within IPython or IPython Notebook.")
16258 (license license:expat)))
16259
16260(define-public python-optree
16261 (package
16262 (name "python-optree")
16263 (version "0.14.0")
16264 (source
16265 (origin
16266 (method git-fetch)
16267 (uri (git-reference
16268 (url "https://github.com/metaopt/optree")
16269 (commit (string-append "v" version))))
16270 (file-name (git-file-name name version))
16271 (sha256
16272 (base32
16273 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
16274 (build-system pyproject-build-system)
16275 (arguments
16276 (list
16277 #:test-flags
16278 ;; These tests fails due to a circular import
16279 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
16280 " and not test_import_no_warnings"))))
16281 (propagated-inputs (list python-typing-extensions))
16282 (native-inputs
16283 (list python-pytest
16284 python-setuptools
16285 python-wheel
16286 cmake-minimal
16287 pybind11-2))
16288 (home-page "https://github.com/metaopt/optree")
16289 (synopsis "Optimized PyTree Utilities")
16290 (description "This package contains operations on PyTrees (a tree made of
16291container data structures in Python).")
16292 (license license:asl2.0)))
16293
16294(define-public python-backcall
16295 (package
16296 (name "python-backcall")
16297 (version "0.2.0")
16298 (source
16299 (origin
16300 (method git-fetch)
16301 (uri (git-reference
16302 (url "https://github.com/takluyver/backcall/")
16303 (commit version)))
16304 (file-name (git-file-name name version))
16305 (sha256
16306 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
16307 (build-system pyproject-build-system)
16308 (native-inputs (list python-flit-core python-pytest))
16309 (home-page "https://github.com/takluyver/backcall/")
16310 (synopsis "Specifications for callback functions passed in to an API")
16311 (description
16312 "If your code lets other people supply callback functions, it's important
16313to specify the function signature you expect, and check that functions support
16314that. Adding extra parameters later would break other peoples code unless
16315you're careful. The @code{backcall} package provides a way of specifying the
16316callback signature using a prototype function.")
16317 (license license:bsd-3)))
16318
16319(define-public python-pubmed-parser
16320 (package
16321 (name "python-pubmed-parser")
16322 (version "0.5.1")
16323 (source (origin
16324 (method git-fetch)
16325 (uri (git-reference
16326 (url "https://github.com/titipata/pubmed_parser")
16327 (commit version)))
16328 (file-name (git-file-name name version))
16329 (sha256
16330 (base32
16331 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
16332 (build-system pyproject-build-system)
16333 (arguments (list #:tests? #f)) ;; Tests require internet
16334 (native-inputs
16335 (list python-setuptools))
16336 (propagated-inputs
16337 (list python-lxml
16338 python-numpy
16339 python-requests
16340 python-six ;hard dependency
16341 python-unidecode))
16342 (home-page "https://titipata.github.io/pubmed_parser/")
16343 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16344 (description
16345 "This package provides a Python parser for Pubmed Open-Access Subset and
16346MEDLINE XML repository.")
16347 (license license:expat)))
16348
16349(define-public python-pure-eval
16350 (package
16351 (name "python-pure-eval")
16352 (version "0.2.3")
16353 (source
16354 (origin
16355 (method url-fetch)
16356 (uri (pypi-uri "pure_eval" version))
16357 (sha256
16358 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16359 (build-system pyproject-build-system)
16360 (native-inputs
16361 (list python-pytest
16362 python-setuptools
16363 python-setuptools-scm
16364 python-wheel))
16365 (home-page "https://github.com/alexmojaki/pure_eval")
16366 (synopsis "Python library to evaluate abstract syntax tree nodes")
16367 (description "The @code{pure_eval} Python library can safely evaluate
16368abstract syntax tree (AST) nodes without side effects.")
16369 (license license:expat)))
16370
16371(define-public python-puremagic
16372 (package
16373 (name "python-puremagic")
16374 (version "1.28")
16375 (source
16376 (origin
16377 (method git-fetch) ;no tests in PyPI archive
16378 (uri (git-reference
16379 (url "https://github.com/cdgriffith/puremagic")
16380 (commit version)))
16381 (file-name (git-file-name name version))
16382 (sha256
16383 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16384 (build-system pyproject-build-system)
16385 (native-inputs
16386 (list python-pytest python-setuptools python-wheel))
16387 (home-page "https://github.com/cdgriffith/puremagic")
16388 (synopsis "Pure Python implementation of magic file detection")
16389 (description
16390 "This package implements a functionality that will identify a file based
16391off it's magic numbers.")
16392 (license license:expat)))
16393
16394(define-public python-ast-decompiler
16395 (package
16396 (name "python-ast-decompiler")
16397 (version "0.7.0")
16398 (source
16399 (origin
16400 (method url-fetch)
16401 (uri (pypi-uri "ast_decompiler" version))
16402 (sha256
16403 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16404 ;; We need to manually create an __init__.py file under the tests/
16405 ;; directory, since it is not included in the distributed
16406 ;; version. (See:
16407 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16408 (modules '((guix build utils)))
16409 (snippet '(call-with-output-file "tests/__init__.py"
16410 (const #t)))))
16411 (build-system pyproject-build-system)
16412 (native-inputs (list python-flit-core python-pytest))
16413 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16414 (synopsis
16415 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16416 (description
16417 "This library provides functionality to decompile @acronym{AST, Abstract
16418Syntax Tree} objects, as generated by the standard library @code{ast} module,
16419to Python code.")
16420 (license license:asl2.0)))
16421
16422(define-public python-asttokens
16423 (package
16424 (name "python-asttokens")
16425 (version "3.0.1")
16426 (source
16427 (origin
16428 (method git-fetch)
16429 (uri (git-reference
16430 (url "https://github.com/gristlabs/asttokens")
16431 (commit (string-append "v" version))))
16432 (file-name (git-file-name name version))
16433 (sha256 (base32 "1qqi7dygcv58czrsafc4gf41prfb6shd0crx33kd9wypk0v29afn"))))
16434 (build-system pyproject-build-system)
16435 (native-inputs
16436 (list python-astroid
16437 python-pytest
16438 python-setuptools
16439 python-setuptools-scm))
16440 (home-page "https://github.com/gristlabs/asttokens")
16441 (synopsis "Python library to annotate abstract syntax trees")
16442 (description "The @code{asttokens} module annotates Python abstract syntax
16443trees (ASTs) with the positions of tokens and text in the source code that
16444generated them. It makes it possible for tools that work with logical AST
16445nodes to find the particular text that resulted in those nodes, for example
16446for automated refactoring or highlighting.")
16447 (license license:asl2.0)))
16448
16449(define-public python-littleutils
16450 (package
16451 (name "python-littleutils")
16452 (version "0.2.4")
16453 (source
16454 (origin
16455 (method url-fetch)
16456 (uri (pypi-uri "littleutils" version))
16457 (sha256
16458 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16459 (build-system pyproject-build-system)
16460 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16461 (native-inputs
16462 (list python-setuptools
16463 python-setuptools-scm
16464 python-wheel))
16465 (home-page "https://github.com/alexmojaki/littleutils")
16466 (synopsis "Python utility function collection")
16467 (description "@code{littleutils} is a small collection of Python utility
16468functions, useful in the context of writing unit tests among other uses.")
16469 (license license:expat)))
16470
16471(define-public python-ipython
16472 (package
16473 (name "python-ipython")
16474 (version "9.8.0")
16475 (source
16476 (origin
16477 (method git-fetch)
16478 (uri (git-reference
16479 (url "https://github.com/ipython/ipython")
16480 (commit version)))
16481 (file-name (git-file-name name version))
16482 (sha256
16483 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16484 (build-system pyproject-build-system)
16485 (arguments
16486 (list
16487 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16488 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16489 #:test-backend #~'custom
16490 ;; XXX: It's a workaround to fix the error with module import
16491 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16492 ;; <https://codeberg.org/guix/guix/issues/2108>.
16493 #:test-flags
16494 #~(list "-m" "pytest" "-vv"
16495 "-k" (string-join
16496 ;; These need git.
16497 (list "not test_json_getsysinfo"
16498 "IPython.utils.sysinfo.sys_info"
16499 ;; Failed: DID NOT RAISE
16500 "test_timeit_raise_on_interrupt"
16501 "test_script_raise_on_interrupt"
16502 "test_time_raise_on_interrupt")
16503 " and not "))
16504 #:phases
16505 #~(modify-phases %standard-phases
16506 (add-before 'check 'pre-check
16507 (lambda _
16508 (setenv "HOME" "/tmp"))))))
16509 (propagated-inputs
16510 (list python-decorator
16511 python-ipython-pygments-lexers
16512 python-jedi
16513 python-matplotlib-inline
16514 python-pexpect
16515 python-prompt-toolkit
16516 python-pygments
16517 python-stack-data
16518 python-traitlets
16519 python-typing-extensions))
16520 (native-inputs
16521 (list python-pytest
16522 python-pytest-asyncio
16523 python-setuptools
16524 python-testpath
16525 ;; [extra]
16526 ;; python-curio ;deprecated
16527 ;; python-ipykernel ;cycles
16528 ;; python-jupyter-ai ;not packaged
16529 python-matplotlib
16530 ;; python-nbclient ;cycles
16531 python-nbformat
16532 python-numpy
16533 python-pandas
16534 python-trio))
16535 (home-page "https://ipython.org")
16536 (synopsis "IPython is a tool for interactive computing in Python")
16537 (description
16538 "IPython provides a rich architecture for interactive computing with:
16539Powerful interactive shells, a browser-based notebook, support for interactive
16540data visualization, embeddable interpreters and tools for parallel
16541computing.")
16542 (properties '((cpe-name . "ipython")))
16543 (license license:bsd-3)))
16544
16545(define-public python-ipython-documentation
16546 (package
16547 (inherit python-ipython)
16548 (name "python-ipython-documentation")
16549 (version (package-version python-ipython))
16550 (arguments
16551 (list
16552 #:phases
16553 #~(modify-phases %standard-phases
16554 (add-after 'unpack 'set-pythonpath
16555 (lambda _
16556 ;; Ensure this fixed (via the
16557 ;; "python-ipython-documentation-chars.patch" patch) copy of
16558 ;; IPython gets used.
16559 (setenv "PYTHONPATH" (string-append (getcwd)))))
16560 (delete 'build)
16561 (delete 'check)
16562 (replace 'install
16563 (lambda* (#:key outputs #:allow-other-keys)
16564 (let* ((data (string-append #$output "/share"))
16565 (doc (string-append data "/doc/" #$name "-" #$version))
16566 (html (string-append doc "/html"))
16567 (info (string-append data "/info")))
16568 (invoke "make" "-C" "docs" "info" "html"
16569 (string-append "SPHINXOPTS=-j"
16570 (number->string (parallel-job-count))))
16571 (install-file "COPYING.rst" doc)
16572 (copy-recursively "examples" (string-append doc "/examples"))
16573 ;; Install HTML documentation.
16574 (copy-recursively "docs/build/html" html)
16575 ;; Likewise for the info manual.
16576 (install-file "docs/build/texinfo/ipython.info" info)
16577 (symlink (string-append html "/_images")
16578 (string-append info "/ipython-figures"))))))))
16579 (native-inputs
16580 (list graphviz
16581 python-docrepr
16582 python-ipykernel
16583 python-sphinx
16584 python-sphinx-rtd-theme
16585 python-sphinx-toml
16586 texinfo))))
16587
16588;; A bare minimal package, mainly to use in tests and reduce closure
16589;; size. Tests are left out in the main package to slim down native-inputs.
16590(define-public python-ipython-minimal
16591 (package/inherit python-ipython
16592 (name "python-ipython-minimal")
16593 (arguments
16594 (list #:tests? #f))
16595 (native-inputs
16596 (list python-setuptools))))
16597
16598(define-public python-ipython-pygments-lexers
16599 (package
16600 (name "python-ipython-pygments-lexers")
16601 (version "1.1.1")
16602 (source
16603 (origin
16604 (method git-fetch)
16605 (uri (git-reference
16606 (url "https://github.com/ipython/ipython-pygments-lexers/")
16607 (commit version)))
16608 (file-name (git-file-name name version))
16609 (sha256
16610 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16611 (build-system pyproject-build-system)
16612 (propagated-inputs (list python-pygments))
16613 (native-inputs (list python-flit-core python-pytest))
16614 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16615 (synopsis "Plugin for IPython code sessions")
16616 (description
16617 "This package defines a variety of Pygments lexers for highlighting IPython
16618code.")
16619 (license license:bsd-3)))
16620
16621(define-public python-pydbus
16622 (package
16623 (name "python-pydbus")
16624 (version "0.6.0")
16625 (source
16626 (origin
16627 (method url-fetch)
16628 (uri (pypi-uri "pydbus" version))
16629 (sha256
16630 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16631 (build-system pyproject-build-system)
16632 (arguments
16633 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16634 #:phases
16635 #~(modify-phases %standard-phases
16636 (add-after 'unpack 'fix-comparability-with-pygobject
16637 (lambda _
16638 (substitute* "pydbus/_inspect3.py"
16639 (("getargspec")
16640 "getfullargspec")))))))
16641 (native-inputs
16642 (list python-setuptools
16643 python-wheel))
16644 (propagated-inputs
16645 (list python-pygobject))
16646 (home-page "https://github.com/LEW21/pydbus")
16647 (synopsis "Pythonic D-Bus library")
16648 (description
16649 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16650Pydbus can be used to access remote objects and also for object publication.
16651It is based on PyGI, the Python GObject Introspection bindings, which is the
16652recommended way to use GLib from Python.")
16653 (license license:lgpl2.1+)))
16654
16655(define-public python-dbus-1.2
16656 (package
16657 (name "python-dbus")
16658 (version "1.2.18")
16659 (source
16660 (origin
16661 (method url-fetch)
16662 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16663 "dbus-python-" version ".tar.gz"))
16664 (sha256
16665 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16666 (build-system gnu-build-system)
16667 (native-inputs
16668 (list pkg-config
16669 python-setuptools))
16670 (inputs
16671 `(("python" ,python-wrapper)
16672 ("dbus-glib" ,dbus-glib)))
16673 (synopsis "Python bindings for D-bus")
16674 (description "python-dbus provides bindings for libdbus, the reference
16675implementation of D-Bus.")
16676 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16677 (license license:expat)))
16678
16679(define-public python-dasbus
16680 (package
16681 (name "python-dasbus")
16682 (version "1.7")
16683 (source
16684 (origin
16685 (method git-fetch)
16686 (uri (git-reference
16687 (url "https://github.com/dasbus-project/dasbus")
16688 (commit (string-append "v" version))))
16689 (file-name (git-file-name name version))
16690 (sha256
16691 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16692 (build-system pyproject-build-system)
16693 (arguments
16694 (list
16695 #:phases
16696 #~(modify-phases %standard-phases
16697 (replace 'check
16698 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16699 (when tests?
16700 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16701 (native-inputs
16702 (list dbus
16703 python-hatchling
16704 python-pytest
16705 python-setuptools))
16706 (propagated-inputs
16707 (list python-pygobject))
16708 (home-page "https://dasbus.readthedocs.io/")
16709 (synopsis "DBus library in Python")
16710 (description
16711 "This DBus library is written in Python, based on GLib and inspired by
16712@code{pydbus}.")
16713 (license license:lgpl2.1+)))
16714
16715(define-public python-notify2
16716 (package
16717 (name "python-notify2")
16718 (version "0.3.1")
16719 (source
16720 (origin
16721 (method url-fetch)
16722 (uri (pypi-uri "notify2" version))
16723 (sha256
16724 (base32
16725 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16726 (build-system pyproject-build-system)
16727 (arguments (list #:tests? #f)) ; tests depend on system state
16728 (native-inputs (list python-setuptools))
16729 (propagated-inputs (list python-dbus))
16730 (home-page "https://bitbucket.org/takluyver/pynotify2")
16731 (synopsis "Python interface to D-Bus notifications")
16732 (description
16733 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16734It is a reimplementation of pynotify in pure Python, and an alternative to
16735the GObject Introspection bindings to libnotify for non-GTK applications.")
16736 (license (list license:bsd-2
16737 license:lgpl2.1+))))
16738
16739;; beautifulsoup4 has a totally different namespace than 3.x,
16740;; and pypi seems to put it under its own name, so I guess we should too
16741(define-public python-beautifulsoup4
16742 (package
16743 (name "python-beautifulsoup4")
16744 (version "4.14.3")
16745 (source
16746 (origin
16747 (method url-fetch)
16748 (uri (pypi-uri "beautifulsoup4" version))
16749 (sha256
16750 (base32
16751 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16752 (build-system pyproject-build-system)
16753 (native-inputs
16754 (list python-hatchling
16755 python-pytest))
16756 (propagated-inputs
16757 (list python-soupsieve
16758 python-typing-extensions
16759 ;; [optional]
16760 python-cchardet
16761 python-chardet
16762 python-charset-normalizer
16763 python-html5lib
16764 python-lxml))
16765 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16766 (synopsis "Python screen-scraping library")
16767 (description
16768 "Beautiful Soup is a Python library designed for rapidly setting up
16769screen-scraping projects. It offers Pythonic idioms for navigating,
16770searching, and modifying a parse tree, providing a toolkit for
16771dissecting a document and extracting what you need. It automatically
16772converts incoming documents to Unicode and outgoing documents to UTF-8.")
16773 (license license:expat)))
16774
16775(define-public python-beautifulsoup4-bootstrap
16776 (hidden-package
16777 (package/inherit python-beautifulsoup4
16778 (arguments
16779 (list #:tests? #f))
16780 (native-inputs
16781 (list python-hatchling))
16782 (propagated-inputs '()))))
16783
16784
16785(define-public python-netifaces
16786 (package
16787 (name "python-netifaces")
16788 (version "0.11.0")
16789 (source
16790 (origin
16791 (method url-fetch)
16792 (uri (pypi-uri "netifaces" version))
16793 (sha256
16794 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16795 (build-system pyproject-build-system)
16796 (arguments
16797 (list
16798 #:test-backend #~'custom
16799 #:test-flags #~(list "test.py")))
16800 (native-inputs (list python-setuptools))
16801 (home-page "https://github.com/al45tair/netifaces")
16802 (synopsis "Python module for portable network interface information")
16803 (description
16804 "Netifaces is a Python module providing information on network
16805interfaces in an easy and portable manner.")
16806 (license license:expat)))
16807
16808(define-public python-networkx
16809 (package
16810 (name "python-networkx")
16811 (version "3.4.2")
16812 (source
16813 (origin
16814 (method url-fetch)
16815 (uri (pypi-uri "networkx" version))
16816 (sha256
16817 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16818 (build-system pyproject-build-system)
16819 (arguments
16820 (list
16821 #:test-flags
16822 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16823 (native-inputs
16824 (list python-pytest
16825 python-pytest-xdist
16826 python-setuptools
16827 python-wheel))
16828 (propagated-inputs
16829 (list python-decorator))
16830 (home-page "https://networkx.github.io/")
16831 (synopsis "Python module for creating and manipulating graphs and networks")
16832 (description
16833 "NetworkX is a Python package for the creation, manipulation, and study
16834of the structure, dynamics, and functions of complex networks.")
16835 (license license:bsd-3)))
16836
16837(define-public python-datrie
16838 (package
16839 (name "python-datrie")
16840 (version "0.8.3")
16841 (source
16842 (origin
16843 (method git-fetch)
16844 (uri (git-reference
16845 (url "https://github.com/kmike/datrie")
16846 (commit version)))
16847 (file-name (git-file-name name version))
16848 (sha256
16849 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16850 (build-system pyproject-build-system)
16851 (arguments
16852 (list
16853 #:phases
16854 #~(modify-phases %standard-phases
16855 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16856 (lambda* (#:key inputs #:allow-other-keys)
16857 (let* ((headers (search-input-directory inputs
16858 "include/datrie"))
16859 (base (dirname (dirname headers))))
16860 (symlink headers "libdatrie/datrie")
16861 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16862 (add-before 'build 'relax-gcc-14-strictness
16863 (lambda _
16864 (setenv "CFLAGS"
16865 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16866 (native-inputs
16867 (list python-cython python-hypothesis python-pytest python-setuptools))
16868 (inputs (list libdatrie))
16869 (home-page "https://github.com/kmike/datrie")
16870 (synopsis "Fast, efficiently stored trie for Python")
16871 (description
16872 "This package provides a fast, efficiently stored trie implementation for
16873Python.")
16874 (license license:lgpl2.1+)))
16875
16876(define-public python-amply
16877 (package
16878 (name "python-amply")
16879 (version "0.1.6")
16880 (source
16881 (origin
16882 (method url-fetch)
16883 (uri (pypi-uri "amply" version))
16884 (sha256
16885 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16886 (build-system pyproject-build-system)
16887 (native-inputs
16888 (list python-pytest
16889 python-setuptools
16890 python-setuptools-scm
16891 python-wheel))
16892 (propagated-inputs
16893 (list python-docutils
16894 python-pyparsing))
16895 (home-page "https://github.com/willu47/amply")
16896 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16897 (description
16898 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16899structures.")
16900 (license license:epl1.0)))
16901
16902(define-public python-pulp
16903 (package
16904 (name "python-pulp")
16905 (version "3.3.2")
16906 (source
16907 (origin
16908 (method git-fetch)
16909 (uri (git-reference
16910 (url "https://github.com/coin-or/pulp")
16911 (commit version)))
16912 (file-name (git-file-name name version))
16913 (sha256
16914 (base32 "1vagp2xg4kl7swrd7snf1dlrj5mgccbascy30j4zncvi9cplyxfk"))
16915 (snippet
16916 #~(begin
16917 ;; The solverdir contains several binaries; use the Guix cbc
16918 ;; package instead.
16919 (use-modules (guix build utils))
16920 (delete-file-recursively "pulp/solverdir")))))
16921 (build-system pyproject-build-system)
16922 (arguments
16923 (list
16924 #:phases
16925 #~(modify-phases %standard-phases
16926 (add-after 'unpack 'use-system-cbc
16927 (lambda* (#:key inputs #:allow-other-keys)
16928 (substitute* "pyproject.toml"
16929 ;; Do not copy the binaries.
16930 ((".*solverdir.*") ""))
16931 (let ((cbc (search-input-file inputs "/bin/cbc")))
16932 ;; PuLP default points to pulp/solverdir/../cbc,
16933 ;; use cbc from Guix instead.
16934 (substitute* "pulp/apis/coin_api.py"
16935 ((".*solverdir.*")
16936 (string-append " r\"" cbc "\"\n")))))))))
16937 (native-inputs
16938 (list python-pytest
16939 python-setuptools))
16940 (inputs
16941 (list cbc)) ;TODO: Add more solvers? Like highs
16942 (home-page "https://github.com/coin-or/pulp")
16943 (synopsis "Linear Programming modeler")
16944 (description
16945 "PuLP is a Linear Programming modeler written in Python. PuLP can
16946generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16947solve linear problems.")
16948 (license license:expat)))
16949
16950(define-public python-py-partiql-parser
16951 (package
16952 (name "python-py-partiql-parser")
16953 (version "0.6.3")
16954 (source
16955 (origin
16956 (method git-fetch)
16957 (uri (git-reference
16958 (url "https://github.com/getmoto/py-partiql-parser")
16959 (commit version)))
16960 (file-name (git-file-name name version))
16961 (sha256
16962 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16963 (build-system pyproject-build-system)
16964 (native-inputs
16965 (list python-hatchling
16966 python-pytest))
16967 (home-page "https://pypi.org/project/py-partiql-parser/")
16968 (synopsis "Pure Python PartiQL Parser")
16969 (description
16970 "This package provides a tokenizer/parser/executor for the PartiQL
16971language, in Python.")
16972 (license license:expat)))
16973
16974(define-public python-py-tes
16975 (package
16976 (name "python-py-tes")
16977 (version "0.4.2")
16978 (source
16979 (origin
16980 (method git-fetch)
16981 (uri (git-reference
16982 (url "https://github.com/ohsu-comp-bio/py-tes")
16983 (commit version)))
16984 (file-name (git-file-name name version))
16985 (sha256
16986 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16987 (build-system pyproject-build-system)
16988 (native-inputs
16989 (list python-pytest python-requests-mock python-setuptools))
16990 (propagated-inputs
16991 (list python-attrs python-dateutil python-future python-requests))
16992 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16993 (synopsis "Library for communicating with the GA4GH Task Execution API")
16994 (description "This package provides a library for communicating with the
16995GA4GH Task Execution API.")
16996 (license license:expat)))
16997
16998(define-public python-altgraph
16999 (package
17000 (name "python-altgraph")
17001 (version "0.17.4")
17002 (source
17003 (origin
17004 (method url-fetch)
17005 (uri (pypi-uri "altgraph" version))
17006 (sha256
17007 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
17008 (build-system pyproject-build-system)
17009 (native-inputs (list python-pytest python-setuptools python-wheel))
17010 (home-page "https://altgraph.readthedocs.io")
17011 (synopsis "Python graph network package")
17012 (description
17013"This package provides tools for constructing graphs, BFS and DFS
17014traversals, topological sort, shortest paths, and more with graphviz
17015output.")
17016 (license license:expat)))
17017
17018(define-public python-pyqrcode
17019 (package
17020 (name "python-pyqrcode")
17021 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
17022 (revision . "0")))
17023 (version (git-version "1.2.1"
17024 (assoc-ref properties 'revision)
17025 (assoc-ref properties 'commit)))
17026 (source
17027 (origin
17028 (method git-fetch)
17029 (uri (git-reference
17030 (url "https://github.com/mnooner256/pyqrcode")
17031 (commit (assoc-ref properties 'commit))))
17032 (file-name (git-file-name name version))
17033 (sha256
17034 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
17035 (build-system pyproject-build-system)
17036 (arguments (list #:test-backend #~'nose))
17037 (native-inputs (list python-pynose python-pypng python-setuptools))
17038 (home-page "https://github.com/mnooner256/pyqrcode")
17039 (synopsis "QR code generator")
17040 (description
17041 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
17042PNG and terminal output.")
17043 (license license:bsd-3)))
17044
17045(define-public python-seaborn
17046 ;; TODO: Move to (gnu packages statistics).
17047 (package
17048 (name "python-seaborn")
17049 ;; 0.13.2 (2024-01-25), the latest release contains known
17050 ;; incompatibilities, see:
17051 ;; <https://github.com/mwaskom/seaborn/issues/3892>,
17052 ;; <https://github.com/mwaskom/seaborn/issues/3893>.
17053 (properties '((commit . "32088bbc3adc611b7118e57fce6d4ed096a76a29")
17054 (revision . "0")))
17055 (version (git-version "0.13.2"
17056 (assoc-ref properties 'revision)
17057 (assoc-ref properties 'commit)))
17058 (source
17059 (origin
17060 (method git-fetch)
17061 (uri (git-reference
17062 (url "https://github.com/mwaskom/seaborn")
17063 (commit (assoc-ref properties 'commit))))
17064 (file-name (git-file-name name version))
17065 (sha256
17066 (base32 "1d2aig4kpjc8lcvk1sp824ksy1vl17dd36s4zryhjhmz5b0idqx3"))))
17067 (build-system pyproject-build-system)
17068 (arguments
17069 (list
17070 ;; tests: 2359 passed, 16 skipped, 6 xfailed
17071 #:test-flags
17072 #~(list "--numprocesses" (number->string (parallel-job-count)))))
17073 (native-inputs
17074 (list python-flit-core
17075 python-pytest
17076 python-pytest-xdist))
17077 (propagated-inputs
17078 (list python-matplotlib
17079 python-numpy
17080 python-pandas
17081 python-scipy
17082 python-statsmodels))
17083 (home-page "https://seaborn.pydata.org/")
17084 (synopsis "Statistical data visualization")
17085 (description
17086 "Seaborn is a library for making attractive and informative statistical
17087graphics in Python. It is built on top of matplotlib and tightly integrated
17088with the PyData stack, including support for numpy and pandas data structures
17089and statistical routines from scipy and statsmodels.")
17090 (license license:bsd-3)))
17091
17092(define-public python-session-info
17093 (package
17094 (name "python-session-info")
17095 (version "1.0.0")
17096 (source
17097 (origin
17098 (method git-fetch)
17099 (uri (git-reference
17100 (url "https://gitlab.com/joelostblom/session_info")
17101 (commit version)))
17102 (file-name (git-file-name name version))
17103 (sha256
17104 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
17105 (build-system pyproject-build-system)
17106 (arguments (list #:tests? #f)) ; No tests.
17107 (native-inputs (list python-setuptools))
17108 (propagated-inputs (list python-stdlib-list))
17109 (home-page "https://gitlab.com/joelostblom/session_info")
17110 (synopsis "Output version information for modules currently loaded")
17111 (description
17112 "This package outputs version information for modules loaded in the current
17113session, Python, and the OS.")
17114 (license license:bsd-3)))
17115
17116(define-public python-mpmath
17117 (package
17118 (name "python-mpmath")
17119 (version "1.3.0")
17120 (source
17121 (origin
17122 (method git-fetch)
17123 (uri (git-reference
17124 (url "https://github.com/fredrik-johansson/mpmath")
17125 (commit version)))
17126 (file-name (git-file-name name version))
17127 (sha256
17128 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
17129 (build-system pyproject-build-system)
17130 (native-inputs
17131 (list python-pytest
17132 python-setuptools
17133 python-setuptools-scm))
17134 (home-page "https://mpmath.org")
17135 (synopsis "Arbitrary-precision floating-point arithmetic in python")
17136 (description
17137 "@code{mpmath} can be used as an arbitrary-precision substitute for
17138Python's float/complex types and math/cmath modules, but also does much
17139more advanced mathematics.")
17140 (license license:bsd-3)))
17141
17142(define-public python-bigfloat
17143 (package
17144 (name "python-bigfloat")
17145 (version "0.4.0")
17146 (source
17147 (origin
17148 (method url-fetch)
17149 (uri (pypi-uri "bigfloat" version))
17150 (sha256
17151 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
17152 (snippet '(delete-file "mpfr.c"))))
17153 (build-system pyproject-build-system)
17154 (arguments
17155 (list
17156 #:test-flags
17157 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
17158 ;; but I don't know what to do about it.
17159 '(list "-k" "not test_hash")
17160 #:phases
17161 '(modify-phases %standard-phases
17162 (add-before 'build 'cythonize
17163 (lambda _ (invoke "cython" "mpfr.pyx"))))))
17164 (inputs (list mpfr))
17165 (native-inputs
17166 (list python-cython python-pytest python-setuptools python-wheel))
17167 (propagated-inputs
17168 (list python-six))
17169 (home-page "https://github.com/mdickinson/bigfloat")
17170 (synopsis "Arbitrary precision floating-point arithmetic for Python")
17171 (description
17172 "This package provides a Python interface to the MPFR library for
17173multiprecision arithmetic.")
17174 (license license:lgpl3+)))
17175
17176(define-public python-plac
17177 (package
17178 (name "python-plac")
17179 (version "1.4.3")
17180 (source
17181 (origin
17182 (method git-fetch)
17183 (uri (git-reference
17184 (url "https://github.com/ialbert/plac")
17185 (commit (string-append "v" version))))
17186 (file-name (git-file-name name version))
17187 (sha256
17188 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
17189 (build-system pyproject-build-system)
17190 (arguments
17191 (list
17192 #:phases
17193 #~(modify-phases %standard-phases
17194 (add-after 'unpack 'fix-tkinter
17195 (lambda _
17196 (substitute* "plac_tk.py"
17197 (("from Tkinter import Tk")
17198 "from tkinter import Tk")
17199 (("from ScrolledText import ScrolledText")
17200 "from tkinter.scrolledtext import ScrolledText")))))))
17201 (native-inputs
17202 (list (list python "tk") python-pytest python-setuptools))
17203 (home-page "https://github.com/ialbert/plac")
17204 (synopsis "Command line arguments parser")
17205 (description
17206 "This package can generate command line parameters from function
17207signatures.")
17208 (license license:bsd-3)))
17209
17210(define-public python-q
17211 (package
17212 (name "python-q")
17213 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
17214 (revision . "0")))
17215 (version (git-version "2.7"
17216 (assoc-ref properties 'revision)
17217 (assoc-ref properties 'commit)))
17218 (source
17219 (origin
17220 (method git-fetch)
17221 (uri (git-reference
17222 (url "https://github.com/zestyping/q")
17223 (commit (assoc-ref properties 'commit))))
17224 (file-name (git-file-name name version))
17225 (sha256
17226 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
17227 (build-system pyproject-build-system)
17228 (arguments
17229 (list
17230 ;; Deduced from the makefile.
17231 #:test-backend #~'custom
17232 #:test-flags #~(list "test/test_basic.py")
17233 #:phases
17234 #~(modify-phases %standard-phases
17235 (add-before 'check 'configure-tests
17236 (lambda* (#:key tests? #:allow-other-keys)
17237 (when tests?
17238 (setenv "TMPDIR" "/tmp")))))))
17239 (native-inputs (list python-setuptools))
17240 (home-page "https://github.com/zestyping/q")
17241 (synopsis "Quick-and-dirty debugging output for tired programmers")
17242 (description
17243 "q is a Python module for \"print\" style of debugging Python code. It
17244provides convenient short API for print out of values, tracebacks, and
17245falling into the Python interpreter.")
17246 (license license:asl2.0)))
17247
17248(define-public python-qnorm
17249 (package
17250 (name "python-qnorm")
17251 (version "0.9.0")
17252 (source
17253 (origin
17254 (method git-fetch)
17255 (uri (git-reference
17256 (url "https://github.com/Maarten-vd-Sande/qnorm")
17257 (commit (string-append "v" version))))
17258 (file-name (git-file-name name version))
17259 (sha256
17260 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
17261 (build-system pyproject-build-system)
17262 (arguments
17263 (list
17264 #:phases
17265 #~(modify-phases %standard-phases
17266 (add-after 'unpack 'fix-pandas-3
17267 (lambda _
17268 ;; Pandas 3.0 removed the implicit engine fallback that used
17269 ;; to switch to the Python engine whenever sep=None was
17270 ;; passed without an explicit 'engine', which get_delim()
17271 ;; relied on for delimiter auto-detection
17272 ;; Try removing the phase on the next update.
17273 (substitute* "qnorm/util.py"
17274 (("table, sep=None, iterator=True")
17275 "table, sep=None, engine=\"python\", iterator=True")))))))
17276 (propagated-inputs
17277 (list python-numba python-numpy python-pandas
17278 ;; XXX: pandas optional dependencies.
17279 python-tables python-pyarrow python-fastparquet))
17280 (native-inputs (list python-setuptools))
17281 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
17282 (synopsis "Quantile normalization")
17283 (description
17284 "This tool implements quantile normalization. It properly resolves rank
17285ties, which is important when ties happen frequently, such as when working
17286with discrete numbers (integers) in count tables. This implementation should
17287be relatively fast, and can use multiple cores to sort the columns and
17288tie-resolvement is accelerated by numba.")
17289 (license license:expat)))
17290
17291(define-public python-quantlaw
17292 (package
17293 (name "python-quantlaw")
17294 (version "0.0.7")
17295 (source
17296 (origin
17297 (method git-fetch)
17298 (uri (git-reference
17299 (url "https://github.com/Quantlaw/quantlaw")
17300 (commit (string-append "v" version))))
17301 (file-name (git-file-name name version))
17302 (sha256
17303 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
17304 (build-system pyproject-build-system)
17305 (arguments
17306 (list
17307 #:test-flags
17308 #~(list "-k"
17309 ;; test expects network access
17310 "not test_load_statue_names")))
17311 (native-inputs (list python-pytest python-setuptools))
17312 (propagated-inputs (list python-beautifulsoup4 python-networkx
17313 python-pandas python-regex python-requests))
17314 (home-page "https://quantlaw.readthedocs.io/")
17315 (synopsis "Coding utilities for quantitative legal studies")
17316 (description
17317 "This package provides coding utilities for quantitative legal studies.")
17318 (license license:bsd-3)))
17319
17320(define-public python-singledispatch
17321 (package
17322 (name "python-singledispatch")
17323 (version "4.0.0")
17324 (source
17325 (origin
17326 (method url-fetch)
17327 (uri (pypi-uri "singledispatch" version))
17328 (sha256
17329 (base32
17330 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
17331 (build-system pyproject-build-system)
17332 (native-inputs
17333 (list python-pytest
17334 python-setuptools
17335 python-six ; required for conversion, not at run-time
17336 python-wheel))
17337 (home-page
17338 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
17339 (synopsis "Backport of singledispatch feature from Python 3.4")
17340 (description
17341 "This library brings functools.singledispatch from Python 3.4 to Python
173422.6-3.3.")
17343 (license license:expat)))
17344
17345(define-public python-pyzmq
17346 (package
17347 (name "python-pyzmq")
17348 (version "27.1.0")
17349 (source
17350 (origin
17351 (method git-fetch)
17352 (uri (git-reference
17353 (url "https://github.com/zeromq/pyzmq")
17354 (commit (string-append "v" version))))
17355 (file-name (git-file-name name version))
17356 (sha256
17357 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
17358 (build-system pyproject-build-system)
17359 (arguments
17360 (list
17361 #:test-flags
17362 '(list "-m" "not flaky")
17363 #:phases
17364 #~(modify-phases %standard-phases
17365 (add-before 'build 'configure
17366 (lambda _
17367 ;; Our zeromq package is built with '--enable-drafts'; also
17368 ;; enable draft support for pyzmq so the draft test passes.
17369 (setenv "ZMQ_DRAFT_API" "1")
17370 ;; Make sure to prevent building bundled libzmq.
17371 (setenv "PYZMQ_NO_BUNDLE" "1")))
17372 (add-before 'check 'delete-source
17373 ;; To prevent loading it and skip build extensions one more times.
17374 (lambda _
17375 (delete-file-recursively "zmq"))))))
17376 (native-inputs
17377 (list cmake-minimal
17378 ;; python-cffi ; for PyPy
17379 python-cython
17380 python-packaging
17381 python-pytest
17382 python-pytest-asyncio
17383 python-scikit-build-core
17384 python-tornado))
17385 (inputs
17386 (list libsodium
17387 zeromq))
17388 (home-page "https://github.com/zeromq/pyzmq")
17389 (synopsis "Python bindings for 0MQ")
17390 (description
17391 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17392 (license license:bsd-4)))
17393
17394(define-public python-immutabledict
17395 (package
17396 (name "python-immutabledict")
17397 (version "4.2.0")
17398 (source
17399 (origin
17400 (method url-fetch)
17401 (uri (pypi-uri "immutabledict" version))
17402 (sha256
17403 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17404 (build-system pyproject-build-system)
17405 (native-inputs
17406 (list python-poetry-core python-pytest))
17407 (home-page "https://github.com/corenting/immutabledict")
17408 (synopsis "Immutable wrapper around dictionaries")
17409 (description
17410 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17411It implements the complete mapping interface and can be used as a drop-in
17412replacement for dictionaries where immutability is desired.")
17413 (license license:expat)))
17414
17415(define-public python-emoji
17416 (package
17417 (name "python-emoji")
17418 (version "2.12.1")
17419 (source
17420 (origin
17421 (method url-fetch)
17422 (uri (pypi-uri "emoji" version))
17423 (sha256
17424 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17425 (build-system pyproject-build-system)
17426 (propagated-inputs (list python-typing-extensions))
17427 (native-inputs
17428 (list python-pytest
17429 python-setuptools
17430 python-wheel))
17431 (home-page "https://github.com/carpedm20/emoji/")
17432 (synopsis "Emoji terminal output for Python")
17433 (description
17434 "This package provides Emoji terminal output for Python. The
17435entire set of Emoji codes as defined by the Unicode Consortium is supported in
17436addition to a bunch of aliases.")
17437 (license license:bsd-3)))
17438
17439;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17440;; latest version. The latest gh-md-to-html does not build successfully from
17441;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17442;; version 1.21.2 from failing.
17443;; https://issues.guix.gnu.org/72102
17444;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17445(define-public python-emoji-for-gh-md-to-html
17446 (package
17447 (inherit python-emoji)
17448 (version "1.6.1")
17449 (source
17450 (origin
17451 (method url-fetch)
17452 (uri (pypi-uri "emoji" version))
17453 (sha256
17454 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17455
17456(define-public python-sarge
17457 (package
17458 (name "python-sarge")
17459 (version "0.1.7.post1") ;post release only to correct errors in metadata
17460 (source
17461 (origin
17462 (method git-fetch)
17463 (uri (git-reference
17464 (url "https://github.com/vsajip/sarge")
17465 (commit version)))
17466 (file-name (git-file-name name version))
17467 (sha256
17468 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17469 (build-system pyproject-build-system)
17470 (native-inputs (list python-pytest python-setuptools))
17471 (home-page "https://docs.red-dove.com/sarge/")
17472 (synopsis "Subprocess wrapper with command pipeline functionality")
17473 (description "@code{sarge} is a wrapper for subprocess which provides
17474command pipeline functionality.")
17475 (license license:bsd-3)))
17476
17477(define-public python-sentry-sdk
17478 ;; TODO: Move to (gnu packages python-web).
17479 (package
17480 (name "python-sentry-sdk")
17481 (version "2.59.0")
17482 (source
17483 (origin
17484 (method git-fetch)
17485 (uri (git-reference
17486 (url "https://github.com/getsentry/sentry-python")
17487 (commit version)))
17488 (file-name (git-file-name name version))
17489 (sha256
17490 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17491 (build-system pyproject-build-system)
17492 (arguments
17493 (list
17494 ;; tests: 2119 passed, 128 skipped, 224 warnings
17495 #:test-flags
17496 #~(list "--durations=10"
17497 "--numprocesses" (number->string (parallel-job-count))
17498 ;; The whole test suite is quite shaky, may fail unpredictably
17499 ;; and depends on many additional inputs to enable all
17500 ;; integration tests.
17501 "-k" (string-join
17502 (list "not test_aggregates"
17503 "test_aggregates_deprecated"
17504 (string-append "test_aggregates_explicitly_disabled"
17505 "_session_tracking_request_mode")
17506 (string-append "test_aggregates_explicitly_disabled"
17507 "_session_tracking_request"
17508 "_mode_deprecated")
17509 "test_auto_session_tracking_with_aggregates[False]"
17510 "test_auto_session_tracking_with_aggregates[True]"
17511 "test_basic"
17512 "test_default_attributes"
17513 "test_default_release"
17514 (string-append "test_ensure_integration_enabled"
17515 "_no_original_function_enabled")
17516 "test_logger_with_all_attributes"
17517 "test_merging"
17518 (string-append "test_session_mode_defaults_to"
17519 "_request_mode_in_wsgi_handler"))
17520 " and not "))
17521 #:phases
17522 #~(modify-phases %standard-phases
17523 (add-after 'unpack 'fix-pytest-config
17524 (lambda _
17525 ;; Tests run in debug mode which generats a lot of noise.
17526 (delete-file "tox.ini")
17527 (substitute* "pyproject.toml"
17528 (("addopts =.*") "")))))))
17529 (native-inputs
17530 (list nss-certs-for-test
17531 python-brotli
17532 python-jsonschema
17533 python-mock
17534 python-pysocks
17535 python-pytest
17536 python-pytest-aiohttp
17537 python-pytest-asyncio
17538 python-pytest-localserver
17539 python-pytest-timeout
17540 python-pytest-xdist
17541 python-responses
17542 python-setuptools
17543 python-socksio))
17544 (propagated-inputs
17545 (list python-certifi
17546 python-urllib3
17547 ;; [optional]
17548 ;; python-unleashclient
17549 python-aiohttp
17550 ;; python-anthropic
17551 ;; python-apache-beam
17552 ;; python-arq
17553 python-asttokens
17554 ;; python-asyncpg
17555 ;; python-blinker
17556 ;; python-bottle
17557 ;; python-celery
17558 ;; python-celery-redbeat
17559 ;; python-chalice
17560 ;; python-clickhouse-driver
17561 ;; python-django
17562 python-executing
17563 ;; python-falcon
17564 ;; python-fastapi
17565 ;; python-flask
17566 ;; python-google-genai
17567 ;; python-grpcio
17568 python-httpcore
17569 ;; python-httpx
17570 ;; python-huey
17571 ;; python-huggingface-hub
17572 ;; python-langchain
17573 ;; python-langgraph
17574 ;; python-launchdarkly-server-sdk
17575 ;; python-litellm
17576 ;; python-litestar
17577 ;; python-loguru
17578 ;; python-markupsafe
17579 ;; python-mcp
17580 ;; python-openai
17581 ;; python-openfeature-sdk
17582 ;; python-opentelemetry-distro
17583 ;; python-protobuf
17584 ;; python-pure-eval
17585 ;; python-pydantic-ai
17586 ;; python-pymongo
17587 ;; python-pyspark
17588 ;; python-quart
17589 ;; python-rq
17590 ;; python-sanic
17591 ;; python-sqlalchemy
17592 ;; python-starlette
17593 ;; python-starlite
17594 ;; python-statsig
17595 ;; python-tiktoken
17596 #;python-tornado))
17597 (home-page "https://github.com/getsentry/sentry-python")
17598 (synopsis "Python SDK for Sentry")
17599 (description "This package provides a Python SDK for the Sentry
17600application monitoring and error tracking software.")
17601 (license license:bsd-2)))
17602
17603;; A bare minimal package, mainly to use in tests and reduce closure
17604;; size. Tests are left out in the main package to slim down native-inputs.
17605(define-public python-sentry-sdk-minimal
17606 (package/inherit python-sentry-sdk
17607 (name "python-sentry-sdk-minimal")
17608 (arguments
17609 (list #:tests? #f))
17610 (native-inputs
17611 (list python-setuptools))
17612 (propagated-inputs
17613 (list python-certifi
17614 python-urllib3))))
17615
17616(define-public python-pep440
17617 (package
17618 (name "python-pep440")
17619 (version "0.1.2")
17620 (source
17621 (origin
17622 (method url-fetch)
17623 (uri (pypi-uri "pep440" version))
17624 (sha256
17625 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17626 (build-system pyproject-build-system)
17627 (arguments
17628 ;; This checks for "pep440" in the output, but we actually print
17629 ;; ".pep440-real" due to wrapping.
17630 (list #:test-flags '(list "-k" "not test_cli_help")))
17631 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17632 python-pytest-console-scripts python-pytest-cov))
17633 (native-inputs (list python-flit-core))
17634 (home-page "https://pypi.org/project/pep440/")
17635 (synopsis "Utils to check whether versions number match PEP 440")
17636 (description
17637 "This package provides a simple package with utils to check whether
17638versions number match PEP 440.")
17639 (license license:expat)))
17640
17641(define-public python-pyproject-metadata
17642 (package
17643 (name "python-pyproject-metadata")
17644 (version "0.11.0")
17645 (source
17646 (origin
17647 (method git-fetch)
17648 (uri (git-reference
17649 (url "https://github.com/FFY00/python-pyproject-metadata")
17650 (commit version)))
17651 (file-name (git-file-name name version))
17652 (sha256
17653 (base32 "0f838jc5m8f3f4gazzsidhk6x2d359g53ysa0bp0fw11jsv1n2vp"))))
17654 (build-system pyproject-build-system)
17655 (propagated-inputs (list python-packaging))
17656 (native-inputs
17657 (list python-flit-core python-pytest python-tomli))
17658 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17659 (synopsis "Dataclass for PEP 621 metadata")
17660 (description "This project does not implement the parsing of
17661@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17662data structure representing PEP 621 metadata (already parsed), it will
17663validate this input and generate a PEP 643-compliant metadata
17664file (e.g. @file{PKG-INFO}).")
17665 (license license:expat)))
17666
17667(define-public python-meson
17668 (package
17669 (name "python-meson")
17670 (version "0.19.0")
17671 (source
17672 (origin
17673 (method git-fetch)
17674 (uri (git-reference
17675 (url "https://github.com/mesonbuild/meson-python")
17676 (commit version)))
17677 (file-name (git-file-name name version))
17678 (sha256
17679 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17680 (build-system pyproject-build-system)
17681 ;; tests: 124 passed, 16 skipped
17682 (native-inputs
17683 (list git-minimal/pinned
17684 patchelf
17685 python-pytest
17686 python-pytest-mock))
17687 (propagated-inputs
17688 (list meson
17689 ninja
17690 python-cython
17691 python-packaging
17692 python-pyproject-metadata))
17693 (home-page "https://github.com/mesonbuild/meson-python")
17694 (synopsis "Meson Python build backend (PEP 517)")
17695 (description "This package provides a PEP 517 build backend that makes
17696use of the Meson build system.")
17697 (license license:expat)))
17698
17699(define-public python-mfusepy
17700 (package
17701 (name "python-mfusepy")
17702 (version "3.1.1")
17703 (source
17704 (origin
17705 (method git-fetch)
17706 (uri (git-reference
17707 (url "https://github.com/mxmlnkn/mfusepy")
17708 (commit (string-append "v" version))))
17709 (file-name (git-file-name name version))
17710 (sha256
17711 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17712 (build-system pyproject-build-system)
17713 (native-inputs (list python-setuptools))
17714 (inputs (list fuse))
17715 (arguments
17716 (list
17717 #:tests? #f ; Tests require fuse kernel module
17718 #:phases
17719 #~(modify-phases %standard-phases
17720 (add-after 'unpack 'embed-libfuse
17721 (lambda* (#:key inputs #:allow-other-keys)
17722 (substitute* "mfusepy.py"
17723 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17724 (format #f "~a\"~a\"\n"
17725 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17726 (home-page "https://github.com/mxmlnkn/mfusepy")
17727 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17728 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17729 (license license:isc)))
17730
17731(define-public python-mccabe
17732 ;; Last public release (0.7.0) is from 2022-01-24.
17733 (let ((commit "292b5c71c3fe5496771b46ac9d86361c9b760d17")
17734 (revision "0"))
17735 (package
17736 (name "python-mccabe")
17737 (version (git-version "0.7.0" revision commit))
17738 (source
17739 (origin
17740 (method git-fetch)
17741 (uri (git-reference
17742 (url "https://github.com/PyCQA/mccabe")
17743 (commit commit)))
17744 (file-name (git-file-name name version))
17745 (sha256
17746 (base32 "12aa5qjzf0anx1bdfcgg4gvn9kkm1cc5qi2lzrh23c5gxyfyxw17"))))
17747 (build-system pyproject-build-system)
17748 (arguments
17749 (list
17750 #:test-flags
17751 ;; AssertionError: 0 != 1
17752 #~(list (string-append "--deselect=test_mccabe.py"
17753 "::RegressionTests::test_get_module_complexity"))))
17754 (native-inputs
17755 (list python-pytest
17756 python-setuptools))
17757 (home-page "https://github.com/PyCQA/mccabe")
17758 (synopsis "McCabe checker, plugin for flake8")
17759 (description
17760 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17761complexity of Python source code.")
17762 (license license:expat))))
17763
17764(define-public python-autoflake8
17765 (package
17766 (name "python-autoflake8")
17767 (version "0.4.0")
17768 (source (origin
17769 (method git-fetch) ;for tests
17770 (uri (git-reference
17771 (url "https://github.com/fsouza/autoflake8")
17772 (commit (string-append "v" version))))
17773 (file-name (git-file-name name version))
17774 (sha256
17775 (base32
17776 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17777 (build-system pyproject-build-system)
17778 (native-inputs
17779 (list python-aiofiles
17780 python-poetry-core
17781 python-pytest
17782 python-pytest-xdist))
17783 (propagated-inputs (list python-pyflakes))
17784 (home-page "https://github.com/fsouza/autoflake8")
17785 (synopsis "Automatically fix issues reported by flake8")
17786 (description "Tool to automatically fix some issues reported by
17787@command{flake8}.")
17788 (license license:expat)))
17789
17790(define-public python-flake8
17791 (package
17792 (name "python-flake8")
17793 (version "7.3.0")
17794 (source
17795 (origin
17796 (method git-fetch)
17797 (uri (git-reference
17798 (url "https://github.com/pycqa/flake8")
17799 (commit version)))
17800 (file-name (git-file-name name version))
17801 (sha256
17802 (base32 "0dva22djb3pdrizghvs5r1k7vr1j3khs0k9z8y6dz4ga50dli4bm"))))
17803 (build-system pyproject-build-system)
17804 (native-inputs
17805 (list python-pytest
17806 python-setuptools))
17807 (propagated-inputs
17808 (list python-mccabe
17809 python-pycodestyle
17810 python-pyflakes))
17811 (home-page "https://flake8.pycqa.org/en/latest/")
17812 (synopsis "The modular source code checker: pep8, pyflakes and co")
17813 (description
17814 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17815 (license license:expat)))
17816
17817(define-public python-flake8-blind-except
17818 (package
17819 (name "python-flake8-blind-except")
17820 (version "0.2.1")
17821 (source
17822 (origin
17823 (method git-fetch)
17824 (uri (git-reference
17825 (url "https://github.com/elijahandrews/flake8-blind-except")
17826 (commit (string-append "v" version))))
17827 (file-name (git-file-name name version))
17828 (sha256
17829 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17830 (build-system pyproject-build-system)
17831 (arguments (list #:tests? #f)) ;no tests
17832 (native-inputs (list python-setuptools))
17833 (propagated-inputs (list python-pycodestyle))
17834 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17835 (synopsis "Check for blind @code{except:} statements")
17836 (description
17837 "This package provides a flake8 extension that checks for blind
17838@code{except:} statements.")
17839 (license license:expat)))
17840
17841(define-public python-flake8-bugbear
17842 (package
17843 (name "python-flake8-bugbear")
17844 (version "24.10.31")
17845 (source
17846 (origin
17847 (method url-fetch)
17848 (uri (pypi-uri "flake8_bugbear" version))
17849 (sha256
17850 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17851 (build-system pyproject-build-system)
17852 (native-inputs
17853 (list python-hypothesmith
17854 python-pytest
17855 python-setuptools
17856 python-wheel))
17857 (propagated-inputs
17858 (list python-attrs
17859 python-flake8))
17860 (home-page "https://github.com/PyCQA/flake8-bugbear")
17861 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17862 (description
17863 "This package contains a plugin for Flake8 finding likely bugs and design
17864problems in your program. It contains warnings that don't belong in pyflakes
17865and pycodestyle.")
17866 (license license:expat)))
17867
17868(define-public python-flake8-continuation
17869 (package
17870 (name "python-flake8-continuation")
17871 (version "1.0.5")
17872 (source
17873 (origin
17874 (method git-fetch)
17875 (uri (git-reference
17876 (url "https://github.com/planetlabs/flake8-continuation")
17877 (commit version)))
17878 (file-name (git-file-name name version))
17879 (sha256
17880 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17881 (build-system pyproject-build-system)
17882 (arguments
17883 (list
17884 #:phases
17885 #~(modify-phases %standard-phases
17886 (add-after 'unpack 'remove-python-six-dependency
17887 (lambda _
17888 (substitute* "flake8_continuation.py"
17889 (("import six|six\\.moves\\.")
17890 ""))
17891 (substitute* "setup.py"
17892 ((", \"six\"")
17893 "")))))))
17894 (native-inputs (list python-pytest python-setuptools))
17895 (propagated-inputs (list python-flake8 python-pycodestyle))
17896 (home-page "https://github.com/planetlabs/flake8-continuation")
17897 (synopsis "Flake8 Line Continuation Plugin")
17898 (description
17899 "A Flake8 plugin that checks for the line continuation style to be in the
17900preferred method according to PEP-8, specifically:
17901@quotation
17902The preferred way of wrapping long lines is by using Python's implied line
17903continuation inside parentheses, brackets and braces. Long lines can be
17904broken over multiple lines by wrapping expressions in parentheses. These
17905should be used in preference to using a backslash for line continuation.
17906@end quotation")
17907 (license license:asl2.0)))
17908
17909(define-public python-flake8-debugger
17910 (package
17911 (name "python-flake8-debugger")
17912 (version "4.1.2")
17913 (source
17914 (origin
17915 (method git-fetch)
17916 (uri (git-reference
17917 (url "https://github.com/jbkahn/flake8-debugger")
17918 (commit version)))
17919 (file-name (git-file-name name version))
17920 (sha256
17921 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17922 (build-system pyproject-build-system)
17923 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17924 (propagated-inputs (list python-flake8 python-pycodestyle))
17925 (home-page "https://github.com/jbkahn/flake8-debugger")
17926 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17927 (description
17928 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17929@code{pdb} imports and set traces, as well as @code{from
17930IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17931@code{InteractiveShellEmbed()()}.")
17932 (license license:expat)))
17933
17934(define-public python-flake8-implicit-str-concat
17935 (package
17936 (name "python-flake8-implicit-str-concat")
17937 (version "0.5.0")
17938 (source
17939 (origin
17940 (method url-fetch)
17941 (uri (pypi-uri "flake8_implicit_str_concat" version))
17942 (sha256
17943 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17944 (build-system pyproject-build-system)
17945 (arguments
17946 (list
17947 #:tests? #f)) ; no tests in PiPY or git checkout
17948 (native-inputs
17949 (list python-hatchling))
17950 (propagated-inputs
17951 (list python-attrs
17952 python-more-itertools))
17953 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17954 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17955 (description
17956 "This is a plugin for the Python code checking tool Flake8 to encourage
17957correct string literal concatenation.
17958
17959It looks for style problems like implicitly concatenated string literals on
17960the same line (which can be introduced by the code formatting tool Black), or
17961unnecessary plus operators for explicit string literal concatenation.")
17962 (license license:expat)))
17963
17964(define-public python-flake8-print
17965 (package
17966 (name "python-flake8-print")
17967 (version "5.0.0")
17968 (source
17969 (origin
17970 (method url-fetch)
17971 (uri (pypi-uri "flake8-print" version))
17972 (sha256
17973 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17974 (build-system pyproject-build-system)
17975 (arguments
17976 (list
17977 #:tests? #f)) ; no tests in PiPY or git checkout
17978 (native-inputs
17979 (list python-poetry-core))
17980 (propagated-inputs
17981 (list python-flake8
17982 python-pycodestyle))
17983 (home-page "https://github.com/jbkahn/flake8-print")
17984 (synopsis "Print statement checker plugin for Flake8")
17985 (description
17986 "This plugin for Flake8 checks for @code{print} statements in Python
17987files.")
17988 (license license:expat)))
17989
17990(define-public python-flake8-pyi
17991 (package
17992 (name "python-flake8-pyi")
17993 (version "26.5.0")
17994 (source
17995 (origin
17996 (method git-fetch)
17997 (uri (git-reference
17998 (url "https://github.com/ambv/flake8-pyi")
17999 (commit version)))
18000 (file-name (git-file-name name version))
18001 (sha256
18002 (base32 "006shfi8a99ysfac5s7fizx8f5w9hz3pl551kp9q1883rh1rfd5m"))))
18003 (build-system pyproject-build-system)
18004 (arguments
18005 (list
18006 #:phases
18007 #~(modify-phases %standard-phases
18008 (add-after 'unpack 'fix-pytest-config
18009 (lambda _
18010 ;; Prevent full threads utilization.
18011 (substitute* "pyproject.toml"
18012 (("-nauto") "")))))))
18013 (native-inputs
18014 (list python-hatch-vcs
18015 python-hatchling
18016 python-pytest))
18017 (propagated-inputs
18018 (list python-attrs
18019 python-flake8
18020 python-pyflakes))
18021 (home-page "https://github.com/ambv/flake8-pyi")
18022 (synopsis "Flake8 plugin for type hinting stub files")
18023 (description
18024 "This package contains a plugin that provides specializations for type
18025hinting stub files, especially interesting for linting typeshed. It adds the
18026@file{.pyi} extension to the default value of the @code{--filename}
18027command-line argument to Flake8. This means stubs are linted by default with
18028this plugin enabled, without needing to explicitly list every file. It
18029modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
18030expressions after the entire file has been read. This enables support for
18031first-class forward references that stub files use.")
18032 (license license:expat)))
18033
18034(define-public python-flake8-quotes
18035 (package
18036 (name "python-flake8-quotes")
18037 (version "3.4.0")
18038 (source
18039 (origin
18040 (method url-fetch)
18041 (uri (pypi-uri "flake8-quotes" version))
18042 (sha256
18043 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
18044 (build-system pyproject-build-system)
18045 (native-inputs
18046 (list python-pytest
18047 python-setuptools
18048 python-wheel))
18049 (propagated-inputs
18050 (list python-flake8))
18051 (home-page "https://github.com/zheller/flake8-quotes/")
18052 (synopsis "Flake8 lint for quotes")
18053 (description "This package provides a Flake8 lint for quotes.")
18054 (license license:expat)))
18055
18056(define-public python-flake8-todo
18057 (package
18058 (name "python-flake8-todo")
18059 (version "0.7")
18060 (source
18061 (origin
18062 (method git-fetch)
18063 (uri (git-reference
18064 (url "https://github.com/schlamar/flake8-todo")
18065 (commit (string-append "v" version))))
18066 (file-name (git-file-name name version))
18067 (sha256
18068 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
18069 (build-system pyproject-build-system)
18070 (arguments (list #:tests? #f)) ; No tests.
18071 (native-inputs (list python-setuptools))
18072 (propagated-inputs (list python-pycodestyle))
18073 (home-page "https://github.com/schlamar/flake8-todo")
18074 (synopsis "TODO notes checker, plugin for flake8")
18075 (description
18076 "This package provides the @code{flake8-todo} Python module, a
18077TODO notes checker plugin for flake8.")
18078 (license license:expat)))
18079
18080(define-public python-flake8-isort
18081 (package
18082 (name "python-flake8-isort")
18083 (version "7.0.0")
18084 (source
18085 (origin
18086 (method git-fetch)
18087 (uri (git-reference
18088 (url "https://github.com/gforcada/flake8-isort")
18089 (commit version)))
18090 (file-name (git-file-name name version))
18091 (sha256
18092 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
18093 (build-system pyproject-build-system)
18094 (arguments (list #:test-backend #~'custom
18095 #:test-flags #~(list "run_tests.py")))
18096 (native-inputs (list python-hatchling python-pytest))
18097 (propagated-inputs (list python-flake8 python-isort))
18098 (home-page "https://github.com/gforcada/flake8-isort")
18099 (synopsis "Flake8 plugin integrating isort")
18100 (description
18101 "This package provides a flake8 plugin that integrates isort,
18102extending flake8 so that it can warn about badly sorted Python import
18103directives.")
18104 (license license:gpl2+)))
18105
18106(define-public python-autoflake
18107 (package
18108 (name "python-autoflake")
18109 (version "2.3.1")
18110 (source
18111 (origin
18112 (method url-fetch)
18113 (uri (pypi-uri "autoflake" version))
18114 (sha256
18115 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
18116 (build-system pyproject-build-system)
18117 (arguments
18118 (list
18119 #:phases
18120 #~(modify-phases %standard-phases
18121 (replace 'check
18122 (lambda _
18123 (invoke "python" "test_autoflake.py"))))))
18124 (native-inputs
18125 (list python-hatchling))
18126 (propagated-inputs
18127 (list python-pyflakes))
18128 (home-page "https://github.com/myint/autoflake")
18129 (synopsis "Removes unused imports and unused variables")
18130 (description
18131 "@code{autoflake} removes unused imports and unused variables from Python
18132code as reported by @code{pyflakes}.
18133
18134By default, it only removes unused imports for modules that are part of the
18135standard library. Removal of unused variables is also disabled by default.
18136It also removes useless @code{pass} statements.")
18137 (license license:expat)))
18138
18139(define-public python-mistune
18140 (package
18141 (name "python-mistune")
18142 (version "3.2.1")
18143 (source
18144 (origin
18145 (method git-fetch)
18146 (uri (git-reference
18147 (url "https://github.com/lepture/mistune")
18148 (commit (string-append "v" version))))
18149 (file-name (git-file-name name version))
18150 (sha256
18151 (base32 "1zcfky6rr860mdbjxs1h0lhla39g8s3048xdnb24y0lnyj3h80gh"))))
18152 (build-system pyproject-build-system)
18153 (native-inputs
18154 (list python-pytest
18155 python-setuptools))
18156 (home-page "https://github.com/lepture/mistune")
18157 (synopsis "Markdown parser in pure Python")
18158 (description
18159 "This package provides a fast markdown parser in pure Python.")
18160 (license license:bsd-3)))
18161
18162(define-public python-markdown
18163 (package
18164 (name "python-markdown")
18165 (version "3.10.2")
18166 (source
18167 (origin
18168 (method git-fetch)
18169 (uri (git-reference
18170 (url "https://github.com/Python-Markdown/markdown")
18171 (commit version)))
18172 (file-name (git-file-name name version))
18173 (sha256
18174 (base32 "1i7hn91zhg5blykvsdzr1hq00p8xqysdh1l73iypx9pd2pdvk7w9"))))
18175 (build-system pyproject-build-system)
18176 (native-inputs
18177 (list python-pyyaml
18178 python-setuptools))
18179 (home-page "https://python-markdown.github.io/")
18180 (synopsis "Python implementation of Markdown")
18181 (description
18182 "This package provides a Python implementation of John Gruber's
18183Markdown. The library features international input, various Markdown
18184extensions, and several HTML output formats. A command line wrapper
18185markdown_py is also provided to convert Markdown files to HTML.")
18186 (license license:bsd-3)))
18187
18188(define-public python-markdown2
18189 (package
18190 (name "python-markdown2")
18191 (version "2.5.3")
18192 (source
18193 (origin
18194 (method git-fetch) ; no tests data in PyPi package
18195 (uri (git-reference
18196 (url "https://github.com/trentm/python-markdown2")
18197 (commit version)))
18198 (file-name (git-file-name name version))
18199 (sha256
18200 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
18201 (build-system pyproject-build-system)
18202 (arguments
18203 (list
18204 #:test-backend #~'custom
18205 #:test-flags #~(list "test.py" "--" "-knownfailure")
18206 #:phases
18207 #~(modify-phases %standard-phases
18208 (add-before 'check 'pre-check
18209 (lambda _
18210 (chdir "test"))))))
18211 (native-inputs
18212 (list ;; python-pygments ;optional, tests fail when added
18213 ;; python-wavedrom ;optional, not packaged
18214 ;; python-latex2mathml ;optional, not packaged
18215 python-setuptools))
18216 (home-page "https://github.com/trentm/python-markdown2")
18217 (synopsis "Fast and complete Python implementation of Markdown")
18218 (description
18219 "This package provides a fast and complete Python implementation of
18220Markdown. It was written to closely match the behaviour of the original
18221Perl-implemented Markdown.pl. It also comes with a number of
18222extensions (called @code{extras}) for things like syntax coloring, tables,
18223header-ids.")
18224 (license license:expat)))
18225
18226(define-public python-mdx-include
18227 (package
18228 (name "python-mdx-include")
18229 (version "1.4.2")
18230 (source
18231 (origin
18232 (method git-fetch)
18233 (uri (git-reference
18234 (url "https://github.com/neurobin/mdx_include")
18235 (commit (string-append "v" version))))
18236 (file-name (git-file-name name version))
18237 (sha256
18238 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
18239 (build-system pyproject-build-system)
18240 (arguments
18241 (list
18242 #:test-backend #~'unittest
18243 #:phases
18244 (let* ((django-hello-url "\
18245https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1824673951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
18247 (django-hello
18248 (origin
18249 (method url-fetch)
18250 (uri django-hello-url)
18251 (sha256 (base32 "\
1825213bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
18253 #~(modify-phases %standard-phases
18254 (add-before 'check 'disable-test-requiring-network
18255 (lambda _
18256 (substitute* "mdx_include/test/test.py"
18257 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
18258 (string-append pre "__off__test_" post "("))
18259 (((string-join (string-split #$django-hello-url #\.) "\\."))
18260 #+django-hello))))))))
18261 (native-inputs (list python-setuptools))
18262 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
18263 (home-page "https://github.com/neurobin/mdx_include")
18264 (synopsis "Python Markdown extension to include local or remote files")
18265 (description "Include extension for Python Markdown. It lets you include
18266local or remote (downloadable) files into your markdown at arbitrary
18267positions.
18268
18269This project is motivated by markdown-include and provides the same
18270functionalities with some extras.")
18271 (license license:bsd-3)))
18272
18273(define-public python-ptyprocess
18274 (package
18275 (name "python-ptyprocess")
18276 (version "0.7.0")
18277 (source
18278 (origin
18279 (method url-fetch)
18280 (uri (pypi-uri "ptyprocess" version))
18281 (sha256
18282 (base32
18283 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
18284 (build-system pyproject-build-system)
18285 (native-inputs
18286 (list python-flit-core
18287 python-pytest))
18288 (home-page "https://github.com/pexpect/ptyprocess")
18289 (synopsis "Run a subprocess in a pseudo terminal")
18290 (description
18291 "This package provides a Python library used to launch a subprocess in a
18292pseudo terminal (pty), and interact with both the process and its pty.")
18293 (license license:isc)))
18294
18295(define-public python-configshell-fb
18296 (package
18297 (name "python-configshell-fb")
18298 (version "1.1.30")
18299 (source
18300 (origin
18301 (method url-fetch)
18302 (uri (pypi-uri "configshell-fb" version))
18303 ;; XXX: Snippet below is required because on v1.1.30 the source code
18304 ;; has configshell_fb as softlink to configshell and guix
18305 ;; pyproject-build-system doesn't work with symlinks very well.
18306 ;;
18307 ;; This package is only used in spdk for now and it's crucial to keep
18308 ;; it locked on version and keep the snipped for spdk to build
18309 ;; successfully.
18310 (snippet #~(begin
18311 (use-modules (guix build utils))
18312 (delete-file "setup.py")
18313 (delete-file-recursively "configshell_fb")
18314 (rename-file "configshell" "configshell_fb")))
18315 (sha256
18316 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
18317 (build-system pyproject-build-system)
18318 (arguments
18319 (list #:tests? #f)) ;; this package has no tests
18320 (native-inputs
18321 (list python-setuptools
18322 python-six
18323 python-wheel))
18324 (propagated-inputs
18325 (list python-pyparsing))
18326 (home-page "https://github.com/open-iscsi/configshell-fb")
18327 (synopsis "Framework to implement simple but nice CLIs")
18328 (description
18329 "This package provides a framework to implement simple but nice CLIs.")
18330 (license license:asl2.0)))
18331
18332(define-public python-configupdater
18333 (package
18334 (name "python-configupdater")
18335 (version "3.2")
18336 (source
18337 (origin
18338 (method git-fetch)
18339 (uri (git-reference
18340 (url "https://github.com/pyscaffold/configupdater")
18341 (commit (string-append "v" version))))
18342 (file-name (git-file-name name version))
18343 (sha256
18344 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
18345 (build-system pyproject-build-system)
18346 (native-inputs
18347 (list python-pytest python-setuptools python-setuptools-scm))
18348 (home-page "https://github.com/pyscaffold/configupdater")
18349 (synopsis "Parser like ConfigParser but for updating configuration files")
18350 (description
18351 "ConfigUpdater is a Python library for updating INI configuration files
18352while preserving the original file's formatting, structure, and comments.
18353Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
18354targeted changes--keeping comments, section ordering, key-value pair
18355ordering, and original casing intact.")
18356 (license license:expat)))
18357
18358(define-public python-crccheck
18359 (package
18360 (name "python-crccheck")
18361 (version "1.3.0")
18362 (source
18363 (origin
18364 (method git-fetch) ; no tests in PyPI
18365 (uri (git-reference
18366 (url "https://github.com/MartinScharrer/crccheck")
18367 (commit (string-append "v" version))))
18368 (file-name (git-file-name name version))
18369 (sha256
18370 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
18371 (build-system pyproject-build-system)
18372 (native-inputs (list python-pytest python-setuptools python-wheel))
18373 (home-page "https://github.com/MartinScharrer/crccheck")
18374 (synopsis "Calculation library for CRCs and checksums")
18375 (description "@code{crccheck} is a calculation library for CRCs and
18376checksums. It implement more than a hundred checksum routines.")
18377 (license license:gpl3+)))
18378
18379(define-public python-crashtest
18380 (package
18381 (name "python-crashtest")
18382 (version "0.4.1")
18383 (source
18384 (origin
18385 (method git-fetch)
18386 (uri (git-reference
18387 (url "https://github.com/sdispater/crashtest")
18388 (commit version)))
18389 (file-name (git-file-name name version))
18390 (sha256
18391 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18392 (build-system pyproject-build-system)
18393 (native-inputs (list python-poetry-core python-pytest))
18394 (home-page "https://github.com/sdispater/crashtest")
18395 (synopsis "Manage Python errors with ease")
18396 (description
18397 "Python library that makes exceptions handling and inspection easier.")
18398 (license license:expat)))
18399
18400(define-public python-pysendfile
18401 (package
18402 (name "python-pysendfile")
18403 (version "2.0.1")
18404 (source
18405 (origin
18406 (method git-fetch)
18407 (uri (git-reference
18408 (url "https://github.com/giampaolo/pysendfile")
18409 (commit (string-append "release-" version))))
18410 (file-name (git-file-name name version))
18411 (sha256
18412 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18413 (build-system pyproject-build-system)
18414 (arguments
18415 (list
18416 #:phases
18417 #~(modify-phases %standard-phases
18418 (replace 'check
18419 (lambda* (#:key tests? #:allow-other-keys)
18420 (when tests?
18421 (setenv "HOME" "/tmp")
18422 (invoke "make" "test")))))))
18423 (native-inputs (list python-pytest python-setuptools))
18424 (propagated-inputs (list python-pyasynchat))
18425 (home-page "https://github.com/giampaolo/pysendfile")
18426 (synopsis "Python interface to sendfile(2)")
18427 (description "The @code{pysendfile} Python library provides an interface to
18428the @code{sendfile(2)} system call.")
18429 (license license:expat)))
18430
18431(define-public python-pyftpdlib
18432 (package
18433 (name "python-pyftpdlib")
18434 (version "1.5.10")
18435 (source
18436 (origin
18437 (method url-fetch)
18438 (uri (pypi-uri "pyftpdlib" version))
18439 (sha256
18440 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18441 (build-system pyproject-build-system)
18442 ;; Using Pytest instead of the Makefile causes the command line tests to
18443 ;; fail on unknown Pytest arguments.
18444 (arguments
18445 (list
18446 #:test-flags
18447 #~(list
18448 "-k" "not TestCommandLineParser"
18449 ;; These contains flaky tests.
18450 "--deselect=pyftpdlib/test/test_functional.py"
18451 "--deselect=pyftpdlib/test/test_functional_ssl.py")))
18452 (native-inputs
18453 (list python-psutil
18454 python-pytest
18455 python-setuptools
18456 python-wheel))
18457 (propagated-inputs
18458 (list python-pyopenssl
18459 python-pysendfile))
18460 (home-page "https://github.com/giampaolo/pyftpdlib/")
18461 (synopsis "Asynchronous and scalable Python FTP server library")
18462 (description "The Python FTP server library provides a high-level
18463interface to write efficient, scalable and asynchronous FTP servers with
18464Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18465RFC-959} FTP server implementation available for Python, and has the following
18466traits:
18467@itemize
18468@item
18469It is lightweight, fast and scalable.
18470@item
18471It uses the @code{sendfile(2)} system call for uploads.
18472@item
18473It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18474asynchronously.
18475@item
18476It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18477IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18478RFC-2640}) and MLSD/MLST commands (RFC-3659).
18479@item
18480It has a flexible system of @samp{authorizers} able to manage both
18481@samp{virtual} and @samp{real} users.
18482@end itemize")
18483 (license license:expat)))
18484
18485(define-public python-fonttools
18486 (package
18487 (name "python-fonttools")
18488 (version "4.59.2")
18489 (source
18490 (origin
18491 (method url-fetch)
18492 (uri (pypi-uri "fonttools" version ".tar.gz"))
18493 (sha256
18494 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18495 (build-system pyproject-build-system)
18496 (arguments
18497 (list
18498 #:tests? (not (%current-target-system))
18499 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18500 ;; 3 subtests passed
18501 #:test-flags
18502 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18503 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18504 (string-join ls "::")))
18505 ;; XXX: Some test data is not included in PyPI archive,
18506 ;; remove when switched to git-fetch.
18507 '(("cffLib/cffLib_test.py" "CffLibTest"
18508 "test_reading_supplement_encoding")
18509 ("tfmLib/tfmLib_test.py"
18510 "test_read_boundary_char")
18511 ("tfmLib/tfmLib_test.py"
18512 "test_read_fontdimens_vanilla")
18513 ("tfmLib/tfmLib_test.py"
18514 "test_read_fontdimens_mathex")
18515 ("tfmLib/tfmLib_test.py"
18516 "test_read_fontdimens_mathsy")
18517 ("voltLib/volttofea_test.py" "ToFeaTest"
18518 "test_cli_vtp")
18519 ("voltLib/volttofea_test.py" "ToFeaTest"
18520 "test_group_order"))))))
18521 (native-inputs
18522 (list python-pytest
18523 python-setuptools))
18524 ;; All of them are listed as extras_require.
18525 (propagated-inputs
18526 (list python-brotli
18527 python-lxml
18528 python-unicodedata2
18529 python-zopfli))
18530 (home-page "https://github.com/fonttools/fonttools")
18531 (synopsis "Tools to manipulate font files")
18532 (description
18533 "FontTools/TTX is a library to manipulate font files from Python. It
18534supports reading and writing of TrueType/OpenType fonts, reading and writing
18535of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18536also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18537from an XML-based format.")
18538 (license license:expat)))
18539
18540;;; Tests are left out in the main package to avoid cycles.
18541;; XXX: When updating, solve comment in python-cu2qu.
18542(define-public python-fonttools-minimal
18543 (hidden-package
18544 (package
18545 (inherit python-fonttools)
18546 (name "python-fonttools-minimal")
18547 (arguments '(#:tests? #f))
18548 (native-inputs
18549 (list python-setuptools))
18550 (propagated-inputs '()))))
18551
18552(define-public python-ly
18553 (package
18554 (name "python-ly")
18555 (version "0.9.9")
18556 (source
18557 (origin
18558 (method git-fetch)
18559 (uri (git-reference
18560 (url "https://github.com/frescobaldi/python-ly")
18561 (commit (string-append "v" version))))
18562 (file-name (git-file-name name version))
18563 (sha256
18564 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18565 (build-system pyproject-build-system)
18566 (arguments
18567 (list
18568 #:phases
18569 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18570 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18571 #~(modify-phases %standard-phases
18572 (add-after 'unpack 'inject-data
18573 (lambda _
18574 (substitute* "tests/musicxml.xsd"
18575 (((string-join (string-split #$namespace-url #\.) "\\."))
18576 #$(origin
18577 (method url-fetch)
18578 (uri namespace-url)
18579 (sha256 (base32 "\
185801j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18581 (((string-join (string-split #$xlink-url #\.) "\\."))
18582 #$(origin
18583 (method url-fetch)
18584 (uri xlink-url)
18585 (sha256 (base32 "\
185860jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18587 (native-inputs (list python-hatchling python-lxml python-pytest))
18588 (synopsis "Tool and library for manipulating LilyPond files")
18589 (description
18590 "This package provides a Python library to parse, manipulate or create
18591documents in LilyPond format. A command line program ly is also provided that
18592can be used to do various manipulations with LilyPond files.")
18593 (home-page "https://pypi.org/project/python-ly/")
18594 (license license:gpl2+)))
18595
18596(define-public python-appdirs
18597 (package
18598 (name "python-appdirs")
18599 (version "1.4.4")
18600 (source
18601 (origin
18602 (method url-fetch)
18603 (uri (pypi-uri "appdirs" version))
18604 (sha256
18605 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18606 (build-system pyproject-build-system)
18607 (arguments (list #:test-backend #~'unittest))
18608 (native-inputs (list python-setuptools))
18609 (home-page "https://github.com/ActiveState/appdirs")
18610 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18611 (description
18612 "This module provides a portable way of finding out where user data
18613should be stored on various operating systems.")
18614 (license license:expat)))
18615
18616(define-public python-gorilla
18617 (package
18618 (name "python-gorilla")
18619 (version "0.5.0")
18620 (source
18621 (origin
18622 (method git-fetch)
18623 (uri (git-reference
18624 (url "https://github.com/christophercrouzet/gorilla")
18625 (commit (string-append "v" version))))
18626 (file-name (git-file-name name version))
18627 (sha256
18628 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18629 (build-system pyproject-build-system)
18630 (arguments (list #:test-backend #~'unittest))
18631 (native-inputs (list python-setuptools))
18632 (home-page "https://github.com/christophercrouzet/gorilla")
18633 (synopsis "Convenient monkey patching with Python")
18634 (description
18635 "Gorilla is a Python library that provides a convenient approach to
18636monkey patching. Monkey patching is the process of modifying module and
18637class attributes at runtime with the purpose of replacing or extending
18638third-party code.")
18639 (license license:expat)))
18640
18641(define-public python-llfuse
18642 (package
18643 (name "python-llfuse")
18644 (version "1.5.1")
18645 (source
18646 (origin
18647 (method git-fetch)
18648 (uri (git-reference
18649 (url "https://github.com/python-llfuse/python-llfuse")
18650 (commit (string-append "release-" version))))
18651 (file-name (git-file-name name version))
18652 (sha256
18653 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18654 (build-system pyproject-build-system)
18655 (arguments
18656 (list
18657 #:test-flags
18658 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18659 #:phases
18660 #~(modify-phases %standard-phases
18661 (add-before 'build 'build-cython
18662 (lambda _
18663 (invoke "python" "setup.py" "build_cython"))))))
18664 (inputs (list fuse-2 attr))
18665 (native-inputs
18666 (list pkg-config python-cython python-pytest python-setuptools))
18667 (synopsis "Python bindings for FUSE")
18668 (description
18669 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18670 (home-page "https://github.com/python-llfuse/python-llfuse")
18671 (license license:lgpl2.0+)))
18672
18673(define-public python-msgpack
18674 (package
18675 (name "python-msgpack")
18676 (version "1.1.2")
18677 (source
18678 (origin
18679 (method url-fetch)
18680 (uri (pypi-uri "msgpack" version))
18681 (sha256
18682 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18683 (build-system pyproject-build-system)
18684 (native-inputs
18685 (list python-pytest
18686 python-setuptools))
18687 (home-page "https://msgpack.org/")
18688 (synopsis "MessagePack (de)serializer")
18689 (description "MessagePack is a fast, compact binary serialization format,
18690suitable for similar data to JSON. This package provides CPython bindings for
18691reading and writing MessagePack data.")
18692 (license license:asl2.0)))
18693
18694(define-public python-openstep-plist
18695 (package
18696 (name "python-openstep-plist")
18697 (version "0.5.2")
18698 (source
18699 (origin
18700 (method git-fetch)
18701 (uri (git-reference
18702 (url "https://github.com/fonttools/openstep-plist")
18703 (commit (string-append "v" version))))
18704 (file-name (git-file-name name version))
18705 (sha256
18706 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18707 (build-system pyproject-build-system)
18708 (native-inputs
18709 (list python-cython
18710 python-pytest
18711 python-setuptools-scm
18712 python-setuptools))
18713 (home-page "https://github.com/fonttools/openstep-plist")
18714 (synopsis "OpenStep plist parser and writer")
18715 (description
18716 "This package provides a parser for the \"old style\" OpenStep property
18717list format (also known as ASCII plist), written in Cython.")
18718 (license license:expat)))
18719
18720(define-public python-resolvelib
18721 (package
18722 (name "python-resolvelib")
18723 ;; Use latest commit, because last release, 1.2.1 is incompatible
18724 ;; with python-packaging 26,
18725 (properties '((commit . "a0cb7c50b78028f840b238d8e1c391e0546f2325")
18726 (revision . "0")))
18727 (version (git-version "1.2.1"
18728 (assoc-ref properties 'revision)
18729 (assoc-ref properties 'commit)))
18730 (source
18731 (origin
18732 (method git-fetch)
18733 (uri (git-reference
18734 (url "https://github.com/sarugaku/resolvelib")
18735 (commit (assoc-ref properties 'commit))))
18736 (file-name (git-file-name name version))
18737 (sha256
18738 (base32 "1f00jlcv7fal4y6iyvqsycc6b5mkvxgc0jdddbkm1jcci1qy1yfl"))))
18739 (build-system pyproject-build-system)
18740 (native-inputs
18741 (list python-packaging
18742 python-pytest
18743 python-setuptools
18744 python-wheel))
18745 (home-page "https://github.com/sarugaku/resolvelib")
18746 (synopsis "Abstract dependencies resolver")
18747 (description
18748 "The ResolveLib library provides a @code{Resolver} class that includes
18749dependency resolution logic.")
18750 (license license:isc)))
18751
18752;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18753;; 2022. It is now read-only.
18754(define-public python-commonmark
18755 (package
18756 (name "python-commonmark")
18757 (version "0.9.1")
18758 (source
18759 (origin
18760 (method url-fetch)
18761 (uri (pypi-uri "commonmark" version))
18762 (sha256
18763 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18764 (build-system pyproject-build-system)
18765 (native-inputs
18766 (list python-setuptools))
18767 (home-page "https://github.com/readthedocs/commonmark.py")
18768 (synopsis "Python parser for the CommonMark Markdown spec")
18769 (description
18770 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18771Markdown parser and renderer for the CommonMark specification, using only
18772native modules.")
18773 (license license:bsd-3)))
18774
18775(define-public python-immutables
18776 (package
18777 (name "python-immutables")
18778 (version "0.21")
18779 (source
18780 (origin
18781 (method git-fetch)
18782 (uri (git-reference
18783 (url "https://github.com/MagicStack/immutables")
18784 (commit (string-append "v" version))))
18785 (file-name (git-file-name name version))
18786 (sha256
18787 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18788 (build-system pyproject-build-system)
18789 (arguments
18790 (list #:phases #~(modify-phases %standard-phases
18791 (add-after 'unpack 'remove-mypy-dependency
18792 (lambda _
18793 (delete-file "tests/test_mypy.py")
18794 (delete-file "tests/conftest.py"))))))
18795 (native-inputs
18796 (list python-pytest python-setuptools python-wheel))
18797 (home-page "https://github.com/MagicStack/immutables")
18798 (synopsis "High-performance immutable mapping type for Python")
18799 (description
18800 "An immutable mapping type for Python. The underlying datastructure is a
18801Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18802functional languages.")
18803 (license license:asl2.0)))
18804
18805(define-public python-prettytable
18806 (package
18807 (name "python-prettytable")
18808 (version "3.12.0")
18809 (source
18810 (origin
18811 (method url-fetch)
18812 (uri (pypi-uri "prettytable" version))
18813 (sha256
18814 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18815 (build-system pyproject-build-system)
18816 (native-inputs
18817 (list python-hatchling
18818 python-hatch-vcs
18819 python-pytest
18820 python-pytest-lazy-fixtures
18821 python-setuptools-scm))
18822 (propagated-inputs
18823 (list python-wcwidth))
18824 (home-page "https://github.com/jazzband/prettytable")
18825 (synopsis "Display tabular data in an ASCII table format")
18826 (description
18827 "A library designed to represent tabular data in visually appealing ASCII
18828tables. PrettyTable allows for selection of which columns are to be printed,
18829independent alignment of columns (left or right justified or centred) and
18830printing of sub-tables by specifying a row range.")
18831 (license license:bsd-3)))
18832
18833(define-public python-rtf-tokenize
18834 (package
18835 (name "python-rtf-tokenize")
18836 (version "1.0.1")
18837 (source (origin
18838 (method url-fetch)
18839 (uri (pypi-uri "rtf_tokenize" version))
18840 (sha256
18841 (base32
18842 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18843 (build-system pyproject-build-system)
18844 (native-inputs (list python-pytest python-setuptools python-wheel))
18845 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18846 (synopsis "Simple RTF tokenizer")
18847 (description "This package is a simple RTF tokenizer.")
18848 (license license:gpl2+)))
18849
18850(define-public python-sniffio
18851 (package
18852 (name "python-sniffio")
18853 (version "1.3.1")
18854 (source
18855 (origin
18856 (method url-fetch)
18857 (uri (pypi-uri "sniffio" version))
18858 (sha256
18859 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18860 (build-system pyproject-build-system)
18861 (arguments
18862 (list
18863 #:test-flags
18864 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18865 (native-inputs
18866 (list python-pytest python-setuptools))
18867 (home-page "https://github.com/python-trio/sniffio")
18868 (synopsis "Detect which async library a program is running under")
18869 (description
18870 "This package detects which async library a program is running under. It
18871supports multiple async I/O packages, like Trio, and asyncio.")
18872 ;; Either license applies.
18873 (license (list license:expat license:asl2.0))))
18874
18875(define-public python-snuggs
18876 (package
18877 (name "python-snuggs")
18878 (version "1.4.7")
18879 (source (origin
18880 (method url-fetch)
18881 (uri (pypi-uri "snuggs" version))
18882 (sha256
18883 (base32
18884 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18885 (build-system pyproject-build-system)
18886 (propagated-inputs (list python-numpy python-pyparsing))
18887 (native-inputs (list python-hypothesis python-pytest python-setuptools
18888 python-wheel))
18889 (home-page "https://github.com/mapbox/snuggs")
18890 (synopsis "Snuggs are S-expressions for Numpy")
18891 (description "Snuggs are S-expressions for Numpy.")
18892 (license license:expat)))
18893
18894(define-public python-geojson
18895 (package
18896 (name "python-geojson")
18897 (version "3.2.0")
18898 (source
18899 (origin
18900 (method url-fetch)
18901 (uri (pypi-uri "geojson" version))
18902 (sha256
18903 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18904 (build-system pyproject-build-system)
18905 (native-inputs (list python-pytest python-setuptools))
18906 (home-page "https://github.com/jazzband/geojson")
18907 (synopsis "Python bindings and utilities for GeoJSON")
18908 (description
18909 "This package provides Python bindings and utilities for
18910@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18911structures.")
18912 (license license:bsd-3)))
18913
18914;; pyowm only accepts a version less than version 3.
18915(define-public python-geojson-for-pyowm
18916 (package
18917 (inherit python-geojson)
18918 (version "2.5.0")
18919 (source
18920 (origin
18921 (method url-fetch)
18922 (uri (pypi-uri "geojson" version))
18923 (sha256
18924 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18925 (arguments
18926 ;; https://github.com/jazzband/geojson/issues/175
18927 (list #:tests? #f))))
18928
18929(define-public python-gpxpy
18930 (package
18931 (name "python-gpxpy")
18932 (version "1.6.2")
18933 (source
18934 (origin
18935 (method url-fetch)
18936 (uri (pypi-uri "gpxpy" version))
18937 (sha256
18938 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18939 (build-system pyproject-build-system)
18940 (arguments
18941 (list #:test-backend #~'unittest))
18942 (native-inputs
18943 (list python-setuptools))
18944 (home-page "https://github.com/tkrajina/gpxpy")
18945 (synopsis "Python GPX parser")
18946 (description "GPX file parser and GPS track manipulation library.")
18947 (license license:asl2.0)))
18948
18949(define-public python-get-version
18950 (package
18951 (name "python-get-version")
18952 (version "3.5.5")
18953 (source
18954 (origin
18955 (method url-fetch)
18956 (uri (pypi-uri "get_version" version))
18957 (sha256
18958 (base32
18959 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18960 (build-system pyproject-build-system)
18961 (arguments
18962 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18963 ;; lack of git metadata in the checkout.
18964 (list #:tests? #f))
18965 (native-inputs (list python-flit-core))
18966 (propagated-inputs (list python-dunamai))
18967 (home-page "https://github.com/flying-sheep/get_version")
18968 (synopsis "Version helper in the spirit of versioneer")
18969 (description
18970 "This package provides a version helper that lets you automatically use
18971the latest @code{vX.X.X} Git tag as the version in your Python package. It
18972also supports getting the version from Python source distributions or, once
18973your package is installed, via @code{pkg_resources} (part of
18974@code{setuptools}).")
18975 (license license:gpl3+)))
18976
18977(define-public python-filetype
18978 (package
18979 (name "python-filetype")
18980 (version "1.2.0")
18981 (source
18982 (origin
18983 (method url-fetch)
18984 (uri (pypi-uri "filetype" version))
18985 (sha256
18986 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18987 (build-system pyproject-build-system)
18988 (native-inputs (list python-pytest
18989 python-pytest-benchmark
18990 python-setuptools
18991 python-wheel))
18992 (home-page "https://github.com/h2non/filetype.py")
18993 (synopsis "Infer file type and MIME type of any file/buffer")
18994 (description "@code{filetype} is a small and dependency free Python
18995package to infer file type and MIME type checking the magic numbers
18996signature of a file or buffer.")
18997 (license license:expat)))
18998
18999(define-public python-cachelib
19000 (package
19001 (name "python-cachelib")
19002 (version "0.13.0")
19003 (source
19004 (origin
19005 (method url-fetch)
19006 (uri (pypi-uri "cachelib" version))
19007 (sha256
19008 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
19009 (build-system pyproject-build-system)
19010 (arguments
19011 ;; These tests use a remote connection.
19012 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
19013 "--ignore" "tests/test_mongodb_cache.py")))
19014 (native-inputs
19015 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
19016 (home-page "https://github.com/pallets-eco/cachelib")
19017 (synopsis "Collection of cache libraries")
19018 (description "Cachelib is a library extracted from @code{werkzeug} which
19019provides a collection of cache libraries in the same API interface.")
19020 (license license:bsd-3)))
19021
19022(define-public python-pylru
19023 (package
19024 (name "python-pylru")
19025 (version "1.2.0")
19026 (source
19027 (origin
19028 (method git-fetch)
19029 (uri (git-reference
19030 (url "https://github.com/jlhutch/pylru")
19031 (commit (string-append "v" version))))
19032 (file-name (git-file-name name version))
19033 (sha256
19034 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
19035 (build-system pyproject-build-system)
19036 (arguments
19037 (list
19038 #:test-backend #~'custom
19039 #:test-flags #~(list "test.py")))
19040 (native-inputs (list python-pytest python-setuptools))
19041 (home-page "https://github.com/jlhutch/pylru")
19042 (synopsis "Least recently used (LRU) cache implementation")
19043 (description
19044 "Pylru implements a true LRU cache along with several support classes.
19045Pylru provides a cache class with a simple dict interface. It also provides
19046classes to wrap any object that has a dict interface with a cache. Both
19047write-through and write-back semantics are supported. Pylru also provides
19048classes to wrap functions in a similar way, including a function decorator.")
19049 (license license:gpl2+)))
19050
19051(define-public python-legacy-api-wrap
19052 (package
19053 (name "python-legacy-api-wrap")
19054 (version "1.5")
19055 (source
19056 (origin
19057 (method url-fetch)
19058 (uri (pypi-uri "legacy_api_wrap" version))
19059 (sha256
19060 (base32
19061 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
19062 (build-system pyproject-build-system)
19063 (native-inputs
19064 (list python-hatch-docstring-description
19065 python-hatch-vcs
19066 python-hatchling
19067 python-pytest
19068 python-typer))
19069 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
19070 (synopsis "Legacy API wrapper")
19071 (description "This module defines a decorator to wrap legacy APIs. The
19072primary use case is APIs defined before keyword-only parameters existed.")
19073 (license license:gpl3+)))
19074
19075(define-public python-langdetect
19076 (package
19077 (name "python-langdetect")
19078 (version "1.0.9")
19079 (source
19080 (origin
19081 (method url-fetch)
19082 (uri (pypi-uri "langdetect" version))
19083 (sha256
19084 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
19085 (build-system pyproject-build-system)
19086 (native-inputs
19087 (list python-pytest
19088 python-setuptools))
19089 (propagated-inputs
19090 (list python-six))
19091 (home-page "https://github.com/Mimino666/langdetect")
19092 (synopsis "Language detection library")
19093 (description
19094 "This library is a port of Nakatani Shuyo's language-detection library
19095(version from 03/03/2014) to Python.")
19096 (license license:expat)))
19097
19098(define-public python-pyasn1
19099 (package
19100 (name "python-pyasn1")
19101 (version "0.6.3")
19102 (source
19103 (origin
19104 (method git-fetch)
19105 (uri (git-reference
19106 (url "https://github.com/pyasn1/pyasn1")
19107 (commit (string-append "v" version))))
19108 (file-name (git-file-name name version))
19109 (sha256
19110 (base32 "0b22m94j163nikfkl031hgrfasb6wgqp3374b8dbr84jalkl0ykw"))))
19111 (build-system pyproject-build-system)
19112 (arguments
19113 (list #:test-backend #~'unittest
19114 #:test-flags #~(list "discover" "tests")))
19115 (native-inputs
19116 (list python-setuptools))
19117 (home-page "https://github.com/pyasn1/pyasn1")
19118 (synopsis "ASN.1 types and codecs")
19119 (description
19120 "This is an implementation of ASN.1 types and codecs in Python. It is
19121suitable for a wide range of protocols based on the ASN.1 specification.")
19122 (license license:bsd-2)))
19123
19124(define-public python-pyasn1-modules
19125 (package
19126 (name "python-pyasn1-modules")
19127 (version "0.4.2")
19128 (source
19129 (origin
19130 (method url-fetch)
19131 (uri (pypi-uri "pyasn1_modules" version))
19132 (sha256
19133 (base32
19134 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
19135 (build-system pyproject-build-system)
19136 (arguments
19137 (list #:test-backend #~'unittest
19138 #:test-flags #~(list "discover" "tests")))
19139 (native-inputs
19140 (list python-setuptools))
19141 (propagated-inputs
19142 (list python-pyasn1))
19143 (home-page "https://github.com/pyasn1/pyasn1-modules")
19144 (synopsis "ASN.1 codec implementations")
19145 (description
19146 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
19147implementations of ASN.1-based codecs and protocols.")
19148 (license license:bsd-3)))
19149
19150(define-public python-asn1tools
19151 (package
19152 (name "python-asn1tools")
19153 (version "0.167.0")
19154 (source
19155 (origin
19156 (method url-fetch)
19157 (uri (pypi-uri "asn1tools" version))
19158 (sha256
19159 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
19160 (build-system pyproject-build-system)
19161 (arguments
19162 (list
19163 #:test-flags
19164 #~(list "-k" (string-join
19165 ;; Tests fail with error: IndexError: string index out of
19166 ;; range. It may be some incompatibility with pyparsing,
19167 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
19168 (list "not test_c_source"
19169 "test_command_line_generate_c_source_oer"
19170 "test_command_line_generate_c_source_uper"
19171 "test_command_line_generate_rust_source_uper"
19172 "test_missing_parameterized_value"
19173 "test_c_source"
19174 "test_parse_parameterization")
19175 " and not "))))
19176 (native-inputs
19177 (list python-pytest
19178 python-setuptools
19179 python-wheel))
19180 (propagated-inputs
19181 (list python-bitstruct
19182 python-diskcache
19183 python-prompt-toolkit
19184 python-pyparsing))
19185 (home-page "https://github.com/eerimoq/asn1tools")
19186 (synopsis "ASN.1 parsing, encoding and decoding")
19187 (description "This package provides ASN.1 parsing, encoding and decoding
19188for Python, including constraints checking. It supports several
19189codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
19190for OER and UPER.")
19191 (license license:expat)))
19192
19193(define-public python-idna
19194 (package
19195 (name "python-idna")
19196 (version "3.18")
19197 (source
19198 (origin
19199 (method git-fetch)
19200 (uri (git-reference
19201 (url "https://github.com/kjd/idna")
19202 (commit (string-append "v" version))))
19203 (file-name (git-file-name name version))
19204 (sha256
19205 (base32 "0phrdwf6gqjpbs5kv3y6wbkvvpmq6kmjby674s8b9f6dsgzz4wpn"))))
19206 (build-system pyproject-build-system)
19207 (native-inputs
19208 (list python-flit-core python-pytest))
19209 (home-page "https://github.com/kjd/idna")
19210 (synopsis "Internationalized domain names in applications")
19211 (description
19212 "This is a library to support the Internationalised Domain Names in
19213Applications (IDNA) protocol as specified in RFC 5891. This version of the
19214protocol is often referred to as “IDNA2008” and can produce different results
19215from the earlier standard from 2003. The library is also intended to act as a
19216suitable drop-in replacement for the “encodings.idna” module that comes with
19217the Python standard library but currently only supports the older 2003
19218specification.")
19219 (license license:bsd-4)))
19220
19221(define-public python-libsass
19222 (package
19223 (name "python-libsass")
19224 (version "0.23.0")
19225 (source
19226 (origin
19227 ;; PyPI tarball is missing some test files.
19228 (method git-fetch)
19229 (uri (git-reference
19230 (url "https://github.com/sass/libsass-python")
19231 (commit version)))
19232 (file-name (git-file-name name version))
19233 (sha256
19234 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
19235 (build-system pyproject-build-system)
19236 (arguments
19237 '(#:phases
19238 (modify-phases %standard-phases
19239 ;; Use Guix package of libsass instead of compiling from a checkout.
19240 (add-before 'build 'set-libsass
19241 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
19242 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
19243 ;; https://github.com/sass/libsass-python/issues/440. It passed with
19244 ;; [email protected] which requires rebuild the world (1200+ packages),
19245 ;; remove when v3.6.5 is available.
19246 (add-before 'check 'silent-failing-tests
19247 (lambda _
19248 (substitute* "sasstests.py"
19249 (("def test_build_one")
19250 "def __off_test_build_one")
19251 (("def test_stack_trace_formatting")
19252 "def __off_test_stack_trace_formatting"))))
19253 (replace 'check
19254 (lambda* (#:key tests? #:allow-other-keys)
19255 (when tests?
19256 (invoke "pytest" "sasstests.py"))))
19257 (add-after 'install 'delete-test
19258 (lambda* (#:key inputs outputs #:allow-other-keys)
19259 ;; Delete sasstests.py because it attempts to open a file
19260 ;; that is not installed when loaded, which breaks the sanity
19261 ;; check.
19262 (delete-file (string-append
19263 (assoc-ref outputs "out")
19264 "/lib/python"
19265 (python-version
19266 (dirname (dirname
19267 (search-input-file inputs "bin/python"))))
19268 "/site-packages/sasstests.py")))))))
19269 (native-inputs
19270 (list python-pytest python-setuptools python-werkzeug python-wheel))
19271 (inputs
19272 (list libsass))
19273 (home-page "https://sass.github.io/libsass-python/")
19274 (synopsis "Straightforward binding of libsass for Python")
19275 (description
19276 "This package provides a simple Python extension module @code{sass} which
19277is binding LibSass.")
19278 (license license:expat)))
19279
19280;; It may be removed after 2026-01-24.
19281(define-deprecated/public-alias python-path-bootstrap python-path)
19282
19283(define-public python-pip-run
19284 (package
19285 (name "python-pip-run")
19286 (version "8.8.0")
19287 (source
19288 (origin
19289 (method git-fetch)
19290 (uri (git-reference
19291 (url "https://github.com/jaraco/pip-run")
19292 (commit (string-append "v" version))))
19293 (file-name (git-file-name name version))
19294 (sha256
19295 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
19296 (build-system pyproject-build-system)
19297 (arguments
19298 (list
19299 #:tests? (not (%current-target-system))
19300 #:test-flags
19301 #~(list "-k" (string-append
19302 ;; Do not test the myproject.toml build as it tries
19303 ;; to pull dependencies from the internet.
19304 "not project "
19305 ;; These tests attempt to install dependencies from
19306 ;; the network and fail.
19307 "and not test_pkg_imported "
19308 "and not test_pkg_loaded_from_alternate_index "
19309 "and not test_pkg_loaded_from_url "))))
19310 (native-inputs
19311 (list python-nbformat
19312 python-pygments
19313 python-pytest
19314 python-setuptools
19315 python-setuptools-scm))
19316 (propagated-inputs
19317 (list python-autocommand
19318 python-packaging
19319 python-path
19320 python-pip))
19321 (home-page "https://github.com/jaraco/pip-run")
19322 (synopsis "Dynamic dependency loader for Python")
19323 (description "The @command{pip-run} command provides on-demand temporary
19324package installation for a single interpreter run. It replaces this series of
19325commands:
19326@example
19327$ virtualenv --python pythonX.X --system-site-packages /tmp/env
19328$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
19329$ /tmp/env/bin/python ...
19330$ rm -rf /tmp/env
19331@end example")
19332 (license license:expat)))
19333
19334;; It may be removed after 2026-01-24.
19335(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
19336
19337(define-public python-libarchive-c
19338 (package
19339 (name "python-libarchive-c")
19340 (version "5.2")
19341 (source (origin
19342 (method url-fetch)
19343 (uri (pypi-uri "libarchive_c" version))
19344 (sha256
19345 (base32
19346 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
19347 (build-system pyproject-build-system)
19348 (arguments
19349 (list
19350 #:phases
19351 #~(modify-phases %standard-phases
19352 (add-before 'build 'reference-libarchive
19353 (lambda* (#:key inputs #:allow-other-keys)
19354 ;; Retain the absolute file name of libarchive.so.
19355 (substitute* "libarchive/ffi.py"
19356 (("find_library\\('archive'\\)")
19357 (string-append
19358 "'"
19359 (search-input-file inputs "/lib/libarchive.so")
19360 "'"))))))))
19361 (native-inputs
19362 (list python-setuptools python-wheel python-pytest))
19363 (inputs
19364 (list libarchive))
19365 (home-page "https://github.com/Changaco/python-libarchive-c")
19366 (synopsis "Python interface to libarchive")
19367 (description
19368 "This package provides Python bindings to libarchive, a C library to
19369access possibly compressed archives in many different formats. It uses
19370Python's @code{ctypes} foreign function interface (FFI).")
19371 (license license:lgpl2.0+)))
19372
19373(define-public python-file
19374 (package/inherit file
19375 (name "python-file")
19376 (build-system pyproject-build-system)
19377 (arguments
19378 (list
19379 #:tests? #f ;no tests
19380 #:phases
19381 #~(modify-phases %standard-phases
19382 (add-before 'build 'change-directory
19383 (lambda _
19384 (chdir "python")))
19385 (add-before 'build 'set-library-file-name
19386 (lambda* (#:key inputs #:allow-other-keys)
19387 (substitute* "magic.py"
19388 (("find_library\\('magic'\\)")
19389 (format #f "~s" (search-input-file inputs
19390 "lib/libmagic.so")))))))))
19391 (inputs (list file))
19392 (native-inputs (cons* python-setuptools
19393 (if (%current-target-system)
19394 (list this-package)
19395 '())))
19396 (synopsis "Python bindings to the libmagic file type guesser")
19397 (description "This package provides Python bindings to the libmagic file
19398type guesser.
19399
19400Note that this module and the @code{python-magic} module both provide a
19401@file{magic.py} file; these two modules, which are different and were
19402developed separately, both serve the same purpose: provide Python bindings for
19403libmagic.")))
19404
19405(define-public python-pydemumble
19406 (package
19407 (name "python-pydemumble")
19408 (version "0.0.1")
19409 (source
19410 (origin
19411 (method git-fetch)
19412 (uri (git-reference
19413 (url "https://github.com/angr/pydemumble")
19414 (commit (string-append "v" version))))
19415 (file-name (git-file-name name version))
19416 (sha256
19417 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19418 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19419 (build-system pyproject-build-system)
19420 (arguments
19421 (list
19422 #:test-flags
19423 #~(list "discover" "-s" "tests")
19424 #:phases
19425 #~(modify-phases %standard-phases
19426 (add-after 'unpack 'set-demumble-source
19427 (lambda* _
19428 ;; demumble is only a binary and not intended to be used as
19429 ;; a library. Therefore, python-pydemumble creates it's own
19430 ;; bindings for demumble, which are autogenerated from C code.
19431 (substitute* "CMakeLists.txt"
19432 (("src/demumble")
19433 #+(package-source demumble))))))))
19434 (native-inputs (list python-nanobind python-scikit-build-core))
19435 (home-page "https://github.com/angr/pydemumble")
19436 (synopsis "Python library for demangling symbol names")
19437 (description
19438 "This package provides a Python wrapper library for @code{demumble}, which
19439is a tool to demangle C++, Rust, and Swift symbol names.")
19440 (license license:bsd-2)))
19441
19442(define-public python-pydevd
19443 (package
19444 (name "python-pydevd")
19445 (version "3.2.3")
19446 (source
19447 (origin
19448 (method git-fetch)
19449 (uri (git-reference
19450 (url "https://github.com/fabioz/PyDev.Debugger")
19451 (commit (string-append
19452 "pydev_debugger_"
19453 (string-join (string-split version #\.) "_")))))
19454 (modules '((guix build utils)))
19455 (snippet '(begin
19456 ;; Delete pre-built binaries.
19457 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19458 ;; This source is generated via Cython.
19459 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19460 (file-name (git-file-name name version))
19461 (sha256
19462 (base32
19463 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19464 (build-system pyproject-build-system)
19465 (arguments
19466 (list
19467 #:test-flags
19468 #~(list "-n" (number->string (parallel-job-count))
19469 "-m" "not flaky"
19470 "-k"
19471 (string-join
19472 (list
19473 ;; The two "break_01" tests have been failing on
19474 ;; Python 3.10:
19475 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19476 "not test_set_pydevd_break_01 "
19477 ;; the GUI event loop requires an X server.
19478 "test_gui_event_loop_custom"
19479 ;; This test validates that 'pydevd' is not in the
19480 ;; exception message, but it is due to being part
19481 ;; of the build file name present in the message.
19482 "test_evaluate_exception_trace"
19483 ;; This test fail with TimeoutError, no message on stderr.
19484 "test_soft_terminate"
19485 "test_debugger_case_deadlock_interrupt_thread"
19486 ;; subprocess.CalledProcessError
19487 ;; Python 3.11/3.12 specific issue:
19488 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19489 "test_find_main_thread_id")
19490 " and not "))
19491 #:phases
19492 #~(modify-phases %standard-phases
19493 (add-after 'unpack 'fix-tests
19494 (lambda _
19495 (substitute* "tests_python/test_convert_utilities.py"
19496 ;; Add missing trailing '/'.
19497 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19498 (string-append all "/")))))
19499 (add-after 'unpack 'patch-command-paths
19500 (lambda* (#:key inputs #:allow-other-keys)
19501 (substitute* "_pydevd_bundle/pydevd_api.py"
19502 (("'kill'")
19503 (format #f "~s" (search-input-file inputs "bin/kill")))
19504 (("'pgrep'")
19505 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19506 (add-after 'unpack 'generate-sources
19507 (lambda _
19508 (setenv "PYTHONPATH" (getcwd))
19509 (invoke "python" "build_tools/build.py")))
19510 (add-after 'unpack 'adjust-attach-binary-name
19511 (lambda _
19512 (substitute*
19513 '("pydevd_tracing.py"
19514 "pydevd_attach_to_process/add_code_to_python_process.py")
19515 (("def get_(target|python_helper_lib)_filename.*" all)
19516 (format #f "~a return ~s~%" all
19517 (string-append #$output "/lib/attach.so"))))))
19518 (add-after 'unpack 'patch-gdb
19519 (lambda* (#:key inputs #:allow-other-keys)
19520 (substitute*
19521 "pydevd_attach_to_process/add_code_to_python_process.py"
19522 (("'gdb',")
19523 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19524 (add-after 'build 'build-attach-linux-binary
19525 (lambda _
19526 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19527 "-fPIC" "-nostartfiles"
19528 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19529 (add-before 'check 'pre-check
19530 (lambda* (#:key tests? #:allow-other-keys)
19531 (when tests?
19532 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19533 (add-after 'install 'install-attach-binary
19534 (lambda _
19535 (install-file "attach.so"
19536 (string-append #$output "/lib"))))
19537 ;; Some modules aren't designed to be loadable by themselves, such
19538 ;; as 'pydev_app_engine_debug_startup' and fail.
19539 (delete 'sanity-check))))
19540 (native-inputs
19541 (list python-cython
19542 python-numpy
19543 python-psutil
19544 python-pytest
19545 python-pytest-xdist
19546 python-setuptools
19547 python-trio
19548 python-untangle
19549 python-wheel))
19550 (inputs (list coreutils gdb/pinned procps))
19551 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19552 (synopsis "Python debugger")
19553 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19554and other @acronym{IDEs, Integrated Development Environments}.")
19555 (license license:epl1.0)))
19556
19557(define-public python-debugpy
19558 (package
19559 (name "python-debugpy")
19560 (version "1.8.17")
19561 (source
19562 (origin
19563 (method git-fetch)
19564 (uri (git-reference ;no tests in PyPI archive
19565 (url "https://github.com/microsoft/debugpy")
19566 (commit (string-append "v" version))))
19567 (file-name (git-file-name name version))
19568 (modules '((guix build utils)))
19569 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19570 ;; attach binary.
19571 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19572 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19573 (sha256
19574 (base32
19575 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19576 (build-system pyproject-build-system)
19577 (arguments
19578 (list
19579 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19580 #:phases
19581 #~(modify-phases %standard-phases
19582 (add-after 'unpack 'patch-sh-in-tests
19583 (lambda _
19584 (substitute* "tests/debugpy/test_run.py"
19585 (("#!/bin/sh")
19586 (string-append "#!" (which "sh"))))))
19587 (add-before 'build 'configure
19588 (lambda _
19589 ;; This adjusts the behavior of debugpy to load pydevd from
19590 ;; Python site packages.
19591 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19592 (native-inputs
19593 (list python-setuptools
19594 python-versioneer))
19595 (propagated-inputs
19596 (list python-pydevd))
19597 (home-page "https://aka.ms/debugpy")
19598 (synopsis "Debug Adapter Protocol Python implementation")
19599 (description "An implementation of the Debug Adapter Protocol for
19600Python.")
19601 (license license:expat)))
19602
19603(define-public python-debian
19604 (package
19605 (name "python-debian")
19606 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19607 (version "0.1.49")
19608 (source
19609 (origin
19610 ;; Use git-fetch, as pypi doesn't include test suite.
19611 (method git-fetch)
19612 (uri (git-reference
19613 (url home-page)
19614 (commit version)))
19615 (file-name (git-file-name name version))
19616 (sha256
19617 (base32
19618 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19619 (modules '((guix build utils)))
19620 (snippet
19621 #~(begin
19622 ;; python-apt, apt and dpkg are not yet available in guix,
19623 ;; and these tests heavily depend on them.
19624 (for-each delete-file
19625 '("lib/debian/tests/test_deb822.py"
19626 "lib/debian/tests/test_debfile.py"))
19627
19628 ;; for reproducible builds, otherwise python-debian
19629 ;; generates a _version.py including the date
19630 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19631 (substitute* "lib/debian/_version.py"
19632 (("__CHANGELOG_VERSION__") #$version))))))
19633 (build-system pyproject-build-system)
19634 (native-inputs
19635 (list python-pytest python-setuptools))
19636 (propagated-inputs
19637 (list python-six python-chardet))
19638 (synopsis "Debian package related modules")
19639 (description
19640 "This package provides Python modules that abstract many formats of
19641Debian-related files, such as:
19642@itemize
19643@item Debtags information;
19644@item @file{debian/changelog} files;
19645@item packages files, pdiffs;
19646@item control files of single or multiple RFC822-style paragraphs---e.g.
19647 @file{debian/control}, @file{.changes}, @file{.dsc};
19648@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19649 contained files and meta-information.
19650@end itemize")
19651 ;; Modules are either GPLv2+ or GPLv3+.
19652 (license license:gpl3+)))
19653
19654(define-public python-json-spec
19655 (package
19656 (name "python-json-spec")
19657 (version "0.12.0")
19658 (source
19659 (origin
19660 (method git-fetch) ;no tests in PyPI archive
19661 (uri (git-reference
19662 (url "https://github.com/johnnoone/json-spec")
19663 (commit version)))
19664 (file-name (git-file-name name version))
19665 (sha256
19666 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19667 (build-system pyproject-build-system)
19668 (native-inputs
19669 (list python-pytest
19670 python-poetry-core))
19671 (propagated-inputs
19672 (list python-termcolor)) ;for the CLI
19673 (home-page "https://json-spec.readthedocs.io/")
19674 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19675 (description
19676 "This Python library implements several JSON specs, like JSON Schema,
19677JSON Reference and JSON Pointer.")
19678 (license license:bsd-3)))
19679
19680(define-public python-fastbencode
19681 (package
19682 (name "python-fastbencode")
19683 (version "0.3.9")
19684 (source
19685 (origin
19686 (method git-fetch)
19687 (uri (git-reference
19688 (url "https://github.com/breezy-team/fastbencode")
19689 (commit (string-append "v" version))))
19690 (file-name (git-file-name name version))
19691 (sha256
19692 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19693 (build-system pyproject-build-system)
19694 (arguments
19695 (list
19696 #:test-backend #~'unittest
19697 #:test-flags #~(list "tests.test_suite")
19698 #:imported-modules (append %cargo-build-system-modules
19699 %pyproject-build-system-modules)
19700 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19701 (guix build pyproject-build-system)
19702 (guix build utils))
19703 #:phases
19704 #~(modify-phases %standard-phases
19705 (add-after 'unpack 'prepare-cargo-build-system
19706 (lambda args
19707 (for-each
19708 (lambda (phase)
19709 (format #t "Running cargo phase: ~a~%" phase)
19710 (apply (assoc-ref cargo:%standard-phases phase)
19711 #:cargo-target #$(cargo-triplet)
19712 args))
19713 '(unpack-rust-crates
19714 configure
19715 check-for-pregenerated-files
19716 patch-cargo-checksums)))))))
19717 (inputs (cargo-inputs 'fastbencode))
19718 (native-inputs
19719 (append
19720 (list python-setuptools-rust
19721 rust
19722 `(,rust "cargo"))
19723 (or (and=> (%current-target-system)
19724 (compose list make-rust-sysroot))
19725 '())))
19726 (home-page "https://github.com/breezy-team/fastbencode")
19727 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19728 (description
19729 "The fastbencode Python package implements the bencode serialization
19730format for storing and transmitting loosely structured data, originally used
19731by BitTorrent.
19732
19733The format can encode four different types of values: byte strings, integers,
19734lists, and dictionaries (associative arrays). It's simple and unaffected by
19735endianness,
19736
19737This package includes both a pure-Python version and an optional C extension
19738based on Cython. Both provide the same functionality, but the C version has
19739significantly better performance.")
19740 (license (list license:expat ; _bencode_py.py
19741 license:gpl2+)))) ; __init__.py
19742
19743(define-public python-fastjsonschema
19744 (package
19745 (name "python-fastjsonschema")
19746 (version "2.21.1")
19747 (source
19748 (origin
19749 (method git-fetch) ; no tests in PyPI release
19750 (uri (git-reference
19751 (url "https://github.com/horejsek/python-fastjsonschema")
19752 (commit (string-append "v" version))))
19753 (file-name (git-file-name name version))
19754 (sha256
19755 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19756 (build-system pyproject-build-system)
19757 (arguments
19758 (list
19759 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19760 (native-inputs
19761 (list python-json-spec
19762 python-jsonschema
19763 python-pytest
19764 python-pytest-benchmark
19765 python-setuptools))
19766 (home-page "https://github.com/horejsek/python-fastjsonschema")
19767 (synopsis "Fast Python implementation of JSON schema")
19768 (description
19769 "This library implements validation of JSON documents by JSON schema for
19770drafts 04, 06 and 07.")
19771 (license license:bsd-3)))
19772
19773(define-public python-nbformat
19774 (package
19775 (name "python-nbformat")
19776 (version "5.10.4")
19777 ;; The PyPi release tarball lacks some test cases and test data.
19778 (source (origin
19779 (method git-fetch)
19780 (uri (git-reference
19781 (url "https://github.com/jupyter/nbformat")
19782 (commit (string-append "v" version))))
19783 (sha256
19784 (base32
19785 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19786 (file-name (git-file-name name version))))
19787 (build-system pyproject-build-system)
19788 (arguments
19789 (list
19790 #:phases
19791 #~(modify-phases %standard-phases
19792 ;; We don't want to use hatch-nodejs just to get a version string.
19793 (add-after 'unpack 'patch-pyproject
19794 (lambda _
19795 (substitute* "pyproject.toml"
19796 ((", \"hatch-nodejs-version\"") "")
19797 (("dynamic = \\[\"version\"\\]")
19798 (string-append "version = \"" #$version "\""))))))))
19799 (propagated-inputs
19800 (list python-fastjsonschema python-jsonschema python-jupyter-core
19801 python-traitlets))
19802 (native-inputs
19803 (list python-hatchling
19804 python-pep440
19805 python-pytest
19806 python-testpath))
19807 (home-page "https://jupyter.org")
19808 (synopsis "Jupyter Notebook format")
19809 (description "This package provides the reference implementation of the
19810Jupyter Notebook format and Python APIs for working with notebooks.")
19811 (license license:bsd-3)))
19812
19813(define-public python-nb-clean
19814 (package
19815 (name "python-nb-clean")
19816 (version "4.0.1")
19817 (source
19818 (origin
19819 (method git-fetch) ; no tests in PyPI
19820 (uri (git-reference
19821 (url "https://github.com/srstevenson/nb-clean")
19822 (commit version)))
19823 (file-name (git-file-name name version))
19824 (sha256
19825 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19826 (build-system pyproject-build-system)
19827 (native-inputs (list python-poetry-core
19828 python-pytest
19829 python-pytest-mock))
19830 (propagated-inputs (list python-nbformat))
19831 (home-page "https://github.com/srstevenson/nb-clean")
19832 (synopsis "Clean Jupyter notebooks for versioning")
19833 (description "This package cleans Jupyter notebooks of cell execution
19834counts, metadata, outputs, and empty cells, preparing them for committing to
19835version control. It provides a Git filter to automatically clean notebooks
19836before they're staged, and can also be used with other version control
19837systems, as a command line tool, and as a Python library.")
19838 (license license:isc)))
19839
19840(define-public python-entrypoints
19841 (package
19842 (name "python-entrypoints")
19843 (version "0.4")
19844 (source
19845 (origin
19846 (method url-fetch)
19847 (uri (pypi-uri "entrypoints" version))
19848 (sha256
19849 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19850 (build-system pyproject-build-system)
19851 (native-inputs
19852 (list python-flit-core
19853 python-pytest))
19854 (home-page "https://github.com/takluyver/entrypoints")
19855 (synopsis "Discover and load entry points from installed Python packages")
19856 (description "Entry points are a way for Python packages to advertise
19857objects with some common interface. The most common examples are
19858@code{console_scripts} entry points, which define shell commands by
19859identifying a Python function to run. The @code{entrypoints} module contains
19860functions to find and load entry points.")
19861 (license license:expat)))
19862
19863(define-public python-epc
19864 (package
19865 (name "python-epc")
19866 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19867 (revision . "0")))
19868 (version (git-version "0.0.5"
19869 (assoc-ref properties 'revision)
19870 (assoc-ref properties 'commit)))
19871 (source
19872 (origin
19873 (method git-fetch)
19874 (uri (git-reference
19875 (url "https://github.com/tkf/python-epc")
19876 (commit (assoc-ref properties 'commit))))
19877 (file-name (git-file-name name version))
19878 (sha256
19879 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19880 (build-system pyproject-build-system)
19881 (arguments (list #:test-backend #~'nose))
19882 (propagated-inputs (list python-sexpdata))
19883 (native-inputs (list python-pynose python-setuptools))
19884 (home-page "https://github.com/tkf/python-epc")
19885 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19886 (description
19887 "Python-EPC can call elisp functions from Python and Python functions
19888from elisp.")
19889 (license license:gpl3)))
19890
19891(define-public python-forex-python
19892 (package
19893 (name "python-forex-python")
19894 (version "1.5")
19895 (source
19896 (origin
19897 (method git-fetch)
19898 (uri (git-reference
19899 (url "https://github.com/MicroPyramid/forex-python")
19900 (commit version)))
19901 (file-name (git-file-name name version))
19902 (sha256
19903 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19904 (build-system pyproject-build-system)
19905 (arguments (list #:tests? #f)) ; Tests require online data.
19906 (native-inputs (list python-setuptools))
19907 (propagated-inputs (list python-requests python-simplejson))
19908 (home-page "https://github.com/MicroPyramid/forex-python")
19909 (synopsis "Foreign exchange rates and currency conversion")
19910 (description
19911 "@code{python-forex-python} can be used to manipulate foreign
19912exchange rates and to operate currency conversions.
19913
19914Features:
19915@itemize
19916@item List all currency rates.
19917@item BitCoin price for all currencies.
19918@item Converting amount to BitCoins.
19919@item Get historical rates for any day since 1999.
19920@item Conversion rate for one currency(ex; USD to INR).
19921@item Convert amount from one currency to other.('USD 10$' to INR).
19922@item Currency symbols.
19923@item Currency names.
19924@end itemize")
19925 (license license:expat)))
19926
19927(define-public python-simpleeval
19928 (package
19929 (name "python-simpleeval")
19930 (version "0.9.12")
19931 (source
19932 (origin
19933 (method git-fetch)
19934 (uri (git-reference
19935 (url "https://github.com/danthedeckie/simpleeval")
19936 (commit version)))
19937 (file-name (git-file-name name version))
19938 (sha256
19939 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19940 (build-system pyproject-build-system)
19941 (native-inputs (list python-pytest python-setuptools))
19942 (home-page "https://github.com/danthedeckie/simpleeval")
19943 (synopsis "Simple, safe single expression evaluator library")
19944 (description
19945 "This package provides a quick single file library for easily adding
19946evaluatable expressions into python projects. Say you want to allow a user
19947to set an alarm volume, which could depend on the time of day, alarm level,
19948how many previous alarms had gone off, and if there is music playing at the
19949time.")
19950 (license license:expat)))
19951
19952(define-public python-haas
19953 ;; A recent revision is required to avoid obsoleted dependencies.
19954 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19955 (revision "0"))
19956 (package
19957 (name "python-haas")
19958 (version (git-version "0.9.0" revision commit))
19959 (source
19960 (origin
19961 (method git-fetch)
19962 (uri (git-reference
19963 (url "https://github.com/scalative/haas")
19964 (commit commit)))
19965 (file-name (git-file-name name version))
19966 (sha256
19967 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19968 (build-system pyproject-build-system)
19969 (propagated-inputs
19970 (list python-stevedore))
19971 (native-inputs
19972 (list python-coverage
19973 python-pytest
19974 python-setuptools
19975 python-testfixtures))
19976 (home-page "https://github.com/scalative/haas")
19977 (synopsis "Extensible Python test runner")
19978 (description "Haas is a python test runner that is backward-compatible
19979with Python's built-in unittest test-cases, but supports more advanced
19980features, such as project-specific plugins.")
19981 (license license:bsd-3))))
19982
19983(define-public python-okonomiyaki
19984 (package
19985 (name "python-okonomiyaki")
19986 (version "3.0.0")
19987 (source
19988 (origin
19989 (method git-fetch)
19990 (uri (git-reference
19991 (url "https://github.com/enthought/okonomiyaki/")
19992 (commit version)))
19993 (file-name (git-file-name name version))
19994 (sha256
19995 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19996 (build-system pyproject-build-system)
19997 (arguments
19998 (list
19999 #:phases
20000 #~(modify-phases %standard-phases
20001 ;; Unknown platform.
20002 (add-before 'check 'delete-fail-tests
20003 (lambda _
20004 (delete-file-recursively
20005 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
20006 (native-inputs
20007 (list python-distro
20008 python-haas
20009 python-jsonschema
20010 python-packaging
20011 python-parameterized
20012 python-pytest
20013 python-setuptools
20014 python-testfixtures
20015 python-zipfile2))
20016 (home-page "https://github.com/enthought/okonomiyaki/")
20017 (synopsis "Python library to deal with Enthought-specific metadata")
20018 (description
20019 "Okonomiyaki is a self-contained library aiming at consolidating
20020low-level code used in Enthought-specific egg and runtime archives.")
20021 (license license:bsd-3)))
20022
20023(define-public python-nbconvert
20024 (package
20025 (name "python-nbconvert")
20026 (version "7.17.0")
20027 (source
20028 (origin
20029 (method url-fetch)
20030 (uri (pypi-uri "nbconvert" version))
20031 (sha256
20032 (base32
20033 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
20034 (build-system pyproject-build-system)
20035 (arguments
20036 (list
20037 #:test-flags
20038 '(list "-k"
20039 (string-append
20040 ;; These tests require pyppeteer, not yet
20041 ;; available in Guix.
20042 "not test_webpdf_with_chromium"
20043 " and not test_webpdf.py"
20044 ;; These tests require ipywidgets, which would
20045 ;; introduce a dependency cycle.
20046 " and not test_execute_widgets_from_nbconvert"
20047 " and not test_execute_multiple_notebooks"
20048
20049 ;; This test calls nbconvert itself via "sys.executable -m
20050 ;; nbconvert". It's probably harmless.
20051 " and not test_default_config"))
20052 #:phases
20053 #~(modify-phases %standard-phases
20054 (add-after 'unpack 'fix-paths
20055 (lambda* (#:key inputs #:allow-other-keys)
20056 ;; Use pandoc binary from input.
20057 (substitute* "nbconvert/utils/pandoc.py"
20058 (("'pandoc'")
20059 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
20060 ;; Same for LaTeX.
20061 (substitute* "nbconvert/exporters/pdf.py"
20062 (("\"xelatex\"")
20063 (format #f "~s" (search-input-file inputs "bin/xelatex")))
20064 (("\"bibtex\"")
20065 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
20066 ;; Likewise for Inkscape.
20067 (substitute* "nbconvert/preprocessors/svg2pdf.py"
20068 (("inkscape_path = which\\(\"inkscape\")")
20069 (format #f "inkscape_path = ~s"
20070 (search-input-file inputs "bin/inkscape"))))))
20071 (add-after 'unpack 'ignore-deprecation-warnings
20072 (lambda _
20073 (substitute* "pyproject.toml"
20074 (("\"ignore:nbconvert.utils" m)
20075 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
20076 m)))))
20077 (add-before 'check 'pre-check
20078 (lambda _
20079 ;; Tests depend on templates installed to output.
20080 (setenv "JUPYTER_PATH"
20081 (string-append #$output "/share/jupyter:"
20082 (getenv "JUPYTER_PATH")))
20083 ;; jupyter-core demands this
20084 (setenv "JUPYTER_PLATFORM_DIRS" "1")
20085 ;; Tests need writable HOME and TEXMFVAR.
20086 (setenv "HOME" "/tmp")
20087 (setenv "TEXMFVAR" "/tmp"))))))
20088 (inputs
20089 (list inkscape/pinned pandoc))
20090 (native-inputs
20091 (list python-flaky
20092 python-hatchling
20093 python-ipykernel
20094 ;; Adding ipywidgets would create a cycle.
20095 ;;python-ipywidgets
20096 python-pytest
20097 (texlive-local-tree
20098 (list texlive-adjustbox
20099 texlive-booktabs
20100 texlive-caption
20101 texlive-enumitem
20102 texlive-eurosym
20103 texlive-fancyvrb
20104 texlive-float
20105 texlive-fontspec
20106 texlive-grffile
20107 texlive-jknapltx
20108 texlive-parskip
20109 texlive-pdfcol
20110 texlive-rsfs
20111 texlive-soul
20112 texlive-tcolorbox
20113 texlive-titling
20114 texlive-ulem
20115 texlive-unicode-math
20116 texlive-upquote
20117 texlive-xetex))))
20118 (propagated-inputs
20119 (list python-beautifulsoup4
20120 python-bleach
20121 python-defusedxml
20122 python-jinja2
20123 python-jupyter-core
20124 python-jupyterlab-pygments
20125 python-markupsafe
20126 python-mistune
20127 python-nbclient
20128 python-nbformat
20129 python-packaging
20130 python-pandocfilters
20131 python-pygments
20132 python-tinycss2
20133 python-traitlets
20134 ;; Required, even if [serve] is not used.
20135 python-tornado
20136 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
20137 texlive-adjustbox
20138 texlive-amsmath
20139 texlive-booktabs
20140 texlive-caption
20141 texlive-collection-basic
20142 texlive-enumitem
20143 texlive-environ
20144 texlive-etoolbox
20145 texlive-eurosym
20146 texlive-etoolbox
20147 texlive-fancyvrb
20148 texlive-float
20149 texlive-fontspec
20150 texlive-geometry
20151 texlive-grffile
20152 texlive-hyperref
20153 texlive-infwarerr
20154 texlive-jknapltx
20155 texlive-kvoptions
20156 texlive-lm
20157 texlive-lm-math
20158 texlive-mathpazo
20159 texlive-parskip
20160 texlive-pdfcol
20161 texlive-pgf
20162 texlive-rsfs
20163 texlive-soul
20164 texlive-stringenc
20165 texlive-tcolorbox
20166 texlive-titling
20167 texlive-tools
20168 texlive-trimspaces
20169 texlive-ucs
20170 texlive-ulem
20171 texlive-unicode-math
20172 texlive-upquote
20173 texlive-xcolor
20174 texlive-xetex
20175 texlive-zapfding))
20176 (home-page "https://jupyter.org")
20177 (synopsis "Converting Jupyter Notebooks")
20178 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
20179notebooks to various other formats via Jinja templates. It allows you to
20180convert an @code{.ipynb} notebook file into various static formats including:
20181
20182@enumerate
20183@item HTML
20184@item LaTeX
20185@item PDF
20186@item Reveal JS
20187@item Markdown (md)
20188@item ReStructured Text (rst)
20189@item executable script
20190@end enumerate\n")
20191 (license license:bsd-3)))
20192
20193(define-public python-ipywidgets
20194 (package
20195 (name "python-ipywidgets")
20196 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
20197 (version "8.1.4")
20198 (source
20199 (origin
20200 (method url-fetch)
20201 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
20202 (uri (pypi-uri "ipywidgets" version))
20203 (sha256
20204 (base32
20205 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
20206 (build-system pyproject-build-system)
20207 (native-inputs
20208 (list python-ipykernel
20209 python-jsonschema
20210 python-pytest
20211 python-pytz
20212 python-setuptools))
20213 (propagated-inputs
20214 (list python-comm
20215 python-ipython
20216 python-jupyterlab-widgets
20217 python-traitlets
20218 python-widgetsnbextension))
20219 (home-page "https://ipython.org")
20220 (synopsis "IPython HTML widgets for Jupyter")
20221 (description "Ipywidgets are interactive HTML widgets for Jupyter
20222notebooks and the IPython kernel. Notebooks come alive when interactive
20223widgets are used. Users gain control of their data and can visualize changes
20224in the data.")
20225 (license license:bsd-3)))
20226
20227(define-public python-jsbeautifier
20228 (package
20229 (name "python-jsbeautifier")
20230 (version "1.15.3")
20231 (home-page "https://github.com/beautify-web/js-beautify")
20232 (source
20233 (origin
20234 (method git-fetch)
20235 (uri (git-reference
20236 (url home-page)
20237 (commit (string-append "v" version))))
20238 (file-name (git-file-name name version))
20239 (sha256
20240 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
20241 (build-system pyproject-build-system)
20242 (arguments
20243 (list
20244 #:phases
20245 #~(modify-phases %standard-phases
20246 (add-after 'unpack 'chdir
20247 (lambda _
20248 (chdir "python")
20249 (rename-file "setup-js.py" "setup.py"))))))
20250 (propagated-inputs (list python-editorconfig python-six))
20251 (native-inputs (list python-pytest python-setuptools))
20252 (synopsis "JavaScript unobfuscator and beautifier")
20253 (description
20254 "This packages provides tooling to beautify, unpack or deobfuscate
20255JavaScript, leveraging popular online obfuscators.")
20256 (license license:expat)))
20257
20258(define-public python-chardet
20259 (package
20260 (name "python-chardet")
20261 ;; XXX: Before update, check status of guix/guix#9242.
20262 (version "5.2.0")
20263 (source
20264 (origin
20265 (method url-fetch)
20266 (uri (pypi-uri "chardet" version))
20267 (sha256
20268 (base32
20269 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
20270 (native-inputs
20271 (list python-pytest python-setuptools))
20272 (build-system pyproject-build-system)
20273 (arguments
20274 (list #:test-flags
20275 ;; Disable test that fails sporadically:
20276 ;; https://github.com/chardet/chardet/issues/256
20277 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
20278 #:phases
20279 #~(modify-phases %standard-phases
20280 ;; This package provides a 'chardetect' executable that only
20281 ;; depends on Python, so customize the wrap phase to avoid
20282 ;; adding pytest and friends in order to save size.
20283 ;; (See also <https://bugs.gnu.org/25235>.)
20284 (replace 'wrap
20285 (lambda* (#:key inputs outputs #:allow-other-keys)
20286 (let* ((sitedir (site-packages inputs outputs))
20287 (python (dirname (dirname
20288 (search-input-file
20289 inputs "bin/python"))))
20290 (python-sitedir
20291 (string-append python "/lib/python"
20292 (python-version python)
20293 "/site-packages")))
20294 (wrap-program (string-append #$output "/bin/chardetect")
20295 `("GUIX_PYTHONPATH" ":" suffix
20296 ,(list sitedir python-sitedir)))))))))
20297 (home-page "https://github.com/chardet/chardet")
20298 (synopsis "Universal encoding detector for Python 2 and 3")
20299 (description
20300 "This package provides @code{chardet}, a Python module that can
20301automatically detect a wide range of file encodings.")
20302 (license license:lgpl2.1+)))
20303
20304(define-public python-charset-normalizer
20305 (package
20306 (name "python-charset-normalizer")
20307 (version "3.4.7")
20308 (source
20309 (origin
20310 (method git-fetch)
20311 (uri (git-reference
20312 (url "https://github.com/ousret/charset_normalizer")
20313 (commit version)))
20314 (file-name (git-file-name name version))
20315 (sha256 (base32 "0faqj59d0z0yzgvsxndy48xrlvj05lfdqaf9fsc61ckwzzhlkrvl"))))
20316 (build-system pyproject-build-system)
20317 (native-inputs
20318 (list python-pytest
20319 python-setuptools))
20320 (home-page "https://github.com/ousret/charset_normalizer")
20321 (synopsis "Universal Charset Detector, alternative to Chardet")
20322 (description "This library helps you read text from an unknown charset
20323encoding. Motivated by @code{chardet}, it tries to resolve the issue by
20324taking a new approach. All IANA character set names for which the Python core
20325library provides codecs are supported.")
20326 (license license:expat)))
20327
20328(define-public python-docopt
20329 (package
20330 (name "python-docopt")
20331 (version "0.6.2")
20332 (source
20333 (origin
20334 (method git-fetch)
20335 (uri (git-reference
20336 (url "https://github.com/docopt/docopt")
20337 (commit version)))
20338 (file-name (git-file-name name version))
20339 (sha256
20340 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
20341 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
20342 (build-system pyproject-build-system)
20343 ;; tests: 203 passed, 6 warnings
20344 (native-inputs
20345 (list python-pytest-8 python-setuptools))
20346 (home-page "http://docopt.org")
20347 (synopsis "Command-line interface description language for Python")
20348 (description
20349 "This library allows the user to define a command-line interface from a
20350program's help message rather than specifying it programmatically with
20351command-line parsers like @code{getopt} and @code{argparse}.")
20352 (license license:expat)))
20353
20354(define-public python-pythonanywhere
20355 (package
20356 (name "python-pythonanywhere")
20357 (version "0.19.0")
20358 (source
20359 (origin
20360 (method git-fetch)
20361 (uri (git-reference
20362 (url "https://github.com/pythonanywhere/helper_scripts")
20363 (commit (string-append "v" version))))
20364 (file-name (git-file-name name version))
20365 (sha256
20366 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
20367 (build-system pyproject-build-system)
20368 (arguments
20369 (list
20370 #:test-flags
20371 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
20372 "-k" (string-join
20373 ;; Network access is required to clone external
20374 ;; repositories.
20375 (list "not test_actually_creates_django_project_in_vir"
20376 "test_actually_downloads_repo"
20377 "test_actually_installing_a_real_package"
20378 "test_actually_works_against_example_repo"
20379 "test_autoconfigure_actually_works_against_example_repo"
20380 "test_exits_because_boolean_not_satisfied"
20381 "test_gets_version"
20382 "test_nuke_option_lets_you_run_twice"
20383 "test_nuke_option_lets_you_run_twice"
20384 "test_start_actually_creates_django_project_in_vir")
20385 " and not "))
20386 #:phases
20387 #~(modify-phases %standard-phases
20388 (add-after 'unpack 'relax-requirements
20389 (lambda _
20390 (substitute* "pyproject.toml"
20391 (("\"schema==.*\",")
20392 "\"schema\","))))
20393 (add-before 'check 'change-home
20394 (lambda _
20395 (setenv "HOME" "/tmp"))))))
20396 (native-inputs
20397 (list python-psutil
20398 python-pytest
20399 python-pytest-mock
20400 python-responses
20401 python-setuptools))
20402 (propagated-inputs
20403 (list python-dateutil
20404 python-docopt
20405 python-packaging
20406 python-pythonanywhere-core
20407 python-requests
20408 python-schema
20409 python-snakesay
20410 python-tabulate
20411 python-typer))
20412 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20413 (synopsis "PythonAnywhere helper tools for users")
20414 (description
20415 "PythonAnywhere provides a command-line interface and an application
20416programming interface that allows managing files Web apps, scheduled
20417tasks and students. It includes single-command deployment for the Django Girls
20418tutorial.")
20419 (license license:expat)))
20420
20421(define-public python-pythonanywhere-core
20422 (package
20423 (name "python-pythonanywhere-core")
20424 (version "0.3.0")
20425 (source
20426 (origin
20427 (method git-fetch)
20428 (uri (git-reference
20429 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20430 (commit (string-append "v" version))))
20431 (file-name (git-file-name name version))
20432 (sha256
20433 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20434 (build-system pyproject-build-system)
20435 (arguments
20436 (list
20437 #:phases
20438 #~(modify-phases %standard-phases
20439 (add-before 'check 'pre-check
20440 (lambda _
20441 (setenv "HOME" "/tmp"))))))
20442 (native-inputs
20443 (list python-poetry-core
20444 python-pytest
20445 python-pytest-mock
20446 python-responses))
20447 (propagated-inputs
20448 (list python-dateutil
20449 python-requests
20450 python-snakesay
20451 python-typing-extensions))
20452 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20453 (synopsis "API wrapper for PythonAnywhere services")
20454 (description
20455 "This package provides an API wrapper for programmatic management of
20456@code{PythonAnywhere} services.")
20457 (license license:expat)))
20458
20459(define-public python-dialog
20460 (package
20461 (name "python-dialog")
20462 (version "3.5.3")
20463 (source
20464 (origin
20465 (method url-fetch)
20466 (uri (pypi-uri "pythondialog" version))
20467 (sha256
20468 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20469 (modules '((guix build utils)))
20470 (snippet #~(delete-file-recursively "doc"))))
20471 (build-system pyproject-build-system)
20472 (arguments
20473 (list
20474 ;; XXX: There are no tests, but some examples. However, they need to
20475 ;; be run on a terminal.
20476 #:tests? #f
20477 #:phases
20478 #~(modify-phases %standard-phases
20479 (add-after 'unpack 'patch-path
20480 (lambda* (#:key inputs #:allow-other-keys)
20481 (substitute* "dialog.py"
20482 (("_path_to_executable\\(dialog\\)")
20483 (format #f "os.path.realpath(~s)"
20484 (search-input-file inputs "bin/dialog")))))))))
20485 (native-inputs (list python-setuptools))
20486 (inputs (list dialog))
20487 (home-page "https://pythondialog.sourceforge.net/")
20488 (synopsis "Python interface to the UNIX dialog utility")
20489 (description
20490 "A Python wrapper for the dialog utility. Its purpose is to provide an
20491easy to use, pythonic and comprehensive Python interface to dialog. This
20492allows one to make simple text-mode user interfaces on Unix-like systems")
20493 (license license:lgpl2.1)))
20494
20495(define-deprecated-package python-pythondialog python-dialog)
20496
20497(define-public python-confection
20498 (package
20499 (name "python-confection")
20500 (version "1.3.3")
20501 (source
20502 (origin
20503 (method git-fetch)
20504 (uri (git-reference
20505 (url "https://github.com/explosion/confection")
20506 (commit (string-append "release-v" version))))
20507 (file-name (git-file-name name version))
20508 (sha256
20509 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20510 (build-system pyproject-build-system)
20511 (arguments
20512 (list
20513 #:phases
20514 #~(modify-phases %standard-phases
20515 (add-before 'check 'patch-pythonpath
20516 (lambda _
20517 (setenv "PYTHONPATH"
20518 (string-append (getcwd) ":"
20519 (getenv "GUIX_PYTHONPATH"))))))))
20520 (propagated-inputs (list python-pydantic python-srsly))
20521 (native-inputs (list python-pytest python-setuptools))
20522 (home-page "https://github.com/explosion/confection")
20523 (synopsis "Config system for Python")
20524 (description
20525 "Confection is a lightweight library that offers a configuration system
20526letting you conveniently describe arbitrary trees of objects.")
20527 (license license:expat)))
20528
20529(define-public python-configobj
20530 (package
20531 (name "python-configobj")
20532 (version "5.0.9")
20533 (source
20534 (origin
20535 (method url-fetch)
20536 (uri (pypi-uri "configobj" version))
20537 (sha256
20538 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20539 (build-system pyproject-build-system)
20540 (native-inputs
20541 (list python-pytest
20542 python-setuptools))
20543 (home-page "https://github.com/DiffSK/configobj")
20544 (synopsis "Config file reading, writing and validation")
20545 (description
20546 "ConfigObj is a simple but powerful config file reader and writer: an
20547 ini file round tripper. Its main feature is that it is very easy to use,
20548with a straightforward programmer’s interface and a simple syntax for config
20549files.")
20550 (license license:bsd-3)))
20551
20552(define-public python-omegaconf
20553 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20554 (revision "1"))
20555 (package
20556 (name "python-omegaconf")
20557 (version (git-version "2.3.0" revision commit))
20558 (source
20559 (origin
20560 (method git-fetch)
20561 (uri (git-reference
20562 (url "https://github.com/omry/omegaconf")
20563 (commit commit)))
20564 (file-name (git-file-name name version))
20565 (modules '((guix build utils)))
20566 (snippet
20567 #~(begin
20568 (delete-file-recursively "build_helpers/bin")
20569 (substitute* "build_helpers/build_helpers.py"
20570 (("java") "antlr4")
20571 (("\"-jar\",") "")
20572 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20573 (sha256
20574 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20575 (build-system pyproject-build-system)
20576 (arguments
20577 (list
20578 #:test-flags
20579 ;; XXX: Those tests currently fail collection.
20580 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20581 "--ignore=tests/test_basic_ops_list.py"
20582 "--ignore=tests/test_merge.py"
20583 "--ignore=tests/test_select.py")
20584 #:phases
20585 #~(modify-phases %standard-phases
20586 (add-after 'unpack 'loosen-requirements
20587 (lambda _
20588 (substitute* "requirements/base.txt"
20589 (("antlr4-python3-runtime==.*")
20590 "antlr4-python3-runtime >=4.9\n"))
20591 ;; Ignore deprecation warnings.
20592 (substitute* "pyproject.toml"
20593 (("-Werror") "")))))))
20594 (native-inputs
20595 (list icedtea
20596 antlr4
20597 python-pytest
20598 python-pytest-mock
20599 python-setuptools
20600 python-wheel))
20601 (propagated-inputs
20602 (list python-antlr4-runtime
20603 python-pydevd
20604 python-pyyaml))
20605 (home-page "https://github.com/omry/omegaconf")
20606 (synopsis "Flexible configuration system")
20607 (description
20608 "OmegaConf is a hierarchical configuration system and supports merging
20609configurations from multiple sources. It provides a consistent API regardless
20610of how the configuration was created.")
20611 (license license:bsd-3))))
20612
20613(define-public python-configargparse
20614 (package
20615 (name "python-configargparse")
20616 (version "1.7.5")
20617 (source
20618 (origin
20619 (method git-fetch)
20620 (uri (git-reference
20621 (url "https://github.com/bw2/ConfigArgParse")
20622 (commit (string-append "v" version))))
20623 (file-name (git-file-name name version))
20624 (sha256
20625 (base32 "04d54knfjgxci3far2cp72xr8bjabq0xcawc0ks2nk7mfl1p05v5"))))
20626 (build-system pyproject-build-system)
20627 (native-inputs
20628 (list python-mock
20629 python-pytest
20630 python-pyyaml
20631 python-setuptools
20632 python-setuptools-scm))
20633 (home-page "https://github.com/bw2/ConfigArgParse")
20634 (synopsis "Replacement for argparse")
20635 (description
20636 "This package provides a drop-in replacement for argparse that allows
20637options to also be set via config files and/or environment variables.")
20638 (license license:expat)))
20639
20640(define-public python-connection-pool
20641 (package
20642 (name "python-connection-pool")
20643 (version "0.0.3")
20644 (source
20645 (origin
20646 (method git-fetch)
20647 (uri (git-reference
20648 (url "https://github.com/zhouyl/ConnectionPool")
20649 (commit version)))
20650 (file-name (git-file-name name version))
20651 (sha256
20652 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20653 (build-system pyproject-build-system)
20654 (arguments (list #:tests? #f)) ; No tests.
20655 (native-inputs (list python-setuptools))
20656 (home-page "https://github.com/zhouyl/ConnectionPool")
20657 (synopsis "Thread-safe connection pool")
20658 (description
20659 "This package provides a library implementing a thread-safe connection
20660pool.")
20661 (license license:expat)))
20662
20663(define-public python-argparse-dataclass
20664 (package
20665 (name "python-argparse-dataclass")
20666 (version "2.0.0")
20667 (source
20668 (origin
20669 (method git-fetch) ;no tests in PyPI archive
20670 (uri (git-reference
20671 (url "https://github.com/mivade/argparse_dataclass")
20672 (commit version)))
20673 (file-name (git-file-name name version))
20674 (sha256
20675 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20676 (build-system pyproject-build-system)
20677 (native-inputs (list python-pytest python-setuptools python-wheel))
20678 (home-page "https://github.com/mivade/argparse_dataclass")
20679 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20680 (description
20681 "This package provides declarative command-line interfaces using argparse
20682and dataclasses.")
20683 (license license:expat)))
20684
20685(define-public python-argparse-manpage
20686 (package
20687 (name "python-argparse-manpage")
20688 (version "4.7")
20689 (source
20690 (origin
20691 (method url-fetch)
20692 (uri (pypi-uri "argparse_manpage" version))
20693 (sha256
20694 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20695 (build-system pyproject-build-system)
20696 (arguments
20697 (list
20698 #:test-flags
20699 ;; Tests require PIP.
20700 #~(list "--ignore=tests/test_examples.py")))
20701 (native-inputs
20702 (list python-pytest
20703 python-setuptools))
20704 (home-page "https://github.com/praiskup/argparse-manpage")
20705 (synopsis "Build manual page from Python's ArgumentParser object")
20706 (description
20707 "This package provides tools to build manual pages from Python's
20708@code{ArgumentParser} object.")
20709 (license license:asl2.0)))
20710
20711(define-public python-atomicwrites
20712 (package
20713 (name "python-atomicwrites")
20714 (version "1.4.0")
20715 (source
20716 (origin
20717 (method git-fetch)
20718 (uri (git-reference
20719 (url "https://github.com/untitaker/python-atomicwrites")
20720 (commit version)))
20721 (file-name (git-file-name name version))
20722 (sha256
20723 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20724 (build-system pyproject-build-system)
20725 (native-inputs (list python-pytest python-setuptools))
20726 (synopsis "Atomic file writes in Python")
20727 (description
20728 "Library for atomic file writes using platform dependent tools
20729for atomic file system operations.")
20730 (home-page "https://github.com/untitaker/python-atomicwrites")
20731 (license license:expat)))
20732
20733(define-public python-qstylizer
20734 (package
20735 (name "python-qstylizer")
20736 (version "0.2.4")
20737 (source
20738 (origin
20739 (method git-fetch)
20740 (uri (git-reference
20741 (url "https://github.com/blambright/qstylizer")
20742 (commit version)))
20743 (file-name (git-file-name name version))
20744 (sha256
20745 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20746 (build-system pyproject-build-system)
20747 (native-inputs
20748 (list python-pbr
20749 python-pytest
20750 python-pytest-mock
20751 python-setuptools
20752 python-wheel))
20753 (propagated-inputs
20754 (list python-inflection
20755 python-tinycss2))
20756 (home-page "https://github.com/blambright/qstylizer")
20757 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20758 (description "@code{qstylizer} is a Python package designed to help with
20759the construction of PyQt/PySide stylesheets.")
20760 (license license:expat)))
20761
20762(define-public python-click-threading
20763 (package
20764 (name "python-click-threading")
20765 (version "0.5.0")
20766 (source
20767 (origin
20768 (method git-fetch)
20769 (uri (git-reference
20770 (url "https://github.com/click-contrib/click-threading")
20771 (commit version)))
20772 (file-name (git-file-name name version))
20773 (sha256
20774 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20775 (build-system pyproject-build-system)
20776 (native-inputs (list python-pytest python-setuptools))
20777 (propagated-inputs (list python-click))
20778 (synopsis "Utilities for multithreading in Click")
20779 (description
20780 "This package provides utilities for multithreading in Click
20781applications.")
20782 (home-page "https://github.com/click-contrib/click-threading")
20783 (license license:expat)))
20784
20785(define-public python-click-log
20786 (package
20787 (name "python-click-log")
20788 (version "0.3.2")
20789 (source
20790 (origin
20791 (method git-fetch)
20792 (uri (git-reference
20793 (url "https://github.com/click-contrib/click-log")
20794 (commit version)))
20795 (file-name (git-file-name name version))
20796 (sha256
20797 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20798 (build-system pyproject-build-system)
20799 (native-inputs (list python-pytest python-setuptools))
20800 (propagated-inputs (list python-click))
20801 (synopsis "Logging for click applications")
20802 (description
20803 "This package provides a Python library for logging Click applications.")
20804 (home-page "https://github.com/click-contrib/click-log")
20805 (license license:expat)))
20806
20807(define-public python-click-default-group
20808 (package
20809 (name "python-click-default-group")
20810 (version "1.2.4")
20811 (source
20812 (origin
20813 (method git-fetch) ; no tests in PyPI release
20814 (uri (git-reference
20815 (url "https://github.com/click-contrib/click-default-group")
20816 (commit (string-append "v" version))))
20817 (file-name (git-file-name name version))
20818 (sha256
20819 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20820 (build-system pyproject-build-system)
20821 (propagated-inputs
20822 (list python-click))
20823 (native-inputs
20824 (list python-flit-core python-pytest))
20825 (synopsis "Extends click.Group")
20826 (description "This package extends click.Group to invoke a command without
20827explicit subcommand name.")
20828 (home-page "https://github.com/click-contrib/click-default-group")
20829 (license license:bsd-3)))
20830
20831(define-public python-apipkg
20832 (package
20833 (name "python-apipkg")
20834 (version "3.0.2")
20835 (source
20836 (origin
20837 (method url-fetch)
20838 (uri (pypi-uri "apipkg" version))
20839 (sha256
20840 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20841 (build-system pyproject-build-system)
20842 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20843 (native-inputs
20844 (list python-hatch-vcs
20845 python-hatchling))
20846 (home-page "https://github.com/pytest-dev/apipkg")
20847 (synopsis "Namespace control and lazy-import mechanism")
20848 (description "With apipkg you can control the exported namespace of a Python
20849package and greatly reduce the number of imports for your users. It is a small
20850pure Python module that works on virtually all Python versions.")
20851 (license license:expat)))
20852
20853(define-public python-essentials
20854 (package
20855 (name "python-essentials")
20856 (version "1.1.8")
20857 (source
20858 (origin
20859 (method git-fetch)
20860 (uri (git-reference
20861 (url "https://github.com/Neoteroi/essentials")
20862 (commit (string-append "v" version))))
20863 (file-name (git-file-name name version))
20864 (sha256
20865 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20866 (build-system pyproject-build-system)
20867 (native-inputs
20868 (list python-hatchling
20869 python-pydantic
20870 python-pytest-asyncio))
20871 (home-page "https://github.com/Neoteroi/essentials/wiki")
20872 (synopsis
20873 "Utility functions, exceptions, and classes for Python applications")
20874 (description
20875 "Essentials is a collection of functions, exceptions, and classes for Python
20876applications. Examples of utilities are exceptions for common scenarios,
20877friendly JSON encoder, decorators for retries and logging.")
20878 (license license:expat)))
20879
20880(define-public python-execnet
20881 (package
20882 (name "python-execnet")
20883 (version "2.1.2")
20884 (source
20885 (origin
20886 (method git-fetch)
20887 (uri (git-reference
20888 (url "https://github.com/pytest-dev/execnet")
20889 (commit (string-append "v" version))))
20890 (file-name (git-file-name name version))
20891 (sha256
20892 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20893 (build-system pyproject-build-system)
20894 (arguments
20895 (list
20896 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20897 #:phases
20898 #~(modify-phases %standard-phases
20899 (add-before 'check 'pre-check
20900 (lambda _
20901 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20902 ;; test in 'testing/test_gateway.py'.
20903 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20904 (native-inputs
20905 (list python-hatchling
20906 python-hatch-vcs
20907 python-pytest-bootstrap))
20908 (home-page "https://codespeak.net/execnet/")
20909 (synopsis "Rapid multi-Python deployment")
20910 (description
20911 "Execnet provides a share-nothing model with channel-send/receive communication
20912for distributing execution across many Python interpreters across version,
20913platform and network barriers. It has a minimal and fast API targeting the
20914following uses:
20915
20916@enumerate
20917@item distribute tasks to (many) local or remote CPUs
20918@item write and deploy hybrid multi-process applications
20919@item write scripts to administer multiple environments
20920@end enumerate")
20921 (license license:expat)))
20922
20923(define-public python-icalendar
20924 (package
20925 (name "python-icalendar")
20926 (version "6.3.2")
20927 (source
20928 (origin
20929 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20930 (uri (pypi-uri "icalendar" version))
20931 (sha256
20932 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20933 (build-system pyproject-build-system)
20934 (arguments
20935 (list
20936 ;; tests: 8995 passed, 21 skipped, 2 deselected
20937 #:test-flags
20938 #~(list
20939 "-k"
20940 (string-append
20941 ;; See: <https://github.com/collective/icalendar/issues/812>.
20942 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20943 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20944 (native-inputs
20945 (list python-hatch-vcs
20946 python-hatchling
20947 python-pytest
20948 python-pytz))
20949 (propagated-inputs
20950 (list python-dateutil
20951 python-tzdata))
20952 (home-page "https://github.com/collective/icalendar")
20953 (synopsis "Python library for parsing and generating iCalendar files")
20954 (description
20955 "@code{icalendar} is a Python library for parsing and generating
20956iCalendar files.")
20957 (license license:bsd-2)))
20958
20959(define-public python-args
20960 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20961 (revision "0"))
20962 (package
20963 (name "python-args")
20964 (version (git-version "0.1.0" revision commit))
20965 (source
20966 (origin
20967 (method git-fetch)
20968 (uri (git-reference
20969 (url "https://github.com/kennethreitz-archive/args")
20970 (commit commit)))
20971 (file-name (git-file-name name version))
20972 (sha256
20973 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20974 (build-system pyproject-build-system)
20975 (arguments
20976 (list
20977 #:tests? #f ; XXX: python-nose is deprecated.
20978 #:phases
20979 #~(modify-phases %standard-phases
20980 (add-after 'unpack 'patch-args.py
20981 (lambda _
20982 (substitute* "args.py"
20983 (("basestring")
20984 "str")))))))
20985 (native-inputs (list python-setuptools python-wheel))
20986 (home-page "https://github.com/kennethreitz-archive/args")
20987 (synopsis "Command-line argument parser")
20988 (description
20989 "This library provides a Python module to parse command-line arguments.")
20990 (license license:bsd-3))))
20991
20992(define-public python-clint
20993 (package
20994 (name "python-clint")
20995 (version "0.5.1")
20996 (source (origin
20997 (method url-fetch)
20998 (uri (pypi-uri "clint" version))
20999 (sha256
21000 (base32
21001 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
21002 (build-system pyproject-build-system)
21003 (native-inputs
21004 (list python-pytest python-setuptools python-wheel))
21005 (propagated-inputs
21006 (list python-args))
21007 (home-page "https://github.com/kennethreitz/clint")
21008 (synopsis "Command-line interface tools")
21009 (description
21010 "Clint is a Python module filled with a set of tools for developing
21011command-line applications, including tools for colored and indented
21012output, progress bar display, and pipes.")
21013 (license license:isc)))
21014
21015(define-public python-rply
21016 (package
21017 (name "python-rply")
21018 (version "0.7.8")
21019 (source
21020 (origin
21021 (method git-fetch)
21022 (uri (git-reference
21023 (url "https://github.com/alex/rply")
21024 (commit (string-append "v" version))))
21025 (file-name (git-file-name name version))
21026 (sha256
21027 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
21028 (build-system pyproject-build-system)
21029 (arguments
21030 (list
21031 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
21032 #:phases
21033 #~(modify-phases %standard-phases
21034 (add-before 'check 'fix-pytest-use
21035 (lambda _
21036 (substitute* (find-files "tests" "\\.py$")
21037 (("import py")
21038 "import pytest")
21039 (("py\\.test")
21040 "pytest"))
21041 (setenv "HOME" (getcwd)))))))
21042 (native-inputs (list python-pytest python-setuptools))
21043 (propagated-inputs (list python-appdirs))
21044 (home-page "https://github.com/alex/rply")
21045 (synopsis "Parser generator for Python")
21046 (description
21047 "This package provides a pure Python based parser generator, that also
21048works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
21049with a new public API, and RPython support.")
21050 (license license:bsd-3)))
21051
21052(define-public python-hy
21053 (package
21054 (name "python-hy")
21055 (version "1.3.1")
21056 (source
21057 (origin
21058 (method git-fetch)
21059 (uri (git-reference
21060 (url "https://github.com/hylang/hy")
21061 (commit version)))
21062 (file-name (git-file-name name version))
21063 (sha256
21064 (base32 "0fc1qjr2kkl3a5hig9l2g3ysapvc16gj1gyblaszm3xza6w0zn58"))))
21065 (build-system pyproject-build-system)
21066 (arguments
21067 (list
21068 ;; This test expects the hy executable to be called 'hy', but in Guix
21069 ;; it's .hy-real.
21070 #:test-flags #~(list "-k" "not test_sys_executable")))
21071 (native-inputs (list python-pytest python-setuptools))
21072 (propagated-inputs (list python-funcparserlib))
21073 (home-page "https://hylang.org/hy/doc")
21074 (synopsis "Lisp frontend to Python")
21075 (description
21076 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
21077its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
21078Python at your fingertips, in Lisp form.")
21079 (license license:expat)))
21080
21081(define-public python-hissp
21082 (package
21083 (name "python-hissp")
21084 (version "0.5.0")
21085 (source
21086 (origin
21087 (method git-fetch)
21088 (uri (git-reference
21089 (url "https://github.com/gilch/hissp")
21090 (commit (string-append "v" version))))
21091 (file-name (git-file-name name version))
21092 (sha256
21093 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
21094 (build-system pyproject-build-system)
21095 (arguments (list #:test-backend #~'unittest))
21096 (native-inputs (list python-hypothesis python-setuptools))
21097 (home-page "https://github.com/gilch/hissp")
21098 (synopsis "It's Python with a Lissp")
21099 (description
21100 "Hissp is a modular Lisp implementation that compiles to a functional
21101subset of Python—Syntactic macro metaprogramming with full access to the
21102Python ecosystem.")
21103 (license license:asl2.0)))
21104
21105(define-public python-promise
21106 (package
21107 (name "python-promise")
21108 (version "2.3.0")
21109 (source
21110 (origin
21111 (method git-fetch)
21112 (uri (git-reference
21113 (url "https://github.com/syrusakbary/promise")
21114 (commit (string-append "v" version))))
21115 (file-name (git-file-name name version))
21116 (sha256
21117 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
21118 (build-system pyproject-build-system)
21119 (arguments
21120 (list
21121 #:test-flags
21122 #~(list "--ignore=tests/test_benchmark.py"
21123 ;; Issues with pytest-asyncio
21124 "--ignore=tests/test_awaitable.py"
21125 "-k" (string-join
21126 (list "not test_issue_9_safe"
21127 ;; Stacktrace issues.
21128 "test_thrown_exceptions_have_stacktrace"
21129 "test_thrown_exceptions_preserve_stacktrace")
21130 " and not "))))
21131 (native-inputs
21132 (list python-mock
21133 python-pytest
21134 python-pytest-asyncio
21135 python-setuptools))
21136 (propagated-inputs (list python-six))
21137 (home-page "https://github.com/syrusakbary/promise")
21138 (synopsis "Promises/A+ implementation for Python")
21139 (description
21140 "This package provides an implementation of Promises in Python. It is a
21141super set of Promises/A+ designed to have readable, performant code and to
21142provide just the extensions that are absolutely necessary for using promises
21143in Python.")
21144 (license license:expat)))
21145
21146(define-public python-progress
21147 (package
21148 (name "python-progress")
21149 (version "1.6")
21150 (source
21151 (origin
21152 (method git-fetch)
21153 (uri (git-reference
21154 (url "https://github.com/verigak/progress/")
21155 (commit version)))
21156 (file-name (git-file-name name version))
21157 (sha256
21158 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
21159 (snippet #~(delete-file "demo.gif"))))
21160 (build-system pyproject-build-system)
21161 (arguments
21162 (list
21163 #:test-backend #~'custom
21164 #:test-flags #~(list "test_progress.py")))
21165 (native-inputs (list python-setuptools))
21166 (home-page "https://github.com/verigak/progress/")
21167 (synopsis "Progress reporting bars for Python")
21168 (description
21169 "This Python package provides progress reporting for visual of progress
21170of long running operations. There are multiple choices of progress bars and
21171spinners, with customizable options, such as width, fill character, and
21172suffix.")
21173 (license license:isc)))
21174
21175(define-public python-progressbar2
21176 (package
21177 (name "python-progressbar2")
21178 (version "4.5.0")
21179 (source
21180 (origin
21181 (method url-fetch)
21182 (uri (pypi-uri "progressbar2" version))
21183 (sha256
21184 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
21185 (build-system pyproject-build-system)
21186 (arguments
21187 (list
21188 #:test-flags #~(list "--pyargs" "progressbar" "tests")
21189 #:phases
21190 #~(modify-phases %standard-phases
21191 (add-after 'unpack 'fix-pytest-config
21192 (lambda _
21193 ;; Drop test coverage requirements.
21194 (substitute* "pytest.ini"
21195 ((".*-cov.*") "")))))))
21196 (native-inputs
21197 (list python-dill
21198 python-pytest
21199 python-freezegun
21200 python-setuptools
21201 python-setuptools-scm
21202 python-wheel))
21203 (propagated-inputs
21204 (list python-utils))
21205 (home-page "https://github.com/WoLpH/python-progressbar")
21206 (synopsis "Text progress bar library for Python")
21207 (description
21208 "This package provides a Python progressbar library to provide
21209visual (yet text based) progress to long running operations.")
21210 (license license:bsd-3)))
21211
21212(define-public python-progressbar33
21213 (package
21214 (name "python-progressbar33")
21215 (version "2.4")
21216 (source
21217 (origin
21218 (method git-fetch)
21219 (uri (git-reference
21220 (url "https://github.com/germangh/python-progressbar")
21221 (commit (string-append "v" version))))
21222 (file-name (git-file-name name version))
21223 (sha256
21224 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
21225 (build-system pyproject-build-system)
21226 (arguments
21227 (list
21228 #:test-backend #~'custom
21229 #:test-flags #~(list "examples.py")))
21230 (native-inputs (list python-setuptools))
21231 (home-page "https://github.com/germangh/python-progressbar")
21232 (synopsis "Text progress bar library for Python")
21233 (description
21234 "This package provides a text progress bar library for Python. This
21235version only differs from the original @code{progressbar} package in that it
21236uses relative package imports instead of absolute imports, which is necessary
21237for the module to work under Python 3.3.")
21238 ;; Either or both of these licenses may be selected.
21239 (license (list license:lgpl2.1+ license:bsd-3))))
21240
21241;; XXX: Not maintained since 2012.
21242(define-public python-monthdelta
21243 (package
21244 (name "python-monthdelta")
21245 (version "0.9.1")
21246 (source
21247 (origin
21248 (method url-fetch)
21249 (uri (pypi-uri "MonthDelta" version))
21250 (sha256
21251 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
21252 (build-system pyproject-build-system)
21253 (arguments
21254 (list #:tests? #f)) ; No tests.
21255 (native-inputs (list python-setuptools))
21256 (home-page "http://packages.python.org/MonthDelta")
21257 (synopsis "Date computations with months")
21258 (description
21259 "MonthDelta provides functionality to do date computations with months.")
21260 (license license:expat)))
21261
21262(define-public python-moto
21263 (package
21264 (name "python-moto")
21265 (version "5.1.20")
21266 (source (origin
21267 (method url-fetch)
21268 (uri (pypi-uri "moto" version))
21269 (sha256
21270 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
21271 (build-system pyproject-build-system)
21272 (arguments
21273 (list
21274 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
21275 #:test-flags
21276 #~(list "-m" "not network and not requires_docker"
21277 ;; Not all of the tests are thread save, see:
21278 ;; <https://github.com/getmoto/moto/issues/7786>.
21279 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
21280 "-k" (string-join
21281 ;; Network access is required.
21282 (list "not test_passthrough_calls_for_entire_service"
21283 "test_passthrough_calls_for_specific_url"
21284 "test_passthrough_calls_for_wildcard_urls"
21285 "test_put_record_batch_http_destination"
21286 "test_put_record_http_destination"
21287 "test_s3_server_post_cors_multiple_origins"
21288 "test_with_custom_request_header"
21289 ;; AttributeError: 'ImportError' object has no
21290 ;; attribute 'message'
21291 "test_batch_update"
21292 "test_batch_update__not_enough_parameters"
21293 "test_execute_transaction"
21294 "test_without_primary_key_in_where_clause")
21295 " and not ")
21296 "tests")
21297 #:phases
21298 #~(modify-phases %standard-phases
21299 (add-after 'unpack 'patch-hardcoded-executable-names
21300 (lambda* (#:key inputs #:allow-other-keys)
21301 (let ((bash-exec (search-input-file inputs "/bin/sh")))
21302 (substitute* "moto/batch/models.py"
21303 (("/bin/sh") bash-exec))
21304 (substitute* (find-files "tests" "\\.py$")
21305 (("#!/bin/bash") (string-append "#!" bash-exec))))))
21306 (add-before 'check 'pre-check
21307 (lambda _
21308 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
21309 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
21310 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
21311 (native-inputs
21312 (list python-flask
21313 python-flask-cors
21314 python-freezegun
21315 python-pycognito
21316 python-pyotp
21317 python-pytest
21318 python-setuptools))
21319 (inputs
21320 (list bash-minimal))
21321 (propagated-inputs
21322 (list python-antlr4-runtime
21323 python-aws-xray-sdk
21324 python-boto3
21325 python-botocore
21326 python-cfn-lint
21327 python-cryptography
21328 python-dateutil
21329 python-graphql-core
21330 python-jinja2
21331 python-joserfc
21332 python-jsonpath-ng
21333 python-multipart
21334 python-openapi-spec-validator
21335 python-py-partiql-parser
21336 python-pyparsing
21337 python-requests
21338 python-responses
21339 python-werkzeug
21340 python-xmltodict))
21341 (home-page "https://github.com/spulec/moto")
21342 (synopsis "Mock out the boto library")
21343 (description
21344 "@code{moto} is a library designed to easily mock out the
21345@code{boto} library.")
21346 (license license:asl2.0)))
21347
21348(define-public python-plumbum
21349 (package
21350 (name "python-plumbum")
21351 (version "1.7.0")
21352 (source
21353 (origin
21354 (method git-fetch)
21355 (uri (git-reference
21356 (url "https://github.com/tomerfiliba/plumbum")
21357 (commit (string-append "v" version))))
21358 (file-name (git-file-name name version))
21359 (sha256
21360 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
21361 (build-system pyproject-build-system)
21362 (arguments
21363 (list
21364 #:test-flags
21365 #~(list "--ignore=tests/test_remote.py"
21366 "--ignore=tests/test_putty.py"
21367 "--ignore=tests/test_sudo.py"
21368 "-k"
21369 (string-join (list "not test_home"
21370 "test_iter_lines_error"
21371 "test_quoting"
21372 "test_copy_move_delete")
21373 " and not "))))
21374 (native-inputs
21375 (list procps
21376 python-psutil
21377 python-pytest
21378 python-setuptools
21379 python-setuptools-scm
21380 python-wheel))
21381 (home-page "https://plumbum.readthedocs.io")
21382 (synopsis "Python shell combinators library")
21383 (description
21384 "Plumbum is a library of tools for replacing shell scripts with Python
21385code.")
21386 (license license:expat)))
21387
21388(define-public python-deprecation
21389 (package
21390 (name "python-deprecation")
21391 (version "2.1.0")
21392 (source
21393 (origin
21394 (method url-fetch)
21395 (uri (pypi-uri "deprecation" version))
21396 (sha256
21397 (base32
21398 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21399 (build-system pyproject-build-system)
21400 (arguments
21401 (list
21402 #:test-backend #~'unittest
21403 #:phases
21404 #~(modify-phases %standard-phases
21405 (add-after 'unpack 'drop-unittest2
21406 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21407 (lambda _
21408 (substitute* "tests/test_deprecation.py"
21409 (("import unittest2")
21410 "import unittest as unittest2")))))))
21411 (native-inputs
21412 (list python-setuptools))
21413 (propagated-inputs
21414 (list python-packaging))
21415 (home-page "https://deprecation.readthedocs.io/")
21416 (synopsis "Python library to handle automated deprecations")
21417 (description
21418 "This is a library that enables automated deprecations. It offers the
21419@code{deprecated()} decorator to wrap functions, providing proper warnings
21420both in documentation and via Python’s warnings system, as well as the
21421@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21422that deprecated code is eventually removed.")
21423 (license license:asl2.0)))
21424
21425(define-public python-jmespath
21426 (package
21427 (name "python-jmespath")
21428 (version "1.0.1")
21429 (source
21430 (origin
21431 (method url-fetch)
21432 (uri (pypi-uri "jmespath" version))
21433 (sha256
21434 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21435 (build-system pyproject-build-system)
21436 (native-inputs
21437 (list python-pytest
21438 python-setuptools))
21439 (home-page "https://github.com/jmespath/jmespath.py")
21440 (synopsis "JSON Matching Expressions")
21441 (description
21442 "JMESPath (pronounced “james path”) is a Python library that allows one
21443to declaratively specify how to extract elements from a JSON document.")
21444 (license license:expat)))
21445
21446(define-public python-asteval
21447 (package
21448 (name "python-asteval")
21449 (version "1.0.6")
21450 (source
21451 (origin
21452 (method url-fetch)
21453 (uri (pypi-uri "asteval" version))
21454 (sha256
21455 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21456 (build-system pyproject-build-system)
21457 (native-inputs
21458 (list python-pytest python-setuptools python-setuptools-scm))
21459 (home-page "https://github.com/newville/asteval")
21460 (synopsis "Minimalistic evaluator of Python expressions")
21461 (description
21462 "This package provides a minimalistic evaluator of Python expression
21463using the @code{ast} module.")
21464 (license license:expat)))
21465
21466(define-public python-lmfit
21467 (package
21468 (name "python-lmfit")
21469 (version "1.3.4")
21470 (source
21471 (origin
21472 (method git-fetch)
21473 (uri (git-reference
21474 (url "https://github.com/lmfit/lmfit-py")
21475 (commit version)))
21476 (file-name (git-file-name name version))
21477 (sha256
21478 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21479 (build-system pyproject-build-system)
21480 (native-inputs
21481 (list python-pytest
21482 python-setuptools
21483 python-setuptools-scm))
21484 (propagated-inputs
21485 (list python-asteval
21486 python-dill
21487 python-numpy
21488 python-scipy
21489 python-uncertainties))
21490 (home-page "https://lmfit.github.io/lmfit-py/")
21491 (synopsis "Least-Squares minimization with bounds and constraints")
21492 (description
21493 "Lmfit provides a high-level interface to non-linear optimization and
21494curve fitting problems for Python. It builds on and extends many of the
21495optimization methods of @code{scipy.optimize}. Initially inspired by (and
21496named for) extending the Levenberg-Marquardt method from
21497@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21498enhancements to optimization and data fitting problems.")
21499 (license license:bsd-3)))
21500
21501(define-public python-bokeh
21502 (package
21503 (name "python-bokeh")
21504 ;; Update bokehjs on (gnu packages javascript) to the same version.
21505 (version "3.10.0")
21506 (source
21507 (origin
21508 (method git-fetch)
21509 (uri (git-reference
21510 (url "https://github.com/bokeh/bokeh")
21511 (commit version)))
21512 (file-name (git-file-name name version))
21513 (sha256
21514 (base32 "0gh3zmc6nb7awxgpyry3ncy15a18kmimm1ja6sa0qprw4bysx1xb"))
21515 (patches (list (search-patch "python-bokeh-bokehjs-env.patch")))
21516 (modules '((guix build utils)))
21517 (snippet
21518 #~(delete-file-recursively "bokehjs"))))
21519 (build-system pyproject-build-system)
21520 (arguments
21521 (list
21522 #:test-flags
21523 #~(list
21524 ;; Ignore bokejs outdated resources tests.
21525 ;; 11998 passed, 23 skipped.
21526 "--ignore=tests/test_bokehjs.py" ;1 failed.
21527 "--ignore=tests/test_defaults.py" ;1 failed.
21528 "--ignore=tests/test_examples.py" ;430 failed.
21529 "--ignore=tests/test_cross.py" ;8 failed.
21530 "--ignore=tests/codebase/" ;12 failed.
21531 "--ignore=tests/unit/bokeh/embed/" ;3 failed.
21532 "--ignore=tests/unit/bokeh/core/test_templates.py" ;2 failed.
21533 "--ignore=tests/unit/bokeh/test_resources.py" ;5 failed.
21534 "--ignore=tests/unit/bokeh/util/test_compiler.py" ;4 failed.
21535 "--ignore=tests/unit/bokeh/test_ext.py" ;1 failed.
21536 "--ignore=tests/unit/bokeh/server/" ;3 failed
21537 "--ignore=tests/unit/bokeh/util/test_package.py") ;1 failed.
21538 #:phases
21539 #~(modify-phases %standard-phases
21540 ;; Skip bokehjs build and set environment
21541 (add-after 'unpack 'skip-bokehjs-build-install
21542 (lambda _
21543 (substitute* "setup.py"
21544 ((" else:" all)
21545 (string-append
21546 " elif action == \"skip\":\n"
21547 " return\n"
21548 all)))
21549 (setenv "BOKEHJS_ACTION" "skip")
21550 (setenv "HOME" "/tmp")))
21551 (add-before 'build 'set-version
21552 (lambda _
21553 (substitute* "pyproject.toml"
21554 ((", \"setuptools-git-versioning\"") "")
21555 (("dynamic = \\[\"version\"\\]")
21556 (string-append "version = '" #$version "'"))))))))
21557 (native-inputs
21558 (list git-minimal
21559 python-beautifulsoup4
21560 python-dateutil
21561 python-flaky
21562 python-json5
21563 python-mock
21564 python-nbconvert
21565 python-pandas
21566 python-pytest
21567 python-pytest-asyncio
21568 python-pytest-timeout
21569 python-pytz
21570 python-requests
21571 python-setuptools
21572 python-toml
21573 python-wheel))
21574 (propagated-inputs
21575 (list node-bokehjs
21576 python-contourpy
21577 python-jinja2
21578 python-narwhals
21579 python-numpy
21580 python-packaging
21581 python-pandas
21582 python-pillow
21583 python-pyyaml
21584 python-tornado
21585 python-xyzservices))
21586 (native-search-paths
21587 (list (search-path-specification
21588 (variable "BOKEHJS_PATH")
21589 (files '("bokehjs/static")))))
21590 (home-page "https://github.com/bokeh/bokeh")
21591 (synopsis "Interactive plots and applications in the browser from Python")
21592 (description
21593 "This package provides tools for interactive plots and applications in the
21594browser from Python.")
21595 (license license:bsd-3)))
21596
21597;; TODO: Move to python-web.
21598(define-public python-botocore
21599 ;; Note: When updating botocore, also make sure that boto3 and awscli
21600 ;; are compatible.
21601 (package
21602 (name "python-botocore")
21603 (version "1.42.5")
21604 (source
21605 (origin
21606 (method url-fetch)
21607 (uri (pypi-uri "botocore" version))
21608 (sha256
21609 (base32
21610 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21611 (build-system pyproject-build-system)
21612 (arguments
21613 (list
21614 ;; tests: 4496 passed, 87 skipped
21615 #:test-flags
21616 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21617 ;; The full test suite is huge, run some of it's portion.
21618 "--ignore=tests/integration"
21619 "--ignore=tests/functional")))
21620 (native-inputs
21621 (list python-jsonschema
21622 python-pytest
21623 python-pytest-xdist
21624 python-setuptools))
21625 (propagated-inputs
21626 (list python-dateutil
21627 python-jmespath
21628 python-urllib3))
21629 (home-page "https://github.com/boto/botocore")
21630 (synopsis "Low-level interface to AWS")
21631 (description
21632 "Botocore is a Python library that provides a low-level interface to the
21633Amazon Web Services (AWS) API.")
21634 (license license:asl2.0)))
21635
21636(define-public python-boto3
21637 (package
21638 (name "python-boto3")
21639 (version "1.42.5")
21640 (source
21641 (origin
21642 (method git-fetch)
21643 (uri (git-reference
21644 (url "https://github.com/boto/boto3")
21645 (commit version)))
21646 (file-name (git-file-name name version))
21647 (sha256
21648 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21649 (build-system pyproject-build-system)
21650 (arguments
21651 (list
21652 ;; tests: 1435 passed, 22 skipped, 1 warning
21653 #:test-flags
21654 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21655 ;; Integration tests are trying to connect to AWS.
21656 "--ignore=tests/integration")))
21657 (native-inputs
21658 (list python-mock
21659 python-pytest
21660 python-pytest-xdist
21661 python-setuptools))
21662 (propagated-inputs
21663 (list python-botocore
21664 python-jmespath
21665 python-s3transfer))
21666 (home-page "https://github.com/boto/boto3")
21667 (synopsis "AWS SDK for Python")
21668 (description
21669 "Boto3 is a Python library for writing programs that interact with
21670@acronym{AWS,Amazon Web Services}.")
21671 (license license:asl2.0)))
21672
21673(define-public python-pyfiglet
21674 (package
21675 (name "python-pyfiglet")
21676 (version "1.0.4")
21677 (source
21678 (origin
21679 (method git-fetch)
21680 (uri (git-reference
21681 (url "https://github.com/pwaller/pyfiglet")
21682 (commit (string-append "v" version))))
21683 (file-name (git-file-name name version))
21684 (sha256
21685 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21686 (build-system pyproject-build-system)
21687 (arguments
21688 (list
21689 #:phases
21690 #~(modify-phases %standard-phases
21691 (add-after 'unpack 'fallback-on-default-build
21692 (lambda _
21693 ;; This pyproject has little value and fails because of the
21694 ;; :__legacy__ suffix. Removing it to rely on defaults.
21695 (delete-file "pyproject.toml"))))))
21696 (native-inputs (list python-pytest python-setuptools))
21697 (home-page "https://github.com/pwaller/pyfiglet")
21698 (synopsis "Draw ASCII art big letters in Python")
21699 (description
21700 "This module lets you draw large letter from ordinary characters in pure
21701 Python.")
21702 (license license:expat)))
21703
21704(define-public python-mako
21705 (package
21706 (name "python-mako")
21707 (version "1.3.12")
21708 (source
21709 (origin
21710 (method git-fetch)
21711 (uri (git-reference
21712 (url "https://github.com/sqlalchemy/mako")
21713 (commit (string-append "rel_" (string-replace-substring
21714 version "." "_")))))
21715 (file-name (git-file-name name version))
21716 (sha256
21717 (base32 "1cvx14yvsx13fnxbwjy4jh8yy87pa6lzfgqzkih4j6c8q0zjd0v0"))))
21718 (build-system pyproject-build-system)
21719 (native-inputs
21720 (list python-pytest
21721 python-setuptools))
21722 (propagated-inputs
21723 (list python-markupsafe))
21724 (home-page "https://www.makotemplates.org/")
21725 (synopsis "Templating language for Python")
21726 (description "Mako is a templating language for Python that compiles
21727templates into Python modules.")
21728 (license license:expat)))
21729
21730(define-public python-cookiecutter
21731 (package
21732 (name "python-cookiecutter")
21733 (version "2.6.0")
21734 (source
21735 (origin
21736 (method url-fetch)
21737 (uri (pypi-uri "cookiecutter" version))
21738 (sha256
21739 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21740 (build-system pyproject-build-system)
21741 (arguments
21742 (list
21743 #:phases #~(modify-phases %standard-phases
21744 (add-before 'check 'pre-check
21745 (lambda _
21746 ;; test_get_user_config.py requires a writable home
21747 ;; directory.
21748 (setenv "HOME"
21749 (getcwd))
21750 ;; test_hooks.py dynamically creates shell scripts
21751 ;; with a /bin/bash shebang. We have to patch these.
21752 (substitute* "tests/test_hooks.py"
21753 (("/bin/bash")
21754 (string-append #$(this-package-native-input
21755 "bash-minimal") "/bin/bash"))))))))
21756 (native-inputs (list bash-minimal
21757 git-minimal/pinned
21758 python-freezegun
21759 python-pytest
21760 python-pytest-mock
21761 python-setuptools
21762 python-wheel))
21763 (propagated-inputs (list python-arrow
21764 python-binaryornot
21765 python-click
21766 python-jinja2
21767 python-pyyaml
21768 python-requests
21769 python-rich
21770 python-slugify))
21771 (home-page "https://github.com/cookiecutter/cookiecutter")
21772 (synopsis
21773 "Command-line utility that creates projects from project templates")
21774 (description
21775 "This package provides a command-line utility that creates projects from
21776project templates, e.g. creating a Python package project from a Python package
21777project template.")
21778 (license license:bsd-3)))
21779
21780(define-public python-pyquery
21781 (package
21782 (name "python-pyquery")
21783 (version "2.0.1")
21784 (source
21785 (origin
21786 (method url-fetch)
21787 (uri (pypi-uri "pyquery" version))
21788 (sha256
21789 (base32
21790 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21791 (build-system pyproject-build-system)
21792 (arguments
21793 (list
21794 #:test-flags
21795 #~(list #$@(map (lambda (test) (string-append
21796 "--deselect=tests/test_pyquery.py::"
21797 test))
21798 (list
21799 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21800 "TestWebScrapping::test_post"
21801 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21802 "TestWebScrapping::test_session"
21803 ;; Assertion is not equal.
21804 "TestManipulating::test_val_for_textarea"
21805 "TestHTMLParser::test_replaceWith"
21806 "TestHTMLParser::test_replaceWith_with_function"
21807 ;; Network access is required.
21808 "TestWebScrapping::test_get"
21809 "TestWebScrappingEncoding::test_get")))))
21810 (native-inputs
21811 (list python-pytest
21812 python-requests
21813 python-setuptools
21814 python-webob
21815 python-webtest
21816 python-wheel))
21817 (propagated-inputs
21818 (list python-cssselect python-lxml))
21819 (home-page "https://github.com/gawel/pyquery")
21820 (synopsis "Make jQuery-like queries on xml documents")
21821 (description "pyquery allows you to make jQuery queries on xml documents.
21822The API is as much as possible the similar to jQuery. pyquery uses lxml for
21823fast xml and html manipulation.")
21824 (license license:bsd-3)))
21825
21826(define-public python-amqp
21827 (package
21828 (name "python-amqp")
21829 (version "5.1.1")
21830 (source
21831 (origin
21832 (method url-fetch)
21833 (uri (pypi-uri "amqp" version))
21834 (sha256
21835 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21836 (build-system pyproject-build-system)
21837 (arguments
21838 (list ; Integration tests require network connectivity.
21839 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21840 (native-inputs (list python-pytest python-setuptools python-wheel))
21841 (propagated-inputs (list python-vine))
21842 (home-page "https://github.com/celery/py-amqp")
21843 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21844 (description
21845 "This is a fork of amqplib which was originally written by Barry Pederson.
21846It is maintained by the Celery project, and used by kombu as a pure python
21847alternative when librabbitmq is not available.")
21848 (license license:lgpl2.1+)))
21849
21850(define-public python-benchmark-4dn
21851 (package
21852 (name "python-benchmark-4dn")
21853 (version "0.5.24")
21854 (source (origin
21855 (method url-fetch)
21856 (uri (pypi-uri "benchmark_4dn" version))
21857 (sha256
21858 (base32
21859 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21860 (properties '(("upstream-name" . "benchmark_4dn")))
21861 (build-system pyproject-build-system)
21862 ;; There are none.
21863 (arguments (list #:tests? #false))
21864 (native-inputs
21865 (list python-poetry-core))
21866 (home-page "https://github.com/SooLee/Benchmark/")
21867 (synopsis "Benchmark functions for CWL workflows")
21868 (description
21869 "This package provides benchmark functions that return total space, memory,
21870CPUs required per given input size, and parameters for CWL workflows.")
21871 (license license:expat)))
21872
21873(define-public python-beniget
21874 (package
21875 (name "python-beniget")
21876 (version "0.5.0")
21877 (source
21878 (origin
21879 (method url-fetch)
21880 (uri (pypi-uri "beniget" version))
21881 (sha256
21882 (base32 "08ig66dp3xjl3nhqlpdkv0bl1m0m5mr1x2yrncz3vpn7ivx13bz7"))))
21883 (build-system pyproject-build-system)
21884 (native-inputs
21885 (list python-pytest
21886 python-setuptools))
21887 (propagated-inputs
21888 (list python-gast))
21889 (home-page "https://github.com/serge-sans-paille/beniget")
21890 (synopsis "Extract semantic information about static Python code")
21891 (description
21892 "Beniget is a collection of analyzers for Python @acronym{AST,
21893Abstract Syntax Tree}. It is a building block for writing a static analyzer
21894or compiler for Python.")
21895 (license license:bsd-3)))
21896
21897(define-public python-kombu
21898 (package
21899 (name "python-kombu")
21900 (version "5.6.2")
21901 (source
21902 (origin
21903 (method git-fetch)
21904 (uri (git-reference
21905 (url "https://github.com/celery/kombu")
21906 (commit (string-append "v" version))))
21907 (file-name (git-file-name name version))
21908 (sha256
21909 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21910 (build-system pyproject-build-system)
21911 (arguments
21912 (list
21913 ;; tests: 854 passed, 193 skipped
21914 #:test-flags
21915 #~(list
21916 ;; TODO: Package azure-identity (required for this file)
21917 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21918 ;; XXX: Requires google-cloud-pubsub.
21919 "--ignore=t/unit/transport/test_gcpubsub.py"
21920 ;; XXX: Requires pyro, see:
21921 ;; <https://codeberg.org/guix/guix/issues/5857>
21922 "--ignore=t/unit/transport/test_pyro.py")
21923 #:phases
21924 #~(modify-phases %standard-phases
21925 (add-after 'unpack 'relax-requirements
21926 (lambda _
21927 (substitute* "requirements/default.txt"
21928 (("tzdata>=2025.2")
21929 "tzdata>=2025.1")))))))
21930 (native-inputs
21931 (list python-botocore
21932 python-pytest
21933 python-pytest-freezer
21934 python-pytest-sugar
21935 python-setuptools))
21936 (propagated-inputs
21937 (list python-amqp
21938 python-packaging
21939 python-tzdata
21940 python-vine))
21941 (home-page "https://kombu.readthedocs.io")
21942 (synopsis "Message passing library for Python")
21943 (description
21944 "The aim of Kombu is to make messaging in Python as easy as possible by
21945providing an idiomatic high-level interface for the AMQ protocol, and also
21946provide proven and tested solutions to common messaging problems. AMQP is the
21947Advanced Message Queuing Protocol, an open standard protocol for message
21948orientation, queuing, routing, reliability and security, for which the
21949RabbitMQ messaging server is the most popular implementation.")
21950 (license license:bsd-3)))
21951
21952(define-public python-billiard
21953 (package
21954 (name "python-billiard")
21955 (version "4.2.2")
21956 (source
21957 (origin
21958 (method git-fetch)
21959 (uri (git-reference
21960 (url "https://github.com/celery/billiard")
21961 (commit (string-append "v" version))))
21962 (file-name (git-file-name name version))
21963 (sha256
21964 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21965 (build-system pyproject-build-system)
21966 (arguments
21967 (list
21968 #:phases
21969 #~(modify-phases %standard-phases
21970 (add-after 'unpack 'remove-win-files
21971 (lambda _
21972 (for-each delete-file-recursively
21973 '("billiard/popen_spawn_win32.py"
21974 "billiard/_win.py")))))))
21975 (native-inputs (list python-psutil python-pytest python-setuptools))
21976 (home-page "https://github.com/celery/billiard")
21977 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21978 (description
21979 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21980multiprocessing package itself is a renamed and updated version of R Oudkerk's
21981pyprocessing package. This standalone variant is intended to be compatible with
21982Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21983 (license license:bsd-3)))
21984
21985(define-public python-celery
21986 (package
21987 (name "python-celery")
21988 (version "5.6.3")
21989 (source
21990 (origin
21991 (method url-fetch)
21992 (uri (pypi-uri "celery" version))
21993 (sha256
21994 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21995 (build-system pyproject-build-system)
21996 (arguments
21997 (list
21998 ;; tests: 3362 passed, 38 skipped, 10 deselected, 3 xfailed, 63
21999 ;; warnings, 28808 subtests passed
22000 #:test-flags
22001 ;; The MongoDB backend test appears to expect an older version of
22002 ;; MongoDB which provided its own bson module, fails with "
22003 ;; AttributeError: module 'bson' has no attribute 'encode'".
22004 #~(list "--ignore=t/unit/backends/test_mongodb.py"
22005 ;; XXX: Requires google-cloud-firestore
22006 "--ignore=t/unit/backends/test_gcs.py"
22007 "-k" (string-join
22008 (list ;; AssertionError.
22009 "not test_check_privileges_no_fchown"
22010 ;; These 3 tests error out on ci.guix.gnu.org with
22011 ;; OSError: [Errno 24] Too many open files
22012 "test_register_with_event_loop__no_on_tick_dupes"
22013 "test_with_autoscaler_file_descriptor_safety"
22014 "test_with_file_descriptor_safety"
22015 ;; XXX: Fails to compare local timezones.
22016 "test_use_local_timezone"
22017 ;; assert 'No such option: --ini' in <...>
22018 "test_preload_options[subcommand_with_params0]"
22019 "test_preload_options[subcommand_with_params1]")
22020 " and not "))))
22021 (native-inputs
22022 (list python-azure-core
22023 python-dnspython
22024 python-flaky
22025 python-gevent
22026 python-google-cloud-storage
22027 python-iniconfig
22028 python-moto
22029 python-msgpack
22030 python-pymongo
22031 python-pytest
22032 python-pytest-celery
22033 python-pytest-click
22034 python-pytest-order
22035 python-pytest-timeout
22036 python-redis
22037 python-setuptools))
22038 (propagated-inputs
22039 (list python-billiard
22040 python-click
22041 python-click-didyoumean
22042 python-click-plugins
22043 python-click-repl
22044 python-dateutil
22045 python-kombu
22046 python-tzlocal
22047 python-vine))
22048 (home-page "https://celeryproject.org")
22049 (synopsis "Distributed Task Queue")
22050 (description
22051 "Celery is an asynchronous task queue/job queue based on distributed
22052message passing. It is focused on real-time operation, but supports
22053scheduling as well. The execution units, called tasks, are executed
22054concurrently on a single or more worker servers using multiprocessing,
22055Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
22056synchronously (wait until ready).")
22057 (license license:bsd-3)))
22058
22059;; A bare minimal package, mainly to use in tests and reduce closure
22060;; size. Tests are left out in the main package to slim down native-inputs.
22061(define-public python-celery-minimal
22062 (package/inherit python-celery
22063 (name "python-celery-minimal")
22064 (arguments
22065 (list #:tests? #f))
22066 (native-inputs
22067 (list python-setuptools))))
22068
22069(define-public python-anyqt
22070 (package
22071 (name "python-anyqt")
22072 (version "0.2.1")
22073 (source
22074 (origin
22075 (method git-fetch)
22076 (uri (git-reference
22077 (url "https://github.com/ales-erjavec/anyqt")
22078 (commit version)))
22079 (file-name (git-file-name name version))
22080 (sha256
22081 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
22082 (build-system pyproject-build-system)
22083 (arguments
22084 (list
22085 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
22086 ;; TODO Add/configure the right Qt inputs.
22087 #:test-flags
22088 #~(list "--ignore-glob=tests/test_q*.py")
22089 #:phases
22090 #~(modify-phases %standard-phases
22091 (add-after 'unpack 'delete-files
22092 ;; Delete files related to other operating systems.
22093 (lambda _
22094 (delete-file "AnyQt/QtMacExtras.py")
22095 (delete-file "AnyQt/QtWinExtras.py"))))))
22096 (native-inputs
22097 (list python-pyqt-6
22098 python-pytest
22099 python-pytest-qt
22100 python-setuptools))
22101 (home-page "https://github.com/ales-erjavec/anyqt")
22102 (synopsis "PyQt compatibility layer")
22103 (description
22104 "This package provides a PyQt/PySide compatibility layer. More precisely,
22105it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
22106PySide, PySide2.")
22107 (license license:gpl3)))
22108
22109(define-public python-qasync
22110 (package
22111 (name "python-qasync")
22112 (version "0.28.0")
22113 (source
22114 (origin
22115 (method git-fetch)
22116 (uri (git-reference
22117 (url "https://github.com/CabbageDevelopment/qasync/")
22118 (commit (string-append "v" version))))
22119 (file-name (git-file-name name version))
22120 (sha256
22121 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
22122 (build-system pyproject-build-system)
22123 (arguments
22124 (list
22125 #:phases
22126 #~(modify-phases %standard-phases
22127 (add-before 'check 'set-qpa
22128 (lambda _
22129 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
22130 (native-inputs
22131 (list python-pytest python-uv-build))
22132 (propagated-inputs
22133 (list python-pyqt-6))
22134 (home-page "https://github.com/CabbageDevelopment/qasync")
22135 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
22136 (description
22137 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
22138by providing an implementation of the PEP 3156 event-loop.")
22139 (license license:bsd-2)))
22140
22141(define-public python-editor
22142 (package
22143 (name "python-editor")
22144 (version "1.8.0")
22145 (source
22146 (origin
22147 (method git-fetch)
22148 (uri (git-reference
22149 (url "https://github.com/rec/editor")
22150 (commit (string-append "v" version))))
22151 (file-name (git-file-name name version))
22152 (sha256
22153 (base32 "0xc8p92n7lsgaah0xbaxyml2l8mfajb7v8kdiwy5rw6mh3phbwlr"))))
22154 (build-system pyproject-build-system)
22155 (native-inputs (list python-hatchling python-pytest python-tdir))
22156 (propagated-inputs (list python-runs python-xmod))
22157 (home-page "https://rec.github.io/editor/")
22158 (synopsis "Open the default text editor")
22159 (description
22160 "@code{editor} opens the default text editor to edit an existing file, a
22161new file, or a tempfile, blocks while the user edits text, then returns the
22162contents of the file.")
22163 (license license:expat)))
22164
22165(define-public python-multiprocessing-logging
22166 (package
22167 (name "python-multiprocessing-logging")
22168 (version "0.3.4")
22169 (home-page "https://github.com/jruere/multiprocessing-logging")
22170 (source
22171 (origin
22172 (method git-fetch)
22173 (uri (git-reference
22174 (url home-page)
22175 (commit (string-append "v" version))))
22176 (file-name (git-file-name name version))
22177 (sha256
22178 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
22179 (build-system pyproject-build-system)
22180 (arguments (list #:test-backend #~'unittest))
22181 (native-inputs (list python-setuptools))
22182 (synopsis "Manage logs from multiple processes")
22183 (description
22184 "This Python module implements a multiprocessing-aware @code{Handler}
22185that, when set on the root @code{Logger}, will tunnel log records to the
22186main process so that they are handled correctly.")
22187 (license license:lgpl3+)))
22188
22189(define-public python-munkres
22190 (package
22191 (name "python-munkres")
22192 (version "1.1.4")
22193 (source
22194 (origin
22195 (method url-fetch)
22196 (uri (pypi-uri "munkres" version))
22197 (sha256
22198 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
22199 (build-system pyproject-build-system)
22200 (arguments
22201 (list
22202 ;; See https://github.com/bmc/munkres/issues/40
22203 #:test-flags
22204 (if (member (%current-system) %32bit-supported-systems)
22205 #~(list "-k" "not test_profit_float")
22206 #~(list))))
22207 (native-inputs (list python-pytest python-setuptools))
22208 (home-page "https://software.clapper.org/munkres/")
22209 (synopsis "Implementation of the Munkres algorithm")
22210 (description
22211 "The Munkres module provides an implementation of the Munkres algorithm
22212(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
22213for solving the Assignment Problem.")
22214 (license license:bsd-3)))
22215
22216(define-public python-codespell
22217 (package
22218 (name "python-codespell")
22219 (version "2.4.3")
22220 (source
22221 (origin
22222 (method git-fetch)
22223 (uri (git-reference
22224 (url "https://github.com/codespell-project/codespell")
22225 (commit (string-append "v" version))))
22226 (file-name (git-file-name name version))
22227 (sha256
22228 (base32 "1c1wnl14af496s5iwsc0bp6pg4i8yankr7wvxxb66dc8s87n2rd1"))))
22229 (build-system pyproject-build-system)
22230 (native-inputs
22231 (list python-pygments
22232 python-pytest
22233 python-pytest-dependency
22234 python-setuptools
22235 python-setuptools-scm))
22236 (propagated-inputs
22237 (list python-chardet))
22238 (home-page "https://github.com/codespell-project/codespell/")
22239 (synopsis "Spellchecker for code")
22240 (description
22241 "Codespell fixes common misspellings in text files. It's designed
22242primarily for checking misspelled words in source code, but it can be used
22243with other files as well. It does not check for word membership in a complete
22244dictionary, but instead looks for a set of common misspellings. Therefore it
22245should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
22246also means it shouldn't generate false-positives when you use a niche term it
22247doesn't know about.")
22248 (license
22249 (list
22250 ; for codespell and codespell_lib
22251 license:gpl2
22252 ; for dictionary*.txt
22253 license:cc-by-sa3.0))))
22254
22255(define-public python-jellyfish
22256 (package
22257 (name "python-jellyfish")
22258 (version "1.2.1")
22259 (source
22260 (origin
22261 (method git-fetch)
22262 (uri (git-reference
22263 (url "https://github.com/jamesturk/jellyfish")
22264 (commit (string-append "v" version))))
22265 (file-name (git-file-name name version))
22266 (sha256
22267 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
22268 (build-system pyproject-build-system)
22269 (arguments
22270 (list
22271 #:imported-modules (append %cargo-build-system-modules
22272 %pyproject-build-system-modules)
22273 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
22274 (guix build pyproject-build-system)
22275 (guix build utils))
22276 #:phases
22277 #~(modify-phases %standard-phases
22278 (add-after 'unpack 'prepare-cargo-build-system
22279 (lambda args
22280 (for-each
22281 (lambda (phase)
22282 (format #t "Running cargo phase: ~a~%" phase)
22283 (apply (assoc-ref cargo:%standard-phases phase)
22284 #:cargo-target #$(cargo-triplet)
22285 args))
22286 '(unpack-rust-crates
22287 configure
22288 check-for-pregenerated-files
22289 patch-cargo-checksums)))))))
22290 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
22291 (native-inputs
22292 (append
22293 (list python-pytest
22294 python-setuptools
22295 rust
22296 `(,rust "cargo"))
22297 (or (and=> (%current-target-system)
22298 (compose list make-rust-sysroot))
22299 '())))
22300 (home-page "https://www.jpt.sh/projects/jellyfish/")
22301 (synopsis "Approximate and phonetic matching of strings")
22302 (description "Jellyfish uses a variety of string comparison and phonetic
22303encoding algorithms to do fuzzy string matching.")
22304 (license license:bsd-2)))
22305
22306(define-public python-pdfminer-six
22307 (package
22308 (name "python-pdfminer-six")
22309 (version "20260107")
22310 ;; There are no tests in the PyPI tarball.
22311 (source
22312 (origin
22313 (method git-fetch)
22314 (uri (git-reference
22315 (url "https://github.com/pdfminer/pdfminer.six")
22316 (commit version)))
22317 (file-name (git-file-name name version))
22318 (sha256
22319 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
22320 (build-system pyproject-build-system)
22321 (arguments
22322 (list #:phases
22323 #~(modify-phases %standard-phases
22324 ;; Tests write to the source tree.
22325 (add-after 'unpack 'make-git-checkout-writable
22326 (lambda _
22327 (for-each make-file-writable (find-files ".")))))))
22328 (propagated-inputs
22329 (list python-charset-normalizer python-cryptography))
22330 (native-inputs
22331 (list python-pytest python-setuptools python-setuptools-scm))
22332 (home-page "https://github.com/pdfminer/pdfminer.six")
22333 (synopsis "PDF parser and analyzer")
22334 (description "@code{pdfminer.six} is a community maintained fork of
22335the original PDFMiner. It is a tool for extracting information from PDF
22336documents. It focuses on getting and analyzing text data. Pdfminer.six
22337extracts the text from a page directly from the sourcecode of the PDF. It
22338can also be used to get the exact location, font or color of the text.")
22339 (license license:expat)))
22340
22341(define-public python-rarfile
22342 (package
22343 (name "python-rarfile")
22344 (version "4.2")
22345 (source
22346 (origin
22347 (method git-fetch)
22348 (uri (git-reference
22349 (url "https://github.com/markokr/rarfile")
22350 (commit (string-append "v" version))))
22351 (file-name (git-file-name name version))
22352 (sha256
22353 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
22354 (build-system pyproject-build-system)
22355 (arguments
22356 (list
22357 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
22358 #:phases
22359 #~(modify-phases %standard-phases
22360 (add-after 'unpack 'patch
22361 (lambda* (#:key inputs #:allow-other-keys)
22362 (substitute* "rarfile.py"
22363 ;; Disable unrar and unar, which are unavailable on Guix.
22364 (("(unrar|unar)=True" all tool)
22365 (string-append tool "=False"))
22366 ;; Hardcode path to bsdtar
22367 (("\"bsdtar\"")
22368 (format #f "~s"
22369 (search-input-file inputs "bin/bsdtar")))))))))
22370 (native-inputs (list python-pytest python-setuptools))
22371 (inputs (list libarchive))
22372 (home-page "https://github.com/markokr/rarfile")
22373 (synopsis "RAR archive reader for Python")
22374 (description
22375 "This is Python module for RAR archive reading. The interface is made as
22376zipfile like as possible.")
22377 (license license:isc)))
22378
22379(define-public python-rassumfrassum
22380 (package
22381 (name "python-rassumfrassum")
22382 (version "0.3.3")
22383 (source
22384 (origin
22385 (method git-fetch)
22386 (uri (git-reference
22387 (url "https://github.com/joaotavora/rassumfrassum")
22388 (commit (string-append "v" version))))
22389 (file-name (git-file-name name version))
22390 (sha256
22391 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
22392 (build-system pyproject-build-system)
22393 (arguments
22394 (list
22395 #:phases
22396 #~(modify-phases %standard-phases
22397 (replace 'check
22398 (lambda* (#:key tests? #:allow-other-keys)
22399 (when tests?
22400 (invoke "test/run-all.sh")))))))
22401 (native-inputs (list python-setuptools))
22402 (home-page "https://github.com/joaotavora/rassumfrassum")
22403 (synopsis "Connect an LSP client to multiple LSP servers")
22404 (description
22405 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22406 (license license:gpl3+)))
22407
22408(define-public python-slugid
22409 (package
22410 (name "python-slugid")
22411 (version "2.0.0")
22412 (source
22413 (origin
22414 (method git-fetch)
22415 (uri (git-reference
22416 (url "https://github.com/taskcluster/slugid.py")
22417 (commit (string-append "v" version))))
22418 (file-name (git-file-name name version))
22419 (sha256
22420 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22421 (build-system pyproject-build-system)
22422 (arguments (list #:test-backend #~'nose))
22423 (native-inputs (list python-pynose python-setuptools))
22424 (home-page "http://taskcluster.github.io/slugid.py")
22425 (synopsis "Module for Base64 encoded UUID v4 slugs")
22426 (description
22427 "This package provides a module for generating v4 UUIDs and encoding them
22428into 22 character URL-safe base64 slug representation.")
22429 (license license:mpl2.0)))
22430
22431(define-public python-rich
22432 (package
22433 (name "python-rich")
22434 (version "15.0.0")
22435 (source
22436 (origin
22437 (method git-fetch)
22438 (uri (git-reference
22439 (url "https://github.com/willmcgugan/rich")
22440 (commit (string-append "v" version))))
22441 (file-name (git-file-name name version))
22442 (sha256
22443 (base32 "1qs8n1hcjxcpwbfjjlzfmywfczxzcpvjkk3ay04kdbi1lvlynkaj"))))
22444 (build-system pyproject-build-system)
22445 ;; The test_brokenpipeerror is flaky.
22446 (arguments (list #:test-flags #~(list "-k" "not test_brokenpipeerror")))
22447 (native-inputs
22448 (list python-poetry-core
22449 python-pytest
22450 which))
22451 (propagated-inputs
22452 (list python-markdown-it-py
22453 python-pygments))
22454 (home-page "https://github.com/willmcgugan/rich")
22455 (synopsis "Render rich text and more to the terminal")
22456 (description
22457 "This is a Python package for rendering rich text, tables, progress bars,
22458syntax highlighting, markdown and more to the terminal.")
22459 (license license:expat)))
22460
22461(define-public python-rich-click
22462 (package
22463 (name "python-rich-click")
22464 (version "1.9.8")
22465 (source
22466 (origin
22467 (method git-fetch)
22468 (uri (git-reference
22469 (url "https://github.com/ewels/rich-click")
22470 (commit (string-append "v" version))))
22471 (file-name (git-file-name name version))
22472 (sha256
22473 (base32 "1xgsblpkp4f43y579614n6cp8br2acms8vdj8gpqxa05csap0fqn"))))
22474 (build-system pyproject-build-system)
22475 (arguments
22476 (list
22477 #:test-flags
22478 ;; python-typer 0.26 vendored python-click and broke a lot of things.
22479 ;; See <https://github.com/ewels/rich-click/issues/330> and
22480 ;; <https://github.com/ewels/rich-click/commit/989c38cf4ed918a25fa523c8191c66b42315cb10>.
22481 ;; 136 passed, 6 skipped, 6 deselected
22482 #~(list "-k" "not _typer_")))
22483 (native-inputs
22484 (list python-inline-snapshot
22485 python-pytest
22486 python-setuptools
22487 python-typer))
22488 (propagated-inputs
22489 (list python-click
22490 python-rich))
22491 (home-page "https://github.com/ewels/rich-click")
22492 (synopsis "Format click help output nicely with rich")
22493 (description "Click is a \"Python package for creating beautiful command
22494line interfaces\". Rich is a \"Python library for rich text and beautiful
22495formatting in the terminal\". The intention of rich-click is to provide
22496attractive help output from click, formatted with rich, with minimal
22497customization required.")
22498 (license license:expat)))
22499
22500(define-public python-magic
22501 (package
22502 (name "python-magic")
22503 (version "0.4.27")
22504 (home-page "https://github.com/ahupp/python-magic")
22505 (source
22506 (origin
22507 (method git-fetch)
22508 (uri (git-reference (url home-page) (commit version)))
22509 (file-name (git-file-name name version))
22510 (sha256
22511 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22512 (build-system pyproject-build-system)
22513 (arguments
22514 (list
22515 #:test-backend #~'custom
22516 #:test-flags #~(list "test/libmagic_test.py")
22517 #:phases
22518 #~(modify-phases %standard-phases
22519 (add-after 'unpack 'fix-tests
22520 (lambda _
22521 ;; Adjust expected output for [email protected].
22522 (substitute* "test/libmagic_test.py"
22523 (("PDF document, version 1\\.2, 2 pages")
22524 "PDF document, version 1.2, 2 page(s)"))))
22525 ;; Replace a specific method call with a hard-coded path to the
22526 ;; necessary libmagic.so file in the store.
22527 (add-before 'build 'hard-code-path-to-libmagic
22528 (lambda* (#:key inputs #:allow-other-keys)
22529 (substitute* "magic/loader.py"
22530 (("find_library\\('magic'\\)")
22531 (format #f "~s"
22532 (search-input-file inputs "lib/libmagic.so")))))))))
22533 (native-inputs (list which python-setuptools))
22534 (inputs
22535 ;; python-magic needs to be able to find libmagic.so.
22536 (list file))
22537 (synopsis "File type identification using libmagic")
22538 (description
22539 "This module uses ctypes to access the libmagic file type identification
22540library. It makes use of the local magic database and supports both textual
22541and MIME-type output. Note that this module and the python-file module both
22542provide a \"magic.py\" file; these two modules, which are different and were
22543developed separately, both serve the same purpose: to provide Python bindings
22544for libmagic.")
22545 (license license:expat)))
22546
22547(define-public python-securetar
22548 (package
22549 (name "python-securetar")
22550 (version "2025.1.4")
22551 (source
22552 (origin
22553 (method git-fetch)
22554 (uri (git-reference
22555 (url "https://github.com/pvizeli/securetar")
22556 (commit version)))
22557 (file-name (git-file-name name version))
22558 (sha256
22559 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22560 (build-system pyproject-build-system)
22561 (native-inputs (list python-setuptools python-wheel python-pytest))
22562 (propagated-inputs (list python-cryptography))
22563 (home-page "https://github.com/pvizeli/securetar")
22564 (synopsis "Python module to handle tarfile backups")
22565 (description
22566 "This library provides a streaming wrapper around python tarfile and allow
22567secure handling files and support encryption.")
22568 (license license:asl2.0)))
22569
22570(define-public python-pkgconfig
22571 (package
22572 (name "python-pkgconfig")
22573 (version "1.6.0")
22574 (source
22575 (origin
22576 (method git-fetch)
22577 (uri (git-reference
22578 (url "https://github.com/matze/pkgconfig")
22579 (commit (string-append "v" version))))
22580 (file-name (git-file-name name version))
22581 (sha256
22582 (base32 "0xlfghjbx04gls3ad1ncggpi4xvjxcirrm3bamv5gp9wv3z5ln8s"))))
22583 (build-system pyproject-build-system)
22584 (arguments
22585 (list
22586 #:phases
22587 #~(modify-phases %standard-phases
22588 (add-after 'unpack 'fix-test-data
22589 (lambda _
22590 (substitute* "tests/data/fake-openssl.pc"
22591 (("Requires: libssl libcrypto") ""))))
22592 (add-before 'build 'set-pkg-config-path
22593 (lambda* (#:key inputs #:allow-other-keys)
22594 (setenv "PKG_CONFIG"
22595 (search-input-file inputs "/bin/pkg-config"))
22596 (substitute* "src/pkgconfig/pkgconfig.py"
22597 (("'pkg-config'")
22598 (format #f "~s"
22599 (search-input-file inputs "/bin/pkg-config")))))))))
22600 (native-inputs (list python-poetry-core python-pytest))
22601 (inputs (list pkg-config))
22602 (home-page "https://github.com/matze/pkgconfig")
22603 (synopsis "Python interface for pkg-config")
22604 (description "This module provides a Python interface to pkg-config. It
22605can be used to find all pkg-config packages, check if a package exists,
22606check if a package meets certain version requirements, query CFLAGS and
22607LDFLAGS and parse the output to build extensions with setup.py.")
22608 (license license:expat)))
22609
22610;; This package is unmaintained since 2014, but still used in `khmer'.
22611(define-public python-bz2file
22612 (package
22613 (name "python-bz2file")
22614 (version "0.98")
22615 (source
22616 (origin
22617 (method url-fetch)
22618 (uri (pypi-uri "bz2file" version))
22619 (sha256
22620 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22621 (build-system pyproject-build-system)
22622 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22623 (native-inputs (list python-setuptools))
22624 (home-page "https://github.com/nvawda/bz2file")
22625 (synopsis "Read and write bzip2-compressed files")
22626 (description
22627 "Bz2file is a Python library for reading and writing bzip2-compressed
22628files. It contains a drop-in replacement for the I/O interface in the
22629standard library's @code{bz2} module, including features from the latest
22630development version of CPython that are not available in older releases.")
22631 (license license:asl2.0)))
22632
22633(define-public python-future
22634 (package
22635 (name "python-future")
22636 (version "1.0.0")
22637 (source
22638 (origin
22639 (method url-fetch)
22640 (uri (pypi-uri "future" version))
22641 (sha256
22642 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22643 (build-system pyproject-build-system)
22644 (arguments
22645 (list
22646 #:test-flags
22647 ;; Self tests failed.
22648 #~(list "--ignore=tests/test_future/test_futurize.py"
22649 "-k" (string-join
22650 ;; Self tests failed.
22651 (list "not test_division"
22652 "test_functions_unchanged"
22653 "test_mixed_annotations"
22654 "test_multiple_param_annotations"
22655 "test_print"
22656 "test_range_slice"
22657 ;; Network access is required.
22658 "test_ftp"
22659 "test_main"
22660 "test_moves_urllib_request_http"
22661 "test_urllib_request_http"
22662 ;; Tests failing on Python 3.12
22663 "test_converting_drive_letter"
22664 "test_converting_drive_letter"
22665 "test_converting_when_no_drive_letter"
22666 "test_converting_when_no_drive_letter"
22667 "test_converting_when_no_drive_letter"
22668 "test_converting_when_no_drive_letter"
22669 "test_isinstance_recursion_limit"
22670 "test_roundtrip_pathname2url"
22671 "test_roundtrip_pathname2url"
22672 "test_roundtrip_url2pathname"
22673 "test_roundtrip_url2pathname"
22674 "test_subclass_recursion_limit")
22675 " and not "))))
22676 (native-inputs
22677 (list python-pytest
22678 python-setuptools))
22679 (home-page "https://python-future.org")
22680 (synopsis "Single-source support for Python 3 and 2")
22681 (description
22682 "@code{python-future} is the missing compatibility layer between Python 2
22683and Python 3. It allows you to use a single, clean Python 3.x-compatible
22684codebase to support both Python 2 and Python 3 with minimal overhead.")
22685 (license license:expat)))
22686
22687(define-public python-cysignals
22688 (package
22689 (name "python-cysignals")
22690 (version "1.12.3")
22691 (source
22692 (origin
22693 (method url-fetch)
22694 (uri (pypi-uri "cysignals" version))
22695 (sha256
22696 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22697 (build-system pyproject-build-system)
22698 (native-inputs (list python-meson
22699 python-cython
22700 python-pytest))
22701 (home-page "https://github.com/sagemath/cysignals")
22702 (synopsis "Handling of interrupts and signals for Cython")
22703 (description
22704 "The cysignals package provides mechanisms to handle interrupts (and
22705other signals and errors) in Cython code, using two related approaches,
22706for mixed Cython/Python code or external C libraries and pure Cython code,
22707respectively.")
22708 (license license:lgpl3+)))
22709
22710(define-public python-rope
22711 (package
22712 (name "python-rope")
22713 (version "1.13.0")
22714 (source
22715 (origin
22716 (method url-fetch)
22717 (uri (pypi-uri "rope" version))
22718 (sha256
22719 (base32
22720 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22721 (build-system pyproject-build-system)
22722 (arguments
22723 (list
22724 #:test-flags
22725 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22726 (propagated-inputs (list python-pytoolconfig))
22727 (native-inputs
22728 (list python-pytest python-pytest-timeout python-setuptools))
22729 (home-page "https://github.com/python-rope/rope")
22730 (synopsis "Refactoring library for Python")
22731 (description
22732 "Rope is a refactoring library for Python. It facilitates the renaming,
22733moving and extracting of attributes, functions, modules, fields and parameters
22734in Python source code. These refactorings can also be applied to occurrences
22735in strings and comments.")
22736 (license license:lgpl3+)))
22737
22738(define-public python-py3status
22739 (package
22740 (name "python-py3status")
22741 (version "3.62")
22742 (source
22743 (origin
22744 (method git-fetch)
22745 (uri (git-reference
22746 (url "https://github.com/ultrabug/py3status")
22747 (commit version)))
22748 (file-name (git-file-name name version))
22749 (sha256
22750 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22751 (build-system pyproject-build-system)
22752 (arguments
22753 (list
22754 #:phases
22755 #~(modify-phases %standard-phases
22756 (add-before 'build 'hardcode-file-path
22757 (lambda* (#:key inputs #:allow-other-keys)
22758 (substitute* "py3status/parse_config.py"
22759 (("\\[\"file\", \"-b\"")
22760 (format #f "[~s, \"-b\""
22761 (search-input-file inputs "bin/file")))))))))
22762 (native-inputs (list python-hatchling python-pytest))
22763 (inputs (list file))
22764 (home-page "https://github.com/ultrabug/py3status")
22765 (synopsis "Extensible i3status wrapper written in Python")
22766 (description
22767 "py3status is an i3status wrapper which extends i3status functionality in
22768a modular way, allowing you to extend your panel with your own code,
22769responding to click events and updating clock every second.")
22770 (license license:bsd-3)))
22771
22772(define-public python-greenlet
22773 (package
22774 (name "python-greenlet")
22775 (version "3.5.1")
22776 (source
22777 (origin
22778 (method git-fetch)
22779 (uri (git-reference
22780 (url "https://github.com/python-greenlet/greenlet")
22781 (commit version)))
22782 (file-name (git-file-name name version))
22783 (sha256
22784 (base32 "1hvnpkmd9r9li62p5gmidkyq4zazi5adw5c2cah8w2f4n47zg7ix"))))
22785 (build-system pyproject-build-system)
22786 (arguments
22787 (list
22788 #:test-flags #~(list "--pyargs" "greenlet")
22789 #:phases
22790 #~(modify-phases %standard-phases
22791 (add-before 'check 'remove-local-source
22792 (lambda _
22793 (delete-file-recursively "src/greenlet"))))))
22794 (native-inputs
22795 (list python-objgraph
22796 python-pytest
22797 python-psutil
22798 python-setuptools))
22799 (home-page "https://greenlet.readthedocs.io/")
22800 (synopsis "Lightweight in-process concurrent programming")
22801 (description
22802 "Greenlet package is a spin-off of Stackless, a version of CPython
22803that supports micro-threads called \"tasklets\". Tasklets run
22804pseudo-concurrently (typically in a single or a few OS-level threads) and
22805are synchronized with data exchanges on \"channels\".")
22806 (license (list license:psfl license:expat))))
22807
22808(define-public python-objgraph
22809 (package
22810 (name "python-objgraph")
22811 (version "3.6.2")
22812 (source
22813 (origin
22814 (method url-fetch)
22815 (uri (pypi-uri "objgraph" version))
22816 (sha256
22817 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22818 (build-system pyproject-build-system)
22819 (arguments
22820 (list
22821 #:test-flags
22822 #~(list "tests.py"
22823 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22824 ;; [], [], [], [], [], [], [], ...
22825 "-k" "not test_at_addrs")))
22826 (native-inputs
22827 (list graphviz
22828 python-pytest
22829 python-setuptools))
22830 (propagated-inputs
22831 (list python-graphviz))
22832 (home-page "https://mg.pov.lt/objgraph/")
22833 (synopsis "Draw Python object reference graphs with graphviz")
22834 (description
22835 "This package provides tools to draw Python object reference graphs with
22836graphviz.")
22837 (license license:expat)))
22838
22839(define-public python-gevent
22840 (package
22841 (name "python-gevent")
22842 (version "24.11.1")
22843 (source (origin
22844 (method url-fetch)
22845 (uri (pypi-uri "gevent" version))
22846 (sha256
22847 (base32
22848 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22849 (modules '((guix build utils)))
22850 (snippet
22851 '(begin
22852 ;; unbunding libev and c-ares
22853 (delete-file-recursively "deps")
22854 ;; Remove cythonized files.
22855 (with-directory-excursion "src/gevent"
22856 (for-each delete-file
22857 (append (list "resolver/cares.c"
22858 "queue.c"
22859 "local.c"
22860 "libev/corecext.h"
22861 "libev/corecext.c"
22862 "greenlet.c"
22863 "event.c"
22864 "_waiter.c"
22865 "_tracer.c"
22866 "_semaphore.c"
22867 "_imap.c"
22868 "_ident.c"
22869 "_hub_primitives.c"
22870 "_hub_local.c"
22871 "_greenlet_primitives.c"
22872 "_abstract_linkable.c")
22873 (find-files "." "\\.html$"))))))))
22874 (build-system pyproject-build-system)
22875 (arguments
22876 (list
22877 #:test-flags
22878 '(list
22879 ;; These tests relies on networking which is
22880 ;; not available in the build container.
22881 "test__getaddrinfo_import.py"
22882 ;; These tests rely on KeyboardInterrupts which do not
22883 ;; work inside the build container for some reason
22884 ;; (lack of controlling terminal?).
22885 "test__issues461_471.py"
22886 ;; TODO: Patch out the tests that use getprotobyname, etc
22887 ;; instead of disabling all the tests from these files.
22888 "test__resolver_dnspython.py"
22889 ;; This test contains 'test_unlink', which
22890 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22891 "test__core_stat.py")
22892 #:phases
22893 #~(modify-phases %standard-phases
22894 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22895 (lambda _
22896 (substitute* "src/gevent/subprocess.py"
22897 (("/bin/sh") (which "sh")))
22898 (for-each (lambda (file)
22899 (substitute* file
22900 (("/bin/sh") (which "sh"))
22901 (("/bin/true") (which "true"))))
22902 (find-files "src/greentest" "\\.py$"))))
22903 (add-before 'build 'do-not-use-bundled-sources
22904 (lambda _
22905 (setenv "GEVENTSETUP_EMBED" "0")
22906
22907 ;; Prevent building bundled libev.
22908 (substitute* "setup.py"
22909 (("run_make=_BUILDING")
22910 "run_make=False"))))
22911 (add-before 'build 'augment-C_INCLUDE_PATH
22912 (lambda* (#:key inputs #:allow-other-keys)
22913 (let* ((python (dirname (dirname
22914 (search-input-file
22915 inputs "bin/python"))))
22916 (version (python-version python))
22917 (greenlet (string-append
22918 #$(this-package-input "python-greenlet")
22919 "/include/python" version)))
22920 (setenv "C_INCLUDE_PATH"
22921 (string-append greenlet "/:"
22922 (or (getenv "C_INCLUDE_PATH")
22923 ""))))))
22924 (add-before 'check 'pretend-to-be-CI
22925 (lambda _
22926 ;; A few tests are skipped due to network constraints or
22927 ;; get longer timeouts when running in a CI environment.
22928 ;; Piggy-back on that, as we need the same adjustments.
22929 (setenv "TRAVIS" "1")
22930 (setenv "APPVEYOR" "1")))
22931 (add-before 'check 'adjust-tests
22932 (lambda* (#:key test-flags #:allow-other-keys)
22933 (call-with-output-file "skipped_tests.txt"
22934 (lambda (port)
22935 (format port "~a~%" (string-join test-flags "\n"))))))
22936 (replace 'check
22937 (lambda* (#:key tests? #:allow-other-keys)
22938 (when tests?
22939 ;; Use the build daemons configured number of workers.
22940 (setenv "NWORKERS" (number->string (parallel-job-count)))
22941 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22942 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22943 (propagated-inputs
22944 (list python-greenlet python-zope-event python-zope-interface))
22945 (native-inputs
22946 (list python-cffi
22947 python-cython
22948 python-dnspython
22949 python-idna
22950 python-objgraph
22951 python-psutil
22952 python-requests
22953 python-setuptools))
22954 (inputs
22955 (list c-ares libev libuv))
22956 (home-page "https://www.gevent.org/")
22957 (synopsis "Coroutine-based network library")
22958 (description
22959 "@code{gevent} is a coroutine-based Python networking library that uses
22960@code{greenlet} to provide a high-level synchronous API on top of the
22961@code{libev} event loop.")
22962 (license license:expat)))
22963
22964(define-public python-fastimport
22965 (package
22966 (name "python-fastimport")
22967 (version "0.9.16")
22968 (source
22969 (origin
22970 (method git-fetch)
22971 (uri (git-reference
22972 (url "https://github.com/jelmer/python-fastimport")
22973 (commit (string-append "v" version))))
22974 (file-name (git-file-name name version))
22975 (sha256
22976 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22977 (build-system pyproject-build-system)
22978 (arguments (list #:test-backend #~'unittest))
22979 (native-inputs (list python-setuptools))
22980 (home-page "https://github.com/jelmer/python-fastimport")
22981 (synopsis "VCS fastimport parser and generator in Python")
22982 (description
22983 "This package provides a parser for and generator of the Git
22984@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22985format.")
22986 (license license:gpl2+)))
22987
22988(define-public python-pika
22989 (package
22990 (name "python-pika")
22991 (version "1.3.2")
22992 (source
22993 (origin
22994 (method git-fetch)
22995 (uri (git-reference
22996 (url "https://github.com/pika/pika")
22997 (commit version)))
22998 (file-name (git-file-name name version))
22999 (sha256
23000 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
23001 (build-system pyproject-build-system)
23002 (arguments
23003 (list
23004 #:test-flags
23005 ;; XXX: These test most likely require a running RabbitMQ server.
23006 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
23007 #:phases
23008 #~(modify-phases %standard-phases
23009 (add-before 'check 'configure-tests
23010 (lambda* (#:key tests? #:allow-other-keys)
23011 (when tests?
23012 (setenv "PYTHONPATH" (getcwd))))))))
23013 (native-inputs (list python-pytest
23014 python-gevent
23015 python-tornado
23016 python-twisted
23017 python-setuptools))
23018 (home-page "https://pika.readthedocs.org")
23019 (synopsis "Pure Python AMQP Client Library")
23020 (description
23021 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
23022Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
23023network support library.")
23024 (license license:bsd-3)))
23025
23026(define-public python-pykka
23027 (package
23028 (name "python-pykka")
23029 (version "4.4.2")
23030 (source
23031 (origin
23032 (method git-fetch)
23033 (uri (git-reference
23034 (url "https://github.com/jodal/pykka")
23035 (commit (string-append "v" version))))
23036 (file-name (git-file-name name version))
23037 (sha256
23038 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
23039 (build-system pyproject-build-system)
23040 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
23041 (home-page "https://pykka.readthedocs.io")
23042 (synopsis "Implementation of the actor model")
23043 (description
23044 "Pykka implements the actor model in Python, which introduces some simple
23045rules to control the sharing of state and cooperation between execution units,
23046and makes it easier to build concurrent applications.")
23047 (license license:asl2.0)))
23048
23049;; WARNING: This package is a dependency of mesa.
23050;; XXX: This project was archived by the owner on Dec 21, 2025. It is now
23051;; read-only. Consider to remove when nothing depends on it.
23052(define-public python-ply
23053 (package
23054 (name "python-ply")
23055 (version "3.11")
23056 (source
23057 (origin
23058 (method url-fetch)
23059 (uri (pypi-uri "ply" version))
23060 (sha256
23061 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
23062 (build-system pyproject-build-system)
23063 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
23064 (native-inputs
23065 (list python-setuptools))
23066 (home-page "http://www.dabeaz.com/ply/")
23067 (synopsis "Python Lex & Yacc")
23068 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
23069It uses LR parsing and does extensive error checking.")
23070 (license license:bsd-3)))
23071
23072(define-public python-kazoo
23073 (package
23074 (name "python-kazoo")
23075 (version "2.10.0")
23076 (source
23077 (origin
23078 (method git-fetch)
23079 (uri (git-reference
23080 (url "https://github.com/python-zk/kazoo")
23081 (commit version)))
23082 (file-name (git-file-name name version))
23083 (sha256
23084 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
23085 (build-system pyproject-build-system)
23086 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
23087 (native-inputs (list python-setuptools))
23088 (home-page "https://kazoo.readthedocs.org")
23089 (synopsis "High-level Zookeeper client library")
23090 (description
23091 "Kazoo is a Python client library for the Apache Zookeeper distributed
23092application service. It is designed to be easy to use and to avoid common
23093programming errors.")
23094 (license license:asl2.0)))
23095
23096(define-public python-columnize
23097 (package
23098 (name "python-columnize")
23099 (version "0.3.11")
23100 (source
23101 (origin
23102 (method url-fetch)
23103 (uri (pypi-uri "columnize" version))
23104 (sha256
23105 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
23106 (build-system pyproject-build-system)
23107 (native-inputs (list python-pytest python-setuptools))
23108 (home-page "https://github.com/rocky/pycolumnize")
23109 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
23110 (description
23111 "This package provides a way to format a simple (i.e. not nested) list
23112into aligned columns.")
23113 (license license:expat)))
23114
23115(define-public python-pysol-cards
23116 (package
23117 (name "python-pysol-cards")
23118 (version "0.24.0")
23119 (source
23120 (origin
23121 (method url-fetch)
23122 (uri (pypi-uri "pysol_cards" version))
23123 (sha256
23124 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
23125 (build-system pyproject-build-system)
23126 (arguments
23127 (list
23128 #:phases
23129 #~(modify-phases %standard-phases
23130 (replace 'check
23131 (lambda* (#:key test-flags tests? #:allow-other-keys)
23132 (when tests?
23133 (apply invoke
23134 "python"
23135 "-m"
23136 "unittest"
23137 "discover"
23138 "tests"
23139 test-flags)))))))
23140 (native-inputs (list python-setuptools python-wheel))
23141 (home-page "https://github.com/shlomif/pysol_cards")
23142 (synopsis "Deal PySol FC Cards")
23143 (description
23144 "The pysol-cards python modules provide code to generate the initial deals of
23145some PySol games.")
23146 (license license:expat)))
23147
23148(define-public python-freecell-solver
23149 (package
23150 (name "python-freecell-solver")
23151 (version "0.6.0")
23152 (source
23153 (origin
23154 (method url-fetch)
23155 (uri (pypi-uri "freecell_solver" version))
23156 (sha256
23157 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
23158 (build-system pyproject-build-system)
23159 (propagated-inputs (list python-cffi))
23160 (native-inputs (list python-pytest python-setuptools))
23161 (home-page "https://pypi.org/project/freecell-solver/")
23162 (synopsis "Freecell Solver bindings")
23163 (description
23164 "This package provides Python bindings for the freecell-solver
23165package. Freecell Solver is a program that automatically solves layouts of
23166Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
23167and Seahaven Towers, as well as Simple Simon boards.")
23168 (license license:expat)))
23169
23170(define-public python-inflection
23171 (package
23172 (name "python-inflection")
23173 (version "0.5.1")
23174 (source
23175 (origin
23176 (method git-fetch)
23177 (uri (git-reference
23178 (url "https://github.com/jpvanhal/inflection")
23179 (commit version)))
23180 (file-name (git-file-name name version))
23181 (sha256
23182 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
23183 (build-system pyproject-build-system)
23184 (native-inputs (list python-pytest python-setuptools))
23185 (home-page "https://github.com/jpvanhal/inflection")
23186 (synopsis "Python string transformation library")
23187 (description
23188 "Inflection is a string transformation library. It singularizes
23189and pluralizes English words, and transforms strings from CamelCase to
23190underscored string.")
23191 (license license:expat)))
23192
23193(define-public python-krb5
23194 (package
23195 (name "python-krb5")
23196 (version "0.5.1")
23197 (source
23198 (origin
23199 (method url-fetch)
23200 (uri (pypi-uri "krb5" version))
23201 (sha256
23202 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
23203 (build-system pyproject-build-system)
23204 (inputs (list mit-krb5))
23205 (native-inputs (list python-cython python-k5test python-pytest
23206 python-setuptools python-wheel))
23207 (home-page "https://github.com/jborean93/pykrb5")
23208 (synopsis "Kerberos API bindings for Python")
23209 (description "This library provides Python functions that wraps the
23210Kerberos 5 C API.")
23211 (license license:expat)))
23212
23213(define-public python-pylev
23214 (package
23215 (name "python-pylev")
23216 (version "1.4.0")
23217 (source
23218 (origin
23219 (method git-fetch)
23220 (uri (git-reference
23221 (url "https://github.com/toastdriven/pylev")
23222 (commit (string-append "v" version))))
23223 (file-name (git-file-name name version))
23224 (sha256
23225 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
23226 (build-system pyproject-build-system)
23227 (arguments
23228 (list
23229 #:test-backend #~'custom
23230 #:test-flags #~(list "tests.py")))
23231 (native-inputs (list python-setuptools))
23232 (home-page "https://github.com/toastdriven/pylev")
23233 (synopsis "Levenshtein distance implementation in Python")
23234 (description
23235 "Pure Python Levenshtein implementation, based off the Wikipedia code
23236samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
23237 (license license:bsd-3)))
23238
23239(define-public python-cleo
23240 (package
23241 (name "python-cleo")
23242 (version "2.1.0")
23243 (source (origin
23244 (method url-fetch)
23245 (uri (pypi-uri "cleo" version))
23246 (sha256
23247 (base32
23248 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
23249 (build-system pyproject-build-system)
23250 (native-inputs
23251 (list python-poetry-core
23252 python-mock
23253 python-pytest-mock
23254 python-pytest))
23255 (propagated-inputs
23256 (list python-crashtest python-rapidfuzz))
23257 (home-page "https://github.com/sdispater/cleo")
23258 (synopsis "Command-line arguments library for Python")
23259 (description
23260 "Cleo allows you to create command-line commands with signature in
23261docstring and colored output.")
23262 (license license:expat)))
23263
23264(define-public python-shellingham
23265 (package
23266 (name "python-shellingham")
23267 (version "1.5.4")
23268 (source
23269 (origin
23270 (method url-fetch)
23271 (uri (pypi-uri "shellingham" version))
23272 (sha256
23273 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
23274 (build-system pyproject-build-system)
23275 (native-inputs
23276 (list python-pytest python-pytest-mock python-setuptools python-wheel))
23277 (home-page "https://github.com/sarugaku/shellingham")
23278 (synopsis "Tool to detect surrounding shell")
23279 (description
23280 "Shellingham detects what shell the current Python executable is
23281running in.")
23282 (license license:isc)))
23283
23284(define-public python-shshsh
23285 (package
23286 (name "python-shshsh")
23287 (version "1.0.5")
23288 (source
23289 (origin
23290 (method git-fetch)
23291 (uri
23292 (git-reference
23293 (url "https://github.com/zqqqqz2000/shshsh")
23294 (commit
23295 "fd21c8696aebaae04507760c16cb45979291fef5")))
23296 (file-name (git-file-name name version))
23297 (sha256
23298 (base32
23299 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
23300 (build-system pyproject-build-system)
23301 (native-inputs
23302 (list python-poetry-core
23303 python-pytest))
23304 (home-page "https://github.com/zqqqqz2000/shshsh")
23305 (synopsis "Write Shell commands simply and safely within Python")
23306 (description "This package provides a way to write Shell commands from
23307within Python. Python functions can be chained together to process input
23308Bash control characters are escapted so that parameters can be passed
23309without worrying about command injection.")
23310 (license license:expat)))
23311
23312(define-public python-memcached
23313 (package
23314 (name "python-memcached")
23315 (version "1.62")
23316 (source
23317 (origin
23318 (method git-fetch)
23319 (uri (git-reference
23320 (url "https://github.com/linsomniac/python-memcached")
23321 (commit version)))
23322 (file-name (git-file-name name version))
23323 (sha256
23324 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
23325 (build-system pyproject-build-system)
23326 (arguments
23327 (list
23328 #:tests? #f ;Requires a connection to a socket.
23329 #:test-backend #~'unittest))
23330 (native-inputs (list python-setuptools))
23331 (home-page "https://github.com/linsomniac/python-memcached")
23332 (synopsis "Pure python memcached client")
23333 (description
23334 "This software is a pure Python interface to the memcached memory cache
23335daemon. It is the client side software which allows storing values in one or
23336more, possibly remote, memcached servers.")
23337 (license license:psfl)))
23338
23339(define-public python-mergedeep
23340 (package
23341 (name "python-mergedeep")
23342 (version "1.3.4")
23343 (source
23344 (origin
23345 (method git-fetch)
23346 (uri (git-reference
23347 (url "https://github.com/clarketm/mergedeep")
23348 (commit (string-append "v" version))))
23349 (file-name (git-file-name name version))
23350 (sha256
23351 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
23352 (build-system pyproject-build-system)
23353 (arguments (list #:test-backend #~'unittest))
23354 (native-inputs (list python-setuptools))
23355 (home-page "https://github.com/clarketm/mergedeep")
23356 (synopsis "Deep merge function for Python")
23357 (description
23358 "This package provides a deep merge function for Python, useful to
23359combine multiple data objects as one.")
23360 (license license:expat)))
23361
23362(define-public python-clikit
23363 (package
23364 (name "python-clikit")
23365 (version "0.6.2")
23366 (source
23367 (origin
23368 (method git-fetch)
23369 (uri (git-reference
23370 (url "https://github.com/sdispater/clikit")
23371 (commit version)))
23372 (file-name (git-file-name name version))
23373 (sha256
23374 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
23375 (build-system pyproject-build-system)
23376 (arguments
23377 (list
23378 #:phases
23379 #~(modify-phases %standard-phases
23380 (add-after 'unpack 'relax-requirements
23381 (lambda _
23382 (substitute* "pyproject.toml"
23383 (("^crashtest.*")
23384 (format #f "crashtest=~s"
23385 #$(package-version
23386 (this-package-input "python-crashtest"))))))))))
23387 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
23388 (propagated-inputs (list python-crashtest python-pastel python-pylev))
23389 (home-page "https://github.com/sdispater/clikit")
23390 (synopsis "Group of utilities to build command line interfaces")
23391 (description
23392 "CliKit is a group of utilities to build testable command line
23393interfaces.")
23394 (license license:expat)))
23395
23396(define-public python-cattrs
23397 (package
23398 (name "python-cattrs")
23399 (version "26.1.0")
23400 (source
23401 (origin
23402 (method git-fetch)
23403 (uri (git-reference
23404 (url "https://github.com/python-attrs/cattrs")
23405 (commit (string-append "v" version))))
23406 (file-name (git-file-name name version))
23407 (sha256
23408 (base32 "0msn1zgv7shlh7nnmhydg7gv6j0y9yy1061f7qcj31jhzd7bnl4b"))))
23409 (build-system pyproject-build-system)
23410 (arguments
23411 (list
23412 ;; tests: 1010 passed, 15 xfailed
23413 #:test-flags
23414 #~(list "-m" "not benchmark"
23415 "--numprocesses" (number->string (parallel-job-count)))
23416 #:phases
23417 #~(modify-phases %standard-phases
23418 (add-after 'unpack 'fix-pytest-config
23419 (lambda _
23420 (substitute* "pyproject.toml"
23421 ;; All options are benchmark related.
23422 (("addopts =.*") "\n")))))))
23423 (native-inputs
23424 (list python-hatchling
23425 python-hatch-vcs
23426 python-immutables
23427 python-pytest
23428 python-pytest-benchmark
23429 python-pytest-xdist))
23430 (propagated-inputs
23431 (list python-attrs
23432 python-typing-extensions
23433 ;; [optional]
23434 python-cbor2
23435 python-msgpack
23436 python-msgspec
23437 python-orjson
23438 python-pymongo ;for the bson module
23439 python-pyyaml
23440 python-tomli-w
23441 python-tomlkit
23442 python-ujson))
23443 (home-page "https://github.com/python-attrs/cattrs")
23444 (synopsis "Python library for structuring and unstructuring data")
23445 (description "@code{cattrs} is an Python library for structuring and
23446unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23447@code{dataclasses} and the usual Python collections, but other kinds of
23448classes can also be supported by manually registering converters.")
23449 (license license:expat)))
23450
23451;; A bare minimal package, mainly to use in tests and reduce closure
23452;; size. Tests are left out in the main package to slim down native-inputs and
23453;; optional propagated-inputs.
23454(define-public python-cattrs-minimal
23455 (package/inherit python-cattrs
23456 (name "python-cattrs-minimal")
23457 (arguments
23458 (substitute-keyword-arguments arguments
23459 ((#:tests? _ #t) #f)))
23460 (native-inputs
23461 (list python-hatchling
23462 python-hatch-vcs))
23463 (propagated-inputs
23464 (list python-attrs
23465 python-typing-extensions))))
23466
23467(define-public python-cachy
23468 (package
23469 (name "python-cachy")
23470 (version "0.3.0")
23471 (source
23472 (origin
23473 (method url-fetch)
23474 (uri (pypi-uri "cachy" version))
23475 (sha256
23476 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23477 (build-system pyproject-build-system)
23478 (arguments
23479 (list
23480 #:phases
23481 #~(modify-phases %standard-phases
23482 (replace 'check
23483 (lambda* (#:key tests? #:allow-other-keys)
23484 (when tests?
23485 ;; Make it compatible with python-flexmock 0.12.
23486 (substitute* (find-files "tests" "\\.py$")
23487 (("from flexmock import flexmock, flexmock_teardown")
23488 (string-append "from flexmock import flexmock\n"
23489 "from flexmock._api import flexmock_teardown")))
23490 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23491 "pytest")))))))
23492 (native-inputs
23493 (list memcached
23494 python-fakeredis
23495 python-flexmock
23496 python-pifpaf
23497 python-pytest
23498 python-setuptools
23499 python-wheel))
23500 (propagated-inputs
23501 (list python-memcached
23502 python-msgpack
23503 python-redis))
23504 (home-page "https://github.com/sdispater/cachy")
23505 (synopsis "Simple yet effective caching library")
23506 (description
23507 "Cachy provides a simple yet effective caching library. A simple but
23508powerful API: thread-safety; decorator syntax; support for memcached, redis,
23509database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23510 (license license:expat)))
23511
23512(define-public python-pyproject-api
23513 (package
23514 (name "python-pyproject-api")
23515 (version "1.10.0")
23516 (source
23517 (origin
23518 (method url-fetch)
23519 (uri (pypi-uri "pyproject_api" version))
23520 (sha256
23521 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23522 (build-system pyproject-build-system)
23523 (native-inputs
23524 (list python-hatch-vcs
23525 python-hatchling
23526 python-pytest
23527 python-pytest-mock
23528 python-setuptools))
23529 (propagated-inputs
23530 (list python-packaging python-tomli))
23531 (home-page "https://pyproject-api.readthedocs.io/latest/")
23532 (synopsis "API to interact with the Python pyproject.toml based projects")
23533 (description
23534 "@code{pyproject-api} aims to abstract away interaction with
23535@code{pyproject.toml} style projects in a flexible way.")
23536 (license license:expat)))
23537
23538(define-public python-lark
23539 (package
23540 (name "python-lark")
23541 (version "1.2.2")
23542 (source
23543 (origin
23544 (method url-fetch)
23545 (uri (pypi-uri "lark" version))
23546 (sha256
23547 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23548 (build-system pyproject-build-system)
23549 (native-inputs (list python-pytest python-setuptools python-wheel))
23550 (home-page "https://github.com/lark-parser/lark")
23551 (synopsis "Multi-language parser for Python")
23552 (description
23553 "Lark is a parser built with a focus on ergonomics, performance and
23554resilience. Lark can parse all context-free languages. That means it is
23555capable of parsing almost any programming language out there, and to
23556some degree most natural languages too.")
23557 (license license:expat)))
23558
23559(define-public python-find-libpython
23560 (package
23561 (name "python-find-libpython")
23562 (version "0.4.1")
23563 (source
23564 (origin
23565 (method git-fetch)
23566 (uri (git-reference
23567 (url "https://github.com/ktbarrett/find_libpython")
23568 (commit (string-append "v" version))))
23569 (file-name (git-file-name name version))
23570 (sha256
23571 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23572 (build-system pyproject-build-system)
23573 (native-inputs (list python-setuptools python-wheel
23574 ;; tests
23575 python-pytest))
23576 (home-page "https://github.com/ktbarrett/find_libpython")
23577 (synopsis "Find the path to the @code{libpython} dynamic library")
23578 (description
23579 "@code{find_libpython} helps find the path to the
23580@code{libpython} dynamic library for the current Python environment. It is
23581both a script and a Python package.")
23582 (license license:expat)))
23583
23584(define-public python-libcst
23585 (package
23586 (name "python-libcst")
23587 (version "1.6.0")
23588 (source (origin
23589 (method url-fetch)
23590 (uri (pypi-uri "libcst" version))
23591 (sha256
23592 (base32
23593 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23594 (snippet
23595 #~(begin (use-modules (guix build utils))
23596 ;; This is mostly to keep the cargo-build-system happy
23597 (with-output-to-file "Cargo.toml"
23598 (lambda ()
23599 (format #t "\
23600[workspace]
23601
23602members = [
23603 \"native\",]")))))))
23604 (build-system cargo-build-system)
23605 (arguments
23606 (list
23607 #:install-source? #false
23608 #:cargo-test-flags
23609 ;; According to .github/workflows/ci.yml
23610 '(list "--manifest-path=native/Cargo.toml"
23611 "--release"
23612 "--no-default-features")
23613 #:imported-modules `(,@%pyproject-build-system-modules
23614 ,@%cargo-build-system-modules)
23615 #:modules `((guix build cargo-build-system)
23616 ((guix build pyproject-build-system) #:prefix py:)
23617 (guix build utils))
23618 #:phases
23619 #~(modify-phases %standard-phases
23620 (add-after 'unpack 'prepare-source
23621 (lambda _
23622 (delete-file "native/Cargo.lock")))
23623 (replace 'build
23624 (assoc-ref py:%standard-phases 'build))
23625 (add-after 'install 'wrap
23626 (lambda _
23627 ;; Collection of python- and pyproject-build-system phases
23628 ;; between 'install and 'check.
23629 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23630 (assoc-ref py:%standard-phases 'add-install-to-path)
23631 (assoc-ref py:%standard-phases 'wrap)
23632 (assoc-ref py:%standard-phases 'create-entrypoints)
23633 (assoc-ref py:%standard-phases 'compile-bytecode)))
23634 ;; We are not the only ones who cannot load libcst.native
23635 ;; during the 'check phase
23636 ;; https://github.com/Instagram/LibCST/issues/1176
23637 ;; (add-after 'wrap 'python-check
23638 ;; (lambda args
23639 ;; (apply (assoc-ref py:%standard-phases 'check)
23640 ;; #:test-flags '()
23641 ;; args)))
23642 (replace 'install
23643 (assoc-ref py:%standard-phases 'install)))))
23644 (native-inputs
23645 (list python-minimal-wrapper
23646 python-hypothesmith
23647 python-pytest
23648 python-setuptools
23649 python-setuptools-rust
23650 python-setuptools-scm
23651 python-wheel))
23652 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23653 (propagated-inputs
23654 (list python-pyyaml))
23655 (home-page "https://github.com/Instagram/LibCST")
23656 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23657 (description
23658 "LibCST parses Python source code as a CST tree that keeps all
23659formatting details (comments, whitespaces, parentheses, etc). It's useful
23660for building automated refactoring (codemod) applications and linters.
23661LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23662a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23663naming node types and fields, LibCST creates a lossless CST that looks and
23664feels like an AST.")
23665 (license (list license:expat
23666 ;; Some files unde libcst/_parser/ are under Python Software
23667 ;; Foundation license (see LICENSE file for details)
23668 license:psfl
23669 ;; libcst/_add_slots.py
23670 license:asl2.0))))
23671
23672(define-public python-libcst-minimal
23673 (hidden-package
23674 (package
23675 (inherit python-libcst)
23676 (name "python-libcst-minimal")
23677 (arguments
23678 (substitute-keyword-arguments arguments
23679 ((#:tests? _ #t) #f)))
23680 (native-inputs
23681 (list python-minimal-wrapper
23682 python-setuptools
23683 python-setuptools-rust
23684 python-setuptools-scm
23685 python-wheel)))))
23686
23687(define-public python-lazy-loader
23688 (package
23689 (name "python-lazy-loader")
23690 (version "0.4")
23691 (source (origin
23692 (method url-fetch)
23693 (uri (pypi-uri "lazy_loader" version))
23694 (sha256
23695 (base32
23696 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23697 (build-system pyproject-build-system)
23698 (native-inputs
23699 (list python-numpy python-pytest python-setuptools))
23700 (propagated-inputs
23701 (list python-flit-core
23702 python-setuptools
23703 python-wheel))
23704 (home-page "https://scientific-python.org/specs/spec-0001/")
23705 (synopsis "Load subpackages and functions on demand")
23706 (description "@code{python-lazy-loader} makes it easy to load subpackages
23707and functions on demand. Its main features are:
23708
23709@itemize
23710@item Allow subpackages to be made visible to users without incurring import
23711costs.
23712@item Allow external libraries to be imported only when used, improving import
23713times.
23714@end itemize")
23715 (license license:bsd-3)))
23716
23717(define-public python-lazy-object-proxy
23718 (package
23719 (name "python-lazy-object-proxy")
23720 (version "1.12.0")
23721 (source
23722 (origin
23723 (method git-fetch)
23724 (uri (git-reference
23725 (url "https://github.com/ionelmc/python-lazy-object-proxy")
23726 (commit (string-append "v" version))))
23727 (file-name (git-file-name name version))
23728 (sha256
23729 (base32 "1qig879igkjmj4mir26b0n40w3vn5jqn293172s6npxnb4k90kzk"))))
23730 (build-system pyproject-build-system)
23731 (native-inputs
23732 (list python-pytest
23733 python-pytest-benchmark
23734 python-setuptools
23735 python-setuptools-scm))
23736 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23737 (synopsis "Lazy object proxy for Python")
23738 (description
23739 "Lazy object proxy is an object that wraps a callable but defers the call
23740until the object is actually required, and caches the result of said call.")
23741 (license license:bsd-2)))
23742
23743(define-public python-dnspython
23744 ;; TODO: Move to (gnu packages python-web).
23745 (package
23746 (name "python-dnspython")
23747 (version "2.8.0")
23748 (source
23749 (origin
23750 (method url-fetch)
23751 (uri (pypi-uri "dnspython" version))
23752 (sha256
23753 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23754 (build-system pyproject-build-system)
23755 (arguments
23756 (list
23757 ;; tests: 1216 passed, 198 skipped, 2 deselected
23758 #:test-flags
23759 #~(list
23760 ;; AssertionError: assert False
23761 "--deselect=tests/test_features.py::test_have"
23762 ;; dns.exception.SyntaxError: protocol not found
23763 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23764 #:phases
23765 #~(modify-phases %standard-phases
23766 (add-after 'unpack 'patch-getprotobyname-calls
23767 ;; These calls are problematic in the build environment as there is
23768 ;; no /etc/protocols. This breaks the sanity-check phase of any
23769 ;; package depending on this one.
23770 (lambda _
23771 (substitute* "dns/rdtypes/IN/WKS.py"
23772 (("socket.getprotobyname\\('tcp'\\)")
23773 "6")
23774 (("socket.getprotobyname\\('udp'\\)")
23775 "17")))))))
23776 (native-inputs
23777 (list python-hatchling
23778 python-pytest))
23779 (propagated-inputs
23780 (append
23781 (if (supported-package? python-cryptography)
23782 (list ;; DNSSEC
23783 python-cryptography
23784 ;; DNS over Quic
23785 python-aioquic
23786 ;; DNS over HTTPS
23787 python-h2
23788 python-httpcore
23789 python-httpx)
23790 '())
23791 (list python-idna
23792 python-trio)))
23793 (home-page "https://www.dnspython.org")
23794 (synopsis "DNS toolkit for Python")
23795 (description
23796 "dnspython is a DNS toolkit for Python. It supports almost all record
23797types. It can be used for queries, zone transfers, and dynamic updates.
23798It supports TSIG authenticated messages and EDNS0.")
23799 (license license:expat)))
23800
23801;; A bare minimal package, mainly to use in tests and reduce closure size.
23802;; Tests are left out in the main package to slim down native-inputs and
23803;; propagated-inputs.
23804(define-public python-dnspython-minimal
23805 (package/inherit python-dnspython
23806 (name "python-dnspython-minimal")
23807 (arguments
23808 (substitute-keyword-arguments arguments
23809 ((#:tests? _ #t) #f)))
23810 (native-inputs
23811 (list python-hatchling))
23812 (propagated-inputs '())))
23813
23814(define-public python-py3dns
23815 (package
23816 (name "python-py3dns")
23817 (version "4.0.2")
23818 (source
23819 (origin
23820 (method url-fetch)
23821 (uri (pypi-uri "py3dns" version))
23822 (sha256
23823 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23824 (build-system pyproject-build-system)
23825 (arguments
23826 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23827 ;; removing functionality so we don't run tests.
23828 (list #:tests? #f))
23829 (native-inputs (list python-flit-core))
23830 (home-page "https://launchpad.net/py3dns")
23831 (synopsis "Python 3 DNS library")
23832 (description
23833 "This Python 3 module provides a DNS API for looking up DNS entries from
23834within Python 3 modules and applications. This module is a simple,
23835lightweight implementation.")
23836 (license license:psfl)))
23837
23838(define-public python-email-validator
23839 (package
23840 (name "python-email-validator")
23841 (version "2.2.0")
23842 (source
23843 (origin
23844 (method url-fetch)
23845 (uri (pypi-uri "email_validator" version))
23846 (sha256
23847 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23848 (build-system pyproject-build-system)
23849 (arguments
23850 (list
23851 #:test-flags
23852 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23853 #~(list "-k" "not test_caching_dns_resolver")))
23854 (native-inputs
23855 (list python-pytest
23856 python-setuptools
23857 python-wheel))
23858 (propagated-inputs
23859 (list python-dnspython
23860 python-idna))
23861 (home-page "https://github.com/JoshData/python-email-validator")
23862 (synopsis "Email address validation library for Python")
23863 (description
23864 "This library validates email address syntax and deliverability.")
23865 (license license:cc0)))
23866
23867(define-public python-faker
23868 (package
23869 (name "python-faker")
23870 (version "37.4.2")
23871 (source
23872 (origin
23873 (method url-fetch)
23874 (uri (pypi-uri "faker" version))
23875 (sha256
23876 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23877 (build-system pyproject-build-system)
23878 ;; tests: 2104 passed, 12 skipped, 2 warnings
23879 (native-inputs
23880 (list python-freezegun
23881 python-pytest
23882 python-setuptools
23883 python-validators))
23884 (propagated-inputs
23885 (list python-tzdata))
23886 (home-page "https://github.com/joke2k/faker")
23887 (synopsis "Python package that generates fake data")
23888 (description
23889 "Faker is a Python package that generates fake data such as names,
23890addresses, and phone numbers.")
23891 (license license:expat)))
23892
23893(define-public python-pyaml
23894 (package
23895 (name "python-pyaml")
23896 (version "25.7.0")
23897 (source
23898 (origin
23899 (method url-fetch)
23900 (uri (pypi-uri "pyaml" version))
23901 (sha256
23902 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23903 (build-system pyproject-build-system)
23904 (native-inputs
23905 (list python-pytest
23906 python-setuptools))
23907 (propagated-inputs
23908 (list python-pyyaml))
23909 (home-page "https://github.com/mk-fg/pretty-yaml")
23910 (synopsis "YAML pretty-print library for Python")
23911 (description
23912 "pyaml is a PyYAML based python module to produce pretty and readable
23913YAML-serialized data.")
23914 (license license:wtfpl2)))
23915
23916(define-public python-pyyaml-env-tag
23917 (package
23918 (name "python-pyyaml-env-tag")
23919 (version "1.1")
23920 (source
23921 (origin
23922 (method git-fetch)
23923 (uri (git-reference
23924 (url "https://github.com/waylan/pyyaml-env-tag")
23925 (commit version)))
23926 (file-name (git-file-name name version))
23927 (sha256
23928 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23929 (build-system pyproject-build-system)
23930 (native-inputs (list python-pytest python-setuptools))
23931 (propagated-inputs (list python-pyyaml))
23932 (home-page "https://github.com/waylan/pyyaml-env-tag")
23933 (synopsis "Custom YAML tag for environment variables")
23934 (description
23935 "This package provides a custom YAML tag for referencing environment
23936variables in YAML files.")
23937 (license license:expat)))
23938
23939(define-public python-prompt-toolkit
23940 (package
23941 (name "python-prompt-toolkit")
23942 (version "3.0.51")
23943 (source
23944 (origin
23945 (method url-fetch)
23946 (uri (pypi-uri "prompt_toolkit" version))
23947 (sha256
23948 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23949 (build-system pyproject-build-system)
23950 (arguments
23951 (list
23952 #:phases
23953 #~(modify-phases %standard-phases
23954 (add-before 'check 'pre-check
23955 (lambda _
23956 ;; HOME is needed for the test
23957 ;; "test_pathcompleter_can_expanduser".
23958 (setenv "HOME" "/tmp"))))))
23959 (native-inputs
23960 (list python-pytest
23961 python-setuptools))
23962 (propagated-inputs
23963 (list python-wcwidth))
23964 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23965 (synopsis "Library for building command line interfaces in Python")
23966 (description
23967 "Prompt-Toolkit is a library for building interactive command line
23968interfaces in Python. It's like GNU Readline but it also features syntax
23969highlighting while typing, out-of-the-box multi-line input editing, advanced
23970code completion, incremental search, support for Chinese double-width
23971characters, mouse support, and auto suggestions.")
23972 (license license:bsd-3)))
23973
23974(define-public python-proselint
23975 (package
23976 (name "python-proselint")
23977 (version "0.14.0")
23978 (source
23979 (origin
23980 (method url-fetch)
23981 (uri (pypi-uri "proselint" version))
23982 (sha256
23983 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23984 (build-system pyproject-build-system)
23985 (arguments
23986 (list
23987 #:phases
23988 #~(modify-phases %standard-phases
23989 (add-after 'unpack 'set-home-directory
23990 (lambda _
23991 (setenv "HOME" "/tmp"))))))
23992 (native-inputs
23993 (list python-poetry-core
23994 python-pytest))
23995 (propagated-inputs
23996 (list python-click))
23997 (home-page "http://proselint.com/")
23998 (synopsis "Linter for prose")
23999 (description "@code{python-proselint} is a linter for English prose, that
24000scans through a file and detects issues.")
24001 (license license:bsd-3)))
24002
24003(define-public python-jedi
24004 (package
24005 (name "python-jedi")
24006 (version "0.19.2")
24007 (source
24008 (origin
24009 (method git-fetch)
24010 (uri (git-reference
24011 (url "https://github.com/davidhalter/jedi")
24012 (commit (string-append "v" version))
24013 (recursive? #true)))
24014 (file-name (git-file-name name version))
24015 (sha256
24016 (base32
24017 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
24018 (build-system pyproject-build-system)
24019 (arguments
24020 (list
24021 #:phases
24022 '(modify-phases %standard-phases
24023 (add-before 'check 'set-HOME
24024 (lambda _ (setenv "HOME" "/tmp"))))))
24025 (native-inputs
24026 (list python-docopt
24027 python-pytest
24028 python-setuptools
24029 python-wheel))
24030 (propagated-inputs
24031 (list python-parso))
24032 (home-page "https://github.com/davidhalter/jedi")
24033 (synopsis "Autocompletion and static analysis library for Python")
24034 (description
24035 "Jedi is a static analysis tool for Python that can be used in Integrated
24036Development Environments (@dfn{IDE}s) and text editors. It understands Python
24037on a deeper level than many other static analysis frameworks for Python.
24038
24039Jedi understands docstrings and you can use Jedi autocompletion in your REPL
24040as well.")
24041 (license license:expat)))
24042
24043(define-public ptpython
24044 (package
24045 (name "ptpython")
24046 (version "3.0.20")
24047 (source
24048 (origin
24049 (method git-fetch)
24050 (uri (git-reference
24051 (url "https://github.com/jonathanslenders/ptpython")
24052 (commit version)))
24053 (file-name (git-file-name name version))
24054 (sha256
24055 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
24056 (build-system pyproject-build-system)
24057 (arguments
24058 (list
24059 ;; XXX: There is a tests/run_tests.py file but all it does is a
24060 ;; sanity check.
24061 #:tests? #f))
24062 (native-inputs (list python-setuptools))
24063 (propagated-inputs
24064 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
24065 (home-page "https://github.com/jonathanslenders/ptpython")
24066 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
24067 (description
24068 "ptpython is a Python read-eval-print loop with IDE-like features.
24069It supports syntax highlighting, multiline editing, autocompletion, mouse,
24070color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
24071etc.")
24072 (license license:bsd-3)))
24073
24074(define-public python-easyprocess
24075 (package
24076 (name "python-easyprocess")
24077 (version "1.1")
24078 (source
24079 (origin
24080 (method git-fetch)
24081 (uri (git-reference
24082 (url "https://github.com/ponty/easyprocess")
24083 (commit version)))
24084 (file-name (git-file-name name version))
24085 (sha256
24086 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
24087 (build-system pyproject-build-system)
24088 (arguments
24089 ;; Tests require pyvirtualdisplay, which requires this package.
24090 (list #:tests? #f))
24091 (native-inputs (list python-setuptools))
24092 (home-page "https://github.com/ponty/easyprocess")
24093 (synopsis "Python subprocess interface")
24094 (description
24095 "@code{easyprocess} is an easy to use Python subprocess interface.")
24096 (license license:bsd-3)))
24097
24098(define-public python-entrypoint2
24099 (package
24100 (name "python-entrypoint2")
24101 (version "0.2.4")
24102 (source
24103 (origin
24104 (method url-fetch)
24105 (uri (pypi-uri "entrypoint2" version))
24106 (sha256
24107 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
24108 (build-system pyproject-build-system)
24109 (native-inputs (list python-easyprocess
24110 python-pytest
24111 python-setuptools
24112 python-wheel))
24113 (home-page "https://github.com/ponty/entrypoint2")
24114 (synopsis "Command-line interface for Python modules")
24115 (description
24116 "@code{entrypoint2} is an easy to use command-line interface for Python
24117 modules based on @code{argparse}. It translates function signature and
24118 documentation to argparse configuration.")
24119 (license license:bsd-3)))
24120
24121(define-public python-pyvirtualdisplay
24122 (package
24123 (name "python-pyvirtualdisplay")
24124 (version "3.0")
24125 (source
24126 (origin
24127 (method url-fetch)
24128 (uri (pypi-uri "PyVirtualDisplay" version))
24129 (sha256
24130 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
24131 (build-system pyproject-build-system)
24132 (arguments
24133 (list
24134 ;; tests: 27 passed, 8 deselected
24135 #:test-flags
24136 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
24137 ;; OSError: Pillow was built without XCB support
24138 #~(list #$@(map (lambda (test) (string-append "--deselect="
24139 "tests/"
24140 test))
24141 (list "test_smart.py::test_slowshot"
24142 "test_smart.py::test_slowshot_with"
24143 "test_smart.py::test_slowshot_nocrop"
24144 "test_smart.py::test_slowshot_timeout"
24145 "test_smart.py::test_slowshot_timeout_nocrop"
24146 "test_smart2.py::test_double"
24147 "test_smart_thread.py::test_smart"
24148 "test_examples.py::test_screenshot")))))
24149 (native-inputs
24150 (list python-easyprocess
24151 python-entrypoint2
24152 python-psutil
24153 python-pytest
24154 python-setuptools
24155 python-vncdotool-bootstrap
24156 xmessage
24157 xorg-server-for-tests))
24158 (home-page "https://github.com/ponty/pyvirtualdisplay")
24159 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
24160 (description
24161 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
24162 (license license:bsd-3)))
24163
24164(define-public python-pyserial
24165 (package
24166 (name "python-pyserial")
24167 ;; 3.5 (2020-11-23), use the latest commit as upstream stopped publishing
24168 ;; releases on PyPI or tagging new versions.
24169 (properties '((commit . "a5c48d445fbc1943d4fabf8d9090a50fda3172fd")
24170 (revision . "0")))
24171 (version (git-version "3.5"
24172 (assoc-ref properties 'revision)
24173 (assoc-ref properties 'commit)))
24174 (source
24175 (origin
24176 (method git-fetch)
24177 (uri (git-reference
24178 (url "https://github.com/pyserial/pyserial")
24179 (commit (assoc-ref properties 'commit))))
24180 (file-name (git-file-name name version))
24181 (sha256
24182 (base32 "1mfqs5g4qgp6lll859hy3i4gz7nn95g057s80k01jn2mza12swjp"))))
24183 (build-system pyproject-build-system)
24184 (native-inputs
24185 (list python-pyfakefs
24186 python-pytest
24187 python-setuptools))
24188 (home-page "https://github.com/pyserial/pyserial")
24189 (synopsis "Python Serial Port Bindings")
24190 (description
24191 "@code{pyserial} provide serial port bindings for Python. It supports
24192different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
24193Xon/Xoff. The port is accessed in RAW mode.")
24194 (license license:bsd-3)))
24195
24196(define-public python-pyserial-asyncio
24197 (package
24198 (name "python-pyserial-asyncio")
24199 (version "0.6")
24200 (source
24201 (origin
24202 (method git-fetch)
24203 (uri (git-reference
24204 (url "https://github.com/pyserial/pyserial-asyncio")
24205 (commit (string-append "v" version))))
24206 (file-name (git-file-name name version))
24207 (sha256
24208 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
24209 (build-system pyproject-build-system)
24210 (arguments (list #:test-backend #~'unittest))
24211 (native-inputs (list python-setuptools))
24212 (propagated-inputs (list python-pyserial))
24213 (home-page "https://github.com/pyserial/pyserial-asyncio")
24214 (synopsis "Pyserial asynchronous I/O extension")
24215 (description
24216 "This package extends Pyserial with asynchronous I/O support.")
24217 (license license:bsd-3)))
24218
24219(define-public python-pymemcache
24220 (package
24221 (name "python-pymemcache")
24222 (version "4.0.0")
24223 (source
24224 (origin
24225 (method url-fetch)
24226 (uri (pypi-uri "pymemcache" version))
24227 (sha256
24228 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
24229 (build-system pyproject-build-system)
24230 (arguments
24231 ;; We don't have the zstd module.
24232 (list
24233 #:test-flags
24234 '(list "--ignore=pymemcache/test/test_compression.py")))
24235 (native-inputs
24236 (list python-faker
24237 python-pytest
24238 python-setuptools
24239 python-wheel))
24240 (home-page "https://github.com/pinterest/pymemcache")
24241 (synopsis "Comprehensive, fast, pure Python memcached client")
24242 (description
24243 "This package provides a comprehensive, fast, pure Python memcached
24244client.")
24245 (license license:asl2.0)))
24246
24247(define-public python-pymodbus
24248 (package
24249 (name "python-pymodbus")
24250 (version "3.8.6")
24251 (source
24252 (origin
24253 (method git-fetch)
24254 (uri (git-reference
24255 (url "https://github.com/riptideio/pymodbus")
24256 (commit (string-append "v" version))))
24257 (file-name (git-file-name name version))
24258 (sha256
24259 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
24260 (build-system pyproject-build-system)
24261 (arguments
24262 (list
24263 #:test-flags
24264 #~(list "--ignore"
24265 "test/server/test_simulator_api.py"
24266 ;; These tests require the presence of a certificate.
24267 "--ignore-glob"
24268 "test/examples/*"
24269 "--ignore"
24270 "test/client/test_client.py")))
24271 (native-inputs (list python-mock
24272 python-pytest
24273 python-pytest-asyncio
24274 python-pytest-xdist
24275 python-redis
24276 python-setuptools
24277 python-sqlalchemy
24278 python-tornado
24279 python-twisted
24280 python-wheel))
24281 (propagated-inputs (list python-pyserial
24282 python-six
24283 ;; For the REPL.
24284 python-aiohttp
24285 python-click
24286 python-prompt-toolkit
24287 python-pygments
24288 python-pyserial-asyncio))
24289 (home-page "https://github.com/riptideio/pymodbus/")
24290 (synopsis "Modbus protocol stack in Python")
24291 (description
24292 "Pymodbus is a full Modbus protocol implementation using
24293 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
24294 communications core. It includes the following @emph{client} features:
24295 @itemize
24296 @item full read/write protocol on discrete and register
24297 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
24298 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24299 @item asynchronous and synchronous versions
24300 @item payload builder/decoder utilities
24301 @item pymodbus read eval print loop (REPL).
24302 @end itemize
24303 It also includes the following @emph{server} features:
24304 @itemize
24305 @item can function as a fully implemented Modbus server
24306 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24307 @item asynchronous and synchronous versions
24308 @item full server control context (device information, counters, etc)
24309 @item a number of backing contexts (database, redis, sqlite, a slave device).
24310 @end itemize")
24311 (license license:bsd-3)))
24312
24313(define-public python-exodriver
24314 (package
24315 (name "python-exodriver")
24316 (version "2.6.0")
24317 (source (origin
24318 (method git-fetch)
24319 (uri (git-reference
24320 (url "https://github.com/labjack/exodriver")
24321 (commit (string-append "v" version))))
24322 (file-name (git-file-name name version))
24323 (sha256
24324 (base32
24325 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
24326 (outputs (list "out"
24327 "doc")) ;544 KiB of examples
24328 (build-system gnu-build-system)
24329 (arguments
24330 (list
24331 #:tests? #f ;no test suite
24332 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
24333 (string-append "PREFIX=" #$output)
24334 "RUN_LDCONFIG=0"
24335 "LINK_SO=1")
24336 #:phases
24337 #~(modify-phases %standard-phases
24338 (delete 'configure)
24339 (replace 'build
24340 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24341 (with-directory-excursion "liblabjackusb"
24342 (apply (assoc-ref %standard-phases 'build)
24343 `(,@args #:make-flags ,make-flags)))))
24344 (replace 'install
24345 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24346 (with-directory-excursion "liblabjackusb"
24347 (apply (assoc-ref %standard-phases 'install)
24348 `(,@args #:make-flags ,make-flags)))
24349 ;; Install udev rules.
24350 (install-file "90-labjack.rules"
24351 (string-append #$output "/lib/udev/rules.d"))
24352 ;; Install examples.
24353 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
24354 (mkdir-p doc)
24355 (copy-recursively "examples"
24356 (string-append doc "/examples"))))))))
24357 (inputs (list libusb))
24358 (home-page "https://github.com/labjack/exodriver")
24359 (synopsis "USB driver for LabJack data acquisition instruments")
24360 (description "This package provides @code{liblabjackusb}, a USB library for low-level
24361communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
24362instruments. A udev rule is also included to allow unprivileged users to
24363communicate with the instruments via USB.")
24364 (license license:expat))) ;see README
24365
24366(define-public python-labjack
24367 (package
24368 (name "python-labjack")
24369 (version "2.1.0")
24370 (source (origin
24371 (method url-fetch)
24372 (uri (pypi-uri "LabJackPython" version))
24373 (sha256
24374 (base32
24375 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24376 (build-system pyproject-build-system)
24377 (arguments
24378 (list
24379 #:tests? #f ;no test suite
24380 #:phases
24381 #~(modify-phases %standard-phases
24382 (add-after 'unpack 'patch-liblabjackusb.so
24383 (lambda* (#:key inputs #:allow-other-keys)
24384 (substitute* (find-files "." "\\.py$")
24385 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24386 (format #f "ctypes.CDLL(~s"
24387 (search-input-file inputs
24388 "lib/liblabjackusb.so")))))))))
24389 (native-inputs (list python-setuptools))
24390 ;; exodriver is provided as a regular input, as only its shared object is
24391 ;; used, not its Python API.
24392 (inputs (list python-exodriver))
24393 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24394 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24395 (description
24396 "This Python library allows communicating with the U3, U6, UE9 and U12
24397LabJack data acquisition (DAQ) modules.")
24398 (license license:expat))) ;see setup.py
24399
24400(define-public python-kivy-garden
24401 (package
24402 (name "python-kivy-garden")
24403 (version "0.1.5")
24404 (source
24405 (origin
24406 (method git-fetch) ; source was removed from PyPI
24407 (uri (git-reference
24408 (url "https://github.com/kivy-garden/garden")
24409 (commit (string-append "v" version))))
24410 (file-name (git-file-name name version))
24411 (sha256
24412 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24413 (build-system pyproject-build-system)
24414 (arguments
24415 (list
24416 #:tests? #f)) ; no tests in PyPI or Git distributions
24417 (native-inputs
24418 (list python-setuptools
24419 python-wheel))
24420 (propagated-inputs
24421 (list python-requests))
24422 (home-page "https://github.com/kivy-garden/garden")
24423 (synopsis "Garden tool for Kivy flowers")
24424 (description
24425 "This package provides the @command{garden} command to install packages
24426for Kivy, the multitouch application platform.")
24427 (license license:expat)))
24428
24429(define-public python-async-lru
24430 (package
24431 (name "python-async-lru")
24432 (version "2.0.4")
24433 (source
24434 (origin
24435 (method url-fetch)
24436 (uri (pypi-uri "async-lru" version))
24437 (sha256
24438 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24439 (build-system pyproject-build-system)
24440 (native-inputs
24441 (list python-pytest
24442 python-pytest-asyncio
24443 python-pytest-timeout
24444 python-setuptools
24445 python-wheel))
24446 (propagated-inputs
24447 (list python-typing-extensions))
24448 (home-page "https://github.com/aio-libs/async-lru")
24449 (synopsis "Simple LRU cache for asyncio")
24450 (description
24451 "This package is a port of Python's built-in @code{functools.lru_cache}
24452function for @code{asyncio}. To better handle async behaviour, it also
24453ensures multiple concurrent calls will only result in 1 call to the wrapped
24454function, with all awaits receiving the result of that call when it
24455completes.")
24456 (license license:expat)))
24457
24458(define-public python-asyncinject
24459 (package
24460 (name "python-asyncinject")
24461 (version "0.6.1")
24462 (source
24463 (origin
24464 (method git-fetch)
24465 (uri (git-reference
24466 (url "https://github.com/simonw/asyncinject")
24467 (commit version)))
24468 (file-name (git-file-name name version))
24469 (sha256
24470 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24471 (build-system pyproject-build-system)
24472 (native-inputs
24473 (list python-pytest
24474 python-pytest-asyncio
24475 python-setuptools))
24476 (home-page "https://github.com/simonw/asyncinject")
24477 (synopsis
24478 "Run async workflows using pytest-fixtures-style dependency injection")
24479 (description
24480 "This package lets you run asynchronous workflows using
24481pytest-fixtures-style dependency injection.")
24482 (license license:asl2.0)))
24483
24484(define-public python-binaryornot
24485 (package
24486 (name "python-binaryornot")
24487 (version "0.6.0")
24488 (source
24489 (origin
24490 (method git-fetch)
24491 (uri (git-reference
24492 (url "https://github.com/audreyr/binaryornot")
24493 (commit (string-append "v" version))))
24494 (file-name (git-file-name name version))
24495 (sha256
24496 (base32 "008r45bbhax8flcc0cp5fm2p9niclf0kg773s2y2p1x1j5qjx1jb"))))
24497 (build-system pyproject-build-system)
24498 (arguments
24499 (list
24500 #:test-flags
24501 ;; FileNotFoundError: [Errno 2] No such file or directory: 'uv'
24502 #~(list (string-append "--deselect=tests/test_sdist.py"
24503 "::TestSdistContents"
24504 "::test_sdist_includes_pyc_fixtures"))))
24505 (native-inputs
24506 (list python-hatchling
24507 python-pytest))
24508 (home-page "https://github.com/audreyr/binaryornot")
24509 (synopsis "Package to check if a file is binary or text")
24510 (description "Ultra-lightweight pure Python package to check if a file is
24511 binary or text.")
24512 (license license:bsd-3)))
24513
24514(define-public python-bson
24515 (package
24516 (name "python-bson")
24517 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24518 (revision . "0")))
24519 (version (git-version "0.5.10"
24520 (assoc-ref properties 'revision)
24521 (assoc-ref properties 'commit)))
24522 (source
24523 (origin
24524 (method git-fetch) ;for tests
24525 (uri (git-reference
24526 (url "https://github.com/py-bson/bson")
24527 (commit (assoc-ref properties 'commit))))
24528 (file-name (git-file-name name version))
24529 (sha256
24530 (base32
24531 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24532 (build-system pyproject-build-system)
24533 (native-inputs
24534 (list python-pytest
24535 python-setuptools))
24536 (propagated-inputs
24537 (list python-dateutil
24538 python-six))
24539 (home-page "https://github.com/py-bson/bson")
24540 (synopsis "BSON (Binary JSON) codec for Python")
24541 (description "@code{bson} is a Python library implementing a BSON (Binary
24542JSON) codec.")
24543 (license license:asl2.0)))
24544
24545(define-public python-nltk
24546 (package
24547 (name "python-nltk")
24548 (version "3.9.1")
24549 (source
24550 (origin
24551 (method url-fetch)
24552 (uri (pypi-uri "nltk" version))
24553 (sha256
24554 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24555 (build-system pyproject-build-system)
24556 (arguments
24557 ;; Tests require some extra resources to be downloaded.
24558 ;; TODO Try packaging these resources.
24559 '(#:tests? #f))
24560 (propagated-inputs (list python-click python-joblib python-regex
24561 python-tqdm))
24562 (native-inputs (list python-setuptools python-wheel))
24563 (home-page "https://www.nltk.org/")
24564 (synopsis "Natural Language Toolkit")
24565 (description
24566 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24567WordNet, along with a suite of text processing libraries for classification,
24568tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24569natural language processing libraries.")
24570 (license license:asl2.0)))
24571
24572(define-public python-pymongo
24573 (package
24574 (name "python-pymongo")
24575 (version "4.17.0")
24576 (source
24577 (origin
24578 (method git-fetch)
24579 (uri (git-reference
24580 (url "https://github.com/mongodb/mongo-python-driver")
24581 (commit version)))
24582 (file-name (git-file-name name version))
24583 (sha256
24584 (base32 "0ybp4klx2advd0aka4d0915vwvydid3cil16x497amc4wiigndhx"))))
24585 (build-system pyproject-build-system)
24586 (arguments
24587 (list
24588 ;; tests: 1354 passed, 6514 skipped, 838 deselected, 38 subtests passed
24589 #:test-flags
24590 #~(list
24591 ;; pytest.PytestDeprecationWarning: Overriding the
24592 ;; "event_loop_policy" fixture is deprecated and will be removed in a
24593 ;; future version of pytest-asyncio. Use the
24594 ;; "pytest_asyncio_loop_factories" hook to customize event loop
24595 ;; creation.
24596 "-W" "ignore::DeprecationWarning"
24597 ;; Run only default unit tests, no benchmark and networking tests.
24598 "-m" "default_async or default"
24599 ;; Tests need access to /etc/resolve.conf.
24600 "--ignore=test/asynchronous/test_srv_polling.py"
24601 "--ignore=test/test_client.py"
24602 "--ignore=test/test_srv_polling.py"
24603 ;; XXX: Tests fail with assertion is not equal.
24604 "-k" "not test_test_uri_options_srv-options_SRV_URI")))
24605 (native-inputs
24606 (list python-hatch-requirements-txt
24607 python-hatchling
24608 python-pytest
24609 python-pytest-asyncio
24610 python-setuptools))
24611 (propagated-inputs
24612 (list python-dnspython))
24613 (home-page "https://github.com/mongodb/mongo-python-driver")
24614 (synopsis "Python driver for MongoDB")
24615 (description
24616 "The PyMongo distribution contains tools for interacting with MongoDB
24617database from Python. The @code{bson} package is an implementation of the
24618@url{http://bsonspec.org/, BSON format} for Python. The @code{pymongo}
24619package is a native Python driver for MongoDB, offering both synchronous and
24620asynchronous APIs. The @code{gridfs} package is a gridfs implementation on
24621top of @code{pymongo}.")
24622 (license license:asl2.0)))
24623
24624(define-public python-py-consul
24625 (package
24626 (name "python-py-consul")
24627 (version "1.6.0")
24628 (source
24629 (origin
24630 (method git-fetch)
24631 (uri (git-reference
24632 ;; Fork from https://github.com/cablehead/python-consul
24633 (url "https://github.com/criteo/py-consul")
24634 (commit (string-append "v" version))))
24635 (file-name (git-file-name name version))
24636 (sha256
24637 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24638 (build-system pyproject-build-system)
24639 (arguments (list #:tests? #f)) ; Tests require docker.
24640 (native-inputs (list python-setuptools))
24641 (propagated-inputs (list python-requests))
24642 (home-page "https://github.com/criteo/py-consul")
24643 (synopsis "Python client for Consul")
24644 (description
24645 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24646discovery, monitoring and configuration.")
24647 (license license:expat)))
24648
24649(define-public python-schematics
24650 (package
24651 (name "python-schematics")
24652 (version "2.1.1")
24653 (source
24654 (origin
24655 (method git-fetch)
24656 (uri (git-reference
24657 (url "https://github.com/schematics/schematics")
24658 (commit (string-append "v" version))))
24659 (file-name (git-file-name name version))
24660 (sha256
24661 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24662 (build-system pyproject-build-system)
24663 (native-inputs
24664 (list python-dateutil python-mock python-pytest python-setuptools))
24665 (home-page "https://github.com/schematics/schematics")
24666 (synopsis "Python Data Structures for Humans")
24667 (description
24668 "Schematics is a Python library to combine types into structures,
24669validate them, and transform the shapes of your data based on simple
24670descriptions.
24671
24672The internals are similar to ORM type systems, but there is no database layer
24673in Schematics. Instead, building a database layer is easily made when
24674Schematics handles everything except for writing the query. Schematics can be
24675used for tasks where having a database involved is unusual.")
24676 (license license:bsd-3)))
24677
24678(define-public python-odfpy
24679 (package
24680 (name "python-odfpy")
24681 (version "1.4.2")
24682 (source
24683 (origin
24684 (method git-fetch)
24685 (uri (git-reference
24686 (url "https://github.com/eea/odfpy")
24687 (commit (string-append "release-" version))))
24688 (file-name (git-file-name name version))
24689 (sha256
24690 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24691 (build-system pyproject-build-system)
24692 (native-inputs (list python-pytest python-setuptools))
24693 (propagated-inputs (list python-defusedxml))
24694 (home-page "https://github.com/eea/odfpy")
24695 (synopsis "Python API and tools to manipulate OpenDocument files")
24696 (description
24697 "Collection of libraries and utility programs written in Python to
24698manipulate OpenDocument 1.2 files.")
24699 (license
24700 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24701 ;; number of files with other licenses.
24702 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24703
24704(define-public python-namex
24705 (package
24706 (name "python-namex")
24707 (version "0.0.7")
24708 (source
24709 (origin
24710 (method url-fetch)
24711 (uri (pypi-uri "namex" version))
24712 (sha256
24713 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24714 (build-system pyproject-build-system)
24715 (arguments (list #:tests? #false)) ;there are none
24716 (native-inputs (list python-setuptools python-wheel))
24717 (home-page "https://github.com/fchollet/namex")
24718 (synopsis
24719 "Separate implementation and public API surface of Python packages")
24720 (description
24721 "This package provides a simple utility to separate the
24722implementation of your Python package and its public API surface.")
24723 (license license:asl2.0)))
24724
24725(define-public python-natsort
24726 (package
24727 (name "python-natsort")
24728 (version "8.4.0")
24729 (source
24730 (origin
24731 (method url-fetch)
24732 (uri (pypi-uri "natsort" version))
24733 (sha256
24734 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24735 (build-system pyproject-build-system)
24736 (native-inputs
24737 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24738 python-pytest
24739 python-pytest-mock
24740 python-setuptools))
24741 (propagated-inputs
24742 (list python-fastnumbers
24743 python-pyicu))
24744 (home-page "https://github.com/SethMMorton/natsort")
24745 (synopsis "Natural sorting for python and shell")
24746 (description
24747 "Natsort lets you apply natural sorting on lists instead of
24748lexicographical. If you use the built-in @code{sorted} method in python on a
24749list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24750it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24751@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24752numbers and sorts them separately from strings. It can also sort version
24753numbers, real numbers, mixed types and more, and comes with a shell command
24754@command{natsort} that exposes this functionality in the command line.")
24755 (license license:expat)))
24756
24757(define-public python-graphql-core
24758 (package
24759 (name "python-graphql-core")
24760 (version "3.2.7")
24761 (source
24762 (origin
24763 (method git-fetch)
24764 (uri (git-reference
24765 (url "https://github.com/graphql-python/graphql-core")
24766 (commit (string-append "v" version))))
24767 (file-name (git-file-name name version))
24768 (sha256
24769 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24770 (build-system pyproject-build-system)
24771 (native-inputs
24772 (list python-gevent
24773 python-mock
24774 python-poetry-core
24775 python-pytest
24776 python-pytest-benchmark
24777 python-pytest-mock))
24778 (propagated-inputs
24779 (list python-promise python-six))
24780 (home-page "https://github.com/graphql-python/graphql-core")
24781 (synopsis "GraphQL implementation for Python")
24782 (description
24783 "GraphQL implementation for Python. GraphQL is a data query language and
24784 runtime designed and used to request and deliver data to mobile and web apps.
24785 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24786 to Python.")
24787 (license license:expat)))
24788
24789(define-public python-graphql-relay
24790 (package
24791 (name "python-graphql-relay")
24792 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24793 (revision . "0")))
24794 (version (git-version "3.1.5"
24795 (assoc-ref properties 'revision)
24796 (assoc-ref properties 'commit)))
24797 (source
24798 (origin
24799 (method git-fetch)
24800 (uri (git-reference
24801 (url "https://github.com/graphql-python/graphql-relay-py")
24802 (commit (assoc-ref properties 'commit))))
24803 (file-name (git-file-name name version))
24804 (sha256
24805 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24806 (build-system pyproject-build-system)
24807 (native-inputs
24808 (list python-pytest
24809 python-pytest-asyncio
24810 python-pytest-describe
24811 python-poetry-core))
24812 (propagated-inputs (list python-graphql-core))
24813 (home-page "https://github.com/graphql-python/graphql-relay-py")
24814 (synopsis "Relay implementation for Python")
24815 (description
24816 "This is a library to allow the easy creation of Relay-compliant servers
24817using the GraphQL Python reference implementation of a GraphQL server. It
24818should be noted that the code is a exact port of the original
24819@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24820implementation} from Facebook.")
24821 (license license:expat)))
24822
24823(define-public python-graphene
24824 (package
24825 (name "python-graphene")
24826 (version "3.4.3")
24827 (source
24828 (origin
24829 (method url-fetch)
24830 (uri (pypi-uri "graphene" version))
24831 (sha256
24832 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24833 (build-system pyproject-build-system)
24834 (arguments
24835 (list #:tests? #f)) ;XXX: tests fail to load
24836 (native-inputs
24837 (list python-setuptools))
24838 (propagated-inputs
24839 (list python-dateutil
24840 python-graphql-core
24841 python-graphql-relay
24842 python-typing-extensions))
24843 (home-page "https://graphene-python.org/")
24844 (synopsis "GraphQL Framework for Python")
24845 (description
24846 "Graphene is a Python library for building GraphQL schemas/types. A
24847GraphQL schema describes your data model, and provides a GraphQL server with
24848an associated set of resolve methods that know how to fetch data.")
24849 (license license:expat)))
24850
24851(define-public python-rodi
24852 (package
24853 (name "python-rodi")
24854 (version "2.0.8")
24855 (source
24856 (origin
24857 (method git-fetch)
24858 (uri (git-reference
24859 (url "https://github.com/Neoteroi/rodi")
24860 (commit (string-append "v" version))))
24861 (file-name (git-file-name name version))
24862 (sha256
24863 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24864 (build-system pyproject-build-system)
24865 (native-inputs
24866 (list python-hatchling
24867 python-pytest
24868 python-pytest-asyncio))
24869 (home-page "https://github.com/Neoteroi/rodi")
24870 (synopsis "Dependency injection framework for Python")
24871 (description
24872 "Rodi is a dependency injection framework for Python applications.
24873
24874Its features include
24875
24876@itemize
24877@item Type resolution by signature types annotations.
24878@item Type resolution by class annotations.
24879@item Type resolution by names and aliases.
24880@item Build graph of objects without the need for source code changes.
24881@item Minimum overhead to obtain services, once the objects graph is built.
24882@item Support for singleton, transient, and scoped services.
24883@end itemize")
24884 (license license:expat)))
24885
24886;; XXX: The last time updated in 2015, consider to remove it when nothing is
24887;; depend on it.
24888(define-public python-snowballstemmer
24889 (package
24890 (name "python-snowballstemmer")
24891 (version "2.2.0")
24892 (source
24893 (origin
24894 (method url-fetch)
24895 (uri (pypi-uri "snowballstemmer" version))
24896 (sha256
24897 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24898 (build-system pyproject-build-system)
24899 (arguments
24900 (list
24901 #:tests? #f)) ; no tests
24902 (native-inputs
24903 (list python-setuptools))
24904 (home-page "https://github.com/shibukawa/snowball_py")
24905 (synopsis "Snowball stemming library collection for Python")
24906 (description
24907 "This package provides 16 word stemmer algorithms generated from Snowball
24908algorithms. It includes the 15 original ones plus the Poerter English
24909stemmer.")
24910 (license license:bsd-3)))
24911
24912(define-public python-setproctitle
24913 (package
24914 (name "python-setproctitle")
24915 (version "1.3.7")
24916 (source
24917 (origin
24918 (method git-fetch)
24919 (uri (git-reference
24920 (url "https://github.com/dvarrazzo/py-setproctitle")
24921 (commit (string-append "version-" version))))
24922 (file-name (git-file-name name version))
24923 (sha256
24924 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24925 (build-system pyproject-build-system)
24926 (arguments
24927 (list
24928 #:phases
24929 #~(modify-phases %standard-phases
24930 (add-before 'check 'configure-tests
24931 (lambda* (#:key tests? #:allow-other-keys)
24932 (when tests?
24933 (setenv "PYTHON"
24934 (or (which "python3")
24935 (which "python")))
24936 (setenv "PYCONFIG"
24937 (if (which "python3-config")
24938 "python3-config --embed"
24939 "python-config"))
24940 (substitute* "tests/conftest.py"
24941 (("cc") "gcc"))))))))
24942 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24943 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24944 (synopsis
24945 "Setproctitle implementation for Python to customize the process title")
24946 (description
24947 "The library allows a process to change its title (as displayed by system
24948tools such as @code{ps} and @code{top}).
24949
24950Changing the title is mostly useful in multi-process systems, for example when a
24951master process is forked: changing the children's title allows identifying the
24952task each process is busy with. The technique is used by PostgreSQL and the
24953OpenSSH Server for example.")
24954 (license license:bsd-3)))
24955
24956(define-public python-pyelftools
24957 (package
24958 (name "python-pyelftools")
24959 (version "0.32")
24960 (source
24961 (origin
24962 (method git-fetch)
24963 (uri (git-reference
24964 (url "https://github.com/eliben/pyelftools")
24965 (commit (string-append "v" version))))
24966 (file-name (git-file-name name version))
24967 (sha256
24968 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24969 (snippet
24970 #~(begin
24971 ;; Delete bundled readelf and llvm-dwardump executables. Project
24972 ;; also ships quite a lot binary files mainly for tests, check
24973 ;; with:
24974 ;;
24975 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24976 ;;
24977 (delete-file "test/external_tools/readelf")
24978 (delete-file "test/external_tools/llvm-dwarfdump")))))
24979 (build-system pyproject-build-system)
24980 (arguments
24981 (list
24982 #:phases
24983 #~(modify-phases %standard-phases
24984 (replace 'check
24985 (lambda* (#:key tests? #:allow-other-keys)
24986 (when tests?
24987 ;; Run just basic unit and example tests, dwarfdump and
24988 ;; readelf tests are not selected as they are fragile and
24989 ;; arch-specific.
24990 (invoke "python" "test/run_all_unittests.py")
24991 (invoke "python" "test/run_examples_test.py")))))))
24992 (home-page "https://github.com/eliben/pyelftools")
24993 (native-inputs
24994 (list python-setuptools
24995 python-wheel))
24996 (synopsis "Analyze binary and library file information")
24997 (description
24998 "This Python library provides interfaces for parsing and analyzing two
24999binary and library file formats ; the Executable and Linking Format (ELF), and
25000debugging information in the Debugging With Attributed Record
25001Format (DWARF).")
25002 (license license:public-domain)))
25003
25004(define-public python-pefile
25005 (package
25006 (name "python-pefile")
25007 (version "2024.8.26")
25008 (source
25009 (origin
25010 (method git-fetch)
25011 (uri (git-reference
25012 (url "https://github.com/erocarrera/pefile")
25013 (commit (string-append "v" version))))
25014 (file-name (git-file-name name version))
25015 (sha256
25016 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
25017 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
25018 (build-system pyproject-build-system)
25019 (arguments
25020 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
25021 ;; It seems clear however that test_data.tar.bz2.enc needs to be
25022 ;; decrypted and unpacked before we can run them.
25023 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
25024 (native-inputs (list python-pytest python-setuptools))
25025 (propagated-inputs (list python-future))
25026 (home-page "https://github.com/erocarrera/pefile")
25027 (synopsis "Portable Executable (PE) file parser")
25028 (description
25029 "This python library provides interfaces for parsing and working with
25030Portable Executable (PE) files. It makes to most information from the header,
25031as well as section details and data available.")
25032 (license license:expat)))
25033
25034(define-public python-pyemd
25035 (package
25036 (name "python-pyemd")
25037 (version "1.0.0")
25038 (source (origin
25039 (method url-fetch)
25040 (uri (pypi-uri "pyemd" version))
25041 (sha256
25042 (base32
25043 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
25044 (build-system pyproject-build-system)
25045 (native-inputs
25046 (list python-cython
25047 python-pytest
25048 python-setuptools
25049 python-setuptools-scm))
25050 (propagated-inputs
25051 (list python-numpy-1))
25052 (home-page "https://github.com/wmayner/pyemd")
25053 (synopsis
25054 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
25055 (description
25056 "This package provides a Python wrapper for Ofir Pele and Michael
25057Werman's implementation of the Earth Mover's Distance.")
25058 (license license:expat)))
25059
25060(define-public python-imagesize
25061 (package
25062 (name "python-imagesize")
25063 (version "2.0.0")
25064 (source
25065 (origin
25066 (method git-fetch)
25067 (uri (git-reference
25068 (url "https://github.com/shibukawa/imagesize_py")
25069 (commit version)))
25070 (file-name (git-file-name name version))
25071 (sha256
25072 (base32 "1r07r80d16hkwhnmz6sfvj8d4s3d6wg82j99dbr3iy78gc48wia0"))))
25073 (build-system pyproject-build-system)
25074 (arguments (list #:test-backend #~'unittest))
25075 (native-inputs
25076 (list python-setuptools))
25077 (home-page "https://github.com/shibukawa/imagesize_py")
25078 (synopsis "Gets image size of files in various formats in Python")
25079 (description
25080 "This package allows determination of image size from PNG, JPEG,
25081JPEG2000 and GIF files in pure Python.")
25082 (license license:expat)))
25083
25084(define-public python-argcomplete
25085 (package
25086 (name "python-argcomplete")
25087 (version "3.7.2")
25088 (source
25089 (origin
25090 (method url-fetch)
25091 (uri (pypi-uri "argcomplete" version))
25092 (sha256
25093 (base32
25094 "1ff6kwdkhn59w80bn30fn4bhgmf0ahipbldh5nvfsscr1fdbdn5a"))))
25095 (build-system pyproject-build-system)
25096 (arguments
25097 (list #:tests? #f)) ;XXX: tests requires tcsh, fish and full bash shells
25098 (native-inputs
25099 (list python-hatch-vcs
25100 python-hatchling
25101 python-pexpect))
25102 (home-page "https://github.com/kislyuk/argcomplete")
25103 (synopsis "Shell tab completion for Python argparse")
25104 (description "argcomplete provides extensible command line tab completion
25105of arguments and options for Python scripts using @code{argparse}. It's
25106particularly useful for programs with many options or sub-parsers that can
25107dynamically suggest completions ; for example, when browsing resources over
25108the network.")
25109 (license license:asl2.0)))
25110
25111(define-public python-csscompressor
25112 (package
25113 (name "python-csscompressor")
25114 (version "0.9.5")
25115 (source
25116 (origin
25117 (method git-fetch)
25118 (uri (git-reference
25119 (url "https://github.com/sprymix/csscompressor")
25120 (commit (string-append "v" version))))
25121 (file-name (git-file-name name version))
25122 (sha256
25123 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
25124 (build-system pyproject-build-system)
25125 (native-inputs (list python-pytest python-setuptools))
25126 (home-page "https://github.com/sprymix/csscompressor")
25127 (synopsis "Python port of YUI CSS Compressor")
25128 (description "This package provides a python port of YUI CSS Compressor.")
25129 (license license:bsd-3)))
25130
25131(define-public python-rcssmin
25132 (package
25133 (name "python-rcssmin")
25134 (version "1.2.0")
25135 (source
25136 (origin
25137 (method url-fetch)
25138 (uri (pypi-uri "rcssmin" version))
25139 (sha256
25140 (base32
25141 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
25142 (build-system pyproject-build-system)
25143 (native-inputs (list python-pytest python-setuptools python-wheel))
25144 (home-page "http://opensource.perlig.de/rcssmin/")
25145 (synopsis "CSS Minifier")
25146 (description "The minifier is based on the semantics of the YUI compressor,
25147 which itself is based on the rule list by Isaac Schlueter.")
25148 (license license:asl2.0)))
25149
25150(define-public python-rjsmin
25151 (package
25152 (name "python-rjsmin")
25153 (version "1.2.3")
25154 (source
25155 (origin
25156 (method url-fetch)
25157 (uri (pypi-uri "rjsmin" version))
25158 (sha256
25159 (base32
25160 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
25161 (modules '((guix build utils)))
25162 (snippet
25163 '(for-each delete-file (find-files "bench" "\\.js$")))))
25164 (build-system pyproject-build-system)
25165 (native-inputs
25166 (list python-pytest python-setuptools python-wheel))
25167 (home-page "http://opensource.perlig.de/rjsmin/")
25168 (synopsis "Javascript Minifier")
25169 (description "@code{rJSmin} is a javascript minifier written in Python.
25170The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
25171module is a re-implementation aiming for speed, so it can be used at
25172runtime (rather than during a preprocessing step).")
25173 (license license:asl2.0)))
25174
25175(define-public python-cheetah
25176 (package
25177 (name "python-cheetah")
25178 (version "3.3.1")
25179 (source
25180 (origin
25181 (method url-fetch)
25182 (uri (pypi-uri "CT3" version))
25183 (sha256
25184 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
25185 (build-system pyproject-build-system)
25186 (arguments
25187 (list
25188 #:test-backend #~'custom
25189 #:test-flags #~(list "Cheetah/Tests/Test.py")
25190 #:phases
25191 #~(modify-phases %standard-phases
25192 (add-after 'unpack 'use-absolute-python
25193 (lambda _
25194 (substitute* "Cheetah/CheetahWrapper.py"
25195 (("#!/usr/bin/env python")
25196 (string-append "#!" (which "python"))))))
25197 (add-before 'check 'configure-tests
25198 (lambda* (#:key tests? #:allow-other-keys)
25199 (substitute* "Cheetah/Tests/ImportHooks.py"
25200 (("os.path.dirname\\(__file__\\)")
25201 (string-append "'" (getcwd) "/Cheetah/Tests'")))
25202 (substitute* "Cheetah/Tests/Test.py"
25203 (("unittest.TextTestRunner\\(\\)")
25204 "unittest.TextTestRunner(verbosity=2)"))
25205 (setenv "TMPDIR" "/tmp"))))))
25206 (native-inputs (list python-setuptools))
25207 (propagated-inputs (list python-markdown)) ;optional
25208 (home-page "https://cheetahtemplate.org/")
25209 (synopsis "Template engine")
25210 (description
25211 "Cheetah is a text-based template engine and Python code generator.
25212
25213 Cheetah can be used as a standalone templating utility or referenced as a
25214library from other Python applications. It has many potential uses, but web
25215developers looking for a viable alternative to ASP, JSP, PHP and PSP are
25216expected to be its principle user group.
25217
25218Features:
25219@enumerate
25220@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
25221other text-based format.
25222@item Cleanly separates content, graphic design, and program code.
25223@item Blends the power and flexibility of Python with a simple template
25224language that non-programmers can understand.
25225@item Gives template writers full access to any Python data structure, module,
25226function, object, or method in their templates.
25227@item Makes code reuse easy by providing an object-orientated interface to
25228templates that is accessible from Python code or other Cheetah templates. One
25229template can subclass another and selectively reimplement sections of it.
25230@item Provides a simple, yet powerful, caching mechanism that can dramatically
25231improve the performance of a dynamic website.
25232@item Compiles templates into optimized, yet readable, Python code.
25233@end enumerate")
25234 (license (license:x11-style "file://LICENSE"))))
25235
25236(define-public python-chevron
25237 (package
25238 (name "python-chevron")
25239 (version "0.14.0")
25240 (source (origin
25241 (method url-fetch)
25242 (uri (pypi-uri "chevron" version))
25243 (sha256
25244 (base32
25245 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
25246 (build-system pyproject-build-system)
25247 (arguments (list #:tests? #false)) ;there are none
25248 (native-inputs (list python-setuptools python-wheel))
25249 (home-page "https://github.com/noahmorrison/chevron")
25250 (synopsis "Mustache templating language renderer")
25251 (description "This package provides a Python implementation of the
25252Mustache templating language renderer.")
25253 (license license:expat)))
25254
25255(define-public python-dulwich
25256 (package
25257 (name "python-dulwich")
25258 (version "1.2.12")
25259 (source
25260 (origin
25261 (method git-fetch)
25262 (uri (git-reference
25263 (url "https://github.com/jelmer/dulwich")
25264 (commit (string-append "dulwich-" version))))
25265 (file-name (git-file-name name version))
25266 (sha256
25267 (base32 "0in5pgqhnnbfqi5alcg85kiaxr8zww9iih7qsyy9g1yzlaxs0dvd"))))
25268 (build-system pyproject-build-system)
25269 (arguments
25270 (list
25271 ;; tests: 3796 passed, 89 skipped, 1 xfailed, 8 warnings, 33 subtests
25272 ;; passed
25273 #:test-flags
25274 ;; Exclude fuzzing from discovery, depends on python-atheris.
25275 #~(list "tests")
25276 #:phases
25277 #~(modify-phases %standard-phases
25278 (add-after 'unpack 'fix-tests
25279 (lambda* (#:key inputs #:allow-other-keys)
25280 (substitute* '("tests/test_hooks.py"
25281 "tests/porcelain/test_filters.py"
25282 "tests/test_repository.py"
25283 "tests/test_worktree.py")
25284 (("/bin/sh")
25285 (search-input-file inputs "/bin/sh")))))
25286 (add-before 'check 'pre-check
25287 (lambda _
25288 (setenv "PYTHONHASHSEED" "random")
25289 (setenv "TMPDIR" "/tmp"))))))
25290 (native-inputs
25291 (list git-minimal/pinned
25292 openssh-sans-x
25293 ;; python-atheris ;not packaged yet in Guix
25294 python-gevent
25295 python-geventhttpclient
25296 python-pytest
25297 python-setuptools
25298 python-setuptools-rust))
25299 (propagated-inputs
25300 (list python-urllib3
25301 ;; [optional]
25302 gnupg
25303 gpgme
25304 python-aiohttp
25305 python-fastimport
25306 python-merge3
25307 python-munkres
25308 python-paramiko
25309 python-patiencediff
25310 python-rich))
25311 (home-page "https://www.dulwich.io/")
25312 (synopsis "Git implementation in Python")
25313 (description "Dulwich is an implementation of the Git file formats and
25314protocols written in pure Python.")
25315 ;; Can be used with either license.
25316 (license (list license:asl2.0 license:gpl2+))))
25317
25318(define-public python-dunamai
25319 (package
25320 (name "python-dunamai")
25321 (version "1.26.0")
25322 (source
25323 (origin
25324 (method url-fetch)
25325 (uri (pypi-uri "dunamai" version))
25326 (sha256
25327 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
25328 (build-system pyproject-build-system)
25329 (arguments
25330 (list
25331 #:test-flags
25332 #~(list "-k" "not test__version__from_git__shallow")
25333 #:phases
25334 #~(modify-phases %standard-phases
25335 ;; These steps are taken from NixOS package definition:
25336 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
25337 (add-before 'check 'pre-check
25338 (lambda _
25339 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
25340 (setenv "HOME" "/tmp")
25341 (invoke "git" "config" "--global" "user.email" "[email protected]")
25342 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
25343 (propagated-inputs
25344 (list python-packaging))
25345 (native-inputs
25346 (list git-minimal/pinned
25347 python-poetry-core
25348 python-pytest))
25349 (home-page "https://github.com/mtkennerly/dunamai")
25350 (synopsis "Dynamic version generation")
25351 (description
25352 "Dunamai is Python library and command line tool for producing dynamic,
25353standards-compliant version strings, derived from tags in your version control
25354system. This facilitates uniquely identifying nightly or per-commit builds in
25355continuous integration and releasing new versions of your software simply by
25356creating a tag.")
25357 (license license:expat)))
25358
25359(define-public python-pbkdf2
25360 (package
25361 (name "python-pbkdf2")
25362 (version "1.3")
25363 (source
25364 (origin
25365 (method url-fetch)
25366 (uri (pypi-uri "pbkdf2" version))
25367 (sha256
25368 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25369 (build-system pyproject-build-system)
25370 (arguments
25371 (list
25372 #:test-backend #~'custom
25373 #:test-flags #~(list "test/test_pbkdf2.py")))
25374 (native-inputs (list python-setuptools))
25375 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25376 (synopsis "Password-based key derivation")
25377 (description
25378 "This module implements the password-based key derivation function,
25379PBKDF2, specified in RSA PKCS#5 v2.0.
25380
25381PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25382is part of the RSA Public Key Cryptography Standards series. The provided
25383implementation takes a password or a passphrase and a salt value (and
25384optionally a iteration count, a digest module, and a MAC module) and provides
25385a file-like object from which an arbitrarily-sized key can be read.")
25386 (license license:expat)))
25387
25388(define-public python-qrcode
25389 (package
25390 (name "python-qrcode")
25391 (version "8.2")
25392 (source
25393 (origin
25394 (method url-fetch)
25395 (uri (pypi-uri "qrcode" version))
25396 (sha256
25397 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25398 (build-system pyproject-build-system)
25399 (native-inputs
25400 (list python-poetry-core
25401 python-pytest))
25402 (home-page "https://github.com/lincolnloop/python-qrcode")
25403 (synopsis "QR Code image generator")
25404 (description
25405 "This package provides a pure Python QR Code generator module. It uses
25406the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25407
25408In addition this package provides a command line tool to generate QR codes and
25409either write these QR codes to a file or do the output as ascii art at the
25410console.")
25411 (license license:bsd-3)))
25412
25413(define-public python-rst2ansi
25414 (package
25415 (name "python-rst2ansi")
25416 (properties '((commit . "3728e16f8b8b1dc338e5df90ba2c4a93ee054b3f")
25417 (revision . "1")))
25418 (version (git-version "0.1.5"
25419 (assoc-ref properties 'revision)
25420 (assoc-ref properties 'commit)))
25421 (source
25422 (origin
25423 (method git-fetch)
25424 (uri (git-reference
25425 (url "https://github.com/Snaipe/python-rst-to-ansi")
25426 (commit (assoc-ref properties 'commit))))
25427 (file-name (git-file-name name version))
25428 (sha256
25429 (base32 "0q8afblqhkrnzxla81ialifcwkh9ga5xzxzi0lhg2gjwhbynbfsp"))))
25430 (build-system pyproject-build-system)
25431 (arguments
25432 (list
25433 #:tests? #f ; 2 tests fail with additional line characters
25434 #:phases
25435 #~(modify-phases %standard-phases
25436 (replace 'check
25437 (lambda* (#:key tests? #:allow-other-keys)
25438 (when tests?
25439 (invoke "cram" "test" "-v")))))))
25440 (native-inputs (list python-cram python-setuptools))
25441 (propagated-inputs (list python-docutils))
25442 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25443 (synopsis "Convert RST to ANSI-decorated console output")
25444 (description
25445 "Python module dedicated to rendering RST (reStructuredText) documents to
25446ansi-escaped strings suitable for display in a terminal.")
25447 (license license:expat)))
25448
25449(define-public python-ansi2html
25450 (package
25451 (name "python-ansi2html")
25452 (version "1.9.2")
25453 (source
25454 (origin
25455 (method url-fetch)
25456 (uri (pypi-uri "ansi2html" version))
25457 (sha256
25458 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25459 (build-system pyproject-build-system)
25460 (native-inputs
25461 (list python-mock
25462 python-pytest
25463 python-setuptools
25464 python-wheel))
25465 (home-page "https://github.com/ralphbean/ansi2html")
25466 (synopsis "Convert ANSI-decorated console output to HTML")
25467 (description
25468 "@command{ansi2html} is a Python library and command line utility for
25469converting text with ANSI color codes to HTML or LaTeX.")
25470 (license license:gpl3+)))
25471
25472(define-public python-easy-ansi
25473 (package
25474 (name "python-easy-ansi")
25475 (version "2.1")
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 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25485 (build-system pyproject-build-system)
25486 (arguments
25487 (list
25488 #:phases
25489 #~(modify-phases %standard-phases
25490 (add-after 'install 'remove-extra
25491 (lambda* (#:key inputs outputs #:allow-other-keys)
25492 (with-directory-excursion (site-packages inputs outputs)
25493 (delete-file-recursively "tests")
25494 (delete-file "setup.py")))))))
25495 (native-inputs (list python-pytest python-setuptools))
25496 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25497 (synopsis "Terminal framework API")
25498 (description
25499 "Easy ANSI is a terminal framework API to give you an easy way to use
25500colors, cursor control movements, and line/box drawing. It is not meant as a
25501replacement to more full-featured frameworks (such as curses or urwid), but as
25502a tool to quickly create nice-looking screens in your terminal window. You
25503can even create animations with the cursor controls.")
25504 (license license:expat)))
25505
25506(define-public python-easy-ansi-0.3
25507 (package
25508 (inherit python-easy-ansi)
25509 (name "python-easy-ansi")
25510 (version "0.3")
25511 (source
25512 (origin
25513 (method git-fetch)
25514 (uri (git-reference
25515 (url "https://gitlab.com/joeysbytes/easy-ansi")
25516 (commit (string-append "v" version))))
25517 (file-name (git-file-name name version))
25518 (sha256
25519 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25520 (arguments '())))
25521
25522(define-public python-pycosat
25523 (package
25524 (name "python-pycosat")
25525 (version "0.6.6")
25526 (source
25527 (origin
25528 (method git-fetch)
25529 (uri (git-reference
25530 (url "https://github.com/ContinuumIO/pycosat")
25531 (commit version)))
25532 (file-name (git-file-name name version))
25533 (sha256
25534 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25535 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25536 (build-system pyproject-build-system)
25537 (arguments (list #:test-backend #~'unittest))
25538 (native-inputs (list unzip python-setuptools))
25539 (home-page "https://github.com/ContinuumIO/pycosat")
25540 (synopsis "Bindings to picosat (a SAT solver)")
25541 (description
25542 "This package provides efficient Python bindings to @code{picosat} on the
25543C level. When importing pycosat, the @code{picosat} solver becomes part of
25544the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25545Problem} (SAT) solver.")
25546 (license license:expat)))
25547
25548(define-public python-pypeg2
25549 (package
25550 (name "python-pypeg2")
25551 (version "2.15.2")
25552 (source
25553 (origin
25554 (method url-fetch)
25555 (uri (pypi-uri "pyPEG2" version))
25556 (sha256
25557 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25558 (build-system pyproject-build-system)
25559 (native-inputs (list python-pytest python-setuptools))
25560 (propagated-inputs (list python-lxml))
25561 (home-page "https://fdik.org/pyPEG/")
25562 (synopsis "Parsing Expression Grammars in Python")
25563 (description
25564 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25565based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25566formal languages.")
25567 (license license:gpl2)))
25568
25569(define-public python-pyformlang
25570 (package
25571 (name "python-pyformlang")
25572 (version "1.0.10")
25573 (source
25574 (origin
25575 (method url-fetch)
25576 (uri (pypi-uri "pyformlang" version))
25577 (sha256
25578 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25579 (build-system pyproject-build-system)
25580 (native-inputs
25581 (list python-pytest
25582 python-setuptools
25583 python-wheel))
25584 (propagated-inputs
25585 (list python-networkx
25586 python-numpy
25587 python-pydot))
25588 (home-page "https://github.com/Aunsiels/pyformlang")
25589 (synopsis "Framework for interacting with formal grammars")
25590 (description
25591 "This package provides a framework for working with formal
25592language grammars. The library was originally developed for educational
25593purposes and therefore implements many textbook algorithms regarding the
25594manipulation and interaction with formal grammars.")
25595 (license license:expat)))
25596
25597(define-public python-incremental
25598 (package
25599 (name "python-incremental")
25600 (version "24.7.2")
25601 (source
25602 (origin
25603 (method url-fetch)
25604 (uri (pypi-uri "incremental" version))
25605 (sha256
25606 (base32
25607 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25608 (build-system pyproject-build-system)
25609 (arguments
25610 ;; Tests require twisted, which needs this package.
25611 (list #:tests? #false
25612 #:build-backend "setuptools.build_meta"))
25613 (native-inputs
25614 (list python-setuptools))
25615 (home-page "https://github.com/hawkowl/incremental")
25616 (synopsis "Library for versioning Python projects")
25617 (description "Incremental is a small library that versions your Python
25618 projects.")
25619 (license license:expat)))
25620
25621(define-public python-invoke
25622 (package
25623 (name "python-invoke")
25624 (version "2.2.1")
25625 (source
25626 (origin
25627 (method url-fetch)
25628 (uri (pypi-uri "invoke" version))
25629 (sha256
25630 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25631 ;; TODO: invoke/vendor contains:
25632 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25633 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25634 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25635 (build-system pyproject-build-system)
25636 (arguments
25637 (list
25638 ;; XXX: Requires many dependencies that are not yet in Guix.
25639 #:tests? #f
25640 #:phases
25641 #~(modify-phases %standard-phases
25642 (add-after 'unpack 'fix-bash-path
25643 (lambda _
25644 (let ((bash #$(this-package-input "bash-minimal")))
25645 (substitute* "invoke/config.py"
25646 (("shell = \"/bin/bash\"")
25647 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25648 (native-inputs
25649 (list python-setuptools
25650 python-wheel))
25651 (inputs
25652 (list bash-minimal))
25653 (home-page "https://www.pyinvoke.org/")
25654 (synopsis "Pythonic task execution")
25655 (description
25656 "Invoke is a Python task execution tool and library, drawing inspiration
25657from various sources to arrive at a powerful and clean feature set. It is
25658evolved from the Fabric project, but focuses on local and abstract concerns
25659instead of servers and network commands.")
25660 (license license:bsd-3)))
25661
25662(define-public python-automat
25663 (package
25664 (name "python-automat")
25665 (version "24.8.1")
25666 (source (origin
25667 (method url-fetch)
25668 (uri (pypi-uri "Automat" version))
25669 (sha256
25670 (base32
25671 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25672 (build-system pyproject-build-system)
25673 (arguments
25674 (list
25675 #:phases
25676 #~(modify-phases %standard-phases
25677 (replace 'check
25678 (lambda* (#:key tests? test-flags #:allow-other-keys)
25679 (with-directory-excursion #$output
25680 (apply invoke "pytest" "-vv" test-flags))))
25681 ;; Remove script, because it depends on python-twisted.
25682 (add-after 'unpack 'remove-entrypoint
25683 (lambda _
25684 (substitute* "pyproject.toml"
25685 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25686 (native-inputs
25687 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25688 (propagated-inputs
25689 (list python-graphviz python-typing-extensions))
25690 (home-page "https://github.com/glyph/Automat")
25691 (synopsis "Self-service finite-state machines")
25692 (description "Automat is a library for concise, idiomatic Python
25693 expression of finite-state automata (particularly deterministic finite-state
25694 transducers).")
25695 (license license:expat)))
25696
25697(define-public python-constantly
25698 (package
25699 (name "python-constantly")
25700 (version "23.10.4")
25701 (source
25702 (origin
25703 (method url-fetch)
25704 (uri (pypi-uri "constantly" version))
25705 (sha256
25706 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25707 (build-system pyproject-build-system)
25708 (arguments
25709 (list #:tests? #f)) ;cycles with python-twisted
25710 (native-inputs
25711 (list python-setuptools
25712 python-versioneer))
25713 (home-page "https://github.com/twisted/constantly")
25714 (synopsis "Symbolic constants in Python")
25715 (description "Constantly is a Python library that provides symbolic
25716 constant support. It includes collections and constants with text, numeric,
25717 and bit flag values.")
25718 (license license:expat)))
25719
25720(define-public python-attrs
25721 (package
25722 (name "python-attrs")
25723 (version "26.1.0")
25724 (source
25725 (origin
25726 (method git-fetch)
25727 (uri (git-reference
25728 (url "https://github.com/python-attrs/attrs/")
25729 (commit version)))
25730 (file-name (git-file-name name version))
25731 (sha256
25732 (base32 "17gagrqbg4fg7prpsqx746frfzcml13lnzqjjsah0jqc5qxd8yaf"))))
25733 (build-system pyproject-build-system)
25734 (native-inputs
25735 (list python-hatch-fancy-pypi-readme
25736 python-hatch-vcs
25737 python-hatchling
25738 python-hypothesis
25739 python-pytest))
25740 (home-page "https://github.com/python-attrs/attrs/")
25741 (synopsis "Attributes without boilerplate")
25742 (description "@code{attrs} is a Python package with class decorators that
25743 ease the chores of implementing the most common attribute-related object
25744 protocols.")
25745 (license license:expat)))
25746
25747(define-public python-attrs-bootstrap
25748 (package
25749 (inherit python-attrs)
25750 (name "python-attrs-bootstrap")
25751 (native-inputs (list python-hatchling
25752 python-hatch-fancy-pypi-readme
25753 python-hatch-vcs))
25754 (arguments `(#:tests? #f))))
25755
25756(define-public python-astroid
25757 (package
25758 (name "python-astroid")
25759 (version "4.0.4")
25760 (source
25761 (origin
25762 (method git-fetch)
25763 (uri (git-reference
25764 (url "https://github.com/PyCQA/astroid")
25765 (commit (string-append "v" version))))
25766 (file-name (git-file-name name version))
25767 (sha256
25768 (base32 "0dfvih7drm22dvppjangaxlmrq21wazfyglhm3n32rgh6g6m6qms"))))
25769 (build-system pyproject-build-system)
25770 (native-inputs
25771 (list python-mypy-minimal
25772 python-pytest
25773 python-setuptools))
25774 (home-page "https://github.com/PyCQA/astroid")
25775 (synopsis "Python source code base representation")
25776 (description "@code{python-astroid} provides a common base representation
25777of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25778It provides a compatible representation which comes from the _ast module. It
25779rebuilds the tree generated by the builtin _ast module by recursively walking
25780down the AST and building an extended ast. The new node classes have
25781additional methods and attributes for different usages. They include some
25782support for static inference and local name scopes. Furthermore, astroid
25783builds partial trees by inspecting living objects.")
25784 (license license:lgpl2.1+)))
25785
25786(define-public python-isbnlib
25787 (package
25788 (name "python-isbnlib")
25789 (version "3.10.14")
25790 (source
25791 (origin
25792 (method git-fetch)
25793 (uri (git-reference
25794 (url "https://github.com/xlcnd/isbnlib")
25795 (commit (string-append "v" version))))
25796 (file-name (git-file-name name version))
25797 (sha256
25798 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25799 (build-system pyproject-build-system)
25800 (arguments
25801 (list
25802 #:test-flags #~(list "-m" "not network")))
25803 (native-inputs (list python-pytest python-setuptools))
25804 (home-page "https://github.com/xlcnd/isbnlib")
25805 (synopsis "Python library to work with ISBN strings")
25806 (description
25807 "@code{python-isbnlib} is a (pure) python library that provides several
25808useful methods and functions to validate, clean, transform, hyphenate and get
25809metadata for ISBN strings. Its origin was as the core of isbntools. This
25810short version, is suitable to be include as a dependency in other projects.")
25811 (license license:lgpl3+)))
25812
25813(define-public python-isoduration
25814 ;; XXX: The project might be abandoned, consider to remove when nothing
25815 ;; depends on it.
25816 (package
25817 (name "python-isoduration")
25818 (version "20.11.0")
25819 (source
25820 (origin
25821 (method git-fetch)
25822 (uri (git-reference
25823 (url "https://github.com/bolsote/isoduration")
25824 (commit version)))
25825 (file-name (git-file-name name version))
25826 (sha256
25827 (base32 "1naml13qa1inr6k0j25jgw49r3wnkvwq5xc0v4navz6mxlgsrfp8"))))
25828 (build-system pyproject-build-system)
25829 (arguments
25830 (list
25831 ;; E ModuleNotFoundError: No module named 'isodate'
25832 #:test-flags #~(list "--ignore=tests/test_benchmark.py")))
25833 (native-inputs
25834 (list python-pytest
25835 python-setuptools))
25836 (propagated-inputs
25837 (list python-arrow))
25838 (home-page "https://github.com/bolsote/isoduration")
25839 (synopsis "Operations with ISO 8601 durations")
25840 (description "ISO 8601 is most commonly known as a way to exchange
25841datetimes in textual format. A lesser known aspect of the standard is the
25842representation of durations. The state of the art of ISO 8601 duration
25843handling in Python is more or less limited to what's offered by isodate. This
25844package attempts to address the shortcomings of @code{isodate}.")
25845 (license license:isc)))
25846
25847(define-public python-isort
25848 (package
25849 (name "python-isort")
25850 (version "9.0.1")
25851 (source
25852 (origin
25853 (method git-fetch) ;no tests in PyPI archive
25854 (uri (git-reference
25855 (url "https://github.com/PyCQA/isort")
25856 (commit version)))
25857 (file-name (git-file-name name version))
25858 (modules '((guix build utils)))
25859 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25860 (sha256
25861 (base32 "0xrhrk245v7wqrh6ql1ysnfb1v6sh0mrzbvyaxq36hddvxdx7f45"))))
25862 (build-system pyproject-build-system)
25863 (arguments
25864 (list
25865 #:test-flags
25866 ;; Ignore benchmark and integration to reduce closure size.
25867 #~(list "--ignore=tests/benchmark/"
25868 "--ignore=tests/integration/"
25869 "--ignore=tests/unit/profiles/test_black.py"
25870 "-k" (string-join
25871 (list "not test_gitignore"
25872 "test_isort_supports_shared_profiles_issue_970"
25873 "test_requirements_dir"
25874 "test_requirements_finder"
25875 "test_sort_configurable_sort_issue_1732"
25876 "test_sort_imports_error_handling")
25877 " and not "))))
25878 ;; TODO: Package example plugins separately, available in PyPI:
25879 ;; - example_isort_formatting_plugin
25880 ;; - example_isort_sorting_plugin
25881 ;; - example_shared_isort_profile
25882 (native-inputs
25883 (list python-black
25884 python-colorama
25885 python-hatch-vcs
25886 python-hatchling
25887 python-hypothesis
25888 python-pylama
25889 python-pytest))
25890 (propagated-inputs
25891 ;; XXX: python-mypy-extensions can be dropped when
25892 ;; https://github.com/PyCQA/isort/issues/2629 is fixed.
25893 (list python-mypy-extensions))
25894 (home-page "https://github.com/PyCQA/isort")
25895 (synopsis "Python utility/library to sort python imports")
25896 (description
25897 "@code{python-isort} is a python utility/library to sort imports
25898alphabetically, and automatically separated into sections. It provides a
25899command line utility, a python library and plugins for various editors.")
25900 (license license:expat)))
25901
25902(define-public python-configparser
25903 (package
25904 (name "python-configparser")
25905 (version "7.2.0")
25906 (source
25907 (origin
25908 (method url-fetch)
25909 (uri (pypi-uri "configparser" version))
25910 (sha256
25911 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25912 (build-system pyproject-build-system)
25913 (native-inputs
25914 (list python-pytest
25915 python-setuptools
25916 python-setuptools-scm
25917 python-wheel))
25918 (home-page "https://github.com/jaraco/configparser/")
25919 (synopsis "Backport of configparser from python 3.5")
25920 (description "@code{python-configparser} is a backport of
25921 @code{configparser} from Python 3.5 so that it can be used directly
25922 in other versions.")
25923 (license license:expat)))
25924
25925(define-public python-mando
25926 (package
25927 (name "python-mando")
25928 (version "0.8.2")
25929 (source
25930 (origin
25931 (method url-fetch)
25932 (uri (pypi-uri "mando" version))
25933 (sha256
25934 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25935 (build-system pyproject-build-system)
25936 (native-inputs
25937 (list python-pytest python-setuptools))
25938 (home-page "https://mando.readthedocs.org/")
25939 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25940 (description
25941 "This package is a wrapper around argparse, allowing you to write complete CLI
25942applications in seconds while maintaining all the flexibility.")
25943 (license license:expat)))
25944
25945(define-public python-mwclient
25946 (package
25947 (name "python-mwclient")
25948 (version "0.11.0")
25949 (source
25950 (origin
25951 (method git-fetch)
25952 (uri (git-reference
25953 (url "https://github.com/mwclient/mwclient")
25954 (commit (string-append "v" version))))
25955 (file-name (git-file-name name version))
25956 (sha256
25957 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25958 (build-system pyproject-build-system)
25959 (propagated-inputs
25960 (list python-requests-oauthlib))
25961 (native-inputs
25962 (list python-mock
25963 python-pytest
25964 python-responses
25965 python-setuptools))
25966 (home-page "https://github.com/btongminh/mwclient")
25967 (synopsis "MediaWiki API client")
25968 (description "This package provides a MediaWiki API client.")
25969 (license license:expat)))
25970
25971(define-public python-kneed
25972 (package
25973 (name "python-kneed")
25974 (version "0.8.5")
25975 (source
25976 (origin
25977 (method git-fetch)
25978 (uri (git-reference
25979 (url "https://github.com/arvkevi/kneed")
25980 (commit (string-append "v" version))))
25981 (file-name (git-file-name name version))
25982 (sha256
25983 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25984 (build-system pyproject-build-system)
25985 (arguments
25986 (list
25987 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25988 (native-inputs (list python-hatchling python-pytest))
25989 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25990 (home-page "https://github.com/arvkevi/kneed")
25991 (synopsis "Knee-point detection in Python")
25992 (description
25993 "This package implements the kneedle algorithm. Given a set of x and y
25994values, kneed will return the knee point of the function. The knee point is
25995the point of maximum curvature.")
25996 (license license:bsd-3)))
25997
25998(define-public python-diff-cover
25999 (package
26000 (name "python-diff-cover")
26001 (version "9.7.1")
26002 (source
26003 (origin
26004 (method url-fetch)
26005 (uri (pypi-uri "diff_cover" version))
26006 (sha256
26007 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
26008 (build-system pyproject-build-system)
26009 (arguments
26010 (list
26011 #:test-flags
26012 ;; Dropp check of flake8 in tests.
26013 #~(list "-k" "not test_file_does_not_exist")))
26014 (native-inputs
26015 (list python-pycodestyle
26016 python-poetry-core
26017 python-pyflakes
26018 python-pylint
26019 python-pytest
26020 python-pytest-datadir
26021 python-pytest-mock))
26022 (propagated-inputs
26023 (list python-chardet
26024 python-jinja2
26025 python-pluggy
26026 python-pygments
26027 python-setuptools ; For pkg_resources.
26028 python-tomli))
26029 (home-page "https://github.com/Bachmann1234/diff_cover")
26030 (synopsis "Run coverage and linting reports on diffs")
26031 (description
26032 "Automatically find diff lines that need test coverage. It also finds
26033diff lines that have violations (according to tools such as pycodestyle,
26034pyflakes, flake8, or pylint). This is used as a code quality metric during
26035code reviews.")
26036 (license license:asl2.0)))
26037
26038(define-public python-diff-match-patch
26039 (package
26040 (name "python-diff-match-patch")
26041 (version "20241021")
26042 (source
26043 (origin
26044 (method url-fetch)
26045 (uri (pypi-uri "diff_match_patch" version))
26046 (sha256
26047 (base32
26048 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
26049 (build-system pyproject-build-system)
26050 (native-inputs (list python-flit-core python-pytest))
26051 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
26052 (synopsis "Synchronize plain text")
26053 (description "Diff Match and Patch libraries offer robust algorithms to
26054 perform the operations required for synchronizing plain text.")
26055 (license license:asl2.0)))
26056
26057(define-public python-icdiff
26058 (package
26059 (name "python-icdiff")
26060 (version "2.0.7")
26061 (source (origin
26062 (method git-fetch)
26063 (uri (git-reference
26064 (url "https://github.com/jeffkaufman/icdiff")
26065 (commit (string-append "release-" version))))
26066 (file-name (git-file-name name version))
26067 (sha256
26068 (base32
26069 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
26070 (build-system pyproject-build-system)
26071 (arguments
26072 (list #:tests? #f)) ; there are no test scripts
26073 (native-inputs (list python-setuptools python-wheel))
26074 (home-page "https://www.jefftk.com/icdiff")
26075 (synopsis "Improved colored diff")
26076 (description "This package provides colored diff functions that highlight
26077parts of the lines that were modified.")
26078 (license license:psfl)))
26079
26080(define-public python-dirsync
26081 (package
26082 (name "python-dirsync")
26083 (version "2.2.6")
26084 (source
26085 (origin
26086 (method url-fetch)
26087 (uri (pypi-uri "dirsync" version))
26088 (sha256
26089 (base32
26090 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
26091 (build-system pyproject-build-system)
26092 (arguments
26093 ;; No tests in PyPI release and GitHub repository does not have the
26094 ;; latest release tag.
26095 (list #:tests? #f))
26096 (native-inputs (list python-setuptools python-wheel))
26097 (home-page "https://github.com/tkhyn/dirsync")
26098 (synopsis "Advanced directory tree synchronisation tool")
26099 (description
26100 "Dirsync is an advanced directory tree synchronisation tool.")
26101 (license license:expat)))
26102
26103(define-public python-levenshtein
26104 (package
26105 (name "python-levenshtein")
26106 ;; 0.27.3 (2025-11-01), the latest changes provide compatibility with
26107 ;; Cython 3.2.x, see: <https://github.com/rapidfuzz/Levenshtein/pull/84>.
26108 (properties '((commit . "7c905d9f4e788a95f5f1696517e6ff06d639943f")
26109 (revision . "0")))
26110 (version (git-version "0.27.3"
26111 (assoc-ref properties 'revision)
26112 (assoc-ref properties 'commit)))
26113 (source
26114 (origin
26115 (method git-fetch)
26116 (uri (git-reference
26117 (url "https://github.com/rapidfuzz/Levenshtein")
26118 (commit (assoc-ref properties 'commit))))
26119 (file-name (git-file-name name version))
26120 (sha256
26121 (base32 "14jdpxyc28bqjv3rmj4a5nrg0p6v6hazqilh1hdwjrd71hlxa6s3"))))
26122 (build-system pyproject-build-system)
26123 (propagated-inputs (list python-rapidfuzz))
26124 (native-inputs
26125 (list python-cython
26126 python-pytest
26127 python-scikit-build-core
26128 rapidfuzz-cpp))
26129 (home-page "https://github.com/rapidfuzz/Levenshtein")
26130 (synopsis "Fast computation of Levenshtein distance and string similarity")
26131 (description
26132 "The Levenshtein Python C extension module contains functions for fast computation of
26133@enumerate
26134@item Levenshtein (edit) distance, and edit operations
26135@item string similarity
26136@item approximate median strings, and generally string averaging
26137@item string sequence and set similarity
26138@end enumerate
26139It supports both normal and Unicode strings.")
26140 (license license:gpl2+)))
26141
26142(define-public python-factory-boy
26143 (package
26144 (name "python-factory-boy")
26145 (version "3.3.3")
26146 (source
26147 (origin
26148 (method url-fetch)
26149 (uri (pypi-uri "factory_boy" version))
26150 (sha256
26151 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
26152 (build-system pyproject-build-system)
26153 (arguments
26154 ;; Tests are not included in the tarball.
26155 `(#:tests? #f))
26156 (native-inputs (list python-setuptools))
26157 (propagated-inputs (list python-faker))
26158 (home-page "https://github.com/FactoryBoy/factory_boy")
26159 (synopsis "Versatile test fixtures replacement")
26160 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
26161factory_girl. As a fixtures replacement tool, it aims to replace static, hard
26162to maintain fixtures with easy-to-use factories for complex object. Instead
26163of building an exhaustive test setup with every possible combination of corner
26164cases, factory_boy allows you to use objects customized for the current test,
26165while only declaring the test-specific fields.")
26166 (license license:expat)))
26167
26168(define-public python-gtts
26169 (package
26170 (name "python-gtts")
26171 (version "2.5.4")
26172 (source
26173 (origin
26174 (method git-fetch)
26175 (uri (git-reference
26176 (url "https://github.com/pndurette/gTTS")
26177 (commit (string-append "v" version))))
26178 (file-name (git-file-name name version))
26179 (sha256
26180 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
26181 (build-system pyproject-build-system)
26182 (arguments
26183 ;; Disable tests that require internet.
26184 (list #:test-flags '(list "-k" "not net")))
26185 (native-inputs
26186 (list python-pytest python-setuptools python-testfixtures))
26187 (propagated-inputs
26188 (list python-click-8.1 python-requests))
26189 (home-page "https://github.com/pndurette/gTTS")
26190 (synopsis "Google Translate text-to-speech interface")
26191 (description
26192 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
26193interface with the Google Translate text-to-speech API. It lets you write
26194spoken MP3 data to a file, a file-like object (bytestring) for further audio
26195manipulation, or @code{stdout}.")
26196 (license license:expat)))
26197
26198(define-public python-packaging-legacy
26199 (package
26200 (name "python-packaging-legacy")
26201 (version "23.0.post0")
26202 (source
26203 (origin
26204 (method url-fetch)
26205 (uri (pypi-uri "packaging_legacy" version))
26206 (sha256
26207 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
26208 (build-system pyproject-build-system)
26209 (propagated-inputs (list python-packaging))
26210 (native-inputs
26211 (list python-pretend
26212 python-pytest
26213 python-setuptools
26214 python-wheel))
26215 (home-page "https://pypi.org/project/packaging-legacy/")
26216 (synopsis "Core utilities for legacy Python packages")
26217 (description "This library provides support for legacy Python Packaging
26218functionality removed from @code{packaging}.")
26219 (license license:asl2.0)))
26220
26221(define-public python-relatorio
26222 (package
26223 (name "python-relatorio")
26224 (version "0.11.1")
26225 (source
26226 (origin
26227 (method url-fetch)
26228 (uri (pypi-uri "relatorio" version))
26229 (sha256
26230 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
26231 (build-system pyproject-build-system)
26232 (native-inputs
26233 (list python-pytest
26234 python-setuptools))
26235 (propagated-inputs
26236 (list python-genshi
26237 python-lxml
26238 python-magic))
26239 (home-page "https://relatorio.tryton.org/")
26240 (synopsis "Templating library able to output ODT and PDF files")
26241 (description
26242 "Relatorio is a templating library which provides a way to easily output
26243ODT, ODS, PNG, SVG and several other kinds of files. Support for more
26244filetypes can be easily added by creating plugins for them.")
26245 (license license:gpl3+)))
26246
26247(define-public python-radon
26248 (package
26249 (name "python-radon")
26250 (version "6.0.1")
26251 (source
26252 (origin
26253 (method git-fetch)
26254 (uri (git-reference
26255 (url "https://github.com/rubik/radon")
26256 (commit (string-append "v" version))))
26257 (file-name (git-file-name name version))
26258 (sha256
26259 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
26260 (build-system pyproject-build-system)
26261 (arguments
26262 (list
26263 #:phases
26264 #~(modify-phases %standard-phases
26265 (add-after 'unpack 'relax-requirements
26266 (lambda _
26267 (substitute* (list "pyproject.toml" "requirements.txt")
26268 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
26269 mando-lower-bound)))))))
26270 (propagated-inputs (list python-colorama python-mando))
26271 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
26272 python-setuptools))
26273 (home-page "https://radon.readthedocs.org/")
26274 (synopsis "Code Metrics in Python")
26275 (description
26276 "Radon is a Python tool which computes various code metrics. Supported
26277metrics are:
26278@itemize @bullet
26279@item raw metrics: SLOC, comment lines, blank lines, &c.
26280@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
26281@item Halstead metrics (all of them)
26282@item the Maintainability Index (a Visual Studio metric)
26283@end itemize")
26284 (license license:expat)))
26285
26286(define-public python-rgbxy
26287 (package
26288 (name "python-rgbxy")
26289 (version "0.5")
26290 (source
26291 (origin
26292 (method url-fetch)
26293 (uri (pypi-uri "rgbxy" version))
26294 (sha256
26295 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
26296 (build-system pyproject-build-system)
26297 (arguments
26298 (list #:tests? #f)) ;no tests in PyPI or Git
26299 (native-inputs
26300 (list python-setuptools))
26301 (home-page "https://github.com/benknight/hue-python-rgb-converter")
26302 (synopsis "RGB conversion tool in Python")
26303 (description
26304 "This package implements functionality of RGB/CIE1931 'xy' gammuts
26305conversion: Gamut A, B, and C.")
26306 (license license:expat)))
26307
26308(define-public python-jsonpointer
26309 (package
26310 (name "python-jsonpointer")
26311 (version "3.1.1")
26312 (source
26313 (origin
26314 (method git-fetch)
26315 (uri (git-reference
26316 (url "https://github.com/stefankoegl/python-json-pointer")
26317 (commit (string-append "v" version))))
26318 (file-name (git-file-name name version))
26319 (sha256
26320 (base32 "1k7szx4k2h3zidw01i96fg9x5gnir5fdvlnpgb48xhg0si12ly1y"))))
26321 (build-system pyproject-build-system)
26322 (arguments (list #:test-backend #~'unittest))
26323 (native-inputs
26324 (list python-setuptools))
26325 (home-page "https://github.com/stefankoegl/python-json-pointer")
26326 (synopsis "Identify specific nodes in a JSON document")
26327 (description
26328 "@code{jsonpointer} allows you to access specific nodes by path in a JSON
26329document (see RFC 6901).")
26330 (license license:bsd-3)))
26331
26332(define-public python-jsonpatch
26333 (package
26334 (name "python-jsonpatch")
26335 (version "1.33")
26336 (source
26337 (origin
26338 (method git-fetch)
26339 ;; pypi version lacks tests.js
26340 (uri (git-reference
26341 (url "https://github.com/stefankoegl/python-json-patch")
26342 (commit (string-append "v" version))))
26343 (file-name (git-file-name name version))
26344 (sha256
26345 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
26346 (build-system pyproject-build-system)
26347 (arguments
26348 (list #:test-backend #~'custom
26349 #:test-flags #~(list "tests.py")))
26350 (native-inputs
26351 (list python-setuptools))
26352 (propagated-inputs
26353 (list python-jsonpointer))
26354 (home-page "https://github.com/stefankoegl/python-json-patch")
26355 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
26356 (description "@code{jsonpatch} is a library and program that allows
26357 applying JSON Patches according to RFC 6902.")
26358 (license license:bsd-3)))
26359
26360(define-public python-rfc3987-syntax
26361 (package
26362 (name "python-rfc3987-syntax")
26363 (version "1.1.0")
26364 (source
26365 (origin
26366 (method git-fetch)
26367 (uri (git-reference
26368 (url "https://github.com/willynilly/rfc3987-syntax")
26369 (commit (string-append "v" version))))
26370 (file-name (git-file-name name version))
26371 (sha256
26372 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
26373 (build-system pyproject-build-system)
26374 (native-inputs
26375 (list python-hatchling
26376 python-pytest))
26377 (propagated-inputs
26378 (list python-lark))
26379 (home-page "https://github.com/willynilly/rfc3987-syntax")
26380 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
26381 (description
26382 "This package validates Internationalized Resource Identifiers (IRIs) and
26383their components against the ABNF grammar from RFC 3987. Built on the Lark
26384parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26385package, and provides the @code{format-nongpl} extra required by recent
26386@code{jsonschema} releases.")
26387 (license license:expat)))
26388
26389(define-public python-rfc3986
26390 (package
26391 (name "python-rfc3986")
26392 (version "2.0.0")
26393 (source
26394 (origin
26395 (method url-fetch)
26396 (uri (pypi-uri "rfc3986" version))
26397 (sha256
26398 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26399 (build-system pyproject-build-system)
26400 (native-inputs
26401 (list python-pytest python-setuptools))
26402 (home-page "https://rfc3986.readthedocs.io/")
26403 (synopsis "Parse and validate URI references")
26404 (description
26405 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26406validation and authority parsing. This module also supports RFC@tie{}6874
26407which adds support for zone identifiers to IPv6 addresses.")
26408 (license license:asl2.0)))
26409
26410(define-public python-rfc3986-validator
26411 (package
26412 (name "python-rfc3986-validator")
26413 (version "0.1.1")
26414 (source
26415 (origin
26416 (method url-fetch)
26417 (uri (pypi-uri "rfc3986_validator" version))
26418 (sha256
26419 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26420 (build-system pyproject-build-system)
26421 (native-inputs
26422 (list python-pytest
26423 python-rfc3987
26424 python-setuptools))
26425 (home-page "https://github.com/naimetti/rfc3986-validator")
26426 (synopsis "Pure python rfc3986 validator")
26427 (description "This package implements a URI validator according to RFC3986
26428in pure Python.")
26429 (license license:expat)))
26430
26431(define-public python-rfc3987
26432 (package
26433 (name "python-rfc3987")
26434 (version "1.3.8")
26435 (source
26436 (origin
26437 (method url-fetch)
26438 (uri (pypi-uri "rfc3987" version))
26439 (sha256
26440 (base32
26441 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26442 (build-system pyproject-build-system)
26443 (arguments
26444 (list #:test-backend #~'custom
26445 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26446 (native-inputs
26447 (list python-setuptools))
26448 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26449 (home-page "https://pypi.org/project/rfc3987/")
26450 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26451 (description "@code{rfc3987} provides routines for parsing and
26452 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26453 (license license:gpl3+)))
26454
26455;; The latest commit contains fixes for building with both python3 and python2.
26456(define-public python-rfc6555
26457 (package
26458 (name "python-rfc6555")
26459 (version "0.1.0")
26460 (source
26461 (origin
26462 (method git-fetch)
26463 (uri (git-reference
26464 (url "https://github.com/sethmlarson/rfc6555")
26465 (commit (string-append "v" version))))
26466 (file-name (git-file-name name version))
26467 (sha256
26468 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26469 (build-system pyproject-build-system)
26470 (arguments
26471 (list
26472 ;; Other tests require network access.
26473 #:test-flags #~(list "tests/test_ipv6.py")))
26474 (native-inputs (list python-pytest python-setuptools))
26475 (home-page "https://pypi.org/project/rfc6555/")
26476 (synopsis "Python implementation of RFC 6555")
26477 (description
26478 "Python implementation of the Happy Eyeballs Algorithm described in RFC
264796555. Provided with a single file and dead-simple API to allow easy vendoring
26480and integration into other projects.")
26481 (license license:asl2.0)))
26482
26483(define-public python-sacn
26484 (package
26485 (name "python-sacn")
26486 (version "1.11.0")
26487 (source
26488 (origin
26489 (method url-fetch)
26490 (uri (pypi-uri "sacn" version))
26491 (sha256
26492 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26493 (build-system pyproject-build-system)
26494 (native-inputs (list python-pytest python-setuptools python-wheel))
26495 (home-page "https://github.com/Hundemeier/sacn")
26496 (synopsis "Python library for sending and receiving sACN data")
26497 (description
26498 "This package provides a Python library for sending and receiving
26499 sACN (Streaming Architecture for Control Networks) data, a standard
26500 protocol used for controlling lighting and other devices over
26501 a network.")
26502 (license license:expat)))
26503
26504(define-public python-bagit
26505 (package
26506 (name "python-bagit")
26507 (version "1.9.0")
26508 (source
26509 (origin
26510 (method git-fetch) ; no tests in PyPI
26511 (uri (git-reference
26512 (url "https://github.com/LibraryOfCongress/bagit-python")
26513 (commit (string-append "v" version))))
26514 (file-name (git-file-name name version))
26515 (sha256
26516 (base32
26517 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26518 (build-system pyproject-build-system)
26519 (arguments
26520 (list #:test-flags #~(list "test.py")))
26521 (native-inputs
26522 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26523 (home-page "https://libraryofcongress.github.io/bagit-python/")
26524 (synopsis "Create and validate BagIt packages")
26525 (description "Bagit is a Python library and command line utility for working
26526 with BagIt style packages. BagIt is a minimalist packaging format for digital
26527 preservation.")
26528 (license license:cc0)))
26529
26530(define-public python-prov
26531 (package
26532 (name "python-prov")
26533 (version "2.1.1")
26534 (source
26535 (origin
26536 (method git-fetch)
26537 (uri (git-reference
26538 (url "https://github.com/trungdong/prov")
26539 (commit version)))
26540 (file-name (git-file-name name version))
26541 (sha256
26542 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26543 (build-system pyproject-build-system)
26544 (arguments
26545 (list
26546 #:test-backend #~'unittest
26547 #:test-flags #~(list "discover" "-s" "src")
26548 #:phases
26549 #~(modify-phases %standard-phases
26550 (add-before 'check 'disable-tests
26551 (lambda _
26552 ;; prov.model.ProvException: The provided identifier
26553 ;; "http://www.example.org/bundle" is not valid
26554 (substitute* "src/prov/tests/qnames.py"
26555 (("test_namespace_inheritance")
26556 "disabled_test_namespace_inheritance")
26557 (("test_default_namespace_inheritance")
26558 "disabled_test_default_namespace_inheritance")))))))
26559 (native-inputs
26560 (list python-setuptools))
26561 (propagated-inputs
26562 (list graphviz
26563 python-dateutil
26564 python-networkx
26565 python-pydot
26566 ;; optional dependencies, also needed for tests
26567 python-lxml
26568 python-rdflib))
26569 (home-page "https://github.com/trungdong/prov")
26570 (synopsis
26571 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26572 (description
26573 "This package provides a library for W3C Provenance Data Model supporting
26574 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26575 (license license:expat)))
26576
26577(define-public python-arcp
26578 (package
26579 (name "python-arcp")
26580 (version "0.2.1")
26581 (source
26582 (origin
26583 (method git-fetch)
26584 (uri (git-reference
26585 (url "https://github.com/stain/arcp-py")
26586 (commit version)))
26587 (file-name (git-file-name name version))
26588 (sha256
26589 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26590 (build-system pyproject-build-system)
26591 (arguments
26592 (list
26593 #:phases
26594 #~(modify-phases %standard-phases
26595 (add-after 'unpack 'patch-tests
26596 (lambda _
26597 (substitute* "tests/test_parse.py"
26598 (("ni:///")
26599 "ni:")))))))
26600 (native-inputs (list python-pytest python-setuptools))
26601 (home-page "https://arcp.readthedocs.io/")
26602 (synopsis "Archive and Package URI parser and generator")
26603 (description
26604 "@acronym{arcp, Archive and Package} provides functions for creating
26605@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26606files packaged in an archive or package, like a ZIP file. arcp URIs can be
26607used to consume or reference hypermedia resources bundled inside a file
26608archive or an application package, as well as to resolve URIs for archive
26609resources within a programmatic framework. This URI scheme provides
26610mechanisms to generate a unique base URI to represent the root of the archive,
26611so that relative URI references in a bundled resource can be resolved within
26612the archive without having to extract the archive content on the local file
26613system. An arcp URI can be used for purposes of isolation (e.g. when
26614consuming multiple archives), security constraints (avoiding \"climb out\"
26615from the archive), or for externally identiyfing sub-resources referenced by
26616hypermedia formats.")
26617 (license license:asl2.0)))
26618
26619;; XXX: Project has no updates since 2019, consider to remove when nothing
26620;; depends on it in the next refresh cycle.
26621;; See: <https://github.com/pipermerriam/flex/issues/237>.
26622(define-public python-flex
26623 (package
26624 (name "python-flex")
26625 (version "6.14.1")
26626 (source
26627 (origin
26628 (method url-fetch)
26629 (uri (pypi-uri "flex" version))
26630 (sha256
26631 (base32
26632 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26633 (build-system pyproject-build-system)
26634 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26635 (native-inputs
26636 (list python-setuptools))
26637 (propagated-inputs
26638 (list python-click
26639 python-jsonpointer
26640 python-pyyaml
26641 python-requests
26642 python-rfc3987
26643 python-six
26644 python-strict-rfc3339
26645 python-validate-email))
26646 (home-page "https://github.com/pipermerriam/flex")
26647 (synopsis "Validates Swagger schemata")
26648 (description "@code{flex} can be used to validate Swagger schemata.")
26649 (license license:bsd-3)))
26650
26651(define-public python-marshmallow
26652 (package
26653 (name "python-marshmallow")
26654 (version "4.0.0")
26655 (source
26656 (origin
26657 (method url-fetch)
26658 (uri (pypi-uri "marshmallow" version))
26659 (sha256
26660 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26661 (build-system pyproject-build-system)
26662 (arguments
26663 (list
26664 ;; tests: x86_64 1117 passed
26665 ;; i686-linux 1116 passed, 1 deselected
26666 #:test-flags
26667 #~(list #$@(if (target-64bit?)
26668 '()
26669 ;; OverflowError
26670 '((string-append "--deselect=tests/test_utils.py"
26671 "::test_from_timestamp_with_overflow_value"))))))
26672 (native-inputs
26673 (list python-flit-core
26674 python-pytest
26675 python-simplejson
26676 tzdata-for-tests))
26677 (home-page "https://github.com/marshmallow-code/marshmallow")
26678 (synopsis "Convert complex datatypes to and from native Python datatypes")
26679 (description
26680 "@code{marshmallow} provides a library for converting complex datatypes
26681to and from native Python datatypes.")
26682 (license license:expat)))
26683
26684(define-public python-marshmallow-3
26685 (package
26686 (inherit python-marshmallow)
26687 (version "3.22.0")
26688 (source
26689 (origin
26690 (method url-fetch)
26691 (uri (pypi-uri "marshmallow" version))
26692 (sha256
26693 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26694 (arguments '())
26695 (native-inputs
26696 (list python-pytest
26697 python-pytz
26698 python-simplejson
26699 python-flit-core))
26700 (propagated-inputs
26701 (list python-packaging))))
26702
26703
26704(define-public python-apispec
26705 (package
26706 (name "python-apispec")
26707 (version "6.8.2")
26708 (source
26709 (origin
26710 (method url-fetch)
26711 (uri (pypi-uri "apispec" version))
26712 (sha256
26713 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26714 (build-system pyproject-build-system)
26715 (native-inputs
26716 (list python-flit-core
26717 python-openapi-spec-validator
26718 python-pytest))
26719 (propagated-inputs
26720 (list python-marshmallow
26721 python-packaging
26722 python-pyyaml))
26723 (home-page "https://github.com/marshmallow-code/apispec")
26724 (synopsis "Swagger/OpenAPI specification generator")
26725 (description
26726 "@code{python-apispec} is a pluggable API specification generator. It
26727currently supports the OpenAPI specification, formerly known as Swagger.")
26728 (license license:expat)))
26729
26730(define-public python-apispec-webframeworks
26731 (package
26732 (name "python-apispec-webframeworks")
26733 (version "1.2.0")
26734 (source
26735 (origin
26736 (method url-fetch)
26737 (uri (pypi-uri "apispec_webframeworks" version))
26738 (sha256
26739 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26740 (build-system pyproject-build-system)
26741 (native-inputs
26742 (list python-aiohttp
26743 python-flit-core
26744 python-bottle
26745 python-flask
26746 python-pytest
26747 python-pyyaml
26748 python-tornado
26749 python-wheel))
26750 (propagated-inputs
26751 (list python-apispec))
26752 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26753 (synopsis "Web framework plugins for apispec")
26754 (description "This package provides plugins for using @code{apispec} with
26755web frameworks.")
26756 (license license:expat)))
26757
26758(define-public python-flasgger
26759 (package
26760 (name "python-flasgger")
26761 (version "0.9.7.1")
26762 (source
26763 (origin
26764 (method git-fetch)
26765 (uri (git-reference
26766 (url "https://github.com/rochacbruno/flasgger")
26767 (commit (string-append "v" version))))
26768 (file-name (git-file-name name version))
26769 (sha256
26770 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26771 (patches
26772 (list
26773 (origin
26774 (method url-fetch)
26775 (uri
26776 (string-append "https://github.com/flasgger/flasgger/commit/"
26777 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26778 (sha256
26779 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26780 (build-system pyproject-build-system)
26781 (arguments
26782 (list
26783 #:test-flags
26784 #~(list "--ignore=tests/test_examples.py"
26785 "tests")))
26786 (propagated-inputs
26787 (list python-flask
26788 python-pyyaml
26789 python-jsonschema
26790 python-mistune
26791 python-six))
26792 (native-inputs
26793 (list python-pytest
26794 python-setuptools))
26795 (home-page "https://github.com/rochacbruno/flasgger/")
26796 (synopsis "Extract Swagger specs from your Flask project")
26797 (description "@code{python-flasgger} allows extracting Swagger specs
26798 from your Flask project. It is a fork of Flask-Swagger.")
26799 (license license:expat)))
26800
26801(define-public python-apache-libcloud
26802 (package
26803 (name "python-apache-libcloud")
26804 (version "3.8.0")
26805 (source
26806 (origin
26807 (method url-fetch)
26808 (uri (pypi-uri "apache-libcloud" version))
26809 (sha256
26810 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26811 (build-system pyproject-build-system)
26812 (arguments
26813 (list
26814 #:tests? #f ; XXX: all tests fail requiring additional credentials
26815 #:phases
26816 #~(modify-phases %standard-phases
26817 (add-after 'unpack 'patch-ssh
26818 (lambda* (#:key inputs #:allow-other-keys)
26819 (substitute* "libcloud/compute/ssh.py"
26820 (("'ssh'")
26821 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26822 (add-after 'unpack 'patch-tests
26823 (lambda _
26824 (substitute* "libcloud/test/compute/test_ssh_client.py"
26825 (("^class ShellOutSSHClientTests")
26826 "@unittest.skip(\"Guix container doesn't have ssh service\")
26827class ShellOutSSHClientTests"))))
26828 (add-before 'check 'copy-secret
26829 (lambda _
26830 (copy-file "libcloud/test/secrets.py-dist"
26831 "libcloud/test/secrets.py"))))))
26832 (inputs
26833 (list openssh))
26834 (propagated-inputs
26835 (list python-requests))
26836 (native-inputs
26837 (list python-pytest python-requests-mock python-setuptools))
26838 (home-page "https://libcloud.apache.org/")
26839 (synopsis "Unified Cloud API")
26840 (description
26841 "@code{libcloud} is a Python library for interacting with many of the
26842popular cloud service providers using a unified API.")
26843 (license license:asl2.0)))
26844
26845(define-public python-smmap
26846 (package
26847 (name "python-smmap")
26848 (version "5.0.2")
26849 (source
26850 (origin
26851 (method url-fetch)
26852 (uri (pypi-uri "smmap" version))
26853 (sha256
26854 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26855 (build-system pyproject-build-system)
26856 (native-inputs
26857 (list python-pytest
26858 python-setuptools
26859 python-wheel))
26860 (home-page "https://github.com/Byron/smmap")
26861 (synopsis "Python sliding window memory map manager")
26862 (description "@code{smmap} is a pure Python implementation of a sliding
26863 window memory map manager.")
26864 (license license:bsd-3)))
26865
26866(define-public python-regex
26867 (package
26868 (name "python-regex")
26869 (version "2026.2.28")
26870 (source
26871 (origin
26872 (method git-fetch)
26873 (uri (git-reference
26874 (url "https://github.com/mrabarnett/mrab-regex")
26875 (commit version)))
26876 (file-name (git-file-name name version))
26877 (sha256
26878 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26879 (build-system pyproject-build-system)
26880 (arguments
26881 (list
26882 #:test-backend #~'unittest
26883 #:test-flags #~(list "-v" "regex.tests.test_regex")
26884 #:phases
26885 #~(modify-phases %standard-phases
26886 (add-before 'check 'remove-local-source
26887 (lambda _
26888 (delete-file-recursively "regex"))))))
26889 (native-inputs
26890 (list python-setuptools))
26891 (home-page "https://github.com/mrabarnett/mrab-regex")
26892 (synopsis "Alternative regular expression module")
26893 (description
26894 "This regular expression implementation is backwards-compatible with the
26895standard @code{re} module, but offers additional functionality like full
26896case-folding for case-insensitive matches in Unicode.")
26897 (license license:psfl)))
26898
26899(define-public python-pysocks
26900 (package
26901 (name "python-pysocks")
26902 (version "1.7.1")
26903 (source
26904 (origin
26905 (method url-fetch)
26906 (uri (pypi-uri "PySocks" version))
26907 (sha256
26908 (base32
26909 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26910 (build-system pyproject-build-system)
26911 (arguments `(#:tests? #f))
26912 (native-inputs
26913 (list python-setuptools))
26914 (home-page "https://github.com/Anorov/PySocks")
26915 (synopsis "SOCKS client module")
26916 (description "@code{pysocks} is an updated and semi-actively maintained
26917version of @code{SocksiPy} with bug fixes and extra features.")
26918 (license license:bsd-3)))
26919
26920(define-public python-pydub
26921 ;; TODO: Move to (gnu packages audio)
26922 (package
26923 (name "python-pydub")
26924 (version "0.25.1")
26925 (source
26926 (origin
26927 (method git-fetch)
26928 (uri (git-reference
26929 (url "https://github.com/jiaaro/pydub")
26930 (commit (string-append "v" version))))
26931 (file-name (git-file-name name version))
26932 (sha256
26933 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26934 (patches
26935 (list
26936 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26937 (origin
26938 (method url-fetch)
26939 (uri
26940 (string-append "https://github.com/jiaaro/pydub/commit/"
26941 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26942 (sha256
26943 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26944 (build-system pyproject-build-system)
26945 (arguments
26946 (list
26947 #:test-backend ''unittest
26948 #:phases
26949 #~(modify-phases %standard-phases
26950 (add-after 'unpack 'fix-ffmpeg-path
26951 (lambda* (#:key inputs #:allow-other-keys)
26952 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26953 (substitute* "pydub/utils.py"
26954 (("return \"ffmpeg\"")
26955 (string-append "return \"" bin "/ffmpeg\""))
26956 (("return \"ffplay\"")
26957 (string-append "return \"" bin "/ffplay\""))
26958 (("return \"ffprobe\"")
26959 (string-append "return \"" bin "/ffprobe\""))
26960 (("warn\\(\"Couldn't find ff")
26961 "# warn\\(\"Couldn't find ff"))))))))
26962 (native-inputs (list python-setuptools))
26963 (home-page "https://pydub.com")
26964 (inputs (list ffmpeg))
26965 (propagated-inputs (list python-scipy))
26966 (synopsis "Manipulate audio with a high level interface in Python")
26967 (description
26968 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26969@code{ffmpeg} to open various audio formats.")
26970 (license license:expat))) ; MIT license
26971
26972(define-public python-pkginfo
26973 (package
26974 (name "python-pkginfo")
26975 (version "1.12.1.2")
26976 (source
26977 (origin
26978 (method url-fetch)
26979 (uri (pypi-uri "pkginfo" version))
26980 (sha256
26981 (base32
26982 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26983 (build-system pyproject-build-system)
26984 (arguments
26985 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26986 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26987 (native-inputs
26988 (list python-pytest
26989 python-setuptools
26990 python-wheel))
26991 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26992 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26993 (description
26994 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26995source distriubtion (an sdist) or a binary distribution (e.g., created by
26996running bdist_egg). It can also query the EGG-INFO directory of an installed
26997distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26998created by running @code{python setup.py develop}).")
26999 (license license:expat)))
27000
27001(define-public python-rbfly
27002 (package
27003 (name "python-rbfly")
27004 (version "0.11.0")
27005 (source
27006 (origin
27007 (method url-fetch)
27008 (uri (pypi-uri "rbfly" version))
27009 (sha256
27010 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
27011 (build-system pyproject-build-system)
27012 (arguments
27013 (list
27014 #:test-flags
27015 #~(list "--pyargs" "rbfly"
27016 #$@(if (target-64bit?)
27017 '()
27018 '((string-append "--deselect=tests/amqp/test_message.py"
27019 "::test_encode_amqp_string_too_long"))))
27020 #:phases
27021 #~(modify-phases %standard-phases
27022 (add-before 'check 'remove-local-source
27023 (lambda _
27024 (delete-file-recursively "rbfly"))))))
27025 (native-inputs
27026 (list python-cython
27027 python-pytest
27028 python-pytest-asyncio
27029 python-pytest-timeout
27030 python-setuptools))
27031 (home-page "https://wrobell.dcmod.org/rbfly/")
27032 (synopsis "Work with RabbitMQ Streams in Python")
27033 (description
27034 "This package implements a functionality to deal with
27035@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
27036@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
27037
27038It is designed and implemented with the following qualities in mind:
27039@itemize
27040@item asynchronous Pythonic API with type annotations
27041@item use of
27042@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
270431.0 message format to enable interoperability between RabbitMQ Stream. clients
27044@item auto reconnection to RabbitMQ broker with lazily created connection
27045objects
27046@end itemize
27047
27048Support of many RabbitMQ Streams broker features:
27049@itemize
27050@item publishing single messages, or in batches, with confirmation
27051@item subscribing to a stream at a specific point in time, from a specific
27052offset, or using offset reference
27053@item stream message filtering
27054@item writing stream offset reference
27055@item message deduplication
27056@item integration with AMQP 1.0 ecosystem at message format level
27057@end itemize")
27058 (license license:gpl3+)))
27059
27060(define-public python-jsonrpclib-pelix
27061 (package
27062 (name "python-jsonrpclib-pelix")
27063 (version "0.3.2")
27064 (source
27065 (origin
27066 (method git-fetch)
27067 (uri (git-reference
27068 (url "https://github.com/tcalmant/jsonrpclib")
27069 (commit (string-append "v" version))))
27070 (file-name (git-file-name name version))
27071 (sha256
27072 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
27073 (build-system pyproject-build-system)
27074 (arguments
27075 (list
27076 #:test-flags #~(list "--deselect=\
27077tests/test_internal.py::InternalTests::test_multicall_success")))
27078 (native-inputs (list python-pytest python-setuptools))
27079 (home-page "https://github.com/tcalmant/jsonrpclib")
27080 (synopsis "JSON-RPC 2.0 client library for Python")
27081 (description
27082 "This library implements the JSON-RPC v2.0 specification
27083(backwards-compatible) as a client library for Python. This version is a fork
27084of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
27085 (license license:asl2.0)))
27086
27087(define-public python-setuptools-git
27088 ;; XXX: The project is abandoned since 2018, consider to remove in the next
27089 ;; refresh cycle.
27090 (package
27091 (name "python-setuptools-git")
27092 (version "1.2")
27093 (source
27094 (origin
27095 (method url-fetch)
27096 (uri (pypi-uri "setuptools-git" version))
27097 (sha256
27098 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
27099 (build-system pyproject-build-system)
27100 (arguments
27101 (list
27102 #:tests? #f ;no tests in PyPI
27103 #:phases
27104 #~(modify-phases %standard-phases
27105 ;; This is needed for tests.
27106 (add-after 'unpack 'configure-git
27107 (lambda _
27108 (setenv "HOME" "/tmp")
27109 (invoke "git" "config" "--global" "user.email" "guix")
27110 (invoke "git" "config" "--global" "user.name" "guix"))))))
27111 (native-inputs
27112 (list git-minimal/pinned python-setuptools python-wheel))
27113 (home-page "https://github.com/msabramo/setuptools-git")
27114 (synopsis "Setuptools revision control system plugin for Git")
27115 (description
27116 "This package provides a plugin for Setuptools for revision control with
27117Git.")
27118 (license license:bsd-3)))
27119
27120(define-public python-setuptools-rust
27121 (package
27122 (name "python-setuptools-rust")
27123 (version "1.11.1")
27124 (source
27125 (origin
27126 (method url-fetch)
27127 (uri (pypi-uri "setuptools_rust" version))
27128 (sha256
27129 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
27130 (build-system pyproject-build-system)
27131 (arguments
27132 (list #:tests? #f)) ;tests require Cargo
27133 (propagated-inputs
27134 (list python-semantic-version
27135 python-setuptools))
27136 (home-page "https://github.com/PyO3/setuptools-rust")
27137 (synopsis "Setuptools plugin for Rust extensions")
27138 (description
27139 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
27140Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
27141 (license license:expat)))
27142
27143(define-public python-setuptools-gettext
27144 (package
27145 (name "python-setuptools-gettext")
27146 (version "0.1.14")
27147 (source
27148 (origin
27149 (method git-fetch)
27150 (uri (git-reference
27151 (url "https://github.com/breezy-team/setuptools-gettext")
27152 (commit (string-append "v" version))))
27153 (file-name (git-file-name name version))
27154 (sha256
27155 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
27156 (build-system pyproject-build-system)
27157 (native-inputs (list python-pytest python-tomli python-setuptools))
27158 (home-page "https://github.com/breezy-team/setuptools-gettext")
27159 (synopsis "Setuptools plugin for gettext")
27160 (description "This package provides a plugin for Setuptools for gettext.")
27161 (license license:gpl2+)))
27162
27163(define-public python-pyclibrary
27164 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
27165 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
27166 (revision "0"))
27167 (package
27168 (name "python-pyclibrary")
27169 (version (git-version "0.2.2" revision commit))
27170 (source
27171 (origin
27172 (method git-fetch)
27173 (uri (git-reference
27174 (url "https://github.com/MatthieuDartiailh/pyclibrary")
27175 (commit commit)))
27176 (file-name (git-file-name name version))
27177 (sha256
27178 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
27179 (build-system pyproject-build-system)
27180 (native-inputs
27181 (list python-pytest
27182 python-setuptools
27183 python-setuptools-scm))
27184 (propagated-inputs
27185 (list python-pyparsing))
27186 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
27187 (synopsis "Wrap dynamic libraries in Python")
27188 (description
27189 "This package helps wrapping dynamic libraries in Python. It includes
27190a pure-Python C parser and an automation library that uses C header file
27191definitions to simplify the use of C bindings.")
27192 (license license:expat))))
27193
27194(define-public python-pyclipper
27195 (package
27196 (name "python-pyclipper")
27197 (version "1.3.0.post6")
27198 (source
27199 (origin
27200 (method git-fetch)
27201 (uri (git-reference
27202 (url "https://github.com/greginvm/pyclipper")
27203 (commit version)))
27204 (file-name (git-file-name name version))
27205 (sha256
27206 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
27207 (build-system pyproject-build-system)
27208 (arguments
27209 (list
27210 #:phases
27211 #~(modify-phases %standard-phases
27212 (add-before 'build 'cythonize-sources
27213 (lambda _
27214 (with-directory-excursion "src/pyclipper"
27215 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
27216 (native-inputs
27217 (list python-cython
27218 python-pytest
27219 python-setuptools
27220 python-setuptools-scm))
27221 (home-page "https://github.com/greginvm/pyclipper")
27222 (synopsis "Wrapper for Angus Johnson's Clipper library")
27223 (description
27224 "Pyclipper is a Cython wrapper for the C++ translation of the
27225Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
27226 (license license:expat)))
27227
27228(define-public python-semver
27229 (package
27230 (name "python-semver")
27231 (version "3.0.4")
27232 (source
27233 (origin
27234 (method url-fetch)
27235 (uri (pypi-uri "semver" version))
27236 (sha256
27237 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
27238 (build-system pyproject-build-system)
27239 (native-inputs (list python-pytest python-setuptools))
27240 (home-page "https://github.com/k-bx/python-semver")
27241 (synopsis "Python helper for Semantic Versioning")
27242 (description
27243 "This package provides a Python library for @url{Semantic Versioning,
27244http://semver.org/}.")
27245 (license license:bsd-3)))
27246
27247(define-public python-phonenumbers
27248 (package
27249 (name "python-phonenumbers")
27250 (version "8.13.37")
27251 (source
27252 (origin
27253 (method git-fetch)
27254 (uri (git-reference
27255 (url "https://github.com/daviddrysdale/python-phonenumbers")
27256 (commit (string-append "v" version))))
27257 (file-name (git-file-name name version))
27258 (sha256
27259 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
27260 (build-system pyproject-build-system)
27261 (arguments
27262 (list
27263 #:test-backend #~'custom
27264 #:test-flags #~(list "-m" "testwrapper")
27265 #:phases
27266 #~(modify-phases %standard-phases
27267 (add-after 'unpack 'chdir
27268 (lambda _
27269 (chdir "python"))))))
27270 (propagated-inputs (list python-protobuf))
27271 (native-inputs (list python-setuptools))
27272 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
27273 (synopsis "Python library for dealing with international phone numbers")
27274 (description
27275 "This package provides a Python port of Google's libphonenumber library.")
27276 (license license:asl2.0)))
27277
27278(define-public python-heapdict
27279 (package
27280 (name "python-heapdict")
27281 (version "1.0.1")
27282 (source
27283 (origin
27284 (method url-fetch)
27285 (uri (pypi-uri "HeapDict" version))
27286 (sha256
27287 (base32
27288 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
27289 (build-system pyproject-build-system)
27290 (arguments (list #:test-backend #~'unittest))
27291 (native-inputs (list python-setuptools))
27292 (home-page "http://stutzbachenterprises.com/")
27293 (synopsis "Heap with decrease-key and increase-key operations")
27294 (description
27295 "heapdict implements the MutableMapping ABC, meaning it works pretty much
27296like a regular Python @code{dict}. It’s designed to be used as a priority
27297queue.")
27298 (license license:bsd-3)))
27299
27300(define-public python-send2trash
27301 (package
27302 (name "python-send2trash")
27303 (version "1.8.2")
27304 (source
27305 (origin (method git-fetch)
27306 ;; Source tarball on PyPI doesn't include tests.
27307 (uri (git-reference
27308 (url "https://github.com/arsenetar/send2trash")
27309 (commit version)))
27310 (file-name (git-file-name name version))
27311 (sha256
27312 (base32
27313 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
27314 (build-system pyproject-build-system)
27315 (arguments
27316 (list
27317 #:phases
27318 '(modify-phases %standard-phases
27319 (add-before 'check 'pre-check
27320 (lambda _ (setenv "HOME" "/tmp"))))))
27321 (native-inputs (list python-pytest python-setuptools python-wheel))
27322 (home-page "https://github.com/arsenetar/send2trash")
27323 (synopsis "Send files to the user's @file{~/Trash} directory")
27324 (description "This package provides a Python library to send files to the
27325user's @file{~/Trash} directory.")
27326 (license license:bsd-3)))
27327
27328(define-public python-pyfavicon
27329 (package
27330 (name "python-pyfavicon")
27331 (version "0.1.1")
27332 (source
27333 (origin
27334 (method git-fetch)
27335 (uri (git-reference
27336 (url "https://github.com/bilelmoussaoui/pyfavicon")
27337 (commit version)))
27338 (file-name (git-file-name name version))
27339 (sha256
27340 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
27341 (build-system pyproject-build-system)
27342 (arguments
27343 (list
27344 #:test-flags
27345 #~(list "-k" (string-join (list
27346 ;; Socket name resolution fails.
27347 "not test_url_icon_link_type"
27348 "test_icon_sizes"
27349 ;; Tuples differ.
27350 "test_largest_icon")
27351 " and not "))))
27352 (native-inputs (list python-pytest python-setuptools))
27353 (propagated-inputs
27354 (list python-aiohttp python-beautifulsoup4 python-pillow))
27355 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27356 (synopsis "Async favicon fetcher")
27357 (description
27358 "@code{pyfavicon} is an async favicon fetcher.")
27359 (license license:expat)))
27360
27361(define-public python-funcy
27362 (package
27363 (name "python-funcy")
27364 (version "1.11")
27365 (source
27366 (origin
27367 (method git-fetch)
27368 (uri (git-reference
27369 (url "https://github.com/Suor/funcy")
27370 (commit version)))
27371 (sha256
27372 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27373 (file-name (git-file-name name version))))
27374 (build-system pyproject-build-system)
27375 (native-inputs
27376 (list python-pytest python-whatever python-setuptools python-wheel))
27377 (home-page "https://github.com/Suor/funcy")
27378 (synopsis "Functional tools")
27379 (description "@code{funcy} is a library that provides functional tools.
27380Examples are:
27381@enumerate
27382@item merge - Merges collections of the same type
27383@item walk - Type-preserving map
27384@item select - Selects a part of a collection
27385@item take - Takes the first n items of a collection
27386@item first - Takes the first item of a collection
27387@item remove - Predicated-removes items of a collection
27388@item concat - Concatenates two collections
27389@item flatten - Flattens a collection with subcollections
27390@item distinct - Returns only distinct items
27391@item split - Predicated-splits a collection
27392@item split_at - Splits a collection at a given item
27393@item group_by - Groups items by group
27394@item pairwise - Pairs off adjacent items
27395@item partial - Partially-applies a function
27396@item curry - Curries a function
27397@item compose - Composes functions
27398@item complement - Complements a predicate
27399@item all_fn - \"all\" with predicate
27400@end enumerate")
27401 (license license:bsd-3)))
27402
27403(define-public python-funcy-1.14
27404 (package/inherit python-funcy
27405 (name "python-funcy")
27406 (version "1.14")
27407 (source
27408 (origin
27409 (method git-fetch)
27410 (uri (git-reference
27411 (url "https://github.com/Suor/funcy")
27412 (commit version)))
27413 (sha256
27414 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27415 (file-name (git-file-name name version))))))
27416
27417(define-public python-isoweek
27418 (package
27419 (name "python-isoweek")
27420 (version "1.3.3")
27421 (source
27422 (origin
27423 (method url-fetch)
27424 (uri (pypi-uri "isoweek" version))
27425 (sha256
27426 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27427 (build-system pyproject-build-system)
27428 (arguments (list #:test-backend #~'unittest))
27429 (native-inputs (list python-setuptools))
27430 (home-page "https://github.com/gisle/isoweek")
27431 (synopsis "Objects representing a week")
27432 (description "The @code{isoweek} module provide the class Week that
27433implements the week definition of ISO 8601. This standard also defines
27434a notation for identifying weeks; yyyyWww (where the W is a literal).
27435Week instances stringify to this form.")
27436 (license license:bsd-3)))
27437
27438(define-public bpython
27439 (package
27440 (name "bpython")
27441 (version "0.25")
27442 (source
27443 (origin
27444 (method url-fetch)
27445 (uri (pypi-uri "bpython" version))
27446 (sha256
27447 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27448 (build-system pyproject-build-system)
27449 (arguments
27450 (list
27451 #:test-flags
27452 ;; Tests can't import curtsies, pygments and urwid.
27453 #~(list "-k" (string-join
27454 (list "not test_issue108"
27455 "test_issue133")
27456 " and not " ))
27457 #:phases
27458 #~(modify-phases %standard-phases
27459 (add-after 'wrap 'add-aliases
27460 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27461 (lambda _
27462 (for-each
27463 (lambda (old new)
27464 (symlink old (string-append #$output "/bin/" new)))
27465 '("bpython" "bpython-urwid" "bpdb")
27466 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27467 (native-inputs
27468 (list python-mock
27469 python-pytest
27470 python-setuptools))
27471 (propagated-inputs
27472 (list python-curtsies
27473 python-cwcwidth
27474 python-greenlet
27475 python-pygments
27476 python-pyxdg
27477 python-requests
27478 ;; [optional]
27479 python-pyperclip
27480 python-jedi
27481 python-urwid-2
27482 python-watchdog))
27483 (home-page "https://bpython-interpreter.org/")
27484 (synopsis "Fancy interface to the Python interpreter")
27485 (description "Bpython is a fancy interface to the Python
27486interpreter. bpython's main features are
27487
27488@enumerate
27489@item in-line syntax highlighting,
27490@item readline-like autocomplete with suggestions displayed as you type,
27491@item expected parameter list for any Python function,
27492@item \"rewind\" function to pop the last line of code from memory and
27493 re-evaluate,
27494@item send the code you've entered off to a pastebin,
27495@item save the code you've entered to a file, and
27496@item auto-indentation.
27497@end enumerate")
27498 (license license:expat)))
27499
27500(define-public python-pyinotify
27501 (package
27502 (name "python-pyinotify")
27503 (version "0.9.6")
27504 (source
27505 (origin
27506 (method git-fetch)
27507 (uri (git-reference
27508 (url "https://github.com/seb-m/pyinotify")
27509 (commit version)))
27510 (file-name (git-file-name name version))
27511 (sha256
27512 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27513 (build-system pyproject-build-system)
27514 (arguments
27515 (list
27516 #:tests? #f ;no tests
27517 #:phases
27518 #~(modify-phases %standard-phases
27519 (add-after 'unpack 'drop-shebang
27520 (lambda _
27521 ;; Dropping this shebang prevents the build system from adding
27522 ;; python-wrapper as an input, reducing package closure size from
27523 ;; ~200 MiB to ~0.2 MiB.
27524 (substitute* "python3/pyinotify.py"
27525 (("#!/usr/bin/env python") "")))))))
27526 (native-inputs
27527 (list python-setuptools))
27528 (propagated-inputs
27529 (list python-pyasyncore))
27530 (home-page "https://github.com/seb-m/pyinotify")
27531 (synopsis "Python library for monitoring inotify events")
27532 (description
27533 "@code{pyinotify} provides a Python interface for monitoring file system
27534events on Linux.")
27535 (license license:expat)))
27536
27537(define-public python-pyinotify-cli
27538 (package
27539 (inherit python-pyinotify)
27540 (name "python-pyinotify-cli")
27541 (arguments
27542 (substitute-keyword-arguments arguments
27543 ((#:phases phases #~%standard-phases)
27544 #~(modify-phases #$phases
27545 (delete 'drop-shebang)
27546 (add-after 'install 'install-entrypoint
27547 (lambda _
27548 (let ((entrypoint
27549 (string-append #$output "/lib/python"
27550 (python-version (which "python"))
27551 "/site-packages/pyinotify.py"))
27552 (bin (string-append #$output "/bin")))
27553 (mkdir-p bin)
27554 (invoke "chmod" "+x" entrypoint)
27555 (symlink
27556 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27557 (description
27558 "This package provides, in addition to the @code{pyinotify} Python library,
27559a command line application exposing the same functionality.")))
27560
27561(define-public python-latex2pydata
27562 (package
27563 (name "python-latex2pydata")
27564 (version "0.5.0")
27565 (source
27566 (origin
27567 (method url-fetch)
27568 (uri (pypi-uri "latex2pydata" version))
27569 (sha256
27570 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27571 (build-system pyproject-build-system)
27572 (native-inputs (list python-setuptools python-wheel python-pytest))
27573 (home-page "https://github.com/gpoore/latex2pydata")
27574 (synopsis "Load data from LaTeX in Python literal format")
27575 (description
27576 "This package is designed to load data in Python literal format that was
27577saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27578passed from LaTeX to Python.")
27579 (license license:bsd-3)))
27580
27581(define-public python-latexcodec
27582 (package
27583 (name "python-latexcodec")
27584 (version "3.0.1")
27585 (source
27586 (origin
27587 (method git-fetch)
27588 (uri (git-reference
27589 (url "https://github.com/mcmtroffaes/latexcodec/")
27590 (commit version)))
27591 (file-name (git-file-name name version))
27592 (sha256
27593 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27594 (build-system pyproject-build-system)
27595 (native-inputs (list python-pytest python-setuptools))
27596 (home-page "https://readthedocs.org/projects/latexcodec/")
27597 (synopsis "Work with LaTeX code in Python")
27598 (description "Lexer and codec to work with LaTeX code in Python.")
27599 (license license:expat)))
27600
27601(define-public python-latexminted
27602 (package
27603 (name "python-latexminted")
27604 (version "0.7.1")
27605 (source
27606 (origin
27607 (method url-fetch)
27608 (uri (pypi-uri "latexminted" version))
27609 (sha256
27610 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27611 (build-system pyproject-build-system)
27612 (arguments (list #:tests? #f)) ; No tests upstream.
27613 (propagated-inputs (list python-latex2pydata
27614 python-latexrestricted
27615 python-pygments))
27616 (native-inputs (list texlive-kpathsea python-setuptools))
27617 (home-page "https://github.com/gpoore/minted")
27618 (synopsis "Python library for the LaTeX minted package")
27619 (description "This Python package provides the Python side of the
27620@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27621@code{python-pygments} library. It also provides several code formatting and
27622manipulation features implemented in Python that would be difficult to perform
27623in LaTeX, such as dedenting code and extracting code snippets from source files
27624using regular expressions.")
27625 (license license:lppl1.3c+)))
27626
27627(define-public python-latexrestricted
27628 (package
27629 (name "python-latexrestricted")
27630 (version "0.6.2")
27631 (source
27632 (origin
27633 (method url-fetch)
27634 (uri (pypi-uri "latexrestricted" version))
27635 (sha256
27636 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27637 (build-system pyproject-build-system)
27638 (arguments
27639 (list
27640 #:tests? #f ;no test
27641 #:phases
27642 #~(modify-phases %standard-phases
27643 (add-after 'unpack 'fix-paths
27644 (lambda* (#:key inputs #:allow-other-keys)
27645 (let ((pystr (lambda (s) (string-append "'" s "'")))
27646 (kpse (search-input-file inputs "/bin/kpsewhich")))
27647 (substitute* "latexrestricted/_latex_config.py"
27648 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27649 ;; this variable is bogus in Guix because binaries are scattered
27650 ;; across multiple directories. This phase sets SELFAUTOLOC to
27651 ;; the specific directory containing `kpsewhich'.
27652 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27653 (pystr (dirname kpse)))
27654 ;; Refer to kpse by store path instead of looking it upein $PATH.
27655 (("shutil.which\\('kpse'.*$")
27656 (string-append (pystr kpse) "\n")))))))))
27657 (native-inputs (list python-setuptools python-wheel))
27658 (inputs (list texlive-kpathsea))
27659 (home-page "https://github.com/gpoore/latexrestricted")
27660 (synopsis
27661 "Library for creating executables compatible with LaTeX's shell escape")
27662 (description
27663 "This Python package is designed to simplify the process of creating Python
27664executables compatible with LaTeX restricted shell escape. Restricted shell
27665escape allows LaTeX to run trusted executables as part of compiling documents.
27666These executables have restricted access to the file system and restricted
27667ability to launch subprocesses.")
27668 (license license:lppl1.3+)))
27669
27670(define-public python-pybloom-live
27671 (package
27672 (name "python-pybloom-live")
27673 (version "4.0.0")
27674 (source (origin
27675 (method url-fetch)
27676 (uri (pypi-uri "pybloom_live" version))
27677 (sha256
27678 (base32
27679 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27680 (build-system pyproject-build-system)
27681 (propagated-inputs (list python-bitarray python-xxhash))
27682 (native-inputs (list python-pytest python-setuptools python-wheel))
27683 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27684 (synopsis "Bloom filter")
27685 (description "This package provides a scalable Bloom filter implemented in
27686Python.")
27687 (license license:expat)))
27688
27689;; XXX: Not maintained since 2020.
27690(define-public python-pybktree
27691 (package
27692 (name "python-pybktree")
27693 (version "1.1")
27694 (source
27695 (origin
27696 (method url-fetch)
27697 (uri (pypi-uri "pybktree" version))
27698 (sha256
27699 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27700 (build-system pyproject-build-system)
27701 (arguments
27702 (list #:tests? #f)) ;no tests provided
27703 (native-inputs (list python-setuptools))
27704 (home-page "https://github.com/Jetsetter/pybktree")
27705 (synopsis "Pythonic BK-tree data structure")
27706 (description
27707 "This package provides a BK-tree data structure to allow fast querying of
27708close matches in Python.")
27709 (license license:expat)))
27710
27711(define-public python-pybtex
27712 (package
27713 (name "python-pybtex")
27714 (version "0.25.0")
27715 (source
27716 (origin
27717 (method git-fetch)
27718 (uri (git-reference
27719 (url "https://codeberg.org/pybtex/pybtex")
27720 (commit version)))
27721 (file-name (git-file-name name version))
27722 (sha256
27723 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27724 (build-system pyproject-build-system)
27725 (native-inputs (list python-pytest python-setuptools))
27726 (propagated-inputs (list python-latexcodec python-pyyaml))
27727 (home-page "https://pybtex.org/")
27728 (synopsis "BibTeX-compatible bibliography processor")
27729 (description
27730 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27731You can simply type pybtex instead of bibtex.")
27732 (license license:expat)))
27733
27734(define-public python-pybtex-apa-style
27735 (package
27736 (name "python-pybtex-apa-style")
27737 (version "1.3")
27738 (source
27739 (origin
27740 (method url-fetch)
27741 (uri (pypi-uri "pybtex-apa-style" version))
27742 (sha256
27743 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27744 (build-system pyproject-build-system)
27745 (arguments
27746 (list
27747 #:test-backend #~'custom
27748 #:test-flags
27749 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27750 " sys.exit('apa' not"
27751 " in pybtex.plugin.enumerate_plugin_names"
27752 "('pybtex.style.labels'))"))))
27753 (native-inputs (list python-pybtex python-setuptools))
27754 (home-page "https://github.com/naeka/pybtex-apa-style")
27755 (synopsis "APA style for pybtex")
27756 (description
27757 "This package provides support for the APA style within pybtex.")
27758 (license license:expat)))
27759
27760(define-public python-pybtex-docutils
27761 (package
27762 (name "python-pybtex-docutils")
27763 (version "1.0.3")
27764 (source
27765 (origin
27766 (method git-fetch)
27767 (uri (git-reference
27768 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27769 (commit version)))
27770 (file-name (git-file-name name version))
27771 (sha256
27772 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27773 (build-system pyproject-build-system)
27774 (propagated-inputs (list python-docutils python-pybtex))
27775 (native-inputs (list python-setuptools python-pytest))
27776 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27777 (synopsis "Docutils backend for pybtex")
27778 (description "The pybtex docutils backend allows bibtex citations to be
27779inserted into documentation generated by docutils.")
27780 (license license:expat)))
27781
27782(define-public python-onetimepass
27783 (package
27784 (name "python-onetimepass")
27785 (version "1.0.1")
27786 (source
27787 (origin
27788 (method git-fetch)
27789 (uri (git-reference
27790 (url "https://github.com/tadeck/onetimepass/")
27791 (commit (string-append "v" version))))
27792 (file-name (git-file-name name version))
27793 (sha256
27794 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27795 (build-system pyproject-build-system)
27796 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27797 (native-inputs (list python-setuptools))
27798 (propagated-inputs (list python-six))
27799 (home-page "https://github.com/tadeck/onetimepass/")
27800 (synopsis "One-time password library")
27801 (description
27802 "Python one-time password library for HMAC-based (HOTP) and time-based
27803(TOTP) passwords.")
27804 (license license:expat)))
27805
27806(define-public python-online-judge-api-client
27807 (package
27808 (name "python-online-judge-api-client")
27809 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27810 (revision . "0")))
27811 (version (git-version "10.10.1"
27812 (assoc-ref properties 'revision)
27813 (assoc-ref properties 'commit)))
27814 (source
27815 (origin
27816 (method git-fetch)
27817 (uri (git-reference
27818 (url "https://github.com/online-judge-tools/api-client")
27819 (commit (assoc-ref properties 'commit))))
27820 (file-name (git-file-name name version))
27821 (sha256
27822 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27823 (patches
27824 (search-patches "python-online-judge-api-client-tests.patch"))
27825 ))
27826 (build-system pyproject-build-system)
27827 (arguments
27828 (list
27829 #:test-flags
27830 #~(list "--ignore-glob=tests/get_contest_*.py"
27831 "--ignore-glob=tests/get_problem_*.py")
27832 #:phases
27833 #~(modify-phases %standard-phases
27834 (add-before 'check 'configure-tests
27835 (lambda* (#:key inputs outputs #:allow-other-keys)
27836 (delete-file-recursively
27837 (string-append (site-packages inputs outputs)
27838 "/tests"))
27839 (call-with-output-file "pytest.ini"
27840 (lambda (port)
27841 (format port "\
27842[pytest]
27843python_files = tests/*.py"))))))))
27844 (native-inputs (list python-pytest python-setuptools))
27845 (propagated-inputs
27846 (list python-appdirs
27847 python-beautifulsoup4
27848 python-colorlog
27849 python-lxml
27850 python-requests
27851 python-toml
27852 python-jsonschema))
27853 (home-page "https://github.com/online-judge-tools/api-client")
27854 (synopsis "API client for various online judges")
27855 (description
27856 "This is an API client for various online judges, used as the backend
27857library of @code{oj} command. You can use the Python library
27858(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27859command) which talks JSON compatible with jmerle/competitive-companion.")
27860 (license license:expat)))
27861
27862(define-public online-judge-tools
27863 (package
27864 (name "online-judge-tools")
27865 (version "11.5.1")
27866 ;; Source distributions are not uploaded to PyPI.
27867 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27868 (source
27869 (origin
27870 (method git-fetch)
27871 (uri (git-reference
27872 (url "https://github.com/online-judge-tools/oj")
27873 (commit (string-append "v" version))))
27874 (file-name (git-file-name name version))
27875 (sha256
27876 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27877 (patches (search-patches "online-judge-tools.patch"))))
27878 (build-system pyproject-build-system)
27879 (arguments
27880 (list
27881 #:test-flags
27882 ;; These tests require network connections
27883 #~(list "--ignore=tests/command_version.py")))
27884 (native-inputs (list python-pytest python-setuptools))
27885 (inputs (list time))
27886 (propagated-inputs (list python-online-judge-api-client python-colorama
27887 python-requests))
27888 (home-page "https://github.com/online-judge-tools/oj")
27889 (synopsis "Command to help solving problems on various online judges")
27890 (description
27891 "@command{oj} is a command line tool to help solving problems on
27892various online judges. This command automates downloading sample
27893cases, generating additional test cases, testing for your code, and
27894submitting it.")
27895 (license license:expat)))
27896
27897(define-public python-mpv-jsonipc
27898 (package
27899 (name "python-mpv-jsonipc")
27900 (version "1.2.0")
27901 (source
27902 (origin
27903 (method url-fetch)
27904 (uri (pypi-uri "python-mpv-jsonipc" version))
27905 (sha256
27906 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27907 (build-system pyproject-build-system)
27908 (arguments (list #:tests? #f)) ;No test suite.
27909 (native-inputs (list python-setuptools python-wheel))
27910 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27911 (synopsis "Python API to control MPV using JSON IPC")
27912 (description "Python MPV JSONIPC implements an interface similar to
27913python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27914 (license license:asl2.0)))
27915
27916(define-public python-jellyfin-apiclient
27917 (package
27918 (name "python-jellyfin-apiclient")
27919 (version "1.11.0")
27920 (source
27921 (origin
27922 (method git-fetch)
27923 (uri
27924 (git-reference
27925 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27926 (commit (string-append "v" version))))
27927 (sha256
27928 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27929 (build-system pyproject-build-system)
27930 (native-inputs (list python-setuptools python-pytest python-wheel))
27931 (propagated-inputs (list python-certifi python-requests python-urllib3
27932 python-websocket-client))
27933 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27934 (synopsis "Python API client for Jellyfin")
27935 (description "The Jellyfin ApiClient Python package makes it possible
27936to use the Jellyfin API from Python. It was extracted from the Jellyfin
27937Kodi plugin.")
27938 (license license:gpl3+)))
27939
27940(define-public python-parso
27941 (package
27942 (name "python-parso")
27943 (version "0.8.5")
27944 (source
27945 (origin
27946 (method url-fetch)
27947 (uri (pypi-uri "parso" version))
27948 (sha256
27949 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27950 (build-system pyproject-build-system)
27951 (native-inputs
27952 (list python-pytest
27953 python-setuptools))
27954 (home-page "https://github.com/davidhalter/parso")
27955 (synopsis "Python Parser")
27956 (description "Parso is a Python parser that supports error recovery and
27957round-trip parsing for different Python versions (in multiple Python versions).
27958Parso is also able to list multiple syntax errors in your Python file.")
27959 (license license:expat)))
27960
27961(define-public python-async-generator
27962 (package
27963 (name "python-async-generator")
27964 (version "1.10")
27965 (source
27966 (origin
27967 (method url-fetch)
27968 (uri (pypi-uri "async_generator" version))
27969 (sha256
27970 (base32
27971 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27972 (build-system pyproject-build-system)
27973 (native-inputs
27974 (list python-pytest python-setuptools))
27975 (home-page "https://github.com/python-trio/async_generator")
27976 (synopsis "Async generators and context managers for Python 3.5+")
27977 (description "@code{async_generator} back-ports Python 3.6's native async
27978generators and Python 3.7's context managers into Python 3.5.")
27979 ;; Dual licensed.
27980 (license (list license:expat license:asl2.0))))
27981
27982(define-public python-async-timeout
27983 (package
27984 (name "python-async-timeout")
27985 (version "5.0.1")
27986 (source
27987 (origin
27988 (method url-fetch)
27989 (uri (pypi-uri "async_timeout" version))
27990 (sha256
27991 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27992 (build-system pyproject-build-system)
27993 (native-inputs
27994 (list python-pytest
27995 python-pytest-asyncio
27996 python-setuptools
27997 python-wheel))
27998 (home-page "https://github.com/aio-libs/async-timeout")
27999 (synopsis "Timeout context manager for asyncio programs")
28000 (description
28001 "@code{async-timeout} provides a timeout timeout context manager
28002compatible with @code{asyncio}.")
28003 (license license:asl2.0)))
28004
28005(define-public python-async-timeout-4
28006 (package
28007 (inherit python-async-timeout)
28008 (name "python-async-timeout")
28009 (version "4.0.3")
28010 (source
28011 (origin
28012 (method url-fetch)
28013 (uri (pypi-uri "async-timeout" version))
28014 (sha256
28015 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
28016
28017(define-public python-glob2
28018 (package
28019 (name "python-glob2")
28020 (version "0.7")
28021 (source
28022 (origin
28023 (method git-fetch)
28024 (uri (git-reference
28025 (url "https://github.com/miracle2k/python-glob2")
28026 (commit (string-append "v" version))))
28027 (file-name (git-file-name name version))
28028 (sha256
28029 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
28030 (build-system pyproject-build-system)
28031 (arguments
28032 (list
28033 #:phases
28034 #~(modify-phases %standard-phases
28035 (add-after 'unpack 'patch-tests-for-pytest8
28036 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
28037 (lambda _
28038 (substitute* "test.py"
28039 (("setup\\(") "setup_method(")
28040 (("teardown\\(") "teardown_method("))
28041 (rename-file "test.py" "glob2_test.py"))))))
28042 (native-inputs (list python-pytest python-setuptools))
28043 (home-page "https://github.com/miracle2k/python-glob2/")
28044 (synopsis "Extended Version of the python buildin glob module")
28045 (description "This is an extended version of the Python
28046@url{http://docs.python.org/library/glob.html, built-in glob module} which
28047adds:
28048
28049@itemize
28050@item The ability to capture the text matched by glob patterns, and return
28051those matches alongside the file names.
28052@item A recursive @code{**} globbing syntax, akin for example to the
28053@code{globstar} option of Bash.
28054@item The ability to replace the file system functions used, in order to glob
28055on virtual file systems.
28056@item Compatible with Python 2 and Python 3 (tested with 3.3).
28057@end itemize
28058
28059Glob2 currently based on the glob code from Python 3.3.1.")
28060 (license license:bsd-2)))
28061
28062(define-public python-gipc
28063 (package
28064 (name "python-gipc")
28065 (version "1.8.0")
28066 (source
28067 (origin
28068 (method git-fetch)
28069 (uri (git-reference
28070 (url "https://github.com/jgehrcke/gipc")
28071 (commit version)))
28072 (file-name (git-file-name name version))
28073 (sha256
28074 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
28075 (build-system pyproject-build-system)
28076 (arguments
28077 (list
28078 #:phases
28079 #~(modify-phases %standard-phases
28080 (add-after 'unpack 'adjust-for-pytest-8
28081 (lambda _
28082 (substitute* "test/test_gipc.py"
28083 (("def setup") "def setup_method")
28084 (("def teardown") "def teardown_method")))))))
28085 (native-inputs
28086 (list python-pytest
28087 python-setuptools))
28088 (propagated-inputs
28089 (list python-gevent))
28090 (home-page "https://gehrcke.de/gipc/")
28091 (synopsis "Child process management in the context of gevent")
28092 (description
28093 "Usage of Python's multiprocessing package in a gevent-powered
28094application may raise problems. With @code{gipc}, process-based child
28095processes can safely be created anywhere within a gevent-powered
28096application.")
28097 (license license:expat)))
28098
28099(define-public python-beautifultable
28100 (package
28101 (name "python-beautifultable")
28102 (version "1.1.0")
28103 (source
28104 (origin
28105 (method git-fetch)
28106 (uri (git-reference
28107 (url "https://github.com/pri22296/beautifultable")
28108 (commit (string-append "v" version))))
28109 (file-name (git-file-name name version))
28110 (sha256
28111 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
28112 (build-system pyproject-build-system)
28113 (arguments
28114 (list
28115 ;; Fails because a None is converted to nan, probably due to Pandas 3.
28116 #:test-flags
28117 #~(list "-k" "not test_df_export_scenario2" "test.py")))
28118 (native-inputs (list python-pandas
28119 python-pytest
28120 python-setuptools))
28121 (propagated-inputs (list python-wcwidth))
28122 (home-page "https://github.com/pri22296/beautifultable")
28123 (synopsis "Print ASCII tables for terminals")
28124 (description
28125 "@code{python-beautifultable} provides a class for easily printing
28126tabular data in a visually appealing ASCII format to a terminal.
28127
28128Features include, but are not limited to:
28129@itemize
28130@item Full customization of the look and feel of the table
28131@item Row and column accessors.
28132@item Full support for colors using ANSI sequences or any library.
28133@item Plenty of predefined styles and option to create custom ones.
28134@item Support for Unicode characters.
28135@item Supports streaming table when data is slow to retrieve.
28136@end itemize")
28137 (license license:expat)))
28138
28139(define-public python-globber
28140 (package
28141 (name "python-globber")
28142 (version "0.2.1")
28143 (source
28144 (origin
28145 (method git-fetch)
28146 (uri (git-reference
28147 (url "https://github.com/asharov/globber")
28148 (commit version)))
28149 (file-name (git-file-name name version))
28150 (sha256
28151 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
28152 (build-system pyproject-build-system)
28153 (native-inputs (list python-pytest python-setuptools))
28154 (home-page "https://github.com/asharov/globber")
28155 (synopsis "Library for string matching with glob patterns")
28156 (description
28157 "Globber is a Python library for matching file names against glob patterns.
28158In contrast to other glob-matching libraries, it matches arbitrary strings and
28159doesn't require the matched names to be existing files. In addition, it
28160supports the globstar @code{**} operator to match an arbitrary number of
28161path components.")
28162 (license license:asl2.0)))
28163
28164;; XXX: Not maintained since 2021.
28165(define-public python-git-hammer
28166 (package
28167 (name "python-git-hammer")
28168 (version "0.3.2")
28169 (source
28170 (origin
28171 (method git-fetch)
28172 (uri (git-reference
28173 (url "https://github.com/asharov/git-hammer")
28174 (commit version)))
28175 (file-name (git-file-name name version))
28176 (sha256
28177 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
28178 (build-system pyproject-build-system)
28179 (arguments
28180 (list
28181 #:phases
28182 #~(modify-phases %standard-phases
28183 (add-after 'unpack 'relax-requirements
28184 (lambda _
28185 (substitute* "setup.py"
28186 (("matplotlib <3.1") "matplotlib")))))))
28187 (native-inputs
28188 (list python-pytest
28189 python-setuptools))
28190 (propagated-inputs
28191 (list python-beautifultable
28192 python-dateutil
28193 python-gitpython
28194 python-globber
28195 python-matplotlib
28196 python-sqlalchemy
28197 python-sqlalchemy-utils))
28198 (home-page "https://github.com/asharov/git-hammer")
28199 (synopsis "Provide statistics for git repositories")
28200 (description
28201 "Git Hammer is a statistics tool for projects in git repositories. Its major
28202feature is tracking the number of lines authored by each person for every
28203commit, but it also includes some other useful statistics.")
28204 (license license:asl2.0)))
28205
28206(define-public python-gitignore-parser
28207 (package
28208 (name "python-gitignore-parser")
28209 (version "0.1.13")
28210 (source
28211 (origin
28212 (method git-fetch)
28213 (uri (git-reference
28214 (url "https://github.com/mherrmann/gitignore_parser")
28215 (commit (string-append "v" version))))
28216 (file-name (git-file-name name version))
28217 (sha256
28218 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
28219 (build-system pyproject-build-system)
28220 (arguments (list #:test-backend #~'unittest))
28221 (native-inputs (list python-setuptools))
28222 (home-page "https://github.com/mherrmann/gitignore_parser")
28223 (synopsis "Spec-compliant gitignore parser for Python")
28224 (description
28225 "This package provides a spec-compliant gitignore parser for Python.")
28226 (license license:expat)))
28227
28228(define-public python-fusepy
28229 (package
28230 (name "python-fusepy")
28231 (version "2.0.4")
28232 (source
28233 (origin
28234 (method git-fetch)
28235 (uri (git-reference
28236 (url "https://github.com/fusepy/fusepy")
28237 (commit (string-append "v" version))))
28238 (file-name (git-file-name name version))
28239 (sha256
28240 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
28241 (build-system pyproject-build-system)
28242 (arguments
28243 (list
28244 #:tests? #f ; No formalized tests.
28245 #:phases
28246 #~(modify-phases %standard-phases
28247 (add-before 'build 'set-library-file-name
28248 (lambda* (#:key inputs #:allow-other-keys)
28249 (substitute* "fuse.py"
28250 (("find_library\\('fuse'\\)")
28251 (format #f "~s"
28252 (search-input-file inputs "lib/libfuse.so")))))))))
28253 (native-inputs (list python-setuptools))
28254 (propagated-inputs (list fuse-2))
28255 (home-page "https://github.com/fusepy/fusepy")
28256 (synopsis "Simple ctypes bindings for FUSE")
28257 (description
28258 "Python module that provides a simple interface to FUSE and MacFUSE. The
28259binding is created using the standard @code{ctypes} library.")
28260 (license license:isc)))
28261
28262(define-public pybind11
28263 (package
28264 (name "pybind11")
28265 (version "3.0.4")
28266 (source (origin
28267 (method git-fetch)
28268 (uri (git-reference
28269 (url "https://github.com/pybind/pybind11")
28270 (commit (string-append "v" version))))
28271 (sha256
28272 (base32
28273 "1ad9215jz078al84h43f6fhwg80d7sjdc72r8hi3n419x8hag4j1"))
28274 (file-name (git-file-name name version))))
28275 (build-system cmake-build-system)
28276 (arguments
28277 (list
28278 ;; TODO: Rewrite package definition with pyproject, I had issues to
28279 ;; enable tests and install includes, see the discussion in
28280 ;; guix/guix!4696 where it was initially proposed.
28281 #:configure-flags
28282 #~(list "-DPYBIND11_NOPYTHON=OFF"
28283 "-DPYBIND11_PYTEST_ARGS=-v"
28284 "-DPYBIND11_TEST_SMART_HOLDER=ON")
28285 #:phases
28286 #~(modify-phases %standard-phases
28287 (add-after 'install 'build-python-library
28288 (lambda _
28289 (with-directory-excursion "../source"
28290 (setenv "PYBIND11_USE_CMAKE" "yes")
28291 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
28292 "--prefix" #$output "."))))
28293 (replace 'check
28294 (lambda* (#:key tests? #:allow-other-keys)
28295 (when tests?
28296 ;; Steps are taken from <.github/workflows/ci.yml>.
28297 (invoke "cmake" "--build" "."
28298 "--target" "pytest")
28299 (invoke "cmake" "--build" "."
28300 "--target" "cpptest")
28301 (invoke "cmake" "--build" "."
28302 "--target" "test_cmake_build")
28303 (invoke "cmake" "--build" "."
28304 "--target" "test_cross_module_rtti")))))))
28305 (inputs (list boost))
28306 (native-inputs
28307 (list catch2-2
28308 eigen
28309 python-pytest
28310 python-wrapper
28311 python-scikit-build-core-bootstrap))
28312 (home-page "https://github.com/pybind/pybind11/")
28313 (synopsis "Seamless operability between C++11 and Python")
28314 (description
28315 "@code{pybind11} is a lightweight header-only library that exposes C++
28316types in Python and vice versa, mainly to create Python bindings of existing
28317C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28318library: to minimize boilerplate code in traditional extension modules by
28319inferring type information using compile-time introspection.")
28320 (license license:bsd-3)))
28321
28322(define-public pybind11-2
28323 (package
28324 (inherit pybind11)
28325 (name "pybind11")
28326 (version "2.13.6")
28327 (source
28328 (origin
28329 (method git-fetch)
28330 (uri (git-reference
28331 (url "https://github.com/pybind/pybind11")
28332 (commit (string-append "v" version))))
28333 (file-name (git-file-name name version))
28334 (sha256
28335 (base32 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))))
28336 (build-system cmake-build-system)
28337 (arguments
28338 (list
28339 #:configure-flags
28340 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28341 (assoc-ref %build-inputs "catch2")
28342 "/include/catch"))
28343 #:modules '((guix build cmake-build-system)
28344 ((guix build gnu-build-system) #:prefix gnu:)
28345 (guix build utils))
28346 #:phases
28347 #~(modify-phases %standard-phases
28348 (replace 'check
28349 (lambda args
28350 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28351 (add-after 'install 'install-python
28352 (lambda _
28353 (with-directory-excursion "../source"
28354 (setenv "PYBIND11_USE_CMAKE" "yes")
28355 (invoke "python" "setup.py" "install"
28356 "--single-version-externally-managed"
28357 "--root=/"
28358 (string-append "--prefix=" #$output))))))))
28359 (native-inputs
28360 (list catch2-1
28361 eigen
28362 python-pytest
28363 python-setuptools
28364 python-wrapper))
28365 (inputs '())))
28366
28367(define-public python-pooch
28368 (package
28369 (name "python-pooch")
28370 (version "1.9.0")
28371 (source
28372 (origin
28373 (method git-fetch)
28374 (uri (git-reference
28375 (url "https://github.com/fatiando/pooch")
28376 (commit (string-append "v" version))))
28377 (file-name (git-file-name name version))
28378 (sha256
28379 (base32 "0k8s9npjym80wpac77fvf1vnx5qm5c2pr7x39j8hh0cglfxmgii8"))))
28380 (build-system pyproject-build-system)
28381 (arguments
28382 (list
28383 #:test-flags #~(list "-m" "not network")))
28384 (native-inputs
28385 (list python-pytest
28386 python-pytest-httpserver
28387 python-pytest-localftpserver
28388 python-setuptools
28389 python-setuptools-scm))
28390 (propagated-inputs
28391 (list python-packaging
28392 python-platformdirs
28393 python-requests))
28394 (home-page "https://github.com/fatiando/pooch")
28395 (synopsis "Manage your Python library's sample data files")
28396 (description
28397 "Pooch manages your Python library's sample data files: it automatically
28398downloads and stores them in a local directory, with support for versioning
28399and corruption checks.")
28400 (license license:bsd-3)))
28401
28402(define-public python-fasteners
28403 (package
28404 (name "python-fasteners")
28405 (version "0.20")
28406 (source (origin
28407 ;; No tests in the pypi tarball
28408 (method git-fetch)
28409 (uri (git-reference
28410 (url "https://github.com/harlowja/fasteners")
28411 (commit version)))
28412 (file-name (git-file-name name version))
28413 (sha256
28414 (base32
28415 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28416 (build-system pyproject-build-system)
28417 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28418 python-setuptools python-pytest))
28419 (home-page "https://github.com/harlowja/fasteners")
28420 (synopsis "Python package that provides useful locks")
28421 (description
28422 "This package provides a Python program that provides following locks:
28423
28424@itemize
28425@item Locking decorator
28426@item Reader-writer locks
28427@item Inter-process locks
28428@item Generic helpers
28429@end itemize\n")
28430 (license license:asl2.0)))
28431
28432(define-public python-requests-file
28433 (package
28434 (name "python-requests-file")
28435 (version "3.0.1")
28436 (source
28437 (origin
28438 (method git-fetch)
28439 (uri (git-reference
28440 (url "https://codeberg.org/dashea/requests-file")
28441 (commit version)))
28442 (file-name (git-file-name name version))
28443 (sha256
28444 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28445 (build-system pyproject-build-system)
28446 (native-inputs (list python-pytest python-setuptools))
28447 (propagated-inputs (list python-requests))
28448 (home-page "https://codeberg.org/dashea/requests-file")
28449 (synopsis "File transport adapter for Requests")
28450 (description
28451 "Requests-File is a transport adapter for use with the Requests Python
28452library to allow local file system access via @code{file://} URLs.")
28453 (license license:asl2.0)))
28454
28455(define-public python-identify
28456 (package
28457 (name "python-identify")
28458 (version "2.6.14")
28459 (source
28460 (origin
28461 ;; There are no tests in the PyPI tarball.
28462 (method git-fetch)
28463 (uri (git-reference
28464 (url "https://github.com/chriskuehl/identify")
28465 (commit (string-append "v" version))))
28466 (file-name (git-file-name name version))
28467 (sha256
28468 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28469 (build-system pyproject-build-system)
28470 (native-inputs
28471 (list python-pytest
28472 python-setuptools
28473 python-ukkonen))
28474 (home-page "https://github.com/chriskuehl/identify")
28475 (synopsis "File identification library for Python")
28476 (description
28477 "@code{identify} is a file identification library for Python. Given
28478a file (or some information about a file), return a set of standardized tags
28479identifying what the file is.")
28480 (license license:expat)))
28481
28482(define-public python-nodeenv
28483 (package
28484 (name "python-nodeenv")
28485 (version "1.8.0")
28486 (source
28487 (origin
28488 ;; There's no tarball in PyPI.
28489 (method git-fetch)
28490 (uri (git-reference
28491 (url "https://github.com/ekalinin/nodeenv")
28492 (commit version)))
28493 (file-name (git-file-name name version))
28494 (sha256
28495 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28496 (build-system pyproject-build-system)
28497 (arguments
28498 (list #:test-flags
28499 #~(list "-k" (string-append
28500 "not test_smoke"
28501 " and not test_smoke_n_system_special_chars"))))
28502 (native-inputs
28503 (list python-mock
28504 python-pytest
28505 python-setuptools
28506 python-wheel))
28507 (home-page "https://ekalinin.github.io/nodeenv/")
28508 (synopsis "Create isolated node.js environments")
28509 (description
28510 "Nodeenv (node.js virtual environment) is a tool to create isolated
28511node.js environments. It creates an environment that has its own installation
28512directories, that doesn't share libraries with other node.js virtual
28513environments.")
28514 (license license:bsd-3)))
28515
28516(define-public python-pynamecheap
28517 (package
28518 (name "python-pynamecheap")
28519 (version "0.0.3")
28520 (source
28521 (origin
28522 (method url-fetch)
28523 (uri (pypi-uri "PyNamecheap" version))
28524 (sha256
28525 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28526 (build-system pyproject-build-system)
28527 (arguments (list #:tests? #f)) ; No tests.
28528 (native-inputs (list python-setuptools))
28529 (propagated-inputs (list python-requests))
28530 (home-page "https://github.com/Bemmu/PyNamecheap")
28531 (synopsis "Namecheap API client in Python")
28532 (description
28533 "PyNamecheap is a Namecheap API client in Python.")
28534 (license license:expat)))
28535
28536(define-public python-pynput
28537 (package
28538 (name "python-pynput")
28539 (version "1.8.1")
28540 (source
28541 (origin
28542 (method git-fetch)
28543 (uri (git-reference
28544 (url "https://github.com/moses-palmer/pynput")
28545 (commit (string-append "v" version))))
28546 (file-name (git-file-name name version))
28547 (sha256
28548 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28549 (build-system pyproject-build-system)
28550 (arguments
28551 (list
28552 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28553 #:phases
28554 #~(modify-phases %standard-phases
28555 (add-after 'unpack 'relax-requirements
28556 (lambda _
28557 (substitute* "setup.py"
28558 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28559 "RUNTIME_PACKAGES"))))
28560 (add-before 'sanity-check 'start-xserver
28561 (lambda* (#:key inputs #:allow-other-keys)
28562 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28563 (system (format #f "~a :1 -screen 0 640x480x24 &"
28564 Xvfb))
28565 (setenv "DISPLAY" ":1")))))))
28566 (propagated-inputs
28567 (list python-evdev python-xlib))
28568 (native-inputs
28569 (list python-setuptools xorg-server-for-tests))
28570 (home-page "https://github.com/moses-palmer/pynput")
28571 (synopsis "Send virtual input commands")
28572 (description
28573 "This package provides tools to monitor and control user input devices in
28574Python.")
28575 (license license:lgpl3)))
28576
28577(define-public python-pynixutil
28578 (package
28579 (name "python-pynixutil")
28580 (version "0.5.0")
28581 (source
28582 (origin
28583 (method git-fetch)
28584 (uri (git-reference
28585 (url "https://github.com/nix-community/pynixutil")
28586 (commit version)))
28587 (file-name (git-file-name name version))
28588 (sha256
28589 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28590 (build-system pyproject-build-system)
28591 (arguments
28592 (list
28593 #:test-flags
28594 ;; Tests require nix in the PATH.
28595 #~(list "--ignore=tests/test_drv.py")
28596 #:phases
28597 #~(modify-phases %standard-phases
28598 (add-after 'unpack 'use-poetry-core
28599 (lambda _
28600 ;; Patch to use the core poetry API.
28601 (substitute* "pyproject.toml"
28602 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28603 (native-inputs
28604 (list python-poetry-core
28605 python-pytest))
28606 (home-page "https://github.com/nix-community/pynixutil")
28607 (synopsis "Utility functions for working with data from Nix in Python")
28608 (description
28609 "@code{pynixutil} provides functions for base32 encoding/decoding and
28610derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28611@code{drvparse()}.")
28612 (license license:expat)))
28613
28614(define-public python-dns-lexicon
28615 (package
28616 (name "python-dns-lexicon")
28617 (version "3.21.1")
28618 (source
28619 (origin
28620 (method git-fetch)
28621 (uri (git-reference
28622 (url "https://github.com/dns-lexicon/dns-lexicon")
28623 (commit (string-append "v" version))))
28624 (file-name (git-file-name name version))
28625 (sha256
28626 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28627 (build-system pyproject-build-system)
28628 (arguments
28629 (list
28630 ;; Integration tests require network access.
28631 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28632 #:phases
28633 #~(modify-phases %standard-phases
28634 (add-before 'check 'configure-tests
28635 (lambda _
28636 (setenv "HOME" (getcwd)))))))
28637 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28638 (propagated-inputs
28639 (list python-beautifulsoup4
28640 python-cryptography
28641 python-dnspython
28642 python-pyotp
28643 python-pyyaml
28644 python-requests
28645 python-tldextract))
28646 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28647 (synopsis "Manipulate DNS records on various DNS providers")
28648 (description
28649 "Lexicon provides a way to manipulate DNS records on multiple DNS
28650providers in a standardized way. It has a CLI but it can also be used as a
28651Python library. It was designed to be used in automation, specifically with
28652Let's Encrypt.")
28653 (license license:expat)))
28654
28655(define-public python-cfgv
28656 (package
28657 (name "python-cfgv")
28658 (version "3.4.0")
28659 (source
28660 (origin
28661 ;; There are no tests in the PyPI tarball.
28662 (method git-fetch)
28663 (uri (git-reference
28664 (url "https://github.com/asottile/cfgv")
28665 (commit (string-append "v" version))))
28666 (file-name (git-file-name name version))
28667 (sha256
28668 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28669 (build-system pyproject-build-system)
28670 (native-inputs
28671 (list python-pytest python-setuptools python-wheel))
28672 (home-page "https://github.com/asottile/cfgv")
28673 (synopsis "Configuration validation library")
28674 (description
28675 "This library helps to validate configuration files and produce human
28676readable error messages.")
28677 (license license:expat)))
28678
28679(define-public python-commandlines
28680 (package
28681 (name "python-commandlines")
28682 (version "0.4.1")
28683 (source
28684 (origin
28685 (method git-fetch)
28686 (uri (git-reference
28687 (url "https://github.com/chrissimpkins/commandlines")
28688 (commit (string-append "v" version))))
28689 (file-name (git-file-name name version))
28690 (sha256
28691 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28692 (build-system pyproject-build-system)
28693 (native-inputs (list python-pytest python-setuptools))
28694 (home-page "https://github.com/chrissimpkins/commandlines")
28695 (synopsis "Command line argument to object parsing library")
28696 (description
28697 "@code{Commandlines} is a Python library for command line application
28698development that supports command line argument parsing, command string
28699validation testing and application logic.")
28700 (license license:expat)))
28701
28702;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28703;; python-numba. They have a very inflexible relationship.
28704(define-public python-numba
28705 (package
28706 (name "python-numba")
28707 (version "0.66.0")
28708 (source
28709 (origin
28710 (method url-fetch)
28711 (uri (pypi-uri "numba" version))
28712 (sha256
28713 (base32
28714 "0qyk70nfvhxqxm1vz1qq072n9jvpl6hab8ymlslmxh161qxfc05r"))))
28715 (build-system pyproject-build-system)
28716 (arguments
28717 (list
28718 ;; tests: 10743 tests (skipped=699, expected failures=23)
28719 #:test-backend #~'custom
28720 #:test-flags
28721 ;; Check <buildscripts> directory for more build/tests examples.
28722 #~(list "-m" "numba.runtests"
28723 "--exclude-tags='long_running'"
28724 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28725 "-b"
28726 "-v"
28727 "--"
28728 "numba.tests")
28729 #:phases
28730 #~(modify-phases %standard-phases
28731 (add-after 'unpack 'disable-failing-tests
28732 (lambda _
28733 ;; This expects to be able to run pip.
28734 (delete-file "numba/tests/test_sysinfo.py")
28735 ;; This fails nondeterministically, possibly depending on CPU.
28736 ;; https://github.com/numba/numba/issues/8282.
28737 (substitute* "numba/tests/test_function_type.py"
28738 (("def test_wrapper_address_protocol_libm")
28739 "def disabled_test_wrapper_address_protocol_libm"))
28740 (substitute* "numba/tests/test_caching.py"
28741 ;; RuntimeError: cannot cache function 'simple_usecase': no
28742 ;; locator available for file
28743 (("def test_non_creatable_pycache")
28744 "def __off_test_non_creatable_pycache")
28745 (("def test_non_writable_pycache")
28746 "def __off_test_non_writable_pycache")
28747 ;; AssertionError: None is not an instance of <class
28748 ;; 'numba.core.caching.UserWideCacheLocator'>
28749 (("def test_frozen")
28750 "def __off_test_frozen"))))
28751 (add-before 'build 'disable-proprietary-features
28752 (lambda _
28753 (setenv "NUMBA_DISABLE_HSA" "1")
28754 (setenv "NUMBA_DISABLE_CUDA" "1")))
28755 (add-before 'check 'pre-check
28756 (lambda _
28757 (setenv "HOME" "/tmp")
28758 ;; XXX: Something is wrong with the PYTHONPATH when running the
28759 ;; tests from the build directory, as it complains about not
28760 ;; being able to import certain modules.
28761 (delete-file-recursively "numba"))))))
28762 (native-inputs
28763 (list python-setuptools))
28764 (propagated-inputs
28765 (list python-llvmlite
28766 python-numpy))
28767 (home-page "https://numba.pydata.org")
28768 (synopsis "Compile Python code using LLVM")
28769 (description "Numba gives you the power to speed up your applications with
28770high performance functions written directly in Python. With a few
28771annotations, array-oriented and math-heavy Python code can be just-in-time
28772compiled to native machine instructions, similar in performance to C, C++ and
28773Fortran, without having to switch languages or Python interpreters.
28774
28775Numba works by generating optimized machine code using the LLVM compiler
28776infrastructure at import time, runtime, or statically (using the included pycc
28777tool).")
28778 (license license:bsd-3)))
28779
28780(define-public python-numcodecs
28781 (package
28782 (name "python-numcodecs")
28783 (version "0.15.1") ;newer version needs c-blosc 1.26+
28784 (source
28785 (origin
28786 (method git-fetch)
28787 (uri (git-reference
28788 (url "https://github.com/zarr-developers/numcodecs")
28789 (commit (string-append "v" version))))
28790 (file-name (git-file-name name version))
28791 (sha256
28792 (base32 "19i30k4zn6rjqlrfk20yh75r1di3j7mli2mn9n3pyxmwaq7hiasz"))
28793 (modules '((guix build utils)))
28794 (snippet
28795 '(begin
28796 ;; Only add CFLAGS on architectures where they are supported
28797 (substitute* "setup.py"
28798 (("import sys")
28799 "import sys\nimport platform")
28800 (("os\\.name == 'posix'")
28801 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28802 " os.name + platform.machine() == 'posixx86'")))
28803 (delete-file-recursively "c-blosc")))))
28804 (build-system pyproject-build-system)
28805 (arguments
28806 (list
28807 ;; tests: 714 passed, 39 skipped, 36 xfailed, 20 warnings
28808 #:phases
28809 #~(modify-phases %standard-phases
28810 (add-after 'unpack 'disable-avx2
28811 (lambda _
28812 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28813 (add-after 'unpack 'unbundle
28814 (lambda _
28815 (substitute* "setup.py"
28816 (("sources=sources \\+ blosc_sources,")
28817 "sources=sources,")
28818 (("extra_compile_args=extra_compile_args")
28819 "extra_compile_args=list(base_compile_args)")
28820 (("'numcodecs.zstd',")
28821 "'numcodecs.zstd', libraries=['zstd'], ")
28822 (("'numcodecs.lz4',")
28823 "'numcodecs.lz4', libraries=['lz4'], ")
28824 (("'numcodecs.blosc',")
28825 "'numcodecs.blosc', libraries=['blosc'], "))))
28826 (add-before 'build 'substitute-git-submodules
28827 (lambda _
28828 (symlink #$(package-source (this-package-input "c-blosc"))
28829 "c-blosc")))
28830 (replace 'check
28831 (lambda* (#:key tests? test-flags #:allow-other-keys)
28832 (with-directory-excursion #$output
28833 (apply invoke "pytest" "-vv" test-flags)
28834 (delete-file-recursively ".pytest_cache")))))))
28835 (native-inputs
28836 (list python-cython
28837 python-py-cpuinfo
28838 python-pytest
28839 python-setuptools
28840 python-setuptools-scm))
28841 (inputs
28842 (list c-blosc
28843 lz4
28844 zlib
28845 (list zstd "lib")))
28846 (propagated-inputs
28847 (list python-deprecated
28848 python-numpy
28849 ;; [optional]
28850 python-msgpack))
28851 (home-page "https://github.com/zarr-developers/numcodecs")
28852 (synopsis "Buffer compression and transformation codecs")
28853 (description
28854 "This Python package provides buffer compression and transformation
28855codecs for use in data storage and communication applications.")
28856 (license license:expat)))
28857
28858(define-public python-asciitree
28859 (package
28860 (name "python-asciitree")
28861 (version "0.3.3")
28862 (source
28863 (origin
28864 (method git-fetch)
28865 (uri (git-reference
28866 (url "https://github.com/mbr/asciitree")
28867 (commit version)))
28868 (file-name (git-file-name name version))
28869 (sha256
28870 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28871 (build-system pyproject-build-system)
28872 (native-inputs (list python-pytest python-setuptools))
28873 (home-page "https://github.com/mbr/asciitree")
28874 (synopsis "Draws ASCII trees")
28875 (description "This package draws tree structures using characters.")
28876 (license license:expat)))
28877
28878(define-public python-dill
28879 (package
28880 (name "python-dill")
28881 (version "0.4.1")
28882 (source
28883 (origin
28884 (method git-fetch)
28885 (uri (git-reference
28886 (url "https://github.com/uqfoundation/dill")
28887 (commit version)))
28888 (file-name (git-file-name name version))
28889 (sha256
28890 (base32 "09ig6820sd68cjixl5vkwkwvvgdii8qhaikc1rxhabhwxfymc7v2"))))
28891 (build-system pyproject-build-system)
28892 (arguments
28893 (list #:test-backend #~'custom
28894 #:test-flags #~(list "dill/tests/__main__.py")))
28895 (native-inputs
28896 (list python-setuptools))
28897 (home-page "http://dill.rtfd.io/")
28898 (synopsis "Serialize all of Python")
28899 (description "Dill extends Python's @code{pickle} module for serializing
28900and de-serializing Python objects to the majority of the built-in Python
28901types. Dill provides the user the same interface as the @code{pickle} module,
28902and also includes some additional features. In addition to pickling Python
28903objects, @code{dill} provides the ability to save the state of an interpreter
28904session in a single command. Hence, it would be feasible to save a
28905interpreter session, close the interpreter, ship the pickled file to another
28906computer, open a new interpreter, unpickle the session and thus continue from
28907the saved state of the original interpreter session.")
28908 (license license:bsd-3)))
28909
28910(define-public python-multiprocess
28911 (package
28912 (name "python-multiprocess")
28913 (version "0.70.18")
28914 (source
28915 (origin
28916 (method url-fetch)
28917 (uri (pypi-uri "multiprocess" version))
28918 (sha256
28919 (base32
28920 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28921 (build-system pyproject-build-system)
28922 (arguments
28923 (list
28924 #:phases
28925 #~(modify-phases %standard-phases
28926 (add-after 'unpack 'disable-broken-tests
28927 (lambda* (#:key inputs #:allow-other-keys)
28928 ;; The "wait_result" and "shared_memory..." tests are broken as
28929 ;; there is no keyboard interrupt.
28930 ;;
28931 ;; The "preload_resources" test fails as it cannot find
28932 ;; mp_preload.py.
28933 (substitute*
28934 (string-append "py" (python-version
28935 (assoc-ref inputs "python"))
28936 "/multiprocess/tests/__init__.py")
28937 (("^(.*)def test_(\
28938wait_result|\
28939shared_memory_SharedMemoryServer_ignores_sigint|\
28940preload_resources\
28941)" line indent)
28942 (string-append indent
28943 "@unittest.skip(\"Disabled by Guix\")\n"
28944 line)))))
28945 (replace 'check
28946 (lambda* (#:key tests? #:allow-other-keys)
28947 (if tests?
28948 (invoke "python" "-m" "multiprocess.tests")
28949 (format #t "test suite not run~%")))))))
28950 (propagated-inputs
28951 (list python-dill))
28952 (native-inputs (list python-setuptools))
28953 (home-page "https://pypi.org/project/multiprocess/")
28954 (synopsis "Multiprocessing and multithreading in Python")
28955 (description
28956 "This package is a fork of the multiprocessing Python package, a package
28957which supports the spawning of processes using the API of the standard
28958library's @code{threading} module.")
28959 (license license:bsd-3)))
28960
28961(define-public python-multiprocessing-on-dill
28962 (package
28963 (name "python-multiprocessing-on-dill")
28964 (version "3.5.0a4")
28965 (source (origin
28966 (method url-fetch)
28967 (uri (pypi-uri "multiprocessing_on_dill" version))
28968 (sha256
28969 (base32
28970 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28971 (build-system pyproject-build-system)
28972 (propagated-inputs (list python-dill))
28973 (native-inputs (list python-pytest python-setuptools python-wheel))
28974 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28975 (synopsis "Multiprocessing using dill instead of pickle")
28976 (description
28977 "This package provides a friendly fork of multiprocessing which uses dill
28978instead of pickle.")
28979 (license license:psfl)))
28980
28981(define-public python-cytoolz
28982 (package
28983 (name "python-cytoolz")
28984 (version "1.0.1")
28985 (source
28986 (origin
28987 (method url-fetch)
28988 (uri (pypi-uri "cytoolz" version))
28989 (sha256
28990 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28991 (modules '((guix build utils)))
28992 (snippet
28993 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28994 (build-system pyproject-build-system)
28995 (arguments
28996 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28997 (native-inputs
28998 (list python-cython
28999 python-pytest
29000 python-setuptools
29001 python-wheel))
29002 (propagated-inputs
29003 (list python-toolz))
29004 (home-page "https://github.com/pytoolz/cytoolz")
29005 (synopsis "High performance functional utilities")
29006 (description
29007 "The cytoolz package implements the same API as provided by toolz. The
29008main differences are that @code{cytoolz} is faster and cytoolz offers a C API
29009that is accessible to other projects developed in Cython.")
29010 (license license:bsd-3)))
29011
29012(define-public python-cloudpickle
29013 (package
29014 (name "python-cloudpickle")
29015 (version "3.1.0")
29016 (source
29017 (origin
29018 ;; Archive on pypi does not include test infrastructure.
29019 (method git-fetch)
29020 (uri (git-reference
29021 (url "https://github.com/cloudpipe/cloudpickle")
29022 (commit (string-append "v" version))))
29023 (file-name (git-file-name name version))
29024 (sha256
29025 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
29026 (build-system pyproject-build-system)
29027 (native-inputs
29028 (list python-flit-core
29029 python-psutil
29030 python-pytest))
29031 (home-page "https://github.com/cloudpipe/cloudpickle")
29032 (synopsis "Extended pickling support for Python objects")
29033 (description
29034 "Cloudpickle makes it possible to serialize Python constructs not
29035supported by the default pickle module from the Python standard library. It
29036is especially useful for cluster computing where Python expressions are
29037shipped over the network to execute on remote hosts, possibly close to the
29038data.")
29039 (license license:bsd-3)))
29040
29041(define-public python-locket
29042 (package
29043 (name "python-locket")
29044 (version "1.0.0")
29045 (source
29046 (origin
29047 (method git-fetch)
29048 (uri (git-reference
29049 (url "https://github.com/mwilliamson/locket.py")
29050 (commit version)))
29051 (file-name (git-file-name name version))
29052 (sha256
29053 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
29054 (build-system pyproject-build-system)
29055 ;; XXX: Requires python-spur, which requires another version of
29056 ;; python-paramiko.
29057 (arguments (list #:tests? #f))
29058 (native-inputs (list python-setuptools))
29059 (home-page "https://github.com/mwilliamson/locket.py")
29060 (synopsis "File-based locks for Python")
29061 (description
29062 "Locket implements a lock that can be used by multiple processes provided
29063they use the same path.")
29064 (license license:bsd-2)))
29065
29066(define-public python-loky
29067 (package
29068 (name "python-loky")
29069 (version "3.5.6")
29070 (source
29071 (origin
29072 (method git-fetch)
29073 (uri (git-reference
29074 (url "https://github.com/joblib/loky")
29075 (commit version)))
29076 (file-name (git-file-name name version))
29077 (sha256
29078 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
29079 (build-system pyproject-build-system)
29080 (arguments
29081 (list
29082 #:test-flags
29083 #~(list "-k" (string-join
29084 (list
29085 ;; Requires process control.
29086 "not (test_kill_process_tree"
29087 ;; Hardware dependent tests.
29088 "test_only_physical_cores_error"
29089 ;; Depends on previous results.
29090 "test_wait_result)")
29091 " or "))))
29092 (native-inputs
29093 (list python-packaging
29094 python-psutil
29095 python-pytest
29096 python-setuptools))
29097 (propagated-inputs
29098 (list python-cloudpickle))
29099 (home-page "https://loky.readthedocs.io")
29100 (synopsis "Robust and reusable Executor for joblib")
29101 (description
29102 "This package provides a robust implementation of
29103@code{concurrent.futures.ProcessPoolExecutor}.")
29104 (license license:bsd-3)))
29105
29106(define-public python-partd
29107 (package
29108 (name "python-partd")
29109 (version "1.4.2")
29110 (source
29111 (origin
29112 (method git-fetch)
29113 (uri (git-reference
29114 (url "https://github.com/dask/partd/")
29115 (commit version)))
29116 (file-name (git-file-name name version))
29117 (sha256
29118 (base32 "0mwcr2cy0j5j8c9n2wlrlpc5v4za2cdh8jwhm7vpai53lqyvfjlf"))
29119 (patches
29120 (list
29121 (origin
29122 (method url-fetch)
29123 (uri
29124 ;; Fix PandasColumns compatibility with pandas 3.0
29125 ;; StringDtype, from:
29126 ;; <https://github.com/dask/partd/pull/83>.
29127 (string-append "https://github.com/dask/partd/commit/"
29128 "3efd8ec7e35a7c0aa1ba15ba2cf0766af99d3c21.patch"))
29129 (file-name (string-append name "-PR-83-pandas-3-support.patch"))
29130 (sha256
29131 (base32
29132 "1sc6vmrqgqjl4rnw9gv8ymdfaqdi5razww8b322f7hpwhpdydnhk")))))))
29133 (build-system pyproject-build-system)
29134 (native-inputs
29135 (list python-pytest
29136 python-setuptools
29137 python-versioneer
29138 tzdata-for-tests))
29139 (propagated-inputs
29140 (list python-locket
29141 python-toolz
29142 ;; [complete]
29143 python-blosc
29144 python-numpy
29145 python-pandas
29146 python-pyzmq))
29147 (home-page "https://github.com/dask/partd/")
29148 (synopsis "Appendable key-value storage")
29149 (description
29150 "Partd stores key-value pairs. Values are raw bytes. We append on old
29151values. Partd excels at shuffling operations.")
29152 (license license:bsd-3)))
29153
29154(define-public python-fsspec
29155 (package
29156 (name "python-fsspec")
29157 (version "2026.1.0")
29158 (source
29159 (origin
29160 (method git-fetch)
29161 (uri (git-reference
29162 (url "https://github.com/fsspec/filesystem_spec")
29163 (commit version)))
29164 (file-name (git-file-name name version))
29165 (sha256
29166 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
29167 (build-system pyproject-build-system)
29168 (arguments
29169 (list
29170 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
29171 #:test-flags
29172 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
29173 "-k" (string-join
29174 ;; Test requires nentwork access
29175 (list "not test_async_cat_file_ranges"
29176 "test_gist_public_all_files"
29177 "test_gist_public_missing_file"
29178 "test_gist_public_one_file"
29179 ;; Test hangs
29180 "test_processes")
29181 " and not "))))
29182 ;; The most of the inputs are optional, project does not force to include
29183 ;; any dependencies according to pyproject.toml.
29184 (propagated-inputs
29185 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
29186 (native-inputs
29187 (list nss-certs-for-test
29188 python-hatch-vcs
29189 python-hatchling
29190 python-numpy
29191 python-pytest
29192 python-pytest-asyncio
29193 python-pytest-mock
29194 python-pytest-rerunfailures))
29195 (home-page "https://github.com/fsspec/filesystem_spec")
29196 (synopsis "File-system specification")
29197 (description "The purpose of this package is to produce a template or
29198specification for a file-system interface, that specific implementations
29199should follow, so that applications making use of them can rely on a common
29200behavior and not have to worry about the specific internal implementation
29201decisions with any given backend.")
29202 (license license:bsd-3)))
29203
29204(define-public python-ilinkedlist
29205 (package
29206 (name "python-ilinkedlist")
29207 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
29208 (revision . "0")))
29209 (version (git-version "0.4.0"
29210 (assoc-ref properties 'revision)
29211 (assoc-ref properties 'commit)))
29212 (home-page "https://github.com/luther9/ilinkedlist-py")
29213 (source
29214 (origin
29215 (method git-fetch)
29216 (uri (git-reference
29217 (url home-page)
29218 (commit (assoc-ref properties 'commit))))
29219 (file-name (git-file-name name version))
29220 (sha256
29221 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
29222 (build-system pyproject-build-system)
29223 (native-inputs (list python-pytest python-setuptools))
29224 (synopsis "Immutable linked list library")
29225 (description
29226 "This is a implementation of immutable linked lists for Python. It
29227contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
29228Since a linked list is treated as immutable, it is hashable, and its length
29229can be retrieved in constant time. Some of the terminology is inspired by
29230LISP. It is possible to create an improper list by creating a @code{Pair}
29231with a non-list @code{cdr}.")
29232 (license license:gpl3+)))
29233
29234(define-public python-readlike
29235 (package
29236 (name "python-readlike")
29237 (version "0.1.3")
29238 (source
29239 (origin
29240 (method git-fetch)
29241 (uri (git-reference
29242 (url "https://github.com/jangler/readlike")
29243 (commit version)))
29244 (file-name (git-file-name name version))
29245 (sha256
29246 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
29247 (build-system pyproject-build-system)
29248 (native-inputs (list python-pytest python-setuptools))
29249 (home-page "https://github.com/jangler/readlike")
29250 (synopsis "GNU Readline-like line editing module")
29251 (description
29252 "This Python module provides line editing functions similar to the default
29253Emacs-style ones of GNU Readline. Unlike the Python standard library's
29254@code{readline} package, this one allows access to those capabilities in settings
29255outside of a standard command-line interface. It is especially well-suited to
29256interfacing with Urwid, due to a shared syntax for describing key inputs.
29257
29258Currently, all stateless Readline commands are implemented. Yanking and history
29259are not supported.")
29260 (license license:expat)))
29261
29262(define-public python-reparser
29263 (package
29264 (name "python-reparser")
29265 (version "1.4.3")
29266 (source
29267 (origin
29268 (method git-fetch)
29269 (uri (git-reference
29270 (url "https://github.com/xmikos/reparser")
29271 (commit (string-append "v" version))))
29272 (file-name (git-file-name name version))
29273 (sha256
29274 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
29275 (build-system pyproject-build-system)
29276 (arguments (list #:tests? #f)) ; No tests.
29277 (native-inputs (list python-setuptools))
29278 (home-page "https://github.com/xmikos/reparser")
29279 (synopsis "Lexer/parser for inline markup based on regular expressions")
29280 (description
29281 "This Python library provides a simple lexer/parser for inline markup based
29282on regular expressions.")
29283 (license license:expat)))
29284
29285(define-public python-retrying
29286 (package
29287 (name "python-retrying")
29288 (version "1.4.1")
29289 (source
29290 (origin
29291 (method git-fetch)
29292 (uri (git-reference
29293 (url "https://github.com/groodt/retrying")
29294 (commit (string-append "v" version))))
29295 (file-name (git-file-name name version))
29296 (sha256
29297 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
29298 (build-system pyproject-build-system)
29299 (native-inputs (list python-pytest python-setuptools))
29300 (home-page "https://github.com/groodt/retrying")
29301 (synopsis "Library for adding retry behavior")
29302 (description "Retrying is a general-purpose retrying library to simplify
29303the task of adding retry behavior to just about anything.
29304
29305Features:
29306
29307@itemize
29308@item Generic Decorator API.
29309@item Specify stop condition (i.e. limit by number of attempts).
29310@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
29311@item Customize retrying on Exceptions.
29312@item Customize retrying on expected returned result.
29313@end itemize")
29314 (license license:asl2.0)))
29315
29316(define-public python-precis-i18n
29317 (package
29318 (name "python-precis-i18n")
29319 (version "1.1.1")
29320 (source
29321 (origin
29322 (method url-fetch)
29323 (uri (pypi-uri "precis_i18n" version))
29324 (sha256
29325 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
29326 (build-system pyproject-build-system)
29327 (native-inputs
29328 (list python-pytest
29329 python-setuptools
29330 python-wheel))
29331 (home-page "https://github.com/byllyfish/precis_i18n")
29332 (synopsis "Implementation of the PRECIS framework")
29333 (description
29334 "This module implements the PRECIS Framework as described in RFC 8264,
29335RFC 8265 and RFC 8266.")
29336 (license license:expat)))
29337
29338(define-public python-absl-py
29339 (package
29340 (name "python-absl-py")
29341 (version "2.3.1")
29342 (source
29343 (origin
29344 (method url-fetch)
29345 (uri (pypi-uri "absl_py" version))
29346 (sha256
29347 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29348 (build-system pyproject-build-system)
29349 (arguments
29350 (list #:tests? #f)) ;tests require bazel
29351 (native-inputs
29352 (list python-hatchling))
29353 (home-page "https://github.com/abseil/abseil-py")
29354 (synopsis "Abseil Python common libraries")
29355 (description
29356 "This package provides the Abseil Python Common Libraries, a collection
29357of Python libraries for building Python applications.")
29358 (license license:asl2.0)))
29359
29360(define-public python-astor
29361 (package
29362 (name "python-astor")
29363 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29364 (revision . "0")))
29365 (version (git-version "0.8.1"
29366 (assoc-ref properties 'revision)
29367 (assoc-ref properties 'commit)))
29368 (source
29369 (origin
29370 (method git-fetch)
29371 (uri (git-reference
29372 (url "https://github.com/berkerpeksag/astor")
29373 (commit (assoc-ref properties 'commit))))
29374 (file-name (git-file-name name version))
29375 (sha256
29376 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29377 (build-system pyproject-build-system)
29378 (arguments
29379 (list
29380 ;; FIXME: Unclear why this test fails.
29381 #:test-flags #~(list "--deselect=\
29382tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29383 (native-inputs (list python-pytest python-setuptools))
29384 (home-page "https://github.com/berkerpeksag/astor")
29385 (synopsis "Read and write Python ASTs")
29386 (description
29387 "Astor is designed to allow easy manipulation of Python source via the
29388Abstract Syntax Tree.")
29389 (license license:bsd-3)))
29390
29391(define-public python-astunparse
29392 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29393 ;; updated.
29394 (package
29395 (name "python-astunparse")
29396 (version "1.6.3")
29397 (source
29398 (origin
29399 (method url-fetch)
29400 (uri (pypi-uri "astunparse" version))
29401 (sha256
29402 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29403 (build-system pyproject-build-system)
29404 (arguments '(#:tests? #f)) ; there are none
29405 (native-inputs
29406 (list python-setuptools))
29407 (propagated-inputs
29408 (list python-six))
29409 (home-page "https://github.com/simonpercivall/astunparse")
29410 (synopsis "AST unparser for Python")
29411 (description "This package provides an AST unparser for Python. It is a
29412factored out version of @code{unparse} found in the Python source
29413distribution.")
29414 (license license:bsd-3)))
29415
29416(define-public python-gast
29417 (package
29418 (name "python-gast")
29419 (version "0.7.0")
29420 (source
29421 (origin
29422 (method git-fetch)
29423 (uri (git-reference
29424 (url "https://github.com/serge-sans-paille/gast/")
29425 (commit version)))
29426 (file-name (git-file-name name version))
29427 (sha256
29428 (base32 "05sxx7ixkchxvgrzpkqmklhzvsqydnyzrvzwfd5xkd3cv1arg9m5"))))
29429 (build-system pyproject-build-system)
29430 (native-inputs
29431 (list python-pytest
29432 python-setuptools))
29433 (home-page "https://github.com/serge-sans-paille/gast/")
29434 (synopsis "Generic Python AST that abstracts the underlying Python version")
29435 (description
29436 "GAST provides a compatibility layer between the AST of various Python
29437versions, as produced by @code{ast.parse} from the standard @code{ast}
29438module.")
29439 (license license:bsd-3)))
29440
29441;; XXX: Not maintained since 2022, leaf package.
29442(define-public python-attr
29443 (package
29444 (name "python-attr")
29445 (version "0.3.2")
29446 (source
29447 (origin
29448 (method url-fetch)
29449 (uri (pypi-uri "attr" version))
29450 (sha256
29451 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29452 (build-system pyproject-build-system)
29453 (arguments
29454 (list #:test-backend #~'custom
29455 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29456 (native-inputs
29457 (list python-setuptools))
29458 (home-page "https://github.com/denis-ryzhkov/attr")
29459 (synopsis "Decorator for attributes of target function or class")
29460 (description "Simple decorator to set attributes of target function or
29461class in a @acronym{DRY, Don't Repeat Yourself} way.")
29462 (license license:expat)))
29463
29464(define-public python-construct
29465 ;; Fixes not in a release yet.
29466 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29467 (revision "1"))
29468 (package
29469 (name "python-construct")
29470 (version (git-version "2.10.70" revision commit))
29471 (source
29472 (origin
29473 (method git-fetch)
29474 (uri (git-reference
29475 (url "https://github.com/construct/construct")
29476 (commit commit)))
29477 (file-name (git-file-name name version))
29478 (sha256
29479 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29480 (build-system pyproject-build-system)
29481 (arguments
29482 (list
29483 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29484 (native-inputs
29485 (list python-pytest python-setuptools))
29486 (propagated-inputs
29487 (list python-arrow
29488 python-cloudpickle
29489 python-cryptography
29490 python-lz4
29491 python-numpy
29492 python-ruamel.yaml))
29493 (home-page "https://construct.readthedocs.io")
29494 (synopsis "Declarative and symmetrical parser and builder for binary data")
29495 (description
29496 "This package provides both simple, atomic constructs (such as
29497integers of various sizes), as well as composite ones which allow you
29498form hierarchical and sequential structures of increasing complexity.
29499It features bit and byte granularity, easy debugging and testing, an
29500easy-to-extend subclass system, and lots of primitive constructs to
29501make your work easier.")
29502 (license license:expat))))
29503
29504(define-public python-outcome
29505 (package
29506 (name "python-outcome")
29507 (version "1.3.0.post0")
29508 (source
29509 (origin
29510 (method url-fetch)
29511 (uri (pypi-uri "outcome" version))
29512 (sha256
29513 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29514 (build-system pyproject-build-system)
29515 (native-inputs
29516 (list python-pytest
29517 python-pytest-asyncio
29518 python-setuptools))
29519 (propagated-inputs
29520 (list python-attrs))
29521 (home-page "https://github.com/python-trio/outcome")
29522 (synopsis "Capture the outcome of Python function calls")
29523 (description
29524 "Capture the outcome of Python function calls. Extracted from the Trio
29525project.")
29526 ;; Either license applies.
29527 (license (list license:expat license:asl2.0))))
29528
29529(define-public python-humanize
29530 (package
29531 (name "python-humanize")
29532 (version "4.14.0")
29533 (source
29534 (origin
29535 (method url-fetch)
29536 (uri (pypi-uri "humanize" version))
29537 (sha256
29538 (base32
29539 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29540 (build-system pyproject-build-system)
29541 (native-inputs
29542 (list python-freezegun
29543 python-hatch-vcs
29544 python-hatchling
29545 python-pytest))
29546 (home-page "https://github.com/jmoiron/humanize")
29547 (synopsis "Print numerical information in a human-readable form")
29548 (description "This package provides a Python module that displays numbers
29549and dates in \"human readable\" forms. For example, it would display
29550\"12345591313\" as \"12.3 billion\".")
29551 (license license:expat)))
29552
29553(define-public python-annoy
29554 (package
29555 (name "python-annoy")
29556 (version "1.17.3")
29557 (source
29558 (origin
29559 (method git-fetch)
29560 (uri (git-reference
29561 (url "https://github.com/spotify/annoy")
29562 (commit (string-append "v" version))))
29563 (file-name (git-file-name name version))
29564 (sha256
29565 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29566 (build-system pyproject-build-system)
29567 (arguments
29568 (list
29569 #:test-flags
29570 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29571 ;; name resolution>
29572 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29573 "--deselect=test/accuracy_test.py::test_nytimes_16"
29574 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29575 (native-inputs
29576 (list python-h5py
29577 python-numpy
29578 python-pytest
29579 python-setuptools))
29580 (home-page "https://github.com/spotify/annoy/")
29581 (synopsis "Approximate nearest neighbors library")
29582 (description
29583 "Annoy is a C++ library with Python bindings to search for points in
29584space that are close to a given query point. It also creates large read-only
29585file-based data structures that are @code{mmap}ped into memory so that many
29586processes may share the same data.")
29587 (license license:asl2.0)))
29588
29589(define-public python-croniter
29590 (package
29591 (name "python-croniter")
29592 (version "5.0.1")
29593 (source
29594 (origin
29595 (method git-fetch)
29596 (uri (git-reference
29597 (url "https://github.com/kiorky/croniter")
29598 (commit version)))
29599 (file-name (git-file-name name version))
29600 (sha256
29601 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29602 (build-system pyproject-build-system)
29603 (native-inputs (list python-pytest python-setuptools))
29604 (propagated-inputs (list python-dateutil python-pytz))
29605 (home-page "https://github.com/kiorky/croniter")
29606 (synopsis "Iterate datetime objects with cron-like syntax")
29607 (description
29608 "@code{croniter} provides iteration for datetime object with cron-like
29609format.")
29610 (license license:expat)))
29611
29612(define-public python-crontab
29613 (package
29614 (name "python-crontab")
29615 (version "3.3.0")
29616 (source
29617 (origin
29618 (method url-fetch)
29619 (uri (pypi-uri "python_crontab" version))
29620 (sha256
29621 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29622 (build-system pyproject-build-system)
29623 (arguments
29624 (list #:test-flags
29625 ;; This test is made for Windows.
29626 #~(list "-k" "not test_07_non_posix_shell")
29627 #:phases
29628 #~(modify-phases %standard-phases
29629 (add-after 'unpack 'defaults-to-mcron
29630 (lambda* (#:key inputs #:allow-other-keys)
29631 (substitute* "crontab.py"
29632 (("/usr/bin/crontab")
29633 (search-input-file inputs "bin/crontab"))))))))
29634 (inputs
29635 (list mcron python-dateutil))
29636 (native-inputs
29637 (list python-pytest python-setuptools))
29638 (home-page "https://gitlab.com/doctormo/python-crontab/")
29639 (synopsis "Module for reading and writing crontab files")
29640 (description "This Python module can read, write crontab files, and
29641access the system cron automatically and simply using a direct API.")
29642 (license license:lgpl3+)))
29643
29644(define-public python-apscheduler
29645 (package
29646 (name "python-apscheduler")
29647 (version "3.11.2")
29648 (source (origin
29649 (method url-fetch)
29650 (uri (pypi-uri "apscheduler" version))
29651 (sha256
29652 (base32
29653 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29654 (build-system pyproject-build-system)
29655 (arguments
29656 (list
29657 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29658 #:test-flags
29659 ;; XXX: Some tests hang or fail with verity of errors:
29660 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29661 #~(list #$@(map (lambda (test) (string-append "--deselect="
29662 "tests/test_executors.py::"
29663 test))
29664 (list "test_broken_pool"
29665 "test_max_instances[processpool-pytz]"
29666 "test_max_instances[processpool-zoneinfo]"
29667 "test_run_coroutine_job_tornado"
29668 "test_run_job_error[processpool-pytz]"
29669 "test_run_job_error[processpool-zoneinfo]"
29670 "test_submit_job[processpool-pytz-error]"
29671 "test_submit_job[processpool-pytz-executed]"
29672 "test_submit_job[processpool-pytz-missed]"
29673 "test_submit_job[processpool-zoneinfo-error]"
29674 "test_submit_job[processpool-zoneinfo-executed]"
29675 "test_submit_job[processpool-zoneinfo-missed]")))))
29676 (native-inputs
29677 (list python-anyio
29678 python-gevent
29679 python-pyside-6
29680 python-pytest
29681 python-pytest-asyncio
29682 python-pytz
29683 python-setuptools
29684 python-setuptools-scm
29685 python-sqlalchemy
29686 python-tornado
29687 python-twisted))
29688 (propagated-inputs
29689 (list python-tzlocal))
29690 (home-page "https://github.com/agronholm/apscheduler")
29691 (synopsis "Task scheduling library for Python")
29692 (description "Advanced Python Scheduler (APScheduler) is a Python library
29693that lets you schedule your Python code to be executed later, either just once
29694or periodically.
29695
29696You can add new jobs or remove old ones on the fly as you please. If you store
29697your jobs in a database, they will also survive scheduler restarts and maintain
29698their state. When the scheduler is restarted, it will then run all the jobs it
29699should have run while it was offline.")
29700 (license license:expat)))
29701
29702(define-public python-ifaddr
29703 (package
29704 (name "python-ifaddr")
29705 (version "0.2.0")
29706 (source
29707 (origin
29708 (method url-fetch)
29709 (uri (pypi-uri "ifaddr" version))
29710 (sha256
29711 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29712 (snippet #~(delete-file "ifaddr/_win32.py"))))
29713 (build-system pyproject-build-system)
29714 (native-inputs
29715 (list python-pytest python-setuptools python-wheel))
29716 (home-page "https://github.com/pydron/ifaddr")
29717 (synopsis "Network interface and IP address enumeration library")
29718 (description
29719 "This package provides a network interface and IP address enumeration
29720library in Python.")
29721 (license license:expat)))
29722
29723(define-public python-berkeleydb
29724 (package
29725 (name "python-berkeleydb")
29726 (version "18.1.15")
29727 (source
29728 (origin
29729 (method url-fetch)
29730 (uri (pypi-uri "berkeleydb" version))
29731 (sha256
29732 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29733 (build-system pyproject-build-system)
29734 (arguments
29735 (list
29736 #:test-backend #~'custom
29737 #:test-flags #~(list "test.py" "-v")
29738 #:phases
29739 #~(modify-phases %standard-phases
29740 (add-after 'unpack 'configure-locations
29741 (lambda* (#:key inputs #:allow-other-keys)
29742 (setenv "BERKELEYDB_DIR"
29743 (assoc-ref inputs "bdb"))
29744 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29745 "1")))
29746 (add-after 'unpack 'remove-legacy
29747 (lambda _
29748 (substitute* "pyproject.toml"
29749 ((":__legacy__") "")))))))
29750 (native-inputs (list python-setuptools))
29751 (inputs (list bdb))
29752 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29753 (synopsis "Python bindings for Oracle Berkeley DB")
29754 (description
29755 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29756C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29757Transaction objects, and each of these is exposed as a Python type in the
29758bsddb3.db module. The database objects can use various access methods: btree,
29759hash, recno, and queue. Complete support of Berkeley DB distributed
29760transactions. Complete support for Berkeley DB Replication Manager.
29761Complete support for Berkeley DB Base Replication. Support for RPC.")
29762 (license license:bsd-3)))
29763
29764;; Last version before rename to python-berkeleydb.
29765;; This package is close to deprecation.
29766(define-public python-bsddb3
29767 (package
29768 (inherit python-berkeleydb)
29769 (name "python-bsddb3")
29770 (version "6.2.9")
29771 (source
29772 (origin
29773 (method url-fetch)
29774 (uri (pypi-uri "bsddb3" version))
29775 (sha256
29776 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29777 (arguments
29778 (substitute-keyword-arguments arguments
29779 ;; Tests started failing from [email protected].
29780 ;; The package is in a pre-deprecation phase, so I didn't bother
29781 ;; to try and patch them, but sanity-check passes so the package
29782 ;; itself is likely fine.
29783 ((#:tests? tests? #t)
29784 #f)
29785 ((#:phases phases #~%standard-phases)
29786 #~(modify-phases #$phases
29787 (delete 'remove-legacy)))
29788 ((#:test-flags test-flags #~(list))
29789 #~(list "test3.py" "-v"))))))
29790
29791(define-public python-dbfread
29792 (package
29793 (name "python-dbfread")
29794 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29795 (revision . "0")))
29796 (version (git-version "2.0.7"
29797 (assoc-ref properties 'revision)
29798 (assoc-ref properties 'commit)))
29799 (source
29800 (origin
29801 (method git-fetch)
29802 (uri (git-reference
29803 (url "https://github.com/olemb/dbfread")
29804 (commit (assoc-ref properties 'commit))))
29805 (file-name (git-file-name name version))
29806 (sha256
29807 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29808 (build-system pyproject-build-system)
29809 (arguments
29810 (list
29811 #:phases
29812 #~(modify-phases %standard-phases
29813 (add-after 'unpack 'relax-setup.py
29814 (lambda _
29815 (substitute* "setup.py"
29816 (("python_requires.*")
29817 "")))))))
29818 (native-inputs (list python-pytest python-setuptools))
29819 (home-page "https://dbfread.readthedocs.io")
29820 (synopsis "Read DBF Files with Python")
29821 (description
29822 "This library reads DBF files and returns the data as native Python data
29823types for further processing. It is primarily intended for batch jobs and
29824one-off scripts.")
29825 (license license:expat)))
29826
29827(define-public python-cached-property
29828 (package
29829 (name "python-cached-property")
29830 (version "2.0.1")
29831 (source
29832 (origin
29833 (method url-fetch)
29834 (uri (pypi-uri "cached_property" version))
29835 (sha256
29836 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29837 (build-system pyproject-build-system)
29838 (native-inputs
29839 (list python-freezegun
29840 python-pytest
29841 python-setuptools
29842 python-wheel))
29843 (home-page "https://github.com/pydanny/cached-property")
29844 (synopsis "Decorator for caching properties in classes")
29845 (description
29846 "This package provides a decorator which makes caching
29847time-or-computationally-expensive properties quick and easy and works in
29848Python 2 or 3.")
29849 (license license:bsd-3)))
29850
29851(define-public python-folium
29852 (package
29853 (name "python-folium")
29854 (version "0.19.4")
29855 (source
29856 (origin
29857 ;; PyPI has a ".whl" file but not a proper source release.
29858 ;; Thus, fetch code from Git.
29859 (method git-fetch)
29860 (uri (git-reference
29861 (url "https://github.com/python-visualization/folium")
29862 (commit (string-append "v" version))))
29863 (file-name (git-file-name name version))
29864 (sha256
29865 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29866 (build-system pyproject-build-system)
29867 (arguments
29868 (list #:test-flags
29869 ;; This file requires Selenium.
29870 #~(list "--ignore" "tests/selenium/test_selenium.py"
29871 "-k" (string-append
29872 ;; The tests below also require Selenium.
29873 "not test__repr_png_is_bytes"
29874 " and not test_valid_png"
29875 " and not test_valid_png_size"
29876 " and not test_geojson"
29877 " and not test_heat_map_with_weights"
29878 ;; This performs an online request.
29879 " and not test_json_request"
29880 ;; Requires geodatasets package.
29881 " and not test_timedynamic_geo_json"
29882 ;; AssertionError.
29883 " and not test_minimap"))))
29884 (propagated-inputs
29885 (list python-branca
29886 python-jinja2
29887 python-numpy
29888 python-requests
29889 python-xyzservices))
29890 (native-inputs
29891 (list python-geopandas
29892 python-nbconvert
29893 python-pandas
29894 python-pillow
29895 python-pytest
29896 python-selenium
29897 python-setuptools
29898 python-setuptools-scm
29899 python-wheel))
29900 (home-page "https://github.com/python-visualization/folium")
29901 (synopsis "Make beautiful maps with Leaflet.js & Python")
29902 (description "@code{folium} makes it easy to visualize data that’s been
29903manipulated in Python on an interactive leaflet map. It enables both the
29904binding of data to a map for @code{choropleth} visualizations as well as
29905passing rich vector/raster/HTML visualizations as markers on the map.
29906
29907The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29908Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29909supports Image, Video, GeoJSON and TopoJSON overlays.")
29910 (license license:expat)))
29911
29912(define-public python-mercantile
29913 (package
29914 (name "python-mercantile")
29915 (version "1.2.1")
29916 (source
29917 (origin
29918 (method git-fetch)
29919 (uri (git-reference
29920 (url "https://github.com/mapbox/mercantile")
29921 (commit version)))
29922 (file-name (git-file-name name version))
29923 (sha256
29924 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29925 (build-system pyproject-build-system)
29926 (propagated-inputs (list python-click))
29927 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29928 python-setuptools))
29929 (home-page "https://github.com/mapbox/mercantile")
29930 (synopsis "Web mercator XYZ tile utilities")
29931 (description
29932 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29933@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29934left corner and bounding longitudes and latitudes for XYZ tiles, a
29935@code{xy(lng, lat)} function that returns spherical mercator x and y
29936coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29937containing a given point, and quadkey conversion functions
29938@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29939translating between quadkey and tile coordinates.")
29940 (license license:bsd-3)))
29941
29942(define-public jube
29943 (package
29944 ;; This is a command-line tool, so no "python-" prefix.
29945 (name "jube")
29946 (version "2.7.1")
29947 (source
29948 (origin
29949 (method url-fetch)
29950 (uri (string-append
29951 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29952 version))
29953 (sha256
29954 (base32 "1z7cz7z2awwc1mq18whs9p9n7476l4sg2nk6vy2xf97jidd512zy"))
29955 (file-name (string-append "jube-" version ".tar.gz"))))
29956 (build-system pyproject-build-system)
29957 (arguments
29958 (list
29959 #:tests? #f)) ; No tests.
29960 (propagated-inputs (list python-pyyaml))
29961 (native-inputs (list python-setuptools))
29962 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29963 (synopsis "Benchmarking environment")
29964 (description
29965 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29966benchmarked application, benchmark data is stored in a format that allows JUBE
29967to deduct the desired information. This data can be parsed by automatic pre-
29968and post-processing scripts that draw information and store it more densely
29969for manual interpretation.")
29970 (license license:gpl3+)))
29971
29972(define-public python-pyroutelib3
29973 (package
29974 (name "python-pyroutelib3")
29975 (version "2.0.0")
29976 (source
29977 (origin
29978 (method git-fetch)
29979 (uri (git-reference
29980 (url "https://github.com/MKuranowski/pyroutelib3")
29981 (commit (string-append "v" version))))
29982 (file-name (git-file-name name version))
29983 (sha256
29984 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29985 (build-system pyproject-build-system)
29986 (propagated-inputs (list python-dateutil python-protobuf-5))
29987 (native-inputs (list python-filelock python-flit-core python-pytest))
29988 (home-page "https://github.com/MKuranowski/pyroutelib3")
29989 (synopsis "Library for simple routing on OSM data")
29990 (description "Library for simple routing on OSM data")
29991 (license license:gpl3+)))
29992
29993(define-public python-bibtexparser
29994 (package
29995 (name "python-bibtexparser")
29996 (version "2.0.0b9")
29997 (source
29998 (origin
29999 (method git-fetch)
30000 (uri (git-reference
30001 (url "https://github.com/sciunto-org/python-bibtexparser")
30002 (commit (string-append "v" version))))
30003 (file-name (git-file-name name version))
30004 (sha256
30005 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
30006 (build-system pyproject-build-system)
30007 (propagated-inputs (list python-pylatexenc python-pyparsing))
30008 (native-inputs
30009 (list python-pylatexenc python-pytest python-setuptools))
30010 (home-page "https://github.com/sciunto-org/python-bibtexparser")
30011 (synopsis "Python library to parse BibTeX files")
30012 (description "BibtexParser is a Python library to parse BibTeX files.")
30013 (license (list license:bsd-3 license:lgpl3))))
30014
30015(define-public python-bibtexparser-for-cobib
30016 (hidden-package
30017 (package
30018 (inherit python-bibtexparser)
30019 (name "python-bibtexparser")
30020 (version "1.4.0")
30021 (source
30022 (origin
30023 (method git-fetch)
30024 (uri (git-reference
30025 (url "https://github.com/sciunto-org/python-bibtexparser")
30026 (commit (string-append "v" version))))
30027 (file-name (git-file-name name version))
30028 (sha256
30029 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
30030
30031(define-public python-distro
30032 (package
30033 (name "python-distro")
30034 (version "1.9.0")
30035 (source
30036 (origin
30037 (method url-fetch)
30038 (uri (pypi-uri "distro" version))
30039 (sha256
30040 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
30041 (build-system pyproject-build-system)
30042 (arguments
30043 (list
30044 #:test-flags
30045 #~(list "-k" (string-join
30046 ;; We are not on Ubunto distro:
30047 ;; AssertionError: assert '' == 'ubuntu'.
30048 (list "not test_ubuntu14normal_lsb_release"
30049 "test_trailingblanks_lsb_release"
30050 "test_ubuntu14nomodules_lsb_release")
30051 " and not "))))
30052 (native-inputs
30053 (list python-pytest
30054 python-setuptools))
30055 (home-page "https://github.com/python-distro/distro")
30056 (synopsis "OS platform information API")
30057 (description
30058 "@code{distro} provides information about the OS distribution it runs on,
30059such as a reliable machine-readable ID, or version information.
30060
30061It is the recommended replacement for Python's original
30062`platform.linux_distribution` function (which will be removed in Python 3.8).
30063@code{distro} also provides a command-line interface to output the platform
30064information in various formats.")
30065 (license license:asl2.0)))
30066
30067(define-public python-cairosvg
30068 (package
30069 (name "python-cairosvg")
30070 (version "2.8.2")
30071 (source
30072 (origin
30073 (method url-fetch)
30074 (uri (pypi-uri "cairosvg" version))
30075 (sha256
30076 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
30077 (build-system pyproject-build-system)
30078 (arguments
30079 (list #:test-flags #~(list "cairosvg/test_api.py")))
30080 (native-inputs
30081 (list python-pytest
30082 python-setuptools))
30083 (propagated-inputs
30084 (list python-cairocffi
30085 python-cssselect2
30086 python-defusedxml
30087 python-pillow
30088 python-tinycss2))
30089 (home-page "https://cairosvg.org/")
30090 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
30091 (description "CairoSVG is a SVG converter based on Cairo. It can export
30092SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
30093SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
30094parsed, the result is drawn to a Cairo surface that can be exported to
30095qvarious formats: PDF, PostScript, PNG and even SVG.")
30096 (license license:lgpl3+)))
30097
30098(define-public python-pyphen
30099 (package
30100 (name "python-pyphen")
30101 (version "0.17.2")
30102 (source
30103 (origin
30104 (method git-fetch)
30105 (uri (git-reference
30106 (url "https://github.com/Kozea/Pyphen")
30107 (commit version)))
30108 (file-name (git-file-name name version))
30109 (sha256
30110 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
30111 (build-system pyproject-build-system)
30112 (native-inputs (list python-flit-core python-pytest))
30113 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
30114 ;; embedded set provided by upstream - like Debian does.
30115 (home-page "https://github.com/Kozea/Pyphen")
30116 (synopsis "Pure Python module to hyphenate text")
30117 (description "Pyphen is a pure Python module to hyphenate text using
30118existing Hunspell hyphenation dictionaries.")
30119 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
30120
30121(define-public python-intelhex
30122 (package
30123 (name "python-intelhex")
30124 (version "2.3.0")
30125 (source
30126 (origin
30127 (method git-fetch)
30128 (uri (git-reference
30129 (url "https://github.com/python-intelhex/intelhex")
30130 (commit version)))
30131 (file-name (git-file-name name version))
30132 (sha256
30133 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
30134 (build-system pyproject-build-system)
30135 (arguments (list #:test-backend #~'unittest))
30136 (native-inputs (list python-setuptools))
30137 (home-page "https://github.com/python-intelhex/intelhex")
30138 (synopsis "Python library for Intel HEX files manipulations")
30139 (description
30140 "The Intel HEX file format is widely used in microprocessors and
30141microcontrollers area (embedded systems etc.) as the de facto standard for
30142representation of code to be programmed into microelectronic devices. This
30143package provides an intelhex Python library to read, write, create from
30144scratch and manipulate data from Intel HEX file format. It also includes
30145several convenience Python scripts, including \"classic\" hex2bin and bin2hex
30146converters and more, those based on the library itself.")
30147 (license license:bsd-3)))
30148
30149(define-public python-interlap
30150 (package
30151 (name "python-interlap")
30152 (version "0.2.7")
30153 (source
30154 (origin
30155 (method git-fetch)
30156 (uri (git-reference
30157 (url "https://github.com/brentp/interlap")
30158 (commit (string-append "v" version))))
30159 (file-name (git-file-name name version))
30160 (sha256
30161 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
30162 (build-system pyproject-build-system)
30163 (arguments
30164 (list
30165 #:test-backend #~'custom
30166 #:test-flags #~(list "interlap.py")))
30167 (native-inputs (list python-setuptools))
30168 (home-page "https://brentp.github.io/interlap")
30169 (synopsis "Fast, simple interval overlap testing")
30170 (description
30171 "InterLap does fast interval overlap testing with a simple Python data
30172structure.")
30173 (license license:expat)))
30174
30175(define-public python-pykwalify
30176 (package
30177 (name "python-pykwalify")
30178 (version "1.8.0")
30179 (source
30180 (origin
30181 (method git-fetch)
30182 (uri (git-reference
30183 (url "https://github.com/grokzen/pykwalify")
30184 (commit version)))
30185 (file-name (git-file-name name version))
30186 (sha256
30187 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
30188 (build-system pyproject-build-system)
30189 (arguments
30190 (list
30191 #:test-flags
30192 ;; XXX: yaml safe_dump() has been removed.
30193 #~(list "--ignore=tests/test_unicode.py"
30194 "--deselect=tests/test_core.py::TestCore::test_core_files")))
30195 (native-inputs
30196 (list python-pytest python-setuptools python-testfixtures))
30197 (propagated-inputs
30198 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
30199 (home-page "https://github.com/grokzen/pykwalify")
30200 (synopsis "Python lib/cli for JSON/YAML schema validation")
30201 (description
30202 "This package provides a parser, schema validator, and data binding tool
30203for YAML and JSON.")
30204 (license license:expat)))
30205
30206(define-public python-pykakasi
30207 (package
30208 (name "python-pykakasi")
30209 (version "2.3.0")
30210 (source
30211 (origin
30212 (method url-fetch)
30213 (uri (pypi-uri "pykakasi" version))
30214 (sha256
30215 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
30216 (build-system pyproject-build-system)
30217 (arguments (list #:test-flags ''("-k" "not test_aozora")))
30218 (propagated-inputs (list python-deprecated python-importlib-resources
30219 python-jaconv))
30220 (native-inputs (list python-coverage
30221 python-py-cpuinfo
30222 python-pytest
30223 python-pytest-benchmark
30224 python-setuptools
30225 python-setuptools-scm
30226 python-wheel))
30227 (home-page "https://codeberg.org/miurahr/pykakasi")
30228 (synopsis "Kana kanji simple inversion library")
30229 (description
30230 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
30231Language Processing} library to transliterate hiragana, katakana and
30232kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
30233characters in NFC form.
30234
30235Its algorithms are based on the kakasi library, which is written in C.")
30236 (license license:gpl3+)))
30237
30238(define-public python-dbus
30239 (package
30240 (name "python-dbus")
30241 (version "1.3.2")
30242 (source
30243 (origin
30244 (method url-fetch)
30245 (uri (pypi-uri "dbus-python" version))
30246 (sha256
30247 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
30248 (build-system pyproject-build-system)
30249 (arguments
30250 (list
30251 #:tests? #f ;XXX: Tests require setup
30252 #:phases
30253 #~(modify-phases %standard-phases
30254 (add-after 'unpack 'patch-requirements
30255 (lambda _
30256 (substitute* (list "pyproject.toml" "setup.py")
30257 (("'(ninja|patchelf)',?") ""))
30258 (substitute* "setup.cfg"
30259 (("(ninja|patchelf)") "")))))))
30260 (native-inputs
30261 (list pkg-config
30262 meson
30263 ninja/pinned
30264 patchelf
30265 python-meson
30266 python-setuptools
30267 python-tappy))
30268 (inputs
30269 (list dbus glib))
30270 (propagated-inputs
30271 (list python-pygobject))
30272 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
30273 (synopsis "Python bindings for libdbus")
30274 (description
30275 "This package provides Python bindings to libdbus, the reference
30276implementation of the D-Bus protocol.")
30277 (license license:expat)))
30278
30279;; Added on 2026-01-05
30280(define-deprecated-package python-dbus-python python-dbus)
30281
30282(define python-dbusmock-patch-paths-phase
30283 #~(lambda* (#:key inputs #:allow-other-keys)
30284 (substitute* "tests/test_api.py"
30285 (("/usr/bin/python3")
30286 (which "python3")))
30287 (substitute* "dbusmock/testcase.py"
30288 (("\"dbus-daemon\"")
30289 (object->string
30290 (search-input-file inputs "/bin/dbus-daemon"))))))
30291
30292(define-public python-dbusmock
30293 (package
30294 (name "python-dbusmock")
30295 (version "0.37.2")
30296 (source
30297 (origin
30298 (method git-fetch)
30299 (uri (git-reference
30300 (url "https://github.com/martinpitt/python-dbusmock")
30301 (commit version)))
30302 (file-name (git-file-name name version))
30303 (sha256
30304 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30305 (build-system pyproject-build-system)
30306 (arguments
30307 (list
30308 #:modules `((guix build pyproject-build-system)
30309 (guix build utils)
30310 (ice-9 match))
30311 #:phases
30312 #~(modify-phases %standard-phases
30313 (add-after 'unpack 'patch-paths
30314 #$python-dbusmock-patch-paths-phase)
30315 (replace 'check
30316 (lambda* (#:key tests? #:allow-other-keys)
30317 (when tests?
30318 (match (primitive-fork)
30319 (0 ;child process
30320 (execlp "pytest" "pytest" "-vv"))
30321 (pytest-pid
30322 (let loop ()
30323 ;; Reap child processes; otherwise, python-dbusmock
30324 ;; would waste time polling for the dbus processes
30325 ;; it spawns to be reaped, in vain.
30326 (match (waitpid WAIT_ANY)
30327 ((pid . status)
30328 (if (= pid pytest-pid)
30329 (unless (zero? status)
30330 (error "`pytest' exited with status"
30331 status))
30332 (loop)))))))))))))
30333 (native-inputs (list python-pytest python-setuptools upower which))
30334 (inputs (list dbus))
30335 (propagated-inputs (list python-dbus python-pygobject))
30336 (home-page "https://github.com/martinpitt/python-dbusmock")
30337 (synopsis "Python library for mock D-Bus objects")
30338 (description
30339 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
30340This is useful for writing tests for software which talks to D-Bus services
30341such as upower, systemd, logind, gnome-session or others, and it is hard (or
30342impossible without root privileges) to set the state of the real services to
30343what you expect in your tests.")
30344 (license license:lgpl3+)))
30345
30346(define-public python-dbusmock-for-tests
30347 (package
30348 (inherit python-dbusmock)
30349 (name "python-dbusmock-for-tests")
30350 (version "0.37.2")
30351 (source
30352 (origin
30353 (method git-fetch)
30354 (uri (git-reference
30355 (url "https://github.com/martinpitt/python-dbusmock")
30356 (commit version)))
30357 (file-name (git-file-name name version))
30358 (sha256
30359 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30360 (arguments
30361 (list
30362 #:tests? #f
30363 #:phases
30364 #~(modify-phases %standard-phases
30365 (add-after 'unpack 'patch-paths
30366 #$python-dbusmock-patch-paths-phase))))
30367 (native-inputs (list python-setuptools which))
30368 (properties '((hidden? . #t)))))
30369
30370(define-public python-jsonplus
30371 (package
30372 (name "python-jsonplus")
30373 (home-page "https://github.com/randomir/jsonplus")
30374 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30375 (revision . "0")))
30376 (version (git-version "0.8.0"
30377 (assoc-ref properties 'revision)
30378 (assoc-ref properties 'commit)))
30379 (source
30380 (origin
30381 (method git-fetch)
30382 (uri (git-reference
30383 (url home-page)
30384 (commit (assoc-ref properties 'commit))))
30385 (file-name (git-file-name name version))
30386 (sha256
30387 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30388 (build-system pyproject-build-system)
30389 (arguments
30390 (list
30391 ;; XXX: Tests require the additional package moneyed.
30392 #:tests? #f
30393 #:phases
30394 #~(modify-phases %standard-phases
30395 (add-after 'unpack 'chdir
30396 (lambda _
30397 (chdir "python"))))))
30398 (native-inputs (list python-setuptools))
30399 (propagated-inputs
30400 (list python-dateutil python-simplejson python-sortedcontainers))
30401 (synopsis "Serialize Python types to/from JSON")
30402 (description
30403 "This package provides functionality to serialize arbitrary data types
30404to and from JSON. Common data types are implemented and it is easy to
30405register custom encoders and decoders.")
30406 (license license:expat)))
30407
30408(define-public python-ioctl-opt
30409 (package
30410 (name "python-ioctl-opt")
30411 (version "1.3")
30412 (source
30413 (origin
30414 (method url-fetch)
30415 (uri (pypi-uri "ioctl-opt" version))
30416 (sha256
30417 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30418 (build-system pyproject-build-system)
30419 (arguments
30420 (list #:tests? #f)) ;no tests
30421 (native-inputs (list python-setuptools))
30422 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30423 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30424 (description
30425 "This package provides functions to compute fnctl.ioctl's opt argument.")
30426 (license license:gpl2+)))
30427
30428(define-public python-anyio
30429 (package
30430 (name "python-anyio")
30431 (version "4.12.1")
30432 (source
30433 (origin
30434 (method url-fetch)
30435 (uri (pypi-uri "anyio" version))
30436 (sha256
30437 (base32
30438 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30439 (patches
30440 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30441 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30442 (build-system pyproject-build-system)
30443 (arguments
30444 (list
30445 ;; tests:
30446 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30447 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30448 #:test-flags
30449 #~(list "-m" "not network"
30450 ;; Tests are shaky with a lot of DNS lookups.
30451 "--ignore=tests/test_sockets.py"
30452 #$@(map (lambda (ls)
30453 (string-append "--deselect=" (string-join ls "::")))
30454 (append
30455 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30456 ;; timeout expired running: <...>
30457 '(("tests/test_pytest_plugin.py"
30458 "test_keyboardinterrupt_during_test"))
30459 (if (target-aarch64?)
30460 ;; Assertions are not equal on ARM.
30461 '(("tests/streams/test_tls.py"
30462 "TestTLSListener"
30463 "test_handshake_fail")
30464 ("tests/test_taskgroups.py"
30465 "test_shielded_cancel_sleep_time")
30466 ("tests/test_to_thread.py"
30467 "test_run_in_custom_limiter")
30468 ("tests/test_to_thread.py"
30469 "TestBlockingPortalProvider"
30470 "test_single_thread"))
30471 '()))))))
30472 (propagated-inputs
30473 (list python-idna
30474 python-sniffio
30475 python-typing-extensions))
30476 (native-inputs
30477 (list python-blockbuster
30478 python-psutil
30479 python-pytest
30480 python-pytest-mock
30481 python-setuptools
30482 python-setuptools-scm
30483 python-trio
30484 python-trustme
30485 python-truststore
30486 python-uvloop))
30487 (home-page "https://anyio.readthedocs.io")
30488 (synopsis "Compatibility layer for multiple asynchronous event loops")
30489 (description
30490 "AnyIO is an asynchronous networking and concurrency library that works
30491on top of either asyncio or trio. It implements trio-like structured
30492concurrency on top of asyncio, and works in harmony with the native SC of trio
30493itself.")
30494 (license license:expat)))
30495
30496(define-public python-argh
30497 (package
30498 (name "python-argh")
30499 (version "0.31.3")
30500 (source
30501 (origin
30502 (method url-fetch)
30503 (uri (pypi-uri "argh" version))
30504 (sha256
30505 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30506 (build-system pyproject-build-system)
30507 (native-inputs (list python-flit-core python-pytest))
30508 (home-page "https://github.com/neithere/argh/")
30509 (synopsis "Argparse wrapper with natural syntax")
30510 (description
30511 "Argh is a small library that provides several layers of abstraction
30512on top of @code{python-argparse}. The layers can be mixed. It is always
30513possible to declare a command with the highest possible (and least flexible)
30514layer and then tune the behaviour with any of the lower layers including the
30515native API of @code{python-argparse}.")
30516 (license license:lgpl3+)))
30517
30518(define-public python-pox
30519 (package
30520 (name "python-pox")
30521 (version "0.3.6")
30522 (source
30523 (origin
30524 (method url-fetch)
30525 (uri (pypi-uri "pox" version))
30526 (sha256
30527 (base32
30528 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30529 (build-system pyproject-build-system)
30530 (arguments
30531 (list
30532 #:phases
30533 #~(modify-phases %standard-phases
30534 (replace 'check
30535 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30536 (when tests?
30537 (mkdir-p "/tmp/guix")
30538 (setenv "SHELL" "bash")
30539 (setenv "USERNAME" "guix")
30540 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30541 (invoke "python" "./pox/tests/__main__.py")))))))
30542 (native-inputs
30543 (list python-setuptools
30544 which)) ;pox/tests/test_shutils.py
30545 (home-page "https://pypi.org/project/pox/")
30546 (synopsis "Python utilities for file system exploration and automated builds")
30547 (description
30548 "Pox provides a collection of utilities for navigating and manipulating
30549file systems. This module is designed to facilitate some of the low-level
30550operating system interactions that are useful when exploring a file system on a
30551remote host. Pox provides Python equivalents of several shell commands such
30552as @command{which} and @command{find}. These commands allow automated
30553discovery of what has been installed on an operating system, and where the
30554essential tools are located.")
30555 (license license:bsd-3)))
30556
30557(define-public python-flit
30558 (package
30559 (name "python-flit")
30560 (version "3.12.0") ;same as python-flit-core
30561 (source
30562 (origin
30563 (method url-fetch)
30564 (uri (pypi-uri "flit" version))
30565 (sha256
30566 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30567 (build-system pyproject-build-system)
30568 (arguments
30569 (list
30570 #:test-flags
30571 ;; These tests fail when FLIT_NO_NETWORK is set
30572 '(list "-k" "not test_invalid_classifier \
30573and not test_install_requires \
30574and not test_install_requires_extra \
30575and not test_validate_classifiers_private")
30576 #:phases
30577 #~(modify-phases %standard-phases
30578 (add-after 'unpack 'relax-pip-requirement
30579 ;; python -m pip is available by default, no need to
30580 ;; propagate pip.
30581 (lambda _
30582 (substitute* "pyproject.toml"
30583 (("\"pip\",")
30584 ""))))
30585 (add-before 'check 'pre-check
30586 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30587 (when tests?
30588 (setenv "HOME" "/tmp")
30589 (setenv "FLIT_NO_NETWORK" "1")))))))
30590 (propagated-inputs
30591 (list python-tomli-w
30592 python-flit-core
30593 python-docutils
30594 python-requests))
30595 (native-inputs
30596 (list python-responses
30597 python-pytest
30598 python-testpath))
30599 (home-page "https://flit.readthedocs.io/")
30600 (synopsis "Simple packaging tool for simple packages")
30601 (description "Flit is a simple way to put Python packages and modules on
30602PyPI. Flit packages a single importable module or package at a time, using
30603the import name as the name on PyPI. All subpackages and data files within a
30604package are included automatically.")
30605 (license license:bsd-3)))
30606
30607(define-public python-fastentrypoints
30608 (package
30609 (name "python-fastentrypoints")
30610 (home-page "https://github.com/ninjaaron/fast-entry_points")
30611 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30612 (revision . "0")))
30613 (version (git-version "0.12"
30614 (assoc-ref properties 'revision)
30615 (assoc-ref properties 'commit)))
30616 (source
30617 (origin
30618 (method git-fetch)
30619 (uri (git-reference
30620 (url home-page)
30621 (commit (assoc-ref properties 'commit))))
30622 (file-name (git-file-name name version))
30623 (sha256
30624 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30625 (build-system pyproject-build-system)
30626 (arguments
30627 (list
30628 ;; XXX: Testing is non-standard and hardly configurable.
30629 #:tests? #f
30630 #:test-backend #~'custom
30631 #:test-flags #~(list "test/runtest.py")))
30632 (native-inputs (list python-setuptools))
30633 (synopsis "Makes entry_points specified in setup.py load more quickly")
30634 (description
30635 "Using entry_points in your setup.py makes scripts that start really
30636slowly because it imports pkg_resources. This package allows such setup
30637scripts to load entry points more quickly.")
30638 (license license:bsd-3)))
30639
30640(define-public python-funcparserlib
30641 (package
30642 (name "python-funcparserlib")
30643 (version "1.0.1")
30644 (source
30645 (origin
30646 ;; Source tarball on PyPi lacks tests.
30647 (method git-fetch)
30648 (uri (git-reference
30649 (url "https://github.com/vlasovskikh/funcparserlib")
30650 (commit version)))
30651 (file-name (git-file-name name version))
30652 (sha256
30653 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30654 (build-system pyproject-build-system)
30655 (arguments
30656 '(#:phases
30657 (modify-phases %standard-phases
30658 (replace 'check
30659 (lambda* (#:key tests? #:allow-other-keys)
30660 (when tests?
30661 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30662 ;; ModuleNotFoundError: No module named 'poetry'
30663 (native-inputs (list python-poetry-core python-six))
30664 (home-page "https://github.com/vlasovskikh/funcparserlib")
30665 (synopsis
30666 "Recursive descent parsing library based on functional combinators")
30667 (description
30668 "This package is a recursive descent parsing library for Python based on
30669functional combinators. Parser combinators are just higher-order functions
30670that take parsers as their arguments and return them as result values.")
30671 (license license:expat)))
30672
30673(define-public python-cson
30674 (package
30675 (name "python-cson")
30676 (version "0.8")
30677 (source
30678 (origin
30679 (method git-fetch)
30680 (uri (git-reference
30681 (url "https://github.com/avakar/pycson")
30682 (commit version)))
30683 (file-name (git-file-name name version))
30684 (sha256
30685 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30686 (build-system pyproject-build-system)
30687 (native-inputs (list python-pytest python-setuptools python-wheel))
30688 (propagated-inputs (list python-speg))
30689 (home-page "https://github.com/avakar/pycson")
30690 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30691 (description
30692 "This package is a parser for Coffeescript Object Notation (CSON).")
30693 (license license:expat)))
30694
30695(define-public python-aionotify
30696 (package
30697 (name "python-aionotify")
30698 (version "0.3.1")
30699 (source
30700 (origin
30701 ;; Source tarball on PyPi lacks tests
30702 (method git-fetch)
30703 (uri (git-reference
30704 (url "https://github.com/rbarrois/aionotify")
30705 (commit version)))
30706 (file-name (git-file-name name version))
30707 (sha256
30708 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30709 (build-system pyproject-build-system)
30710 (native-inputs
30711 (list python-pytest
30712 python-setuptools
30713 python-wheel))
30714 (home-page "https://github.com/rbarrois/aionotify")
30715 (synopsis "inotify library for Python")
30716 (description
30717 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30718 (license license:bsd-3)))
30719
30720(define-public python-forbiddenfruit
30721 (package
30722 (name "python-forbiddenfruit")
30723 (version "0.1.4")
30724 (source
30725 (origin
30726 (method git-fetch)
30727 (uri (git-reference
30728 (url "https://github.com/clarete/forbiddenfruit")
30729 (commit version)))
30730 (file-name (git-file-name name version))
30731 (sha256
30732 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30733 (build-system pyproject-build-system)
30734 (arguments
30735 (list
30736 #:phases
30737 #~(modify-phases %standard-phases
30738 (replace 'check
30739 (lambda* (#:key tests? #:allow-other-keys)
30740 (when tests?
30741 (invoke "make" "prepare" "SKIP_DEPS=1")
30742 (invoke "nosetests")))))))
30743 (native-inputs (list python-pynose python-setuptools))
30744 (home-page "https://github.com/clarete/forbiddenfruit")
30745 (synopsis "Patch python built-in objects")
30746 (description "This project allows Python code to extend built-in types.")
30747 (license (list license:gpl3+ license:expat))))
30748
30749(define-public python-k5test
30750 (package
30751 (name "python-k5test")
30752 (version "0.10.4")
30753 (source
30754 (origin
30755 (method url-fetch)
30756 (uri (pypi-uri "k5test" version))
30757 (sha256
30758 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30759 (build-system pyproject-build-system)
30760 (arguments
30761 (list #:tests? #f)) ;no tests
30762 (native-inputs
30763 (list python-setuptools))
30764 (inputs
30765 (list mit-krb5))
30766 (home-page "https://github.com/pythongssapi/k5test")
30767 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30768 (description
30769 "@code{k5test} is a library for setting up self-contained Kerberos 5
30770environments, and running Python unit tests inside those environments. It is
30771based on the file of the same name found alongside the MIT Kerberos 5 unit
30772tests.")
30773 (license license:isc)))
30774
30775(define-public python-gssapi
30776 (package
30777 (name "python-gssapi")
30778 (version "1.10.0")
30779 (source
30780 (origin
30781 (method url-fetch)
30782 (uri (pypi-uri "gssapi" version))
30783 (sha256
30784 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30785 (build-system pyproject-build-system)
30786 (arguments
30787 (list #:test-flags #~(list "--pyargs" "gssapi")))
30788 (native-inputs
30789 (list python-cython
30790 python-k5test
30791 python-parameterized
30792 python-pytest
30793 python-setuptools))
30794 (inputs
30795 (list mit-krb5))
30796 (propagated-inputs
30797 (list python-decorator))
30798 (home-page "https://github.com/pythongssapi/python-gssapi")
30799 (synopsis "Python GSSAPI Wrapper")
30800 (description
30801 "Python-GSSAPI provides both low-level and high level wrappers around the
30802GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30803also be usable with other GSSAPI mechanisms.")
30804 (license license:isc)))
30805
30806(define-public python-check-manifest
30807 (package
30808 (name "python-check-manifest")
30809 (version "0.51")
30810 (source
30811 (origin
30812 (method url-fetch)
30813 (uri (pypi-uri "check_manifest" version))
30814 (sha256
30815 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30816 (build-system pyproject-build-system)
30817 (arguments
30818 (list
30819 ;; tests: 127 passed, 20 skipped, 2 deselected
30820 #:test-flags
30821 ;; This tests requires setting up a venv which does not work
30822 ;; properly in the build environment.
30823 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30824 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30825 (native-inputs
30826 (list git-minimal/pinned python-pytest))
30827 (propagated-inputs
30828 (list python-pypa-build python-setuptools))
30829 (home-page "https://github.com/mgedmin/check-manifest")
30830 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30831 (description "Python package can include a MANIFEST.in file to help with
30832sending package files to the Python Package Index. This package checks that
30833file to ensure it completely and accurately describes your project.")
30834 (license license:expat)))
30835
30836(define-public python-android-stringslib
30837 (package
30838 (name "python-android-stringslib")
30839 (version "0.1.2")
30840 (source
30841 (origin
30842 (method git-fetch)
30843 (uri (git-reference
30844 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30845 (commit (string-append "v" version))))
30846 (file-name (git-file-name name version))
30847 (sha256
30848 (base32
30849 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30850 (build-system pyproject-build-system)
30851 (arguments (list #:tests? #f)) ; No tests.
30852 (native-inputs (list python-setuptools))
30853 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30854 (synopsis "Android strings.xml support")
30855 (description
30856 "Android Strings Lib provides support for android's strings.xml files.
30857These files are used to translate strings in android apps.")
30858 (license license:expat)))
30859
30860(define-public python-pypng
30861 (package
30862 (name "python-pypng")
30863 (version "0.20220715.0")
30864 (source
30865 (origin
30866 (method url-fetch)
30867 (uri (pypi-uri "pypng" version))
30868 (sha256
30869 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30870 (build-system pyproject-build-system)
30871 (arguments
30872 (list
30873 #:phases
30874 '(modify-phases %standard-phases
30875 (add-before 'check 'pre-check
30876 (lambda _
30877 (setenv "PYTHONPATH"
30878 (string-append (getcwd) "/code:"
30879 (getenv "GUIX_PYTHONPATH"))))))))
30880 (native-inputs (list python-pytest python-setuptools python-wheel))
30881 (home-page "https://github.com/drj11/pypng")
30882 (synopsis "Pure Python PNG image encoder/decoder")
30883 (description
30884 "The PyPNG module implements support for PNG images. It reads and writes
30885PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30886pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30887LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30888images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30889A number of optional chunks can be specified (when writing) and
30890understood (when reading): tRNS, bKGD, gAMA.
30891
30892PyPNG is not a high level toolkit for image processing (like PIL) and does not
30893aim at being a replacement or competitor. Its strength lies in fine-grained
30894extensive support of PNG features. It can also read and write Netpbm PAM
30895files, with a focus on its use as an intermediate format for implementing
30896custom PNG processing.")
30897 (license license:expat)))
30898
30899(define-public python-fuzzywuzzy
30900 (package
30901 (name "python-fuzzywuzzy")
30902 (version "0.18.0")
30903 (source
30904 (origin
30905 (method git-fetch)
30906 (uri (git-reference
30907 (url "https://github.com/seatgeek/fuzzywuzzy")
30908 (commit version)))
30909 (file-name (git-file-name name version))
30910 (sha256
30911 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30912 (build-system pyproject-build-system)
30913 (arguments
30914 (list
30915 #:test-flags
30916 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30917 (native-inputs
30918 (list python-hypothesis
30919 python-pycodestyle
30920 python-pytest
30921 python-setuptools))
30922 (propagated-inputs (list python-levenshtein))
30923 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30924 (synopsis "Fuzzy string matching in Python")
30925 (description
30926 "Approximate string matching using @emph{Levenshtein Distance} to
30927calculate the differences between sequences.")
30928 (license license:gpl2)))
30929
30930(define-public python-block-tracing
30931 (package
30932 (name "python-block-tracing")
30933 (version "1.0.1")
30934 (source
30935 (origin
30936 (method url-fetch)
30937 (uri (pypi-uri "block_tracing" version))
30938 (sha256
30939 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30940 (build-system pyproject-build-system)
30941 (arguments (list #:tests? #f)) ; No tests.
30942 (native-inputs (list python-setuptools))
30943 (home-page "https://github.com/rianhunter/block_tracing")
30944 (synopsis "Protect process memory")
30945 (description
30946 "@code{block_tracing} is a tiny Python library that can be used to
30947prevent debuggers and other applications from inspecting the memory within
30948your process.")
30949 (license license:expat)))
30950
30951(define-public python-json-e
30952 (package
30953 (name "python-json-e")
30954 (version "4.8.0")
30955 (source
30956 (origin
30957 (method git-fetch) ; no tests in PyPI release
30958 (uri (git-reference
30959 (url "https://github.com/json-e/json-e")
30960 (commit (string-append "v" version))))
30961 (file-name (git-file-name name version))
30962 (sha256
30963 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30964 (build-system pyproject-build-system)
30965 (arguments
30966 (list
30967 #:phases
30968 #~(modify-phases %standard-phases
30969 ;; Git repository provides implementations for JavaScript, Golang,
30970 ;; Python and Rust, pick "py".
30971 (add-before 'build 'chdir-to-py
30972 (lambda _
30973 (chdir "py"))))))
30974 (native-inputs
30975 (list python-freezegun
30976 python-pytest
30977 python-pyyaml
30978 python-setuptools
30979 python-wheel))
30980 (home-page "https://json-e.js.org")
30981 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30982 (description
30983 "This package provides a data-structure parameterization system written
30984for embedding context in JSON objects.")
30985 (license license:mpl2.0)))
30986
30987(define-public python-json-logger
30988 (package
30989 (name "python-json-logger")
30990 (version "4.0.0")
30991 (source
30992 (origin
30993 (method git-fetch)
30994 (uri (git-reference
30995 (url "https://github.com/nhairs/python-json-logger")
30996 (commit (string-append "v" version))))
30997 (file-name (git-file-name name version))
30998 (sha256
30999 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
31000 (build-system pyproject-build-system)
31001 (native-inputs
31002 (list python-freezegun
31003 python-mike
31004 python-msgspec
31005 python-orjson
31006 python-pypa-build
31007 python-pytest
31008 python-setuptools
31009 python-tzdata
31010 python-validate-pyproject
31011 python-typing-extensions))
31012 (home-page "https://github.com/nhairs/python-json-logger")
31013 (synopsis "JSON log formatter in Python")
31014 (description "This library allows standard Python logging to output log data
31015as JSON objects. With JSON we can make our logs more readable by machines and
31016we can stop writing custom parsers for syslog-type records.")
31017 (license license:bsd-3)))
31018
31019(define-public python-daiquiri
31020 (package
31021 (name "python-daiquiri")
31022 (version "3.0.1")
31023 (source
31024 (origin
31025 (method git-fetch)
31026 (uri (git-reference
31027 (url "https://github.com/jd/daiquiri")
31028 (commit version)))
31029 (file-name (git-file-name name version))
31030 (sha256
31031 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
31032 (build-system pyproject-build-system)
31033 (propagated-inputs (list python-json-logger))
31034 (native-inputs (list python-mock python-pytest python-setuptools
31035 python-setuptools-scm))
31036 (home-page "https://github.com/jd/daiquiri")
31037 (synopsis "Library to configure Python logging easily")
31038 (description
31039 "The daiquiri library provides an easy way to configure logging in
31040Python. It also provides some custom formatters and handlers.")
31041 (license license:asl2.0)))
31042
31043(define-public python-pifpaf
31044 (package
31045 (name "python-pifpaf")
31046 (version "3.4.0")
31047 (source
31048 (origin
31049 (method git-fetch)
31050 (uri (git-reference
31051 (url "https://github.com/jd/pifpaf")
31052 (commit version)))
31053 (file-name (git-file-name name version))
31054 (sha256
31055 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
31056 (build-system pyproject-build-system)
31057 (arguments
31058 (list
31059 #:phases
31060 #~(modify-phases %standard-phases
31061 (add-after 'install 'install-drivers
31062 (lambda* (#:key inputs outputs #:allow-other-keys)
31063 (let ((site (site-packages inputs outputs)))
31064 (copy-recursively "pifpaf/drivers"
31065 (string-append site "/pifpaf/drivers/"))))))))
31066 (propagated-inputs
31067 (list python-click
31068 python-daiquiri
31069 python-fixtures
31070 python-jinja2
31071 python-pbr
31072 python-psutil
31073 python-xattr))
31074 (native-inputs
31075 (list python-mock
31076 python-stestr
31077 python-packaging
31078 python-requests
31079 python-testrepository
31080 python-testtools
31081 python-setuptools))
31082 (home-page "https://github.com/jd/pifpaf")
31083 (synopsis "Tools and fixtures to manage daemons for testing in Python")
31084 (description
31085 "Pifpaf is a suite of fixtures and a command-line tool that starts and
31086stops daemons for a quick throw-away usage. This is typically useful when
31087needing these daemons to run integration testing. It originally evolved from
31088its precursor @code{overtest}.")
31089 (license license:asl2.0)))
31090
31091(define-public python-pytest-check-links
31092 (package
31093 (name "python-pytest-check-links")
31094 (version "0.10.1")
31095 (source
31096 (origin
31097 (method url-fetch)
31098 (uri (pypi-uri "pytest_check_links" version))
31099 (sha256
31100 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
31101 (build-system pyproject-build-system)
31102 (arguments
31103 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
31104 (native-inputs
31105 (list python-hatchling))
31106 (propagated-inputs
31107 (list python-docutils
31108 python-html5lib
31109 python-nbconvert
31110 python-nbformat
31111 python-requests))
31112 (home-page "https://github.com/jupyterlab/pytest-check-links")
31113 (synopsis "Check links in files")
31114 (description "This package provides a pytest plugin that checks URLs for
31115HTML-containing files.")
31116 (license license:bsd-3)))
31117
31118(define-public python-json5
31119 (package
31120 (name "python-json5")
31121 (version "0.9.25")
31122 (source
31123 (origin
31124 ;; sample.json5 is missing from PyPi source tarball
31125 (method git-fetch)
31126 (uri (git-reference
31127 (url "https://github.com/dpranke/pyjson5")
31128 (commit (string-append "v" version))))
31129 (file-name (git-file-name name version))
31130 (sha256
31131 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
31132 (build-system pyproject-build-system)
31133 (native-inputs (list python-pytest python-setuptools python-wheel))
31134 (home-page "https://github.com/dpranke/pyjson5")
31135 (synopsis "Python implementation of the JSON5 data format")
31136 (description
31137 "JSON5 extends the JSON data interchange format to make it slightly more
31138usable as a configuration language. This Python package implements parsing and
31139dumping of JSON5 data structures.")
31140 (license license:asl2.0)))
31141
31142(define-public python-farama-notifications
31143 (package
31144 (name "python-farama-notifications")
31145 (version "0.0.4")
31146 (source
31147 ;; The version on pypi does not include tests.
31148 (origin
31149 (method git-fetch)
31150 (uri (git-reference
31151 (url "https://github.com/Farama-Foundation/Farama-Notifications")
31152 (commit version)))
31153 (file-name (git-file-name name version))
31154 (sha256
31155 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
31156 (build-system pyproject-build-system)
31157 (arguments
31158 (list
31159 #:phases
31160 '(modify-phases %standard-phases
31161 (replace 'check
31162 (lambda* (#:key tests? #:allow-other-keys)
31163 (when tests?
31164 (invoke "python3" "tests/ci-test.py")))))))
31165 (native-inputs (list python-pytest python-setuptools python-wheel))
31166 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
31167 (synopsis "Notifications for all Farama Foundation maintained libraries")
31168 (description
31169 "This package allows for providing notifications for all Farama
31170Foundation maintained libraries.")
31171 (license license:expat)))
31172
31173(define-public python-frontmatter
31174 (package
31175 (name "python-frontmatter")
31176 (version "1.3.0")
31177 (source
31178 (origin
31179 (method git-fetch)
31180 (uri (git-reference
31181 (url "https://github.com/eyeseast/python-frontmatter")
31182 (commit (string-append "v" version))))
31183 (file-name (git-file-name name version))
31184 (sha256
31185 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
31186 (build-system pyproject-build-system)
31187 (native-inputs
31188 (list python-hatchling
31189 python-pyaml
31190 python-pytest
31191 python-toml
31192 python-types-pyyaml
31193 python-types-toml
31194 python-uv-build))
31195 (propagated-inputs (list python-pyyaml))
31196 (home-page "https://github.com/eyeseast/python-frontmatter")
31197 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
31198 (description
31199 "This package offers a useful way to add arbitrary, structured metadata
31200to text documents, regardless of type. This is a small package to load and
31201parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
31202 (license license:expat)))
31203
31204(define-public python-frozendict
31205 (package
31206 (name "python-frozendict")
31207 (version "2.4.6")
31208 (source
31209 (origin
31210 (method url-fetch)
31211 (uri (pypi-uri "frozendict" version))
31212 (sha256
31213 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
31214 (build-system pyproject-build-system)
31215 (native-inputs
31216 (list python-pytest
31217 python-setuptools
31218 python-wheel))
31219 (home-page "https://github.com/Marco-Sulla/python-frozendict")
31220 (synopsis "Simple immutable mapping for Python")
31221 (description
31222 "@dfn{frozendict} is an immutable wrapper around dictionaries that
31223implements the complete mapping interface. It can be used as a drop-in
31224replacement for dictionaries where immutability is desired.")
31225 (license license:expat)))
31226
31227(define-public python-py-cpuinfo
31228 (package
31229 (name "python-py-cpuinfo")
31230 (version "9.0.0")
31231 (source
31232 (origin
31233 (method git-fetch)
31234 (uri (git-reference
31235 (url "https://github.com/workhorsy/py-cpuinfo")
31236 (commit (string-append "v" version))))
31237 (file-name (git-file-name name version))
31238 (sha256
31239 (base32
31240 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
31241 (build-system pyproject-build-system)
31242 (arguments
31243 (list #:test-backend #~'custom
31244 #:test-flags #~(list "test_suite.py")))
31245 (native-inputs
31246 (list python-setuptools))
31247 (home-page "https://github.com/workhorsy/py-cpuinfo")
31248 (synopsis "Get CPU info with Python")
31249 (description
31250 "This Python module returns the CPU info by using the best sources of
31251information for your operating system.")
31252 (license license:expat)))
31253
31254(define-public python-canonicaljson
31255 (package
31256 (name "python-canonicaljson")
31257 (version "2.0.0")
31258 (source
31259 (origin
31260 (method url-fetch)
31261 (uri (pypi-uri "canonicaljson" version))
31262 (sha256
31263 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
31264 (build-system pyproject-build-system)
31265 (arguments
31266 (list #:test-backend #~'unittest))
31267 (native-inputs
31268 (list python-setuptools))
31269 (home-page "https://github.com/matrix-org/python-canonicaljson")
31270 (synopsis "Canonical JSON")
31271 (description
31272 "Deterministically encode JSON.
31273
31274@itemize
31275@item Encodes objects and arrays as RFC 7159 JSON.
31276@item Sorts object keys so that you get the same result each time.
31277@item Has no insignificant whitespace to make the output as small as possible.
31278@item Escapes only the characters that must be escaped, U+0000 to
31279 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
31280@item Uses the shortest escape sequence for each escaped character.
31281@item Encodes the JSON as UTF-8.
31282@item Can encode frozendict immutable dictionaries.
31283@end itemize")
31284 (license license:asl2.0)))
31285
31286(define-public python-signedjson
31287 (package
31288 (name "python-signedjson")
31289 (version "1.1.4")
31290 (source
31291 (origin
31292 (method git-fetch)
31293 (uri (git-reference
31294 (url "https://github.com/matrix-org/python-signedjson")
31295 (commit (string-append "v" version))))
31296 (file-name (git-file-name name version))
31297 (sha256
31298 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31299 (build-system pyproject-build-system)
31300 (propagated-inputs
31301 (list python-canonicaljson
31302 python-pynacl
31303 python-typing-extensions
31304 python-unpaddedbase64))
31305 (native-inputs
31306 (list python-pytest python-setuptools-scm python-setuptools))
31307 (home-page "https://github.com/matrix-org/python-signedjson")
31308 (synopsis "Sign JSON objects with ED25519 signatures")
31309 (description
31310 "Sign JSON objects with ED25519 signatures.
31311
31312@itemize
31313@item More than one entity can sign the same object.
31314@item Each entity can sign the object with more than one key making it easier to
31315rotate keys
31316@item ED25519 can be replaced with a different algorithm.
31317@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31318key.
31319@end itemize")
31320 (license license:asl2.0)))
31321
31322(define-public python-daemonize
31323 (package
31324 (name "python-daemonize")
31325 (version "2.5.0")
31326 (source
31327 (origin
31328 (method git-fetch)
31329 (uri (git-reference
31330 (url "https://github.com/thesharp/daemonize")
31331 (commit (string-append "v" version))))
31332 (file-name (git-file-name name version))
31333 (sha256
31334 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31335 (build-system pyproject-build-system)
31336 (arguments
31337 (list
31338 #:test-backend #~'custom
31339 #:test-flags #~(list "tests/test.py")
31340 #:phases
31341 #~(modify-phases %standard-phases
31342 (add-before 'check 'fix-tests
31343 (lambda _
31344 ;; XXX: nobody has group nogroup on Guix.
31345 (substitute* "tests/test.py"
31346 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31347 (number->string (passwd:gid (getpw "nobody"))))))))))
31348 (native-inputs (list coreutils-minimal procps python-setuptools))
31349 (home-page "https://github.com/thesharp/daemonize")
31350 (synopsis "Library for writing system daemons in Python")
31351 (description
31352 "Daemonize is a library for writing system daemons in Python.")
31353 (license license:expat)))
31354
31355(define-public python-pymacaroons
31356 (package
31357 (name "python-pymacaroons")
31358 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31359 (revision . "0")))
31360 (version (git-version "0.13.0"
31361 (assoc-ref properties 'revision)
31362 (assoc-ref properties 'commit)))
31363 (source
31364 (origin
31365 (method git-fetch)
31366 (uri (git-reference
31367 (url "https://github.com/ecordell/pymacaroons")
31368 (commit (assoc-ref properties 'commit))))
31369 (file-name (git-file-name name version))
31370 (sha256
31371 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31372 (build-system pyproject-build-system)
31373 (arguments
31374 (list
31375 #:test-flags
31376 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31377 ;; No module named 'hypothesis.specifiers'
31378 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31379 (native-inputs
31380 (list python-hypothesis
31381 python-mock
31382 python-pytest
31383 python-setuptools))
31384 (propagated-inputs (list python-pynacl))
31385 (home-page "https://github.com/ecordell/pymacaroons")
31386 (synopsis "Python Macaroon Library")
31387 (description
31388 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31389tokens, macaroons embed caveats that define specific authorization
31390requirements for the target service, the service that issued the root macaroon
31391and which is capable of verifying the integrity of macaroons it receives.
31392
31393Macaroons allow for delegation and attenuation of authorization. They are
31394simple and fast to verify, and decouple authorization policy from the
31395enforcement of that policy.")
31396 (license license:expat)))
31397
31398(define-public python-ldap3
31399 (package
31400 (name "python-ldap3")
31401 (version "2.9.1")
31402 (home-page "https://github.com/cannatag/ldap3")
31403 (source
31404 (origin
31405 (method git-fetch)
31406 (uri (git-reference (url home-page)
31407 (commit (string-append "v" version))))
31408 (file-name (git-file-name name version))
31409 (sha256
31410 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31411 (build-system pyproject-build-system)
31412 (arguments
31413 (list
31414 #:tests? #f ;TODO: Tests need a real LDAP server to run
31415 #:test-backend #~'nose))
31416 (native-inputs
31417 (list python-pynose python-setuptools))
31418 (propagated-inputs
31419 (list python-gssapi python-pyasn1))
31420 (synopsis "Python LDAP client")
31421 (description
31422 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31423library.")
31424 (license license:lgpl3+)))
31425
31426(define-public python-boltons
31427 (package
31428 (name "python-boltons")
31429 (version "25.0.0")
31430 (source
31431 (origin
31432 (method git-fetch)
31433 (uri (git-reference
31434 (url "https://github.com/mahmoud/boltons")
31435 (commit version)))
31436 (file-name (git-file-name name version))
31437 (sha256
31438 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31439 (build-system pyproject-build-system)
31440 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31441 (home-page "https://github.com/mahmoud/boltons")
31442 (synopsis "Extensions to the Python standard library")
31443 (description
31444 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31445as — and yet conspicuously missing from — the standard library, including:
31446
31447@itemize
31448@item Atomic file saving, bolted on with fileutils
31449@item A highly-optimized OrderedMultiDict, in dictutils
31450@item Two types of PriorityQueue, in queueutils
31451@item Chunked and windowed iteration, in iterutils
31452@item Recursive data structure iteration and merging, with iterutils.remap
31453@item Exponential backoff functionality, including jitter, through
31454iterutils.backoff
31455@item A full-featured TracebackInfo type, for representing stack traces, in
31456tbutils
31457@end itemize")
31458 (license license:bsd-3)))
31459
31460(define-public python-eliot
31461 (package
31462 (name "python-eliot")
31463 (version "1.17.5")
31464 (source
31465 (origin
31466 (method url-fetch)
31467 (uri (pypi-uri "eliot" version))
31468 (sha256
31469 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31470 (build-system pyproject-build-system)
31471 (arguments
31472 (list
31473 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31474 ;; Two tests fail with error: TypeError: Unsupported type.
31475 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31476 #:phases
31477 #~(modify-phases %standard-phases
31478 (add-after 'unpack 'remove-journald-support
31479 (lambda _
31480 (for-each delete-file
31481 '("eliot/tests/test_journald.py"
31482 "eliot/journald.py")))))))
31483 (native-inputs
31484 (list python-pytest
31485 python-setuptools
31486 python-testtools))
31487 (propagated-inputs
31488 (list python-boltons
31489 python-orjson
31490 python-pyrsistent
31491 python-zope-interface))
31492 (home-page "https://github.com/itamarst/eliot/")
31493 (synopsis "Eliot: the logging system that tells you why it happened")
31494 (description
31495 "@dfn{eliot} is a Python logging system that outputs causal chains of
31496actions: actions can spawn other actions, and eventually they either succeed
31497or fail. The resulting logs tell you the story of what your software did: what
31498happened, and what caused it.")
31499 (license license:asl2.0)))
31500
31501(define-public python-pem
31502 (package
31503 (name "python-pem")
31504 (version "23.1.0")
31505 (source
31506 (origin
31507 (method git-fetch)
31508 (uri (git-reference
31509 (url "https://github.com/hynek/pem")
31510 (commit version)))
31511 (file-name (git-file-name name version))
31512 (sha256
31513 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31514 (build-system pyproject-build-system)
31515 (native-inputs
31516 (list nss-certs-for-test
31517 python-certifi
31518 python-hatch-fancy-pypi-readme
31519 python-hatch-vcs
31520 python-hatchling
31521 python-pretend
31522 python-pyopenssl
31523 python-pytest
31524 python-twisted))
31525 (home-page "https://pem.readthedocs.io/")
31526 (synopsis "Easy PEM file parsing in Python")
31527 (description
31528 "This package provides a Python module for parsing and splitting PEM files.")
31529 (license license:expat)))
31530
31531(define-public python-pysaml2
31532 (package
31533 (name "python-pysaml2")
31534 (version "7.5.4")
31535 (source
31536 (origin
31537 (method git-fetch)
31538 (uri (git-reference
31539 (url "https://github.com/IdentityPython/pysaml2")
31540 (commit (string-append "v" version))))
31541 (file-name (git-file-name name version))
31542 (sha256
31543 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31544 (build-system pyproject-build-system)
31545 (arguments
31546 (list
31547 #:test-flags
31548 #~(list "-k"
31549 (string-join
31550 ;; XXX: encryption failures
31551 (list "not test_encrypted_response_6"
31552 "test_validate_cert_chains"
31553 "test_validate_with_root_cert"
31554 ;; XXX: xml parsing error
31555 "test_namespace_processing") " and not "))
31556 #:phases
31557 #~(modify-phases %standard-phases
31558 (add-after 'unpack 'relax-requirements
31559 (lambda _
31560 (substitute* "pyproject.toml"
31561 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31562 (format #f "~s" dep))))))))
31563 (native-inputs (list python-poetry-core python-pytest))
31564 (propagated-inputs
31565 (list python-cryptography
31566 python-dateutil
31567 python-defusedxml
31568 python-pymongo
31569 python-pyopenssl
31570 python-responses
31571 python-requests
31572 python-xmlschema
31573 python-xmlsec))
31574 (home-page "https://idpy.org")
31575 (synopsis "Python implementation of SAML Version 2 Standard")
31576 (description
31577 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31578It contains all necessary pieces for building a SAML2 service provider or
31579an identity provider. The distribution contains examples of both.
31580
31581This package was originally written to work in a WSGI environment, but
31582there are extensions that allow you to use it with other frameworks.")
31583 (license license:asl2.0)))
31584
31585;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31586;; This PyPI package is no longer actively maintained, but the underlying
31587;; library can be vendored.
31588;;
31589;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31590;; pyproject.toml) and can't be used as a common input, do not update this
31591;; package.
31592(define-public python-click-plugins
31593 (package
31594 (name "python-click-plugins")
31595 (version "1.1.1.2")
31596 (source
31597 (origin
31598 (method git-fetch)
31599 (uri (git-reference
31600 (url "https://github.com/click-contrib/click-plugins")
31601 (commit version)))
31602 (file-name (git-file-name name version))
31603 (sha256
31604 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31605 (build-system pyproject-build-system)
31606 (arguments
31607 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31608 (native-inputs
31609 (list python-setuptools))
31610 (propagated-inputs
31611 (list python-click))
31612 (synopsis "Extension for Click to register external CLI commands")
31613 (description
31614 "This package provides n extension module for Click to register external
31615CLI commands via setuptools entry-points.")
31616 (home-page "https://github.com/click-contrib/click-plugins")
31617 (license license:bsd-3)))
31618
31619;; XXX: Deprecated on <2026-03-23>.
31620(define-deprecated-package python-click-plugins-1 python-click-plugins)
31621
31622(define-public python-diceware
31623 (package
31624 (name "python-diceware")
31625 (version "1.0.1")
31626 (source
31627 (origin
31628 (method url-fetch)
31629 (uri (pypi-uri "diceware" version))
31630 (sha256
31631 (base32
31632 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31633 (build-system pyproject-build-system)
31634 (native-inputs
31635 (list python-pytest python-setuptools python-wheel))
31636 (home-page "https://github.com/ulif/diceware/")
31637 (synopsis "Generates memorable passphrases")
31638 (description "This package generates passphrases by concatenating words
31639randomly picked from wordlists. It supports several sources of
31640randomness (including real life dice) and different wordlists (including
31641cryptographically signed ones).")
31642 (license license:gpl3+)))
31643
31644(define-public python-dictdiffer
31645 (package
31646 (name "python-dictdiffer")
31647 (version "0.9.0")
31648 (source
31649 (origin
31650 (method git-fetch)
31651 (uri (git-reference
31652 (url "https://github.com/inveniosoftware/dictdiffer")
31653 (commit (string-append "v" version))))
31654 (file-name (git-file-name name version))
31655 (sha256
31656 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31657 (build-system pyproject-build-system)
31658 (arguments
31659 (list
31660 #:phases
31661 #~(modify-phases %standard-phases
31662 (add-after 'unpack 'relax-requirements
31663 (lambda _
31664 (delete-file "pytest.ini")
31665 (substitute* "setup.py"
31666 (("'pytest-runner.*',")
31667 "'pytest',")))))))
31668 (native-inputs
31669 (list python-pytest python-setuptools python-setuptools-scm))
31670 (home-page "https://github.com/inveniosoftware/dictdiffer")
31671 (synopsis "Diff and patch Python dictionary objects")
31672 (description
31673 "Dictdiffer is a Python module that helps you to diff and patch
31674dictionaries.")
31675 (license license:expat)))
31676
31677(define-public python-osc
31678 (package
31679 (name "python-osc")
31680 (version "1.9.3")
31681 (source
31682 (origin
31683 (method git-fetch)
31684 (uri (git-reference
31685 (url "https://github.com/attwad/python-osc")
31686 (commit (string-append "v" version))))
31687 (file-name (git-file-name name version))
31688 (sha256
31689 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31690 (build-system pyproject-build-system)
31691 (native-inputs (list python-setuptools))
31692 (home-page "https://github.com/attwad/python-osc")
31693 (synopsis "Open Sound Control server and client implementations")
31694 (description
31695 "@code{python-osc} is a pure Python library with no external
31696dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31697Open Sound Control 1.0} specification.")
31698 (license license:unlicense)))
31699
31700(define-public python-cmd2
31701 (package
31702 (name "python-cmd2")
31703 (version "2.5.11")
31704 (source
31705 (origin
31706 (method url-fetch)
31707 (uri (pypi-uri "cmd2" version))
31708 (sha256
31709 (base32
31710 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31711 (build-system pyproject-build-system)
31712 (arguments
31713 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31714and not test_transcript")))
31715 (propagated-inputs
31716 (list python-pyperclip python-wcwidth))
31717 (native-inputs
31718 (list python-pytest
31719 python-pytest-mock
31720 python-setuptools
31721 python-setuptools-scm
31722 python-wheel))
31723 (home-page "https://github.com/python-cmd2/cmd2")
31724 (synopsis "Tool for building interactive command line applications")
31725 (description
31726 "Cmd2 is a tool for building interactive command line applications in
31727Python. Its goal is to make it quick and easy for developers to build
31728feature-rich and user-friendly interactive command line applications. It
31729provides a simple API which is an extension of Python's built-in @code{cmd}
31730module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31731make your life easier and eliminates much of the boilerplate code which would
31732be necessary when using @code{cmd}.")
31733 (license license:expat)))
31734
31735(define-public python-pytidylib
31736 (package
31737 (name "python-pytidylib")
31738 (version "0.3.2")
31739 (source
31740 (origin
31741 (method git-fetch)
31742 (uri (git-reference
31743 (url "https://github.com/countergram/pytidylib")
31744 (commit version)))
31745 (file-name (git-file-name name version))
31746 (sha256
31747 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31748 (build-system pyproject-build-system)
31749 (arguments
31750 (list
31751 #:phases
31752 #~(modify-phases %standard-phases
31753 (add-after 'unpack 'fix-queue-import
31754 (lambda _
31755 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31756 (substitute* "tests/threadsafety.py"
31757 (("from Queue import Queue")
31758 "from queue import Queue"))))
31759 (add-before 'build 'qualify-libtidy
31760 (lambda* (#:key inputs #:allow-other-keys)
31761 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31762 (substitute* "tidylib/tidy.py"
31763 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31764 (format #f "'~a'" libtidy)))))))))
31765 (native-inputs (list python-pytest python-setuptools))
31766 (inputs (list tidy-html))
31767 (home-page "https://github.com/countergram/pytidylib")
31768 (synopsis "Python wrapper for HTML Tidy library")
31769 (description
31770 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31771allows you, from Python code, to “fix” invalid (X)HTML markup.")
31772 (license license:expat)))
31773
31774(define-public python-mujson
31775 (package
31776 (name "python-mujson")
31777 (version "1.4")
31778 (source
31779 (origin
31780 (method git-fetch)
31781 (uri (git-reference
31782 (url "https://github.com/mattgiles/mujson")
31783 (commit version)))
31784 (file-name (git-file-name name version))
31785 (sha256
31786 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31787 (build-system pyproject-build-system)
31788 (arguments (list #:tests? #f)) ;No tests.
31789 (native-inputs (list python-setuptools))
31790 (home-page "https://github.com/mattgiles/mujson")
31791 (synopsis "Use the fastest JSON functions available at import time")
31792 (description
31793 "This module selects the fastest JSON functions available at import time
31794in Python.")
31795 (license license:expat)))
31796
31797(define-public python-bashlex
31798 (package
31799 (name "python-bashlex")
31800 (version "0.18")
31801 (source
31802 (origin
31803 (method git-fetch)
31804 (uri (git-reference
31805 (url "https://github.com/idank/bashlex")
31806 (commit version)))
31807 (file-name (git-file-name name version))
31808 (sha256
31809 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31810 (build-system pyproject-build-system)
31811 (arguments
31812 (list
31813 #:phases
31814 #~(modify-phases %standard-phases
31815 (add-before 'build 'pregenerate-yacc-tables
31816 (lambda _
31817 ;; parser.py caches tables, which attempts to write to site lib
31818 ;; see https://github.com/idank/bashlex/issues/51
31819 (invoke "python" "-c" "import bashlex"))))))
31820 (native-inputs (list python-pytest python-setuptools))
31821 (home-page "https://github.com/idank/bashlex")
31822 (synopsis "Python parser for bash")
31823 (description
31824 "@code{bashlex} is a Python port of the parser used internally by GNU
31825bash.
31826
31827For the most part it's transliterated from C, the major differences are:
31828
31829@itemize
31830@item it does not execute anything
31831@item it is reentrant
31832@item it generates a complete AST
31833@end itemize
31834")
31835 (license license:gpl3+)))
31836
31837(define-public python-jinxed
31838 (package
31839 (name "python-jinxed")
31840 (version "1.3.0")
31841 (source
31842 (origin
31843 (method git-fetch)
31844 (uri (git-reference
31845 (url "https://github.com/Rockhopper-Technologies/jinxed")
31846 (commit version)))
31847 (file-name (git-file-name name version))
31848 (sha256
31849 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31850 (build-system pyproject-build-system)
31851 (arguments
31852 (list
31853 #:tests? #f ;_curses.error: setupterm: could not find terminal
31854 #:phases
31855 #~(modify-phases %standard-phases
31856 (add-before 'check 'set-environment-variables
31857 (lambda* (#:key inputs #:allow-other-keys)
31858 (setenv "TERM" "LINUX")
31859 (setenv "TERMINFO"
31860 (search-input-directory inputs "share/terminfo")))))))
31861 (native-inputs (list ncurses python-setuptools))
31862 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31863 (synopsis "Jinxed Terminal Library")
31864 (description
31865 "Jinxed is an implementation of a subset of the Python curses library.")
31866 (license license:mpl2.0)))
31867
31868(define-public python-blessed
31869 (package
31870 (name "python-blessed")
31871 (version "1.20.0")
31872 (source
31873 (origin
31874 (method url-fetch)
31875 (uri (pypi-uri "blessed" version))
31876 (sha256
31877 (base32
31878 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31879 (snippet
31880 ;; Don't get hung up on Windows test failures.
31881 '(delete-file "blessed/win_terminal.py"))))
31882 (build-system pyproject-build-system)
31883 (propagated-inputs (list python-six python-wcwidth))
31884 (native-inputs (list python-pytest python-setuptools python-wheel))
31885 (home-page "https://github.com/jquast/blessed")
31886 (synopsis "Wrapper around terminal capabilities")
31887 (description
31888 "Blessed is a thin, practical wrapper around terminal styling, screen
31889positioning, and keyboard input.")
31890 (license license:expat)))
31891
31892(define-public python-readme-renderer
31893 (package
31894 (name "python-readme-renderer")
31895 (version "45.0")
31896 (source
31897 (origin
31898 (method git-fetch)
31899 (uri (git-reference
31900 (url "https://github.com/pypa/readme_renderer")
31901 (commit version)))
31902 (file-name (git-file-name name version))
31903 (sha256
31904 (base32 "15ald40v4vv7sb2as8z7jggcwdy0nbx5m0icqv4ii9wriqrzf7kx"))))
31905 (build-system pyproject-build-system)
31906 (arguments
31907 (list
31908 ;; tests: 99 passed, 2 skipped, 1 deselected, 1 warning
31909 #:test-flags
31910 ;; Assertion error in one test.
31911 #~(list (string-append "--deselect=tests/test_markdown.py"
31912 "::test_md_fixtures[test_GFM_headings.md]"))))
31913 (propagated-inputs
31914 (list python-docutils
31915 python-nh3
31916 python-pygments
31917 ;; [optional]
31918 python-comrak))
31919 (native-inputs
31920 (list python-pytest
31921 python-setuptools))
31922 (home-page "https://github.com/pypa/readme_renderer")
31923 (synopsis "Render README files in Warehouse")
31924 (description
31925 "Readme Renderer is a library that will safely render arbitrary README
31926files into HTML. It is designed to be used in Warehouse to render the
31927@code{long_description} for packages. It can handle Markdown,
31928reStructuredText, and plain text.")
31929 (license license:asl2.0)))
31930
31931(define-public python-lazr-delegates
31932 (package
31933 (name "python-lazr-delegates")
31934 (version "2.1.1")
31935 (source
31936 (origin
31937 (method url-fetch)
31938 (uri (pypi-uri "lazr_delegates" version))
31939 (sha256
31940 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31941 (build-system pyproject-build-system)
31942 (arguments
31943 (list
31944 #:test-flags #~(list "-v" #$output)
31945 #:phases
31946 #~(modify-phases %standard-phases
31947 (add-after 'check 'check-cleanup
31948 (lambda* (#:key tests? #:allow-other-keys)
31949 (when tests?
31950 (for-each
31951 delete-file-recursively
31952 (find-files #$output
31953 (lambda (file stat)
31954 (or (member (basename file)
31955 '("tests" ".pytest_cache"))))
31956 #:directories? #t))))))))
31957 (native-inputs
31958 (list python-pytest python-setuptools python-wheel))
31959 (propagated-inputs
31960 (list python-zope-interface))
31961 (home-page "https://launchpad.net/lazr.delegates")
31962 (synopsis "Easily write objects that delegate behavior")
31963 (description
31964 "The @code{lazr.delegates} package makes it easy to write objects that
31965delegate behavior to another object. The new object adds some property or
31966behavior on to the other object, while still providing the underlying interface,
31967and delegating behavior.")
31968 (license license:lgpl3)))
31969
31970(define-public python-lazr-config
31971 (package
31972 (name "python-lazr-config")
31973 (version "3.1")
31974 (source
31975 (origin
31976 (method url-fetch)
31977 (uri (pypi-uri "lazr_config" version))
31978 (sha256
31979 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31980 (build-system pyproject-build-system)
31981 (arguments
31982 (list
31983 #:test-flags #~(list "-v" #$output)
31984 #:phases
31985 #~(modify-phases %standard-phases
31986 (add-after 'check 'check-cleanup
31987 (lambda* (#:key tests? #:allow-other-keys)
31988 (when tests?
31989 (for-each
31990 delete-file-recursively
31991 (find-files #$output
31992 (lambda (file stat)
31993 (or (member (basename file)
31994 '("tests" ".pytest_cache"))))
31995 #:directories? #t))))))))
31996 (native-inputs
31997 (list python-pytest python-setuptools python-wheel))
31998 (propagated-inputs
31999 (list python-lazr-delegates python-zope-interface))
32000 (home-page "https://launchpad.net/lazr.config")
32001 (synopsis "Create configuration schemas and process and validate configurations")
32002 (description
32003 "The LAZR config system is typically used to manage process configuration.
32004Process configuration is for saying how things change when we run systems on
32005different machines, or under different circumstances. This system uses ini-like
32006file format of section, keys, and values. The config file supports inheritance
32007to minimize duplication of information across files. The format supports schema
32008validation.")
32009 (license license:lgpl3)))
32010
32011(define-public python-flufl-bounce
32012 (package
32013 (name "python-flufl-bounce")
32014 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
32015 (revision . "0")))
32016 (version (git-version "4.0"
32017 (assoc-ref properties 'revision)
32018 (assoc-ref properties 'commit)))
32019 (source
32020 (origin
32021 (method git-fetch)
32022 (uri (git-reference
32023 (url "https://gitlab.com/flufl/flufl.bounce")
32024 (commit (assoc-ref properties 'commit))))
32025 (file-name (git-file-name name version))
32026 (sha256
32027 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
32028 (build-system pyproject-build-system)
32029 (arguments
32030 (list
32031 #:phases
32032 #~(modify-phases %standard-phases
32033 (replace 'check
32034 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
32035 (when tests?
32036 (with-directory-excursion
32037 (string-append (site-packages inputs outputs) "/flufl")
32038 (invoke "python" "-m" "nose2" "-v"))))))))
32039 (propagated-inputs
32040 (list python-atpublic python-zope-interface))
32041 (native-inputs
32042 (list python-flufl-testing python-nose2 python-setuptools))
32043 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
32044 (synopsis "Email bounce detectors")
32045 (description "The @code{flufl.bounce} library provides a set of heuristics
32046and an API for detecting the original bouncing email addresses from a bounce
32047message. Many formats found in the wild are supported, as are VERP and
32048RFC 3464.")
32049 (license (list license:asl2.0
32050 license:lgpl3)))) ; only for setup_headers.py
32051
32052(define-public python-flufl-i18n
32053 (package
32054 (name "python-flufl-i18n")
32055 (version "5.1.0")
32056 (source
32057 (origin
32058 (method url-fetch)
32059 (uri (pypi-uri "flufl_i18n" version))
32060 (sha256
32061 (base32
32062 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
32063 (build-system pyproject-build-system)
32064 (arguments
32065 (list #:test-flags
32066 #~(list "--no-cov" "--ignore-glob=docs/*")
32067 #:phases
32068 #~(modify-phases %standard-phases
32069 ;; This phase add a symlink of dist-info dir for packages
32070 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
32071 (add-after 'install 'add-custom-dist-info
32072 (lambda _
32073 (for-each
32074 (lambda (dir)
32075 (with-directory-excursion (dirname dir)
32076 (let ((base (basename dir)))
32077 (symlink base
32078 (string-join (string-split base #\_) ".")))))
32079 (find-files #$output
32080 (lambda (file stat)
32081 (string-suffix? ".dist-info" file))
32082 #:directories? #t)))))))
32083 (propagated-inputs
32084 (list python-atpublic))
32085 (native-inputs
32086 (list python-hatchling python-pytest python-sybil))
32087 (home-page "https://flufli18n.readthedocs.io")
32088 (synopsis "API for Python internationalization")
32089 (description
32090 "This package provides a high-level, convenient API for managing
32091internationalization/translation contexts in Python applications. There is a
32092simple API for single-context applications, such as command line scripts which
32093only need to translate into one language during the entire course of their
32094execution. There is a more flexible, but still convenient API for multi-context
32095applications, such as servers, which may need to switch language contexts for
32096different tasks.")
32097 (license license:asl2.0)))
32098
32099(define-public python-flufl-lock
32100 (package
32101 (name "python-flufl-lock")
32102 (version "8.1.0")
32103 (source
32104 (origin
32105 (method url-fetch)
32106 (uri (pypi-uri "flufl.lock" version))
32107 (sha256
32108 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
32109 (build-system pyproject-build-system)
32110 (arguments
32111 (list #:test-flags
32112 #~(list "--no-cov" "--ignore-glob=docs/*")
32113 #:phases
32114 #~(modify-phases %standard-phases
32115 ;; This phase add a symlink of dist-info dir for packages
32116 ;; expecting flufl.lock rather than flufl_lock (mailman).
32117 (add-after 'install 'add-custom-dist-info
32118 (lambda _
32119 (for-each
32120 (lambda (dir)
32121 (with-directory-excursion (dirname dir)
32122 (let ((base (basename dir)))
32123 (symlink base
32124 (string-join (string-split base #\_) ".")))))
32125 (find-files #$output
32126 (lambda (file stat)
32127 (string-suffix? ".dist-info" file))
32128 #:directories? #t)))))))
32129 (native-inputs
32130 (list python-hatchling python-pytest python-sybil))
32131 (propagated-inputs
32132 (list python-atpublic python-psutil))
32133 (home-page "https://flufllock.readthedocs.io")
32134 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
32135 (description
32136 "The @dfn{flufl.lock} package provides NFS-safe file locking with
32137timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
32138@code{open} system call but uses a lockfile. Lock objects support lock-breaking
32139and have a maximum lifetime built-in.")
32140 (license (list license:asl2.0
32141 license:lgpl3)))) ; only for setup_helpers.py
32142
32143(define-public python-flufl-testing
32144 (package
32145 (name "python-flufl-testing")
32146 (version "0.8")
32147 (source
32148 (origin
32149 (method git-fetch)
32150 (uri (git-reference
32151 (url "https://gitlab.com/warsaw/flufl.testing")
32152 (commit version)))
32153 (file-name (git-file-name name version))
32154 (sha256
32155 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
32156 (build-system pyproject-build-system)
32157 (arguments (list #:tests? #f)) ;no tests
32158 (native-inputs (list python-setuptools))
32159 (home-page "https://gitlab.com/warsaw/flufl.testing")
32160 (synopsis "Collection of test tool plugins")
32161 (description
32162 "This package contains a small collection of test tool plugins for
32163@code{nose2} and @code{flake8}.")
32164 (license license:asl2.0)))
32165
32166(define-public python-devtools
32167 (package
32168 (name "python-devtools")
32169 (version "0.12.2")
32170 (source
32171 (origin
32172 (method git-fetch)
32173 (uri (git-reference
32174 (url "https://github.com/samuelcolvin/python-devtools")
32175 (commit (string-append "v" version))))
32176 (file-name (git-file-name name version))
32177 (sha256
32178 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
32179 (build-system pyproject-build-system)
32180 (arguments
32181 (list
32182 #:test-flags
32183 ;; Disable some failing tests.
32184 ;;
32185 ;; test_print_subprocess seems to inherit wrong environment, fails with
32186 ;; E + ModuleNotFoundError: No module named 'executing'
32187 ;; Test runs fine from local clone.
32188 ;;
32189 ;; test_executing_failure fails with
32190 ;; E - [1, 2] (list) len=2
32191 ;; E + [x, y]: [1, 2] (list) len=2
32192 ;; unclear why, probably due to a dependency.
32193 '(list "-k" "not test_print_subprocess and not test_executing_failure"
32194 ;; test_insert_assert.py also seems to inherit a bad environment:
32195 ;; E fixture 'pytester_pretty' not found
32196 ;; Test runs fine from local clone.
32197 "--ignore=tests/test_insert_assert.py")))
32198 (native-inputs
32199 (list python-hatchling python-pytest python-pytest-mock))
32200 (propagated-inputs
32201 (list python-asttokens python-executing python-pygments))
32202 (home-page "https://github.com/samuelcolvin/python-devtools")
32203 (synopsis "Debug command and development tools")
32204 (description
32205 "This package provides a debug print command and other development tools.
32206It adds a simple and readable way to print stuff during development.")
32207 (license license:expat)))
32208
32209(define-public python-dateparser
32210 (package
32211 (name "python-dateparser")
32212 (version "1.2.2")
32213 (source
32214 (origin
32215 (method url-fetch)
32216 (uri (pypi-uri "dateparser" version))
32217 (sha256
32218 (base32
32219 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
32220 (build-system pyproject-build-system)
32221 (arguments
32222 (list
32223 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
32224 #:test-flags
32225 #~(list (string-join '("--deselect=tests/test_search.py"
32226 "TestTranslateSearch"
32227 "test_search_dates_with_prepositions")
32228 "::"))))
32229 (propagated-inputs
32230 (list python-dateutil
32231 python-pytz
32232 python-regex
32233 python-tzlocal))
32234 (native-inputs
32235 (list python-parameterized
32236 python-pytest
32237 python-setuptools
32238 tzdata-for-tests))
32239 (home-page "https://github.com/scrapinghub/dateparser")
32240 (synopsis
32241 "Date parsing library designed to parse dates from HTML pages")
32242 (description
32243 "@code{python-dateparser} provides modules to easily parse localized
32244dates in almost any string formats commonly found on web pages.")
32245 (license license:bsd-3)))
32246
32247(define-public python-dparse
32248 (package
32249 (name "python-dparse")
32250 (version "0.6.4")
32251 (source
32252 (origin
32253 (method url-fetch)
32254 (uri (pypi-uri "dparse" version))
32255 (sha256
32256 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
32257 (build-system pyproject-build-system)
32258 (native-inputs (list python-hatchling python-pytest))
32259 (propagated-inputs (list python-packaging python-toml))
32260 (home-page "https://github.com/pyupio/dparse")
32261 (synopsis "Parser for Python dependency files")
32262 (description "This package provides a parser for Python dependency files.")
32263 (license license:expat)))
32264
32265(define-public python-dpath
32266 (package
32267 (name "python-dpath")
32268 (version "2.2.0")
32269 (source
32270 (origin
32271 (method url-fetch)
32272 (uri (pypi-uri "dpath" version))
32273 (sha256
32274 (base32
32275 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
32276 (build-system pyproject-build-system)
32277 (native-inputs
32278 (list python-hypothesis python-nose2 python-setuptools python-wheel))
32279 (home-page "https://github.com/akesterson/dpath-python")
32280 (synopsis "File-system-like pathing and searching for dictionaries")
32281 (description
32282 "@code{python-dpath} is a library for accessing and searching
32283dictionaries via /slashed/paths ala xpath.
32284
32285Basically it lets you glob over a dictionary as if it were a file system. It
32286allows you to specify globs (ala the bash eglob syntax, through some advanced
32287fnmatch.fnmatch magic) to access dictionary elements, and provides some
32288facility for filtering those results.")
32289 (license license:expat)))
32290
32291(define-public python-safety
32292 (package
32293 (name "python-safety")
32294 (version "3.8.1")
32295 (source
32296 (origin
32297 (method git-fetch)
32298 (uri (git-reference
32299 (url "https://github.com/pyupio/safety")
32300 (commit version)))
32301 (file-name (git-file-name name version))
32302 (sha256
32303 (base32 "00i0jgv89kwbp130ykrfp2754k06agqs9sflsjpafcrf3jx7r9n4"))
32304 (patches
32305 (list
32306 (origin
32307 (method url-fetch)
32308 (uri (string-append
32309 "https://github.com/pyupio/safety/commit/"
32310 "145a3956007a01e57a8e05d111633c2309ad3374.patch"))
32311 (sha256
32312 (base32
32313 "00bsqhbvvpiycdz01vvxkp02i10rn3h5xaffib20h8yxnvx2xjbj")))))))
32314 (build-system pyproject-build-system)
32315 (arguments
32316 (list
32317 #:phases
32318 #~(modify-phases %standard-phases
32319 (add-after 'unpack 'disable-telemetry
32320 (lambda _
32321 (substitute* (find-files "." "\\.py$")
32322 (("telemetry: bool = True")
32323 "telemetry: bool = False")
32324 (("telemetry=True")
32325 "telemetry=False"))))
32326 (add-before 'check 'set-home ; some tests run mkdir
32327 (lambda _
32328 (setenv "HOME" "/tmp"))))))
32329 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32330 (propagated-inputs (list python-authlib
32331 python-certifi
32332 python-click
32333 python-dparse
32334 python-filelock
32335 python-httpx
32336 python-jinja2
32337 python-marshmallow
32338 python-nltk
32339 python-packaging
32340 python-pydantic
32341 python-safety-schemas
32342 python-tenacity
32343 python-tomli
32344 python-tomlkit
32345 python-truststore
32346 ;; XXX: python-safety subclasses click.Context
32347 ;; in a way that assumes Typer still delegates
32348 ;; to the standalone python-click package.
32349 python-typer-without-click
32350 python-typing-extensions))
32351 (home-page "https://github.com/pyupio/safety")
32352 (synopsis "Check installed dependencies for known vulnerabilities")
32353 (description
32354 "Safety checks installed dependencies for known vulnerabilities.
32355By default it uses the open Python vulnerability database Safety DB.")
32356 (license license:expat)))
32357
32358(define-public python-pypandoc
32359 (package
32360 (name "python-pypandoc")
32361 (version "1.15")
32362 (source
32363 (origin
32364 (method git-fetch)
32365 (uri (git-reference
32366 (url "https://github.com/JessicaTegner/pypandoc")
32367 (commit (string-append "v" version))))
32368 (file-name (git-file-name name version))
32369 (sha256
32370 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32371 (build-system pyproject-build-system)
32372 (arguments
32373 (list
32374 #:test-backend #~'unittest
32375 #:phases
32376 #~(modify-phases %standard-phases
32377 (add-before 'check 'disable-tests
32378 (lambda _
32379 (substitute* "tests.py"
32380 ;; Disable test requiring network access
32381 (("test_basic_conversion_from_http_url")
32382 "skip_test_basic_conversion_from_http_url")
32383 ;; Disable tests with missing files
32384 (("test_basic_conversion_from_file_pattern")
32385 "skip_test_basic_conversion_from_file_pattern")
32386 (("test_conversion_with_data_files")
32387 "skip_test_conversion_with_data_files")))))))
32388 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32389 ;; the missing etoolbox.sty file is added
32390 (native-inputs
32391 (list (texlive-local-tree
32392 (list texlive-etoolbox
32393 texlive-lm
32394 texlive-regexpatch
32395 texlive-xcolor))
32396 python-poetry-core
32397 python-setuptools))
32398 (inputs (list pandoc python-pandocfilters))
32399 (propagated-inputs (list python-wheel))
32400 (home-page "https://github.com/JessicaTegner/pypandoc")
32401 (synopsis "Python wrapper for pandoc")
32402 (description
32403 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32404 (license license:expat)))
32405
32406(define-public python-rnc2rng
32407 (package
32408 (name "python-rnc2rng")
32409 (version "2.7.0")
32410 (source
32411 (origin
32412 (method git-fetch)
32413 (uri (git-reference
32414 (url "https://github.com/djc/rnc2rng")
32415 (commit version)))
32416 (file-name (git-file-name name version))
32417 (sha256
32418 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32419 (build-system pyproject-build-system)
32420 (arguments
32421 (list
32422 #:test-backend #~'custom
32423 #:test-flags #~(list "test.py")))
32424 (native-inputs (list python-setuptools))
32425 (propagated-inputs (list python-rply))
32426 (home-page "https://github.com/djc/rnc2rng")
32427 (synopsis "Convert RELAX NG Compact to regular syntax")
32428 (description
32429 "This package provides the @command{rnc2rng} command-line tool as well as
32430a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32431equivalent schemata in the XML-based default RELAX NG syntax.")
32432 (license license:expat)))
32433
32434(define-public python-citeproc-py
32435 (package
32436 (name "python-citeproc-py")
32437 (version "0.9.0")
32438 (source
32439 (origin
32440 (method git-fetch)
32441 (uri (git-reference
32442 (url "https://github.com/brechtm/citeproc-py")
32443 (commit (string-append "v" version))
32444 (recursive? #t))) ; TODO Unbundle.
32445 (file-name (git-file-name name version))
32446 (sha256
32447 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32448 (build-system pyproject-build-system)
32449 (arguments
32450 (list
32451 #:phases
32452 #~(modify-phases %standard-phases
32453 (add-after 'unpack 'set-version
32454 (lambda _
32455 (delete-file "citeproc/_version.py")
32456 (substitute* "citeproc/__init__.py"
32457 (("from \\. import version")
32458 "")
32459 (("__version__ =.*")
32460 (format #f "__version__ = ~s" #$version))))))))
32461 (native-inputs (list python-pytest python-setuptools))
32462 (propagated-inputs (list python-lxml python-rnc2rng))
32463 (home-page "https://github.com/brechtm/citeproc-py")
32464 (synopsis "Citations and bibliography formatter")
32465 (description
32466 "Citeproc-py is a CSL processor for Python. It aims to implement the
32467CSL 1.0.1 specification. citeproc-py can output styled citations and
32468bibliographies in a number of different output formats. Currently supported
32469are plain text, reStructuredText and HTML.")
32470 (license license:bsd-2)))
32471
32472(define-public python-inform
32473 (package
32474 (name "python-inform")
32475 (version "1.34")
32476 (source
32477 (origin
32478 (method git-fetch) ; no tests in PyPI release
32479 (uri (git-reference
32480 (url "https://github.com/kenkundert/inform")
32481 (commit (string-append "v" version))))
32482 (file-name (git-file-name name version))
32483 (sha256
32484 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32485 (build-system pyproject-build-system)
32486 (arguments
32487 (list
32488 #:test-flags #~(list "-k" (string-append
32489 ;; Test below needs the num2words package
32490 "not test_plural_words"
32491 ;; These last two failed with AssertionError
32492 " and not test_inform"
32493 " and not test_manual"))))
32494 (native-inputs
32495 (list python-flit-core python-pytest))
32496 (propagated-inputs
32497 (list python-arrow))
32498 (home-page "https://inform.readthedocs.io")
32499 (synopsis "Print & logging utilities for communicating with user")
32500 (description
32501 "Inform is designed to display messages from programs that are typically run from
32502a console. It provides a collection of ‘print’ functions that allow you to simply and
32503cleanly print different types of messages.")
32504 (license license:gpl3+)))
32505
32506(define-public python-nestedtext
32507 (package
32508 (name "python-nestedtext")
32509 (version "3.7")
32510 (source
32511 (origin
32512 (method git-fetch) ; no tests in PyPI release
32513 (uri (git-reference
32514 (url "https://github.com/KenKundert/nestedtext")
32515 (commit (string-append "v" version))))
32516 (file-name (git-file-name name version))
32517 (sha256
32518 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32519 (build-system pyproject-build-system)
32520 (arguments
32521 (list
32522 ;; XXX: Tests below need some not yet packaged Python libraries.
32523 #:test-flags #~(list "--ignore" "examples/"
32524 "--ignore" "tests/test_nestedtext.py"
32525 "-k" (string-append
32526 "not techniques.rst"
32527 " and not nestedtext.nestedtext.dumps"))))
32528 (native-inputs (list python-flit-core python-pytest))
32529 (propagated-inputs
32530 (list python-inform))
32531 (home-page "https://nestedtext.org")
32532 (synopsis "Human readable and writable data interchange format")
32533 (description
32534 "NestedText is a file format for holding data that is to be entered, edited, or
32535viewed by people. It allows data to be organized into a nested collection of
32536dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32537without the complexity and risk of YAML and without the syntactic clutter of JSON.
32538NestedText is both simple and natural. Only a small number of concepts and rules must
32539be kept in mind when creating it. It is easily created, modified, or viewed with
32540a text editor and easily understood and used by both programmers and non-programmers.")
32541 (license license:expat))) ; MIT license
32542
32543(define-public python-nest-asyncio
32544 (package
32545 (name "python-nest-asyncio")
32546 (version "1.6.0")
32547 (source
32548 (origin
32549 (method url-fetch)
32550 (uri (pypi-uri "nest_asyncio" version))
32551 (sha256
32552 (base32
32553 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32554 (build-system pyproject-build-system)
32555 (native-inputs
32556 (list python-pytest python-setuptools))
32557 (home-page "https://github.com/erdewit/nest_asyncio")
32558 (synopsis "Patch asyncio to allow nested event loops")
32559 (description
32560 "By design @code{asyncio} does not allow its event loop to be nested.
32561This presents a practical problem: when in an environment where the event loop
32562is already running it's impossible to run tasks and wait for the result. This
32563module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32564@code{loop.run_until_complete}.")
32565 (license license:bsd-3)))
32566
32567(define-public python-simpervisor
32568 (package
32569 (name "python-simpervisor")
32570 (version "1.0.0")
32571 (source
32572 (origin
32573 ;; Tests not included in release.
32574 (method git-fetch)
32575 (uri (git-reference
32576 (url "https://github.com/yuvipanda/simpervisor")
32577 (commit (string-append "v" version))))
32578 (file-name (git-file-name name version))
32579 (sha256
32580 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32581 (build-system pyproject-build-system)
32582 (arguments
32583 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32584 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32585 (native-inputs
32586 (list python-aiohttp
32587 python-hatchling
32588 python-psutil
32589 python-pytest
32590 python-pytest-asyncio))
32591 (home-page "https://github.com/yuvipanda/simpervisor")
32592 (synopsis "Simple async process supervisor")
32593 (description
32594 "This package provides a simple async process supervisor in Python.")
32595 (license license:bsd-3)))
32596
32597(define-public python-parallel
32598 (package
32599 (name "python-parallel")
32600 (version "1.6.4.4")
32601 (source
32602 (origin
32603 (method url-fetch)
32604 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32605 version ".zip"))
32606 (sha256
32607 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32608 (build-system pyproject-build-system)
32609 (arguments (list #:tests? #f)) ;No test suite.
32610 (native-inputs (list python-setuptools unzip))
32611 (propagated-inputs (list python-six))
32612 (home-page "https://www.parallelpython.com")
32613 (synopsis "Parallel and distributed programming for Python")
32614 (description
32615 "Parallel Python module (PP) provides an easy and efficient way to create
32616parallel-enabled applications for SMP computers and clusters. PP module
32617features cross-platform portability and dynamic load balancing. Thus
32618applications written with PP will parallelize efficiently even on
32619heterogeneous and multi-platform clusters (including clusters running other
32620applications with variable CPU loads).")
32621 (license license:bsd-3)))
32622
32623(define-public python-param
32624 (package
32625 (name "python-param")
32626 (version "2.3.3")
32627 (source
32628 (origin
32629 (method git-fetch)
32630 (uri (git-reference
32631 (url "https://github.com/holoviz/param")
32632 (commit (string-append "v" version))))
32633 (file-name (git-file-name name version))
32634 (sha256
32635 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32636 (build-system pyproject-build-system)
32637 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32638 (native-inputs
32639 ;; Project does not require any dependencies, all of the listed
32640 ;; native-inputs are for build/test only.
32641 (list python-cloudpickle
32642 python-hatch-vcs
32643 python-hatchling
32644 python-ipython-minimal
32645 python-jsonschema
32646 python-nbval
32647 python-nest-asyncio
32648 python-numpy
32649 python-odfpy
32650 python-openpyxl
32651 python-pandas
32652 python-pyarrow
32653 python-pytest
32654 python-pytest-asyncio
32655 python-tables
32656 python-xlrd))
32657 (home-page "https://param.holoviz.org/")
32658 (synopsis
32659 "Make your Python code clearer and more reliable by declaring Parameters")
32660 (description
32661 "Param is a library for handling all the user-modifiable parameters,
32662arguments, and attributes that control your code. It provides automatic,
32663robust error-checking while dramatically reducing boilerplate code, letting
32664you focus on what you want your code to do rather than on checking for all the
32665possible ways users could supply inappropriate values to a function or
32666class.")
32667 (license license:bsd-3)))
32668
32669(define-public python-djitellopy
32670 (package
32671 (name "python-djitellopy")
32672 (version "2.5.0")
32673 (source
32674 (origin
32675 (method url-fetch)
32676 (uri (pypi-uri "djitellopy" version))
32677 (sha256
32678 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32679 (build-system pyproject-build-system)
32680 (arguments
32681 (list
32682 #:tests? #f ;no test suite
32683 #:phases
32684 #~(modify-phases %standard-phases
32685 ;; OpenCV does not ship metadata files for its Python library, which
32686 ;; makes it invisible to the sanity_check script (see:
32687 ;; https://github.com/opencv/opencv/issues/24810).
32688 (delete 'sanity-check))))
32689 (propagated-inputs
32690 (list opencv ;for opencv-python
32691 python-av
32692 python-numpy
32693 python-pillow))
32694 (native-inputs (list python-setuptools python-wheel))
32695 (home-page "https://github.com/damiafuentes/DJITelloPy")
32696 (synopsis
32697 "DJI Tello drone video streaming, swarms and state packets library")
32698 (description
32699 "DJI Tello drone Python interface using the official Tello SDK and Tello
32700EDU SDK. This library has the following features:
32701@itemize
32702@item Implementation of all tello commands
32703@item Retrieve a video stream easily
32704@item Receive and parse state packets
32705@item Control a swarm of drones.
32706@end itemize")
32707 (license license:expat)))
32708
32709(define-public python-djvulibre
32710 ;; The original git repository of python-djvulibre is hosted at
32711 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32712 ;; has been archived by its owner in 2022. The most active fork is
32713 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32714 ;; version packaged here (its "python3" branch, the default).
32715 ;;
32716 ;; However, the python-djvulibre PyPI project still refers to the old
32717 ;; repository. The new repository is published as djvulibre-python on PyPI;
32718 ;; that is, with the name in reversed order.The original package name is
32719 ;; used in Guix because it best adheres to the Guix naming scheme.
32720 (package
32721 (name "python-djvulibre")
32722 (version "0.9.3")
32723 (source
32724 (origin
32725 (method git-fetch)
32726 (uri (git-reference
32727 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32728 (commit version)))
32729 (file-name (git-file-name name version))
32730 (sha256
32731 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32732 (build-system pyproject-build-system)
32733 (arguments
32734 (list
32735 #:phases
32736 #~(modify-phases %standard-phases
32737 (replace 'check
32738 (lambda* (#:key tests? #:allow-other-keys)
32739 (when tests?
32740 ;; The tests get confused by the djvu directory.
32741 (delete-file-recursively "djvu")
32742 ;; Tests can't find tools.py otherwise.
32743 (with-directory-excursion "tests"
32744 (invoke "python" "-m" "pytest"))))))))
32745 (native-inputs
32746 (list ghostscript
32747 pkg-config
32748 python-cython
32749 python-pytest
32750 python-setuptools))
32751 (inputs
32752 (list djvulibre))
32753 (synopsis "Python bindings for DjVuLibre")
32754 (description "This is a set of Python bindings for the DjVuLibre library.")
32755 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32756 (license license:gpl2)))
32757
32758(define-public python-gamera
32759 (package
32760 (name "python-gamera")
32761 (version "4.1.0")
32762 (source
32763 (origin
32764 (method git-fetch)
32765 (uri (git-reference
32766 (url "https://github.com/hsnr-gamera/gamera-4")
32767 (commit (string-append "v" version))))
32768 (file-name (git-file-name name version))
32769 (sha256
32770 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32771 (build-system pyproject-build-system)
32772 (arguments
32773 (list
32774 #:phases
32775 #~(modify-phases %standard-phases
32776 (add-after 'unpack 'fix-build
32777 (lambda _
32778 ;; The script to make daily build artifacts fails to compile,
32779 ;; but users don't need that, so ignore it.
32780 (delete-file "misc/daily_build.py")
32781 ;; Prepare tests
32782 (mkdir-p "tmp")
32783 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32784 (native-inputs (list python-docutils python-pytest python-setuptools))
32785 (inputs (list libpng libtiff zlib))
32786 (synopsis "Framework for building document analysis applications")
32787 (description
32788 "Gamera is a toolkit for building document image recognition systems.")
32789 (home-page "https://gamera.informatik.hsnr.de/")
32790 (license license:gpl2+)))
32791
32792(define-public python-aiofiles
32793 (package
32794 (name "python-aiofiles")
32795 (version "24.1.0")
32796 (source
32797 (origin
32798 (method url-fetch)
32799 (uri (pypi-uri "aiofiles" version))
32800 (sha256
32801 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32802 (build-system pyproject-build-system)
32803 (native-inputs
32804 (list python-hatch-vcs
32805 python-hatchling
32806 python-pytest
32807 python-pytest-asyncio))
32808 (home-page "https://github.com/Tinche/aiofiles")
32809 (synopsis "File support for @code{asyncio}")
32810 (description
32811 "@code{python-aiofiles} is a library for handling local disk files in
32812asyncio applications.")
32813 (license license:asl2.0)))
32814
32815(define-public python-pyre-extensions
32816 (package
32817 (name "python-pyre-extensions")
32818 (version "0.0.32")
32819 (source
32820 (origin
32821 (method url-fetch)
32822 (uri (pypi-uri "pyre_extensions" version))
32823 (sha256
32824 (base32
32825 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32826 (build-system pyproject-build-system)
32827 (native-inputs (list python-pytest python-setuptools python-wheel))
32828 (propagated-inputs
32829 (list python-typing-extensions python-typing-inspect))
32830 (home-page "https://pyre-check.org")
32831 (synopsis
32832 "Type system extensions for use with @code{python-pyre}")
32833 (description
32834 "@code{python-pyre-extensions} defines extensions to the standard
32835@code{typing} module that are supported by the Pyre typechecker.")
32836 (license license:expat)))
32837
32838(define-public python-pywatchman
32839 (package
32840 (name "python-pywatchman")
32841 (version "3.0.0")
32842 (source
32843 (origin
32844 (method url-fetch)
32845 (uri (pypi-uri "pywatchman" version))
32846 (sha256
32847 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32848 (build-system pyproject-build-system)
32849 (arguments
32850 (list
32851 #:test-backend #~'custom
32852 #:test-flags #~(list "tests/tests.py")))
32853 (native-inputs (list python-setuptools))
32854 (home-page "https://facebook.github.io/watchman/")
32855 (synopsis "Watchman client for python")
32856 (description
32857 "@code{python-pywatchman} is a library to connect and query Watchman to
32858discover file changes.")
32859 (license license:bsd-3)))
32860
32861(define-public python-roundrobin
32862 (package
32863 (name "python-roundrobin")
32864 (version "0.0.4")
32865 (source
32866 (origin
32867 (method git-fetch)
32868 (uri (git-reference
32869 (url "https://github.com/linnik/roundrobin")
32870 (commit version)))
32871 (file-name (git-file-name name version))
32872 (sha256
32873 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32874 (build-system pyproject-build-system)
32875 (arguments
32876 (list #:test-backend #~'unittest))
32877 (native-inputs (list python-setuptools))
32878 (home-page "https://github.com/linnik/roundrobin")
32879 (synopsis "Collection of roundrobin utilities")
32880 (description
32881 "This package provides a collection of utilities for round-robin
32882distribution in Python.")
32883 (license license:expat)))
32884
32885(define-public python-helpdev
32886 (package
32887 (name "python-helpdev")
32888 (version "0.7.1")
32889 (source
32890 (origin
32891 (method git-fetch)
32892 (uri (git-reference
32893 (url "https://gitlab.com/dpizetta/helpdev")
32894 (commit (string-append "v" version))))
32895 (file-name (git-file-name name version))
32896 (sha256
32897 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32898 (build-system pyproject-build-system)
32899 (native-inputs (list python-pip python-pytest python-setuptools))
32900 (home-page "https://gitlab.com/dpizetta/helpdev")
32901 (synopsis "Extract information about the Python environment easily")
32902 (description
32903 "Helpdev is a library to easily extract information about the Python
32904environment.")
32905 (license license:expat)))
32906
32907(define-public python-loguru
32908 (package
32909 (name "python-loguru")
32910 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32911 ;; covert to git tag when released.
32912 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32913 (revision . "0")))
32914 (version (git-version "0.7.3"
32915 (assoc-ref properties 'revision)
32916 (assoc-ref properties 'commit)))
32917 (source
32918 (origin
32919 (method git-fetch)
32920 (uri (git-reference
32921 (url "https://github.com/Delgan/loguru")
32922 (commit (assoc-ref properties 'commit))))
32923 (file-name (git-file-name name version))
32924 (sha256
32925 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32926 (build-system pyproject-build-system)
32927 ;; tests: x86_64-linux 1598 passed, 28 skipped
32928 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32929 (arguments
32930 (list
32931 #:test-flags
32932 #~(list #$@(if (target-64bit?)
32933 '()
32934 ;; OverflowError
32935 '("--deselect=tests/test_datetime.py::test_formatting"
32936 (string-append "--deselect=tests/test_datetime.py"
32937 "::test_value_of_gmtoff_is_invalid"))))))
32938 (native-inputs
32939 (list python-flit-core
32940 python-freezegun
32941 python-mypy-for-tests
32942 python-pytest
32943 python-setuptools
32944 tzdata-for-tests))
32945 (propagated-inputs
32946 (list python-colorama))
32947 (home-page "https://github.com/Delgan/loguru")
32948 (synopsis "Python logging made (stupidly) simple")
32949 (description "Python logging made (stupidly) simple.")
32950 (license license:expat)))
32951
32952(define-public python-qtsass
32953 (package
32954 (name "python-qtsass")
32955 (version "0.4.0")
32956 (source
32957 (origin
32958 ;; There are no tests in the PyPI tarball.
32959 (method git-fetch)
32960 (uri (git-reference
32961 (url "https://github.com/spyder-ide/qtsass/")
32962 (commit (string-append "v" version))))
32963 (file-name (git-file-name name version))
32964 (sha256
32965 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32966 (build-system pyproject-build-system)
32967 (native-inputs
32968 (list python-flaky python-pytest python-setuptools python-wheel))
32969 (propagated-inputs
32970 (list python-libsass))
32971 (home-page "https://github.com/spyder-ide/qtsass")
32972 (synopsis "Compile SCSS files to valid Qt stylesheets")
32973 (description
32974 "Besides being used in web development, CSS is also the way to stylize
32975Qt-based desktop applications. However, Qt's CSS has a few variations that
32976prevent the direct use of SASS compiler.
32977
32978The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32979handling those variations.")
32980 (license license:expat)))
32981
32982(define-public python-qdarkstyle
32983 (package
32984 (name "python-qdarkstyle")
32985 (version "3.2.3")
32986 (source
32987 (origin
32988 (method url-fetch)
32989 (uri (pypi-uri "QDarkStyle" version))
32990 (sha256
32991 (base32
32992 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32993 (build-system pyproject-build-system)
32994 (native-inputs (list python-pytest
32995 python-qtsass
32996 python-setuptools
32997 python-watchdog
32998 python-wheel))
32999 (propagated-inputs
33000 (list python-qtpy python-pyqt-6))
33001 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
33002 (synopsis
33003 "Complete dark stylesheet for Python and Qt applications")
33004 (description "QDarkStyle is the most complete dark stylesheet for Python and
33005Qt applications.")
33006 (license license:expat)))
33007
33008(define-public python-pystray
33009 (package
33010 (name "python-pystray")
33011 (version "0.19.5")
33012 (source
33013 (origin
33014 (method git-fetch)
33015 (uri (git-reference
33016 (url "https://github.com/moses-palmer/pystray")
33017 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
33018 (file-name (git-file-name name version))
33019 (sha256
33020 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
33021 (build-system pyproject-build-system)
33022 (arguments
33023 (list
33024 ;; The test suite requires user interaction, there are no automated
33025 ;; tests.
33026 #:tests? #false
33027 #:phases #~(modify-phases %standard-phases
33028 (add-before 'sanity-check 'use-dummy-backend
33029 (lambda _
33030 ;; Without setting this, pystray tries to connect to
33031 ;; X11 on import.
33032 (setenv "PYSTRAY_BACKEND" "dummy"))))))
33033 (native-inputs (list python-sphinx python-setuptools))
33034 (propagated-inputs (list python-pillow python-six python-xlib))
33035 (home-page "https://github.com/moses-palmer/pystray")
33036 (synopsis "Create a system tray icon")
33037 (description "This library allows you to create a system tray icon.
33038It makes it possible to specify an icon, a title and a callback for when
33039the icon is activated. The icon and title can be changed after the icon
33040has been created, and the visibility of the icon can be toggled.")
33041 (license license:lgpl3+)))
33042
33043(define-public python-bitstring
33044 (package
33045 (name "python-bitstring")
33046 (version "4.3.1")
33047 (source
33048 (origin
33049 (method url-fetch)
33050 (uri (pypi-uri "bitstring" version))
33051 (sha256
33052 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
33053 (build-system pyproject-build-system)
33054 (arguments
33055 (list
33056 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
33057 "--ignore=tests/test_fp8.py"
33058 "--ignore=tests/test_mxfp.py")))
33059 (native-inputs
33060 (list python-gfloat python-pytest python-setuptools python-wheel))
33061 (propagated-inputs
33062 (list python-bitarray))
33063 (home-page "https://github.com/scott-griffiths/bitstring")
33064 (synopsis
33065 "Simple construction, analysis and modification of binary data")
33066 (description
33067 "Bitstring is a library for simple construction, analysis and modification
33068 of binary data.")
33069 (license license:expat)))
33070
33071(define-public python-confuse
33072 (package
33073 (name "python-confuse")
33074 (version "2.0.1")
33075 (source
33076 (origin
33077 (method url-fetch)
33078 (uri (pypi-uri "confuse" version))
33079 (sha256
33080 (base32
33081 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
33082 (build-system pyproject-build-system)
33083 (native-inputs (list python-flit-core python-pytest))
33084 (propagated-inputs (list python-pyyaml))
33085 (home-page "https://github.com/beetbox/confuse")
33086 (synopsis "Painless YAML configuration")
33087 (description "Confuse is a configuration library for Python that uses
33088YAML. It takes care of defaults, overrides, type checking, command-line
33089integration, human-readable errors, and standard OS-specific locations.")
33090 (license license:expat)))
33091
33092(define-public python-referencing
33093 (package
33094 (name "python-referencing")
33095 (version "0.37.0")
33096 (source
33097 (origin
33098 (method git-fetch)
33099 (uri (git-reference
33100 (url "https://github.com/python-jsonschema/referencing")
33101 (commit (string-append "v" version))))
33102 (file-name (git-file-name name version))
33103 (sha256
33104 (base32 "1h9mlzpgqy3grby4f57qxhlmxy25qvz84g9w5r4g1d8g5qsvvv3j"))))
33105 (build-system pyproject-build-system)
33106 (arguments
33107 (list
33108 #:phases
33109 #~(modify-phases %standard-phases
33110 (add-before 'check 'pre-check
33111 (lambda _
33112 (setenv "REFERENCING_SUITE"
33113 (string-append #$(this-package-native-input
33114 "specification-referencing-suite")
33115 "/share")))))))
33116 (native-inputs
33117 (list python-hatchling
33118 python-hatch-vcs
33119 python-pytest
33120 specification-referencing-suite))
33121 (propagated-inputs
33122 (list python-attrs
33123 python-rpds-py
33124 python-typing-extensions)) ;Python version < 3.13
33125 (home-page "https://github.com/python-jsonschema/referencing")
33126 (synopsis "JSON Referencing + Python")
33127 (description "This package provides an implementation-agnostic
33128implementation of JSON reference resolution.")
33129 (license license:expat)))
33130
33131(define-public python-referencing-bootstrap
33132 (package
33133 (inherit python-referencing)
33134 (name "python-referencing-bootstrap")
33135 (arguments
33136 (list
33137 #:tests? #false
33138 #:phases
33139 '(modify-phases %standard-phases
33140 (add-after 'unpack 'patch-pyproject
33141 (lambda _
33142 ;; The build system does not like this.
33143 (substitute* "pyproject.toml"
33144 ((" \"Topic :: File Formats.*") "")))))))
33145 (native-inputs (list python-hatchling python-hatch-vcs))))
33146
33147(define-public python-reflink
33148 (package
33149 (name "python-reflink")
33150 (version "0.2.2")
33151 (source
33152 (origin
33153 (method git-fetch)
33154 (uri (git-reference
33155 (url "https://gitlab.com/rubdos/pyreflink")
33156 (commit version)))
33157 (file-name (git-file-name name version))
33158 (sha256
33159 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
33160 (build-system pyproject-build-system)
33161 (arguments
33162 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
33163 (propagated-inputs (list python-cffi))
33164 (native-inputs (list python-pytest python-setuptools))
33165 (home-page "https://gitlab.com/rubdos/pyreflink")
33166 (synopsis "Python wrapper around reflink system call")
33167 (description
33168 "Python reflink wraps around platform specific @code{reflink}
33169implementations.")
33170 (license license:expat)))
33171
33172(define-public python-retry
33173 ;; XXX: The project is abandoned upstream for 11y, remove when python-locust
33174 ;; drops it or we can find a way to avoid it.
33175 (package
33176 (name "python-retry")
33177 (version "0.9.2")
33178 (source
33179 (origin
33180 (method git-fetch)
33181 (uri (git-reference
33182 (url "https://github.com/invl/retry")
33183 (commit version)))
33184 (file-name (git-file-name name version))
33185 (sha256
33186 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
33187 (build-system pyproject-build-system)
33188 (arguments
33189 (list
33190 #:phases
33191 #~(modify-phases %standard-phases
33192 (add-after 'unpack 'relax-requirements
33193 (lambda _
33194 (substitute* "requirements.txt"
33195 (("py>=1.4.26,<2.0.0")
33196 "")))))))
33197 (native-inputs (list python-pbr python-pytest))
33198 (propagated-inputs (list python-decorator))
33199 (home-page "https://github.com/invl/retry")
33200 (synopsis "Retry decorator")
33201 (description
33202 "@code{retry} is an easy to use retry decorator for Python. It can be
33203used to retry a function a given number of times.")
33204 (license license:asl2.0)))
33205
33206(define-public python-crayons
33207 (package
33208 (name "python-crayons")
33209 (version "0.4.0")
33210 (source
33211 (origin
33212 (method git-fetch)
33213 (uri (git-reference
33214 (url "https://github.com/MasterOdin/crayons")
33215 (commit (string-append "v" version))))
33216 (file-name (git-file-name name version))
33217 (sha256
33218 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
33219 (build-system pyproject-build-system)
33220 (arguments
33221 (list
33222 #:test-backend #~'custom
33223 #:test-flags #~(list "test_crayons.py")))
33224 (native-inputs (list python-setuptools))
33225 (propagated-inputs (list python-colorama))
33226 (home-page "https://github.com/MasterOdin/crayons")
33227 (synopsis "TextUI colors for Python")
33228 (description
33229 "This package gives you colored strings for the terminal. Crayons
33230automatically wraps a given string in the foreground color and restores the
33231original state after the string is printed.")
33232 (license license:expat)))
33233
33234(define-public python-sane
33235 (package
33236 (name "python-sane")
33237 (version "2.9.2")
33238 (source
33239 (origin
33240 (method git-fetch)
33241 (uri (git-reference
33242 (url "https://github.com/python-pillow/Sane")
33243 (commit (string-append "v" version))))
33244 (file-name (git-file-name name version))
33245 (sha256
33246 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
33247 (build-system pyproject-build-system)
33248 (arguments (list #:tests? #f)) ; No tests.
33249 (native-inputs (list python-setuptools))
33250 (inputs (list sane))
33251 (home-page "https://github.com/python-pillow/Sane")
33252 (synopsis "Python interface to the SANE scanner")
33253 (description
33254 "This package provides Python interface to the SANE scanner and frame
33255grabber interface.")
33256 (license (license:non-copyleft
33257 ;; Yet another variant of the X/MIT license.
33258 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
33259
33260(define-public python-scikit-build
33261 (package
33262 (name "python-scikit-build")
33263 (version "0.18.1")
33264 (source
33265 (origin
33266 (method url-fetch)
33267 (uri (pypi-uri "scikit_build" version))
33268 (sha256
33269 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
33270 (patches
33271 (search-patches "python-scikit-build-setuptools-compat.patch"))))
33272 (build-system pyproject-build-system)
33273 (arguments
33274 (list
33275 #:phases
33276 #~(modify-phases %standard-phases
33277 (add-after 'unpack 'patch-cmake-executable
33278 (lambda* (#:key inputs #:allow-other-keys)
33279 (substitute* "skbuild/constants.py"
33280 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
33281 (format #f "~a ~s~%" head
33282 (search-input-file inputs "bin/cmake"))))))
33283 (add-before 'check 'pre-check
33284 (lambda _
33285 ;; Some tests try to access the network before being skipped.
33286 ;; Skip them by default.
33287 (substitute* "tests/test_setup.py"
33288 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
33289 "pytest.mark.isolated()\n"))))
33290 (replace 'check
33291 (lambda* (#:key tests? #:allow-other-keys)
33292 (when tests?
33293 ;; These tests attempt to pull dependencies from the Internet.
33294 (delete-file "tests/test_distribution.py")
33295 (delete-file "tests/test_pep518.py")
33296 ;; The tests marked as "isolate" are tests that require access
33297 ;; to the network.
33298 (invoke "pytest" "-vv" "-m" "not isolated"
33299 "-n" (number->string (parallel-job-count))
33300 "-k" (string-append
33301 ;; These tests attempt to write to read-only
33302 ;; Python install directory.
33303 "not test_install_command "
33304 "and not test_test_command "
33305 "and not test_hello_develop "
33306 ;; These sdist-related tests fail for unknown
33307 ;; reasons (see:
33308 ;; https://github.com/scikit-build/scikit-build/issues/689).
33309 "and not test_hello_sdist_with_base "
33310 "and not test_manifest_in_sdist "
33311 "and not test_hello_sdist "
33312 "and not test_sdist_with_symlinks "
33313 ;; These are not parallel safe and fail
33314 ;; nondeterministically (see:
33315 ;; https://github.com/scikit-build/scikit-build/issues/711).
33316 "and not test_generator_cleanup "
33317 "and not test_generator_selection "
33318 ;; … and there's more of them
33319 "and not test_cxx_compiler "
33320 "and not test_fortran_compiler ")))))
33321 (add-after 'install 'install-cmake
33322 (lambda* (#:key outputs #:allow-other-keys)
33323 (let ((lib (string-append (assoc-ref outputs "out")
33324 "/lib/cmake/modules")))
33325 (mkdir-p lib)
33326 (with-directory-excursion "skbuild/resources/cmake"
33327 (for-each (lambda (file) (install-file file lib))
33328 (find-files "." "\\.cmake")))))))))
33329 (native-inputs
33330 (list cmake-minimal
33331 gfortran
33332 git-minimal/pinned ;for tests
33333 ninja/pinned
33334 python-cython
33335 python-hatch-fancy-pypi-readme
33336 python-hatch-vcs
33337 python-hatchling
33338 python-pytest
33339 python-pytest-mock
33340 python-pytest-xdist
33341 python-requests
33342 python-virtualenv))
33343 (propagated-inputs
33344 (list python-distro
33345 python-packaging
33346 python-wheel))
33347 (home-page "https://github.com/scikit-build/scikit-build")
33348 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33349 (description "Scikit-build is an improved build system generator for
33350CPython C/C++/Fortran/Cython extensions. It has support for additional
33351compilers, build systems, cross compilation, and locating dependencies and
33352determining their build requirements. The scikit-build package is
33353fundamentally just glue between the @code{setuptools} Python module and
33354CMake.")
33355 (license license:expat)))
33356
33357(define-public python-screeninfo
33358 (package
33359 (name "python-screeninfo")
33360 (version "0.8.1")
33361 (source
33362 (origin
33363 (method git-fetch)
33364 (uri (git-reference
33365 (url "https://github.com/rr-/screeninfo")
33366 (commit version)))
33367 (file-name (git-file-name name version))
33368 (sha256
33369 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33370 (build-system pyproject-build-system)
33371 (native-inputs
33372 (list libdrm
33373 python-poetry-core
33374 python-pytest))
33375 (home-page "https://github.com/rr-/screeninfo")
33376 (synopsis "Fetch location and size of physical screens")
33377 (description
33378 "Fetch location and size of physical screens. GNU/Linux has support on
33379following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33380 (license license:expat)))
33381
33382;; Deprecated on <2026-07-23>.
33383(define-deprecated/public-alias python-screenkey
33384 (@ (gnu packages video) python-screenkey))
33385
33386(define-public python-jinja2-cli
33387 (package
33388 (name "python-jinja2-cli")
33389 (version "0.8.2")
33390 (source
33391 (origin
33392 (method git-fetch)
33393 (uri (git-reference
33394 (url "https://github.com/mattrobenolt/jinja2-cli")
33395 (commit version)))
33396 (file-name (git-file-name name version))
33397 (sha256
33398 (base32
33399 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33400 (build-system pyproject-build-system)
33401 (propagated-inputs
33402 (list python-jinja2))
33403 (native-inputs
33404 (list python-jinja2
33405 python-pytest
33406 python-setuptools
33407 python-wheel))
33408 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33409 (synopsis "Command-line interface to Jinja2")
33410 (description
33411 "This package provides a command-line interface (CLI) to the Jinja2
33412template engine.")
33413 (license license:bsd-3)))
33414
33415(define-public python-readability
33416 (package
33417 (name "python-readability")
33418 (version "0.3.1")
33419 (source
33420 (origin
33421 (method git-fetch)
33422 (uri (git-reference
33423 (url "https://github.com/andreasvc/readability/")
33424 (commit (string-append "v" version))))
33425 (file-name (git-file-name name version))
33426 (sha256
33427 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33428 (build-system pyproject-build-system)
33429 (arguments (list #:tests? #f)) ; No tests.
33430 (native-inputs (list python-setuptools))
33431 (home-page "https://github.com/andreasvc/readability/")
33432 (synopsis "Measure text readability using surface characteristics")
33433 (description
33434 "This package provides a Python library that is an implementation of
33435traditional readability measures based on simple surface characteristics.
33436These measures are basically linear regressions based on the number of words,
33437syllables, and sentences.")
33438 (license license:asl2.0)))
33439
33440(define-public python-readability-lxml
33441 (package
33442 (name "python-readability-lxml")
33443 (version "0.9")
33444 (source
33445 (origin
33446 (method git-fetch)
33447 (uri (git-reference
33448 (url "http://github.com/buriy/python-readability")
33449 (commit version)))
33450 (file-name (git-file-name name version))
33451 (sha256
33452 (base32 "05alz7i33m4n7097jl5slxy5k2lnnxwwadqw956gwk1fihyzidrp"))))
33453 (build-system pyproject-build-system)
33454 (native-inputs
33455 (list python-poetry-core
33456 python-pytest))
33457 (propagated-inputs
33458 (list python-chardet
33459 python-cssselect
33460 python-lxml
33461 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33462 (home-page "http://github.com/buriy/python-readability")
33463 (synopsis "HTML to text parser")
33464 (description
33465 "This package provides classes and function that strip gratuitous markup
33466from web pages to make them easier to read.")
33467 (license license:asl2.0)))
33468
33469(define-public python-listparser
33470 (package
33471 (name "python-listparser")
33472 (version "0.20")
33473 (source
33474 (origin
33475 (method git-fetch)
33476 (uri (git-reference
33477 (url "https://github.com/kurtmckee/listparser")
33478 (commit (string-append "v" version))))
33479 (file-name (git-file-name name version))
33480 (sha256
33481 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33482 (build-system pyproject-build-system)
33483 (native-inputs (list python-pytest python-poetry-core))
33484 (home-page "https://github.com/kurtmckee/listparser")
33485 (synopsis "Parse subscription lists in Python")
33486 (description
33487 "This package provides a Python library that can parse OPML, FOAF, and
33488iGoogle subscription lists.")
33489 (license license:expat)))
33490
33491(define-public python-smartypants
33492 (package
33493 (name "python-smartypants")
33494 (version "2.0.2")
33495 (source
33496 (origin
33497 (method url-fetch)
33498 (uri (pypi-uri "smartypants" version))
33499 (sha256
33500 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33501 (build-system pyproject-build-system)
33502 (native-inputs
33503 (list python-docutils python-pygments python-setuptools))
33504 (home-page "https://github.com/justinmayer/smartypants.py")
33505 (synopsis "Translate punctuation characters into smart quotes")
33506 (description
33507 "@command{smartpants} can perform the following transformations:
33508@enumerate
33509@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33510@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33511entities
33512@item Dashes (-- and ---) into en- and em-dash entities
33513@item Three consecutive dots (... or . . .) into an ellipsis entity
33514@end enumerate")
33515 (license license:bsd-3)))
33516
33517(define-public python-ld
33518 (package
33519 (name "python-ld")
33520 (version "1.9.0")
33521 (source
33522 (origin
33523 (method git-fetch)
33524 (uri (git-reference
33525 (url "https://github.com/nir0s/ld")
33526 (commit (string-append "v" version))))
33527 (file-name (git-file-name name version))
33528 (sha256
33529 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33530 (build-system pyproject-build-system)
33531 (arguments
33532 (list
33533 ;; XXX: These tests expect ubuntu distro.
33534 #:test-flags
33535 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33536 "test_ubuntu14nomodules_lsb_release"
33537 "test_trailingblanks_lsb_release")
33538 " and not "))))
33539 (native-inputs (list python-pytest python-setuptools))
33540 (home-page "https://github.com/nir0s/ld")
33541 (synopsis "OS platform information API")
33542 (description
33543 "The ld package provides information about the GNU/Linux distribution it
33544runs on, such as a reliable machine-readable ID, or version information.")
33545 (license license:asl2.0)))
33546
33547(define-public python-quicktions
33548 (package
33549 (name "python-quicktions")
33550 (version "1.22")
33551 (source
33552 (origin
33553 (method git-fetch)
33554 (uri (git-reference
33555 (url "https://github.com/scoder/quicktions")
33556 (commit version)))
33557 (file-name (git-file-name name version))
33558 (sha256
33559 (base32
33560 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33561 (build-system pyproject-build-system)
33562 (native-inputs
33563 (list python-cython python-pytest python-setuptools))
33564 (home-page "https://github.com/scoder/quicktions")
33565 (synopsis "Fast fractions data type for rational numbers")
33566 (description
33567 "This package provides fast fractions data type for rational numbers. It
33568is the cythonized version of @code{fractions.Fraction}.")
33569 (license license:psfl)))
33570
33571(define-public python-pathvalidate
33572 (package
33573 (name "python-pathvalidate")
33574 (version "3.3.1")
33575 (source
33576 (origin
33577 (method git-fetch)
33578 (uri (git-reference
33579 (url "https://github.com/thombashi/pathvalidate")
33580 (commit (string-append "v" version))))
33581 (file-name (git-file-name name version))
33582 (sha256
33583 (base32 "14ymgd52v5r0g6yc2l7krg3n4x9bkv1ndvdaahiq503n1zhhs3iv"))))
33584 (build-system pyproject-build-system)
33585 (native-inputs (list python-allpairspy
33586 python-click
33587 python-faker
33588 python-pytest
33589 python-setuptools
33590 python-setuptools-scm
33591 python-tcolorpy))
33592 (home-page "https://github.com/thombashi/pathvalidate")
33593 (synopsis "Sanitize strings representing paths")
33594 (description
33595 "@code{pathvalidate} is a Python library to sanitize/validate strings
33596representing paths or filenames.")
33597 (license license:expat)))
33598
33599(define-public python-escapism
33600 (package
33601 (name "python-escapism")
33602 (version "1.0.1")
33603 (source
33604 (origin
33605 (method git-fetch)
33606 (uri (git-reference
33607 (url "https://github.com/jupyterhub/escapism")
33608 (commit version)))
33609 (file-name (git-file-name name version))
33610 (sha256
33611 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33612 (build-system pyproject-build-system)
33613 (native-inputs (list python-pytest python-setuptools))
33614 (home-page "https://github.com/jupyterhub/escapism")
33615 (synopsis "Simple, generic library for escaping strings")
33616 (description
33617 "This Python library provides a programming interface to, given a set of
33618safe characters and an escape character, escape safe strings and unescape the
33619result.")
33620 (license license:expat)))
33621
33622(define-public python-recommonmark
33623 (package
33624 (name "python-recommonmark")
33625 (version "0.7.1")
33626 (source
33627 (origin
33628 (method url-fetch)
33629 (uri (pypi-uri "recommonmark" version))
33630 (sha256
33631 (base32
33632 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33633 (build-system pyproject-build-system)
33634 (arguments
33635 (list
33636 ;; XXX: Some of those fail for no good reason.
33637 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33638 (native-inputs (list python-pytest python-setuptools python-wheel))
33639 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33640 (home-page "https://github.com/readthedocs/recommonmark")
33641 (synopsis "Docutils-compatibility bridge to CommonMark")
33642 (description
33643 "This package provides a docutils-compatibility bridge to CommonMark that
33644lets you write CommonMark inside of Docutils & Sphinx projects.")
33645 (license license:expat)))
33646
33647(define-public python-rectangle-packer
33648 (package
33649 (name "python-rectangle-packer")
33650 (version "2.1.0")
33651 (source
33652 (origin
33653 (method git-fetch)
33654 (uri (git-reference
33655 (url "https://github.com/Penlect/rectangle-packer")
33656 (commit version)))
33657 (file-name (git-file-name name version))
33658 (sha256
33659 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33660 (build-system pyproject-build-system)
33661 (arguments
33662 (list
33663 #:phases
33664 #~(modify-phases %standard-phases
33665 ;; Cython extensions have to be built before running the tests.
33666 (add-before 'check 'build-ext
33667 (lambda _
33668 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33669 (native-inputs
33670 (list python-cython python-pytest python-setuptools))
33671 (home-page "https://github.com/Penlect/rectangle-packer")
33672 (synopsis "Pack rectangles into a bounding box")
33673 (description
33674 "Rectangle-packer is a Python library for packing rectangles
33675into a bounding box with minimal wasted space. It is useful for texture
33676atlases, sprite sheets, and bin packing problems.")
33677 (license license:expat)))
33678
33679(define-public python-redo
33680 (package
33681 (name "python-redo")
33682 (version "3.0.0")
33683 (source
33684 (origin
33685 (method git-fetch)
33686 (uri (git-reference
33687 (url "https://github.com/mozilla-releng/redo")
33688 (commit version)))
33689 (file-name (git-file-name name version))
33690 (sha256
33691 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33692 (build-system pyproject-build-system)
33693 (native-inputs
33694 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33695 (home-page "https://github.com/mozilla-releng/redo")
33696 (synopsis "Utilities to retry Python callables")
33697 (description "Redo provides various means to add seamless ability to
33698retry to any Python callable.")
33699 (license license:mpl2.0)))
33700
33701(define-public python-opcodes
33702 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33703 ;; version number, which is what we use here.
33704 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33705 (package
33706 (name "python-opcodes")
33707 (version "0.3.14") ;from 'opcodes/__init__.py'
33708 (home-page "https://github.com/Maratyszcza/Opcodes")
33709 (source
33710 (origin
33711 (method git-fetch)
33712 (uri (git-reference (url home-page) (commit commit)))
33713 (file-name (git-file-name name version))
33714 (sha256
33715 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33716 (build-system pyproject-build-system)
33717 (native-inputs (list python-pytest python-setuptools))
33718 (synopsis "Database of processor instructions and opcodes")
33719 (description
33720 "This project documents instruction sets in a format convenient for
33721tools development. An instruction set is represented by three files:
33722
33723@itemize
33724@item an XML file that describes instructions;
33725@item an XSD file that describes the structure of the XML file;
33726@item a Python module that reads the XML file and represents it as a set of
33727Python objects;
33728@end itemize
33729
33730It currently provides descriptions for most user-mode x86, x86_64, and k1om
33731instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33732and BMI2).")
33733 (license license:bsd-2))))
33734
33735(define-public python-cart
33736 (package
33737 (name "python-cart")
33738 (version "1.2.3")
33739 (source
33740 (origin
33741 (method git-fetch)
33742 (uri (git-reference
33743 (url "https://github.com/CybercentreCanada/cart")
33744 (commit (string-append "v" version))))
33745 (file-name (git-file-name name version))
33746 (sha256
33747 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33748 (build-system pyproject-build-system)
33749 (arguments
33750 (list
33751 #:test-backend #~'unittest))
33752 (native-inputs
33753 (list python-setuptools))
33754 (propagated-inputs
33755 (list python-pycryptodome))
33756 (home-page "https://github.com/CybercentreCanada/cart")
33757 (synopsis "Library for interacting with the CaRT file format")
33758 (description
33759 "This Python library implements the CaRT file format which is commonly
33760used to store and transmit information about computer malware and associated
33761metadata.")
33762 (license license:bsd-2)))
33763
33764(define-public python-cle
33765 (package
33766 (name "python-cle")
33767 ;; Must be the same version as python-angr.
33768 (version "9.2.186")
33769 (source
33770 (origin
33771 (method git-fetch)
33772 (uri (git-reference
33773 (url "https://github.com/angr/cle")
33774 (commit (string-append "v" version))))
33775 (file-name (git-file-name name version))
33776 (sha256
33777 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33778 (build-system pyproject-build-system)
33779 (arguments
33780 (list
33781 ;; tests: 112 passed, 12 skipped, 1 warning
33782 #:phases
33783 #~(modify-phases %standard-phases
33784 (add-before 'check 'check-setup
33785 (lambda _
33786 (copy-recursively
33787 (string-append #$(this-package-native-input "angr-binaries") "/share")
33788 "../binaries"))))))
33789 (native-inputs
33790 (list angr-binaries
33791 python-cffi
33792 python-pytest
33793 python-setuptools))
33794 (propagated-inputs
33795 (list python-archinfo
33796 python-cart
33797 python-pefile
33798 python-pyelftools
33799 python-pyvex
33800 python-sortedcontainers))
33801 (home-page "https://github.com/angr/cle")
33802 (synopsis "Python loader for binaries and their associated libraries")
33803 (description
33804 "CLE loads binaries and their associated libraries, resolves
33805imports and provides an abstraction of process memory the same way as if
33806it was loader by the operating system's loader.")
33807 (license license:bsd-2)))
33808
33809(define-public python-pyvex
33810 (package
33811 (name "python-pyvex")
33812 ;; Must be the same version as python-angr.
33813 (version "9.2.186")
33814 (source
33815 (origin
33816 (method git-fetch)
33817 (uri (git-reference
33818 (url "https://github.com/angr/pyvex")
33819 (commit (string-append "v" version))))
33820 (file-name (git-file-name name version))
33821 (sha256
33822 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33823 (build-system pyproject-build-system)
33824 (arguments
33825 (list
33826 ;; tests: 57 passed
33827 #:phases
33828 #~(modify-phases %standard-phases
33829 (add-after 'unpack 'copy-submodule-package
33830 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33831 ;; symlink: "Read-only file system".
33832 (lambda _
33833 (copy-recursively
33834 #+(package-source (this-package-native-input "vex"))
33835 (string-append (getcwd) "/vex"))))
33836 (add-before 'build 'set-cc
33837 (lambda _
33838 (setenv "AR" #$(ar-for-target))
33839 (setenv "CC" #$(cc-for-target))
33840 (setenv "CC_NATIVE" "gcc"))))))
33841 (native-inputs
33842 (list cmake-minimal
33843 python-pytest
33844 python-scikit-build-core
33845 vex))
33846 (propagated-inputs
33847 (list python-bitstring
33848 python-cffi))
33849 (home-page "https://github.com/angr/pyvex")
33850 (synopsis "Python interface to libVEX and VEX IR")
33851 (description
33852 "This package provides a Python interface the libVEX and VEX IR.
33853VEX is the intermediate representation (also known as intermediate
33854language) used by the Valgrind analysis tool. As such, VEX is designed
33855to enable all kinds of binary analysis tasks.")
33856 (license (list license:bsd-2
33857 license:gpl2))))
33858
33859(define-public python-claripy
33860 (package
33861 (name "python-claripy")
33862 ;; Must be the same version as python-angr.
33863 (version "9.2.186")
33864 (source
33865 (origin
33866 (method git-fetch)
33867 (uri (git-reference
33868 (url "https://github.com/angr/claripy")
33869 (commit (string-append "v" version))))
33870 (file-name (git-file-name name version))
33871 (sha256
33872 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33873 (build-system pyproject-build-system)
33874 (arguments
33875 (list
33876 ;; tests: 329 passed, 1 skipped
33877 #:phases
33878 #~(modify-phases %standard-phases
33879 (add-after 'unpack 'relax-requirements
33880 (lambda _
33881 (substitute* "pyproject.toml"
33882 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33883 ;; failes to detect it (similar like OpenCV), relax the
33884 ;; version constraint, see:
33885 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33886 ((", \"z3-solver==4.13.0.0\"")
33887 "")))))))
33888 (native-inputs
33889 (list python-pytest
33890 python-setuptools))
33891 (propagated-inputs
33892 (list python-cachetools
33893 python-decorator
33894 python-pysmt
33895 z3))
33896 (home-page "https://github.com/angr/claripy")
33897 (synopsis "Abstraction layer for constraint solvers")
33898 (description
33899 "This Python module provides an abstraction layer for interacting
33900with constraint solvers. Specifically, it is intended to be used with
33901SMT solvers and is built on top of the Z3 solver.")
33902 (license license:bsd-2)))
33903
33904(define-public python-pysmt
33905 (package
33906 (name "python-pysmt")
33907 (version "0.9.6")
33908 (source
33909 (origin
33910 ;; Fetching from Git as pypi release doesn't include all test files.
33911 (method git-fetch)
33912 (uri (git-reference
33913 (url "https://github.com/pysmt/pysmt")
33914 (commit (string-append "v" version))))
33915 (file-name (git-file-name name version))
33916 (sha256
33917 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33918 (build-system pyproject-build-system)
33919 (arguments
33920 `(#:phases (modify-phases %standard-phases
33921 (add-before 'check 'set-pysmt-solver
33922 (lambda _
33923 (setenv "PYSMT_SOLVER" "z3"))))))
33924 (native-inputs (list python-pytest python-setuptools python-wheel))
33925 (propagated-inputs (list z3))
33926 (home-page "https://github.com/pysmt/pysmt")
33927 (synopsis
33928 "Solver-agnostic library for SMT formula manipulation and solving")
33929 (description
33930 "This Python module provides a solver-agnostic abstraction for
33931working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33932it allows manipulation and solving such formulas.")
33933 (license license:asl2.0)))
33934
33935(define-public python-rpyc
33936 (package
33937 (name "python-rpyc")
33938 (version "5.3.1")
33939 (source
33940 (origin
33941 ;; Fetching from Git as pypi release doesn't include all test files.
33942 (method git-fetch)
33943 (uri (git-reference
33944 (url "https://github.com/tomerfiliba-org/rpyc")
33945 (commit version)))
33946 (file-name (git-file-name name version))
33947 (sha256
33948 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33949 (snippet '(begin
33950 ;; Disable deploy tests, these rely on OpenSSH and require
33951 ;; configuring the SSH client manually to accept the host key.
33952 (delete-file "tests/test_deploy.py")
33953 ;; Disable tests requiring network access. These tests
33954 ;; presently fail with the error "Network is unreachable".
33955 (delete-file "tests/test_registry.py")))))
33956 (build-system pyproject-build-system)
33957 (arguments
33958 `(#:phases (modify-phases %standard-phases
33959 (replace 'check
33960 (lambda* (#:key tests? #:allow-other-keys)
33961 (when tests?
33962 (with-directory-excursion "tests"
33963 (invoke "python" "-m" "unittest"))))))))
33964 (propagated-inputs (list python-hatchling python-plumbum))
33965 (home-page "https://github.com/tomerfiliba-org/rpyc")
33966 (synopsis
33967 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33968 (description
33969 "This Python module enables remote procedure calls, clustering, and
33970distributed-computing. For this purpose, it makes use of object-proxying, a technique
33971that employs python's dynamic nature, to overcome the physical boundaries between
33972processes and computers, so that remote objects can be manipulated as if they
33973were local.")
33974 (license license:expat)))
33975
33976(define-public python-nampa
33977 (package
33978 (name "python-nampa")
33979 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33980 ;; has 0.1.1 as version. Latest commit is from 2024.
33981 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33982 (revision . "0")))
33983 (version (git-version "1.0.0"
33984 (assoc-ref properties 'revision)
33985 (assoc-ref properties 'commit)))
33986 (source
33987 (origin
33988 (method git-fetch)
33989 (uri (git-reference
33990 (url "https://github.com/thebabush/nampa")
33991 (commit (assoc-ref properties 'commit))))
33992 (file-name (git-file-name name version))
33993 (sha256
33994 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33995 (build-system pyproject-build-system)
33996 (arguments
33997 (list
33998 #:test-flags
33999 #~(list "-k test_random_values")
34000 #:phases
34001 #~(modify-phases %standard-phases
34002 (add-after 'unpack 'patch-tests
34003 (lambda _
34004 ;; Unclear why this top-level __init__.py is here. It seems to
34005 ;; setup a plugin for binaryninja, which Guix does not package.
34006 (delete-file "__init__.py")
34007 ;; Yields tests, which is not allowed anymore.
34008 (substitute* "tests/test_crc.py"
34009 (("yield") "#yield")))))))
34010 (propagated-inputs (list python-future))
34011 (native-inputs (list python-pytest python-setuptools))
34012 (home-page "https://github.com/thebabush/nampa")
34013 (synopsis "Python implementation of IDA Pro's FLIRT technology")
34014 (description
34015 "This Python module implements the @acronym{FLIRT, Fast Library Identification
34016and Recognition Technology}. This technology is useful for identifying
34017common library subroutines in disassembled binaries.")
34018 (license license:lgpl3)))
34019
34020(define-public python-mulpyplexer
34021 (package
34022 (name "python-mulpyplexer")
34023 (version "0.09")
34024 (source
34025 (origin
34026 (method url-fetch)
34027 (uri (pypi-uri "mulpyplexer" version))
34028 (sha256
34029 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
34030 (build-system pyproject-build-system)
34031 (arguments
34032 (list
34033 #:phases
34034 '(modify-phases %standard-phases
34035 (replace 'check
34036 (lambda* (#:key tests? #:allow-other-keys)
34037 (when tests?
34038 (invoke "python" "mulpyplexer.py")))))))
34039 (native-inputs (list python-setuptools python-wheel))
34040 (home-page "https://github.com/zardus/mulpyplexer/")
34041 (synopsis "Multiplexes interactions with lists of Python objects")
34042 (description "This module provides utilities for multiplexing
34043interactions with lists of Python objects.")
34044 (license license:bsd-2)))
34045
34046(define-public python-itanium-demangler
34047 (package
34048 (name "python-itanium-demangler")
34049 (version "1.1")
34050 (source
34051 (origin
34052 (method git-fetch)
34053 (uri (git-reference
34054 ;; PyPI only provides wheels and no source code.
34055 (url "https://github.com/whitequark/python-itanium_demangler")
34056 (commit (string-append "v" version))))
34057 (file-name (git-file-name name version))
34058 (sha256
34059 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
34060 (build-system pyproject-build-system)
34061 (arguments
34062 (list
34063 #:phases
34064 #~(modify-phases %standard-phases
34065 (replace 'check
34066 (lambda* (#:key tests? #:allow-other-keys)
34067 (when tests?
34068 (with-directory-excursion "tests"
34069 (invoke "python" "-m" "unittest"))))))))
34070 (native-inputs (list python-setuptools python-wheel))
34071 (home-page "https://github.com/whitequark/python-itanium_demangler/")
34072 (synopsis "Pure Python Itanium C++ ABI demangler")
34073 (description
34074"This Python module provides an implementation of the Itanium C++ ABI symbol
34075mangling language. The demangler generates an abstract syntax tree from
34076mangled symbols, which can be used for directly extracting type information.")
34077 (license license:bsd-0)))
34078
34079(define-public python-angr
34080 (package
34081 (name "python-angr")
34082 (version "9.2.186")
34083 (source
34084 (origin
34085 (method git-fetch)
34086 (uri (git-reference
34087 (url "https://github.com/angr/angr")
34088 (commit (string-append "v" version))))
34089 (file-name (git-file-name name version))
34090 (sha256
34091 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
34092 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
34093 "python-angr-check-exec-deps.patch"))))
34094 (build-system pyproject-build-system)
34095 (arguments
34096 (list
34097 #:imported-modules `(,@%cargo-build-system-modules
34098 ,@%pyproject-build-system-modules)
34099 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
34100 (guix build pyproject-build-system)
34101 (guix build utils))
34102 #:test-flags
34103 #~(list "-x"
34104 "--dist" "load"
34105 "--numprocesses" (number->string (parallel-job-count))
34106 "-k"
34107 ;; test_mips32_missing_offset_in_instructions fails
34108 ;; with capstone 5 and passes with capstone 4. Might
34109 ;; be a capstone regressions, needs investigation.
34110 ;;
34111 ;; TODO: test_unsat_core needs investigation.
34112 ;;
34113 ;; test_decompiling_abnormal_switch_case_case3 is broken
34114 ;; when tests modifying global counters are run before it.
34115 ;; See <https://github.com/angr/angr/issues/5715>.
34116 ;;
34117 ;; test_concrete_memset is a non-deterministic benchmark.
34118 ;; test_similarity_fauxware is flaky.
34119 (string-append
34120 "not test_mips32_missing_offset_in_instructions"
34121 " and not test_unsat_core"
34122 " and not test_decompiling_abnormal_switch_case_case3"
34123 " and not test_concrete_memset"
34124 " and not test_similarity_fauxware"))
34125 #:phases
34126 #~(modify-phases %standard-phases
34127 (add-after 'unpack 'use-guix-vendored-dependencies
34128 (lambda _
34129 (substitute* "native/angr/Cargo.toml"
34130 (("^icicle-fuzzing.*$")
34131 "icicle-fuzzing = { version = \"*\" }\n")
34132 (("^icicle-vm.*$")
34133 "icicle-vm = { version = \"*\" }\n")
34134 (("^pcode.*$")
34135 "pcode = { version = \"*\" }\n"))))
34136 (add-after 'unpack 'fix-tests
34137 (lambda _
34138 (substitute* "tests/common.py"
34139 (("\\[\"cc\"\\]")
34140 "[\"gcc\"]"))))
34141 (add-after 'unpack 'relax-protobuf
34142 (lambda _
34143 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
34144 (substitute* "pyproject.toml"
34145 (("protobuf>=6.33.0") "protobuf"))))
34146 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
34147 (lambda args
34148 (for-each (lambda (phase)
34149 (format #t "Running cargo phase: ~a~%" phase)
34150 (apply (assoc-ref cargo:%standard-phases phase)
34151 #:cargo-target #$(cargo-triplet)
34152 args))
34153 '(prepare-rust-crates
34154 unpack-rust-crates
34155 configure
34156 check-for-pregenerated-files
34157 patch-cargo-checksums))))
34158 (add-before 'check 'check-setup
34159 (lambda _
34160 (copy-recursively
34161 (string-append #$(this-package-native-input "angr-binaries") "/share")
34162 "../binaries")))
34163 (add-before 'build 'generate-protobuf-files
34164 ;; Regenerate protobuf files using our utilized protobuf version.
34165 ;; This allows us to relax the version constraint on python-protobuf.
34166 (lambda _
34167 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
34168 (add-before 'build 'set-cc
34169 (lambda _
34170 (setenv "CC" #$(cc-for-target)))))))
34171 (propagated-inputs (list python-archinfo ;sync version with python-angr
34172 python-cachetools
34173 python-cffi
34174 python-claripy ;sync version with python-angr
34175 python-cle ;sync version with python-angr
34176 python-cxxheaderparser
34177 python-gitpython
34178 python-msgspec
34179 python-mulpyplexer
34180 python-networkx
34181 python-protobuf
34182 python-psutil
34183 python-pycparser
34184 python-pydemumble
34185 python-pyformlang
34186 python-pypcode
34187 python-pyvex ;sync version with python-angr
34188 python-rich
34189 python-sortedcontainers
34190 python-sympy
34191 python-sqlalchemy
34192 python-keystone-engine
34193 python-typing-extensions
34194 python-unique-log-filter
34195 unicorn-2.0))
34196 (native-inputs
34197 (append
34198 (list angr-binaries
34199 protobuf
34200 python-pytest
34201 python-pytest-xdist
34202 python-setuptools
34203 python-setuptools-rust
34204 rust
34205 `(,rust "cargo"))
34206 (or (and=> (%current-target-system)
34207 (compose list make-rust-sysroot))
34208 '())))
34209 (inputs
34210 (cons* (cargo-inputs 'python-angr)))
34211 (home-page "https://github.com/angr/angr")
34212 (synopsis "Multi-architecture binary analysis toolkit")
34213 (description
34214 "This package provides a versatile binary analysis platform with the
34215ability to perform dynamic symbolic execution as well as various
34216static analyses directly on binaries. As such, it can be used for all
34217kinds of reverse engineering, vulnerability discovery, exploit
34218generation, and software testing purposes.")
34219 (license license:bsd-2)))
34220
34221(define-public python-peachpy
34222 ;; There is no tag in this repo.
34223 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
34224 (version "0.2.0") ;from 'peachpy/__init__.py'
34225 (revision "3"))
34226 (package
34227 (name "python-peachpy")
34228 (version (git-version version revision commit))
34229 (home-page "https://github.com/Maratyszcza/PeachPy")
34230 (source (origin
34231 (method git-fetch)
34232 (uri (git-reference (url home-page) (commit commit)))
34233 (file-name (git-file-name name version))
34234 (sha256
34235 (base32
34236 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
34237 (patches (search-patches "python-peachpy-determinism.patch"))))
34238 (build-system pyproject-build-system)
34239 (arguments
34240 ;; The issue is known and the test will probably never be fixed.
34241 ;; https://github.com/Maratyszcza/PeachPy/issues/131
34242 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
34243 (native-inputs
34244 (list python-pytest python-setuptools python-wheel))
34245 (propagated-inputs
34246 (list python-six python-opcodes))
34247 (synopsis "Efficient assembly code generation in Python")
34248 (description
34249 "PeachPy is a Python framework for writing high-performance assembly kernels.
34250PeachPy aims to simplify writing optimized assembly kernels while preserving
34251all optimization opportunities of traditional assembly.
34252
34253PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
34254for the Go language tool chain; it adapts to different calling conventions and
34255application binary interfaces (ABIs); it takes care of register allocation; it
34256supports x86_64 instructions up to AVX-512 and SHA.")
34257 (supported-systems '("x86_64-linux"))
34258 (license license:bsd-2))))
34259
34260(define-public python-sgmllib3k
34261 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34262 (revision "1"))
34263 (package
34264 (name "python-sgmllib3k")
34265 (version
34266 (git-version "1.0.0" revision commit))
34267 (source
34268 (origin
34269 (method git-fetch)
34270 (uri (git-reference
34271 (url "https://github.com/hsoft/sgmllib")
34272 (commit commit)))
34273 (file-name (git-file-name name version))
34274 (sha256
34275 (base32
34276 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34277 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34278 (build-system pyproject-build-system)
34279 (native-inputs (list python-pytest python-setuptools))
34280 (home-page "https://github.com/hsoft/sgmllib")
34281 (synopsis "Python 3 port of sgmllib")
34282 (description "This package provides an unmaintained port of sgmllib to
34283Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34284Generalized Mark-up Language}.")
34285 (license license:bsd-3))))
34286
34287(define-public python-cwcwidth
34288 (package
34289 (name "python-cwcwidth")
34290 (version "0.1.10")
34291 (source
34292 (origin
34293 (method url-fetch)
34294 (uri (pypi-uri "cwcwidth" version))
34295 (sha256
34296 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34297 (build-system pyproject-build-system)
34298 (arguments
34299 (list
34300 #:phases
34301 #~(modify-phases %standard-phases
34302 (add-before 'check 'remove-local-cwcwidth
34303 (lambda _
34304 ;; This would otherwise interfere with finding the installed
34305 ;; cwcwidth when running tests.
34306 (delete-file-recursively "cwcwidth"))))))
34307 (native-inputs
34308 (list python-cython
34309 python-pytest
34310 python-setuptools
34311 python-setuptools-scm))
34312 (home-page "https://github.com/sebastinas/cwcwidth")
34313 (synopsis "Python bindings for wc(s)width")
34314 (description
34315 "This package provides bindings for wcwidth and wcswidth functions
34316defined in POSIX.1-2001 and POSIX.1-2008.")
34317 (license license:expat)))
34318
34319(define-public python-pyan3
34320 (package
34321 (name "python-pyan3")
34322 (version "1.2.0")
34323 (source
34324 (origin
34325 ;; Source tarball on PyPI lacks tests.
34326 (method git-fetch)
34327 (uri (git-reference
34328 (url "https://github.com/Technologicat/pyan")
34329 (commit (string-append "v" version))))
34330 (file-name (git-file-name name version))
34331 (sha256
34332 (base32
34333 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34334 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34335 "python-pyan3-fix-absolute-path-bug.patch"))))
34336 (build-system pyproject-build-system)
34337 (native-inputs
34338 (list python-pytest python-setuptools python-wheel))
34339 (propagated-inputs
34340 (list python-jinja2))
34341 (home-page "https://github.com/Technologicat/pyan")
34342 (synopsis "Offline call graph generator for Python 3")
34343 (description "Pyan takes one or more Python source files, performs
34344a (rather superficial) static analysis, and constructs a directed graph of the
34345objects in the combined source, and how they define or use each other. The
34346graph can be output for rendering by GraphViz or yEd.")
34347 (license license:gpl2)))
34348
34349(define-public python-multipledispatch
34350 (package
34351 (name "python-multipledispatch")
34352 (version "1.0.0")
34353 (source
34354 (origin
34355 (method git-fetch) ;no tests in PyPI archive
34356 (uri (git-reference
34357 (url "https://github.com/mrocklin/multipledispatch")
34358 (commit version)))
34359 (file-name (git-file-name name version))
34360 (sha256
34361 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34362 (build-system pyproject-build-system)
34363 (native-inputs
34364 (list python-pytest
34365 python-pytest-benchmark
34366 python-setuptools))
34367 (home-page "https://github.com/mrocklin/multipledispatch/")
34368 (synopsis "Multiple dispatch for Python based on pattern matching")
34369 (description
34370 "This library provides an efficient mechanism for overloading function
34371implementations based on the types of the arguments.")
34372 (license license:bsd-3)))
34373
34374(define-public python-multimethod
34375 (package
34376 (name "python-multimethod")
34377 (version "1.10")
34378 (source
34379 (origin
34380 ;; No tests in the PyPI tarball.
34381 (method git-fetch)
34382 (uri (git-reference
34383 (url "https://github.com/coady/multimethod")
34384 (commit (string-append "v" version))))
34385 (file-name (git-file-name name version))
34386 (sha256
34387 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34388 (build-system pyproject-build-system)
34389 (native-inputs (list python-pytest python-setuptools python-wheel))
34390 (home-page "https://github.com/coady/multimethod")
34391 (synopsis "Python support for multiple argument dispatching")
34392 (description
34393 "This package provides a decorator for adding multiple argument
34394dispatching to functions. The decorator creates a multimethod object as
34395needed and registers the function with its annotations.")
34396 (license license:asl2.0)))
34397
34398(define-public python-logical-unification
34399 (package
34400 (name "python-logical-unification")
34401 (version "0.4.7")
34402 (source
34403 (origin
34404 (method git-fetch)
34405 (uri (git-reference
34406 (url "https://github.com/pythological/unification")
34407 (commit (string-append "v" version))))
34408 (file-name (git-file-name name version))
34409 (sha256
34410 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34411 (build-system pyproject-build-system)
34412 (native-inputs
34413 (list python-pytest
34414 python-pytest-benchmark
34415 python-setuptools
34416 python-setuptools-scm))
34417 (propagated-inputs
34418 (list python-multipledispatch
34419 python-toolz))
34420 (home-page "https://github.com/pythological/unification/")
34421 (synopsis "Logical unification in Python for solving symbolic expressions")
34422 (description "This library provides algorithms and data types for solving
34423symbolic expressions in pure Python using the technique of logical unification.")
34424 (license license:bsd-3)))
34425
34426(define-public python-looseversion
34427 (package
34428 (name "python-looseversion")
34429 (version "1.3.0")
34430 (source
34431 (origin
34432 (method url-fetch)
34433 (uri (pypi-uri "looseversion" version))
34434 (sha256
34435 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34436 (build-system pyproject-build-system)
34437 (arguments
34438 (list
34439 ;; No tests provided.
34440 #:tests? #f))
34441 (native-inputs
34442 (list python-hatchling))
34443 (home-page "https://github.com/effigies/looseversion")
34444 (synopsis "Version numbering for anarchists and software realists")
34445 (description
34446 "This package provides a drop-in replacement for the original
34447@code{LooseVersion}. It implements an identical interface and comparison
34448logic to @code{LooseVersion}. The only major change is that a
34449@code{looseversion.LooseVersion} is comparable to a
34450@code{distutils.version.LooseVersion}, which means tools should not need to
34451worry whether all dependencies that use LooseVersion have migrated.")
34452 (license license:psfl)))
34453
34454(define-public python-cons
34455 (package
34456 (name "python-cons")
34457 (version "0.4.7")
34458 (source
34459 (origin
34460 (method git-fetch) ;no tests in PyPI archive
34461 (uri (git-reference
34462 (url "https://github.com/pythological/python-cons")
34463 (commit (string-append "v" version))))
34464 (file-name (git-file-name name version))
34465 (sha256
34466 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34467 (build-system pyproject-build-system)
34468 (native-inputs
34469 (list python-pytest
34470 python-setuptools
34471 python-setuptools-scm
34472 python-wheel))
34473 (propagated-inputs
34474 (list python-logical-unification))
34475 (home-page "https://github.com/pythological/python-cons")
34476 (synopsis "Cons cell data structures and related algorithms for Python")
34477 (description
34478 "This library implements algorithms and data structures for Lisp-style
34479cons cells in Python.")
34480 (license license:lgpl3+)))
34481
34482(define-public python-etuples
34483 (package
34484 (name "python-etuples")
34485 (version "0.3.10")
34486 (source
34487 (origin
34488 (method url-fetch)
34489 (uri (pypi-uri "etuples" version))
34490 (sha256
34491 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34492 (build-system pyproject-build-system)
34493 (arguments
34494 (list
34495 #:test-flags
34496 ;; assert False == {~_1: <built-in function add>}
34497 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34498 (native-inputs
34499 (list python-pytest
34500 python-setuptools
34501 python-setuptools-scm))
34502 (propagated-inputs
34503 (list python-cons
34504 python-multipledispatch))
34505 (home-page "https://github.com/pythological/etuples")
34506 (synopsis "S-expressions in Python")
34507 (description
34508 "This library implements eval'able S-expression in Python using tuple-like objects.")
34509 (license license:asl2.0)))
34510
34511(define-public python-minikanren
34512 (package
34513 (name "python-minikanren")
34514 (version "1.0.5")
34515 (source
34516 (origin
34517 (method git-fetch)
34518 (uri (git-reference
34519 (url "https://github.com/pythological/kanren")
34520 (commit (string-append "v" version))))
34521 (file-name (git-file-name name version))
34522 (sha256
34523 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34524 (build-system pyproject-build-system)
34525 (arguments
34526 (list
34527 ;; 60 passed, 3 skipped, 23 deselected
34528 #:test-flags
34529 #~(list "-k" (string-join
34530 ;; XXX: 16 tests fail with assertion not equal, check why.
34531 (list "not test_basics"
34532 "test_eq_assoc"
34533 "test_eq_assoccomm"
34534 "test_eq_comm"
34535 "test_map_anyo"
34536 "test_map_anyo_misc"
34537 "test_map_anyo_reverse"
34538 "test_reduceo"
34539 "test_walko"
34540 "test_walko_reverse")
34541 " and not "))))
34542 (native-inputs
34543 (list python-pytest
34544 python-setuptools))
34545 (propagated-inputs
34546 (list python-cons
34547 python-etuples
34548 python-logical-unification
34549 python-multipledispatch
34550 python-toolz
34551 python-typing-extensions))
34552 (home-page "https://github.com/pythological/kanren")
34553 (synopsis "Relational logic programming in pure Python")
34554 (description
34555 "The minikanren library provides an algorithmic core for computer algebra
34556systems in Python.")
34557 (license license:bsd-3)))
34558
34559(define-public python-dotenv
34560 (package
34561 (name "python-dotenv")
34562 (version "1.2.2")
34563 (source
34564 (origin
34565 (method url-fetch)
34566 (uri (pypi-uri "python_dotenv" version))
34567 (sha256
34568 (base32 "1wwwg7gasqmnv5y2hb3w1155c8nai6zzih8x5hn0ifnpzf8ildrc"))))
34569 (build-system pyproject-build-system)
34570 (arguments
34571 (list
34572 #:test-flags
34573 ;; .dotenv-real instead of dotenv
34574 #~(list "-k not test_run_with_dotenv_and_command_flags")))
34575 (native-inputs
34576 (list python-pytest
34577 python-setuptools))
34578 (propagated-inputs
34579 (list python-click))
34580 (home-page "https://saurabh-kumar.com/python-dotenv/")
34581 (synopsis "Setup environment variables according to .env files")
34582 (description
34583 "This package provides the @code{python-dotenv} Python module to read
34584key-value pairs from a @code{.env} file and set them as environment variables.")
34585 (license license:bsd-3)))
34586
34587;; Old version just for docker-compose; remove once that is updated.
34588(define-public python-dotenv-0.13.0
34589 (package (inherit python-dotenv)
34590 (name "python-dotenv")
34591 (version "0.13.0")
34592 (source
34593 (origin
34594 (method url-fetch)
34595 (uri (pypi-uri "python-dotenv" version))
34596 (sha256
34597 (base32
34598 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34599 (arguments
34600 `(#:phases
34601 (modify-phases %standard-phases
34602 (replace 'check
34603 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34604 (when tests?
34605 (add-installed-pythonpath inputs outputs)
34606 (setenv "PATH" (string-append (getenv "PATH") ":"
34607 (assoc-ref outputs "out") "/bin"))
34608 ;; Skip the ipython tests.
34609 (delete-file "tests/test_ipython.py")
34610 (invoke "python" "-m" "pytest")))))))
34611 (native-inputs
34612 (modify-inputs native-inputs
34613 (append python-mock
34614 python-sh-1)))))
34615
34616(define-public python-braintree
34617 (package
34618 (name "python-braintree")
34619 (version "4.40.0")
34620 (source
34621 (origin
34622 (method url-fetch)
34623 (uri (pypi-uri "braintree" version))
34624 (sha256
34625 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34626 (build-system pyproject-build-system)
34627 (arguments (list #:tests? #f)) ; No tests.
34628 (native-inputs (list python-setuptools))
34629 (propagated-inputs (list python-requests))
34630 (home-page
34631 "https://developers.braintreepayments.com/python/sdk/server/overview")
34632 (synopsis "Braintree Python Library")
34633 (description
34634 "The Braintree Python SDK provides integration access to the Braintree
34635Gateway. Braintree is a US-based payments service provider.")
34636 (license license:expat)))
34637
34638(define-public python-markuppy
34639 (package
34640 (name "python-markuppy")
34641 (version "1.18")
34642 (source
34643 (origin
34644 (method git-fetch)
34645 (uri (git-reference
34646 (url "https://github.com/tylerbakke/MarkupPy")
34647 (commit (string-append "v" version))))
34648 (file-name (git-file-name name version))
34649 (sha256
34650 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34651 (build-system pyproject-build-system)
34652 (native-inputs (list python-pytest python-setuptools))
34653 (home-page "https://github.com/tylerbakke/MarkupPy")
34654 (synopsis "Pythonic HTML/XML generator")
34655 (description
34656 "This Python module attempts to make it easier to generate HTML/XML from
34657a Python program in an customizable and pythonic way.")
34658 (license license:expat)))
34659
34660(define-public python-csb43
34661 (package
34662 (name "python-csb43")
34663 (version "1.0.0")
34664 (source
34665 (origin
34666 (method git-fetch)
34667 (uri (git-reference
34668 (url "https://bitbucket.org/wmj/csb43")
34669 (commit version)))
34670 (file-name (git-file-name name version))
34671 (sha256
34672 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34673 (build-system pyproject-build-system)
34674 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34675 (arguments
34676 (list
34677 #:phases
34678 #~(modify-phases %standard-phases
34679 (add-after 'unpack 'relax-requirements
34680 (lambda _
34681 (substitute* "pyproject.toml"
34682 (("\"deprecated ~=.*\",")
34683 "\"deprecated\",")))))))
34684 (native-inputs
34685 (list python-lxml
34686 python-pytest
34687 python-setuptools
34688 python-setuptools-scm))
34689 (propagated-inputs
34690 (list python-deprecated
34691 python-pycountry
34692 python-pyyaml
34693 python-tablib))
34694 (home-page "https://bitbucket.org/wmj/csb43")
34695 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3469643 (CSB43)")
34697 (description
34698 "This package provides tools to convert files in the format used by
34699multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34700Spanish Banking Association [AEB43]) to other formats.
34701
34702Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34703spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34704 (license license:lgpl3)))
34705
34706(define-public python-csb43-0.10
34707 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34708 ;; homebank, i18n, ofx, and utils.
34709 (package
34710 (inherit python-csb43)
34711 (name "python-csb43")
34712 (version "0.10.1")
34713 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34714 (source
34715 (origin
34716 (method git-fetch)
34717 (uri (git-reference
34718 (url "https://bitbucket.org/wmj/csb43")
34719 (commit version)))
34720 (file-name (git-file-name name version))
34721 (sha256
34722 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34723
34724(define-public python-febelfin-coda
34725 (package
34726 (name "python-febelfin-coda")
34727 (version "0.3.0")
34728 (source
34729 (origin
34730 (method hg-fetch)
34731 (uri (hg-reference
34732 (url "https://foss.heptapod.net/tryton/coda")
34733 (changeset version)))
34734 (file-name (string-append name "-" version "-checkout"))
34735 (sha256
34736 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34737 (build-system pyproject-build-system)
34738 (arguments
34739 (list
34740 #:test-backend #~'unittest
34741 #:phases
34742 #~(modify-phases %standard-phases
34743 (add-after 'install 'remove-installed-tests
34744 (lambda* (#:key inputs outputs #:allow-other-keys)
34745 (with-directory-excursion (site-packages inputs outputs)
34746 (for-each delete-file
34747 (list "coda/test.py"
34748 "coda/test_readme.py"))))))))
34749 (native-inputs (list python-setuptools))
34750 (home-page "https://coda.b2ck.com/")
34751 (synopsis "Module to parse Belgian CODA files")
34752 (description
34753 "This package provides a module to parse Coded statement of account
34754(CODA) files as defined be the Belgian Febelfin bank standard.")
34755 (license license:bsd-3)))
34756
34757(define-public python-ofxparse
34758 (package
34759 (name "python-ofxparse")
34760 (version "0.21")
34761 (source
34762 (origin
34763 (method url-fetch)
34764 (uri (pypi-uri "ofxparse" version))
34765 (sha256
34766 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34767 (build-system pyproject-build-system)
34768 (native-inputs (list python-pynose python-setuptools))
34769 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34770 (home-page "http://sites.google.com/site/ofxparse")
34771 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34772format")
34773 (description "@code{ofxparse} is a parser for Open Financial
34774Exchange (.ofx) format files. OFX files are available from almost any online
34775banking site, so they work well if you want to pull together your finances
34776from multiple sources. Online trading accounts also often provide account
34777statements in OFX files.")
34778 (license license:expat)))
34779
34780(define-public python-rfc3339-validator
34781 (package
34782 (name "python-rfc3339-validator")
34783 (version "0.1.4")
34784 (source
34785 (origin
34786 (method url-fetch)
34787 (uri (pypi-uri "rfc3339_validator" version))
34788 (sha256
34789 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34790 (build-system pyproject-build-system)
34791 (native-inputs
34792 (list python-pytest
34793 python-setuptools
34794 python-strict-rfc3339))
34795 (propagated-inputs
34796 (list python-six))
34797 (home-page "https://github.com/naimetti/rfc3339-validator")
34798 (synopsis "Python RFC3339 validator")
34799 (description "This package provides a pure Python RFC3339 validator.")
34800 (license license:expat)))
34801
34802(define-public python-platformdirs
34803 ;; Try to update simultaneously with the bootstrap version in
34804 ;; (gnu packages python-build).
34805 (package
34806 (name "python-platformdirs")
34807 (version "4.3.6")
34808 (source
34809 (origin
34810 (method url-fetch)
34811 (uri (pypi-uri "platformdirs" version))
34812 (sha256
34813 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34814 (build-system pyproject-build-system)
34815 (native-inputs
34816 (list python-appdirs
34817 python-hatchling
34818 python-hatch-vcs
34819 python-pytest
34820 python-pytest-mock))
34821 (home-page "https://github.com/platformdirs/platformdirs")
34822 (synopsis "Determine the appropriate platform-specific directories")
34823 (description "When writing applications, finding the right location to
34824store user data and configuration varies per platform. Even for
34825single-platform apps, there may by plenty of nuances in figuring out the right
34826location. This small Python module determines the appropriate
34827platform-specific directories, e.g. the ``user data dir''.")
34828 (license license:expat)))
34829
34830(define-public python-json2html
34831 (package
34832 (name "python-json2html")
34833 (version "1.3.0")
34834 (source
34835 (origin
34836 (method git-fetch)
34837 (uri (git-reference
34838 (url "https://github.com/softvar/json2html")
34839 (commit (string-append "v" version))))
34840 (file-name (git-file-name name version))
34841 (sha256
34842 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34843 (build-system pyproject-build-system)
34844 (arguments
34845 (list
34846 #:test-backend #~'custom
34847 #:test-flags #~(list "test/run_tests.py")))
34848 (native-inputs (list python-setuptools))
34849 (home-page "https://github.com/softvar/json2html")
34850 (synopsis "Convert JSON to HTML table")
34851 (description
34852 "@code{python-json2html} is a python module to convert JSON into a human
34853readable HTML table representation.")
34854 (license license:expat)))
34855
34856(define-public python-face
34857 (package
34858 (name "python-face")
34859 (version "24.0.0")
34860 (source
34861 (origin
34862 (method git-fetch)
34863 (uri (git-reference
34864 (url "https://github.com/mahmoud/face")
34865 (commit (string-append "v" version))))
34866 (file-name (git-file-name name version))
34867 (sha256
34868 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34869 (build-system pyproject-build-system)
34870 (native-inputs (list python-pytest python-setuptools))
34871 (propagated-inputs (list python-boltons))
34872 (home-page "https://github.com/mahmoud/face")
34873 (synopsis "CLI parsing and dispatching microframework")
34874 (description "@code{python-face} is a Pythonic microframework for building
34875command-line applications.
34876
34877@itemize
34878@item First-class subcommand support
34879@item Powerful middleware architecture
34880@item Separate parser layer
34881@item Built-in flagfile support
34882@item Handy testing utilities
34883@item Themeable help display
34884@end itemize")
34885 (license license:bsd-3)))
34886
34887(define-public python-glom
34888 (package
34889 (name "python-glom")
34890 (version "24.11.0")
34891 (source
34892 (origin
34893 (method git-fetch)
34894 (uri (git-reference
34895 (url "https://github.com/mahmoud/glom")
34896 (commit (string-append "v" version))))
34897 (file-name (git-file-name name version))
34898 (sha256
34899 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34900 (build-system pyproject-build-system)
34901 (native-inputs
34902 (list python-pytest
34903 python-pyyaml
34904 python-setuptools))
34905 (propagated-inputs
34906 (list python-attrs
34907 python-boltons
34908 python-face))
34909 (home-page "https://github.com/mahmoud/glom")
34910 (synopsis "Declaratively restructure data")
34911 (description "Real applications have real data, and real data
34912nests---objects inside of objects inside of lists of objects. glom is a new
34913and powerful way to handle real-world data, featuring:
34914
34915@itemize
34916@item Path-based access to nested data structures
34917@item Readable, meaningful error messages
34918@item Declarative data transformation, using lightweight, Pythonic specifications
34919@item Built-in data exploration and debugging features
34920@end itemize")
34921 (license license:bsd-3)))
34922
34923(define-public python-box
34924 (package
34925 (name "python-box")
34926 (version "7.3.2")
34927 (source
34928 (origin
34929 (method git-fetch)
34930 (uri
34931 (git-reference
34932 (url "https://github.com/cdgriffith/Box")
34933 (commit version)))
34934 (file-name (git-file-name name version))
34935 (sha256
34936 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34937 (build-system pyproject-build-system)
34938 (arguments
34939 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34940 (native-inputs
34941 (list python-pytest
34942 python-setuptools))
34943 (propagated-inputs
34944 (list python-msgpack
34945 python-ruamel.yaml
34946 python-tomli-w))
34947 (home-page "https://github.com/cdgriffith/Box")
34948 (synopsis "Advanced Python dictionaries with dot notation access")
34949 (description
34950 "This package provides the @code{python-box} Python module.
34951It implements advanced Python dictionaries with dot notation access.")
34952 (license license:expat)))
34953
34954(define-public python-fields
34955 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34956 (revision "0"))
34957 (package
34958 (name "python-fields")
34959 (version (git-version "5.0.0" revision commit))
34960 (source
34961 (origin
34962 (method git-fetch)
34963 (uri (git-reference
34964 (url "https://github.com/ionelmc/python-fields")
34965 (commit commit)))
34966 (file-name (git-file-name name version))
34967 (sha256
34968 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34969 (build-system pyproject-build-system)
34970 (arguments
34971 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34972 (native-inputs (list python-pytest-8
34973 python-pytest-benchmark
34974 python-setuptools
34975 python-wheel))
34976 (home-page "https://python-fields.readthedocs.io/")
34977 (synopsis "Python container class boilerplate killer")
34978 (description "Avoid repetitive boilerplate code in Python classes.")
34979 (license license:bsd-3))))
34980
34981(define-public python-aspectlib
34982 (package
34983 (name "python-aspectlib")
34984 (version "2.0.0")
34985 (source
34986 (origin
34987 (method git-fetch)
34988 (uri (git-reference
34989 (url "https://github.com/ionelmc/python-aspectlib")
34990 (commit (string-append "v" version))))
34991 (file-name (git-file-name name version))
34992 (sha256
34993 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34994 (build-system pyproject-build-system)
34995 (arguments
34996 (list
34997 #:test-flags
34998 #~(list ;; XXX: Require more dependencies.
34999 "--ignore=tests/test_integrations.py"
35000 "--ignore=tests/test_integrations_py3.py")
35001 #:phases
35002 #~(modify-phases %standard-phases
35003 (add-after 'unpack 'fix-pytest-config
35004 (lambda _
35005 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
35006 ;; The (path: py.path.local) argument is deprecated, please
35007 ;; use (collection_path: pathlib.Path).
35008 (delete-file "pytest.ini"))))))
35009 (native-inputs
35010 (list python-pytest-8
35011 python-setuptools
35012 python-tornado))
35013 (propagated-inputs
35014 (list python-fields))
35015 (home-page "https://github.com/ionelmc/python-aspectlib")
35016 (synopsis "Python monkey-patching and decorators")
35017 (description
35018 "This package provides an aspect-oriented programming, monkey-patch
35019and decorators library. It is useful when changing behavior in existing
35020code is desired. It includes tools for debugging and testing:
35021simple mock/record and a complete capture/replay framework.")
35022 (license license:bsd-2)))
35023
35024(define-public python-ijson
35025 (package
35026 (name "python-ijson")
35027 (version "3.5.0")
35028 (source
35029 (origin
35030 (method url-fetch)
35031 (uri (pypi-uri "ijson" version))
35032 (sha256
35033 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
35034 (inputs
35035 ;; yajl is optional, but compiling with it makes faster
35036 ;; backends available to ijson:
35037 (list yajl))
35038 (native-inputs
35039 (list python-pytest
35040 python-setuptools))
35041 (build-system pyproject-build-system)
35042 (home-page "https://github.com/ICRAR/ijson")
35043 (synopsis "Iterative JSON parser with Python iterator interfaces")
35044 (description
35045 "Ijson is an iterative JSON parser with standard Python iterator
35046interfaces.")
35047 (license license:bsd-3)))
35048
35049(define-public python-ordered-set
35050 (package
35051 (name "python-ordered-set")
35052 (version "4.1.0")
35053 (source
35054 (origin
35055 (method url-fetch)
35056 (uri (pypi-uri "ordered-set" version))
35057 (sha256
35058 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
35059 (build-system pyproject-build-system)
35060 (native-inputs (list python-cython python-flit-core python-pytest))
35061 (home-page "https://github.com/simonpercivall/orderedset")
35062 (synopsis "Ordered Set implementation in Cython")
35063 (description "This library provides an @code{OrderedSet} data type that
35064works like a regular set, but remembers insertion order. It supports the full
35065Python @code{set} interface.")
35066 (license license:asl2.0)))
35067
35068(define-public python-orgparse
35069 (package
35070 (name "python-orgparse")
35071 (version "0.4.20251020")
35072 (source
35073 (origin
35074 (method git-fetch)
35075 (uri (git-reference
35076 (url "https://github.com/karlicoss/orgparse")
35077 (commit (string-append "v" version))))
35078 (file-name (git-file-name name version))
35079 (sha256
35080 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
35081 (build-system pyproject-build-system)
35082 (arguments
35083 (list
35084 #:test-flags
35085 #~(list "--ignore-glob=doc/*"
35086 ;; XXX: Unclear why those tests fail.
35087 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
35088 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
35089 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
35090 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
35091 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
35092 (home-page "https://github.com/karlicoss/orgparse")
35093 (synopsis "Emacs Org mode parser in Python")
35094 (description
35095 "This package is a Python module for reading Emacs Org mode files.")
35096 (license license:bsd-3)))
35097
35098(define-public dynaconf
35099 (package
35100 (name "dynaconf")
35101 (version "3.2.11")
35102 (source
35103 (origin
35104 (method git-fetch)
35105 (uri
35106 (git-reference
35107 (url "https://github.com/dynaconf/dynaconf")
35108 (commit version)))
35109 (file-name (git-file-name name version))
35110 (sha256
35111 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
35112 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
35113 (modules '((guix build utils)))
35114 ;; Remove vendored dependencies
35115 (snippet
35116 #~(let ((unvendor '("click" "ruamel" "toml")))
35117 (with-directory-excursion "dynaconf/vendor"
35118 (for-each delete-file-recursively unvendor))
35119 (substitute* (find-files "." "\\.py$")
35120 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
35121 _ target rest)
35122 (string-append "import " target rest))
35123 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
35124 target))))))
35125 (build-system pyproject-build-system)
35126 (arguments
35127 (list
35128 #:test-flags
35129 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
35130 "-k" #$(let ((click-tests '("test_negative_get"
35131 "test_not_found_key_exit_error[get]"
35132 "test_inspect_invalid_format")))
35133 ;; Disable integration tests
35134 (string-append "not integration and not "
35135 ;; These tests fail because we use
35136 ;; Click 8.* instead of Click 7
35137 (string-join click-tests " and not ")))
35138 "tests")
35139 #:phases
35140 #~(modify-phases %standard-phases
35141 (add-after 'unpack 'patch-for-click-8
35142 (lambda _
35143 (substitute* "dynaconf/cli.py"
35144 (("click.get_os_args\\()") ;deprecated from Click 8.1+
35145 "sys.argv[1:]")))))))
35146 (propagated-inputs
35147 (list python-click python-configobj python-ruamel.yaml-0.16
35148 python-toml python-tomli))
35149 (native-inputs
35150 (list python-django
35151 python-flask
35152 python-pytest
35153 python-pytest-mock
35154 python-setuptools))
35155 (home-page "https://www.dynaconf.com/")
35156 (synopsis "The dynamic configurator for your Python project")
35157 (description
35158 "This package provides @code{dynaconf} the dynamic configurator manager for
35159your Python project. It provides features such as:
35160
35161@itemize
35162@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
35163@item Settings management (default values, validation, parsing, templating);
35164@item Protection of sensitive information (passwords/tokens);
35165@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
35166loaders;
35167@item Full support for environment variables to override existing settings
35168(dotenv support included);
35169@item Optional layered system for multiple environments @code{[default,
35170development, testing, production]};
35171@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
35172@item Built-in extensions for Django and Flask web frameworks;
35173@item CLI for common operations such as @code{init, list, write, validate, export}.
35174@end itemize")
35175 (license license:expat)))
35176
35177(define-public python-pudb
35178 ;; TODO: Rename to pudb as it's a final program.
35179 (package
35180 (name "python-pudb")
35181 (version "2025.1.3")
35182 (source
35183 (origin
35184 (method url-fetch)
35185 (uri (pypi-uri "pudb" version))
35186 (sha256
35187 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
35188 (build-system pyproject-build-system)
35189 (arguments
35190 (list
35191 #:phases
35192 #~(modify-phases %standard-phases
35193 (add-before 'check 'pre-check
35194 (lambda _
35195 (setenv "HOME" "/tmp"))))))
35196 (native-inputs
35197 (list python-hatchling
35198 python-pytest
35199 python-pytest-mock
35200 python-numpy))
35201 (propagated-inputs
35202 (list python-jedi
35203 python-packaging
35204 python-pygments
35205 python-typing-extensions
35206 python-urwid
35207 python-urwid-readline))
35208 (home-page "https://documen.tician.de/pudb/")
35209 (synopsis "Console-based Python debugger")
35210 (description
35211 "@command{pudb} is a full-screen, console-based Python debugger providing
35212all the niceties of modern GUI-based debuggers in a more lightweight and
35213keyboard-friendly package.")
35214 (license license:expat)))
35215
35216(define-public python-iwlib
35217 (package
35218 (name "python-iwlib")
35219 (version "1.7.0")
35220 (source
35221 (origin
35222 (method git-fetch)
35223 (uri (git-reference
35224 (url "https://github.com/nhoad/python-iwlib")
35225 (commit version)))
35226 (file-name (git-file-name name version))
35227 (sha256
35228 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
35229 (build-system pyproject-build-system)
35230 (arguments
35231 (list
35232 #:phases
35233 #~(modify-phases %standard-phases
35234 (add-before 'check 'cleanup
35235 (lambda _
35236 (delete-file-recursively "iwlib"))))))
35237 (native-inputs (list python-pytest python-setuptools))
35238 (inputs (list wireless-tools))
35239 (propagated-inputs (list python-cffi))
35240 (home-page "https://github.com/nhoad/python-iwlib")
35241 (synopsis "Python module to interface with iwlib")
35242 (description
35243 "This package provides a Python interface to iw wireless tools.")
35244 (license license:gpl2)))
35245
35246(define-public python-pdoc3
35247 (package
35248 (name "python-pdoc3")
35249 (version "0.11.6")
35250 (source
35251 (origin
35252 (method url-fetch)
35253 (uri (pypi-uri "pdoc3" version))
35254 (sha256
35255 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
35256 (build-system pyproject-build-system)
35257 (arguments
35258 (list #:test-backend #~'unittest
35259 #:test-flags #~(list "-v" "pdoc.test")))
35260 (native-inputs
35261 (list python-setuptools-git
35262 python-setuptools
35263 python-setuptools-scm))
35264 (propagated-inputs
35265 (list python-mako
35266 python-markdown))
35267 (home-page "https://pdoc3.github.io/pdoc/")
35268 (synopsis "Auto-generate API documentation for Python projects")
35269 (description
35270 "This package auto-generates API documentation from Python projects
35271already existing modules and objects docstrings.")
35272 (license license:agpl3+)))
35273
35274(define-public python-piexif
35275 (package
35276 (name "python-piexif")
35277 (version "1.1.3")
35278 (source
35279 (origin
35280 (method git-fetch)
35281 (uri (git-reference
35282 (url "https://github.com/hMatoba/Piexif")
35283 (commit version)))
35284 (file-name (git-file-name name version))
35285 (sha256
35286 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35287 (patches
35288 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35289 (build-system pyproject-build-system)
35290 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35291 (home-page "https://github.com/hMatoba/Piexif")
35292 (synopsis "Simplify exif manipulations with Python")
35293 (description
35294 "Piexif simplifies interacting with EXIF data in Python. It includes the
35295tools necessary for extracting, creating, manipulating, converting and writing
35296EXIF data to JPEG, WebP and TIFF files.")
35297 (license license:expat)))
35298
35299(define-public python-pyrss2gen
35300 (package
35301 (name "python-pyrss2gen")
35302 (version "1.1")
35303 (source
35304 (origin
35305 (method url-fetch)
35306 (uri (pypi-uri "PyRSS2Gen" version))
35307 (sha256
35308 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35309 (build-system pyproject-build-system)
35310 (arguments (list #:tests? #f)) ; No tests.
35311 (native-inputs (list python-setuptools))
35312 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35313 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35314 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35315PyRSS2Gen builds the feed up by using a XML generator.")
35316 (license license:bsd-3)))
35317
35318(define-public python-doit
35319 (package
35320 (name "python-doit")
35321 (version "0.36.0")
35322 (source
35323 (origin
35324 (method url-fetch)
35325 (uri (pypi-uri "doit" version))
35326 (sha256
35327 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35328 (build-system pyproject-build-system)
35329 ;; This is not a serious test failure. It's probably due to the load path
35330 ;; at test time.
35331 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35332 (propagated-inputs
35333 (list python-cloudpickle python-importlib-metadata))
35334 (native-inputs (list python-pytest python-setuptools python-wheel))
35335 (home-page "https://pydoit.org")
35336 (synopsis "Automation tool to execute any kind of task in a build-tools
35337fashion")
35338 (description "doit is an automation tool that brings the power of
35339build-tools to execute any kind of task.
35340
35341A task describes some computation to be done (actions), and contains some
35342extra meta-data. The actions can be external programs or Python functions. A
35343single task may define more than one action. doit uses the task’s meta-data
35344to:
35345
35346@itemize
35347@item cache task results
35348@item correct execution order
35349@item parallel execution
35350@item powerful dependency system
35351@end itemize")
35352 (license license:expat)))
35353
35354(define-public python-phpserialize
35355 (package
35356 (name "python-phpserialize")
35357 (version "1.3")
35358 (source
35359 (origin
35360 (method git-fetch)
35361 (uri (git-reference
35362 (url "https://github.com/mitsuhiko/phpserialize")
35363 (commit version)))
35364 (file-name (git-file-name name version))
35365 (sha256
35366 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35367 (build-system pyproject-build-system)
35368 (arguments
35369 (list
35370 ;; XXX: Unclear why this test fails.
35371 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35372 #:phases
35373 #~(modify-phases %standard-phases
35374 (add-after 'unpack 'patch-tests
35375 (lambda _
35376 (substitute* "tests.py"
35377 (("assert_\\(b'WP_User' in x\\)")
35378 "assertIn(b'WP_User', x)")))))))
35379 (native-inputs (list python-pytest python-setuptools))
35380 (home-page "https://github.com/mitsuhiko/phpserialize")
35381 (synopsis "Python port of the serialize and unserialize functions of PHP")
35382 (description
35383 "This package provides a port of the @code{serialize} and
35384@code{unserialize} functions of PHP for Python.")
35385 (license license:bsd-3)))
35386
35387(define-public python-pycapnp
35388 (package
35389 (name "python-pycapnp")
35390 (version "2.2.4")
35391 (source
35392 (origin
35393 (method git-fetch)
35394 (uri (git-reference
35395 (url "https://github.com/capnproto/pycapnp")
35396 (commit (string-append "v" version))))
35397 (file-name (git-file-name name version))
35398 (sha256
35399 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35400 (build-system pyproject-build-system)
35401 (arguments
35402 (list
35403 #:phases
35404 #~(modify-phases %standard-phases
35405 (add-before 'build 'set-force-system-capnp
35406 (lambda _
35407 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35408 (add-after 'install 'copy-missing-schemas
35409 (lambda _
35410 (let* ((out #$output)
35411 (capnp-clang #$(this-package-input "capnproto-clang"))
35412 (site-pkgs (car (find-files (string-append out "/lib")
35413 "^site-packages$"
35414 #:directories? #t)))
35415 (target-dir (string-append site-pkgs "/capnp"))
35416 (schema-files (find-files
35417 (string-append capnp-clang
35418 "/include/capnp")
35419 "\\.capnp$")))
35420 (for-each (lambda (file)
35421 (install-file file target-dir)) schema-files))))
35422 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35423 ;; module named 'schema_capnp'". This module is generated
35424 ;; dynamically via import hooks at runtime
35425 (delete 'sanity-check))))
35426 (native-inputs (list pkg-config
35427 python-cython
35428 python-jinja2
35429 python-pkgconfig
35430 python-pytest
35431 python-pytest-asyncio
35432 python-setuptools))
35433 (inputs (list capnproto-clang))
35434 (home-page "https://github.com/capnproto/pycapnp")
35435 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35436 (description
35437 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35438 (license license:bsd-2)))
35439
35440(define-public python-pydevtool
35441 (package
35442 (name "python-pydevtool")
35443 (version "0.3.0")
35444 (source
35445 (origin
35446 (method url-fetch)
35447 (uri (pypi-uri "pydevtool" version))
35448 (sha256
35449 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35450 (build-system pyproject-build-system)
35451 (arguments (list #:tests? #false)) ;no tests
35452 (propagated-inputs (list python-doit python-rich-click))
35453 (native-inputs (list python-setuptools python-wheel))
35454 (home-page "https://github.com/pydoit/pydevtool")
35455 (synopsis "CLI dev tools powered by pydoit")
35456 (description "This package provides command line tools, powered by pydoit.
35457It offers integration with @code{click} and @code{rich} for custom CLI and
35458these linters: @code{pycodestlye}, @code{pyflakes}")
35459 (license license:expat)))
35460
35461(define-public nikola
35462 (package
35463 (name "nikola")
35464 (version "8.3.3")
35465 (source
35466 (origin
35467 (method url-fetch)
35468 (uri (pypi-uri "nikola" version))
35469 (sha256
35470 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35471 (build-system pyproject-build-system)
35472 (arguments
35473 (list
35474 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35475 #:test-flags
35476 #~(list "--durations=10"
35477 "--ignore=tests/integration/test_dev_server.py"
35478 "-k" (string-join
35479 ;; Some time difference in example tests.
35480 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35481 "test_serves_root_dir[https://example.org:1234/blog]"
35482 "test_serves_root_dir[https://example.org:3456/blog/]"
35483 "test_serves_root_dir[https://example.org]"
35484 ;; AssertionError: Calls not found.
35485 "test_write_content_does_not_detroy_text"
35486 ;; AssertionError: assert 'January 10, 2006,
35487 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35488 ;; 12:34:56\u202fPM EST'
35489 "test_format_date_timezone")
35490 " and not "))))
35491 (native-inputs
35492 (list nss-certs-for-test
35493 python-feedparser
35494 python-freezegun
35495 python-pytest
35496 python-setuptools))
35497 (inputs
35498 (list python-babel
35499 python-blinker
35500 python-dateutil
35501 python-docutils
35502 python-doit
35503 python-jinja2 ;; for themes
35504 python-lxml
35505 python-mako
35506 python-markdown
35507 python-natsort
35508 python-notebook ;; for ipynb
35509 python-phpserialize ;; for wordpress import
35510 python-piexif
35511 python-pillow
35512 python-pygments
35513 python-pyrss2gen
35514 python-requests
35515 python-ruamel.yaml ;; for YAML metadata
35516 python-toml
35517 python-unidecode
35518 python-yapsy))
35519 (home-page "https://getnikola.com/")
35520 (synopsis "Modular, fast and simple static website and blog generator")
35521 (description "Nikola generates static websites and blogs. Out of the box,
35522it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35523and has plugins for many other formats.")
35524 (license license:expat)))
35525
35526(define-public nbss-upload
35527 (package
35528 (name "nbss-upload")
35529 (version "0.1")
35530 (source
35531 (origin
35532 (method git-fetch)
35533 (uri (git-reference
35534 (url "https://github.com/notebook-sharing-space/nbss-upload")
35535 (commit (string-append "v" version))))
35536 (file-name (git-file-name name version))
35537 (sha256
35538 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35539 (build-system pyproject-build-system)
35540 (arguments (list #:tests? #f)) ;no tests
35541 (native-inputs (list python-setuptools))
35542 (propagated-inputs (list python-requests))
35543 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35544 (synopsis "Upload notebooks to a notebooksharing.space instance")
35545 (description
35546 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35547notebooksharing.space instance.")
35548 (license license:bsd-3)))
35549
35550(define-public python-reedsolo
35551 (package
35552 (name "python-reedsolo")
35553 (version "1.7.0")
35554 (source
35555 (origin
35556 (method git-fetch)
35557 (uri (git-reference
35558 (url "https://github.com/tomerfiliba/reedsolomon")
35559 (commit (string-append "v" version))))
35560 (file-name (git-file-name name version))
35561 (sha256
35562 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35563 (build-system pyproject-build-system)
35564 (native-inputs (list python-pytest python-setuptools))
35565 (home-page "https://github.com/tomerfiliba/reedsolomon")
35566 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35567 (description
35568 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35569the tutorial at Wikiversity. This is a burst-type implementation, so that it
35570supports any Galois field higher than 2^3, but not binary streams.")
35571 (license license:public-domain)))
35572
35573(define-public python-esprima
35574 (package
35575 (name "python-esprima")
35576 (version "4.0.1")
35577 (source
35578 (origin
35579 (method git-fetch)
35580 (uri (git-reference
35581 (url "https://github.com/Kronuz/esprima-python")
35582 (commit (string-append "v" version))))
35583 (file-name (git-file-name name version))
35584 (sha256
35585 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35586 (build-system pyproject-build-system)
35587 (arguments
35588 (list
35589 ;; XXX: pytest fails to collect tests, and a few tests are failing
35590 ;; using unittest backend. In particular, offsets with math characters
35591 ;; and uncompiled regexps.
35592 #:tests? #f
35593 #:test-backend #~'unittest
35594 #:test-flags
35595 #~(list "-k"
35596 (string-join (list
35597 ;; XXX: Character offsets with maths.
35598 "not test_math_alef"
35599 "test_math_dal_part"
35600 "test_math_kaf_lam"
35601 "test_math_zain_start"
35602 ;; XXX: Uncompiled regexps.
35603 "test_yield_arg_regexp1"
35604 "test_yield_arg_regexp2"
35605 "test_migrated_0005_source"
35606 "test_u_flag_valid_range"
35607 "test_migrated_0049"
35608 "test_migrated_0050_source")
35609 " and not "))))
35610 (native-inputs (list python-setuptools))
35611 (home-page "https://github.com/Kronuz/esprima-python")
35612 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35613 (description
35614 "This package provides ECMAScript parsing infrastructure for
35615multipurpose analysis in Python.")
35616 (license license:bsd-3)))
35617
35618(define-public python-psycopg2-binary
35619 (package
35620 (name "python-psycopg2-binary")
35621 (version "2.9.10")
35622 (source
35623 (origin
35624 (method url-fetch)
35625 (uri (pypi-uri "psycopg2-binary" version))
35626 (sha256
35627 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35628 (build-system pyproject-build-system)
35629 (arguments
35630 ;; Tests are disable because they need a live instance of PostgreSQL.
35631 '(#:tests? #f))
35632 (native-inputs (list python-setuptools python-wheel))
35633 (inputs (list postgresql))
35634 (home-page "https://psycopg.org/")
35635 (synopsis "PostgreSQL database adapter for Python")
35636 (description
35637 "Psycopg is a PostgreSQL database adapter for the Python programming
35638language. Its main features are the complete implementation of the Python DB
35639API 2.0 specification and the thread safety (several threads can share the
35640same connection). It was designed for heavily multi-threaded applications
35641that create and destroy lots of cursors and make a large number of concurrent
35642@code{INSERT}s or @code{UPDATE}s.
35643
35644Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35645being both efficient and secure. It features client-side and
35646server-side cursors, asynchronous communication and notifications,
35647@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35648out-of-the-box and adapted to matching PostgreSQL data types;
35649adaptation can be extended and customized thanks to a flexible objects
35650adaptation system.
35651
35652Psycopg 2 is both Unicode and Python 3 friendly.")
35653 (license license:lgpl3+)))
35654
35655(define-public python-pyfuse3
35656 (package
35657 (name "python-pyfuse3")
35658 (version "3.4.2")
35659 (source
35660 (origin
35661 (method git-fetch)
35662 (uri (git-reference
35663 (url "https://github.com/libfuse/pyfuse3")
35664 (commit (string-append "v" version))))
35665 (file-name (git-file-name name version))
35666 (sha256
35667 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35668 (build-system pyproject-build-system)
35669 (arguments
35670 (list
35671 #:test-flags
35672 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35673 #~(list "--deselect=test/test_api.py::test_listdir")))
35674 (native-inputs
35675 (list pkg-config
35676 python-cython
35677 python-pytest
35678 python-setuptools
35679 python-setuptools-scm))
35680 (inputs
35681 (list fuse))
35682 (propagated-inputs
35683 (list python-trio))
35684 (home-page "https://github.com/libfuse/pyfuse3")
35685 (synopsis "Python bindings to FUSE 3")
35686 (description "This package provides Python 3 bindings for libfuse 3 with
35687async I/O support.")
35688 (license license:gpl2+)))
35689
35690(define-public python-ansi-styles
35691 ;; Releases are not tagged in Git:
35692 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35693 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35694 (revision "0"))
35695 (package
35696 (name "python-ansi-styles")
35697 (version (git-version "0.2.2" revision commit))
35698 (source
35699 (origin
35700 (method git-fetch)
35701 (uri (git-reference
35702 (url "https://github.com/shawwn/ansi-styles-python")
35703 (commit commit)))
35704 (file-name (git-file-name name version))
35705 (sha256
35706 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35707 (build-system pyproject-build-system)
35708 (native-inputs (list python-poetry-core python-pytest))
35709 (home-page "https://github.com/shawwn/ansi-styles-python")
35710 (synopsis "ANSI escape codes for styling strings in the terminal")
35711 (description
35712 "This Python package provide ANSI escape codes
35713for styling strings in the terminal.")
35714 (license license:expat))))
35715
35716(define-public python-multipart
35717 (package
35718 (name "python-multipart")
35719 (version "0.0.29")
35720 (source
35721 (origin
35722 (method git-fetch)
35723 (uri (git-reference
35724 (url "https://github.com/Kludex/python-multipart")
35725 (commit version)))
35726 (file-name (git-file-name name version))
35727 (sha256
35728 (base32 "06rxa2xymdqri8zydy7xw2cnpsnzlv2jzdy9g86m5fpfca0pp9fm"))))
35729 (build-system pyproject-build-system)
35730 (native-inputs
35731 (list python-hatchling
35732 python-pytest
35733 python-pyyaml))
35734 (home-page "https://github.com/Kludex/python-multipart")
35735 (synopsis "Streaming multipart parser for Python")
35736 (description
35737 "This package provides a streaming multipart parser for Python.")
35738 (license license:asl2.0)))
35739
35740(define-public python-aiopg
35741 (package
35742 (name "python-aiopg")
35743 (version "1.4.0")
35744 (source
35745 (origin
35746 (method git-fetch)
35747 (uri (git-reference
35748 (url "https://github.com/aio-libs/aiopg")
35749 (commit (string-append "v" version))))
35750 (file-name (git-file-name name version))
35751 (sha256
35752 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35753 (build-system pyproject-build-system)
35754 (arguments
35755 (list
35756 #:tests? #f ;they need Docker
35757 #:phases
35758 #~(modify-phases %standard-phases
35759 (add-after 'unpack 'use-default-asyncio
35760 ;; async_timeout is deprecated, upstream recommends to use
35761 ;; asyncio, available since Python 3.11.
35762 (lambda _
35763 (substitute* "aiopg/pool.py"
35764 (("async_timeout") "asyncio"))))
35765 (add-after 'unpack 'relax-requirements
35766 (lambda _
35767 (substitute* "setup.py"
35768 (("psycopg2-binary") "psycopg2")
35769 ;; It's a part of Python 3.11+.
35770 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35771 (native-inputs
35772 (list python-setuptools))
35773 (propagated-inputs
35774 (list python-psycopg2))
35775 (home-page "https://aiopg.readthedocs.io")
35776 (synopsis "Postgres integration with asyncio")
35777 (description
35778 "aiopg is a library for accessing a PostgreSQL database from the
35779asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35780Psycopg database driver.")
35781 (license license:bsd-3)))
35782
35783(define-public python-shtab
35784 (package
35785 (name "python-shtab")
35786 (version "1.7.1")
35787 (source
35788 (origin
35789 (method url-fetch)
35790 (uri (pypi-uri "shtab" version))
35791 (sha256
35792 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35793 (build-system pyproject-build-system)
35794 (native-inputs
35795 (list bash
35796 python-pytest
35797 python-pytest-timeout
35798 python-setuptools
35799 python-setuptools-scm
35800 python-wheel))
35801 (home-page "https://github.com/iterative/shtab")
35802 (synopsis "Automagic shell tab completion for Python CLI applications")
35803 (description
35804 "This package automatically generates shell tab completion scripts for
35805Python CLI apps.")
35806 (license license:asl2.0)))
35807
35808(define-public python-pyperf
35809 (package
35810 (name "python-pyperf")
35811 (version "2.10.0")
35812 (source
35813 (origin
35814 (method git-fetch)
35815 (uri (git-reference
35816 (url "https://github.com/psf/pyperf")
35817 (commit version)))
35818 (file-name (git-file-name name version))
35819 (sha256
35820 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35821 (build-system pyproject-build-system)
35822 (arguments
35823 (list
35824 #:test-flags
35825 #~(list "--ignore=pyperf/tests/test_examples.py")))
35826 (native-inputs
35827 (list python-psutil-bootstrap
35828 python-pytest
35829 python-setuptools))
35830 (home-page "https://github.com/psf/pyperf")
35831 (synopsis "Toolkit for running Python benchmarks")
35832 (description
35833 "The Python @code{pyperf} module is a toolkit for writing, running and
35834analyzing benchmarks. It features a simple API that can:
35835
35836@itemize
35837@item automatically calibrate a benchmark for a time budget;
35838@item spawn multiple worker processes;
35839@item compute the mean and standard deviation;
35840@item detect if a benchmark result seems unstable;
35841@item store benchmark results in JSON format;
35842@item support multiple units: seconds, bytes and integer.
35843@end itemize")
35844 (license license:expat)))
35845
35846(define-public python-pydispatcher
35847 (package
35848 (name "python-pydispatcher")
35849 (version "2.0.7")
35850 (source
35851 (origin
35852 (method url-fetch)
35853 (uri (pypi-uri "PyDispatcher" version))
35854 (sha256
35855 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35856 (build-system pyproject-build-system)
35857 (native-inputs (list python-pytest python-setuptools))
35858 (home-page "https://pydispatcher.sourceforge.net")
35859 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35860 (description
35861 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35862@code{dispatcher.py} module. It provides the Python programmer with a robust
35863mechanism for event routing within various application contexts.
35864
35865Included in the package are the robustapply and saferef modules, which
35866provide the ability to selectively apply arguments to callable objects
35867and to reference instance methods using weak-references.")
35868 (license license:bsd-3)))
35869
35870(define-public python-pyee
35871 (package
35872 (name "python-pyee")
35873 (version "13.0.1")
35874 (source
35875 (origin
35876 (method git-fetch)
35877 (uri (git-reference
35878 (url "https://github.com/jfhbrook/pyee")
35879 (commit (string-append "v" version))))
35880 (file-name (git-file-name name version))
35881 (sha256
35882 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35883 (build-system pyproject-build-system)
35884 (propagated-inputs (list python-typing-extensions))
35885 (native-inputs
35886 (list python-mock
35887 python-pytest
35888 python-pytest-asyncio
35889 python-pytest-trio
35890 python-setuptools
35891 python-trio
35892 python-twisted))
35893 (home-page "https://github.com/jfhbrook/pyee")
35894 (synopsis "Emit events with Python")
35895 (description
35896 "This package provides a port of node.js's EventEmitter to
35897python. Additionally, it includes a number of subclasses useful for
35898implementing async and threaded programming in python, such as async/await.")
35899 (license license:expat)))
35900
35901(define-public python-pypubsub
35902 (package
35903 (name "python-pypubsub")
35904 (version "4.0.3")
35905 (source
35906 (origin
35907 (method git-fetch)
35908 (uri (git-reference
35909 (url "https://github.com/schollii/pypubsub")
35910 (commit (string-append "v" version))))
35911 (file-name (git-file-name name version))
35912 (sha256
35913 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35914 (build-system pyproject-build-system)
35915 (arguments
35916 (list
35917 #:phases
35918 #~(modify-phases %standard-phases
35919 (replace 'check
35920 (lambda* (#:key tests? #:allow-other-keys)
35921 (when tests?
35922 (with-directory-excursion "tests/suite"
35923 (invoke "py.test"))))))))
35924 (native-inputs
35925 (list python-pytest
35926 python-setuptools
35927 python-wheel))
35928 (home-page "https://github.com/schollii/pypubsub")
35929 (synopsis "Python publish-subcribe library")
35930 (description
35931 "This library provides a publish-subscribe API to facilitate event-based
35932or message-based architecture in a single-process application. It is centered
35933on the notion of a topic - senders publish messages of a given topic, and
35934listeners subscribe to messages of a given topic, all inside the same
35935process.")
35936 (license license:bsd-2)))
35937
35938(define-public python-queuelib
35939 (package
35940 (name "python-queuelib")
35941 (version "1.8.0")
35942 (source
35943 (origin
35944 (method git-fetch)
35945 (uri (git-reference
35946 (url "https://github.com/scrapy/queuelib")
35947 (commit (string-append "v" version))))
35948 (file-name (git-file-name name version))
35949 (sha256
35950 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35951 (build-system pyproject-build-system)
35952 (native-inputs (list python-hatchling python-pytest))
35953 (home-page "https://github.com/scrapy/queuelib")
35954 (synopsis "Collection of queues for Python")
35955 (description
35956 "Queuelib is a Python library that implements object collections which
35957are stored in memory or persisted to disk, provide a simple API, and run fast.
35958
35959Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35960by priority and queues that are emptied in a round-robin fashion.")
35961 (license license:bsd-3)))
35962
35963(define-public python-posix-ipc
35964 (package
35965 (name "python-posix-ipc")
35966 (version "1.3.2")
35967 (source
35968 (origin
35969 (method git-fetch)
35970 (uri (git-reference
35971 (url "https://github.com/osvenskan/posix_ipc")
35972 (commit (string-append "rel" version))))
35973 (file-name (git-file-name name version))
35974 (sha256
35975 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35976 (build-system pyproject-build-system)
35977 (arguments
35978 (list
35979 #:test-flags
35980 ;; XXX: Collection fails due to stdin configuration.
35981 #~(list "--ignore=tests/test_memory.py")
35982 #:phases
35983 #~(modify-phases %standard-phases
35984 (add-after 'unpack 'set-cc-path
35985 (lambda _
35986 (setenv "CC" #$(cc-for-target)))))))
35987 (native-inputs (list python-pytest python-setuptools))
35988 (home-page "https://semanchuk.com/philip/posix_ipc/")
35989 (synopsis "POSIX IPC primitives for Python")
35990 (description
35991 "This package provides POSIX IPC primitives - semaphores, shared memory and
35992message queues for Python.")
35993 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35994
35995(define-public python-itemadapter
35996 (package
35997 (name "python-itemadapter")
35998 (version "0.12.0")
35999 (source
36000 (origin
36001 (method git-fetch)
36002 (uri (git-reference
36003 (url "https://github.com/scrapy/itemadapter")
36004 (commit (string-append "v" version))))
36005 (file-name (git-file-name name version))
36006 (sha256
36007 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
36008 (build-system pyproject-build-system)
36009 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
36010 (native-inputs (list python-hatchling))
36011 (home-page "https://github.com/scrapy/itemadapter")
36012 (synopsis "Common interface for data container classes")
36013 (description
36014 "The ItemAdapter class is a wrapper for data container objects, providing
36015a common interface to handle objects of different types in an uniform manner,
36016regardless of their underlying implementation.
36017
36018Currently supported types are:
36019@itemize
36020@item scrapy.item.Item
36021@item dict
36022@item dataclass-based classes
36023@item attrs-based classes
36024@item pydantic-based classes
36025@end itemize
36026
36027Additionally, interaction with arbitrary types is supported by
36028implementing a pre-defined interface.")
36029 (license license:bsd-3)))
36030
36031(define-public python-itemloaders
36032 (package
36033 (name "python-itemloaders")
36034 (version "1.3.2")
36035 (source
36036 (origin
36037 (method url-fetch)
36038 (uri (pypi-uri "itemloaders" version))
36039 (sha256
36040 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
36041 (build-system pyproject-build-system)
36042 (native-inputs
36043 (list python-packaging
36044 python-pytest
36045 python-setuptools
36046 python-wheel))
36047 (propagated-inputs
36048 (list python-itemadapter python-jmespath python-parsel))
36049 (home-page "https://github.com/scrapy/itemloaders")
36050 (synopsis "Base library for scrapy's ItemLoader")
36051 (description "Itemloaders is a library that helps you collect data
36052from HTML and XML sources. It comes in handy to extract data from web
36053pages, as it supports data extraction using CSS and XPath Selectors.
36054
36055It’s specially useful when you need to standardize the data from many
36056sources. For example, it allows you to have all your casting and
36057parsing rules in a single place.")
36058 (license license:bsd-3)))
36059
36060(define-public python-iterable-io
36061 (package
36062 (name "python-iterable-io")
36063 (version "1.0.0")
36064 (source
36065 (origin
36066 (method url-fetch)
36067 (uri (pypi-uri "iterable-io" version))
36068 (sha256
36069 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
36070 (build-system pyproject-build-system)
36071 (native-inputs (list python-setuptools python-pytest))
36072 (home-page "https://github.com/pR0Ps/iterable-io")
36073 (synopsis "Adapt generators and other iterables to a file-like interface")
36074 (description
36075 "@code{iterable-io} is a small Python library that provides an adapter so
36076that it's possible to read from
36077@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
36078in the same way as
36079@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
36080objects.")
36081 (license license:lgpl3)))
36082
36083(define-public python-iteround
36084 (package
36085 (name "python-iteround")
36086 (version "1.0.4")
36087 ;; PyPI only has wheels.
36088 (source (origin
36089 (method git-fetch)
36090 (uri (git-reference
36091 (url "https://github.com/cgdeboer/iteround")
36092 (commit (string-append "v" version))))
36093 (file-name (git-file-name name version))
36094 (sha256
36095 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
36096 (build-system pyproject-build-system)
36097 (native-inputs
36098 (list python-pytest python-setuptools python-wheel))
36099 (home-page "https://github.com/cgdeboer/iteround")
36100 (synopsis "Sum-safe rounding for Iterables")
36101 (description "Iteround is a standard library sum-safe rounding library for
36102Python iterables (lists, tuples, dicts).")
36103 (license license:expat)))
36104
36105(define-public python-hypy-utils
36106 (package
36107 (name "python-hypy-utils")
36108 (version "1.0.29")
36109 (source
36110 (origin
36111 (method url-fetch)
36112 (uri (pypi-uri "hypy_utils" version))
36113 (sha256
36114 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
36115 (build-system pyproject-build-system)
36116 (arguments (list #:tests? #f)) ; No tests upstream.
36117 (native-inputs (list python-setuptools))
36118 (home-page "https://github.com/hykilpikonna/HyPyUtils")
36119 (synopsis "Python utility functions for HyDEV")
36120 (description "This module provides Python utility functions for modifying
36121and setting the color of terminal output, via HyDEV.")
36122 (license license:expat)))
36123
36124(define-public python-mike
36125 (package
36126 (name "python-mike")
36127 (version "2.1.3")
36128 (source
36129 (origin
36130 (method git-fetch) ; no tests data in PyPi package
36131 (uri (git-reference
36132 (url "https://github.com/jimporter/mike")
36133 (commit (string-append "v" version))))
36134 (file-name (git-file-name name version))
36135 (sha256
36136 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
36137 (build-system pyproject-build-system)
36138 (arguments
36139 (list
36140 #:test-flags
36141 ;; Most of integration tests hang or fail.
36142 #~(list "--ignore=test/integration/"
36143 ;; AttributeError: 'NoneType' object has no attribute 'group'
36144 "--ignore=test/unit/test_commands.py"
36145 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
36146 (native-inputs
36147 (list git-minimal/pinned
36148 python-pytest
36149 python-setuptools
36150 python-shtab
36151 python-wheel))
36152 (propagated-inputs
36153 (list python-importlib-metadata
36154 python-importlib-resources
36155 python-jinja2
36156 python-mkdocs
36157 python-pyparsing
36158 python-pyyaml
36159 python-pyyaml-env-tag
36160 python-verspec))
36161 (home-page "https://github.com/jimporter/mike")
36162 (synopsis "Manage multiple versions of MkDocs-powered documentation")
36163 (description
36164 "This package provides a Python utility to easily deploy multiple
36165versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
36166to Github via gh-pages.")
36167 (license license:bsd-3)))
36168
36169(define-public python-arpeggio
36170 (package
36171 (name "python-arpeggio")
36172 (version "2.0.2")
36173 (source
36174 (origin
36175 (method url-fetch)
36176 (uri (pypi-uri "Arpeggio" version))
36177 (sha256
36178 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
36179 (build-system pyproject-build-system)
36180 (native-inputs
36181 (list python-pytest
36182 python-setuptools
36183 python-wheel))
36184 (home-page "https://github.com/textX/Arpeggio")
36185 (synopsis "Packrat parser interpreter for Python")
36186 (description
36187 "This Python library provides a recursive descent parser with
36188backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
36189based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
36190for DSL development but it can be used for all sorts of general purpose
36191parsing.")
36192 (license license:expat)))
36193
36194(define-public python-flatten-json
36195 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
36196 ;; the commit associated with 0.1.14 version.
36197 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
36198 (revision "0"))
36199 (package
36200 (name "python-flatten-json")
36201 (version (git-version "0.1.14" revision commit))
36202 (source
36203 (origin
36204 (method git-fetch) ; no tests in PyPI release
36205 (uri (git-reference
36206 (url "https://github.com/amirziai/flatten")
36207 (commit commit)))
36208 (file-name (git-file-name name version))
36209 (sha256
36210 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
36211 (build-system pyproject-build-system)
36212 (native-inputs
36213 (list python-pytest
36214 python-setuptools
36215 python-wheel))
36216 (propagated-inputs
36217 (list python-six))
36218 (home-page "https://github.com/amirziai/flatten")
36219 (synopsis "Flatten JSON objects")
36220 (description
36221 "The @code{flatten_json} Python library flattens the hierarchy in your
36222object, which can be useful if you want to force your objects into a table.")
36223 (license license:expat))))
36224
36225(define-public python-deepdiff
36226 (package
36227 (name "python-deepdiff")
36228 (version "8.6.1")
36229 (source (origin
36230 (method url-fetch)
36231 (uri (pypi-uri "deepdiff" version))
36232 (sha256
36233 (base32
36234 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
36235 (build-system pyproject-build-system)
36236 (arguments
36237 ;; tests: 1028 passed, 10 skipped, 1 deselected
36238 ;; Ignore Polars test (not packaged).
36239 (list #:test-flags #~(list "-k" "not test_polars")))
36240 (propagated-inputs (list python-click ; for CLI
36241 python-pyyaml ; for CLI
36242 python-orderly-set
36243 python-orjson)) ; for optimization
36244 (native-inputs
36245 (list python-flit-core
36246 python-jsonpickle
36247 python-numpy
36248 python-pandas
36249 python-pydantic
36250 python-pytest
36251 python-pytest-benchmark
36252 python-pytz
36253 python-uuid6
36254 python-tomli-w))
36255 (home-page "https://github.com/seperman/deepdiff")
36256 (synopsis "Deep difference and search of any Python object/data")
36257 (description
36258 "This package provides tools for computing deep differences and searching
36259of any Python object/data. Recreate objects by adding adding deltas to each
36260other.")
36261 (license license:expat)))
36262
36263(define-public python-deepmerge
36264 (package
36265 (name "python-deepmerge")
36266 (version "1.0.1")
36267 (source
36268 (origin
36269 (method url-fetch)
36270 (uri (pypi-uri "deepmerge" version))
36271 (sha256
36272 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36273 (build-system pyproject-build-system)
36274 (native-inputs
36275 (list python-setuptools-scm
36276 python-pytest
36277 python-setuptools
36278 python-wheel))
36279 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36280 (synopsis "Merge nested data structures")
36281 (description
36282 "The @code{deep-merge} Python library provides a toolset to deeply merge
36283nested data structures in Python like lists and dictionaries.")
36284 (license license:expat)))
36285
36286(define-public python-durationpy
36287 (package
36288 (name "python-durationpy")
36289 (version "0.10")
36290 (source
36291 (origin
36292 (method git-fetch)
36293 (uri (git-reference
36294 (url "https://github.com/icholy/durationpy")
36295 (commit version)))
36296 (file-name (git-file-name name version))
36297 (sha256
36298 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36299 (build-system pyproject-build-system)
36300 (arguments
36301 (list #:test-backend #~'custom
36302 #:test-flags #~(list "test.py")))
36303 (native-inputs (list python-setuptools))
36304 (home-page "https://github.com/icholy/durationpy")
36305 (synopsis "Python <-> Golang time duration formats converter")
36306 (description
36307 "This package implements a functionality to convert between
36308Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36309 (license license:expat)))
36310
36311(define-public python-murmurhash3
36312 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36313 (revision "0"))
36314 (package
36315 (name "python-murmurhash3")
36316 (version (git-version "2.3.5" revision commit))
36317 (source
36318 (origin
36319 (method git-fetch)
36320 (uri (git-reference
36321 (url "https://github.com/veegee/mmh3")
36322 (commit commit)))
36323 (file-name (git-file-name name version))
36324 (sha256
36325 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36326 (build-system pyproject-build-system)
36327 (arguments
36328 (list
36329 #:phases
36330 #~(modify-phases %standard-phases
36331 (add-after 'unpack 'fix-package
36332 (lambda _
36333 (substitute* "mmh3module.cpp"
36334 (("#include <stdio\\.h>")
36335 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36336 (native-inputs
36337 (list python-cython python-pytest python-setuptools python-wheel))
36338 (home-page "https://github.com/veegee/mmh3")
36339 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36340 (description
36341 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36342of fast and robust hash functions. This library is a Python extension module
36343written in C.")
36344 (license license:public-domain))))
36345
36346(define-public python-scooby
36347 (package
36348 (name "python-scooby")
36349 (version "0.11.0")
36350 (source
36351 (origin
36352 (method git-fetch)
36353 (uri (git-reference
36354 (url "https://github.com/banesullivan/scooby")
36355 (commit (string-append "v" version))))
36356 (file-name (git-file-name name version))
36357 (sha256
36358 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36359 (build-system pyproject-build-system)
36360 (arguments
36361 (list
36362 ;; tests: 19 passed, 5 deselected, 1 warning
36363 #:test-flags
36364 ;; AssertionError: assert 'Module not found' == '0.1.0'
36365 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36366 ;; ModuleNotFoundError: No module named 'no_version'
36367 "--deselect=tests/test_scooby.py::test_tracking"
36368 ;; Failed: DID NOT RAISE <class 'OSError'>
36369 "--deselect=tests/test_scooby.py::test_import_os_error"
36370 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36371 "--deselect=tests/test_scooby.py::test_import_time"
36372 ;; Errored
36373 "--deselect=tests/test_scooby.py::test_cli")))
36374 (native-inputs
36375 (list python-beautifulsoup4
36376 python-numpy
36377 python-pytest
36378 python-pyvips
36379 python-scipy
36380 python-setuptools
36381 python-setuptools-scm))
36382 (propagated-inputs
36383 (list python-psutil))
36384 (home-page "https://github.com/banesullivan/scooby")
36385 (synopsis "Report hardware information and Python package versions")
36386 (description
36387 "The Scooby package reports the following information about the currently
36388running system:
36389
36390@itemize
36391@item operating system name;
36392@item hardware information including machine type (e.g., @samp{i386},
36393@samp{x86_64}, etc.), CPU count and total RAM;
36394@item Python environment (e.g., Python, IPython, etc.);
36395@item file system name;
36396@item Python version;
36397@item versions of specified Python packages.
36398@end itemize
36399
36400It can generate reports as HTML tables or plain text lists.
36401
36402Scooby has no required dependencies, and only few optional dependencies.")
36403 (license license:expat)))
36404
36405(define-public python-cymem
36406 (package
36407 (name "python-cymem")
36408 (version "2.0.6")
36409 (source
36410 (origin
36411 (method git-fetch)
36412 (uri (git-reference
36413 (url "https://github.com/explosion/cymem")
36414 (commit (string-append "v" version))))
36415 (file-name (git-file-name name version))
36416 (sha256
36417 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36418 (build-system pyproject-build-system)
36419 (native-inputs (list python-cython python-pytest python-setuptools))
36420 (inputs (list python))
36421 (home-page "https://github.com/explosion/cymem")
36422 (synopsis "Cython memory pool for RAII-style memory management")
36423 (description
36424 "Cymem provides two small memory-management helpers for Cython. They make it
36425easy to tie memory to a Python object's life-cycle, so that the memory is freed
36426when the object is garbage collected.")
36427 (license license:expat)))
36428
36429(define-public python-preshed
36430 (package
36431 (name "python-preshed")
36432 (version "3.0.6")
36433 (source
36434 (origin
36435 (method git-fetch)
36436 (uri (git-reference
36437 (url "https://github.com/explosion/preshed")
36438 (commit (string-append "v" version))))
36439 (file-name (git-file-name name version))
36440 (sha256
36441 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36442 (build-system pyproject-build-system)
36443 (arguments
36444 (list
36445 #:phases
36446 #~(modify-phases %standard-phases
36447 (add-after 'unpack 'patch-msvccompiler
36448 (lambda _
36449 (substitute* "setup.py"
36450 (("from distutils import ccompiler, msvccompiler")
36451 "from distutils import ccompiler")
36452 (("and msvccompiler.*")
36453 ""))))
36454 (replace 'check
36455 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36456 (with-directory-excursion (site-packages inputs outputs)
36457 (for-each delete-file (find-files "." "\\.pyx$"))
36458 (apply (assoc-ref %standard-phases 'check) args)
36459 (delete-file-recursively "preshed/tests")))))))
36460 (native-inputs
36461 (list python-cython python-cymem python-pytest python-setuptools))
36462 (inputs (list python python-cymem python-murmurhash))
36463 (home-page "https://github.com/explosion/preshed")
36464 (synopsis "Cython hash tables that assume keys are pre-hashed")
36465 (description
36466 "Simple but high performance Cython hash table mapping pre-randomized keys
36467to void* values.")
36468 (license license:expat)))
36469
36470(define-public python-catalogue
36471 (package
36472 (name "python-catalogue")
36473 (version "2.0.10")
36474 (source
36475 (origin
36476 (method git-fetch)
36477 (uri (git-reference
36478 (url "https://github.com/explosion/catalogue")
36479 (commit (string-append "v" version))))
36480 (file-name (git-file-name name version))
36481 (sha256
36482 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36483 (build-system pyproject-build-system)
36484 (native-inputs (list python-pytest python-setuptools))
36485 (home-page "https://github.com/explosion/catalogue")
36486 (synopsis "Lightweight function registries for your library")
36487 (description
36488 "This package is a tiny, zero-dependencies library that makes it easy to
36489add function (or object) registries to your code. Function registries are
36490helpful when you have objects that need to be both easily serializable and
36491fully customizable. Instead of passing a function into your object, you pass
36492in an identifier name, which the object can use to lookup the function from
36493the registry. This makes the object easy to serialize, because the name is a
36494simple string. If you instead saved the function, you'd have to use Pickle
36495for serialization, which has many drawbacks.")
36496 (license license:expat)))
36497
36498(define-public python-gatt
36499 (package
36500 (name "python-gatt")
36501 (version "0.2.7")
36502 (source (origin
36503 (method url-fetch)
36504 (uri (pypi-uri "gatt" version))
36505 (sha256
36506 (base32
36507 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36508 (build-system pyproject-build-system)
36509 (arguments (list #:tests? #f)) ; No tests upstream.
36510 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36511 (native-inputs (list python-setuptools))
36512 (home-page "https://github.com/getsenic/gatt-python")
36513 (synopsis "Bluetooth GATT SDK for Python")
36514 (description
36515 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36516Software Development Kit} for Python helps you implement and communicate with
36517any Bluetooth Low Energy device that has a GATT profile. It supports:
36518
36519@itemize @bullet
36520@item Discovering nearby Bluetooth Low Energy devices
36521@item Connecting and disconnecting devices
36522@item Implementing your custom GATT profile
36523@item Accessing all GATT services
36524@item Accessing all GATT characteristics
36525@item Reading characteristic values
36526@item Writing characteristic values
36527@item Subscribing for characteristic value change notifications
36528@end itemize
36529
36530Currently, Linux is the only platform supported by this library.")
36531 (license license:expat)))
36532
36533(define-public python-dbus-fast
36534 (package
36535 (name "python-dbus-fast")
36536 (version "2.44.3")
36537 (source
36538 (origin
36539 (method git-fetch) ;No tests in PyPI package.
36540 (uri (git-reference
36541 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36542 (commit (string-append "v" version))))
36543 (file-name (git-file-name name version))
36544 (sha256
36545 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36546 (build-system pyproject-build-system)
36547 (arguments
36548 (list
36549 #:test-flags
36550 '(list
36551 ;; These tests need pytest_codspeed.
36552 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36553 ;; These tests all fail with:
36554 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36555 ;; set and could not get DISPLAY environment variable to get bus address
36556 "-m" "not asyncio")))
36557 (native-inputs (list python-cython
36558 python-poetry-core
36559 python-setuptools
36560 python-pytest
36561 python-pytest-asyncio
36562 python-covdefaults))
36563 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36564 (synopsis "Faster version of dbus-next")
36565 (description "This package provides a faster version of dbus-next.")
36566 (license license:expat)))
36567
36568(define-public python-bleak
36569 (package
36570 (name "python-bleak")
36571 (version "3.0.2")
36572 (source
36573 (origin
36574 (method git-fetch)
36575 (uri (git-reference
36576 (url "https://github.com/hbldh/bleak")
36577 (commit (string-append "v" version))))
36578 (file-name (git-file-name name version))
36579 (sha256
36580 (base32 "1dlryjgi0pzmjjnssq9498chwnjzsx14kg1kyp1465waybgwvs93"))))
36581 (build-system pyproject-build-system)
36582 (arguments
36583 (list
36584 #:test-flags #~(list "--ignore=tests/integration")))
36585 (native-inputs
36586 (list python-coverage ;hard dependency
36587 python-pytest
36588 python-pytest-asyncio
36589 python-uv-build))
36590 (propagated-inputs
36591 (list python-dbus-fast))
36592 (home-page "https://github.com/hbldh/bleak")
36593 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36594 (description "This package provides a Bluetooth Low Energy platform-agnostic
36595client library.")
36596 (license license:expat)))
36597
36598(define-public python-ndeflib
36599 (package
36600 (name "python-ndeflib")
36601 (version "0.3.3")
36602 (source
36603 (origin
36604 (method url-fetch)
36605 (uri (pypi-uri "ndeflib" version))
36606 (sha256
36607 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36608 (build-system pyproject-build-system)
36609 (arguments
36610 (list
36611 ;; tests: 1571 passed, 37 deselected, 1 warning
36612 ;;
36613 ;; Three test fail with assertion not equal:
36614 ;;
36615 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36616 ;; bytes] - AssertionError
36617 ;;
36618 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36619 ;; 1 bytes] - AssertionError
36620 ;;
36621 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36622 ;; AssertionError
36623 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36624 "test_encode_error"))))
36625 (native-inputs (list python-pytest-8 python-setuptools))
36626 (home-page "https://ndeflib.readthedocs.io/")
36627 (synopsis "NFC Data Exchange Format decoder and encoder.")
36628 (description "This package provides a NFC (Near-Field Communication)
36629Data Exchange Format decoder and encoder.")
36630 (license license:isc)))
36631
36632(define-public python-nfcpy
36633 (package
36634 (name "python-nfcpy")
36635 (version "1.0.4")
36636 (source
36637 (origin
36638 (method url-fetch)
36639 (uri (pypi-uri "nfcpy" version))
36640 (sha256
36641 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36642 (build-system pyproject-build-system)
36643 (arguments
36644 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36645 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36646 python-pyserial))
36647 (native-inputs (list python-setuptools python-wheel))
36648 (home-page "https://github.com/nfcpy/nfcpy")
36649 (synopsis "Python module for Near-Field Communication.")
36650 (description "This package provides a Python module for Near-Field
36651Communication.")
36652 (license license:eupl1.1)))
36653
36654(define-public python-clrprint
36655 (package
36656 (name "python-clrprint")
36657 (version "2.0.1")
36658 (source (origin
36659 (method url-fetch)
36660 (uri (pypi-uri "clrprint" version))
36661 (sha256
36662 (base32
36663 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36664 (build-system pyproject-build-system)
36665 (arguments '(#:tests? #f)) ;there are no tests
36666 (native-inputs
36667 (list python-setuptools))
36668 (propagated-inputs (list python-colorama python-termcolor))
36669 (home-page "https://github.com/AbhijithAJ/clrprint")
36670 (synopsis "Print colorful output in the terminal")
36671 (description "@code{clrprint} is developed to print colorful output in the
36672terminal. It has red, blue, green, yellow, purple and black/white (default)
36673colors.")
36674 (license license:expat)))
36675
36676(define-public python-mido
36677 (package
36678 (name "python-mido")
36679 (version "1.3.3")
36680 (source
36681 (origin
36682 (method git-fetch)
36683 (uri (git-reference
36684 (url "https://github.com/mido/mido")
36685 (commit version)))
36686 (file-name (git-file-name name version))
36687 (sha256
36688 (base32 "0skj6586aprr20ymn70drgbps1x3z5y0xj67crxgf4rinj5dw7kd"))))
36689 (build-system pyproject-build-system)
36690 (propagated-inputs (list python-packaging))
36691 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
36692 (home-page "https://mido.readthedocs.io/en/stable/")
36693 (synopsis "MIDI Objects for Python")
36694 (description
36695 "Mido is a Python library for working with MIDI 1.0 ports, messages and
36696files.")
36697 (license license:expat)))
36698
36699(define-public python-pretty-midi
36700 (package
36701 (name "python-pretty-midi")
36702 (version "0.2.11")
36703 (source
36704 (origin
36705 (method git-fetch)
36706 (uri (git-reference
36707 (url "https://github.com/craffel/pretty-midi")
36708 (commit version)))
36709 (file-name (git-file-name name version))
36710 (sha256
36711 (base32 "1ksxf4pvqn0qdhq56zbsjqwl1a47xfnqnmj83i65anfb6j36sj46"))))
36712 (build-system pyproject-build-system)
36713 (arguments
36714 (list
36715 #:phases
36716 #~(modify-phases %standard-phases
36717 (add-after 'unpack 'remove-six
36718 (lambda _
36719 (substitute* "pretty_midi/pretty_midi.py"
36720 ((".*import six.*")
36721 "")
36722 (("six\\.string_types")
36723 "str"))
36724 (substitute* "setup.py"
36725 (("'six.*',")
36726 "")))))))
36727 (propagated-inputs
36728 (list python-importlib-resources python-mido python-numpy))
36729 (native-inputs
36730 (list python-pytest python-setuptools))
36731 (home-page "https://github.com/craffel/pretty-midi")
36732 (synopsis "Functions and classes for handling MIDI data conveniently")
36733 (description
36734 "@code{pretty_midi} contains utility function/classes for handling MIDI
36735data, so that it's in a format which is easy to modify and extract information
36736from.")
36737 (license license:expat)))
36738
36739(define-public python-musical-scales
36740 (package
36741 (name "python-musical-scales")
36742 ;; PyPI has no tests, git has no tags, use the latest commit corresponding
36743 ;; to v2.0.0.
36744 (properties '((commit . "bdc35b360edda7583806fd6037bef2716f08fc85")
36745 (revision . "0")))
36746 (version (git-version "2.0.0"
36747 (assoc-ref properties 'revision)
36748 (assoc-ref properties 'commit)))
36749 (source
36750 (origin
36751 (method git-fetch)
36752 (uri (git-reference
36753 (url "https://github.com/hmillerbakewell/musical-scales")
36754 (commit (assoc-ref properties 'commit))))
36755 (file-name (git-file-name name version))
36756 (sha256
36757 (base32 "0znkiq6r61h1sj5r24kah6h94c5agfpq4ypadn4i73hry0fkl9fd"))))
36758 (build-system pyproject-build-system)
36759 (native-inputs (list python-pytest python-setuptools))
36760 (home-page "https://github.com/hmillerbakewell/musical-scales")
36761 (synopsis "Retrieve a scale based on a given mode and starting note")
36762 (description
36763 "Retrieve a scale based on a given mode and starting note.
36764Information about these scales can be
36765@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36766Wikipedia}.")
36767 (license license:expat)))
36768
36769(define-public python-langcodes
36770 (package
36771 (name "python-langcodes")
36772 (version "3.5.0")
36773 (source (origin
36774 (method url-fetch)
36775 (uri (pypi-uri "langcodes" version))
36776 (sha256
36777 (base32
36778 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36779 (build-system pyproject-build-system)
36780 (native-inputs
36781 (list python-pytest
36782 python-setuptools
36783 python-setuptools-scm))
36784 (propagated-inputs
36785 ;; [optional:data]
36786 (list python-language-data))
36787 (home-page "https://github.com/rspeer/langcodes")
36788 (synopsis "Python library for working with language codes")
36789 (description
36790 "This package provides a Python library for working with and comparing
36791language codes.
36792
36793@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3679447}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3679547 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36796with it, and it also implements recommendations from the
36797@url{http://cldr.unicode.org/, Unicode CLDR}.
36798
36799@code{python-langcodes} can also refer to a database of language properties
36800and names, built from Unicode CLDR and the IANA subtag registry, if you
36801install @code{python-language-data}.")
36802 (license license:expat)))
36803
36804(define-public python-anyascii
36805 (package
36806 (name "python-anyascii")
36807 (version "0.3.3")
36808 (source (origin
36809 (method url-fetch)
36810 (uri (pypi-uri "anyascii" version))
36811 (sha256
36812 (base32
36813 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36814 (build-system pyproject-build-system)
36815 (native-inputs (list python-pytest python-flit-core))
36816 (home-page "https://anyascii.com")
36817 (synopsis "Unicode to ASCII transliteration")
36818 (description "@code{anyascii} converts Unicode characters to their best
36819ASCII representation.")
36820 (license license:isc)))
36821
36822(define-public python-geomet
36823 (package
36824 (name "python-geomet")
36825 (version "1.1.0")
36826 (source
36827 (origin
36828 (method git-fetch)
36829 (uri (git-reference
36830 (url "https://github.com/geomet/geomet")
36831 (commit version)))
36832 (file-name (git-file-name name version))
36833 (sha256
36834 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36835 (build-system pyproject-build-system)
36836 (native-inputs (list python-pytest python-setuptools))
36837 (propagated-inputs (list python-click python-six))
36838 (home-page "https://github.com/geomet/geomet")
36839 (synopsis
36840 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36841 (description
36842 "This package provides utilities and functions for converting
36843GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36844versa. Extended WKB/WKT are also supported.")
36845 (license license:asl2.0)))
36846
36847(define-public python-cogapp
36848 (package
36849 (name "python-cogapp")
36850 (version "3.3.0")
36851 (source (origin
36852 (method url-fetch)
36853 (uri (pypi-uri "cogapp" version))
36854 (sha256
36855 (base32
36856 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36857 (build-system pyproject-build-system)
36858 (native-inputs (list python-pytest python-setuptools python-wheel))
36859 (home-page "https://nedbatchelder.com/code/cog")
36860 (synopsis "Content generation tool that leverages Python")
36861 (description "Cog is a file generation tool. It allows using pieces of
36862Python code as generators in your source files to generate arbitrary text.")
36863 (license license:expat)))
36864
36865(define-public python-cxxheaderparser
36866 (package
36867 (name "python-cxxheaderparser")
36868 (version "1.7.0")
36869 (source
36870 (origin
36871 (method git-fetch)
36872 (uri (git-reference
36873 (url "https://github.com/robotpy/cxxheaderparser")
36874 (commit version)))
36875 (file-name (git-file-name name version))
36876 (sha256
36877 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36878 (build-system pyproject-build-system)
36879 (native-inputs
36880 (list python-hatch-vcs python-pytest))
36881 (home-page "https://github.com/robotpy/cxxheaderparser/")
36882 (synopsis "Python C++ header parser")
36883 (description "Pure python C++ header parser that parses C++ headers in a
36884mildly naive manner that allows it to handle many C constructs, including
36885many (C++11 and beyond) features.")
36886 (license license:bsd-3)))
36887
36888(define-public python-bsdiff4
36889 (package
36890 (name "python-bsdiff4")
36891 (version "1.2.6")
36892 (source
36893 (origin
36894 (method git-fetch)
36895 (uri (git-reference
36896 (url "https://github.com/ilanschnell/bsdiff4")
36897 (commit version)))
36898 (file-name (git-file-name name version))
36899 (sha256
36900 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36901 (build-system pyproject-build-system)
36902 (arguments
36903 (list
36904 #:test-flags #~(list "--pyargs" "bsdiff4")))
36905 (native-inputs
36906 (list python-pytest
36907 python-setuptools
36908 python-wheel))
36909 (home-page "https://github.com/ilanschnell/bsdiff4")
36910 (synopsis "Binary diff and patch using the BSDIFF4 format")
36911 (description
36912 "This package provides a Python library for the @code{bsdiff} binary diff
36913utility. It also provides two command-line tools, @code{bsdiff4} and
36914@code{bspatch4}.")
36915 (license license:bsd-2)))
36916
36917(define-public python-mpv
36918 (package
36919 (name "python-mpv")
36920 (version "1.0.8")
36921 (source
36922 (origin
36923 (method git-fetch)
36924 (uri (git-reference
36925 (url "https://github.com/jaseg/python-mpv")
36926 (commit (string-append "v" version))))
36927 (file-name (git-file-name name version))
36928 (sha256
36929 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36930 (build-system pyproject-build-system)
36931 (arguments
36932 (list #:phases
36933 #~(modify-phases %standard-phases
36934 (add-before 'build 'patch-reference-to-mpv
36935 (lambda* (#:key inputs #:allow-other-keys)
36936 ;; Without an absolute path it is not able find and load libmpv.
36937 (substitute* "mpv.py"
36938 (("sofile = .*")
36939 (format #f "sofile = '~a/lib/libmpv.so'~%"
36940 #$(this-package-input "mpv"))))))
36941 (add-before 'check 'prepare-for-tests
36942 (lambda _
36943 ;; Fontconfig throws errors when it has no cache dir to use.
36944 (setenv "XDG_CACHE_HOME" (getcwd))
36945 ;; Some tests fail without a writable and readable HOME.
36946 (setenv "HOME" (getcwd))
36947 (setenv "PY_MPV_SKIP_TESTS"
36948 "test_wait_for_property_event_overflow"))))))
36949 (native-inputs
36950 (list python-pytest
36951 python-pyvirtualdisplay
36952 python-setuptools
36953 xorg-server-for-tests))
36954 (inputs (list mpv))
36955 (propagated-inputs (list python-pillow)) ;for raw screenshots
36956 (home-page "https://github.com/jaseg/python-mpv")
36957 (synopsis "Python interface to the mpv media player")
36958 (description
36959 "python-mpv is a ctypes-based python interface to the mpv media player.
36960It gives you more or less full control of all features of the player, just
36961as the lua interface does.")
36962 ;; From the project's README:
36963 ;; python-mpv inherits the underlying libmpv's license, which can be either
36964 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36965 ;; copyright page.
36966 (license license:gpl2+)))
36967
36968(define-public python-biblib
36969 (let ((upstream-version "0.1.0")
36970 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36971 (revision "1"))
36972 (package
36973 (name "python-biblib")
36974 (version (git-version upstream-version revision commit))
36975 (source
36976 (origin
36977 (method git-fetch)
36978 (uri (git-reference
36979 (url "https://github.com/aclements/biblib")
36980 (commit commit)))
36981 (sha256
36982 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36983 (file-name (git-file-name name version))))
36984 (build-system pyproject-build-system)
36985 (arguments (list #:tests? #f)) ; No tests upstream.
36986 (native-inputs (list python-setuptools))
36987 (home-page "https://github.com/aclements/biblib")
36988 (synopsis "BibTeX parsing and transformation library")
36989 (description
36990 "Biblib provides a simple, standalone Python 3 package for parsing
36991BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36992entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36993source code for BibTeX and hence (barring bugs in translation) should be fully
36994compatible with BibTeX's own parser.")
36995 ;; N.B. It seems the parser was translated from WEB by hand: this
36996 ;; package does not contain any generated files.
36997 (license license:expat))))
36998
36999(define-public python-cyclic
37000 (package
37001 (name "python-cyclic")
37002 (version "1.0.0")
37003 (source
37004 (origin
37005 (method git-fetch)
37006 (uri (git-reference
37007 (url "https://github.com/neurobin/cyclic")
37008 ;; Release is not tagged on github, see
37009 ;; https://github.com/neurobin/cyclic/issues/2
37010 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
37011 (file-name (git-file-name name version))
37012 (sha256
37013 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
37014 (build-system pyproject-build-system)
37015 (arguments (list #:test-backend #~'unittest))
37016 (native-inputs (list python-setuptools))
37017 (home-page "https://github.com/neurobin/cyclic")
37018 (synopsis "Handle cyclic relations")
37019 (description "This package handles cyclic relations compared by value.")
37020 (license license:bsd-3)))
37021
37022(define-public python-rcslice
37023 (package
37024 (name "python-rcslice")
37025 (version "1.1.0")
37026 (source
37027 (origin
37028 (method git-fetch)
37029 (uri (git-reference
37030 (url "https://github.com/neurobin/rcslice")
37031 ;; Releases are not tagged on github, see
37032 ;; https://github.com/neurobin/rcslice/issues/2
37033 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
37034 (file-name (git-file-name name version))
37035 (sha256
37036 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
37037 (build-system pyproject-build-system)
37038 (arguments (list #:test-backend #~'unittest))
37039 (native-inputs (list python-setuptools))
37040 (home-page "https://github.com/neurobin/rcslice")
37041 (synopsis "Slice a list of sliceables")
37042 (description
37043 "This package provides Python module to slice a list of sliceables (1
37044indexed, both start and end index are inclusive). Helps to slice file content
37045line by line or column by column or a combination of both.")
37046 (license license:bsd-3)))
37047
37048(define-public python-rpds-py
37049 (package
37050 (name "python-rpds-py")
37051 (version "0.30.0")
37052 (source (origin
37053 (method url-fetch)
37054 (uri (pypi-uri "rpds_py" version))
37055 (sha256
37056 (base32
37057 "110y8k62b9xb3slny7gf89943xpbji3s7vl7yz0g0jh1j37zg3yx"))))
37058 (build-system cargo-build-system)
37059 (arguments
37060 (list
37061 #:imported-modules `(,@%cargo-build-system-modules
37062 ,@%pyproject-build-system-modules)
37063 #:modules '((guix build cargo-build-system)
37064 ((guix build pyproject-build-system) #:prefix py:)
37065 (guix build utils))
37066 #:phases
37067 #~(modify-phases %standard-phases
37068 (add-after 'build 'build-python-module
37069 (assoc-ref py:%standard-phases 'build))
37070 (add-after 'build-python-module 'install-python-module
37071 (assoc-ref py:%standard-phases 'install)))
37072 #:install-source? #false))
37073 (inputs
37074 (cons maturin (cargo-inputs 'python-rpds-py)))
37075 (native-inputs
37076 (list python-wrapper))
37077 (home-page "https://github.com/crate-py/rpds")
37078 (synopsis "Bindings to Rust rpds for persistent data structures")
37079 (description "This package provides Python bindings to the Rust rpds crate
37080for persistent data structures. It was written initially to support replacing
37081@code{python-pyrsistent}.")
37082 (license license:expat)))
37083
37084(define-public python-nanoid
37085 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
37086 (revision "0"))
37087 (package
37088 (name "python-nanoid")
37089 (version "2.0.0")
37090 (source
37091 (origin
37092 (method git-fetch)
37093 (uri
37094 (git-reference
37095 (url "https://github.com/puyuan/py-nanoid")
37096 (commit commit)))
37097 (file-name (git-file-name name commit))
37098 (sha256
37099 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
37100 (build-system pyproject-build-system)
37101 (native-inputs (list python-pytest python-setuptools))
37102 (home-page "https://github.com/puyuan/py-nanoid")
37103 (synopsis "Unique string ID generator")
37104 (description
37105 "This package provides a tiny, secure, URL-friendly, unique string ID
37106generator for Python.")
37107 (license license:expat))))
37108
37109(define-public python-misc-utils
37110 (package
37111 (name "python-misc-utils")
37112 (version "0.28")
37113 (source
37114 (origin
37115 (method git-fetch)
37116 (uri (git-reference
37117 (url "https://github.com/davidel/py_misc_utils")
37118 (commit version)))
37119 (file-name (git-file-name name version))
37120 (sha256
37121 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
37122 (build-system pyproject-build-system)
37123 (arguments
37124 (list
37125 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
37126 #:test-backend #~'custom
37127 #:test-flags #~(list "test/test_runner.py")))
37128 (propagated-inputs
37129 (list python-numpy python-pandas python-psutil python-pyyaml))
37130 (native-inputs (list python-setuptools))
37131 (home-page "https://github.com/davidel/py_misc_utils")
37132 (synopsis "Collection of Python utilities")
37133 (description "This package provides a collection of Python miscellaneous
37134utility tools mainly used by other projects of the same author.")
37135 (license license:asl2.0)))
37136
37137(define-public python-misskey
37138 (package
37139 (name "python-misskey")
37140 (version "4.1.0")
37141 (source (origin
37142 (method git-fetch)
37143 (uri (git-reference
37144 (url "https://github.com/YuzuRyo61/Misskey.py")
37145 (commit (string-append "v" version))))
37146 (file-name (git-file-name name version))
37147 (sha256
37148 (base32
37149 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
37150 (build-system pyproject-build-system)
37151 (arguments (list #:tests? #f)) ;needs network
37152 (native-inputs (list python-setuptools))
37153 (propagated-inputs (list python-requests))
37154 (home-page "https://misskeypy.readthedocs.io")
37155 (synopsis "Python bindings for Misskey's API")
37156 (description
37157 "This package provides access to Misskey's API. Misskey is a SNS
37158platform using the ActivityPub protocol.")
37159 (license license:expat)))
37160
37161(define-public python-lief
37162 (package
37163 (name "python-lief")
37164 (version "1.0.0")
37165 (source
37166 (origin
37167 (method git-fetch)
37168 (uri (git-reference
37169 (url "https://github.com/lief-project/LIEF")
37170 (commit version)))
37171 (file-name (git-file-name name version))
37172 (sha256
37173 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
37174 (build-system pyproject-build-system)
37175 (arguments
37176 (list
37177 ;; TODO: Tests neeed some setup, see:
37178 ;; <.github/workflows/linux-x86-64.yml>.
37179 #:tests? #f
37180 #:phases
37181 #~(modify-phases %standard-phases
37182 (add-before 'build 'change-directory
37183 (lambda _
37184 (chdir "api/python"))))))
37185 (native-inputs
37186 (list ninja
37187 python-pydantic
37188 python-scikit-build-core
37189 python-tomli))
37190 (home-page "https://github.com/lief-project/LIEF")
37191 (synopsis "Library to instrument executable formats")
37192 (description
37193 "@code{python-lief} is a cross platform library which can parse, modify
37194and abstract ELF, PE and MachO formats.")
37195 (license license:asl2.0)))
37196
37197(define-public python-eris
37198 (package
37199 (name "python-eris")
37200 (version "1.0.0")
37201 (source
37202 (origin
37203 (method url-fetch)
37204 (uri (pypi-uri "eris" version))
37205 (sha256
37206 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
37207 (build-system pyproject-build-system)
37208 (arguments
37209 ;; No tests in PyPI, tests miss data files in Git:
37210 ;; - tests/test-vectors/test_encode
37211 ;; - tests/test-vectors/test_decode
37212 (list #:tests? #f))
37213 (native-inputs
37214 (list python-setuptools
37215 python-wheel))
37216 (propagated-inputs
37217 (list python-aiocoap
37218 python-pycryptodome))
37219 (home-page "https://codeberg.org/eris/python-eris")
37220 (synopsis "Python implementation of ERIS")
37221 (description
37222 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
37223Storage}.")
37224 (license license:lgpl3+)))
37225
37226(define-public python-pymonad
37227 (package
37228 (name "python-pymonad")
37229 (version "2.4.0")
37230 (source
37231 (origin
37232 (method git-fetch)
37233 (uri (git-reference
37234 (url "https://github.com/jasondelaat/pymonad")
37235 (commit (string-append "v" version))))
37236 (file-name (git-file-name name version))
37237 (sha256
37238 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
37239 (build-system pyproject-build-system)
37240 (arguments
37241 (list
37242 #:phases
37243 #~(modify-phases %standard-phases
37244 (replace 'check
37245 (lambda* (#:key tests? #:allow-other-keys)
37246 (when tests?
37247 (invoke "./run_tests.sh")))))))
37248 (native-inputs (list python-setuptools))
37249 (home-page "https://github.com/jasondelaat/pymonad")
37250 (synopsis "Monadic style functional programming for Python")
37251 (description "@code{python-pymonad} implements data structures typically
37252available in purely functional or functional first programming languages such
37253as Haskell and F#. Included are
37254
37255@itemize
37256@item Monad and Monoid data types with several common monads such as Maybe and
37257State
37258@item Useful tools such as the @code{@@curry} decorator for defining curried
37259functions
37260@item Type annotations to help ensure correct usage
37261@end itemize")
37262 (license license:bsd-3)))
37263
37264(define-public python-markdown-strings
37265 (package
37266 (name "python-markdown-strings")
37267 (version "3.3.0")
37268 (source
37269 (origin
37270 (method git-fetch)
37271 (uri (git-reference
37272 (url "https://github.com/awesmubarak/markdown_strings.git")
37273 (commit (string-append "v" version))))
37274 (file-name (git-file-name name version))
37275 (sha256
37276 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
37277 (build-system pyproject-build-system)
37278 (arguments
37279 (list
37280 #:test-backend #~'custom
37281 #:test-flags #~(list "test.py")))
37282 (native-inputs (list python-setuptools))
37283 (propagated-inputs (list python-lxml python-six))
37284 (home-page "https://github.com/awesmubarak/markdown_strings")
37285 (synopsis "Python library to create markdown-formatted text")
37286 (description "This package allows the programmatic creation of
37287markdown-compliant strings.")
37288 (license license:expat)))
37289
37290(define-public python-icecream
37291 (package
37292 (name "python-icecream")
37293 (version "2.1.9")
37294 (source
37295 (origin
37296 (method git-fetch)
37297 (uri (git-reference
37298 (url "https://github.com/gruns/icecream")
37299 (commit (string-append "v" version))))
37300 (file-name (git-file-name name version))
37301 (sha256
37302 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
37303 (build-system pyproject-build-system)
37304 (native-inputs
37305 (list python-hypothesis
37306 python-pytest
37307 python-setuptools))
37308 (propagated-inputs
37309 (list python-asttokens
37310 python-colorama
37311 python-executing
37312 python-pygments))
37313 (home-page "https://github.com/gruns/icecream")
37314 (synopsis
37315 "Single function call to debug variables, expressions, and program execution")
37316 (description
37317 "This tool lets you debug variables, expressions, and program execution
37318with one function call. IceCream makes print debugging a little sweeter.")
37319 (license license:expat)))
37320
37321;; XXX: Deprecated on <2026-07-12>.
37322(define-deprecated/public-alias python-icegrams
37323 (@ (gnu packages language) python-icegrams))
37324
37325(define-public python-sbsv
37326 (package
37327 (name "python-sbsv")
37328 (version "0.3.1")
37329 (source
37330 (origin
37331 (method git-fetch)
37332 (uri (git-reference
37333 (url "https://github.com/hsh814/sbsv")
37334 (commit (string-append "v" version))))
37335 (file-name (git-file-name name version))
37336 (sha256
37337 (base32 "0wgqb7j2slp05zm6s2qqsb5821vzz1w3jdcwsn2k3jfj7mylnryq"))
37338 (modules '((guix build utils)))
37339 (snippet
37340 #~(begin ;unbundle c-sbsv
37341 (delete-file-recursively "libsbsv")
37342 (substitute* "setup.py"
37343 ((" *\"libsbsv/src/.*") "")
37344 ((" *include_dirs=.*,") "libraries=['sbsv'],")
37345 ((" *optional=True,.*") ""))))))
37346 (build-system pyproject-build-system)
37347 (arguments
37348 (list #:phases #~(modify-phases %standard-phases
37349 (add-after 'unpack 'remove-setuptools-legacy
37350 (lambda _
37351 (substitute* "pyproject.toml"
37352 ((":__legacy__") "")))))))
37353 (native-inputs (list python-setuptools python-pytest))
37354 (inputs (list c-sbsv))
37355 (home-page "https://github.com/hsh814/sbsv")
37356 (synopsis "Square bracket separated values")
37357 (description
37358 "This Python package provides a schema-driven structured log data format
37359for the ease of writing and parsing.")
37360 (license license:expat)))
37361
37362(define-public python-sqlglot
37363 (package
37364 (name "python-sqlglot")
37365 (version "26.33.0")
37366 (source
37367 (origin
37368 (method url-fetch)
37369 (uri (pypi-uri "sqlglot" version))
37370 (sha256
37371 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37372 (build-system pyproject-build-system)
37373 (arguments
37374 (list
37375 #:test-backend #~'unittest
37376 #:phases
37377 #~(modify-phases %standard-phases
37378 (add-before 'check 'pre-check
37379 (lambda _
37380 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37381 (native-inputs
37382 (list python-duckdb
37383 python-pytz
37384 python-pandas
37385 python-setuptools
37386 python-setuptools-scm
37387 python-tzdata))
37388 (home-page "https://sqlglot.com/")
37389 (synopsis "Python SQL Parser and Transpiler")
37390 (description
37391 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37392engine. It can be used to format SQL or translate between 31 different
37393dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37394BigQuery. It aims to read a wide variety of SQL inputs and output
37395syntactically and semantically correct SQL in the targeted dialects.")
37396 (license license:expat)))
37397
37398(define-public python-sqlglotrs
37399 (package
37400 (inherit python-sqlglot)
37401 (name "python-sqlglotrs")
37402 (version "0.6.1")
37403 (source
37404 (origin
37405 (method url-fetch)
37406 (uri (pypi-uri "sqlglotrs" version))
37407 (sha256
37408 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37409 (build-system cargo-build-system)
37410 (arguments
37411 (list
37412 #:install-source? #false
37413 #:tests? #f ;no tests
37414 #:imported-modules `(,@%cargo-build-system-modules
37415 ,@%pyproject-build-system-modules)
37416 #:modules '((guix build cargo-build-system)
37417 ((guix build pyproject-build-system) #:prefix py:)
37418 (guix build utils))
37419 #:phases
37420 #~(modify-phases %standard-phases
37421 (add-after 'build 'build-python-module
37422 (assoc-ref py:%standard-phases 'build))
37423 (add-after 'build-python-module 'install-python-module
37424 (assoc-ref py:%standard-phases 'install))
37425 (add-after 'install-python-module 'add-install-to-pythonpath
37426 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37427 (native-inputs
37428 (list maturin
37429 python-wrapper))
37430 (inputs
37431 (cargo-inputs 'python-sqlglotrs))))
37432
37433(define-public python-sqltrie
37434 (package
37435 (name "python-sqltrie")
37436 (version "0.11.2")
37437 (home-page "https://github.com/iterative/sqltrie/")
37438 (source
37439 (origin
37440 (method url-fetch)
37441 (uri (pypi-uri "sqltrie" version))
37442 (sha256
37443 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37444 (build-system pyproject-build-system)
37445 (arguments
37446 (list
37447 #:test-flags
37448 #~(list "--ignore=tests/benchmarks/"
37449 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37450 ;; yet in Guix.
37451 "--ignore=src/sqltrie/__pyinstaller")))
37452 (native-inputs
37453 (list python-pytest
37454 python-pytest-mock
37455 python-pytest-sugar
37456 python-setuptools
37457 python-setuptools-scm))
37458 (propagated-inputs
37459 (list python-attrs
37460 python-orjson
37461 python-pygtrie))
37462 (synopsis "SQL-based prefix tree for Python")
37463 (description
37464 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37465python-diskcache.")
37466 (license license:asl2.0)))
37467
37468(define-public python-socksipy-branch
37469 (package
37470 (name "python-socksipy-branch")
37471 (version "1.01")
37472 (source
37473 (origin
37474 (method url-fetch)
37475 (uri (pypi-uri "SocksiPy-branch" version))
37476 (sha256
37477 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37478 (build-system pyproject-build-system)
37479 (arguments (list #:tests? #f)) ; There are no tests
37480 (native-inputs (list python-setuptools))
37481 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37482 (synopsis "Python SOCKS module")
37483 (description
37484 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37485interface that supports connections to any TCP service through the use of a
37486SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37487this is a branch created by Mario Vilas to address some open issues,as the
37488original project seems to have been abandoned circa 2007.")
37489 (license license:bsd-3)))
37490
37491(define-public python-socksipychain
37492 (package
37493 (name "python-socksipychain")
37494 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37495 (revision . "0")))
37496 (version (git-version "2.1.3"
37497 (assoc-ref properties 'revision)
37498 (assoc-ref properties 'commit)))
37499 (source
37500 (origin
37501 (method git-fetch)
37502 (uri (git-reference
37503 (url "https://github.com/pagekite/PySocksipyChain")
37504 (commit (assoc-ref properties 'commit))))
37505 (file-name (git-file-name name version))
37506 (sha256
37507 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37508 (build-system pyproject-build-system)
37509 (arguments (list #:tests? #f)) ; Tests try to access the network.
37510 (native-inputs (list python-setuptools))
37511 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37512 (synopsis "Python SOCKS module with chained proxies support")
37513 (description
37514 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37515adds support for arbitrary chaining of proxy servers and various modes of
37516TLS/SSL encryption. It was developed for use in PageKite, and also includes
37517a simple netcat replacement with chaining support.")
37518 (license license:bsd-3)))
37519
37520(define-public python-sortedcollections
37521 (package
37522 (name "python-sortedcollections")
37523 (version "2.1.0")
37524 (source
37525 (origin
37526 (method git-fetch)
37527 (uri (git-reference
37528 (url "https://github.com/grantjenks/python-sortedcollections")
37529 (commit (string-append "v" version))))
37530 (file-name (git-file-name name version))
37531 (sha256
37532 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37533 (build-system pyproject-build-system)
37534 (native-inputs (list python-setuptools python-pytest python-wheel))
37535 (propagated-inputs (list python-sortedcontainers))
37536 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37537 (synopsis "Python Sorted Collections")
37538 (description "Sorted Collections is a Python sorted collections library.")
37539 (license license:asl2.0)))
37540
37541(define-public python-sortedcontainers
37542 (package
37543 (name "python-sortedcontainers")
37544 (version "2.4.0")
37545 (source
37546 (origin
37547 (method git-fetch) ;no tests in PyPI archive
37548 (uri (git-reference
37549 (url "https://github.com/grantjenks/python-sortedcontainers")
37550 (commit (string-append "v" version))))
37551 (file-name (git-file-name name version))
37552 (sha256
37553 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37554 (build-system pyproject-build-system)
37555 (arguments
37556 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37557 (native-inputs
37558 (list python-pytest-bootstrap python-setuptools))
37559 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37560 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37561 (description
37562 "This package provides a sorted collections library, written in
37563pure-Python.")
37564 (license license:asl2.0)))
37565
37566(define-public python-soupsieve
37567 (package
37568 (name "python-soupsieve")
37569 (version "2.7")
37570 (source
37571 (origin
37572 (method url-fetch)
37573 (uri (pypi-uri "soupsieve" version))
37574 (sha256
37575 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37576 (build-system pyproject-build-system)
37577 (native-inputs
37578 (list python-beautifulsoup4-bootstrap
37579 python-hatchling
37580 python-pytest))
37581 (home-page "https://github.com/facelessuser/soupsieve")
37582 (synopsis "CSS selector library")
37583 (description
37584 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37585Soup 4. It aims to provide selecting, matching, and filtering using modern
37586CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37587specifications up through the latest CSS level 4 drafts and beyond (though
37588some are not yet implemented).")
37589 (license license:expat)))
37590
37591(define-public python-spectra
37592 (package
37593 (name "python-spectra")
37594 (version "0.1.0")
37595 (source
37596 (origin
37597 (method url-fetch)
37598 (uri (pypi-uri "spectra" version))
37599 (sha256
37600 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37601 (build-system pyproject-build-system)
37602 (propagated-inputs
37603 (list python-colormath2))
37604 (native-inputs
37605 (list python-pytest python-setuptools python-wheel))
37606 (home-page "https://github.com/jsvine/spectra")
37607 (synopsis "Color scales and color conversion")
37608 (description
37609 "This package provides a Python library intended to make color math,
37610color scales, and color space conversion easy. It has support for:
37611
37612@enumerate
37613@item Color scales
37614@item Color ranges
37615@item Color blending
37616@item Brightening/darkening colors
37617@item Saturating/desaturating colors
37618@item Conversion to/from multiple color spaces.
37619@end enumerate\n")
37620 (license license:expat)))
37621
37622(define-public python-speedy-antlr-tool
37623 (package
37624 (name "python-speedy-antlr-tool")
37625 (version "1.4.3")
37626 (source
37627 (origin
37628 (method git-fetch)
37629 (uri (git-reference
37630 (url "https://github.com/amykyta3/speedy-antlr-tool")
37631 (commit (string-append "v" version))))
37632 (file-name (git-file-name name version))
37633 (sha256
37634 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37635 (build-system pyproject-build-system)
37636 (arguments '(#:tests? #f)) ;no test
37637 (native-inputs (list python-setuptools python-setuptools-scm))
37638 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37639 (home-page "https://speedy-antlr-tool.readthedocs.io")
37640 (synopsis "Generate ANTLR parser as Python extension module")
37641 (description
37642 "This tool generates a Python extension that runs your parser
37643using ANTLR's C++ target, and then translates the parsed tree
37644back into Python.")
37645 (license license:bsd-3)))
37646
37647(define-public python-speg
37648 (package
37649 (name "python-speg")
37650 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37651 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37652 (revision . "0")))
37653 (version (git-version "0.3"
37654 (assoc-ref properties 'revision)
37655 (assoc-ref properties 'commit)))
37656 (source
37657 (origin
37658 (method git-fetch)
37659 (uri (git-reference
37660 (url "https://github.com/avakar/speg")
37661 (commit (assoc-ref properties 'commit))))
37662 (file-name (git-file-name name version))
37663 (sha256
37664 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37665 (build-system pyproject-build-system)
37666 (native-inputs
37667 (list python-pytest
37668 python-setuptools))
37669 (propagated-inputs
37670 (list python-six))
37671 (home-page "https://github.com/avakar/speg")
37672 (synopsis "PEG-based parser interpreter with memoization")
37673 (description "This package is a PEG-based parser and interpreter with
37674memoization.")
37675 (license license:expat)))
37676
37677(define-public python-spinners
37678 (package
37679 (name "python-spinners")
37680 (version "0.0.24")
37681 (source
37682 (origin
37683 (method url-fetch)
37684 (uri (pypi-uri "spinners" version))
37685 (sha256
37686 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37687 (build-system pyproject-build-system)
37688 (arguments
37689 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37690 (native-inputs
37691 (list python-setuptools))
37692 (home-page "https://github.com/manrajgrover/py-spinners")
37693 (synopsis "Python library with graphical spinners for the terminal")
37694 (description
37695 "Spinners is a Python library that contains graphical spinners that can
37696be displayed terminal.")
37697 (license license:expat)))
37698
37699(define-public python-sre-yield
37700 (package
37701 (name "python-sre-yield")
37702 (version "1.2")
37703 (source
37704 (origin
37705 (method url-fetch)
37706 (uri (pypi-uri "sre_yield" version))
37707 (sha256
37708 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37709 (build-system pyproject-build-system)
37710 (arguments
37711 (list #:test-backend #~'unittest))
37712 (native-inputs
37713 (list python-setuptools))
37714 (home-page "https://github.com/google/sre_yield")
37715 (synopsis "Expands a regular expression to its possible matches")
37716 (description
37717 "The goal of sre_yield is to efficiently generate all values that can
37718match a given regular expression, or count possible matches efficiently. It
37719uses the parsed regular expression, so you get a much more accurate result
37720than trying to just split strings.")
37721 (license license:asl2.0)))
37722
37723(define-public python-srsly
37724 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37725 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37726 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37727 (package
37728 (name "python-srsly")
37729 (version "2.5.3")
37730 (source
37731 (origin
37732 (method git-fetch)
37733 (uri (git-reference
37734 (url "https://github.com/explosion/srsly")
37735 (commit (string-append "release-v" version))))
37736 (file-name (git-file-name name version))
37737 (sha256
37738 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37739 (build-system pyproject-build-system)
37740 (arguments
37741 (list
37742 ;; tests: 741 passed, 4 skipped, 22 xfailed
37743 #:test-flags
37744 #~(list "--pyargs" "srsly")
37745 #:phases
37746 #~(modify-phases %standard-phases
37747 (add-after 'unpack 'remove-broken-tests
37748 (lambda _
37749 ;; Tests depend on removed in 2.5.3 module
37750 ;; "srsly/cloudpickle/compat.py".
37751 ;; See: <https://github.com/explosion/srsly/issues/121>.
37752 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37753 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37754 (add-before 'check 'remove-local-source
37755 (lambda _
37756 (delete-file-recursively "srsly"))))))
37757 (native-inputs
37758 (list python-cython
37759 python-mock
37760 python-numpy
37761 python-psutil
37762 python-pytest
37763 python-pytest-timeout
37764 python-setuptools))
37765 (propagated-inputs
37766 (list python-catalogue))
37767 (home-page "https://github.com/explosion/srsly")
37768 (synopsis "Serialization utilities for Python")
37769 (description "This package bundles some of the best Python serialization
37770libraries into one standalone package, with a high-level API that makes it
37771easy to write code that's correct across platforms and Pythons.")
37772 (license license:expat)))
37773
37774(define-public python-srt
37775 (package
37776 (name "python-srt")
37777 (version "3.5.3")
37778 (source
37779 (origin
37780 (method url-fetch)
37781 (uri (pypi-uri "srt" version))
37782 (sha256
37783 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37784 (build-system pyproject-build-system)
37785 (native-inputs
37786 (list python-pytest
37787 python-setuptools
37788 python-wheel))
37789 (home-page "https://github.com/cdown/srt")
37790 (synopsis "SRT parsing library")
37791 (description
37792 "This package provides a Python library for parsing, modifying, and
37793composing subtitles in the SRT file format.")
37794 (license license:expat)))
37795
37796(define-public python-sshpubkeys
37797 (package
37798 (name "python-sshpubkeys")
37799 (version "3.2.0")
37800 (source
37801 (origin
37802 (method git-fetch)
37803 (uri (git-reference
37804 (url "https://github.com/ojarva/python-sshpubkeys")
37805 (commit (string-append "v" version))))
37806 (file-name (git-file-name name version))
37807 (sha256
37808 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37809 (build-system pyproject-build-system)
37810 (arguments
37811 (list #:tests? #f)) ; XXX: All tests fail
37812 (native-inputs
37813 (list python-setuptools
37814 python-wheel))
37815 (propagated-inputs
37816 (list python-cryptography
37817 python-ecdsa))
37818 (home-page "https://github.com/ojarva/python-sshpubkeys")
37819 (synopsis "OpenSSH public key parser")
37820 (description
37821 "This package provides a library for parsing and validating OpenSSH
37822public key files.")
37823 (license license:bsd-3)))
37824
37825(define-public python-sshtunnel
37826 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37827 (revision "0"))
37828 (package
37829 (name "python-sshtunnel")
37830 (version (git-version "0.4.0" revision commit))
37831 (source
37832 (origin
37833 (method git-fetch)
37834 (uri (git-reference
37835 (url "https://github.com/pahaz/sshtunnel")
37836 (commit commit)))
37837 (file-name (git-file-name name version))
37838 (sha256
37839 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37840 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37841 (build-system pyproject-build-system)
37842 (arguments
37843 (list
37844 #:phases
37845 #~(modify-phases %standard-phases
37846 (add-after 'unpack 'remove-deprecated-dsskey
37847 (lambda _
37848 (substitute* "sshtunnel.py"
37849 (("'dsa': paramiko\\.DSSKey,")
37850 "")
37851 (("paramiko\\.DSSKey, ")
37852 "")))))))
37853 (propagated-inputs (list python-paramiko))
37854 (native-inputs
37855 (list openssh python-mock python-pytest python-setuptools))
37856 (home-page "https://github.com/pahaz/sshtunnel")
37857 (synopsis "Python SSH tunnels library")
37858 (description
37859 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37860in the background, using Python.")
37861 (license license:expat))))
37862
37863(define-public python-stack-data
37864 (package
37865 (name "python-stack-data")
37866 (version "0.6.3")
37867 (source
37868 (origin
37869 (method url-fetch)
37870 (uri (pypi-uri "stack_data" version))
37871 (sha256
37872 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37873 (build-system pyproject-build-system)
37874 (arguments
37875 (list
37876 #:test-flags
37877 #~(list "-k" (string-join
37878 ;; XXX: Tests fail with HTML diff.
37879 (list "not test_executing_style_defs"
37880 "test_pygments_example"
37881 "test_example")
37882 " and not "))
37883 #:phases
37884 #~(modify-phases %standard-phases
37885 (add-after 'unpack 'set-home-env
37886 (lambda _
37887 (setenv "HOME" "/tmp"))))))
37888 (native-inputs
37889 (list python-cython
37890 python-littleutils
37891 python-pygments
37892 python-pytest
37893 python-setuptools
37894 python-setuptools-scm
37895 python-typeguard
37896 python-wheel))
37897 (propagated-inputs
37898 (list python-asttokens
37899 python-executing
37900 python-pure-eval))
37901 (home-page "https://github.com/alexmojaki/stack_data")
37902 (synopsis "Python stack frame and traceback manipulation library")
37903 (description
37904 "The @code{stack_data} Python library extracts data from stack frames and
37905tracebacks. Is can be used to display more useful tracebacks
37906than the default.")
37907 (license license:expat)))
37908
37909;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37910;; from the standard library, <https://peps.python.org/pep-0594/>.
37911(define %python-standard-pep-594-version "3.13.0")
37912(define %python-standard-pep-594-source
37913 (origin
37914 (method git-fetch)
37915 (uri (git-reference
37916 (url "https://github.com/youknowone/python-deadlib")
37917 (commit (string-append "v" %python-standard-pep-594-version))))
37918 (file-name (git-file-name "python-standard-pep-594"
37919 %python-standard-pep-594-version))
37920 (sha256
37921 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37922
37923(define-public python-standard-asynchat
37924 (package
37925 (name "python-standard-asynchat")
37926 (version %python-standard-pep-594-version)
37927 (source %python-standard-pep-594-source)
37928 (build-system pyproject-build-system)
37929 (arguments
37930 (list
37931 #:phases
37932 #~(modify-phases %standard-phases
37933 (add-after 'unpack 'chdir
37934 (lambda _
37935 (chdir "asynchat"))))))
37936 (native-inputs
37937 (list python-setuptools))
37938 (propagated-inputs
37939 (list python-standard-asyncore))
37940 (home-page "https://github.com/youknowone/python-deadlib")
37941 (synopsis "Backport of asynchat from Python 3.11")
37942 (description
37943 "Standard library @code{asynchat} redistribution. Deprecated since
37944version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37945@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37946standard library}.")
37947 (license license:psfl)))
37948
37949(define-public python-standard-asyncore
37950 (package
37951 (name "python-standard-asyncore")
37952 (version %python-standard-pep-594-version)
37953 (source %python-standard-pep-594-source)
37954 (build-system pyproject-build-system)
37955 (arguments
37956 (list
37957 #:phases
37958 #~(modify-phases %standard-phases
37959 (add-after 'unpack 'chdir
37960 (lambda _
37961 (chdir "asyncore"))))))
37962 (native-inputs
37963 (list python-setuptools))
37964 (home-page "https://github.com/youknowone/python-deadlib")
37965 (synopsis "Backport of asyncore from Python 3.11")
37966 (description
37967 "Standard library @code{asyncore} redistribution. Deprecated since
37968version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37969@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37970standard library}.")
37971 (license license:psfl)))
37972
37973(define-public python-standard-smtpd
37974 (package
37975 (name "python-standard-smtpd")
37976 (version %python-standard-pep-594-version)
37977 (source %python-standard-pep-594-source)
37978 (build-system pyproject-build-system)
37979 (arguments
37980 (list
37981 ;; ImportError: cannot import name 'mock_socket' from 'test'
37982 #:tests? #f
37983 #:phases
37984 #~(modify-phases %standard-phases
37985 (add-after 'unpack 'chdir
37986 (lambda _
37987 (chdir "smtpd"))))))
37988 (native-inputs
37989 (list python-setuptools))
37990 (propagated-inputs
37991 (list
37992 python-standard-asynchat
37993 python-standard-asyncore))
37994 (home-page "https://github.com/youknowone/python-deadlib")
37995 (synopsis "Backport of smtpd from Python 3.11")
37996 (description
37997 "Standard library @code{smtpd} redistribution. Deprecated since version
379983.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37999replacement for this module, based on @code{asyncio}. See:
38000@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
38001standard library}.")
38002 (license license:psfl)))
38003
38004(define-public python-stdio-mgr
38005 (package
38006 (name "python-stdio-mgr")
38007 (version "1.0.1")
38008 (source
38009 (origin
38010 (method git-fetch)
38011 (uri (git-reference
38012 (url "https://github.com/bskinn/stdio-mgr")
38013 (commit (string-append "v" version))))
38014 (file-name (git-file-name name version))
38015 (sha256
38016 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
38017 (build-system pyproject-build-system)
38018 (arguments
38019 (list
38020 ;; Do not run doctests requiring sphinx.
38021 #:test-flags #~(list "--ignore=README.rst")))
38022 (native-inputs
38023 (list python-pytest
38024 python-setuptools
38025 python-wheel))
38026 (propagated-inputs
38027 (list python-attrs))
38028 (home-page "https://github.com/bskinn/stdio-mgr")
38029 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
38030 (description
38031 "This package contains a context manager for mocking/wrapping
38032stdin/stdout/stderr.")
38033 (license license:expat)))
38034
38035;; TODO: This package is not necessary in Guix. It should be replaced by a
38036;; trivial python package providing the same functionality.
38037(define-public python-stdlib-list
38038 (package
38039 (name "python-stdlib-list")
38040 (version "0.11.1")
38041 (source
38042 (origin
38043 (method git-fetch)
38044 (uri (git-reference
38045 (url "https://github.com/jackmaney/python-stdlib-list")
38046 (commit (string-append "v" version))))
38047 (file-name (git-file-name name version))
38048 (sha256
38049 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
38050 (build-system pyproject-build-system)
38051 (native-inputs
38052 (list python-flit-core
38053 python-pytest
38054 python-sphinx))
38055 (home-page "https://github.com/jackmaney/python-stdlib-list")
38056 (synopsis "Python Standard Libraries")
38057 (description
38058 "This package contains a list of Python Standard Libraries.")
38059 (license license:expat)))
38060
38061(define-public python-stem
38062 ;; python-stem is mostly unmaintained, but still has occasional commits
38063 ;; added.
38064 (package
38065 (name "python-stem")
38066 (version "1.8.3")
38067 (source
38068 (origin
38069 (method git-fetch)
38070 (uri (git-reference
38071 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
38072 (commit version)))
38073 (file-name (git-file-name name version))
38074 (sha256
38075 (base32
38076 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
38077 (build-system pyproject-build-system)
38078 (arguments
38079 (list
38080 #:test-backend #~'custom
38081 #:test-flags #~(list "run_tests.py" "--unit")
38082 #:phases
38083 #~(modify-phases %standard-phases
38084 (add-after 'unpack 'fix-python-312
38085 (lambda _
38086 (substitute* (find-files "." "\\.py$")
38087 (("assertRaisesRegexp") "assertRaisesRegex")))))))
38088 (native-inputs
38089 (list python-setuptools
38090 python-wheel))
38091 (home-page "https://stem.torproject.org/")
38092 (synopsis
38093 "Python controller library that allows applications to interact with Tor")
38094 (description
38095 "Stem is a Python controller library for Tor. With it you can use Tor's
38096 control protocol to script against the Tor process and read descriptor data
38097 relays publish about themselves.")
38098 (license license:lgpl3)))
38099
38100(define-public python-stltools
38101 (package
38102 (name "python-stltools")
38103 (version "2022.01.20")
38104 (source
38105 (origin
38106 (method git-fetch)
38107 (uri (git-reference
38108 (url "https://github.com/rsmith-nl/stltools")
38109 (commit version)))
38110 (file-name (git-file-name name version))
38111 (sha256
38112 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
38113 (build-system pyproject-build-system)
38114 (arguments
38115 (list
38116 #:phases
38117 #~(modify-phases %standard-phases
38118 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
38119 (delete 'build)
38120 (replace 'install
38121 (lambda* (#:key inputs outputs #:allow-other-keys)
38122 (let ((moddir (string-append (site-packages inputs outputs)
38123 "/stltools"))
38124 (bindir (string-append #$output "/bin")))
38125 (copy-recursively "stltools" moddir)
38126 (mkdir-p bindir)
38127 (for-each
38128 (lambda (script)
38129 (let ((source (string-append script ".py"))
38130 (target (string-append bindir "/" script)))
38131 (copy-file source target)
38132 (chmod target #o555)))
38133 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
38134 (native-inputs
38135 (list python-pytest
38136 python-setuptools))
38137 (propagated-inputs
38138 (list python-pycairo))
38139 (home-page "https://github.com/rsmith-nl/stltools")
38140 (synopsis "Python modules and scripts for handling STL files")
38141 (description
38142 "This package consists of Python modules and scripts for manipulating
38143stereolithography (STL) files. It can convert STL files into POV-ray meshes,
38144PDF and PostScript. The Python modules allow for reading and writing STL
38145files. It supports both the text and binary forms of STL.")
38146 (license license:expat)))
38147
38148(define-public python-stone
38149 (package
38150 (name "python-stone")
38151 (version "3.3.9")
38152 (source
38153 (origin
38154 (method git-fetch)
38155 (uri (git-reference
38156 (url "https://github.com/dropbox/stone")
38157 (commit (string-append "v" version))))
38158 (file-name (git-file-name name version))
38159 (sha256
38160 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
38161 (build-system pyproject-build-system)
38162 (native-inputs
38163 (list python-pytest
38164 python-setuptools))
38165 (propagated-inputs
38166 (list python-jinja2
38167 python-packaging
38168 python-ply
38169 python-six)) ;hard requirement, still
38170 (home-page "https://github.com/dropbox/stone")
38171 (synopsis "Official Api Spec Language for Dropbox")
38172 (description
38173 "Stone is an interface description language (IDL) for APIs.")
38174 (license license:expat)))
38175
38176(define-public python-stopit
38177 (package
38178 (name "python-stopit")
38179 (version "1.1.2")
38180 (source
38181 (origin
38182 (method git-fetch)
38183 (uri (git-reference
38184 (url "https://github.com/glenfant/stopit")
38185 (commit version)))
38186 (file-name (git-file-name name version))
38187 (sha256
38188 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
38189 (build-system pyproject-build-system)
38190 (arguments
38191 (list #:test-backend #~'custom
38192 #:test-flags #~(list "tests.py")))
38193 (native-inputs (list python-setuptools))
38194 (home-page "https://pypi.python.org/pypi/stopit")
38195 (synopsis "Timeout control decorator and context managers")
38196 (description
38197 "Raise asynchronous exceptions in other threads, control the timeout of
38198blocks or callables with two context managers and two decorators.")
38199 (license license:expat)))
38200
38201(define-public python-straight-plugin
38202 (package
38203 (name "python-straight-plugin")
38204 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
38205 (revision . "0")))
38206 (version (git-version "1.4.1"
38207 (assoc-ref properties 'revision)
38208 (assoc-ref properties 'commit)))
38209 (source
38210 (origin
38211 (method git-fetch)
38212 (uri (git-reference
38213 (url "https://github.com/ironfroggy/straight.plugin")
38214 (commit (assoc-ref properties 'commit))))
38215 (file-name (git-file-name name version))
38216 (sha256
38217 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
38218 (build-system pyproject-build-system)
38219 (arguments
38220 (list
38221 ;; XXX: Some tests started failing with the move to [email protected].
38222 ;; Consider removing this leaf unmaintained package.
38223 #:tests? #f
38224 #:test-backend #~'custom
38225 #:test-flags #~(list "tests.py")
38226 #:phases
38227 #~(modify-phases %standard-phases
38228 (add-after 'unpack 'fix-python-3.12-incompatibility
38229 (lambda _
38230 (substitute* "straight/plugin/loaders.py"
38231 (("from imp import find_module")
38232 "")))))))
38233 (native-inputs (list python-mock python-setuptools))
38234 (home-page "https://github.com/ironfroggy/straight.plugin")
38235 (synopsis "Simple namespaced plugin facility")
38236 (description
38237 "Straight Plugin provides a type of plugin you can create from almost any
38238existing Python modules, and an easy way for outside developers to add
38239functionality and customization to your projects with their own plugins.")
38240 (license license:expat)))
38241
38242(define-public python-streamtracer
38243 (package
38244 (name "python-streamtracer")
38245 (version "2.4.0")
38246 (source
38247 (origin
38248 (method url-fetch)
38249 (uri (pypi-uri "streamtracer" version))
38250 (sha256
38251 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
38252 (build-system pyproject-build-system)
38253 (arguments
38254 (list
38255 #:imported-modules `(,@%cargo-build-system-modules
38256 ,@%pyproject-build-system-modules)
38257 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
38258 (guix build pyproject-build-system)
38259 (guix build utils))
38260 #:test-flags
38261 #~(list "--pyargs" "streamtracer")
38262 #:phases
38263 #~(modify-phases %standard-phases
38264 (add-after 'unpack 'prepare-cargo-build-system
38265 (lambda args
38266 (for-each (lambda (phase)
38267 (format #t "Running cargo phase: ~a~%" phase)
38268 (apply (assoc-ref cargo:%standard-phases phase)
38269 #:cargo-target #$(cargo-triplet)
38270 args))
38271 '(unpack-rust-crates
38272 configure
38273 check-for-pregenerated-files
38274 patch-cargo-checksums)))))))
38275 (native-inputs
38276 (append
38277 (list maturin
38278 python-pytest
38279 python-pytest-doctestplus
38280 rust
38281 `(,rust "cargo"))
38282 (or (and=> (%current-target-system)
38283 (compose list make-rust-sysroot))
38284 '())))
38285 (propagated-inputs
38286 (list python-numpy
38287 python-packaging))
38288 (inputs (cargo-inputs 'python-streamtracer))
38289 (home-page "https://github.com/sunpy/streamtracer")
38290 (synopsis "Rapid streamline tracing in Python")
38291 (description
38292 "streamtracer is a Python package for rapid streamline tracing on
38293regularly spaced grids. The actual streamline tracing is done at a low level
38294in Rust, with a nice Python API provided on top.")
38295 (license license:gpl3+)))
38296
38297(define-public python-strenum
38298 (package
38299 (name "python-strenum")
38300 (version "0.4.15")
38301 (source
38302 (origin
38303 (method git-fetch)
38304 (uri (git-reference
38305 (url "https://github.com/irgeek/StrEnum")
38306 (commit (string-append "v" version))))
38307 (file-name (git-file-name name version))
38308 (sha256
38309 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
38310 (snippet #~(delete-file "versioneer.py"))))
38311 (build-system pyproject-build-system)
38312 (arguments
38313 (list #:test-flags #~(list "tests")))
38314 (native-inputs
38315 (list python-pytest
38316 python-pytest-pylint
38317 python-setuptools
38318 python-versioneer))
38319 (home-page "https://github.com/irgeek/StrEnum")
38320 (synopsis "Enum that inherits from str")
38321 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38322@code{str} to complement @code{enum.IntEnum} in the standard library.")
38323 (license license:expat)))
38324
38325(define-public python-structlog
38326 (package
38327 (name "python-structlog")
38328 (version "25.5.0")
38329 (source
38330 (origin
38331 (method url-fetch)
38332 (uri (pypi-uri "structlog" version))
38333 (sha256
38334 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38335 (build-system pyproject-build-system)
38336 (native-inputs
38337 (list python-hatch-fancy-pypi-readme
38338 python-hatch-vcs
38339 python-hatchling
38340 python-pytest
38341 python-pytest-asyncio
38342 python-time-machine))
38343 (home-page "https://www.structlog.org/")
38344 (synopsis "Structured Logging for Python")
38345 (description "@code{structlog} changes logging in Python by adding structure
38346to your log entries.")
38347 (license (list license:asl2.0 license:expat))))
38348
38349(define-public python-style
38350 (package
38351 (name "python-style")
38352 (version "1.1.6")
38353 (source
38354 (origin
38355 (method url-fetch)
38356 (uri (pypi-uri "style" version))
38357 (sha256
38358 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38359 (build-system pyproject-build-system)
38360 (arguments
38361 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38362 (native-inputs
38363 (list python-setuptools))
38364 (home-page "https://github.com/lmittmann/style")
38365 (synopsis "Terminal string styling")
38366 (description
38367"@code{python-style} is a simple terminal string styling package. Its API is
38368a port of the chalk package for javascript.")
38369 (license license:expat)))
38370
38371(define-public python-svgelements
38372 (package
38373 (name "python-svgelements")
38374 (version "1.9.6")
38375 (source
38376 (origin
38377 (method git-fetch)
38378 (uri (git-reference
38379 (url "https://github.com/meerk40t/svgelements")
38380 (commit version)))
38381 (file-name (git-file-name name version))
38382 (sha256
38383 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38384 (build-system pyproject-build-system)
38385 (arguments
38386 (list
38387 #:phases
38388 #~(modify-phases %standard-phases
38389 (add-after 'unpack 'fix-python-incompatibilities
38390 (lambda _
38391 (substitute* (find-files "test" "\\.py$")
38392 (("(assert(|NotAlmost)Equal)s" all out in)
38393 out)))))))
38394 (native-inputs
38395 (list python-anyio
38396 python-pytest
38397 python-numpy
38398 python-pillow
38399 python-scipy
38400 python-setuptools))
38401 (home-page "https://github.com/meerk40t/svgelements")
38402 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38403 (description
38404 "This module does high fidelity SVG parsing and geometric rendering.
38405The goal is to successfully and correctly process SVG for use with any scripts
38406that may need or want to use SVG files as geometric data.")
38407 (license license:expat)))
38408
38409(define-public python-svgutils
38410 (package
38411 (name "python-svgutils")
38412 (version "0.3.4")
38413 (source
38414 (origin
38415 (method url-fetch)
38416 (uri (pypi-uri "svgutils" version))
38417 (sha256
38418 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38419 (build-system pyproject-build-system)
38420 (arguments
38421 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38422 (native-inputs
38423 (list python-setuptools))
38424 (propagated-inputs
38425 (list python-lxml))
38426 (home-page "https://svgutils.readthedocs.io")
38427 (synopsis "Python SVG editor")
38428 (description "This is an utility package that helps with editing and
38429concatenating SVG files. It is especially directed at scientists preparing
38430final figures for submission to journals. So far it supports arbitrary
38431placement and scaling of SVG figures and adding markers, such as labels.")
38432 (license license:expat)))
38433
38434(define-public python-svgwrite
38435 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38436 (package
38437 (name "python-svgwrite")
38438 (version "1.4.3")
38439 (source
38440 (origin
38441 (method git-fetch)
38442 (uri (git-reference
38443 (url "https://github.com/mozman/svgwrite")
38444 (commit (string-append "v" version))))
38445 (file-name (git-file-name name version))
38446 (sha256
38447 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38448 (build-system pyproject-build-system)
38449 (arguments
38450 (list
38451 ;; Disable test which wants internet.
38452 #:test-flags
38453 #~(list "-k" "not test_embed_google_web_font")))
38454 (native-inputs (list python-pytest python-setuptools))
38455 (home-page "https://github.com/mozman/svgwrite")
38456 (synopsis "Python library to create SVG drawings")
38457 (description
38458 "This package provides a Python library to create SVG drawings.")
38459 (license license:expat)))
38460
38461(define-public python-swagger-spec-validator
38462 (package
38463 (name "python-swagger-spec-validator")
38464 (version "3.0.4")
38465 (source
38466 (origin
38467 (method git-fetch)
38468 (uri (git-reference
38469 (url "https://github.com/Yelp/swagger_spec_validator")
38470 (commit (string-append "v" version))))
38471 (file-name (git-file-name name version))
38472 (sha256
38473 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38474 (build-system pyproject-build-system)
38475 (native-inputs
38476 (list python-pytest
38477 python-setuptools))
38478 (propagated-inputs
38479 (list python-importlib-resources
38480 python-jsonschema
38481 python-pyyaml
38482 python-typing-extensions))
38483 (home-page "https://github.com/Yelp/swagger_spec_validator")
38484 (synopsis "Validation of Swagger specifications")
38485 (description
38486 "@code{swagger_spec_validator} provides a library for validating Swagger
38487API specifications.")
38488 (license license:asl2.0)))
38489
38490(define-public python-syllables
38491 (package
38492 (name "python-syllables")
38493 (version "1.0.3")
38494 (source
38495 (origin
38496 (method git-fetch)
38497 (uri (git-reference
38498 (url "https://github.com/prosegrinder/python-syllables")
38499 (commit (string-append "v" version))))
38500 (file-name (git-file-name name version))
38501 (sha256
38502 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38503 (build-system pyproject-build-system)
38504 (native-inputs
38505 (list python-cmudict
38506 python-pytest
38507 python-setuptools))
38508 (home-page "https://github.com/prosegrinder/python-syllables")
38509 (synopsis "Package for estimating the number of syllables in a word")
38510 (description
38511 "This package provides a Python package for estimating the number of
38512syllables in a word.")
38513 (license license:gpl3)))
38514
38515(define-public python-sympy
38516 (package
38517 (name "python-sympy")
38518 (version "1.13.3")
38519 (source
38520 (origin
38521 (method url-fetch)
38522 (uri (pypi-uri "sympy" version))
38523 (sha256
38524 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38525 (build-system pyproject-build-system)
38526 (arguments
38527 '(#:phases
38528 (modify-phases %standard-phases
38529 (replace 'check
38530 (lambda* (#:key tests? #:allow-other-keys)
38531 (if tests?
38532 (invoke "python3" "-c"
38533 "import sympy; sympy.test(\"/core\")")))))))
38534 (propagated-inputs (list python-mpmath))
38535 (native-inputs
38536 (list python-hypothesis
38537 python-pytest
38538 python-setuptools
38539 python-wheel))
38540 (home-page "https://www.sympy.org/")
38541 (synopsis "Python library for symbolic mathematics")
38542 (description
38543 "SymPy is a Python library for symbolic mathematics. It aims to become a
38544full-featured computer algebra system (CAS) while keeping the code as simple
38545as possible in order to be comprehensible and easily extensible.")
38546 (license license:bsd-3)))
38547
38548(define-public python-tables
38549 (package
38550 (name "python-tables")
38551 (version "3.11.1")
38552 (source
38553 (origin
38554 (method git-fetch)
38555 (uri (git-reference
38556 (url "https://github.com/PyTables/PyTables")
38557 (commit (string-append "v" version))))
38558 (file-name (git-file-name name version))
38559 (sha256
38560 (base32 "03ifagvxzvgfdpjw508l1lq1j3ki9nbhxkls4zf1bchfdprv89fv"))
38561 (snippet '(begin
38562 (use-modules (guix build utils))
38563 (delete-file-recursively "hdf5-blosc")
38564 (delete-file-recursively "c-blosc")))))
38565 (build-system pyproject-build-system)
38566 (arguments
38567 (list
38568 #:test-flags
38569 ;; Performing only a light (yet comprehensive) subset of the test suite.
38570 ;; If you want a more complete test, try passing the --heavy flag to
38571 ;; this script (or set the 'heavy' parameter in case you are using
38572 ;; tables.test() call). The whole suite will take more than 4 hours to
38573 ;; complete on a relatively modern CPU and around 512 MB of main memory.
38574 #~(list "--pyargs" "tables.tests.test_all")
38575 #:phases
38576 #~(modify-phases %standard-phases
38577 (add-after 'unpack 'disable-tuning
38578 (lambda _
38579 (substitute* "setup.py"
38580 (("cpu_flags = .*")
38581 "cpu_flags = ['sse2']\n"))))
38582 (add-after 'unpack 'fix-reference-to-blosc2
38583 (lambda* (#:key inputs #:allow-other-keys)
38584 (substitute* "tables/__init__.py"
38585 (("\"\",") ;default
38586 (string-append "'"
38587 (dirname
38588 (search-input-file inputs "/lib/libblosc2.so"))
38589 "',\n")))))
38590 (add-before 'build 'pre-build
38591 (lambda _
38592 (substitute* "setup.py"
38593 (("hdf5-blosc/src")
38594 (format #f "~a/src"
38595 #$(package-source
38596 (this-package-input "hdf5-blosc-parallel-openmpi")))))
38597 (invoke "make" "distclean") ;Regenerate C code with Cython
38598 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38599 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38600 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38601 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
38602 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38603 (add-before 'check 'pre-check
38604 (lambda _
38605 (setenv "HOME" "/tmp"))))))
38606 (native-inputs
38607 (list pkg-config
38608 python-cython
38609 python-pytest
38610 python-setuptools
38611 python-sphinx))
38612 (inputs
38613 (list bzip2
38614 c-blosc
38615 c-blosc2
38616 hdf5-parallel-openmpi
38617 hdf5-blosc-parallel-openmpi
38618 lzo))
38619 (propagated-inputs
38620 (list python-blosc2
38621 python-numexpr
38622 python-numpy
38623 python-packaging
38624 python-py-cpuinfo
38625 python-typing-extensions))
38626 (home-page "https://www.pytables.org/")
38627 (synopsis "Hierarchical datasets for Python")
38628 (description "PyTables is a package for managing hierarchical datasets and
38629designed to efficiently cope with extremely large amounts of data.")
38630 (license license:bsd-3)))
38631
38632(define-public python-tablib
38633 (package
38634 (name "python-tablib")
38635 (version "3.9.0")
38636 (source
38637 (origin
38638 (method url-fetch)
38639 (uri (pypi-uri "tablib" version))
38640 (sha256
38641 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38642 (build-system pyproject-build-system)
38643 (native-inputs
38644 (list python-pytest python-setuptools python-setuptools-scm))
38645 (inputs ;; [cli]
38646 (list python-tabulate))
38647 (propagated-inputs
38648 (list python-markuppy
38649 python-odfpy
38650 python-openpyxl
38651 python-pyyaml
38652 python-xlrd
38653 python-xlwt))
38654 (home-page "https://tablib.readthedocs.io")
38655 (synopsis "Format agnostic tabular data library")
38656 (description
38657 "@code{tablib} is a format-agnostic tabular dataset library,
38658written in Python. Supported output formats are Excel (Sets + Books),
38659JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38660TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38661
38662@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38663quite huge, this Guix package doesn't depend on pandas. In case, just also
38664install @code{python-pandas}.")
38665 (license license:expat)))
38666
38667(define-public python-tabulate
38668 (package
38669 (name "python-tabulate")
38670 (version "0.9.0")
38671 (source
38672 (origin
38673 (method url-fetch)
38674 (uri (pypi-uri "tabulate" version))
38675 (sha256
38676 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38677 (build-system pyproject-build-system)
38678 (native-inputs
38679 (list python-pytest
38680 python-setuptools-scm
38681 python-setuptools))
38682 (propagated-inputs
38683 (list python-wcwidth))
38684 (home-page "https://github.com/astanin/python-tabulate")
38685 (synopsis "Pretty-print tabular data")
38686 (description
38687 "Tabulate is a library and command-line utility to pretty-print tabular
38688data in Python.")
38689 (license license:expat)))
38690
38691(define-public python-takethetime
38692 (package
38693 (name "python-takethetime")
38694 (version "0.3.1")
38695 (source
38696 (origin
38697 (method url-fetch)
38698 (uri (pypi-uri "TakeTheTime" version))
38699 (sha256
38700 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38701 (build-system pyproject-build-system)
38702 (arguments
38703 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38704 (native-inputs
38705 (list python-setuptools
38706 python-wheel))
38707 (home-page "https://github.com/ErikBjare/TakeTheTime")
38708 (synopsis "Timing chunks of code")
38709 (description
38710 "This package implements a functionality for time taking using context
38711managers.")
38712 (license license:expat)))
38713
38714(define-public python-targ
38715 (package
38716 (name "python-targ")
38717 (version "0.6.0")
38718 (source
38719 (origin
38720 (method git-fetch)
38721 (uri (git-reference
38722 (url "https://github.com/piccolo-orm/targ/")
38723 (commit version)))
38724 (file-name (git-file-name name version))
38725 (sha256
38726 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38727 (build-system pyproject-build-system)
38728 (native-inputs
38729 (list python-pytest
38730 python-setuptools))
38731 (propagated-inputs
38732 (list python-colorama
38733 python-docstring-parser))
38734 (home-page "https://github.com/piccolo-orm/targ/")
38735 (synopsis "Python CLI builder using type hints and docstrings")
38736 (description
38737 "Targ is a package to build a Python @acronym{Command Line Interface,
38738CLI} for applications by using type hints and docstrings.")
38739 (license license:expat)))
38740
38741(define-public python-tasklib
38742 (package
38743 (name "python-tasklib")
38744 (version "2.5.1")
38745 (source
38746 (origin
38747 (method git-fetch)
38748 (uri (git-reference
38749 (url "https://github.com/GothenburgBitFactory/tasklib")
38750 (commit version)))
38751 (file-name (git-file-name name version))
38752 (sha256
38753 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38754 (build-system pyproject-build-system)
38755 (arguments
38756 (list
38757 #:test-backend
38758 #~'unittest))
38759 (inputs (list taskwarrior))
38760 (native-inputs (list python-setuptools tzdata-for-tests))
38761 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38762 (synopsis "Official Taskwarrior library for Python")
38763 (description "@code{tasklib} is a Python library for interacting with
38764Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38765 (license license:bsd-3)))
38766
38767(define-public python-tasklogger
38768 (package
38769 (name "python-tasklogger")
38770 (version "1.2.0")
38771 (source
38772 (origin
38773 (method url-fetch)
38774 (uri (pypi-uri "tasklogger" version))
38775 (sha256
38776 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38777 (build-system pyproject-build-system)
38778 (native-inputs
38779 (list python-pytest
38780 python-numpy
38781 python-setuptools))
38782 (propagated-inputs
38783 (list python-deprecated))
38784 (home-page "https://github.com/scottgigante/tasklogger")
38785 (synopsis "Extension to the core Python logging library")
38786 (description "This package provides an extension to the core Python
38787logging library for logging the beginning and completion of tasks and
38788subtasks.")
38789 (license license:gpl2)))
38790
38791(define-public python-tatsu
38792 (package
38793 (name "python-tatsu")
38794 (version "5.13.2")
38795 (source
38796 (origin
38797 (method git-fetch)
38798 (uri (git-reference
38799 (url "https://github.com/neogeny/TatSu")
38800 (commit (string-append "v" version))))
38801 (file-name (git-file-name name version))
38802 (sha256
38803 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38804 (build-system pyproject-build-system)
38805 (native-inputs
38806 (list python-pytest
38807 python-setuptools))
38808 (home-page "https://tatsu.readthedocs.io/en/stable/")
38809 (synopsis "PEG/Packrat Parser generator for Python")
38810 (description
38811 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38812Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38813or Packrat parser in Python.")
38814 (license license:bsd-2)))
38815
38816(define-public python-tblib
38817 (package
38818 (name "python-tblib")
38819 (version "3.1.0")
38820 (source
38821 (origin
38822 (method url-fetch)
38823 (uri (pypi-uri "tblib" version))
38824 (sha256
38825 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38826 (build-system pyproject-build-system)
38827 (arguments
38828 (list
38829 ;; Don't run benchmark tests.
38830 #:test-flags #~(list "--ignore=tests/test_perf.py")
38831 #:phases
38832 #~(modify-phases %standard-phases
38833 (add-after 'unpack 'fix-pytest-config
38834 (lambda _
38835 (substitute* "pytest.ini"
38836 (("--benchmark-disable") "")))))))
38837 (native-inputs
38838 (list python-pytest
38839 python-setuptools))
38840 (home-page "https://github.com/ionelmc/python-tblib")
38841 (synopsis "Traceback serialization library")
38842 (description
38843 "Traceback serialization allows you to:
38844
38845@enumerate
38846@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38847different processes. This allows better error handling when running code over
38848multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38849
38850@item Parse traceback strings and raise with the parsed tracebacks.
38851@end enumerate\n")
38852 (license license:bsd-3)))
38853
38854(define-public python-tcolorpy
38855 (package
38856 (name "python-tcolorpy")
38857 (version "0.1.7")
38858 (source
38859 (origin
38860 (method git-fetch)
38861 (uri (git-reference
38862 (url "https://github.com/thombashi/tcolorpy")
38863 (commit (string-append "v" version))))
38864 (file-name (git-file-name name version))
38865 (sha256
38866 (base32 "18cck1s0w9i5llaaw9s37g61dqg3vpjjgd3ywc72n1i02k0yj1fh"))))
38867 (build-system pyproject-build-system)
38868 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
38869 (home-page "https://github.com/thombashi/tcolorpy")
38870 (synopsis "Apply true color for terminal text")
38871 (description
38872 "@code{tcolorpy} is a Python library to apply true color for terminal
38873text.
38874You can set the following @code{tcolor} arguments:
38875
38876@itemize
38877@item color
38878@item bgcolor
38879@item styles
38880@end itemize")
38881 (license license:expat)))
38882
38883(define-public python-tdir
38884 (package
38885 (name "python-tdir")
38886 (version "1.10.0")
38887 (source
38888 (origin
38889 (method git-fetch)
38890 (uri (git-reference
38891 (url "https://github.com/rec/tdir")
38892 (commit (string-append "v" version))))
38893 (file-name (git-file-name name version))
38894 (sha256
38895 (base32 "10kl0w40n53ynhxlvkv56gywswnrb2drmrw972k0p66sihlw9y2p"))))
38896 (build-system pyproject-build-system)
38897 (native-inputs (list python-hatchling python-pytest))
38898 (propagated-inputs (list python-dek python-xmod))
38899 (home-page "https://rec.github.io/tdir/")
38900 (synopsis "Create, fill a temporary directory")
38901 (description
38902 "This is Python helper module to run code inside a temporary directory
38903filled with zero or more files. @code{tdir()} runs code in a temporary
38904directory pre-filled with files: it can either be used as a context manager,
38905or a decorator for functions or classes. @code{tdir.fill()} is a tiny
38906function that recursively fills a directory.")
38907 (license license:expat)))
38908
38909(define-public python-telethon
38910 (package
38911 (name "python-telethon")
38912 (version "1.44.0")
38913 (source
38914 (origin
38915 (method git-fetch)
38916 (uri (git-reference
38917 (url "https://codeberg.org/Lonami/Telethon")
38918 (commit (string-append "v" version))))
38919 (file-name (git-file-name name version))
38920 (sha256
38921 (base32 "1y1bzna7gqs6ck4jmh2spm7s8frw0qs6p52v9ar6qbbk1h7yacip"))))
38922 (build-system pyproject-build-system)
38923 (arguments
38924 (list
38925 #:phases
38926 #~(modify-phases %standard-phases
38927 (add-after 'build 'generate-tl-code
38928 (lambda _
38929 ;; The custom hatchling build hook (hatch_build.py) generates
38930 ;; telethon/tl/{types,functions}.py only inside hatchling's
38931 ;; isolated build directory, but deletes them again.
38932 ;; Regenerate the same code here too for tests; see
38933 ;; readthedocs/developing/project-structure.rst.
38934 (invoke "python3" "setup.py" "gen"))))))
38935 (native-inputs
38936 (list python-hatchling
38937 python-pytest
38938 python-pytest-asyncio
38939 python-pytest-trio
38940 python-setuptools))
38941 (propagated-inputs
38942 (list python-rsa python-pyaes))
38943 (home-page "https://docs.telethon.dev")
38944 (synopsis "Full-featured Telegram client library for Python 3")
38945 (description "This library is designed to make it easy to write Python
38946programs that can interact with Telegram.")
38947 (license license:expat)))
38948
38949(define-public python-tempora
38950 (package
38951 (name "python-tempora")
38952 (version "5.8.1")
38953 (source
38954 (origin
38955 (method url-fetch)
38956 (uri (pypi-uri "tempora" version))
38957 (sha256
38958 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38959 (build-system pyproject-build-system)
38960 (arguments
38961 (list
38962 ;; Do not test the myproject.toml build as it tries to pull dependencies
38963 ;; from the Internet.
38964 #:test-flags #~(list "-k" "not project"
38965 "tests")))
38966 (native-inputs
38967 (list python-freezegun
38968 python-pytest
38969 python-setuptools
38970 python-setuptools-scm
38971 python-tzdata))
38972 (propagated-inputs (list python-dateutil python-jaraco-functools))
38973 (home-page "https://github.com/jaraco/tempora")
38974 (synopsis "Python date and time objects and routines")
38975 (description
38976 "The @code{tempora} Python library contains miscellaneous date and time
38977related utilities and constants, routines for measuring, profiling, and
38978getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38979well as an event scheduler.")
38980 (license license:expat)))
38981
38982(define-public python-tenacity
38983 (package
38984 (name "python-tenacity")
38985 (version "9.1.4")
38986 (source
38987 (origin
38988 (method url-fetch)
38989 (uri (pypi-uri "tenacity" version))
38990 (sha256
38991 (base32 "0fprkhbrh26zm9jxpwmcz5vpr989hd4kpcqs110x0arz4r61vcxd"))))
38992 (build-system pyproject-build-system)
38993 (native-inputs
38994 (list python-pytest
38995 python-setuptools
38996 python-setuptools-scm
38997 python-tornado
38998 python-typeguard))
38999 (home-page "https://github.com/jd/tenacity")
39000 (synopsis "Retrying library for python")
39001 (description
39002 "Tenacity is a general-purpose python library to simplify the task of
39003adding retry behavior to just about anything.")
39004 (license license:asl2.0)))
39005
39006(define-public python-term-background
39007 (package
39008 (name "python-term-background")
39009 (version "1.0.5")
39010 (source
39011 (origin
39012 (method url-fetch)
39013 (uri (pypi-uri "term_background" version))
39014 (sha256
39015 (base32 "1gcr4aidgsl9kv2m0jw01svcbi3zlx18m2fpdh3yacvapzgjir2h"))))
39016 (build-system pyproject-build-system)
39017 (native-inputs
39018 (list python-pytest
39019 python-setuptools
39020 python-setuptools-scm))
39021 (home-page "http://github.com/rocky/shell-term-background")
39022 (synopsis "Determine if shell has a light or dark background")
39023 (description "This package determines if shell has a light or dark
39024background.")
39025 (license license:gpl2+)))
39026
39027(define-public python-term-image
39028 (package
39029 (name "python-term-image")
39030 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
39031 (revision . "0")))
39032 (version (git-version "0.7.2"
39033 (assoc-ref properties 'revision)
39034 (assoc-ref properties 'commit)))
39035 (source
39036 (origin
39037 (method git-fetch)
39038 (uri (git-reference
39039 (url "https://github.com/AnonymouX47/term-image")
39040 (commit (assoc-ref properties 'commit))))
39041 (file-name (git-file-name name version))
39042 (sha256
39043 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
39044 (build-system pyproject-build-system)
39045 (arguments
39046 (list
39047 #:test-flags
39048 #~(list "tests"
39049 ;; These tests require network access.
39050 "-k" (string-append "not test_from_url"
39051 " and not test_source"
39052 " and not test_close"))
39053 #:phases
39054 #~(modify-phases %standard-phases
39055 (add-after 'unpack 'bump-pillow-requirement
39056 (lambda _
39057 (substitute* "src/term_image/image/common.py"
39058 (("\\.getdata")
39059 ".get_flattened_data"))
39060 (let* ((major #$(version-major
39061 (package-version
39062 (this-package-input "python-pillow"))))
39063 (next (number->string (+ 1 (string->number major)))))
39064 (substitute* "pyproject.toml"
39065 (("pillow>=9.1,<12")
39066 (string-append "pillow>=9.1,<" next)))))))))
39067 (propagated-inputs (list python-pillow python-requests))
39068 (native-inputs
39069 (list python-pytest
39070 python-setuptools
39071 python-urwid))
39072 (home-page "https://github.com/AnonymouX47/term-image")
39073 (synopsis "Display images in the terminal")
39074 (description "term-image is a library and program to display images on
39075compatible terminals.
39076
39077Features:
39078@enumerate
39079@item Multiple image formats (basically all formats supported by
39080@code{PIL.Image.open()})
39081@item Multiple image source types: PIL image instance, local file, URL
39082@item Multiple image render styles (with automatic support detection)
39083@item Support for multiple terminal graphics protocols, including Kitty
39084@item Transparency support (with multiple options)
39085@item Animated image support (including transparent ones)
39086@item Integration into various TUI / terminal-based output libraries
39087@item Terminal size awareness
39088@item Automatic and manual image sizing
39089@item Horizontal and vertical alignment
39090@item Automatic and manual font ratio adjustment (to preserve image aspect
39091ratio)
39092@end enumerate")
39093 (license license:expat)))
39094
39095(define-public python-termcolor
39096 (package
39097 (name "python-termcolor")
39098 (version "2.5.0")
39099 (source
39100 (origin
39101 (method url-fetch)
39102 (uri (pypi-uri "termcolor" version))
39103 (sha256
39104 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
39105 (build-system pyproject-build-system)
39106 (arguments
39107 (list
39108 #:phases
39109 #~(modify-phases %standard-phases
39110 (add-after 'unpack 'relax-coverage-requirements
39111 (lambda _
39112 (substitute* "pyproject.toml"
39113 ((".*coverage.*") "")))))))
39114 (native-inputs
39115 (list python-hatch-vcs python-hatchling python-pytest))
39116 (home-page "https://pypi.org/project/termcolor/")
39117 (synopsis "ANSII Color formatting for terminal output")
39118 (description
39119 "This package provides ANSII Color formatting for output in terminals.")
39120 (license license:expat)))
39121
39122(define-public python-termcolor-1
39123 (package
39124 (inherit python-termcolor)
39125 (version "1.1.0")
39126 (source
39127 (origin
39128 (method url-fetch)
39129 (uri (pypi-uri "termcolor" version))
39130 (sha256
39131 (base32
39132 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
39133 ;; There are no tests
39134 (arguments (list #:tests? #false))
39135 (native-inputs
39136 (list python-setuptools
39137 python-wheel))))
39138
39139(define-public python-termcolor-next
39140 (package
39141 (inherit python-termcolor)
39142 (name "python-termcolor-next")
39143 (version "3.1.0")
39144 (source
39145 (origin
39146 (method url-fetch)
39147 (uri (pypi-uri "termcolor" version))
39148 (sha256
39149 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
39150 (arguments '())))
39151
39152(define-public python-terminaltables
39153 (package
39154 (name "python-terminaltables")
39155 (version "3.1.0")
39156 (source
39157 (origin
39158 (method git-fetch)
39159 (uri (git-reference
39160 (url "https://github.com/Robpol86/terminaltables")
39161 (commit (string-append "v" version))))
39162 (file-name (git-file-name name version))
39163 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
39164 (build-system pyproject-build-system)
39165 ;; XXX: A lot of test fail with flaky behavior.
39166 (arguments (list #:tests? #f))
39167 (native-inputs
39168 (list python-colorclass
39169 python-colorama
39170 python-pytest
39171 python-setuptools
39172 python-termcolor))
39173 (home-page "https://github.com/Robpol86/terminaltables")
39174 (synopsis
39175 "Generate simple tables in terminals from a nested list of strings")
39176 (description
39177 "This package makes it easy to draw tables in terminal/console
39178applications from a list of lists of strings. It supports multi-line rows.")
39179 (license license:expat)))
39180
39181(define-public python-termstyle
39182 (package
39183 (name "python-termstyle")
39184 (version "0.1.11")
39185 (source
39186 (origin
39187 (method url-fetch)
39188 (uri (pypi-uri "termstyle" version))
39189 (sha256
39190 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
39191 (build-system pyproject-build-system)
39192 (arguments
39193 (list #:test-backend #~'custom
39194 #:test-flags #~(list "test3.py")))
39195 (native-inputs
39196 (list python-setuptools))
39197 (home-page "https://github.com/gfxmonk/termstyle")
39198 (synopsis "Console text coloring for Python")
39199 (description "This package provides console text coloring for Python.")
39200 (license license:bsd-3)))
39201
39202(define-public python-text-unidecode
39203 (package
39204 (name "python-text-unidecode")
39205 (version "1.3")
39206 (source
39207 (origin
39208 (method url-fetch)
39209 (uri (pypi-uri "text-unidecode" version))
39210 (sha256
39211 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
39212 (build-system pyproject-build-system)
39213 (native-inputs
39214 (list python-pytest
39215 python-setuptools))
39216 (home-page "https://github.com/kmike/text-unidecode/")
39217 (synopsis "Decode Unicode data")
39218 (description
39219 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
39220Perl library. It can create ASCII representations of Unicode data. In general
39221users should prefer the @code{python-unidecode} package which offers better
39222memory usage and transliteration quality.")
39223 ;; The user can choose either license.
39224 (license (list license:clarified-artistic license:gpl2+))))
39225
39226(define-public python-textdistance
39227 (package
39228 (name "python-textdistance")
39229 (version "4.6.3")
39230 (source
39231 (origin
39232 (method git-fetch)
39233 (uri (git-reference
39234 (url "https://github.com/life4/textdistance")
39235 (commit version)))
39236 (file-name (git-file-name name version))
39237 (sha256
39238 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
39239 (build-system pyproject-build-system)
39240 ;; tests: 430 passed, 1446 warnings
39241 (native-inputs
39242 (list python-numpy
39243 python-pytest
39244 python-setuptools))
39245 (propagated-inputs
39246 (list python-jellyfish
39247 python-distance
39248 python-levenshtein
39249 python-pylev
39250 python-pyxdameraulevenshtein
39251 python-rapidfuzz))
39252 (home-page "https://github.com/life4/textdistance")
39253 (synopsis "Compute distance between the two texts")
39254 (description "@code{textdistance} is a pure Python library for comparing
39255distance between two or more sequences by many algorithms.")
39256 (license license:expat)))
39257
39258(define-public python-textparser
39259 (package
39260 (name "python-textparser")
39261 (version "0.24.0")
39262 (source
39263 (origin
39264 (method url-fetch)
39265 (uri (pypi-uri "textparser" version))
39266 (sha256
39267 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
39268 (build-system pyproject-build-system)
39269 (arguments
39270 (list #:test-backend #~'unittest))
39271 (native-inputs (list python-setuptools))
39272 (home-page "https://github.com/eerimoq/textparser")
39273 (synopsis "Fast text parser for Python")
39274 (description "This library provides a text parser written in the Python
39275language. It aims to be fast.")
39276 (license license:expat)))
39277
39278(define-public python-texttable
39279 (package
39280 (name "python-texttable")
39281 (version "1.7.0")
39282 (source
39283 (origin
39284 (method git-fetch)
39285 (uri (git-reference
39286 (url "https://github.com/foutaise/texttable/")
39287 (commit (string-append "v" version))))
39288 (file-name (git-file-name name version))
39289 (sha256
39290 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
39291 (build-system pyproject-build-system)
39292 (arguments (list #:test-flags #~(list "tests.py")))
39293 (native-inputs (list python-pytest python-setuptools))
39294 (home-page "https://github.com/foutaise/texttable/")
39295 (synopsis "Create simple ASCII tables in Python")
39296 (description
39297 "This package provides a Python module for creating simple ASCII
39298tables.")
39299 (license license:expat)))
39300
39301(define-public python-textual
39302 (package
39303 (name "python-textual")
39304 (version "7.4.0")
39305 (source
39306 (origin
39307 (method git-fetch)
39308 (uri (git-reference
39309 (url "https://github.com/Textualize/textual")
39310 (commit (string-append "v" version))))
39311 (file-name (git-file-name name version))
39312 (sha256
39313 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
39314 (build-system pyproject-build-system)
39315 (arguments
39316 (list
39317 #:test-flags
39318 ;; Snapshot tests require python-pytest-textual-snapshot which
39319 ;; in turn depends on python-textual.
39320 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
39321 "-k" (string-append
39322 ;; Broken for unknown reason.
39323 "not test_textual_env_var"
39324 ;; Tests that require python-treesitter-languages.
39325 " and not test_widget_construct"
39326 " and not test_setting_builtin_language_via_constructor"
39327 " and not test_setting_builtin_language_via_attribute"
39328 " and not test_setting_language_to_none"
39329 " and not test_setting_unknown_language"
39330 " and not test_register_language"
39331 " and not test_update_highlight_query"
39332 " and not test_default_theme"
39333 " and not test_setting_builtin_themes"
39334 " and not test_setting_unknown_theme_raises_exception"
39335 " and not test_registering_and_setting_theme"
39336 " and not test_progress_bar_width_1fr"))
39337 #:phases
39338 #~(modify-phases %standard-phases
39339 (add-after 'unpack 'relax-requirements
39340 (lambda _
39341 (substitute* "pyproject.toml"
39342 (("pygments =.*")
39343 "pygments = \"*\"\n")))))))
39344 (propagated-inputs
39345 (list python-markdown-it-py
39346 python-mdit-py-plugins
39347 python-platformdirs
39348 python-rich
39349 python-tree-sitter
39350 ;; python-tree-sitter-languages ; optional, not packed yet
39351 python-typing-extensions))
39352 (native-inputs
39353 (list python-poetry-core
39354 python-pytest
39355 python-pytest-asyncio
39356 python-pytest-xdist))
39357 (home-page "https://github.com/Textualize/textual")
39358 (synopsis "Build text user interfaces in Python")
39359 (description "Textual is a @acronym{TUI, Text User Interface} framework
39360for Python inspired by modern web development.")
39361 (license license:expat)))
39362
39363(define-public python-tftpy
39364 (package
39365 (name "python-tftpy")
39366 (version "0.8.6")
39367 (source
39368 (origin
39369 (method git-fetch)
39370 (uri (git-reference
39371 (url "https://github.com/msoulier/tftpy")
39372 (commit version)))
39373 (file-name (git-file-name name version))
39374 (sha256
39375 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39376 (build-system pyproject-build-system)
39377 (arguments
39378 (list
39379 #:test-backend #~'unittest
39380 #:test-flags #~(list "tests/test.py")
39381 #:phases
39382 #~(modify-phases %standard-phases
39383 (add-before 'check 'configure-tests
39384 (lambda* (#:key tests? #:allow-other-keys)
39385 (when tests?
39386 ;; The default DEBUG logging level is way too verbose.
39387 (substitute* "tests/test.py"
39388 (("logging\\.DEBUG")
39389 "logging.INFO"))))))))
39390 (native-inputs (list python-setuptools))
39391 (home-page "https://tftpy.sourceforge.net/")
39392 (synopsis "Python trivial file transfer protocol (TFTP) library")
39393 (description
39394 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39395be used to act both as a TFTP client or TFTP server.")
39396 (license license:expat)))
39397
39398(define-public python-thefuzz
39399 (package
39400 (name "python-thefuzz")
39401 (version "0.22.1")
39402 (source
39403 (origin
39404 (method git-fetch)
39405 (uri (git-reference
39406 (url "https://github.com/seatgeek/thefuzz")
39407 (commit version)))
39408 (file-name (git-file-name name version))
39409 (sha256
39410 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39411 (build-system pyproject-build-system)
39412 (arguments
39413 (list #:test-flags #~'("-k" "not TestCodeFormat")
39414 #:phases #~(modify-phases %standard-phases
39415 ;; pycodestyle is only used in TestCodeFormat.
39416 (add-after 'unpack 'unrequire-pycodestyle
39417 (lambda _
39418 (substitute* "test_thefuzz.py"
39419 (("import pycodestyle.*") "")))))))
39420 (propagated-inputs (list python-rapidfuzz))
39421 (native-inputs (list python-hypothesis
39422 python-pytest
39423 python-setuptools))
39424 (home-page "https://github.com/seatgeek/thefuzz")
39425 (synopsis "Fuzzy string matching in Python")
39426 (description
39427 "This Python package implements fuzzing string matching
39428using Levenshtein distance.")
39429 (license license:expat)))
39430
39431(define-public python-three-merge
39432 (package
39433 (name "python-three-merge")
39434 (version "0.1.1")
39435 (source
39436 (origin
39437 ;; There are no tests in the PyPI tarball.
39438 (method git-fetch)
39439 (uri (git-reference
39440 (url "https://github.com/spyder-ide/three-merge")
39441 (commit (string-append "v" version))))
39442 (file-name (git-file-name name version))
39443 (sha256
39444 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39445 (build-system pyproject-build-system)
39446 (propagated-inputs
39447 (list python-diff-match-patch))
39448 (native-inputs
39449 (list python-pytest python-setuptools python-wheel))
39450 (home-page "https://github.com/spyder-ide/three-merge")
39451 (synopsis "Library for merging two strings with respect to a base one")
39452 (description
39453 "This package provides a Python library to perform a 3-way merge between
39454strings, based on @code{diff-match-patch}. This library performs merges at a
39455character level, as opposed to most VCS systems, which opt for a line-based
39456approach.")
39457 (license license:expat)))
39458
39459(define-public python-throttler
39460 (package
39461 (name "python-throttler")
39462 (version "1.2.3")
39463 (source
39464 (origin
39465 (method git-fetch)
39466 (uri (git-reference
39467 (url "https://github.com/uburuntu/throttler")
39468 (commit (string-append "v" version))))
39469 (file-name (git-file-name name version))
39470 (sha256
39471 (base32 "1k0a3hxih2qk3fxljcwbbpa723bshrvcqgz2lxgll32g1lfa3hnd"))))
39472 (build-system pyproject-build-system)
39473 (native-inputs
39474 (list python-aiohttp
39475 python-pytest
39476 python-pytest-asyncio
39477 python-setuptools))
39478 (home-page "https://github.com/uburuntu/throttler")
39479 (synopsis "Throttling with asyncio support")
39480 (description
39481 "This is a Python package for easy throttling with asyncio support.")
39482 (license license:expat)))
39483
39484(define-public python-tifffile
39485 (package
39486 (name "python-tifffile")
39487 (version "2025.10.4")
39488 (source
39489 (origin
39490 (method url-fetch)
39491 (uri (pypi-uri "tifffile" version))
39492 (sha256
39493 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39494 (build-system pyproject-build-system)
39495 ;; Tests require lfdfiles, which depends on tifffile
39496 (arguments (list #:tests? #f))
39497 (propagated-inputs
39498 (list python-numpy))
39499 (native-inputs
39500 (list python-setuptools))
39501 (home-page "https://www.lfd.uci.edu/~gohlke/")
39502 (synopsis "Read and write TIFF(r) files")
39503 (description
39504 "This package lets you read image and metadata from many bio-scientific
39505formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39506MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39507to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39508 (license license:bsd-3)))
39509
39510(define-public python-tiktoken
39511 (package
39512 (name "python-tiktoken")
39513 (version "0.9.0")
39514 (source
39515 (origin
39516 (method url-fetch)
39517 (uri (pypi-uri "tiktoken" version))
39518 (sha256
39519 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39520 (build-system cargo-build-system)
39521 (arguments
39522 (list
39523 #:install-source? #false
39524 #:imported-modules
39525 (append %pyproject-build-system-modules
39526 %cargo-build-system-modules)
39527 #:modules
39528 '((guix build cargo-build-system)
39529 ((guix build pyproject-build-system) #:prefix py:)
39530 (guix build utils))
39531 #:phases
39532 #~(modify-phases %standard-phases
39533 (replace 'build
39534 (assoc-ref py:%standard-phases 'build))
39535 (add-after 'install 'wrap
39536 (lambda _
39537 ;; Collection of python- and pyproject-build-system phases
39538 ;; between 'install and 'check.
39539 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39540 (assoc-ref py:%standard-phases 'add-install-to-path)
39541 (assoc-ref py:%standard-phases 'wrap)
39542 (assoc-ref py:%standard-phases 'create-entrypoints)
39543 (assoc-ref py:%standard-phases 'compile-bytecode)))
39544 (replace 'install
39545 (assoc-ref py:%standard-phases 'install)))))
39546 (propagated-inputs (list python-regex python-requests))
39547 (inputs (cargo-inputs 'python-tiktoken))
39548 (native-inputs
39549 (list python-setuptools
39550 python-setuptools-rust
39551 python-wheel
39552 python-wrapper))
39553 (home-page "https://github.com/openai/tiktoken/")
39554 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39555 (description
39556 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39557@code{OpenAI's} models.")
39558 (license license:expat)))
39559
39560(define-public python-timed-threads
39561 (package
39562 (name "python-timed-threads")
39563 (version "2.0.0")
39564 (source
39565 (origin
39566 (method git-fetch)
39567 (uri (git-reference
39568 (url "https://github.com/Mathics3/python-timed-threads/")
39569 (commit version)))
39570 (file-name (git-file-name name version))
39571 (sha256
39572 (base32 "062lml0dg13pi7b871q8fql5rff7g7gs6ljbb8rmm0vp98vqc5fp"))))
39573 (build-system pyproject-build-system)
39574 (native-inputs
39575 (list python-pytest python-setuptools))
39576 (home-page "https://github.com/Mathics3/python-timed-threads/")
39577 (synopsis "Ability to set absolute time deadlines on asynchronous threads")
39578 (description
39579 "This package adds the ability to set relative elapsed time deadlines on
39580asynchronous threads, and allows one thread to stop another by means of
39581raising an exception.")
39582 (license license:expat)))
39583
39584(define-public python-timeout-decorator
39585 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39586 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39587 (package
39588 (name "python-timeout-decorator")
39589 (version "0.5.0")
39590 (source
39591 (origin
39592 (method url-fetch)
39593 (uri (pypi-uri "timeout-decorator" version))
39594 (sha256
39595 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39596 (build-system pyproject-build-system)
39597 (arguments (list #:tests? #f))
39598 (native-inputs (list python-setuptools python-wheel))
39599 (home-page "https://github.com/pnpnpn/timeout-decorator")
39600 (synopsis "Timeout decorator")
39601 (description "This package provides a decorator that raises an error
39602when an operation takes longer than expected.")
39603 (license license:expat)))
39604
39605(define-public python-titlecase
39606 (package
39607 (name "python-titlecase")
39608 (version "2.4.1")
39609 (source
39610 (origin
39611 (method url-fetch)
39612 (uri (pypi-uri "titlecase" version))
39613 (sha256
39614 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39615 (build-system pyproject-build-system)
39616 (arguments
39617 (list
39618 #:test-backend #~'unittest))
39619 (native-inputs
39620 (list python-setuptools))
39621 (home-page "https://github.com/ppannuto/python-titlecase")
39622 (synopsis "Capitalize strings similar to book titles")
39623 (description
39624 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39625It capitalizes (predominantly English) strings in a way that is similar to
39626book titles, using the New York Times Manual of Style to leave certain words
39627lowercase.")
39628 (license license:expat)))
39629
39630(define-public python-tlsh
39631 (package
39632 (name "python-tlsh")
39633 (version "4.11.2")
39634 (home-page "https://github.com/trendmicro/tlsh")
39635 (source
39636 (origin
39637 (method git-fetch)
39638 (uri (git-reference (url home-page) (commit version)))
39639 (file-name (git-file-name name version))
39640 (sha256
39641 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39642 (build-system pyproject-build-system)
39643 (arguments
39644 (list
39645 #:phases
39646 #~(modify-phases %standard-phases
39647 (add-before 'build 'configure
39648 (lambda _
39649 (invoke "cmake" "."))) ;to generate tlsh_version.h
39650 (add-after 'configure 'chdir
39651 (lambda _
39652 (chdir "py_ext")))
39653 (replace 'check
39654 (lambda* (#:key tests? #:allow-other-keys)
39655 (when tests?
39656 (with-directory-excursion "../Testing"
39657 (invoke "./python_test.sh"))))))))
39658 (native-inputs (list cmake-minimal python-setuptools))
39659 (synopsis "Fuzzy matching library for Python")
39660 (description
39661 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39662Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39663value which can be used for similarity comparisons. Similar objects have
39664similar hash values, which allows for the detection of similar objects by
39665comparing their hash values. The byte stream should have a sufficient amount
39666of complexity; for example, a byte stream of identical bytes will not generate
39667a hash value.")
39668 (license license:asl2.0)))
39669
39670(define-public python-tlv8
39671 (package
39672 (name "python-tlv8")
39673 (version "0.10.0")
39674 (source
39675 (origin
39676 (method git-fetch)
39677 (uri (git-reference
39678 (url "https://github.com/jlusiardi/tlv8_python")
39679 (commit (string-append "v" version))))
39680 (file-name (git-file-name name version))
39681 (sha256
39682 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39683 (build-system pyproject-build-system)
39684 (native-inputs (list python-setuptools python-pytest))
39685 (home-page "https://github.com/jlusiardi/tlv8_python")
39686 (synopsis
39687 "Python library for @acronym{TLV, type-length-value} encoded data")
39688 (description
39689 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39690Represents type and length by one byte each, hence the name @code{tlv8}.")
39691 (license license:asl2.0)))
39692
39693(define-public python-tokenize-rt
39694 (package
39695 (name "python-tokenize-rt")
39696 (version "6.2.0")
39697 (source
39698 (origin
39699 (method git-fetch)
39700 (uri (git-reference
39701 (url "https://github.com/asottile/tokenize-rt")
39702 (commit (string-append "v" version))))
39703 (file-name (git-file-name name version))
39704 (sha256
39705 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39706 (build-system pyproject-build-system)
39707 (native-inputs (list python-pytest python-setuptools))
39708 (home-page "https://github.com/asottile/tokenize-rt")
39709 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39710 (description
39711 "This Python library is a wrapper around @code{tokenize} from the Python
39712standard library. It provides two additional tokens @code{ESCAPED_NL} and
39713@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39714and @code{tokens_to_src} to roundtrip.")
39715 (license license:expat)))
39716
39717(define-public python-tomlkit
39718 (package
39719 (name "python-tomlkit")
39720 (version "0.15.0")
39721 (source
39722 (origin
39723 (method git-fetch)
39724 (uri (git-reference
39725 (url "https://github.com/sdispater/tomlkit")
39726 (commit version)))
39727 (file-name (git-file-name name version))
39728 (sha256
39729 (base32 "00sv5x8j78zkirzh9rl89lkpwfwhkhrq4mql2p4rqws1j37zx88g"))))
39730 (build-system pyproject-build-system)
39731 (arguments
39732 (list
39733 #:phases
39734 #~(modify-phases %standard-phases
39735 ;; toml-test is submodule to
39736 ;; <https://github.com/toml-lang/toml-test>.
39737 (add-after 'unpack 'copy-toml-test-source
39738 (lambda _
39739 (copy-recursively
39740 #$(package-source (this-package-native-input "toml-test"))
39741 "tests/toml-test"))))))
39742 (native-inputs
39743 (list python-poetry-core
39744 python-pytest
39745 toml-test))
39746 (home-page "https://github.com/sdispater/tomlkit")
39747 (synopsis "Style-preserving TOML library")
39748 (description
39749 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39750preserves all comments, indentations, whitespace and internal element ordering,
39751and makes them accessible and editable via an intuitive API. It can also
39752create new TOML documents from scratch using the provided helpers. Part of the
39753implementation has been adapted, improved, and fixed from Molten.")
39754 (license license:expat)))
39755
39756(define-public python-toolrack
39757 (package
39758 (name "python-toolrack")
39759 (version "4.0.3")
39760 (source
39761 (origin
39762 (method git-fetch)
39763 (uri (git-reference
39764 (url "https://github.com/albertodonato/toolrack")
39765 (commit (string-append "v" version))))
39766 (file-name (git-file-name name version))
39767 (sha256
39768 (base32
39769 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39770 (build-system pyproject-build-system)
39771 (arguments
39772 (list
39773 #:phases
39774 #~(modify-phases %standard-phases
39775 (add-after 'unpack 'patch-/bin/sh
39776 (lambda _
39777 (substitute* "tests/aio/process_test.py"
39778 (("/bin/sh")
39779 (which "sh"))))))))
39780 (native-inputs
39781 (list python-pytest
39782 python-pytest-asyncio
39783 python-pytest-mock
39784 python-setuptools))
39785 (home-page "https://github.com/albertodonato/toolrack")
39786 (synopsis "Collection of Python utility functions and classes")
39787 (description "This package provides a collection of miscellaneous utility
39788functions and classes.")
39789 (license license:lgpl3+)))
39790
39791(define-public python-toolshed
39792 (package
39793 (name "python-toolshed")
39794 (version "0.4.8")
39795 (source
39796 (origin
39797 (method git-fetch)
39798 (uri (git-reference
39799 (url "https://github.com/brentp/toolshed")
39800 (commit (string-append "v" version))))
39801 (file-name (git-file-name name version))
39802 (sha256
39803 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39804 (build-system pyproject-build-system)
39805 (native-inputs
39806 (list python-pytest
39807 python-setuptools))
39808 (home-page "https://github.com/brentp/toolshed/")
39809 (synopsis "Collection of modules and functions for working with data")
39810 (description "This is a collection of well-tested, simple modules and
39811functions that aim to reduce boilerplate when working with data.")
39812 (license license:bsd-2)))
39813
39814(define-public python-toolz
39815 (package
39816 (name "python-toolz")
39817 (version "1.1.0")
39818 (source
39819 (origin
39820 (method git-fetch)
39821 (uri (git-reference
39822 (url "https://github.com/pytoolz/toolz")
39823 (commit version)))
39824 (file-name (git-file-name name version))
39825 (sha256
39826 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39827 (build-system pyproject-build-system)
39828 (arguments
39829 (list
39830 #:phases
39831 #~(modify-phases %standard-phases
39832 (add-after 'unpack 'set-version
39833 (lambda _
39834 (substitute* "pyproject.toml"
39835 (("\\[tool.setuptools-git-versioning\\]" all)
39836 (string-append "[tool.setuptools_scm]\n"
39837 "write_to = \"toolz/_version.py\"\n"
39838 all))))))))
39839 (native-inputs
39840 (list python-pytest
39841 python-setuptools
39842 ;; Project expects setuptools-git-versioning to build version, but
39843 ;; it does not support envar override as seuptools-scm.
39844 python-setuptools-scm))
39845 (home-page "https://github.com/pytoolz/toolz/")
39846 (synopsis "List processing tools and functional utilities")
39847 (description
39848 "This package provides a set of utility functions for iterators,
39849functions, and dictionaries.")
39850 (license license:bsd-3)))
39851
39852(define-public python-toposort
39853 (package
39854 (name "python-toposort")
39855 (version "1.10")
39856 (source
39857 (origin
39858 (method url-fetch)
39859 (uri (pypi-uri "toposort" version))
39860 (sha256
39861 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39862 (build-system pyproject-build-system)
39863 (arguments
39864 (list #:test-backend #~'custom
39865 #:test-flags #~(list "-m" "test.test_toposort")))
39866 (native-inputs (list python-setuptools))
39867 (home-page "https://gitlab.com/ericvsmith/toposort")
39868 (synopsis "Topological sort algorithm")
39869 (description
39870 "This package provides an implementation of a topological sort
39871algorithm.")
39872 (license license:asl2.0)))
39873
39874(define-public python-towncrier
39875 (package
39876 (name "python-towncrier")
39877 (version "25.8.0")
39878 (source
39879 (origin
39880 (method url-fetch)
39881 (uri (pypi-uri "towncrier" version))
39882 (sha256
39883 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39884 (build-system pyproject-build-system)
39885 (native-inputs
39886 (list git-minimal/pinned ;tests create git repositories
39887 python-hatchling
39888 python-pytest
39889 python-twisted))
39890 (propagated-inputs
39891 (list python-click
39892 python-jinja2))
39893 (home-page "https://towncrier.readthedocs.io/en/stable/")
39894 (synopsis "Manage release notes")
39895 (description
39896 "@code{towncrier} is a utility to produce useful, summarized news files
39897 (also known as changelogs) for a project.")
39898 (license license:expat)))
39899
39900(define-public python-tqdm
39901 (package
39902 (name "python-tqdm")
39903 (version "4.67.1")
39904 (source
39905 (origin
39906 (method url-fetch)
39907 (uri (pypi-uri "tqdm" version))
39908 (sha256
39909 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39910 (build-system pyproject-build-system)
39911 (arguments
39912 (list #:test-flags
39913 '(list "-o" "asyncio_mode=auto"
39914 "-k" "not perf and not test_rlock_creation")))
39915 (native-inputs
39916 (list python-pytest
39917 python-pytest-asyncio
39918 python-pytest-timeout
39919 python-setuptools
39920 python-setuptools-scm
39921 python-toml
39922 python-wheel))
39923 (home-page "https://github.com/tqdm/tqdm")
39924 (synopsis "Fast, extensible progress meter")
39925 (description
39926 "Make loops show a progress bar on the console by just wrapping any
39927iterable with @code{|tqdm(iterable)|}. Offers many options to define
39928design and layout.")
39929 (license (list license:mpl2.0 license:expat))))
39930
39931(define-public python-traitlets
39932 (package
39933 (name "python-traitlets")
39934 (version "5.14.3")
39935 (source
39936 (origin
39937 (method url-fetch)
39938 (uri (pypi-uri "traitlets" version))
39939 (sha256
39940 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39941 (build-system pyproject-build-system)
39942 ;; tests: 566 passed, 3 skipped, 1 warning
39943 (native-inputs
39944 (list python-hatchling
39945 python-pytest))
39946 (home-page "https://ipython.org")
39947 (synopsis "Configuration system for Python applications")
39948 (description
39949 "Traitlets is a framework that lets Python classes have attributes with
39950type checking, dynamically calculated default values, and ‘on change’
39951callbacks. The package also includes a mechanism to use traitlets for
39952configuration, loading values from files or from command line arguments. This
39953is a distinct layer on top of traitlets, so you can use traitlets in your code
39954without using the configuration machinery.")
39955 (license license:bsd-3)))
39956
39957(define-public python-translate-toolkit
39958 (package
39959 (name "python-translate-toolkit")
39960 (version "3.15.6")
39961 (source
39962 (origin
39963 (method url-fetch)
39964 (uri (pypi-uri "translate_toolkit" version))
39965 (sha256
39966 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39967 (build-system pyproject-build-system)
39968 (arguments
39969 (list
39970 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39971 #:test-flags
39972 ;; TODO: Some of the optional inputs are not packaged yet.
39973 #~(list #$@(map (lambda (file) (string-append "--ignore="
39974 "tests/translate/"
39975 file))
39976 (list "convert/test_ini2po.py"
39977 "convert/test_php2po.py"
39978 "convert/test_po2ini.py"
39979 "convert/test_po2php.py"
39980 "storage/test_cpo.py"
39981 "storage/test_fluent.py"
39982 "storage/test_ini.py"
39983 "storage/test_php.py"
39984 "storage/test_po.py"
39985 "storage/test_pypo.py"
39986 "storage/test_subtitles.py"))
39987 #$@(map (lambda (test) (string-append "--deselect="
39988 "tests/translate/storage/"
39989 test))
39990 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39991 ;; 0xff in position 0: invalid start byte
39992 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39993 ;; FileNotFoundError: [Errno 2] No such file or
39994 ;; directory: 'msgfmt'
39995 "test_mo.py::TestMOFile::test_output"
39996 ;; assert 0 == -16200
39997 "test_poheader.py::test_timezones"))
39998 #$@(map (lambda (test) (string-append "--deselect="
39999 "tests/translate/tools/"
40000 test))
40001 ;; XXX: Some issues with XML parsing.
40002 (list "test_junitmsgfmt.py::test_output"
40003 "test_pocount.py::test_output"
40004 "test_pocount.py::test_cases"))
40005 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
40006 (native-inputs
40007 (list python-pytest
40008 python-setuptools
40009 python-setuptools-scm))
40010 (propagated-inputs
40011 (list python-cwcwidth
40012 python-cheroot
40013 ;; python-aeidon
40014 ;; python-fluent
40015 python-iniparse
40016 python-lxml
40017 python-mistletoe
40018 python-phply
40019 python-pyparsing
40020 python-ruamel.yaml
40021 python-vobject))
40022 (home-page "https://toolkit.translatehouse.org")
40023 (synopsis "Tools and API for translation and localization engineering")
40024 (description
40025 "Tools and API for translation and localization engineering. It contains
40026several utilities, as well as an API for building localization tools.")
40027 (license license:gpl2+)))
40028
40029(define-public python-translitcodec
40030 (package
40031 (name "python-translitcodec")
40032 (version "0.7.0")
40033 (source
40034 (origin
40035 (method git-fetch)
40036 (uri (git-reference
40037 (url "https://github.com/claudep/translitcodec")
40038 (commit (string-append "version-" version))))
40039 (file-name (git-file-name name version))
40040 (sha256
40041 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
40042 (build-system pyproject-build-system)
40043 (native-inputs (list python-pytest python-setuptools))
40044 (home-page "https://github.com/claudep/translitcodec")
40045 (synopsis "Unicode to 8-bit charset transliteration codec")
40046 (description
40047 "This package contains codecs for transliterating ISO 10646 texts into
40048best-effort representations using smaller coded character sets (ASCII,
40049ISO 8859, etc.).")
40050 (license license:expat)))
40051
40052(define-public python-treelib
40053 (package
40054 (name "python-treelib")
40055 (version "1.8.0")
40056 (source
40057 (origin
40058 (method git-fetch)
40059 (uri (git-reference
40060 (url "https://github.com/caesar0301/treelib")
40061 (commit (string-append "v" version))))
40062 (file-name (git-file-name name version))
40063 (sha256
40064 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
40065 (patches
40066 (search-patches "python-treelib-remove-python2-compat.patch"))))
40067 (build-system pyproject-build-system)
40068 (native-inputs (list python-poetry-core python-pytest))
40069 (home-page "https://github.com/caesar0301/treelib")
40070 (synopsis "Implementation of a tree structure in Python")
40071 (description
40072 "This package provides a Python implementation of a tree structure.")
40073 (license license:asl2.0)))
40074
40075(define-public python-trio
40076 (package
40077 (name "python-trio")
40078 (version "0.33.0")
40079 (source
40080 (origin
40081 (method git-fetch)
40082 (uri (git-reference
40083 (url "https://github.com/python-trio/trio")
40084 (commit (string-append "v" version))))
40085 (file-name (git-file-name name version))
40086 (sha256
40087 (base32 "1ibkp7bgdv0k099szk8181rfn7jm60kh8kpfrkfr4pnwjd6abslf"))))
40088 (build-system pyproject-build-system)
40089 (arguments
40090 (list
40091 ;; tests: 507 passed, 45 skipped, 37 deselected
40092 #:test-flags
40093 #~(list
40094 #$@(if (package? (this-package-native-input "python-trustme"))
40095 #~()
40096 #~("--ignore=src/trio/_tests/test_dtls.py"
40097 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
40098 "--ignore=src/trio/_tests/test_ssl.py"))
40099 ;; Skip tests for the upstream repository's tooling.
40100 "--ignore=src/trio/_tests/tools"
40101 "-k" (string-join
40102 (list
40103 ;; Keyboard interrupts misbehave in the build sandbox.
40104 "not test_ki_in_repl"
40105 "test_KI_interrupts"
40106 "test_run_in_trio_thread_ki"
40107 ;; Somehow f'{check_errno_is_5!r}' evaluates
40108 ;; to "'check_errno_is_5'" instead of "<function ...>",
40109 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
40110 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
40111 ;; will probably be removed in version 0.35.
40112 "test_Matcher_check"
40113 "test_matcher_tostring"
40114 "test_raisesgroup_tostring"
40115 ;; Failure in name resolution.
40116 "test_SocketType_resolve"
40117 ;; OSError: protocol not found.
40118 "test_getprotobyname"
40119 ;; Drop pylint and jedi.
40120 "test_static_tool_sees_all_symbols")
40121 " and not ")
40122 "src/trio/_tests")
40123 #:phases
40124 #~(modify-phases %standard-phases
40125 (add-after 'unpack 'patch-pthread-path
40126 (lambda* (#:key inputs #:allow-other-keys)
40127 (substitute* '("src/trio/_core/_thread_cache.py"
40128 "src/trio/_tests/test_threads.py")
40129 (("ctypes.util.find_library\\(\"pthread\"\\)")
40130 (simple-format #f "~s"
40131 (search-input-file inputs "lib/libpthread.so.0"))))))
40132 (add-before 'check 'set-env
40133 (lambda _
40134 ;; Tests require a writable home.
40135 (setenv "HOME" "/tmp"))))))
40136 (native-inputs
40137 (append
40138 (if (supported-package? python-pyopenssl)
40139 (list python-pyopenssl)
40140 '())
40141 (if (supported-package? python-trustme)
40142 (list python-trustme)
40143 '())
40144 (list python-async-generator)
40145 (if (supported-package? python-cryptography)
40146 (list python-cryptography)
40147 '())
40148 (list python-pytest
40149 python-setuptools)))
40150 (propagated-inputs
40151 (list python-attrs
40152 python-idna
40153 python-outcome
40154 python-sniffio
40155 python-sortedcontainers))
40156 (home-page "https://github.com/python-trio/trio")
40157 ;; (home-page "https://trio.readthedocs.io")
40158 (synopsis "Friendly Python library for async concurrency and I/O")
40159 (description
40160 "Trio strives to be a production-quality, async/await-native I/O library
40161for Python. Like all async libraries, its main purpose is to help you write
40162programs that do multiple things at the same time with parallelized I/O.")
40163 ;; Either license applies.
40164 (license (list license:expat license:asl2.0))))
40165
40166(define-public python-trio-typing
40167 (package
40168 (name "python-trio-typing")
40169 (version "0.10.0")
40170 (source
40171 (origin
40172 (method git-fetch)
40173 (uri (git-reference
40174 (url "https://github.com/python-trio/trio-typing")
40175 (commit (string-append "v" version))))
40176 (file-name (git-file-name name version))
40177 (sha256
40178 (base32 "127zpngp6r87kapvx5bwcl5awhyrsykwmvnxrb67qv7yz1s4z278"))))
40179 (build-system pyproject-build-system)
40180 (arguments
40181 (list #:tests? #f )) ;no proper tests
40182 (native-inputs
40183 (list python-setuptools))
40184 (propagated-inputs
40185 (list python-async-generator
40186 python-importlib-metadata
40187 python-mypy-extensions
40188 python-packaging
40189 python-trio
40190 python-typing-extensions))
40191 (home-page "https://github.com/python-trio/trio-typing")
40192 (synopsis "Static type checking support for Trio and related projects")
40193 (description
40194 "This package provides:
40195
40196@itemize
40197@item PEP 561 typing stubs packages for the Trio project packages:
40198
40199@itemize
40200@item trio (@code{trio-stubs})
40201@item outcome (@code{outcome-stubs})
40202@item async_generator (@code{async_generator-stubs})
40203@end itemize
40204
40205@item A package @code{trio_typing} containing types that Trio programs often
40206want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
40207a mypy plugin that smooths over some limitations in the basic type hints.
40208@end itemize")
40209 ;; Either license applies.
40210 (license (list license:expat license:asl2.0))))
40211
40212(define-public python-trubar
40213 (package
40214 (name "python-trubar")
40215 (version "0.3.4")
40216 (source
40217 (origin
40218 (method url-fetch)
40219 (uri (pypi-uri "trubar" version))
40220 (sha256
40221 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
40222 (build-system pyproject-build-system)
40223 (arguments
40224 (list
40225 #:test-flags
40226 #~(list "-k" (string-join
40227 ;; AttributeError: module 'libcst' has no attribute
40228 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
40229 (list "not test_import_from_future"
40230 "test_inport_after_docstring"
40231 ;; AssertionError: Items in the second set but not
40232 ;; the first
40233 "test_walk_files")
40234 " and not "))))
40235 (native-inputs
40236 (list python-pytest
40237 python-setuptools
40238 python-wheel))
40239 (propagated-inputs
40240 (list python-libcst
40241 python-pyyaml))
40242 (home-page "https://github.com/janezd/trubar")
40243 (synopsis "Utility for translation of Python sources")
40244 (description
40245 "This package provides a tool for translation and localization of Python
40246programs via modification of source files. Trubar supports f-strings and does
40247not require any changes to the original source code, such as marking strings
40248for translation.")
40249 (license license:expat)))
40250
40251(define-public python-twine
40252 (package
40253 (name "python-twine")
40254 (version "6.2.0")
40255 (source
40256 (origin
40257 (method url-fetch)
40258 (uri (pypi-uri "twine" version))
40259 (sha256
40260 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
40261 (build-system pyproject-build-system)
40262 (arguments
40263 (list
40264 ;; tests: 228 passed, 1 deselected
40265 #:test-flags
40266 ;; Assertion is not equal for one tests.
40267 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
40268 (native-inputs
40269 (list python-pretend
40270 python-pytest
40271 python-pytest-socket
40272 python-setuptools
40273 python-setuptools-scm))
40274 (propagated-inputs
40275 (list python-id
40276 python-keyring
40277 python-packaging
40278 python-readme-renderer
40279 python-requests
40280 python-requests-toolbelt
40281 python-rfc3986
40282 python-rich
40283 python-urllib3))
40284 (home-page "https://github.com/pypa/twine")
40285 (synopsis "Collection of utilities for interacting with PyPI")
40286 (description
40287 "@code{twine} currently supports registering projects and uploading
40288distributions. It authenticates the user over HTTPS, allows them to pre-sign
40289their files and supports any packaging format (including wheels).")
40290 (license license:asl2.0)))
40291
40292(define-public python-twisted
40293 (package
40294 (name "python-twisted")
40295 (version "25.5.0")
40296 (source
40297 (origin
40298 (method git-fetch)
40299 (uri (git-reference
40300 (url "https://github.com/twisted/twisted")
40301 (commit (string-append "twisted-" version))))
40302 (file-name (git-file-name name version))
40303 (sha256
40304 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
40305 (build-system pyproject-build-system)
40306 (arguments
40307 (list
40308 ;; tests: skips=638, successes=9759
40309 #:test-backend #~'custom
40310 #:test-flags
40311 #~(list "-m" "twisted.trial"
40312 "--temp-directory=/tmp/_trial_temp"
40313 (string-append "-j" (number->string (min 8 (parallel-job-count))))
40314 "twisted")
40315 #:phases
40316 #~(modify-phases %standard-phases
40317 (add-after 'unpack 'disable-broken-tests
40318 (lambda _
40319 (for-each delete-file
40320 (list
40321 ;; No idea why they fail
40322 "src/twisted/test/test_log.py"
40323 ;; Network tests
40324 "src/twisted/conch/test/test_cftp.py"
40325 "src/twisted/internet/test/test_endpoints.py"
40326 "src/twisted/protocols/test/test_tls.py"
40327 "src/twisted/test/test_sslverify.py"
40328 "src/twisted/web/test/test_agent.py"
40329 "src/twisted/web/test/test_tap.py"
40330 ;; These need a git executable
40331 "src/twisted/python/test/test_release.py"
40332 ;; These leave behind a socket file, which breaks the
40333 ;; build with "...has an unsupported type"
40334 "src/twisted/internet/test/test_unix.py"
40335 "src/twisted/test/test_unix.py"
40336 ;; These complain about missing test modules.
40337 "src/twisted/test/test_failure.py"
40338 "src/twisted/web/test/test_http2.py"
40339 "src/twisted/conch/test/test_forwarding.py")))))))
40340 (propagated-inputs
40341 (list python-attrs
40342 python-automat
40343 python-bcrypt
40344 python-constantly
40345 python-hyperlink
40346 python-incremental
40347 python-typing-extensions
40348 python-zope-interface
40349 ;; [conch]
40350 (list python "tk")
40351 python-appdirs
40352 python-bcrypt
40353 python-cryptography
40354 ;; [http2]
40355 python-h2
40356 python-priority
40357 ;; [tls]
40358 python-idna
40359 python-pyopenssl
40360 python-service-identity
40361 ;; [serial]
40362 python-pyserial))
40363 (native-inputs
40364 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
40365 python-hatch-fancy-pypi-readme
40366 python-hatchling
40367 python-httpx
40368 python-hypothesis
40369 python-incremental
40370 python-pyhamcrest
40371 python-pytest))
40372 (home-page "https://twistedmatrix.com/")
40373 (synopsis "Asynchronous networking framework written in Python")
40374 (description
40375 "Twisted is an extensible framework for Python programming, with special
40376focus on event-based network programming and multiprotocol integration.")
40377 (license license:expat)))
40378
40379(define-public python-txredisapi
40380 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40381 ;; The latest version is 1.4.11, but it contains a bug:
40382 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40383 ;; patched in commit d2259a3.
40384 (revision "0"))
40385 (package
40386 (name "python-txredisapi")
40387 (version (git-version "1.4.11" revision commit))
40388 (source
40389 (origin
40390 (method git-fetch)
40391 ;; The source distribution on PyPi is missing test files:
40392 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40393 (uri (git-reference
40394 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40395 (commit commit)))
40396 (file-name (git-file-name name version))
40397 (sha256
40398 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40399 (build-system pyproject-build-system)
40400 (arguments
40401 (list #:test-backend #~'custom
40402 #:test-flags #~(list "-m" "twisted.trial" "tests")
40403 #:phases
40404 #~(modify-phases %standard-phases
40405 ;; The tests require a running Redis server.
40406 (add-before 'check 'start-redis
40407 (lambda _
40408 (invoke "redis-server" "--daemonize" "yes"))))))
40409 (propagated-inputs (list python-twisted))
40410 (native-inputs (list python-mock python-setuptools redis))
40411 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40412 (synopsis "Non-blocking Redis client for Python")
40413 (description "txredisapi is a non-blocking client driver for the Redis
40414database, written in Python. It uses Twisted for asynchronous communication
40415with Redis.")
40416 (license license:asl2.0))))
40417
40418(define-public python-typeapi
40419 (package
40420 (name "python-typeapi")
40421 (version "2.2.4")
40422 (source
40423 (origin
40424 (method url-fetch)
40425 (uri (pypi-uri "typeapi" version))
40426 (sha256
40427 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40428 (build-system pyproject-build-system)
40429 (arguments
40430 (list
40431 #:tests? #false)) ;there are none
40432 (propagated-inputs (list python-typing-extensions))
40433 (native-inputs (list python-hatchling))
40434 (home-page "https://pypi.org/project/typeapi/")
40435 (synopsis "Type hints")
40436 (description "The typeapi package provides an object-oriented interface
40437for introspecting PEP484 type hints at runtime, including forward references
40438that make use of the more recent PEP585 and PEP604 type hint features in
40439Python versions that don't natively support them.")
40440 (license license:expat)))
40441
40442(define-public python-typer
40443 (package
40444 (name "python-typer")
40445 ;; XXX: starting from 0.26.0, Typer vendors Click.
40446 (version "0.26.4")
40447 (source
40448 (origin
40449 (method git-fetch)
40450 (uri (git-reference
40451 (url "https://github.com/fastapi/typer")
40452 (commit version)))
40453 (file-name (git-file-name name version))
40454 (sha256
40455 (base32 "0cmk9wsnml1yykzs5sxfdww3bchh9f2f63cj6nirw39zilp1jjw0"))))
40456 (build-system pyproject-build-system)
40457 (arguments
40458 (list
40459 #:phases
40460 #~(modify-phases %standard-phases
40461 (add-before 'check 'pre-check
40462 (lambda _
40463 (setenv "HOME" "/tmp"))))
40464 #:test-flags
40465 #~(list "-k" "not test_cli"
40466 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40467 (native-inputs
40468 (list python-coverage ;this is required in tests
40469 python-pdm-backend
40470 python-pytest
40471 python-pytest-xdist))
40472 (propagated-inputs
40473 (list python-annotated-doc
40474 python-rich
40475 python-shellingham))
40476 (home-page "https://github.com/fastapi/typer")
40477 (synopsis "Typer builds CLI based on Python type hints")
40478 (description
40479 "Typer is a library for building CLI applications. It's based on Python
404803.6+ type hints.")
40481 (license license:expat)))
40482
40483;; Starting from 0.26.0, Typer vendors its own fork of Click (typer._click) and no longer
40484;; recognises subclasses of the real click.Context as the injected CLI
40485;; context, breaking some packages at import time. Keep until all dependents migrated.
40486(define-public python-typer-without-click
40487 (hidden-package
40488 (package
40489 (inherit python-typer)
40490 (version "0.25.1")
40491 (source
40492 (origin
40493 (method git-fetch)
40494 (uri (git-reference
40495 (url "https://github.com/fastapi/typer")
40496 (commit version)))
40497 (file-name (git-file-name "python-typer" version))
40498 (sha256
40499 (base32 "0z6k7qpd49wqvxl3q5jwq2kl0y3w8dxwxmp42qbkbvwixfqxg2qw"))))
40500 (propagated-inputs
40501 (list python-click
40502 python-typing-extensions
40503 python-annotated-doc
40504 python-rich
40505 python-shellingham))
40506 (arguments
40507 (substitute-keyword-arguments arguments
40508 ((#:test-flags flags #~'())
40509 ;; Ignore tests that fail due to Click error-message wording.
40510 ;; These happen because Click version is more recent than expected.
40511 #~(cons*
40512 (string-append "--deselect=tests/test_suggest_commands.py"
40513 "::test_typo_suggestion_disabled")
40514 (string-append "--ignore=tests/test_tutorial/test_commands/"
40515 "test_callback/test_tutorial001.py")
40516 (string-append "--ignore-glob=tests/test_tutorial/"
40517 "test_parameter_types/test_bool/test_tutorial0*.py")
40518 #$flags)))))))
40519
40520(define-public python-types-aiofiles
40521 (package
40522 (name "python-types-aiofiles")
40523 (version "25.1.0.20251011")
40524 (source
40525 (origin
40526 (method url-fetch)
40527 (uri (pypi-uri "types_aiofiles" version))
40528 (sha256
40529 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40530 (build-system pyproject-build-system)
40531 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40532 (native-inputs (list python-setuptools))
40533 (home-page "https://github.com/python/typeshed")
40534 (synopsis "Typing stubs for python-aiofiles")
40535 (description "This package providis typing stubs for python-aiofiles.")
40536 (license license:asl2.0)))
40537
40538(define-public python-types-colorama
40539 (package
40540 (name "python-types-colorama")
40541 (version "0.4.15.20250801")
40542 (source
40543 (origin
40544 (method url-fetch)
40545 (uri (pypi-uri "types_colorama" version))
40546 (sha256
40547 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40548 (build-system pyproject-build-system)
40549 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40550 (native-inputs
40551 (list python-setuptools))
40552 (home-page "https://github.com/python/typeshed")
40553 (synopsis "Typing stubs for colorama")
40554 (description "This package provides typing stubs for colorama.")
40555 (license license:asl2.0)))
40556
40557(define-public python-types-dataclasses
40558 (package
40559 (name "python-types-dataclasses")
40560 (version "0.6.6")
40561 (source
40562 (origin
40563 (method url-fetch)
40564 (uri (pypi-uri "types-dataclasses" version))
40565 (sha256
40566 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40567 (build-system pyproject-build-system)
40568 (arguments (list #:tests? #f)) ;no tests
40569 (native-inputs (list python-setuptools))
40570 (home-page "https://github.com/python/typeshed")
40571 (synopsis "Typing stubs for dataclasses")
40572 (description
40573 "This package provides a collection of library stubs for Python, with
40574static types.")
40575 (license license:asl2.0)))
40576
40577(define-public python-types-dateutil
40578 (package
40579 (name "python-types-dateutil")
40580 (version "2.9.0.20240316")
40581 (source
40582 (origin
40583 (method url-fetch)
40584 (uri (pypi-uri "types-python-dateutil" version))
40585 (sha256
40586 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40587 (build-system pyproject-build-system)
40588 (arguments (list #:tests? #f)) ; no tests
40589 (native-inputs
40590 (list python-pytest python-setuptools python-wheel))
40591 (home-page "https://github.com/python/typeshed")
40592 (synopsis "Typing stubs for python-dateutil")
40593 (description
40594 "This is a PEP 561 type stub package for the @code{python-dateutil}
40595package.")
40596 (license license:asl2.0)))
40597
40598(define-public python-types-docutils
40599 (package
40600 (name "python-types-docutils")
40601 (version "0.22.2.20251006")
40602 (source
40603 (origin
40604 (method url-fetch)
40605 (uri (pypi-uri "types_docutils" version))
40606 (sha256
40607 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40608 (build-system pyproject-build-system)
40609 (arguments (list #:tests? #f)) ;no tests
40610 (native-inputs (list python-setuptools))
40611 (home-page "https://github.com/python/typeshed")
40612 (synopsis "Typing stubs for docutils")
40613 (description "This package provides a collection of library stubs for
40614Python, with static types.")
40615 (license license:asl2.0)))
40616
40617(define-public python-types-freezegun
40618 (package
40619 (name "python-types-freezegun")
40620 (version "1.1.8")
40621 (source
40622 (origin
40623 (method url-fetch)
40624 (uri (pypi-uri "types-freezegun" version))
40625 (sha256
40626 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40627 (build-system pyproject-build-system)
40628 (arguments
40629 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40630 ;; right files from source, so ignore them for now.
40631 (list #:tests? #f))
40632 (native-inputs (list python-setuptools python-wheel))
40633 (home-page "https://github.com/python/typeshed")
40634 (synopsis "Typing stubs for @code{freezegun}")
40635 (description "This package contains typing stubs for for @code{freezegun}, a
40636very small subset the Python stubs contained in the complete @code{typeshed}
40637collection.")
40638 (license license:asl2.0)))
40639
40640(define-public python-types-orjson
40641 (package
40642 (name "python-types-orjson")
40643 (version "3.6.2")
40644 (source
40645 (origin
40646 (method url-fetch)
40647 (uri (pypi-uri "types-orjson" version))
40648 (sha256
40649 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40650 (build-system pyproject-build-system)
40651 (arguments (list #:tests? #f)) ;no tests
40652 (native-inputs (list python-setuptools))
40653 (home-page "https://github.com/python/typeshed")
40654 (synopsis "Typing stubs for orjson")
40655 (description "This is a PEP 561 type stub package for the @code{orjson}
40656package. It can be used by type-checking tools like mypy, PyCharm, pytype
40657etc. to check code that uses @code{orjson}.")
40658 (license license:asl2.0)))
40659
40660(define-public python-types-protobuf
40661 (package
40662 (name "python-types-protobuf")
40663 (version "3.20.1")
40664 (source (origin
40665 (method url-fetch)
40666 (uri (pypi-uri "types-protobuf" version))
40667 (sha256
40668 (base32
40669 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40670 (build-system pyproject-build-system)
40671 (arguments
40672 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40673 ;; right files from source, so ignore them for now.
40674 (list #:tests? #f))
40675 (native-inputs (list python-setuptools python-wheel))
40676 (home-page "https://github.com/python/typeshed")
40677 (synopsis "Typing stubs for @code{protobuf}")
40678 (description "This package contains typing stubs for @code{protobuf}, a
40679very small subset the Python stubs contained in the complete @code{typeshed}
40680collection.")
40681 (license license:asl2.0)))
40682
40683(define-public python-types-pyside6
40684 (package
40685 (name "python-types-pyside6")
40686 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40687 ;; variant.
40688 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40689 (revision . "0")))
40690 (version (git-version "6.10.1.1"
40691 (assoc-ref properties 'revision)
40692 (assoc-ref properties 'commit)))
40693 (source
40694 (origin
40695 (method git-fetch)
40696 (uri (git-reference
40697 (url "https://github.com/LumaPictures/cg-stubs")
40698 (commit (assoc-ref properties 'commit))))
40699 (file-name (git-file-name name version))
40700 (sha256
40701 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40702 (build-system pyproject-build-system)
40703 (arguments
40704 (list
40705 #:tests? #f ;XXX: all tests failed
40706 #:phases
40707 #~(modify-phases %standard-phases
40708 (add-after 'unpack 'select-pyside6
40709 (lambda _
40710 (chdir "pyside6"))))))
40711 (native-inputs
40712 (list python-hatchling))
40713 (home-page "https://github.com/LumaPictures/cg-stubs")
40714 (synopsis "Accurate stubs for PySide6")
40715 (description
40716 "This package provides PySide6 stubs produced with @code{mypy}'s official
40717stubgen tool to directly generate stubs, with a set of corrections applied.")
40718 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40719 ;; v2.1 . See file LICENSE for more details.
40720 ;;
40721 ;; MIT in pyproject.toml
40722 (license (list license:lgpl2.1+
40723 license:expat))))
40724
40725(define-public python-types-python-dateutil
40726 (package
40727 (name "python-types-python-dateutil")
40728 (version "2.9.0.20250708")
40729 (source
40730 (origin
40731 (method url-fetch)
40732 (uri (pypi-uri "types_python_dateutil" version))
40733 (sha256
40734 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40735 (build-system pyproject-build-system)
40736 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40737 (native-inputs (list python-setuptools))
40738 (home-page "https://github.com/python/typeshed")
40739 (synopsis "Typing stubs for python-dateutil")
40740 (description "This package providis typing stubs for python-dateutil.")
40741 (license license:asl2.0)))
40742
40743(define-public python-types-pytz
40744 (package
40745 (name "python-types-pytz")
40746 (version "2025.2.0.20250809")
40747 (source
40748 (origin
40749 (method url-fetch)
40750 (uri (pypi-uri "types_pytz" version))
40751 (sha256
40752 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40753 (build-system pyproject-build-system)
40754 (arguments
40755 (list #:tests? #f)) ;no tests provided
40756 (native-inputs (list python-setuptools))
40757 (home-page "https://github.com/python/typeshed")
40758 (synopsis "Typing stubs for pytz")
40759 (description "This package contains typing stubs for @code{pytz}, a very
40760small subset the Python stubs contained in the complete @code{typeshed}
40761collection.")
40762 (license license:asl2.0)))
40763
40764(define-public python-types-pyyaml
40765 (package
40766 (name "python-types-pyyaml")
40767 (version "6.0.12.20250915")
40768 (source
40769 (origin
40770 (method url-fetch)
40771 (uri (pypi-uri "types_pyyaml" version))
40772 (sha256
40773 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40774 (build-system pyproject-build-system)
40775 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40776 (native-inputs
40777 (list python-setuptools))
40778 (home-page " https://github.com/python/typeshed")
40779 (synopsis "Typing stubs for PyYAML")
40780 (description "This package provides typing stubs for @code{PyYAML}.")
40781 (license license:asl2.0)))
40782
40783(define-public python-types-regex
40784 (package
40785 (name "python-types-regex")
40786 (version "2025.9.18.20250921")
40787 (source
40788 (origin
40789 (method url-fetch)
40790 (uri (pypi-uri "types_regex" version))
40791 (sha256
40792 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40793 (build-system pyproject-build-system)
40794 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40795 (native-inputs (list python-setuptools))
40796 (home-page "https://github.com/python/typeshed")
40797 (synopsis "Typing stubs for regex")
40798 (description "This package provides typing stubs for regex.")
40799 (license license:asl2.0)))
40800
40801(define-public python-types-requests
40802 (package
40803 (name "python-types-requests")
40804 (version "2.32.4.20250611")
40805 (source
40806 (origin
40807 (method url-fetch)
40808 (uri (pypi-uri "types_requests" version))
40809 (sha256
40810 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40811 (build-system pyproject-build-system)
40812 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40813 (native-inputs
40814 (list python-setuptools))
40815 (propagated-inputs
40816 (list python-urllib3))
40817 (home-page "https://github.com/python/typeshed")
40818 (synopsis "Typing stubs for requests")
40819 (description "This package provides typing stubs for requests.")
40820 (license license:asl2.0)))
40821
40822(define-public python-types-setuptools
40823 (package
40824 (name "python-types-setuptools")
40825 (version "80.9.0.20250529")
40826 (source
40827 (origin
40828 (method url-fetch)
40829 (uri (pypi-uri "types_setuptools" version))
40830 (sha256
40831 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40832 (build-system pyproject-build-system)
40833 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40834 (native-inputs
40835 (list python-setuptools))
40836 (home-page "https://github.com/python/typeshed")
40837 (synopsis "Typing stubs for setuptools")
40838 (description "This package provides typing stubs for setuptools.")
40839 (license license:asl2.0)))
40840
40841(define-public python-types-simplejson
40842 (package
40843 (name "python-types-simplejson")
40844 (version "3.19.0.20241221")
40845 (source
40846 (origin
40847 (method url-fetch)
40848 (uri (pypi-uri "types_simplejson" version))
40849 (sha256
40850 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40851 (build-system pyproject-build-system)
40852 (arguments
40853 (list
40854 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40855 (native-inputs
40856 (list python-setuptools python-wheel))
40857 (home-page "https://github.com/python/typeshed")
40858 (synopsis "Typing stubs for simplejson")
40859 (description "Typing stubs for simplejson.")
40860 (license license:asl2.0)))
40861
40862(define-public python-types-toml
40863 (package
40864 (name "python-types-toml")
40865 (version "0.10.8.20240310")
40866 (source
40867 (origin
40868 (method url-fetch)
40869 (uri (pypi-uri "types-toml" version))
40870 (sha256
40871 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40872 (build-system pyproject-build-system)
40873 (arguments
40874 (list #:tests? #f)) ;no tests provided
40875 (native-inputs (list python-setuptools))
40876 (home-page "https://github.com/python/typeshed")
40877 (synopsis "Typing stubs for TOML")
40878 (description
40879 "This package contains typing stubs for TOML, a very small subset the
40880Python stubs contained in the complete @code{typeshed} collection.")
40881 (license license:asl2.0)))
40882
40883(define-public python-types-tqdm
40884 (package
40885 (name "python-types-tqdm")
40886 (version "4.67.0.20250809")
40887 (source
40888 (origin
40889 (method url-fetch)
40890 (uri (pypi-uri "types_tqdm" version))
40891 (sha256
40892 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40893 (build-system pyproject-build-system)
40894 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40895 (native-inputs (list python-setuptools))
40896 (propagated-inputs (list python-types-requests))
40897 (home-page "https://github.com/python/typeshed")
40898 (synopsis "Typing stubs for python-tqdm")
40899 (description "This package providis typing stubs for python-tqdm.")
40900 (license license:asl2.0)))
40901
40902(define-public python-types-ujson
40903 (package
40904 (name "python-types-ujson")
40905 (version "5.10.0.20250822")
40906 (source
40907 (origin
40908 (method url-fetch)
40909 (uri (pypi-uri "types_ujson" version))
40910 (sha256
40911 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40912 (build-system pyproject-build-system)
40913 (arguments
40914 (list #:tests? #f)) ;no tests provided
40915 (native-inputs (list python-setuptools))
40916 (home-page "https://github.com/python/typeshed")
40917 (synopsis "Typing stubs for ujson")
40918 (description
40919 "This is a PEP 561 type stub package for the ujson package. It can be
40920used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40921uses ujson.")
40922 (license license:asl2.0)))
40923
40924(define-public python-types-urllib3
40925 (package
40926 (name "python-types-urllib3")
40927 (version "1.26.25.14")
40928 (source
40929 (origin
40930 (method url-fetch)
40931 (uri (pypi-uri "types-urllib3" version))
40932 (sha256
40933 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40934 (build-system pyproject-build-system)
40935 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40936 (native-inputs
40937 (list python-setuptools))
40938 (home-page "https://github.com/python/typeshed")
40939 (synopsis "Typing stubs for urllib3")
40940 (description "This package provides typing stubs for urllib3.")
40941 (license license:asl2.0)))
40942
40943(define-public python-typeshed-client
40944 (package
40945 (name "python-typeshed-client")
40946 (version "2.8.2")
40947 (source
40948 (origin
40949 (method git-fetch)
40950 (uri (git-reference
40951 (url "https://github.com/JelleZijlstra/typeshed_client")
40952 (commit (string-append "v" version))))
40953 (file-name (git-file-name name version))
40954 (sha256
40955 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40956 (build-system pyproject-build-system)
40957 (arguments
40958 (list #:test-backend #~'custom
40959 #:test-flags #~(list "tests/test.py")))
40960 (native-inputs
40961 (list python-setuptools))
40962 (propagated-inputs
40963 (list python-importlib-resources
40964 python-typing-extensions))
40965 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40966 (synopsis "Library for accessing stubs in typeshed")
40967 (description
40968 "This package provides a library for accessing stubs in typeshed.")
40969 (license license:expat)))
40970
40971(define-public python-typing-inspect
40972 (package
40973 (name "python-typing-inspect")
40974 (version "0.9.0")
40975 (source
40976 (origin
40977 (method url-fetch)
40978 (uri (pypi-uri "typing_inspect" version))
40979 (sha256
40980 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40981 (build-system pyproject-build-system)
40982 (native-inputs
40983 (list python-pytest
40984 python-setuptools
40985 python-wheel))
40986 (propagated-inputs
40987 (list python-mypy-extensions
40988 python-typing-extensions))
40989 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40990 (synopsis "API for inspection of types in the Python @code{typing} module")
40991 (description
40992 "The @code{typing_inspect} module defines experimental API for runtime
40993inspection of types defined in the Python standard typing module.")
40994 (license license:expat)))
40995
40996(define-public python-typing-inspection
40997 (package
40998 (name "python-typing-inspection")
40999 (version "0.4.2")
41000 (source
41001 (origin
41002 (method git-fetch)
41003 (uri (git-reference
41004 (url "https://github.com/pydantic/typing-inspection")
41005 (commit (string-append "v" version))))
41006 (file-name (git-file-name name version))
41007 (sha256
41008 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
41009 (build-system pyproject-build-system)
41010 ;; tests: 89 passed, 3 skipped
41011 (native-inputs
41012 (list python-pytest
41013 python-hatchling))
41014 (propagated-inputs
41015 (list python-typing-extensions))
41016 (home-page "https://github.com/pydantic/typing-inspection")
41017 (synopsis "Runtime typing introspection tools")
41018 (description
41019 "@code{typing-inspection} provides tools to inspect type annotations at
41020runtime.")
41021 (license license:expat)))
41022
41023(define-public python-typogrify
41024 (package
41025 (name "python-typogrify")
41026 (version "2.1.0")
41027 (source
41028 (origin
41029 (method url-fetch)
41030 (uri (pypi-uri "typogrify" version))
41031 (sha256
41032 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
41033 (build-system pyproject-build-system)
41034 (arguments
41035 (list
41036 #:test-flags
41037 #~(list "--doctest-modules"
41038 "typogrify/filters.py"
41039 "typogrify/packages/titlecase/tests.py")))
41040 (native-inputs
41041 (list python-pytest
41042 python-hatchling))
41043 (propagated-inputs
41044 (list python-smartypants))
41045 (home-page "https://github.com/justinmayer/typogrify")
41046 (synopsis "Filters to transform text into typographically-improved HTML")
41047 (description
41048 "@code{typogrify} provides a set of custom filters that automatically
41049apply various transformations to plain text in order to yield
41050typographically-improved HTML. While often used in conjunction with Jinja and
41051Django template systems, the filters can be used in any environment.")
41052 (license license:bsd-3)))
41053
41054(define-public python-ua-parser
41055 (package
41056 (name "python-ua-parser")
41057 (version "0.10.0")
41058 (source
41059 (origin
41060 (method url-fetch)
41061 (uri (pypi-uri "ua-parser" version))
41062 (sha256
41063 (base32
41064 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
41065 (build-system pyproject-build-system)
41066 (arguments
41067 `(#:tests? #f)) ;no test suite in release
41068 (native-inputs
41069 (list python-pyyaml
41070 python-setuptools))
41071 (home-page "https://github.com/ua-parser/uap-python")
41072 (synopsis "User agent parser")
41073 (description
41074 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
41075 (license license:asl2.0)))
41076
41077(define-public python-ubelt
41078 (package
41079 (name "python-ubelt")
41080 (version "1.3.6")
41081 (source
41082 (origin
41083 (method git-fetch)
41084 (uri (git-reference
41085 (url "https://github.com/Erotemic/ubelt")
41086 (commit (string-append "v" version))))
41087 (file-name (git-file-name name version))
41088 (sha256
41089 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
41090 (build-system pyproject-build-system)
41091 (arguments
41092 (list
41093 ;; The builder user home doesn't match HOME, which causes this test to
41094 ;; fail.
41095 #:test-flags #~(list "-k" "not userhome")
41096 #:phases
41097 #~(modify-phases %standard-phases
41098 (add-before 'check 'pre-check
41099 (lambda _
41100 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
41101 (native-inputs
41102 (list python-pytest
41103 python-requests
41104 python-setuptools
41105 python-wheel
41106 python-xdoctest))
41107 (propagated-inputs
41108 (list python-ordered-set))
41109 (home-page "https://github.com/Erotemic/ubelt")
41110 (synopsis "Python library for hashing, caching, timing and more")
41111 (description
41112 "Ubelt is a small library of simple functions that extend the Python
41113standard library. It includes an @acronym{API, Application Programming
41114Interface} to simplify common problems such as caching, timing, computing
41115progress, among other things.")
41116 (license license:asl2.0)))
41117
41118(define-public python-uc-micro-py
41119 (package
41120 (name "python-uc-micro-py")
41121 (version "2.0.0")
41122 (source (origin
41123 (method git-fetch)
41124 (uri (git-reference
41125 (url "https://github.com/tsutsu3/uc.micro-py")
41126 (commit (string-append "v" version))))
41127 (file-name (git-file-name name version))
41128 (sha256
41129 (base32
41130 "06dx8zh0fa13aldqxhzghdnbbaqbb1dklbyqzdxy14dcbqmx92m3"))))
41131 (build-system pyproject-build-system)
41132 (native-inputs (list python-pytest python-setuptools))
41133 (home-page "https://github.com/tsutsu3/uc.micro-py")
41134 (synopsis "Unicode data files for linkify-it-py projects")
41135 (description "This package contains a micro subset of Unicode data files
41136for linkify-it-py projects.")
41137 (license license:expat)))
41138
41139(define-public python-udapi
41140 (package
41141 (name "python-udapi")
41142 (version "0.5.2")
41143 (source
41144 (origin
41145 (method git-fetch)
41146 (uri (git-reference
41147 (url "https://github.com/udapi/udapi-python")
41148 (commit version)))
41149 (file-name (git-file-name name version))
41150 (sha256
41151 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
41152 (build-system pyproject-build-system)
41153 (native-inputs
41154 (list python-pytest python-setuptools))
41155 (propagated-inputs
41156 (list python-colorama python-termcolor))
41157 (home-page "http://udapi.readthedocs.io")
41158 (synopsis "Framework for processing Universal Dependencies data")
41159 (description
41160 "This package is a Python library providing an API for processing
41161Universal Dependencies data.")
41162 (license license:gpl3+)))
41163
41164(define-public python-ujson
41165 (package
41166 (name "python-ujson")
41167 (version "5.10.0")
41168 (source
41169 (origin
41170 (method url-fetch)
41171 (uri (pypi-uri "ujson" version))
41172 (sha256
41173 (base32
41174 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
41175 (modules '((guix build utils)))
41176 (snippet
41177 #~(begin (delete-file-recursively "deps")))))
41178 (build-system pyproject-build-system)
41179 (arguments
41180 (list
41181 #:phases
41182 #~(modify-phases %standard-phases
41183 (add-after 'unpack 'link-to-system-double-conversion
41184 (lambda* (#:key inputs #:allow-other-keys)
41185 (let ((d-c (assoc-ref inputs "double-conversion")))
41186 (substitute* "setup.py"
41187 (("./deps/double-conversion/double-conversion\"")
41188 (string-append d-c "/include/double-conversion\""))
41189 (("-lstdc++" stdc)
41190 (string-append "-L" d-c "/lib\","
41191 " \"-ldouble-conversion\","
41192 " \"" stdc)))))))))
41193 (native-inputs
41194 (list double-conversion
41195 python-pytest
41196 python-setuptools
41197 python-setuptools-scm
41198 python-wheel))
41199 (home-page "https://github.com/ultrajson/ultrajson")
41200 (synopsis "Ultra fast JSON encoder and decoder for Python")
41201 (description
41202 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
41203bindings for Python 3.")
41204 (license license:bsd-3)))
41205
41206(define-public python-ukkonen
41207 (package
41208 (name "python-ukkonen")
41209 (version "1.0.1")
41210 (source
41211 (origin
41212 ;; There are no tests in the PyPI tarball.
41213 (method git-fetch)
41214 (uri (git-reference
41215 (url "https://github.com/asottile/ukkonen")
41216 (commit (string-append "v" version))))
41217 (file-name (git-file-name name version))
41218 (sha256
41219 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
41220 (build-system pyproject-build-system)
41221 (native-inputs (list python-pytest python-setuptools python-wheel))
41222 (propagated-inputs (list python-cffi))
41223 (home-page "https://github.com/asottile/ukkonen")
41224 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
41225 (description "This package is an implementation of of bounded Levenshtein
41226distance (Ukkonen).")
41227 (license license:expat)))
41228
41229(define-public python-ulid
41230 (package
41231 (name "python-ulid")
41232 (version "3.1.0")
41233 (source
41234 (origin
41235 (method git-fetch)
41236 (uri (git-reference
41237 (url "https://github.com/mdomke/python-ulid")
41238 (commit version)))
41239 (file-name (git-file-name name version))
41240 (sha256
41241 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
41242 (build-system pyproject-build-system)
41243 (arguments
41244 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
41245 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
41246 ;; 68 passed, 1 deselected in 2.55s
41247 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
41248 (native-inputs
41249 (list python-freezegun
41250 python-hatch-fancy-pypi-readme
41251 python-hatch-vcs
41252 python-hatchling
41253 python-pytest))
41254 (propagated-inputs
41255 (list python-pydantic))
41256 (home-page "https://github.com/mdomke/python-ulid")
41257 (synopsis "Universally unique lexicographically sortable identifier")
41258 (description
41259 "ULID is a universally unique lexicographically sortable identifier.
41260It is:
41261@itemize
41262@item 128-bit compatible with UUID
41263@item 1.21e+24 unique ULIDs per millisecond
41264@item lexicographically sortable!
41265@item canonically encoded as a 26 character string, as opposed to the 36
41266character UUID
41267@item uses Crockford's base32 for better efficiency and readability (5 bits
41268per character)
41269@item case insensitive
41270@item no special characters (URL safe)
41271@item monotonic sort order (correctly detects and handles the same
41272millisecond)
41273@end itemize")
41274 (license license:expat)))
41275
41276(define-public python-uncertainties
41277 (package
41278 (name "python-uncertainties")
41279 (version "3.2.3")
41280 (source
41281 (origin
41282 (method url-fetch)
41283 (uri (pypi-uri "uncertainties" version))
41284 (sha256
41285 (base32
41286 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
41287 (build-system pyproject-build-system)
41288 (native-inputs
41289 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
41290 (propagated-inputs (list python-numpy))
41291 (home-page "https://uncertainties.readthedocs.io/en/latest/")
41292 (synopsis "Calculations with uncertainties")
41293 (description
41294 "The uncertainties package transparently handles calculations with
41295numbers with uncertainties. It can also yield the derivatives of any
41296expression.")
41297 (license license:bsd-3)))
41298
41299(define-public python-unicode-linebreak
41300 (package
41301 (name "python-unicode-linebreak")
41302 (version "0.0.2")
41303 (source
41304 (origin
41305 (method git-fetch)
41306 (uri (git-reference
41307 (url "https://github.com/mondeja/py-unicode-linebreak")
41308 (commit (string-append "v" version))))
41309 (file-name (git-file-name name version))
41310 (sha256
41311 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
41312 (build-system pyproject-build-system)
41313 (arguments
41314 (list
41315 #:imported-modules `(,@%cargo-build-system-modules
41316 ,@%pyproject-build-system-modules)
41317 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41318 (guix build pyproject-build-system)
41319 (guix build utils))
41320 #:test-backend #~'unittest
41321 #:phases
41322 #~(modify-phases %standard-phases
41323 (add-after 'unpack 'prepare-cargo-build-system
41324 (lambda args
41325 (for-each
41326 (lambda (phase)
41327 (format #t "Running cargo phase: ~a~%" phase)
41328 (apply (assoc-ref cargo:%standard-phases phase)
41329 #:cargo-target #$(cargo-triplet)
41330 args))
41331 '(unpack-rust-crates
41332 configure
41333 check-for-pregenerated-files
41334 patch-cargo-checksums)))))))
41335 (native-inputs
41336 (append
41337 (list maturin
41338 rust
41339 `(,rust "cargo"))
41340 (or (and=> (%current-target-system)
41341 (compose list make-rust-sysroot))
41342 '())))
41343 (inputs (cargo-inputs 'unicode_linebreak))
41344 (home-page "https://github.com/mondeja/py-unicode-linebreak")
41345 (synopsis "Markdown paragraph wrapper")
41346 (description
41347 "This package provides a Markdown paragraph wrapper using Unicode Line
41348Breaking Algorithm written in Rust with Python bindings.")
41349 (license license:expat)))
41350
41351(define-public python-unicodedata2
41352 (package
41353 (name "python-unicodedata2")
41354 (version "16.0.0")
41355 (source
41356 (origin
41357 (method url-fetch)
41358 (uri (pypi-uri "unicodedata2" version))
41359 (sha256
41360 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
41361 (build-system pyproject-build-system)
41362 (native-inputs
41363 (list python-pytest
41364 python-setuptools))
41365 (home-page "https://github.com/fonttools/unicodedata2")
41366 (synopsis "Python unicodedata backport")
41367 (description "This package corresponds to the latest @code{unicodedata}
41368standard Python module.")
41369 (license license:asl2.0)))
41370
41371(define-public python-unicodeitplus
41372 (package
41373 (name "python-unicodeitplus")
41374 (version "0.3.1")
41375 (source
41376 (origin
41377 (method url-fetch)
41378 (uri (pypi-uri "unicodeitplus" version))
41379 (sha256
41380 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
41381 (build-system pyproject-build-system)
41382 (native-inputs
41383 (list python-pytest
41384 python-setuptools
41385 python-setuptools-scm))
41386 (propagated-inputs
41387 (list python-lark))
41388 (home-page "https://github.com/HDembinski/unicodeitplus")
41389 (synopsis "Convert simple LaTeX to an Unicode approximation")
41390 (description
41391 "This package provides a more complete LaTeX to Unicode converter than
41392@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
41393Backus-Naur Form} with the Lark library.")
41394 (license license:bsd-3)))
41395
41396(define-public python-unidecode
41397 (package
41398 (name "python-unidecode")
41399 (version "1.4.0")
41400 (source
41401 (origin
41402 (method url-fetch)
41403 (uri (pypi-uri "Unidecode" version))
41404 (sha256
41405 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
41406 (build-system pyproject-build-system)
41407 (native-inputs
41408 (list python-pytest python-setuptools))
41409 (home-page "https://pypi.org/project/Unidecode/")
41410 (synopsis "ASCII transliterations of Unicode text")
41411 (description
41412 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
41413useful when integrating with legacy code that doesn't support Unicode, or for
41414ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41415machine identifiers from human-readable Unicode strings that should still be
41416somewhat intelligible.")
41417 (license license:gpl2+)))
41418
41419(define-public python-unique-log-filter
41420 (package
41421 (name "python-unique-log-filter")
41422 (version "0.1.0")
41423 (source
41424 (origin
41425 (method git-fetch)
41426 (uri (git-reference
41427 (url "https://github.com/twizmwazin/unique_log_filter")
41428 (commit (string-append "v" version))))
41429 (file-name (git-file-name name version))
41430 (sha256
41431 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41432 (build-system pyproject-build-system)
41433 (arguments
41434 (list #:test-backend #~'custom
41435 #:test-flags #~(list "test_unique_log_filter.py")))
41436 (native-inputs (list python-flit-core))
41437 (home-page "https://github.com/twizmwazin/unique_log_filter")
41438 (synopsis "Log filter that removes duplicate log messages")
41439 (description
41440 "This library provides a filter for the @code{logging} module
41441from the Python standard library which allows removing duplicate log
41442messages.")
41443 (license license:bsd-2)))
41444
41445(define-public python-uniseg
41446 (package
41447 (name "python-uniseg")
41448 (version "0.10.0")
41449 (source
41450 (origin
41451 (method url-fetch)
41452 (uri (pypi-uri "uniseg" version))
41453 (sha256
41454 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41455 (build-system pyproject-build-system)
41456 (native-inputs
41457 (list python-pytest
41458 python-setuptools
41459 python-setuptools-scm))
41460 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41461 (synopsis "Python library to determine Unicode text segmentations")
41462 (description
41463 "Uniseg is a Python package used to determine Unicode text segmentations.
41464Supported segmentations include:
41465@enumerate
41466@item @dfn{Code point} (any value in the Unicode codespace)
41467@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41468multiple Unicode code points, e.g. \"G\" + acute-accent)
41469@item Word break
41470@item Sentence break
41471@item Line break
41472@end enumerate")
41473 (license license:expat)))
41474
41475(define-public python-universal-pathlib
41476 (package
41477 (name "python-universal-pathlib")
41478 (version "0.2.6")
41479 (source
41480 (origin
41481 (method git-fetch)
41482 (uri (git-reference
41483 (url "https://github.com/fsspec/universal_pathlib")
41484 (commit (string-append "v" version))))
41485 (file-name (git-file-name name version))
41486 (sha256
41487 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41488 (build-system pyproject-build-system)
41489 (arguments
41490 (list
41491 #:tests? #f)) ;requires network
41492 (native-inputs
41493 (list python-setuptools
41494 python-setuptools-scm))
41495 (propagated-inputs
41496 (list python-fsspec
41497 python-pathlib-abc))
41498 (home-page "https://github.com/fsspec/universal_pathlib")
41499 (synopsis
41500 "@code{pathlib} API extended to use @code{fsspec} backends")
41501 (description
41502 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41503API to support a variety of backend filesystems via filesystem_spec.")
41504 (license license:expat)))
41505
41506(define-public python-unpaddedbase64
41507 (package
41508 (name "python-unpaddedbase64")
41509 (version "2.1.0")
41510 (source
41511 (origin
41512 (method git-fetch)
41513 (uri (git-reference
41514 (url "https://github.com/matrix-org/python-unpaddedbase64")
41515 (commit (string-append "v" version))))
41516 (file-name (git-file-name name version))
41517 (sha256
41518 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41519 (build-system pyproject-build-system)
41520 (native-inputs (list python-poetry-core
41521 python-pytest
41522 python-setuptools
41523 python-wheel))
41524 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41525 (synopsis "Encode and decode Base64 without “=” padding")
41526 (description
41527 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41528using “=” characters. However this conveys no benefit so many protocols
41529choose to use Base64 without the “=” padding.")
41530 (license license:asl2.0)))
41531
41532(define-public python-update-checker
41533 (package
41534 (name "python-update-checker")
41535 (version "0.18.0")
41536 (source
41537 (origin
41538 (method url-fetch)
41539 (uri (pypi-uri "update-checker" version))
41540 (sha256
41541 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41542 (build-system pyproject-build-system)
41543 (native-inputs
41544 (list python-pytest
41545 python-setuptools))
41546 (propagated-inputs
41547 (list python-requests))
41548 (home-page "https://github.com/bboe/update_checker")
41549 (synopsis "Python module that will check for package updates")
41550 (description "This package provides a Python module that will check for
41551package updates.")
41552 (license license:bsd-2)))
41553
41554(define-public python-uri-template
41555 (package
41556 (name "python-uri-template")
41557 (version "1.3.0")
41558 (source
41559 (origin
41560 (method git-fetch)
41561 (uri (git-reference
41562 (url "https://gitlab.linss.com/open-source/python/uri-template")
41563 (commit (string-append "v" version))))
41564 (file-name (git-file-name name version))
41565 (sha256
41566 (base32 "0z1g5hpxzi5rh4xsra6bsvyg5qzmnx7a8j5q7rngmj9slcbcbhfz"))))
41567 (build-system pyproject-build-system)
41568 (arguments
41569 (list
41570 #:test-backend #~'custom
41571 #:test-flags #~(list "test.py")))
41572 (native-inputs
41573 (list python-setuptools
41574 python-setuptools-scm))
41575 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41576 (synopsis "RFC 6570 URI Template Processor")
41577 (description "This package implements URI Template expansion in strict
41578adherence to RFC 6570, but adds a few extensions.")
41579 (license license:expat)))
41580
41581(define-public python-uritools
41582 (package
41583 (name "python-uritools")
41584 (version "6.0.1")
41585 (source
41586 (origin
41587 (method git-fetch)
41588 (uri (git-reference
41589 (url "https://github.com/tkem/uritools/")
41590 (commit (string-append "v" version))))
41591 (file-name (git-file-name name version))
41592 (sha256
41593 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41594 (build-system pyproject-build-system)
41595 (native-inputs
41596 (list python-pytest
41597 python-setuptools))
41598 (home-page "https://github.com/tkem/uritools/")
41599 (synopsis "URI parsing, classification and composition")
41600 (description
41601 "This package provides RFC 3986 compliant functions for parsing,
41602classifying and composing URIs and URI references, largely replacing the
41603Python Standard Library's urllib.parse module.")
41604 (license license:expat)))
41605
41606(define-public python-urwid
41607 (package
41608 (name "python-urwid")
41609 (version "3.0.3")
41610 (source
41611 (origin
41612 (method url-fetch)
41613 (uri (pypi-uri "urwid" version))
41614 (sha256
41615 (base32
41616 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41617 (build-system pyproject-build-system)
41618 (arguments
41619 (list
41620 #:test-flags
41621 #~(list "tests"
41622 ;; According to Debian these tests are cursed.
41623 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41624 "--ignore=tests/test_vterm.py")))
41625 (native-inputs
41626 (list python-pytest python-setuptools python-setuptools-scm))
41627 (propagated-inputs
41628 (list python-wcwidth
41629 ;; [optional]
41630 python-pygobject
41631 python-pyzmq
41632 python-tornado
41633 python-pyserial
41634 python-twisted))
41635 (home-page "https://urwid.org")
41636 (synopsis "Console user interface library for Python")
41637 (description
41638 "Urwid is a curses-based UI/widget library for Python. It includes many
41639features useful for text console applications.")
41640 (license license:lgpl2.1+)))
41641
41642(define-public python-urwid-2
41643 (package
41644 (inherit python-urwid)
41645 (name "python-urwid")
41646 (version "2.6.16")
41647 (source
41648 (origin
41649 (method url-fetch)
41650 (uri (pypi-uri "urwid" version))
41651 (sha256
41652 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41653
41654(define-deprecated/public-alias python-urwid-3
41655 python-urwid) ;may be removed after 2025-11-12
41656
41657(define-public python-urwid-for-zulip-term
41658 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41659 ;; to pass, remove when no longer required.
41660 (hidden-package
41661 (package
41662 (inherit python-urwid)
41663 (version "2.1.2")
41664 (source
41665 (origin
41666 (method url-fetch)
41667 (uri (pypi-uri "urwid" version))
41668 (sha256
41669 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41670 (arguments
41671 (list #:tests? #f)))))
41672
41673(define-public python-urwid-readline
41674 (package
41675 (name "python-urwid-readline")
41676 (version "0.15.1")
41677 (source
41678 (origin
41679 (method git-fetch)
41680 (uri (git-reference
41681 (url "https://github.com/rr-/urwid_readline")
41682 (commit version)))
41683 (file-name (git-file-name name version))
41684 (sha256
41685 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41686 (build-system pyproject-build-system)
41687 (native-inputs
41688 (list python-pytest
41689 python-setuptools))
41690 (propagated-inputs
41691 (list python-urwid))
41692 (home-page "https://github.com/rr-/urwid_readline")
41693 (synopsis "Text input widget for urwid that supports readline shortcuts")
41694 (description
41695 "This package provides a textbox edit widget for @code{python-urwid} that
41696supports @code{readline} shortcuts.")
41697 (license license:expat)))
41698
41699(define-public python-urwidgets
41700 (package
41701 (name "python-urwidgets")
41702 (version "0.2.1")
41703 (source
41704 (origin
41705 (method url-fetch)
41706 (uri (pypi-uri "urwidgets" version))
41707 (sha256
41708 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41709 (build-system pyproject-build-system)
41710 (arguments
41711 (list #:tests? #f)) ;no tests
41712 (native-inputs
41713 (list python-setuptools))
41714 (propagated-inputs
41715 (list python-urwid-2))
41716 (home-page "https://github.com/AnonymouX47/urwidgets")
41717 (synopsis "Collection of widgets for urwid")
41718 (description
41719 "This package provides a collection of widgets for urwid.")
41720 (license license:expat)))
41721
41722(define-public python-urwidtrees
41723 (package
41724 (name "python-urwidtrees")
41725 (version "1.0.4")
41726 (source
41727 (origin
41728 (method git-fetch)
41729 ;; package author intends on distributing via github rather than pypi:
41730 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41731 (uri (git-reference
41732 (url "https://github.com/pazz/urwidtrees")
41733 (commit version)))
41734 (file-name (git-file-name name version))
41735 (sha256
41736 (base32
41737 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41738 (build-system pyproject-build-system)
41739 (arguments
41740 '(#:tests? #f)) ; no tests
41741 (propagated-inputs (list python-urwid))
41742 (native-inputs (list python-mock python-setuptools python-wheel))
41743 (home-page "https://github.com/pazz/urwidtrees")
41744 (synopsis "Tree widgets for urwid")
41745 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41746toolkit. Use it to build trees of widgets.")
41747 (license license:gpl3+)))
41748
41749(define-public python-user-agents
41750 (package
41751 (name "python-user-agents")
41752 (version "2.2.0")
41753 (source
41754 (origin
41755 (method git-fetch)
41756 (uri (git-reference
41757 (url "https://github.com/selwin/python-user-agents")
41758 (commit (string-append "v" version))))
41759 (file-name (git-file-name name version))
41760 (sha256
41761 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41762 (build-system pyproject-build-system)
41763 (arguments
41764 (list #:test-backend #~'unittest))
41765 (native-inputs
41766 (list python-setuptools))
41767 (propagated-inputs
41768 (list python-ua-parser))
41769 (home-page "https://github.com/selwin/python-user-agents")
41770 (synopsis "User Agent strings parsing library")
41771 (description
41772 "A library to identify devices (phones, tablets) and their capabilities by
41773parsing (browser/HTTP) user agent strings.")
41774 (license license:expat)))
41775
41776(define-public python-userpath
41777 (package
41778 (name "python-userpath")
41779 (version "1.9.2")
41780 (source
41781 (origin
41782 (method url-fetch)
41783 (uri (pypi-uri "userpath" version))
41784 (sha256
41785 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41786 (build-system pyproject-build-system)
41787 (arguments
41788 ;; See https://github.com/ofek/userpath/issues/43.
41789 ;; In Guix, tests try to find the temporary build directory in PATH, but
41790 ;; only the store output is present.
41791 (list #:tests? #f))
41792 (native-inputs (list python-hatchling python-pytest))
41793 (propagated-inputs (list python-click))
41794 (home-page "https://github.com/ofek/userpath")
41795 (synopsis "Add locations to the user's PATH")
41796 (description "This package provides a tool for modifying a user's PATH.")
41797 (license license:expat)))
41798
41799(define-public python-userspacefs
41800 (package
41801 (name "python-userspacefs")
41802 (version "3.2.1")
41803 (source
41804 (origin
41805 (method url-fetch)
41806 (uri (pypi-uri "userspacefs" version))
41807 (sha256
41808 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41809 (build-system pyproject-build-system)
41810 (arguments
41811 (list #:tests? #f ;no tests
41812 #:phases
41813 #~(modify-phases %standard-phases
41814 (add-after 'unpack 'hardcode-libfuse
41815 (lambda* (#:key inputs #:allow-other-keys)
41816 (substitute* "userspacefs/fusepy.py"
41817 (("^_libfuse_path.*")
41818 (string-append "_libfuse_path = '"
41819 (search-input-file inputs "lib/libfuse3.so")
41820 "'\n"))))))))
41821 (inputs (list fuse))
41822 (native-inputs (list python-setuptools))
41823 (propagated-inputs (list python-aiohttp python-typing-extensions))
41824 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41825 (synopsis "User-space file systems for Python")
41826 (description
41827 "@code{userspacefs} is a library that allows you to easily write
41828user-space file systems in Python.")
41829 (license license:gpl3+)))
41830
41831(define-public python-utils
41832 (package
41833 (name "python-utils")
41834 (version "3.9.1")
41835 (source
41836 (origin
41837 (method url-fetch)
41838 (uri (pypi-uri "python_utils" version))
41839 (sha256
41840 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41841 (build-system pyproject-build-system)
41842 (native-inputs
41843 (list python-pytest
41844 python-pytest-asyncio
41845 python-setuptools))
41846 (propagated-inputs
41847 (list python-loguru
41848 python-typing-extensions))
41849 (home-page "https://github.com/WoLpH/python-utils")
41850 (synopsis "Convenient utilities not included with the standard Python install")
41851 (description
41852 "Python Utils is a collection of small Python functions and classes
41853which make common patterns shorter and easier.")
41854 (license license:bsd-2)))
41855
41856(define-public python-uuid6
41857 (package
41858 (name "python-uuid6")
41859 (version "2025.0.1")
41860 (source
41861 (origin
41862 (method git-fetch)
41863 (uri (git-reference
41864 (url "https://github.com/oittaa/uuid6-python")
41865 (commit version)))
41866 (file-name (git-file-name name version))
41867 (sha256
41868 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41869 (build-system pyproject-build-system)
41870 (arguments
41871 (list
41872 #:test-flags
41873 ;; Test is time based: AssertionError: 13987034766.015247 !=
41874 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41875 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41876 (native-inputs
41877 (list python-pytest
41878 python-setuptools
41879 python-setuptools-scm))
41880 (home-page "https://github.com/oittaa/uuid6-python")
41881 (synopsis "Time-based UUID formats which are suited for use as a database key")
41882 (description
41883 "This module extends immutable UUID objects (the UUID class) with the
41884functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41885@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41886 (license license:expat)))
41887
41888(define-public python-validate-email
41889 (package
41890 (name "python-validate-email")
41891 (version "1.3")
41892 (source
41893 (origin
41894 (method url-fetch)
41895 (uri (pypi-uri "validate_email" version))
41896 (sha256
41897 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41898 (build-system pyproject-build-system)
41899 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41900 (native-inputs
41901 (list python-setuptools))
41902 (home-page "https://github.com/syrusakbary/validate_email")
41903 (synopsis "Verifies if an email address is valid and really exists")
41904 (description
41905 "@code{validate_email} can be used to verify if an email address is
41906valid and really exists.")
41907 (license license:lgpl3+)))
41908
41909(define-public python-validators
41910 ;; TODO: Move to (gnu packages python-web) or (gnu packages python-crypto).
41911 (package
41912 (name "python-validators")
41913 (version "0.35.0")
41914 (source
41915 (origin
41916 (method git-fetch)
41917 (uri (git-reference
41918 (url "https://github.com/kvesteri/validators")
41919 (commit version)))
41920 (file-name (git-file-name name version))
41921 (sha256
41922 (base32 "1q4mhcr10f22f8lwbsplhjyy0m3axddawd3mcax7qzm6p8lj6ybg"))))
41923 (build-system pyproject-build-system)
41924 (native-inputs
41925 (list python-pytest
41926 python-setuptools))
41927 (propagated-inputs
41928 (list python-eth-hash))
41929 (home-page "https://github.com/kvesteri/validators")
41930 (synopsis "Data validation library")
41931 (description
41932 "This package contains validators for different things such as email
41933addresses, IP addresses, URLs, hashes and more. It has been designed to be
41934easy to use and not require defining a schema or form just to validate some
41935input.")
41936 (license license:expat)))
41937
41938(define-public python-valkey
41939 (package
41940 (name "python-valkey")
41941 (version "6.1.1")
41942 (source
41943 (origin
41944 (method git-fetch)
41945 (uri (git-reference
41946 (url "https://github.com/valkey-io/valkey-py")
41947 (commit (string-append "v" version))))
41948 (file-name (git-file-name name version))
41949 (sha256
41950 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41951 (build-system pyproject-build-system)
41952 (arguments
41953 ;; XXX: A lot of tests fail with ConnectionError
41954 ;; Maybe we need to spawn a valkey server?
41955 (list #:tests? #f))
41956 (native-inputs
41957 (list python-setuptools))
41958 (home-page "https://github.com/valkey-io/valkey-py")
41959 (synopsis "Python client for Valkey")
41960 (description
41961 "This package provides a python client for the @code{Valkey} key-value
41962store, forked from redis-py.")
41963 (license license:expat)))
41964
41965;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41966;; package.
41967(define-public python-vcversioner
41968 (package
41969 (name "python-vcversioner")
41970 (version "2.16.0.0")
41971 (source
41972 (origin
41973 (method url-fetch)
41974 (uri (pypi-uri "vcversioner" version))
41975 (sha256
41976 (base32
41977 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41978 (build-system pyproject-build-system)
41979 (arguments
41980 (list #:tests? #f)) ;no tests in PyPI archive
41981 (native-inputs
41982 (list python-setuptools))
41983 (home-page "https://github.com/habnabit/vcversioner")
41984 (synopsis "Python library for version number discovery")
41985 (description
41986 "Vcversioner is a Python library that inspects tagging information in a
41987variety of version control systems in order to discover version numbers.")
41988 (license license:isc)))
41989
41990(define-public python-vdf
41991 (package
41992 (name "python-vdf")
41993 (version "3.4")
41994 (source
41995 (origin
41996 (method git-fetch) ; no tests in PyPI release
41997 (uri (git-reference
41998 (url "https://github.com/ValvePython/vdf")
41999 (commit (string-append "v" version))))
42000 (file-name (git-file-name name version))
42001 (sha256
42002 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
42003 (build-system pyproject-build-system)
42004 (native-inputs
42005 (list python-pytest python-setuptools))
42006 (home-page "https://github.com/ValvePython/vdf")
42007 (synopsis "Work with Valve's VDF text format")
42008 (description
42009 "This package provides @code{python-vdf}, a library for working with
42010 Valve's VDF text format.")
42011 (license license:expat)))
42012
42013(define-public python-vendetect
42014 (package
42015 (name "python-vendetect")
42016 (version "0.0.3")
42017 (source
42018 (origin
42019 (method url-fetch)
42020 (uri (pypi-uri "vendetect" version))
42021 (sha256
42022 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
42023 (build-system pyproject-build-system)
42024 (propagated-inputs (list python-copydetect python-rich))
42025 (native-inputs (list python-hatchling python-pytest))
42026 (home-page "https://github.com/trailofbits/vendetect")
42027 (synopsis "Detect vendored and copy-pasted code")
42028 (description
42029 "Vendetect helps identify copied or vendored code between repositories,
42030making it easier to detect when code has been copied with or without
42031attribution. It uses similarity detection algorithms to compare code files
42032and highlight matching sections.")
42033 (license license:agpl3+)))
42034
42035;; XXX: No updates since 2017.
42036(define-public python-verboselogs
42037 (package
42038 (name "python-verboselogs")
42039 (version "1.7")
42040 (source
42041 (origin
42042 (method url-fetch)
42043 (uri (pypi-uri "verboselogs" version))
42044 (sha256
42045 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
42046 (build-system pyproject-build-system)
42047 (arguments
42048 (list
42049 #:test-flags
42050 ;; Do not run pylint plugin test, as astroid is an old unsupported
42051 ;; version.
42052 #~(list "-k" "not test_pylint_plugin"
42053 "verboselogs/tests.py")))
42054 (native-inputs
42055 (list python-mock
42056 python-pytest
42057 python-setuptools))
42058 (home-page "https://verboselogs.readthedocs.io")
42059 (synopsis "Verbose logging level for Python's logging module")
42060 (description
42061 "The @code{verboselogs} package extends Python's @code{logging} module to
42062add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
42063 (license license:expat)))
42064
42065(define-public python-verlib2
42066 (package
42067 (name "python-verlib2")
42068 (version "0.3.1")
42069 (source
42070 (origin
42071 (method git-fetch)
42072 (uri (git-reference
42073 (url "https://github.com/pyveci/verlib2")
42074 (commit (string-append "v" version))))
42075 (file-name (git-file-name name version))
42076 (sha256
42077 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
42078 (build-system pyproject-build-system)
42079 (native-inputs
42080 (list python-pretend python-pytest python-setuptools))
42081 (home-page "https://github.com/pyveci/verlib2")
42082 (synopsis "Python versioning utilities")
42083 (description
42084 "This package provides a standalone variant of @code{distutils.version} and
42085@code{packaging.version}, without anything else.")
42086 (license license:bsd-2)))
42087
42088;; XXX: No updates since 2018, consider to remove when fails to build, it's a
42089;; leaf package.
42090(define-public python-version
42091 ;; No version tags available in the git repo; just using bare commit instead.
42092 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
42093 (revision "1"))
42094 (package
42095 (name "python-version")
42096 (version (git-version "0.0.2" revision commit))
42097 (source
42098 (origin
42099 (method git-fetch)
42100 (uri (git-reference
42101 (url "https://gitlab.com/halfak/python_version")
42102 (commit commit)))
42103 (file-name (git-file-name name version))
42104 (sha256
42105 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
42106 (build-system pyproject-build-system)
42107 (arguments
42108 (list #:tests? #f)) ;no tests
42109 (native-inputs
42110 (list python-setuptools))
42111 (home-page "https://gitlab.com/halfak/python_version")
42112 (synopsis "Python version checking utility")
42113 (description
42114 "This package provides a simple utility for checking the python version.")
42115 (license license:expat))))
42116
42117(define-public python-versioneer
42118 (package
42119 (name "python-versioneer")
42120 (version "0.29")
42121 (source
42122 (origin
42123 (method url-fetch)
42124 (uri (pypi-uri "versioneer" version))
42125 (sha256
42126 (base32
42127 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
42128 (patches (search-patches "python-versioneer-guix-support.patch"))))
42129 (build-system pyproject-build-system)
42130 (arguments
42131 (list
42132 ;; Minimize test requirements.
42133 #:test-flags
42134 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
42135 "--ignore=test/git/test_invocations.py"
42136 "--ignore=test/test_render.py")
42137 #:phases
42138 #~(modify-phases %standard-phases
42139 (add-before 'check 'pre-check
42140 (lambda _
42141 (invoke "python" "setup.py" "make_versioneer"
42142 "make_long_version_py_git"))))))
42143 (native-inputs
42144 (list git-minimal/pinned
42145 python-pytest
42146 python-setuptools))
42147 (propagated-inputs
42148 (list python-tomli))
42149 (home-page "https://github.com/python-versioneer/python-versioneer")
42150 (synopsis "Version-string management for VCS-controlled trees")
42151 (description
42152 "@code{versioneer} is a tool for managing a recorded version number in
42153distutils-based python projects. The goal is to remove the tedious and
42154error-prone \"update the embedded version string\" step from your release
42155process.")
42156 (license license:unlicense)))
42157
42158(define-public python-verspec
42159 (package
42160 (name "python-verspec")
42161 (version "0.1.0")
42162 (source
42163 (origin
42164 (method url-fetch)
42165 (uri (pypi-uri "verspec" version))
42166 (sha256
42167 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
42168 (build-system pyproject-build-system)
42169 (arguments
42170 (list
42171 #:phases
42172 #~(modify-phases %standard-phases
42173 (add-before 'check 'pre-check
42174 (lambda _
42175 (invoke "touch" "test/__init__.py"))))))
42176 (native-inputs
42177 (list python-pretend
42178 python-pytest
42179 python-setuptools))
42180 (home-page "https://github.com/jimporter/verspec")
42181 (synopsis "Flexible version handling for Python")
42182 (description
42183 "This Python library handles software versions and specifiers. It is
42184adapted from the @code{packaging} package.")
42185 (license (list license:bsd-2 license:asl2.0))))
42186
42187(define-public python-vine
42188 (package
42189 (name "python-vine")
42190 (version "5.1.0")
42191 (source
42192 (origin
42193 (method url-fetch)
42194 (uri (pypi-uri "vine" version))
42195 (sha256
42196 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
42197 (build-system pyproject-build-system)
42198 (arguments
42199 (list
42200 #:test-flags
42201 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
42202 #~(list "-k" (string-join
42203 (list "not test_evaluate"
42204 "test_reverse"
42205 "test_cancel"
42206 "test_throw")
42207 " and not "))))
42208 (native-inputs
42209 (list python-pytest python-setuptools python-wheel))
42210 (home-page "https://github.com/celery/vine")
42211 (synopsis "Promises for Python")
42212 (description
42213 "@code{vine} provides a special implementation of promises in that it can
42214be used both for \"promise of a value\" and lazy evaluation. The biggest
42215upside for this is that everything in a promise can also be a promise,
42216e.g. filters, callbacks and errbacks can all be promises.")
42217 (license license:bsd-3)))
42218
42219(define-public python-virtualenv
42220 (package
42221 (name "python-virtualenv")
42222 (version "20.35.4")
42223 (source
42224 (origin
42225 (method git-fetch)
42226 (uri (git-reference
42227 (url "https://github.com/pypa/virtualenv")
42228 (commit version)))
42229 (file-name (git-file-name name version))
42230 (sha256
42231 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
42232 (build-system pyproject-build-system)
42233 (arguments
42234 (list
42235 ;; tests: 347 passed, 43 skipped, 8 deselected
42236 #:test-flags
42237 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
42238 (string-join ls "::")))
42239 '(("discovery/py_info/test_py_info.py"
42240 "test_fallback_existent_system_executable")
42241 ("discovery/test_discovery.py"
42242 "test_get_paths_no_path_env")
42243 ("create/via_global_ref/test_build_c_ext.py"
42244 "test_can_build_c_extensions[cpython3-posix]")
42245 ("create/via_global_ref/test_build_c_ext.py"
42246 "test_can_build_c_extensions[venv]")
42247 ("create/test_creator.py"
42248 "test_create_distutils_cfg[cpython3-posix]")
42249 ("create/test_creator.py"
42250 "test_create_distutils_cfg[venv]")
42251 ("seed/embed/test_bootstrap_link_via_app_data.py"
42252 "test_seed_link_via_app_data[True]")
42253 ("seed/embed/test_bootstrap_link_via_app_data.py"
42254 "test_seed_link_via_app_data[False]"))))))
42255 (native-inputs
42256 (list python-flaky
42257 python-hatch-vcs
42258 python-hatchling
42259 python-packaging
42260 python-pytest
42261 python-pytest-env
42262 python-pytest-freezer
42263 python-pytest-mock
42264 python-pytest-timeout
42265 python-setuptools
42266 python-time-machine))
42267 (propagated-inputs
42268 (list python-distlib
42269 python-filelock
42270 python-platformdirs))
42271 (home-page "https://virtualenv.pypa.io/")
42272 (synopsis "Virtual Python environment builder")
42273 (description
42274 "Virtualenv is a tool to create isolated Python environments.")
42275 (license license:expat)))
42276
42277(define-public python-vncdotool
42278 (package
42279 (name "python-vncdotool")
42280 (version "1.2.0")
42281 (source
42282 (origin
42283 (method git-fetch)
42284 (uri (git-reference
42285 (url "http://github.com/sibson/vncdotool")
42286 (commit (string-append "v" version))))
42287 (file-name (git-file-name name version))
42288 (sha256
42289 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
42290 (build-system pyproject-build-system)
42291 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
42292 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
42293 python-setuptools python-wheel))
42294 (home-page "http://github.com/sibson/vncdotool")
42295 (synopsis "Command line VNC client")
42296 (description
42297 "This package provides a Python command line VNC client. It can be
42298useful to automating interactions with virtual machines or hardware devices
42299that are otherwise difficult to control.")
42300 (license license:expat)))
42301
42302(define-public python-vncdotool-bootstrap
42303 (hidden-package
42304 (package/inherit python-vncdotool
42305 (arguments (list #:tests? #f))
42306 (native-inputs (list python-pexpect python-pytest python-setuptools
42307 python-wheel)))))
42308
42309(define-public python-vobject
42310 (package
42311 (name "python-vobject")
42312 (version "0.9.9")
42313 (source (origin
42314 (method url-fetch)
42315 (uri (pypi-uri "vobject" version))
42316 (sha256
42317 (base32
42318 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
42319 (build-system pyproject-build-system)
42320 (arguments
42321 '(;; The test suite relies on some non-portable Windows interfaces. Tests
42322 ;; are rewokred on master's HEAD.
42323 #:tests? #f))
42324 (native-inputs
42325 (list python-setuptools))
42326 (propagated-inputs
42327 (list python-dateutil
42328 python-pytz
42329 python-six)) ;it's dropped on master's HEAD
42330 (home-page "https://py-vobject.github.io/")
42331 (synopsis "Parse and generate vCard and vCalendar files")
42332 (description
42333 "Vobject is intended to be a full featured Python package for parsing
42334and generating vCard and vCalendar files. Currently, iCalendar files are
42335supported and well tested. vCard 3.0 files are supported, and all data should
42336be imported, but only a few components are understood in a sophisticated way.")
42337 (license license:asl2.0)))
42338
42339(define-public python-voluptuous
42340 (package
42341 (name "python-voluptuous")
42342 (version "0.15.2")
42343 (source
42344 (origin
42345 (method url-fetch)
42346 (uri (pypi-uri "voluptuous" version))
42347 (sha256
42348 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
42349 (build-system pyproject-build-system)
42350 (native-inputs
42351 (list python-pytest
42352 python-setuptools))
42353 (home-page "https://github.com/alecthomas/voluptuous")
42354 (synopsis "Python data validation library")
42355 (description
42356 "Voluptuous is a Python data validation library. It is primarily
42357intended for validating data coming into Python as JSON, YAML, etc.")
42358 (license license:bsd-3)))
42359
42360(define-public python-wadler-lindig
42361 (package
42362 (name "python-wadler-lindig")
42363 (version "0.1.7")
42364 (source
42365 (origin
42366 ;; GitHub includes the tests, unlike the PyPI tarball
42367 (method git-fetch)
42368 (uri (git-reference
42369 (url "https://github.com/patrick-kidger/wadler_lindig")
42370 (commit (string-append "v" version))))
42371 (file-name (git-file-name name version))
42372 (sha256
42373 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
42374 (build-system pyproject-build-system)
42375 (native-inputs (list python-hatchling python-pytest python-numpy))
42376 (home-page "https://docs.kidger.site/wadler_lindig")
42377 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
42378 (description
42379 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
42380library for Python that implements a simplified version of the Wadler-Lindig
42381algorithm. Designed to consume less horizontal space than Python's
42382built-in pprint.pprint, it produces compact, well-formatted representations
42383even for complex custom types.")
42384 (license license:asl2.0)))
42385
42386(define-public python-wand
42387 (package
42388 (name "python-wand")
42389 (version "0.7.2")
42390 (source
42391 (origin
42392 (method git-fetch)
42393 (uri (git-reference
42394 (url "https://github.com/emcconville/wand")
42395 (commit version)))
42396 (file-name (git-file-name name version))
42397 (sha256
42398 (base32 "0h6r9mk66w5wk8g2rfx6rlh26dvkix2rr08kv38bmqvg34kjz6fm"))))
42399 (build-system pyproject-build-system)
42400 (arguments
42401 (list
42402 #:phases
42403 #~(modify-phases %standard-phases
42404 (add-after 'unpack 'hardcode-lib-path
42405 (lambda _
42406 (substitute* "wand/api.py"
42407 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42408 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42409 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42410 "\".Q16\"")))))))
42411 (native-inputs
42412 (list python-setuptools python-pytest))
42413 (inputs
42414 (list imagemagick))
42415 (home-page "https://docs.wand-py.org/")
42416 (synopsis "MagickWand API binding for Python")
42417 (description
42418 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42419 (license license:expat)))
42420
42421(define-public python-wasabi
42422 (package
42423 (name "python-wasabi")
42424 (version "1.1.3")
42425 (source
42426 (origin
42427 (method url-fetch)
42428 (uri (pypi-uri "wasabi" version))
42429 (sha256
42430 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42431 (build-system pyproject-build-system)
42432 (arguments
42433 (list
42434 #:test-flags
42435 ;; Test requires nbconvert which is huge.
42436 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42437 (native-inputs
42438 (list python-pytest
42439 python-setuptools))
42440 (propagated-inputs
42441 (list python-colorama))
42442 (home-page "https://github.com/ines/wasabi")
42443 (synopsis "Console printing and formatting toolkit")
42444 (description
42445 "This package provides a lightweight console printing and formatting
42446toolkit for Python.")
42447 (license license:expat)))
42448
42449(define-public python-watchdog
42450 (package
42451 (name "python-watchdog")
42452 (version "6.0.0")
42453 (source
42454 (origin
42455 (method url-fetch)
42456 (uri (pypi-uri "watchdog" version))
42457 (sha256
42458 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42459 (build-system pyproject-build-system)
42460 (arguments
42461 (list
42462 #:test-flags
42463 #~(list "-k" (string-join
42464 (list "not test_kill_auto_restart"
42465 "test_auto_restart_on_file_change_debounce"
42466 ;; Fails with too many open files.
42467 "test_select_fd")
42468 " and not "))))
42469 (native-inputs
42470 (list python-pytest python-setuptools))
42471 (propagated-inputs
42472 (list python-pyyaml))
42473 (home-page "https://github.com/gorakhargosh/watchdog")
42474 (synopsis "File system events monitoring")
42475 (description
42476 "This package provides a way to monitor file system events such as a file
42477modification and trigger an action. This is similar to inotify, but
42478portable.")
42479 (license license:asl2.0)))
42480
42481(define-public python-watchfiles
42482 (package
42483 (name "python-watchfiles")
42484 (version "1.1.1")
42485 (source
42486 (origin
42487 (method git-fetch)
42488 (uri (git-reference
42489 (url "https://github.com/samuelcolvin/watchfiles")
42490 (commit (string-append "v" version))))
42491 (file-name (git-file-name name version))
42492 (sha256
42493 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42494 (build-system pyproject-build-system)
42495 (arguments
42496 (list
42497 ;; Missing file in source.
42498 #:test-flags ''("-k" "not test_docs_examples")
42499 #:imported-modules `(,@%cargo-build-system-modules
42500 ,@%pyproject-build-system-modules)
42501 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42502 (guix build pyproject-build-system)
42503 (guix build utils))
42504 #:phases
42505 #~(modify-phases %standard-phases
42506 (add-after 'unpack 'prepare-cargo-build-system
42507 (lambda args
42508 (for-each
42509 (lambda (phase)
42510 (format #t "Running cargo phase: ~a~%" phase)
42511 (apply (assoc-ref cargo:%standard-phases phase)
42512 #:cargo-target #$(cargo-triplet)
42513 args))
42514 '(unpack-rust-crates
42515 configure
42516 check-for-pregenerated-files
42517 patch-cargo-checksums))))
42518 (add-after 'build 'install-rust-library
42519 (lambda _
42520 (copy-file "target/release/lib_rust_notify.so"
42521 "watchfiles/_rust_notify.so"))))))
42522 (native-inputs
42523 (append
42524 (list maturin
42525 python-anyio
42526 python-dirty-equals
42527 python-pytest
42528 python-pytest-mock
42529 python-pytest-timeout
42530 rust
42531 `(,rust "cargo"))
42532 (or (and=> (%current-target-system)
42533 (compose list make-rust-sysroot))
42534 '())))
42535 (inputs
42536 (cargo-inputs 'python-watchfiles))
42537 (propagated-inputs
42538 (list python-anyio))
42539 (home-page "https://github.com/samuelcolvin/watchfiles")
42540 (synopsis "Simple, modern file watching and code reload in Python")
42541 (description
42542 "Simple, modern file watching and code reload in Python inspired by
42543@code{watchdog}. Among the differences are a unified approach for each
42544operating systems and an elegant approach to concurrency using threading.")
42545 (license license:expat)))
42546
42547(define-public python-wcmatch
42548 (package
42549 (name "python-wcmatch")
42550 (version "10.1")
42551 (source
42552 (origin
42553 (method git-fetch)
42554 (uri (git-reference
42555 (url "https://github.com/facelessuser/wcmatch")
42556 (commit version)))
42557 (file-name (git-file-name name version))
42558 (sha256
42559 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42560 (build-system pyproject-build-system)
42561 (arguments
42562 (list #:test-flags
42563 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42564 ;; the build directory which the sandbox does not permit.
42565 #~(list "-k" "not test_glob_match_real_outside_curdir")
42566 #:phases
42567 #~(modify-phases %standard-phases
42568 (add-before 'check 'set-home
42569 (lambda _
42570 (setenv "HOME" (getcwd)))))))
42571 (native-inputs
42572 (list python-hatchling
42573 python-pytest))
42574 (propagated-inputs
42575 (list python-bracex))
42576 (home-page "https://facelessuser.github.io/wcmatch/")
42577 (synopsis "Wildcard and glob file name matcher")
42578 (description
42579 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42580@code{pathlib} library. It adds features such as brace expansion,extended
42581glob patterns, and recursive globbing with configurable behavior.")
42582 (license license:expat)))
42583
42584(define-public python-wcwidth
42585 (package
42586 (name "python-wcwidth")
42587 (version "0.2.13")
42588 (source (origin
42589 (method url-fetch)
42590 (uri (pypi-uri "wcwidth" version))
42591 (sha256
42592 (base32
42593 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42594 (build-system pyproject-build-system)
42595 (native-inputs (list python-pytest python-setuptools))
42596 (home-page "https://github.com/jquast/wcwidth")
42597 (synopsis "Measure number of terminal column cells of wide-character codes")
42598 (description
42599 "Wcwidth measures the number of terminal column cells of wide-character
42600codes. It is useful for those implementing a terminal emulator, or programs
42601that carefully produce output to be interpreted by one. It is a Python
42602implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42603in POSIX.1-2001 and POSIX.1-2008.")
42604 (license license:expat)))
42605
42606(define-public python-whatever
42607 (package
42608 (name "python-whatever")
42609 (version "0.7")
42610 (source
42611 (origin
42612 (method git-fetch)
42613 (uri (git-reference
42614 (url "https://github.com/Suor/whatever")
42615 (commit version)))
42616 (file-name (git-file-name name version))
42617 (sha256
42618 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42619 (build-system pyproject-build-system)
42620 (native-inputs
42621 (list python-pytest python-setuptools python-wheel))
42622 (home-page "https://github.com/Suor/whatever")
42623 (synopsis "Make anonymous functions by partial application of operators")
42624 (description "@code{whatever} provides an easy way to make anonymous
42625functions by partial application of operators.")
42626 (license license:bsd-3)))
42627
42628(define-public python-whatthepatch
42629 (package
42630 (name "python-whatthepatch")
42631 (version "1.0.7")
42632 (source
42633 (origin
42634 (method url-fetch)
42635 (uri (pypi-uri "whatthepatch" version))
42636 (sha256
42637 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42638 (build-system pyproject-build-system)
42639 (native-inputs (list python-pytest python-setuptools))
42640 (home-page "https://github.com/cscorley/whatthepatch")
42641 (synopsis "Patch parsing and application library")
42642 (description
42643 "This package provides a patch parsing and application library.")
42644 (license license:expat)))
42645
42646(define-public python-wheel-filename
42647 (package
42648 (name "python-wheel-filename")
42649 (version "1.4.2")
42650 (source
42651 (origin
42652 (method url-fetch)
42653 (uri (pypi-uri "wheel_filename" version))
42654 (sha256
42655 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42656 (build-system pyproject-build-system)
42657 (native-inputs (list python-hatchling python-pytest))
42658 (home-page "https://github.com/wheelodex/wheel-filename")
42659 (synopsis "Parse wheel filenames")
42660 (description
42661 "This software allows you to verify
42662@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42663filenames and parse them into their component fields.
42664
42665This package adheres strictly to the standard, with the following
42666exceptions:
42667
42668@itemize @bullet
42669@item
42670Version components may be any sequence of the relevant set of
42671characters; they are not verified for PEP 440 compliance.
42672@item
42673The @file{.whl} file extension is matched case-insensitively.
42674@end itemize")
42675 (license license:expat)))
42676
42677(define-public python-wheezy-template
42678 (package
42679 (name "python-wheezy-template")
42680 (version "3.2.5")
42681 (source
42682 (origin
42683 (method git-fetch)
42684 (uri (git-reference
42685 (url "https://github.com/akornatskyy/wheezy.template")
42686 (commit version)))
42687 (file-name (git-file-name name version))
42688 (sha256
42689 (base32 "1ky0j2d5znsx4pxb2szbpmxg6qw71134n4x5y22fiiicbbw8bm49"))))
42690 (build-system pyproject-build-system)
42691 (native-inputs (list python-setuptools python-pytest))
42692 (home-page "https://github.com/akornatskyy/wheezy.template")
42693 (synopsis "Lightweight template library")
42694 (description "This package provides a lightweight template library which
42695aims to be compact, expressive, intuitive and fast.")
42696 (license license:expat)))
42697
42698(define-public python-whenever
42699 (package
42700 (name "python-whenever")
42701 (version "0.9.2")
42702 (source
42703 (origin
42704 (method url-fetch)
42705 (uri (pypi-uri "whenever" version))
42706 (sha256
42707 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42708 (build-system pyproject-build-system)
42709 (arguments
42710 (list
42711 ;; tests: 2170 passed, 3 skipped, 2 warnings
42712 #:phases
42713 #~(modify-phases %standard-phases
42714 ;; Use the pure python version
42715 (add-before 'build 'setenv
42716 (lambda _
42717 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42718 (add-before 'check 'set-check-environment
42719 (lambda* (#:key inputs #:allow-other-keys)
42720 (setenv "TZ" "UTC")
42721 (setenv "TZDIR"
42722 (search-input-directory inputs
42723 "share/zoneinfo")))))))
42724 (propagated-inputs
42725 (list python-time-machine python-tzdata python-tzlocal))
42726 (native-inputs
42727 (list python-pytest
42728 python-setuptools
42729 tzdata-for-tests))
42730 (home-page "https://whenever.readthedocs.io/")
42731 (synopsis "Modern datetime library for Python")
42732 (description "Modern datetime library for Python. Supports:
42733@itemize
42734@item DST-safe arithmetic
42735@item Nanosecond precision
42736@item Date arithmetic
42737@end itemize")
42738 (license license:expat)))
42739
42740;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42741(define-public python-whichcraft
42742 (package
42743 (name "python-whichcraft")
42744 (version "0.6.1")
42745 (source
42746 (origin
42747 (method url-fetch)
42748 (uri (pypi-uri "whichcraft" version))
42749 (sha256
42750 (base32
42751 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42752 (build-system pyproject-build-system)
42753 (native-inputs
42754 (list python-pytest python-setuptools))
42755 (home-page "https://github.com/pydanny/whichcraft")
42756 (synopsis "Cross-platform cross-python shutil.which functionality")
42757 (description
42758 "This package provides a shim of the shutil.which function that's
42759designed to work across multiple versions of Python.")
42760 (license license:bsd-3)))
42761
42762(define-public python-widgetsnbextension
42763 (package
42764 (name "python-widgetsnbextension")
42765 (version "4.0.14")
42766 (source
42767 (origin
42768 (method url-fetch)
42769 (uri (pypi-uri "widgetsnbextension" version))
42770 (sha256
42771 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42772 (build-system pyproject-build-system)
42773 (arguments
42774 (list #:tests? #f)) ;no tests in PyPI or git
42775 (native-inputs
42776 (list python-jupyter-packaging
42777 python-setuptools))
42778 (home-page "https://ipython.org")
42779 (synopsis "IPython HTML widgets for Jupyter")
42780 (description "This package provides interactive HTML widgets for Jupyter
42781notebooks.")
42782 (license license:bsd-3)))
42783
42784(define-public python-wrapt
42785 (package
42786 (name "python-wrapt")
42787 (version "2.0.1")
42788 (source
42789 (origin
42790 (method url-fetch)
42791 (uri (pypi-uri "wrapt" version))
42792 (sha256
42793 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42794 (build-system pyproject-build-system)
42795 (arguments
42796 (list
42797 ;; tests: 562 passed, 1 deselected
42798 #:test-flags
42799 ;; AssertionError: Output did not match expected for
42800 ;; mypy_function_wrapper_fn_t6.py
42801 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42802 (native-inputs
42803 (list python-mypy-for-tests ;hard dependencies in tests
42804 python-pytest
42805 python-setuptools))
42806 (home-page "https://github.com/GrahamDumpleton/wrapt")
42807 (synopsis "Module for decorators, wrappers and monkey patching")
42808 (description
42809 "The aim of the wrapt module is to provide a transparent object proxy for
42810 Python, which can be used as the basis for the construction of function
42811 wrappers and decorator functions.")
42812 (license license:bsd-2)))
42813
42814(define-public python-wurlitzer
42815 (package
42816 (name "python-wurlitzer")
42817 (version "3.1.1")
42818 (source
42819 (origin
42820 (method url-fetch)
42821 (uri (pypi-uri "wurlitzer" version))
42822 (sha256
42823 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42824 (build-system pyproject-build-system)
42825 (arguments
42826 (list #:test-flags #~(list "test.py")))
42827 (native-inputs
42828 (list python-pytest
42829 python-setuptools))
42830 (home-page "https://github.com/minrk/wurlitzer")
42831 (synopsis "Capture C-level output in context managers")
42832 (description
42833 "This library helps to redirect @code{sys.stdout} to a stream or a file
42834while executing some piece of code, including C code running within a Python
42835process.")
42836 (license license:expat)))
42837
42838(define-public python-xattr
42839 (package
42840 (name "python-xattr")
42841 (version "1.2.0")
42842 (source
42843 (origin
42844 (method url-fetch)
42845 (uri (pypi-uri "xattr" version))
42846 (sha256
42847 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42848 (build-system pyproject-build-system)
42849 (native-inputs
42850 (list python-pytest
42851 python-setuptools))
42852 (propagated-inputs
42853 (list python-cffi))
42854 (home-page "https://github.com/xattr/xattr")
42855 (synopsis "Python wrapper for extended file system attributes")
42856 (description "This package provides a Python wrapper for using extended
42857file system attributes. Extended attributes extend the basic attributes of files
42858and directories in the file system. They are stored as name:data pairs
42859associated with file system objects (files, directories, symlinks, etc).")
42860 (license license:expat)))
42861
42862(define-public python-xdg-base-dirs
42863 (package
42864 (name "python-xdg-base-dirs")
42865 (version "6.0.2")
42866 (source
42867 (origin
42868 (method git-fetch)
42869 (uri (git-reference
42870 (url "https://github.com/srstevenson/xdg-base-dirs")
42871 (commit version)))
42872 (file-name (git-file-name name version))
42873 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42874 (modules '((guix build utils)))
42875 ;; All pytest options are for coverage; remove snippet in next release:
42876 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42877 (snippet #~(substitute* "pyproject.toml"
42878 (("^addopts = .*") "")))))
42879 (build-system pyproject-build-system)
42880 (native-inputs
42881 (list python-poetry-core python-pytest))
42882 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42883 (synopsis "Variables defined by the XDG Base Directory Specification")
42884 (description "xdg-base-dirs is a Python module that provides functions to
42885return paths to the directories defined by the XDG Base Directory
42886Specification, to save you from duplicating the same snippet of logic in every
42887Python utility you write that deals with user cache, configuration, or data
42888files.")
42889 (license license:isc)))
42890
42891(define-public python-xkbcommon
42892 (package
42893 (name "python-xkbcommon")
42894 (version "1.0.1")
42895 (source
42896 (origin
42897 (method git-fetch)
42898 (uri (git-reference
42899 (url "https://github.com/sde1000/python-xkbcommon")
42900 (commit (string-append "v" version))))
42901 (file-name (git-file-name name version))
42902 (sha256
42903 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42904 (build-system pyproject-build-system)
42905 (propagated-inputs (list python-cffi))
42906 (native-inputs (list libxkbcommon python-setuptools))
42907 (arguments
42908 (list
42909 #:test-backend
42910 #~'unittest
42911 #:phases
42912 #~(modify-phases %standard-phases
42913 (add-before 'check 'cleanup
42914 (lambda _
42915 (delete-file-recursively "xkbcommon"))))))
42916 (home-page "https://github.com/sde1000/python-xkbcommon")
42917 (synopsis "Bindings for libxkbcommon using cffi")
42918 (description "Bindings for libxkbcommon using cffi.")
42919 (license license:expat)))
42920
42921(define-public python-xlib
42922 (package
42923 (name "python-xlib")
42924 (version "0.33")
42925 (source
42926 (origin
42927 (method git-fetch)
42928 (uri (git-reference
42929 (url "https://github.com/python-xlib/python-xlib")
42930 (commit version)))
42931 (file-name (git-file-name name version))
42932 (sha256
42933 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42934 (build-system pyproject-build-system)
42935 (arguments
42936 `(#:phases
42937 (modify-phases %standard-phases
42938 (add-before 'check 'start-xserver
42939 (lambda* (#:key inputs #:allow-other-keys)
42940 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42941 ;; There must be a running X server and make check doesn't
42942 ;; start one. Therefore we must do it.
42943 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42944 (setenv "DISPLAY" ":1")))))))
42945 (native-inputs
42946 (list python-mock
42947 python-pytest
42948 python-setuptools
42949 xorg-server))
42950 (propagated-inputs
42951 (list python-six))
42952 (home-page "https://github.com/python-xlib/python-xlib")
42953 (synopsis "Python X11 client library")
42954 (description
42955 "The Python X Library is intended to be a fully functional
42956X client library for Python programs. It is useful to implement
42957low-level X clients. It is written entirely in Python.")
42958 (license license:gpl2+)))
42959
42960(define-public python-xlrd
42961 (package
42962 (name "python-xlrd")
42963 (version "2.0.2")
42964 (source
42965 (origin
42966 (method git-fetch) ;no tests in PyPI archive
42967 (uri (git-reference
42968 (url "https://github.com/python-excel/xlrd")
42969 (commit version)))
42970 (file-name (git-file-name name version))
42971 (sha256
42972 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42973 (build-system pyproject-build-system)
42974 (native-inputs
42975 (list python-pytest
42976 python-setuptools))
42977 (home-page "https://www.python-excel.org/")
42978 (synopsis "Library for extracting data from Excel files")
42979 (description "This package provides a library to extract data from
42980spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42981@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42982Unicode-aware. It is not intended as an end-user tool.")
42983 (license license:bsd-3)))
42984
42985(define-public python-xlsxwriter
42986 (package
42987 (name "python-xlsxwriter")
42988 (version "3.2.0")
42989 (source
42990 (origin
42991 ;; There are no tests in the PyPI tarball.
42992 (method git-fetch)
42993 (uri (git-reference
42994 (url "https://github.com/jmcnamara/XlsxWriter")
42995 (commit (string-append "RELEASE_" version))))
42996 (file-name (git-file-name name version))
42997 (sha256
42998 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42999 (build-system pyproject-build-system)
43000 (native-inputs
43001 (list python-setuptools
43002 python-wheel))
43003 (home-page "https://github.com/jmcnamara/XlsxWriter")
43004 (synopsis "Python module for creating Excel XLSX files")
43005 (description
43006 "XlsxWriter is a Python module that can be used to write text, numbers,
43007formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
43008 (license license:bsd-2)))
43009
43010;;; Note: this package is unmaintained since 2018 (archived on GitHub).
43011(define-public python-xlwt
43012 (package
43013 (name "python-xlwt")
43014 (version "1.3.0")
43015 (source
43016 (origin
43017 (method url-fetch)
43018 (uri (pypi-uri "xlwt" version))
43019 (sha256
43020 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
43021 (build-system pyproject-build-system)
43022 (native-inputs (list python-pytest python-setuptools python-wheel))
43023 (home-page "https://www.python-excel.org/")
43024 (synopsis "Library for creating spreadsheet Excel files")
43025 (description
43026 "@code{xlwt} is a library for writing data and formatting information to
43027older Excel files (i.e. .xls). The package itself is pure Python with no
43028dependencies on modules or packages outside the standard Python distribution.
43029It is not intended as an end-user tool.")
43030 (license license:bsd-3)))
43031
43032(define-public python-xmldiff
43033 (package
43034 (name "python-xmldiff")
43035 (version "3.0b1")
43036 (source
43037 (origin
43038 (method git-fetch)
43039 (uri (git-reference
43040 (url "https://github.com/Shoobx/xmldiff")
43041 (commit version)))
43042 (file-name (git-file-name name version))
43043 (sha256
43044 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
43045 (build-system pyproject-build-system)
43046 (native-inputs (list python-pytest python-setuptools))
43047 (propagated-inputs (list python-lxml))
43048 (home-page "https://github.com/Shoobx/xmldiff")
43049 (synopsis "Creates diffs of XML files")
43050 (description "This Python tool figures out the differences between two
43051similar XML files, in the same way the @command{diff} utility does it.")
43052 (license license:expat)))
43053
43054(define-public python-xmlsec
43055 (package
43056 (name "python-xmlsec")
43057 (version "1.3.17")
43058 (source
43059 (origin
43060 (method git-fetch)
43061 (uri (git-reference
43062 (url "https://github.com/xmlsec/python-xmlsec")
43063 (commit version)))
43064 (file-name (git-file-name name version))
43065 (sha256
43066 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
43067 (build-system pyproject-build-system)
43068 (arguments
43069 (list
43070 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
43071 #:test-flags #~(list "-n" "1")))
43072 (inputs (list openssl libltdl libxslt libxml2))
43073 (propagated-inputs (list python-lxml xmlsec-openssl))
43074 (native-inputs (list pkg-config
43075 python-lxml
43076 python-pkgconfig
43077 python-pytest
43078 python-pytest-xdist
43079 python-setuptools
43080 python-setuptools-scm
43081 python-wheel))
43082 (home-page "https://github.com/xmlsec/python-xmlsec")
43083 (synopsis "Python bindings for the XML Security Library")
43084 (description "This package provides Python bindings for the XML Security
43085Library.")
43086 (license license:expat)))
43087
43088(define-public python-xmod
43089 (package
43090 (name "python-xmod")
43091 (version "1.10.0")
43092 (source
43093 (origin
43094 (method git-fetch)
43095 (uri (git-reference
43096 (url "https://github.com/rec/xmod")
43097 (commit (string-append "v" version))))
43098 (file-name (git-file-name name version))
43099 (sha256
43100 (base32 "0a2ywlfa0s4aqs1yag9xirv69029xmw307mbfqz7vhy8dadc2z30"))))
43101 (build-system pyproject-build-system)
43102 (native-inputs (list python-hatchling python-pytest))
43103 (home-page "https://rec.github.io/xmod/")
43104 (synopsis "Turn any object into a module")
43105 (description
43106 "@code{xmod} is a tiny library that lets a module to do things that
43107normally only a class could do.")
43108 (license license:expat)))
43109
43110(define-public python-xmp-toolkit
43111 (package
43112 (name "python-xmp-toolkit")
43113 (version "2.1.0")
43114 (source
43115 (origin
43116 (method url-fetch)
43117 (uri (pypi-uri "python_xmp_toolkit" version))
43118 (sha256
43119 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
43120 (build-system pyproject-build-system)
43121 (arguments
43122 (list
43123 #:phases
43124 #~(modify-phases %standard-phases
43125 (add-after 'unpack 'patch-source
43126 (lambda* (#:key inputs #:allow-other-keys)
43127 (substitute* "libxmp/exempi.py"
43128 (("ctypes.util.find_library\\('exempi'\\)")
43129 (format #f "~s" (search-input-file
43130 inputs "lib/libexempi.so")))))))))
43131 (native-inputs
43132 (list python-pytest
43133 python-flit-core))
43134 (inputs
43135 (list exempi))
43136 (propagated-inputs
43137 (list python-pytz))
43138 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
43139 (synopsis "Python XMP Toolkit for working with metadata")
43140 (description "Python XMP Toolkit is a library for working with XMP
43141metadata, as well as reading/writing XMP metadata stored in many different
43142file formats.
43143
43144Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
43145based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
43146are easily incorporated into the library with a minimum amount of work.")
43147 (license license:bsd-3)))
43148
43149(define-public python-yamlcore
43150 (package
43151 (name "python-yamlcore")
43152 (version "0.0.4")
43153 (source
43154 (origin
43155 (method git-fetch)
43156 (uri (git-reference
43157 (url "https://github.com/perlpunk/pyyaml-core")
43158 (commit (string-append "v" version))))
43159 (file-name (git-file-name name version))
43160 (sha256
43161 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
43162 (build-system pyproject-build-system)
43163 (arguments
43164 (list
43165 #:phases
43166 #~(modify-phases %standard-phases
43167 (add-after 'unpack 'fix-test-file-names
43168 (lambda _
43169 (rename-file "tests/test-schema.py" "tests/test_schema.py")
43170 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
43171 (native-inputs (list python-pytest python-setuptools))
43172 (inputs (list python-pyyaml))
43173 (home-page "https://github.com/perlpunk/pyyaml-core")
43174 (synopsis "YAML 1.2 support for PyYAML")
43175 (description "This module can be used on top of PyYAML to load YAML 1.2
43176files.")
43177 (license license:expat)))
43178
43179(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
43180
43181(define-public python-yamllint
43182 (package
43183 (name "python-yamllint")
43184 (version "1.38.0")
43185 (source
43186 (origin
43187 (method git-fetch)
43188 (uri (git-reference
43189 (url "https://github.com/adrienverge/yamllint")
43190 (commit (string-append "v" version))))
43191 (file-name (git-file-name name version))
43192 (sha256
43193 (base32 "18wqyj600jhzwm01wnpc48cyppbkwrwz93vr47338iwkgmp2szz0"))))
43194 (build-system pyproject-build-system)
43195 (arguments
43196 (list #:test-backend #~'unittest))
43197 (native-inputs
43198 (list python-setuptools))
43199 (propagated-inputs
43200 (list python-pathspec python-pyyaml))
43201 (home-page "https://github.com/adrienverge/yamllint")
43202 (synopsis "Linter for YAML files")
43203 (description
43204 "Yamllint is a linter for YAML files. yamllint does not only check for
43205syntax validity, but for weirdnesses like key repetition and cosmetic problems
43206such as lines length, trailing spaces, indentation, etc.")
43207 (license license:gpl3+)))
43208
43209(define-public python-yamlloader
43210 (package
43211 (name "python-yamlloader")
43212 (version "1.6.0")
43213 (source
43214 (origin
43215 (method url-fetch)
43216 (uri (pypi-uri "yamlloader" version))
43217 (sha256
43218 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
43219 (build-system pyproject-build-system)
43220 (arguments
43221 (list #:test-backend #~'unittest
43222 #:test-flags #~(list "discover" "-v")))
43223 (native-inputs
43224 (list python-hatch-vcs
43225 python-hatchling
43226 python-hypothesis
43227 python-pytest))
43228 (propagated-inputs
43229 (list python-pyyaml))
43230 (home-page "https://github.com/Phynix/yamlloader")
43231 (synopsis "Ordered YAML loader and dumper for PyYAML")
43232 (description
43233 "This package provides loaders and dumpers for PyYAML. Currently, an
43234OrderedDict loader/dumper is implemented, allowing to keep items order when
43235loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
43236dicts are supported and are the default items to be loaded to. As of Python
432373.7 preservation of insertion order is a language feature of regular dicts.)
43238It was originally mirrored from
43239@url{https://github.com/fmenabe/python-yamlordereddictloader,
43240yamlordereddict}.")
43241 (license license:expat)))
43242
43243;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
43244;; an improved version of this library with unit tests, performance
43245;; improvements (by providing access to the C implementation of PyYAML) and is
43246;; more actively developed.
43247(define-public python-yamlordereddictloader
43248 (package
43249 (name "python-yamlordereddictloader")
43250 (version "0.4.2")
43251 (source
43252 (origin
43253 (method git-fetch)
43254 (uri (git-reference
43255 (url "https://github.com/fmenabe/python-yamlordereddictloader")
43256 (commit version)))
43257 (file-name (git-file-name name version))
43258 (sha256
43259 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
43260 (build-system pyproject-build-system)
43261 (arguments
43262 (list #:tests? #f)) ;no tests
43263 (native-inputs
43264 (list python-setuptools))
43265 (propagated-inputs
43266 (list python-pyyaml))
43267 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
43268 (synopsis "Loader and a dumper for PyYAML")
43269 (description
43270 "yamlordereddictloader is a Python package that provides a loader and a
43271dumper for PyYAML allowing to keep items order when loading a file (by putting
43272them in OrderedDict objects) and to manage OrderedDict objects when dumping to
43273a file.")
43274 (license license:expat)))
43275
43276(define-public python-yapf
43277 (package
43278 (name "python-yapf")
43279 (version "0.43.0")
43280 (source
43281 (origin
43282 (method url-fetch)
43283 (uri (pypi-uri "yapf" version))
43284 (sha256
43285 (base32
43286 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
43287 (build-system pyproject-build-system)
43288 (propagated-inputs
43289 (list python-platformdirs python-tomli))
43290 (native-inputs
43291 (list python-pytest python-setuptools python-wheel))
43292 (home-page "https://github.com/google/yapf")
43293 (synopsis "Formatter for Python code")
43294 (description "YAPF is a formatter for Python code. It's based off of
43295@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
43296takes the code and reformats it to the best formatting that conforms to the
43297style guide, even if the original code didn't violate the style guide.")
43298 (license license:asl2.0)))
43299
43300(define-public python-yappi
43301 (package
43302 (name "python-yappi")
43303 (version "1.7.6")
43304 (source
43305 (origin
43306 (method git-fetch)
43307 (uri (git-reference
43308 (url "https://github.com/sumerc/yappi")
43309 (commit (string-append "v" version))))
43310 (file-name (git-file-name name version))
43311 (sha256
43312 (base32 "08jhsflxyj3vf1m06vngsw9d6qyblykcx1j2mq4qn0ray0s7v8qj"))))
43313 (build-system pyproject-build-system)
43314 (arguments
43315 (list #:test-backend #~'unittest
43316 #:test-flags #~'("discover" "tests")))
43317 (native-inputs (list python-gevent python-setuptools))
43318 (home-page "https://github.com/sumerc/yappi")
43319 (synopsis "Python Profiler")
43320 (description "@acronym{YAPPI, Yet Another Python Profiler} is a robust and
43321intuitive, standard compliant Python profiler.")
43322 (license license:expat)))
43323
43324(define-public python-yapsy
43325 (package
43326 (name "python-yapsy")
43327 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
43328 ;; 3.12+; move back to git tag when released.
43329 (properties '((base-version . "1.12.2")
43330 (commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
43331 (revision . "0")))
43332 (version (git-version (assoc-ref properties 'base-version)
43333 (assoc-ref properties 'revision)
43334 (assoc-ref properties 'commit)))
43335 (source
43336 (origin
43337 (method git-fetch)
43338 (uri (git-reference
43339 (url "https://github.com/tibonihoo/yapsy")
43340 (commit (assoc-ref properties 'commit))))
43341 (file-name (git-file-name name version))
43342 (sha256
43343 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
43344 (build-system pyproject-build-system)
43345 (arguments
43346 (list
43347 #:phases
43348 #~(modify-phases %standard-phases
43349 (add-after 'unpack 'change-source-dir
43350 (lambda _
43351 (chdir "package")))
43352 (add-after 'change-source-dir 'patch-version
43353 (lambda _
43354 (substitute* "yapsy/__init__.py"
43355 (("__version__=\"2.0.0\"")
43356 (format #nil "__version__=\"~a\"" #$(assoc-ref properties 'base-version)))))))))
43357 (native-inputs
43358 (list python-pytest python-setuptools))
43359 (home-page "https://yapsy.sourceforge.net")
43360 (synopsis "Simple plugin system for Python applications")
43361 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
43362implementing the core mechanisms needed to build a plugin system into a wider
43363application.
43364
43365The main purpose is to depend only on Python's standard libraries and to
43366implement only the basic functionalities needed to detect, load and keep track
43367of several plugins.")
43368 (license license:bsd-3)))
43369
43370(define-public python-yaspin
43371 (package
43372 (name "python-yaspin")
43373 (version "3.2.0")
43374 (source
43375 (origin
43376 (method url-fetch)
43377 (uri
43378 (pypi-uri "yaspin" version))
43379 (sha256
43380 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
43381 (build-system pyproject-build-system)
43382 ;; tests: 3007 passed, 1758 skipped
43383 (native-inputs
43384 (list python-poetry-core
43385 python-pytest
43386 python-pytest-mock))
43387 (propagated-inputs
43388 (list python-termcolor-next))
43389 (home-page "https://github.com/pavdmyt/yaspin")
43390 (synopsis "Yet Another Terminal Spinner")
43391 (description "Yaspin provides a terminal spinner to indicate the progress
43392during long operations.")
43393 (license license:expat)))
43394
43395(define-public python-yattag
43396 (package
43397 (name "python-yattag")
43398 (version "1.16.1")
43399 (source
43400 (origin
43401 (method url-fetch)
43402 (uri (pypi-uri "yattag" version))
43403 (sha256
43404 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
43405 (build-system pyproject-build-system)
43406 (native-inputs
43407 (list python-pytest
43408 python-setuptools
43409 python-wheel))
43410 (home-page "https://www.yattag.org/")
43411 (synopsis "HTML or XML generator for Python")
43412 (description
43413 "Yattag is a Python library for generating HTML or XML in a pythonic
43414way.")
43415 (license license:lgpl2.1)))
43416
43417(define-public python-yq
43418 (package
43419 (name "python-yq")
43420 (version "3.4.3")
43421 (source
43422 (origin
43423 (method url-fetch)
43424 (uri (pypi-uri "yq" version))
43425 (sha256
43426 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
43427 (build-system pyproject-build-system)
43428 (arguments
43429 (list
43430 #:test-backend #~'custom
43431 #:test-flags #~(list "test/test.py" "-v")
43432 #:phases
43433 #~(modify-phases %standard-phases
43434 (add-after 'unpack 'patch
43435 (lambda _
43436 (substitute* "yq/__init__.py"
43437 (("Popen\\(\\[\"jq")
43438 (string-append
43439 "Popen([\""
43440 #$(this-package-input "jq") "/bin/jq"))))))))
43441 (native-inputs
43442 (list python-hatchling
43443 python-hatch-vcs))
43444 (inputs
43445 (list jq))
43446 (propagated-inputs
43447 (list python-argcomplete
43448 python-pyyaml
43449 python-tomlkit
43450 python-xmltodict))
43451 (home-page "https://github.com/kislyuk/yq")
43452 (synopsis "Command-line YAML/XML processor")
43453 (description
43454 "This package provides @command{yq} and @command{xq} for processing YAML
43455and XML respectively. The processing is done through @command{jq},
43456@command{jq} filters can be used to process the data as it passes through.")
43457 (license license:asl2.0)))
43458
43459(define-public python-yte
43460 (package
43461 (name "python-yte")
43462 (version "1.8.1") ;TODO higher versions depend on uv_build
43463 (source
43464 (origin
43465 (method git-fetch)
43466 (uri (git-reference
43467 (url "https://github.com/koesterlab/yte")
43468 (commit (string-append "v" version))))
43469 (sha256
43470 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43471 (build-system pyproject-build-system)
43472 (arguments
43473 (list
43474 #:test-flags #~(list "tests.py")
43475 #:phases
43476 '(modify-phases %standard-phases
43477 (add-after 'unpack 'set-HOME
43478 (lambda _ (setenv "HOME" "/tmp"))))))
43479 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43480 (native-inputs (list python-numpy python-poetry-core python-pytest))
43481 (home-page "https://github.com/koesterlab/yte")
43482 (synopsis "YAML template engine with Python expressions")
43483 (description
43484 "This package provides a YAML template engine with Python expressions.")
43485 (license license:expat)))
43486
43487(define-public python-zarr
43488 (package
43489 (name "python-zarr")
43490 (version "3.2.1")
43491 (source
43492 (origin
43493 (method git-fetch)
43494 (uri (git-reference
43495 (url "https://github.com/zarr-developers/zarr-python")
43496 (commit (string-append "v" version))))
43497 (file-name (git-file-name name version))
43498 (sha256
43499 (base32 "1qzbpy6j8mgpr6wb69j8yyjyr95rmagn64v8pcdljjl3969rmjf6"))))
43500 (build-system pyproject-build-system)
43501 (arguments
43502 (list
43503 ;; tests: 5339 passed, 384 skipped, 1 deselected, 7 xfailed
43504 #:test-flags
43505 #~(list "--ignore=tests/benchmarks/"
43506 ;; This test wants uv.
43507 (string-append "--deselect=tests/test_examples.py"
43508 "::test_scripts_can_run[script_path0]"))
43509 #:phases
43510 #~(modify-phases %standard-phases
43511 (add-after 'unpack 'disable-service-tests
43512 (lambda _
43513 (setenv "ZARR_TEST_ABS" "0")
43514 (setenv "ZARR_TEST_MONGO" "0")
43515 (setenv "ZARR_TEST_REDIS" "0"))))))
43516 (native-inputs
43517 (list python-hatch-vcs
43518 python-hatchling
43519 python-numpydoc ;tests/test_api/test_synchronous.py
43520 python-pytest
43521 python-pytest-asyncio
43522 python-pytest-benchmark
43523 python-tomlkit))
43524 (propagated-inputs
43525 (list python-donfig
43526 python-google-crc32c
43527 python-numcodecs
43528 python-numpy
43529 python-packaging
43530 python-typing-extensions))
43531 (home-page "https://github.com/zarr-developers/zarr-python")
43532 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43533 (description
43534 "This package provides an implementation of chunked, compressed,
43535N-dimensional arrays for Python.")
43536 (license license:expat)))
43537
43538(define-public python-zeroc-ice
43539 (package
43540 (name "python-zeroc-ice")
43541 (version "3.7.10.1")
43542 (source (origin
43543 (method url-fetch)
43544 (uri (pypi-uri "zeroc-ice" version))
43545 (sha256
43546 (base32
43547 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43548 (build-system pyproject-build-system)
43549 (arguments
43550 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43551 ;; tag.
43552 ;;
43553 ;; See:
43554 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43555 ;; - File: <ice/refs/heads/main/python/allTests.py>
43556 (list #:tests? #f))
43557 (inputs (list openssl))
43558 (native-inputs (list python-setuptools))
43559 (home-page "https://zeroc.com")
43560 (synopsis "RPC framework")
43561 (description
43562 "Ice is a comprehensive RPC framework. Ice helps you network your
43563software by taking care of all interactions with low-level network programming
43564interfaces.")
43565 (license license:gpl2)))
43566
43567;; Package variant to build [email protected]
43568(define-public python-zeroc-ice-3.6
43569 (package
43570 (inherit python-zeroc-ice)
43571 (version "3.6.5")
43572 (source (origin
43573 (method url-fetch)
43574 (uri (pypi-uri "zeroc-ice" version))
43575 (sha256
43576 (base32
43577 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43578 (patches
43579 (search-patches
43580 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43581 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43582 (arguments
43583 (substitute-keyword-arguments arguments
43584 ((#:phases phases #~%standard-phases)
43585 #~(modify-phases #$phases
43586 (add-before 'build 'relax-gcc-14-strictness
43587 (lambda _
43588 (setenv "CFLAGS"
43589 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43590
43591(define-public python-zeroconf
43592 (package
43593 (name "python-zeroconf")
43594 (version "0.38.1")
43595 (source
43596 (origin
43597 (method git-fetch)
43598 (uri (git-reference
43599 (url "https://github.com/jstasiak/python-zeroconf")
43600 (commit version)))
43601 (file-name (git-file-name name version))
43602 (sha256
43603 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43604 (build-system pyproject-build-system)
43605 (arguments
43606 (list
43607 #:test-flags
43608 #~(list
43609 "-k" (string-append
43610 ;; XXX: Despite asyncio, this test fails.
43611 "not test_run_coro_with_timeout and not "
43612 ;; XXX: Networking isn't available.
43613 (string-join
43614 (list "test_integration_with_listener_ipv6"
43615 "test_launch_and_close_v4_v6"
43616 "test_launch_and_close_context_manager"
43617 "test_launch_and_close"
43618 "test_close_multiple_times")
43619 " and not ")))))
43620 (native-inputs
43621 (list python-pytest python-pytest-asyncio python-setuptools))
43622 (propagated-inputs
43623 (list python-ifaddr))
43624 (home-page "https://github.com/jstasiak/python-zeroconf")
43625 (synopsis "Pure Python mDNS service discovery")
43626 (description "Pure Python multicast DNS (mDNS) service discovery library
43627(Bonjour/Avahi compatible).")
43628 (license license:lgpl2.1+)))
43629
43630(define-public python-zict
43631 (package
43632 (name "python-zict")
43633 (version "3.0.0")
43634 (source
43635 (origin
43636 (method url-fetch)
43637 (uri (pypi-uri "zict" version))
43638 (sha256
43639 (base32
43640 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43641 (build-system pyproject-build-system)
43642 (arguments
43643 (list
43644 #:test-flags
43645 ;; This uses "importorskip", but it won't skip.
43646 '(list "--ignore=tests/test_lmdb.py")))
43647 (propagated-inputs
43648 (list python-heapdict))
43649 (native-inputs
43650 (list python-pytest
43651 python-pytest-asyncio
43652 python-pytest-repeat
43653 python-pytest-timeout
43654 python-setuptools
43655 python-wheel))
43656 (home-page "https://zict.readthedocs.io/en/latest/")
43657 (synopsis "Composable mutable mapping tools")
43658 (description "This package provides abstract @code{MutableMapping} classes
43659that consume and build on other @code{MutableMappings}. Several of these can
43660be composed with one another to form intuitive interfaces over complex storage
43661systems policies.")
43662 (license license:bsd-3)))
43663
43664(define-public python-zipfly
43665 (package
43666 (name "python-zipfly")
43667 (version "6.0.5")
43668 (source
43669 (origin
43670 (method url-fetch)
43671 (uri (pypi-uri "zipfly" version))
43672 (sha256
43673 (base32
43674 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43675 (build-system pyproject-build-system)
43676 (arguments
43677 (list #:test-backend #~'unittest))
43678 (native-inputs (list python-setuptools))
43679 (home-page "https://github.com/sandes/zipfly")
43680 (synopsis "Zip archive generator")
43681 (description "ZipFly is a zip archive generator. It was created to
43682generate very large zip archives for immediate sending out to clients, or
43683for writing large zip archives without memory inflation.")
43684 (license license:expat)))
43685
43686(define-public python-zipstream-new
43687 (package
43688 (name "python-zipstream-new")
43689 (version "1.1.8")
43690 (source
43691 (origin
43692 (method git-fetch) ; no tests in PyPI release
43693 (uri (git-reference
43694 (url "https://github.com/arjan-s/python-zipstream")
43695 (commit (string-append "v" version))))
43696 (file-name (git-file-name name version))
43697 (sha256
43698 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43699 (build-system pyproject-build-system)
43700 (arguments
43701 (list #:test-backend #~'unittest))
43702 (native-inputs (list python-setuptools))
43703 (home-page "https://github.com/arjan-s/python-zipstream")
43704 (synopsis "Zipfile generator that takes input files as well as streams")
43705 (description "@code{zipstream.py} is a zip archive generator based on
43706@code{zipfile.py}. It was created to generate a zip file generator for
43707streaming. This is beneficial for when you want to provide a downloadable
43708archive of a large collection of regular files, which would be infeasible
43709to generate the archive prior to downloading or of a very large file that
43710you do not want to store entirely on disk or on memory.")
43711 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43712 (license license:gpl3)))
43713
43714(define-public shrinkwrap
43715 (package
43716 (name "shrinkwrap")
43717 (version "0.1.0")
43718 (source
43719 (origin
43720 (method git-fetch)
43721 (uri (git-reference
43722 (url "https://github.com/fzakaria/shrinkwrap")
43723 (commit (string-append "v" version))))
43724 (file-name (git-file-name name version))
43725 (sha256
43726 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43727 (build-system pyproject-build-system)
43728 (native-inputs
43729 (list python-click
43730 python-poetry-core
43731 python-pypa-build
43732 python-pytest))
43733 (inputs (list python-lief python-sh))
43734 (home-page "https://github.com/fzakaria/shrinkwrap")
43735 (synopsis "Emboss needed dependencies on the top level executable")
43736 (description
43737 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43738shared objects, and lift them up to the executable referenced by absolute
43739path.")
43740 (license license:expat)))
43741
43742(define-public staticsite
43743 (package
43744 (name "staticsite")
43745 (version "2.5")
43746 (source
43747 (origin
43748 (method git-fetch)
43749 (uri (git-reference
43750 (url "https://github.com/spanezz/staticsite")
43751 (commit (string-append "v" version))))
43752 (file-name (git-file-name name version))
43753 (sha256
43754 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43755 (build-system pyproject-build-system)
43756 (arguments
43757 (list
43758 #:phases
43759 #~(modify-phases %standard-phases
43760 (add-after 'unpack 'use-themes-in-output
43761 (lambda _
43762 (substitute* "staticsite/global_settings.py"
43763 (("/usr/share/staticsite") #$output))))
43764 (add-after 'install 'install-themes
43765 (lambda _
43766 (let ((themedir (string-append #$output "/themes")))
43767 (copy-recursively "themes" themedir)))))))
43768 (native-inputs
43769 (list python-hatchling
43770 python-pytest))
43771 (inputs
43772 (list perl-image-exiftool
43773 python-dateutil
43774 python-docutils
43775 python-jinja2
43776 python-markdown
43777 python-pillow
43778 python-pytz
43779 python-pyyaml
43780 python-ruamel.yaml
43781 python-slugify
43782 python-toml
43783 tzdata-for-tests))
43784 (home-page "https://github.com/spanezz/staticsite")
43785 (synopsis "Static site generator")
43786 (description
43787 "Statistic is a static site generator based on Markdown and Jinja2.")
43788 (license (list license:gpl3+ license:expat))))
43789
43790;;;
43791;;; Avoid adding new packages to the end of this file. To reduce the chances
43792;;; of a merge conflict, place them above in alphabetic order:
43793;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43794;;;