projects/guix·blob javascript-team · refs

43888 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;;; Copyright © 2026 Mattia Bunel <[email protected]>
191;;;
192;;; This file is part of GNU Guix.
193;;;
194;;; GNU Guix is free software; you can redistribute it and/or modify it
195;;; under the terms of the GNU General Public License as published by
196;;; the Free Software Foundation; either version 3 of the License, or (at
197;;; your option) any later version.
198;;;
199;;; GNU Guix is distributed in the hope that it will be useful, but
200;;; WITHOUT ANY WARRANTY; without even the implied warranty of
201;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
202;;; GNU General Public License for more details.
203;;;
204;;; You should have received a copy of the GNU General Public License
205;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
206
207(define-module (gnu packages python-xyz)
208 #:use-module (gnu packages algebra)
209 #:use-module (gnu packages attr)
210 #:use-module (gnu packages autotools)
211 #:use-module (gnu packages backup)
212 #:use-module (gnu packages base)
213 #:use-module (gnu packages bash)
214 #:use-module (gnu packages bdw-gc)
215 #:use-module (gnu packages bioinformatics)
216 #:use-module (gnu packages boost)
217 #:use-module (gnu packages build-tools)
218 #:use-module (gnu packages c)
219 #:use-module (gnu packages check)
220 #:use-module (gnu packages cmake)
221 #:use-module (gnu packages compression)
222 #:use-module (gnu packages cpp)
223 #:use-module (gnu packages crypto)
224 #:use-module (gnu packages databases)
225 #:use-module (gnu packages dbm)
226 #:use-module (gnu packages dictionaries)
227 #:use-module (gnu packages digest)
228 #:use-module (gnu packages django)
229 #:use-module (gnu packages djvu)
230 #:use-module (gnu packages dns)
231 #:use-module (gnu packages documentation)
232 #:use-module (gnu packages duckdb)
233 #:use-module (gnu packages elf)
234 #:use-module (gnu packages emulators)
235 #:use-module (gnu packages enchant)
236 #:use-module (gnu packages file)
237 #:use-module (gnu packages fonts)
238 #:use-module (gnu packages fontutils)
239 #:use-module (gnu packages freedesktop)
240 #:use-module (gnu packages gcc)
241 #:use-module (gnu packages gdb)
242 #:use-module (gnu packages geo)
243 #:use-module (gnu packages ghostscript)
244 #:use-module (gnu packages glib)
245 #:use-module (gnu packages gnome)
246 #:use-module (gnu packages gnupg)
247 #:use-module (gnu packages graphviz)
248 #:use-module (gnu packages gsasl)
249 #:use-module (gnu packages gtk)
250 #:use-module (gnu packages guile-xyz)
251 #:use-module (gnu packages haskell-xyz)
252 #:use-module (gnu packages icu4c)
253 #:use-module (gnu packages image)
254 #:use-module (gnu packages image-processing)
255 #:use-module (gnu packages imagemagick)
256 #:use-module (gnu packages inkscape)
257 #:use-module (gnu packages iso-codes)
258 #:use-module (gnu packages java)
259 #:use-module (gnu packages javascript)
260 #:use-module (gnu packages jupyter)
261 #:use-module (gnu packages kerberos)
262 #:use-module (gnu packages less)
263 #:use-module (gnu packages libevent)
264 #:use-module (gnu packages libffi)
265 #:use-module (gnu packages libusb)
266 #:use-module (gnu packages linux)
267 #:use-module (gnu packages llvm)
268 #:use-module (gnu packages machine-learning)
269 #:use-module (gnu packages man)
270 #:use-module (gnu packages markup)
271 #:use-module (gnu packages maths)
272 #:use-module (gnu packages messaging)
273 #:use-module (gnu packages monitoring)
274 #:use-module (gnu packages mpi)
275 #:use-module (gnu packages multiprecision)
276 #:use-module (gnu packages ncurses)
277 #:use-module (gnu packages networking)
278 #:use-module (gnu packages node)
279 #:use-module (gnu packages node-xyz)
280 #:use-module (gnu packages nss)
281 #:use-module (gnu packages openstack)
282 #:use-module (gnu packages pcre)
283 #:use-module (gnu packages pdf)
284 #:use-module (gnu packages perl)
285 #:use-module (gnu packages photo)
286 #:use-module (gnu packages pkg-config)
287 #:use-module (gnu packages protobuf)
288 #:use-module (gnu packages python)
289 #:use-module (gnu packages python-build)
290 #:use-module (gnu packages python-check)
291 #:use-module (gnu packages python-compression)
292 #:use-module (gnu packages python-crypto)
293 #:use-module (gnu packages python-science)
294 #:use-module (gnu packages python-web)
295 #:use-module (gnu packages qt)
296 #:use-module (gnu packages rdf)
297 #:use-module (gnu packages readline)
298 #:use-module (gnu packages regex)
299 #:use-module (gnu packages rpc)
300 #:use-module (gnu packages rust)
301 #:use-module (gnu packages scanner)
302 #:use-module (gnu packages search)
303 #:use-module (gnu packages serialization)
304 #:use-module (gnu packages shells)
305 #:use-module (gnu packages specifications)
306 #:use-module (gnu packages sphinx)
307 #:use-module (gnu packages ssh)
308 #:use-module (gnu packages statistics)
309 #:use-module (gnu packages task-management)
310 #:use-module (gnu packages tcl)
311 #:use-module (gnu packages tex)
312 #:use-module (gnu packages texinfo)
313 #:use-module (gnu packages time)
314 #:use-module (gnu packages tls)
315 #:use-module (gnu packages tree-sitter)
316 #:use-module (gnu packages valgrind)
317 #:use-module (gnu packages version-control)
318 #:use-module (gnu packages video)
319 #:use-module (gnu packages web)
320 #:use-module (gnu packages wxwidgets)
321 #:use-module (gnu packages xdisorg)
322 #:use-module (gnu packages xml)
323 #:use-module (gnu packages xorg)
324 #:use-module (gnu packages)
325 #:use-module (guix build-system cargo)
326 #:use-module (guix build-system cmake)
327 #:use-module (guix build-system copy)
328 #:use-module (guix build-system gnu)
329 #:use-module (guix build-system meson)
330 #:use-module (guix build-system pyproject)
331 #:use-module (guix deprecation)
332 #:use-module (guix download)
333 #:use-module (guix gexp)
334 #:use-module (guix git-download)
335 #:use-module (guix hg-download)
336 #:use-module ((guix licenses) #:prefix license:)
337 #:use-module (guix packages)
338 #:use-module (guix utils)
339 #:use-module (ice-9 match)
340 #:use-module (srfi srfi-1)
341 #:use-module (srfi srfi-26))
342
343(define-public python-aenum
344 (package
345 (name "python-aenum")
346 (version "3.1.17")
347 (source
348 (origin
349 (method git-fetch)
350 (uri (git-reference
351 (url "https://github.com/ethanfurman/aenum")
352 (commit version)))
353 (file-name (git-file-name name version))
354 (sha256
355 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
356 (build-system pyproject-build-system)
357 (arguments
358 (list
359 #:phases
360 #~(modify-phases %standard-phases
361 (add-after 'unpack 'fix
362 (lambda _
363 (substitute* "aenum/_py2.py"
364 (("raise exc.*")
365 "raise exc.with_traceback(tb)")))))
366 #:tests? #f)) ;no tests
367 (native-inputs (list python-setuptools))
368 (home-page "https://github.com/ethanfurman/aenum")
369 (synopsis
370 "Support for advanced enumerations, namedtuples and namedconstants")
371 (description
372 "AEnum is a set of symbolic names (members) bound to unique, constant
373values. Within an enumeration, the members can be compared by identity, and
374the enumeration itself can be iterated over. There is built-in support for
375unique values, multiple values, auto-numbering, and suspension of aliasing
376(members with the same value are not identical), plus the ability to have
377values automatically bound to attributes.")
378 (license license:bsd-3)))
379
380(define-public python-accumulation-tree
381 ;; Only minor releases (0.x) are tagged, not patch versions.
382 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
383 (revision "0"))
384 (package
385 (name "python-accumulation-tree")
386 (version (git-version "0.6.4" revision commit))
387 (source
388 (origin
389 (method git-fetch)
390 (uri (git-reference
391 (url "https://github.com/tkluck/accumulation_tree")
392 (commit commit)))
393 (file-name (git-file-name name version))
394 (sha256
395 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
396 (modules '((guix build utils)))
397 (snippet ;use src layout for isolated tests
398 #~(let* ((src "src/")
399 (old "accumulation_tree/")
400 (new (string-append src old)))
401 (mkdir src)
402 (rename-file old new)
403 (substitute* "setup.py"
404 (("packages=" all)
405 (string-append "package_dir={'': '" src "'}, " all))
406 ((old)
407 new))))))
408 (build-system pyproject-build-system)
409 (arguments
410 (list #:test-backend #~'custom
411 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
412 (native-inputs (list python-cloudpickle python-cython python-setuptools))
413 (home-page "https://github.com/tkluck/accumulation_tree")
414 (synopsis "Red-black tree with fast value accumulation in a key range")
415 (description
416 "This Python package implements a red-black tree which also stores
417partial aggregations at each node, making getting aggregations
418of key range slices an O(log(N)) operation.
419
420This data structure is very similar to a binary indexed tree,
421with heap allocation instead of a flat array to represent a tree.")
422 (license license:expat))))
423
424(define-public python-anaconda-cli-base
425 (package
426 (name "python-anaconda-cli-base")
427 (version "0.8.2")
428 (source
429 (origin
430 (method git-fetch)
431 (uri (git-reference
432 (url "https://github.com/anaconda/anaconda-cli-base")
433 (commit (string-append "v" version))))
434 (file-name (git-file-name name version))
435 (sha256
436 (base32 "1vsbxcgn05d7mlwl17f0bfq25lydl7i8n4x0a95hmjdl45n1q9wx"))))
437 (build-system pyproject-build-system)
438 (arguments
439 (list
440 #:test-flags
441 #~(list "--deselect=tests/test_cli.py::test_cli_version"
442 "--deselect=tests/test_cli.py::test_load_plugin")))
443 (native-inputs
444 (list python-hatch-vcs
445 python-hatchling
446 python-pytest
447 python-pytest-mock
448 python-setuptools-scm
449 python-types-requests))
450 (propagated-inputs
451 (list python-click
452 python-packaging
453 python-pydantic
454 python-pydantic-settings
455 python-readchar
456 python-rich
457 python-tomli
458 python-tomlkit
459 python-typer))
460 (home-page "https://anaconda.github.io/anaconda-cli-base/")
461 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
462 (description
463 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
464 (license license:bsd-3)))
465
466(define-public python-annexremote
467 (package
468 (name "python-annexremote")
469 (version "1.6.6")
470 (source
471 (origin
472 (method git-fetch)
473 (uri (git-reference
474 (url "https://github.com/Lykos153/AnnexRemote")
475 (commit (string-append "v" version))))
476 (file-name (git-file-name name version))
477 (sha256
478 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
479 (build-system pyproject-build-system)
480 (native-inputs
481 (list python-pytest
482 python-setuptools
483 python-setuptools-scm))
484 (home-page "https://github.com/Lykos153/AnnexRemote")
485 (synopsis "Helper module to easily develop git-annex special remotes")
486 (description
487 "This package provides a helper module to develop special remotes for
488git-annex. AnnexRemote implements the line-based external special remote
489protocol of git-annex, while leaving the behavior of the remote up to the
490user.")
491 (license license:gpl3)))
492
493(define-public python-annotated-doc
494 (package
495 (name "python-annotated-doc")
496 (version "0.0.4")
497 (source
498 (origin
499 (method git-fetch)
500 (uri (git-reference
501 (url "https://github.com/fastapi/annotated-doc")
502 (commit version)))
503 (file-name (git-file-name name version))
504 (sha256
505 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
506 (build-system pyproject-build-system)
507 (native-inputs
508 (list python-pytest
509 python-pdm-backend))
510 (home-page "https://github.com/fastapi/annotated-doc")
511 (synopsis "Annotated for some Python objects")
512 (description
513 "This package implements a functionality for document parameters, class
514attributes, return types, and variables inline, with
515Annotated.")
516 (license license:expat)))
517
518(define-public python-archspec
519 (package
520 (name "python-archspec")
521 (version "0.2.5")
522 (source
523 (origin
524 (method git-fetch)
525 (uri (git-reference
526 (url "https://github.com/archspec/archspec")
527 (commit (string-append "v" version))
528 (recursive? #t)))
529 (file-name (git-file-name name version))
530 (sha256
531 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
532 (build-system pyproject-build-system)
533 (native-inputs
534 (list python-jsonschema
535 python-poetry-core
536 python-pytest))
537 (home-page "https://github.com/archspec/archspec")
538 (synopsis "Library to query system architecture")
539 (description
540 "Archspec offers human-readable labels for system architecture aspects.
541These aspects include CPU, network fabrics, etc. In addition, it offers
542APIs to detect, query, and compare them.")
543 (license license:expat)))
544
545(define-public python-astar
546 ;; The Git repository has no tag.
547 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
548 (revision "0"))
549 (package
550 (name "python-astar")
551 (version (git-version "0.99" revision commit))
552 (source
553 (origin
554 (method git-fetch)
555 (uri (git-reference
556 (url "https://github.com/jrialland/python-astar")
557 (commit commit)))
558 (file-name (git-file-name name version))
559 (sha256
560 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
561 (build-system pyproject-build-system)
562 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
563 ;; the test suite has been written for unittest.
564 (native-inputs (list python-poetry-core))
565 (home-page "https://github.com/jrialland/python-astar")
566 (synopsis "Implementation of the A* search algorithm")
567 (description
568 "The @code{astar} Python package provide a generic implementation
569of the A* graph traversal and pathfinding algorithm.")
570 (license license:bsd-3))))
571
572(define-public python-asyncclick
573 (package
574 (name "python-asyncclick")
575 (version "8.3.0.3")
576 (source
577 (origin
578 (method url-fetch)
579 (uri (pypi-uri "asyncclick" version))
580 (sha256
581 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
582 (build-system pyproject-build-system)
583 ;; tests: 1418 passed, 21 skipped, 1 xfailed
584 (native-inputs
585 (list less
586 python-flit-core
587 python-pytest
588 python-trio))
589 (propagated-inputs
590 (list python-anyio))
591 (home-page "https://github.com/python-trio/asyncclick")
592 (synopsis "Python composable command line utility, trio-compatible version ")
593 (description
594 "AsyncClick is a fork of Click that works well with anyio, Trio, or
595asyncio.")
596 (license license:bsd-3)))
597
598(define-public python-asyncstdlib
599 (package
600 (name "python-asyncstdlib")
601 (version "3.13.0")
602 (source
603 (origin
604 (method url-fetch)
605 (uri (pypi-uri "asyncstdlib" version))
606 (sha256
607 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
608 (build-system pyproject-build-system)
609 (native-inputs (list python-flit-core python-pytest))
610 (home-page "https://asyncstdlib.readthedocs.io")
611 (synopsis "Compatibility layer between the Python stdlib and @code{async}
612callables")
613 (description
614 "The @code{asyncstdlib} library re-implements functions and classes of
615the Python standard library to make them compatible with @code{async}
616callables, iterables and context managers. It is fully agnostic to
617@code{async} event loops and seamlessly works with @code{asyncio}, third-party
618libraries such as @code{trio}, as well as any custom @code{async} event
619loop.")
620 (license license:expat)))
621
622(define-public python-awesomeversion
623 (package
624 (name "python-awesomeversion")
625 (version "24.6.0")
626 (source
627 (origin
628 (method git-fetch)
629 (uri (git-reference
630 (url "https://github.com/ludeeus/awesomeversion")
631 (commit version)))
632 (file-name (git-file-name name version))
633 (sha256
634 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
635 (modules '((guix build utils)))
636 (snippet #~(substitute* "pyproject.toml"
637 (("version = \"0\"")
638 (format #f "version = \"~a\"" #$version))))))
639 (build-system pyproject-build-system)
640 (native-inputs
641 (list python-poetry-core
642 python-pytest
643 python-pytest-snapshot))
644 (home-page "https://github.com/ludeeus/awesomeversion")
645 (synopsis "Create and compare version objects")
646 (description
647 "This package provides a way to make anything a version object, and
648compare against a vast section of other version formats.")
649 (license license:expat)))
650
651(define-public python-awkward-cpp
652 (package
653 (name "python-awkward-cpp")
654 ;; TODO: any higher versions need pybind11 >= 3, see:
655 ;; <https://codeberg.org/guix/guix/pulls/4696>.
656 (version "47")
657 (source
658 (origin
659 (method url-fetch)
660 (uri (pypi-uri "awkward_cpp" version))
661 (sha256
662 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
663 (build-system pyproject-build-system)
664 ;; tests: 22304 passed, 524 skipped
665 (native-inputs
666 (list cmake-minimal
667 pybind11-2
668 python-pytest
669 python-scikit-build-core))
670 (propagated-inputs
671 (list python-numpy))
672 (home-page "https://awkward-array.org/")
673 (synopsis "CPU kernels and compiled extensions for Awkward Array")
674 (description "Awkward CPP provides precompiled routines for the awkward
675package. It is not useful on its own, only as a dependency for awkward.")
676 (license license:bsd-3)))
677
678(define-public python-awkward
679 (package
680 (name "python-awkward")
681 (version "2.8.5")
682 (source
683 (origin
684 (method url-fetch)
685 (uri (pypi-uri "awkward" version))
686 (sha256
687 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
688 (build-system pyproject-build-system)
689 (arguments
690 (list
691 ;; tests: 2798 passed, 156 skipped
692 #:test-flags
693 ;; CUDA is and requires proprietary software.
694 #~(list "--ignore=tests-cuda-kernels/"
695 "--ignore=tests-cuda/")))
696 (native-inputs
697 (list python-hatch-fancy-pypi-readme
698 python-hatchling
699 python-pytest))
700 (propagated-inputs
701 (list python-awkward-cpp
702 python-fsspec
703 python-importlib-metadata
704 python-numpy
705 python-packaging))
706 (home-page "https://awkward-array.org/")
707 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
708 (description "Awkward Array is a library for nested, variable-sized data,
709including arbitrary-length lists, records, mixed types, and missing data,
710using NumPy-like idioms.")
711 (license license:bsd-3)))
712
713(define-public python-bracex
714 (package
715 (name "python-bracex")
716 (version "2.6")
717 (source
718 (origin
719 (method git-fetch)
720 (uri (git-reference
721 (url "https://github.com/facelessuser/bracex")
722 (commit version)))
723 (file-name (git-file-name name version))
724 (sha256
725 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
726 (build-system pyproject-build-system)
727 (native-inputs
728 (list python-hatchling
729 python-pytest))
730 (home-page "https://facelessuser.github.io/bracex/")
731 (synopsis "Bash-style brace expansion for Python")
732 (description
733 "Bracex is a brace expansion library for Python that implements
734Bash-style brace expansion. It can generate strings from patterns like
735@code{@{a,b,c@}} or @code{@{1..10@}}.")
736 (license license:expat)))
737
738(define-public python-bresenham
739 (package
740 (name "python-bresenham")
741 (version "0.2.1")
742 (source
743 (origin
744 (method git-fetch)
745 (uri (git-reference
746 (url "https://github.com/encukou/bresenham")
747 (commit (string-append "v" version))))
748 (file-name (git-file-name name version))
749 (sha256
750 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
751 (build-system pyproject-build-system)
752 (native-inputs
753 (list python-pytest
754 python-setuptools
755 python-wheel))
756 (home-page "https://github.com/encukou/bresenham")
757 (synopsis "Implementation of Bresenham's line drawing algorithm")
758 (description
759 "This package provides a Python implementation of
760@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
761line drawing algorithm}.")
762 (license license:expat)))
763
764(define-public python-cachey
765 (package
766 (name "python-cachey")
767 (version "0.2.1")
768 (source
769 (origin
770 (method git-fetch)
771 (uri (git-reference
772 (url "https://github.com/dask/cachey/")
773 (commit version)))
774 (file-name (git-file-name name version))
775 (sha256
776 (base32 "12rkn4cvdwlpjhlmyxi1glvn1nzlx147xs96h9k6pbgbwyxaci75"))))
777 (build-system pyproject-build-system)
778 (native-inputs
779 (list python-pytest
780 python-setuptools))
781 (propagated-inputs
782 (list python-heapdict))
783 (home-page "https://github.com/dask/cachey/")
784 (synopsis "Caching based on computation time and storage space")
785 (description
786 "This package provides a Python module for caching mindful of
787computation/storage costs.")
788 (license license:bsd-3)))
789
790(define-public python-catalogus
791 (package
792 (name "python-catalogus")
793 (version "0.1.0")
794 (source
795 (origin
796 (method git-fetch)
797 (uri (git-reference
798 (url "https://github.com/breezy-team/catalogus")
799 (commit (string-append "v" version))))
800 (file-name (git-file-name name version))
801 (sha256
802 (base32 "0l34anf0h4rcsimq78q6y1s2m91605pxwpzfzxr2vh2hl45sy4w5"))))
803 (build-system pyproject-build-system)
804 (native-inputs
805 (list python-pytest
806 python-setuptools
807 python-setuptools-scm))
808 (home-page "https://github.com/breezy-team/catalogus")
809 (synopsis "Classes to provide name-to-object registry-like support")
810 (description
811 "This package provides classes to provide name-to-object registry-like
812support.")
813 (license license:gpl2+)))
814
815(define-public python-catppuccin
816 (package
817 (name "python-catppuccin")
818 (version "2.5.0")
819 (source
820 (origin
821 (method url-fetch)
822 (uri (pypi-uri "catppuccin" version))
823 (sha256
824 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
825 (build-system pyproject-build-system)
826 (native-inputs
827 (list python-hatchling python-pytest
828 ;; These are optional dependencies but required for tests.
829 python-matplotlib python-pygments python-rich))
830 (home-page "https://github.com/catppuccin/python")
831 (synopsis "Pastel palette for Python libraries")
832 (description "Catppuccin for Python is a soothing pastel palette for Python
833libraries. It aims to be the middle ground between low and high contrast
834themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
835 (license license:expat)))
836
837(define-public python-calmjs-parse
838 (package
839 (name "python-calmjs-parse")
840 (version "1.3.3")
841 (source
842 (origin
843 (method git-fetch)
844 (uri (git-reference
845 (url "https://github.com/calmjs/calmjs.parse/")
846 (commit version)))
847 (file-name (git-file-name name version))
848 (sha256
849 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
850 (build-system pyproject-build-system)
851 ;; tests: 797 passed, 1 warning
852 (native-inputs (list python-pytest python-setuptools))
853 (propagated-inputs (list python-ply))
854 (home-page "https://github.com/calmjs/calmjs.parse/")
855 (synopsis "Parsers for ECMA standards")
856 (description
857 "@code{Calmjs-parse} is a collection of helper libraries for
858understanding ECMA script.")
859 (license license:expat)))
860
861(define-public python-chameleon
862 (package
863 (name "python-chameleon")
864 (version "4.6.0")
865 (source
866 (origin
867 (method url-fetch)
868 (uri (pypi-uri "Chameleon" version))
869 (sha256
870 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
871 (build-system pyproject-build-system)
872 (native-inputs
873 (list python-pytest
874 python-setuptools))
875 (home-page "https://chameleon.readthedocs.io")
876 (synopsis "Fast HTML/XML Template Compiler")
877 (description
878 "Chameleon is an HTML/XML template engine for Python. It uses the page
879templates language.")
880 ;; Project is duo licensed, see: LICENSE.txt.
881 (license (list license:zpl2.1
882 license:psfl))))
883
884(define-public python-click-extra
885 (package
886 (name "python-click-extra")
887 (version "8.8.1")
888 (source
889 (origin
890 (method git-fetch)
891 (uri (git-reference
892 (url "https://github.com/kdeldycke/click-extra")
893 (commit (string-append "v" version))))
894 (file-name (git-file-name name version))
895 (sha256
896 (base32 "0i22as7f22qhnp69c7zwdh7k4pzl45ywa0hdj71j0n07lqdmdqc7"))))
897 (build-system pyproject-build-system)
898 (arguments
899 (list
900 ;; Upstream uses uv-build which is not yet available in Guix.
901 #:build-backend "setuptools.build_meta"
902 ;; tets: 3659 passed, 509 skipped, 4 deselected, 4 xfailed, 1267 warnings
903 #:test-flags
904 ;; Skip the network tests.
905 #~(list "-m" "not network"
906 ;; Prevent adding python-sphinx into scope.
907 (string-append "--deselect=tests/test_blocks.py"
908 "::test_blocks_reexported_from_sphinx_package"))))
909 (native-inputs
910 ;; Optional libraries imported at module level by the test suite.
911 (list python-hjson
912 python-jsonschema
913 python-pygments
914 python-pytest
915 python-pytest-httpserver
916 python-pyyaml
917 python-requests
918 python-setuptools
919 python-tomlkit
920 python-xmltodict))
921 (propagated-inputs
922 (list python-boltons
923 python-click
924 python-cloup
925 python-deepmerge
926 python-extra-platforms
927 python-tabulate
928 python-wcmatch
929 python-wcwidth))
930 (home-page "https://kdeldycke.github.io/click-extra/")
931 (synopsis "Drop-in replacement for Click to build colorful CLIs")
932 (description
933 "Click Extra extends the Click framework with colored help screens,
934configuration file support, table rendering, and platform detection. It
935serves as a drop-in replacement adding features for user-friendly command-line
936interfaces.")
937 (license license:gpl2+)))
938
939(define-public python-comrak
940 (package
941 (name "python-comrak")
942 (version "0.0.16")
943 (source
944 (origin
945 (method url-fetch)
946 (uri (pypi-uri "comrak" version))
947 (sha256
948 (base32 "1nzr1d957vac16kvy4si3hykx5cbcm73vpy94nm74rf66hgpx8m3"))))
949 (build-system pyproject-build-system)
950 (arguments
951 (list
952 #:imported-modules (append %cargo-build-system-modules
953 %pyproject-build-system-modules)
954 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
955 (guix build pyproject-build-system)
956 (guix build utils))
957 #:phases
958 #~(modify-phases %standard-phases
959 (add-after 'unpack 'prepare-cargo-build-system
960 (lambda args
961 (for-each (lambda (phase)
962 (format #t "Running cargo phase: ~a~%" phase)
963 (apply (assoc-ref cargo:%standard-phases phase)
964 #:cargo-target #$(cargo-triplet)
965 args))
966 '(prepare-rust-crates
967 unpack-rust-crates
968 configure
969 check-for-pregenerated-files
970 patch-cargo-checksums)))))))
971 (native-inputs
972 (append
973 (list maturin
974 python-pytest
975 rust
976 `(,rust "cargo"))
977 (or (and=> (%current-target-system)
978 (compose list make-rust-sysroot))
979 '())))
980 (inputs (cargo-inputs 'python-comrak))
981 (home-page "https://github.com/lmmx/comrak")
982 (synopsis "Python bindings for the Comrak Rust library")
983 (description
984 "This package provides Python bindings for the Comrak Rust library, a
985fast @code{CommonMark/GFM} parser.")
986 (license license:expat)))
987
988(define-public python-conda-content-trust
989 (package
990 (name "python-conda-content-trust")
991 (version "0.2.0")
992 (source
993 (origin
994 (method git-fetch)
995 (uri (git-reference
996 (url "https://github.com/conda/conda-content-trust")
997 (commit version)))
998 (file-name (git-file-name name version))
999 (sha256
1000 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
1001 (build-system pyproject-build-system)
1002 (arguments
1003 (list
1004 #:test-flags
1005 ;; XXX: Not packaged yet:
1006 ;; <https://github.com/secure-systems-lab/securesystemslib>.
1007 ;;
1008 ;; ImportError: The securesystemslib library is required, which appears
1009 ;; to be unavailable.
1010 #~(list #$@(map (lambda (test) (string-append "--deselect="
1011 "tests/test_root.py::"
1012 test))
1013 (list "test_sign_root_metadata_dict_via_gpg"
1014 "test_sign_root_metadata_via_gpg"
1015 "test_gpg_pubkey_in_ssl_format")))))
1016 (native-inputs
1017 (list python-hatch-vcs
1018 python-hatchling
1019 python-pytest))
1020 (propagated-inputs
1021 (list python-cryptography))
1022 (home-page "https://github.com/conda/conda-content-trust")
1023 (synopsis "Signing and verification tools for Conda")
1024 (description
1025 "This package implements a functionalit of signing and verification tools
1026for Conda. @url{https://theupdateframework.io/, Based on The Update
1027Framework (TUF)}, conda-content-trust is intended to ensure that when users in
1028the conda ecosystem obtain a package or data about that package, they can know
1029whether or not it is trustworthy (e.g. originally comes from a reliable source
1030and has not been tampered with). A basic library and basic CLI are included
1031to provide signing, verification, and trust delegation functionality.")
1032 (license license:bsd-3)))
1033
1034(define-public python-conda-inject
1035 (package
1036 (name "python-conda-inject")
1037 (version "1.3.2")
1038 (source
1039 (origin
1040 (method git-fetch)
1041 (uri (git-reference
1042 (url "https://github.com/koesterlab/conda-inject")
1043 (commit (string-append "v" version))))
1044 (file-name (git-file-name name version))
1045 (sha256
1046 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
1047 (build-system pyproject-build-system)
1048 (arguments
1049 (list #:tests? #f)) ; tests require setting up Conda
1050 (native-inputs
1051 (list python-poetry-core))
1052 (propagated-inputs
1053 (list python-pyyaml))
1054 (home-page "https://github.com/koesterlab/conda-inject")
1055 (synopsis "Inject a conda environment into the current python environment")
1056 (description
1057 "This package provides helper functions for injecting a conda
1058environment into the current python environment (by modifying @code{sys.path},
1059without actually changing the current python environment).")
1060 (license license:expat)))
1061
1062(define-public python-copydetect
1063 (package
1064 (name "python-copydetect")
1065 (version "0.5.0")
1066 (source
1067 (origin
1068 (method git-fetch)
1069 (uri (git-reference
1070 (url "https://github.com/blingenf/copydetect")
1071 (commit version)))
1072 (sha256
1073 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
1074 (build-system pyproject-build-system)
1075 (propagated-inputs (list python-jinja2
1076 python-matplotlib
1077 python-numpy
1078 python-pygments
1079 python-tqdm))
1080 (native-inputs (list python-setuptools
1081 python-pytest
1082 python-wheel))
1083 (home-page "https://github.com/blingenf/copydetect")
1084 (synopsis "Code plagiarism detection tool")
1085 (description "Copydetect is a tool to detect likely instances of plagiarism
1086based on the winnowing algorithm. It takes a list of directories as input and
1087generates an HTML report displaying copied slices as output.")
1088 (license license:expat)))
1089
1090(define-public python-couleur
1091 (package
1092 (name "python-couleur")
1093 (version "0.7.4")
1094 (source
1095 (origin
1096 (method url-fetch)
1097 (uri (pypi-uri "couleur" version))
1098 (sha256
1099 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
1100 (build-system pyproject-build-system)
1101 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1102 (native-inputs
1103 (list python-setuptools
1104 python-wheel))
1105 (home-page "https://github.com/gabrielfalcao/couleur")
1106 (synopsis "ANSI terminal tool for Python")
1107 (description
1108 "This package provides an ANSI terminal tool for Python, colored shell
1109and other handy fancy features.")
1110 (license license:lgpl3+)))
1111
1112(define-public python-crc
1113 (package
1114 (name "python-crc")
1115 (version "7.1.0")
1116 (source
1117 (origin
1118 (method git-fetch)
1119 (uri (git-reference
1120 (url "https://github.com/Nicoretti/crc/")
1121 (commit version)))
1122 (file-name (git-file-name name version))
1123 (sha256
1124 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1125 (build-system pyproject-build-system)
1126 (native-inputs
1127 (list python-poetry-core
1128 python-pytest
1129 python-wheel))
1130 (home-page "https://nicoretti.github.io/crc/")
1131 (synopsis "Pure Python CRC library")
1132 (description
1133 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1134CRC} checksums, using predefined and custom CRC configurations.
1135
1136Configurations:
1137@table @asis
1138@item CRC8
1139 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1140@item CRC16
1141 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1142@item CRC32
1143 CRC32 AUTOSAR BZIP2 POSIX
1144@item CRC64
1145 CRC64
1146@end table")
1147 (license license:bsd-2)))
1148
1149(define-public python-cron-converter
1150 (package
1151 (name "python-cron-converter")
1152 (version "1.3.1")
1153 (source
1154 (origin
1155 (method git-fetch)
1156 (uri (git-reference
1157 (url "https://github.com/Sonic0/cron-converter")
1158 (commit (string-append "v" version))))
1159 (file-name (git-file-name name version))
1160 (sha256
1161 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1162 (build-system pyproject-build-system)
1163 (arguments
1164 (list #:test-backend #~'unittest
1165 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1166 (native-inputs
1167 (list python-dateutil
1168 python-setuptools))
1169 (propagated-inputs
1170 (list python-dateutil))
1171 (home-page "https://github.com/Sonic0/cron-converter")
1172 (synopsis "Cron string parser and scheduler for Python")
1173 (description
1174 "Cron-converter provides a Cron string parser (from string/lists to
1175string/lists) and iteration for the datetime object with a cron like format.")
1176 (license license:expat)))
1177
1178(define-public python-curtsies
1179 (package
1180 (name "python-curtsies")
1181 (version "0.4.3")
1182 (source
1183 (origin
1184 (method url-fetch)
1185 (uri (pypi-uri "curtsies" version))
1186 (sha256
1187 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1188 (build-system pyproject-build-system)
1189 (native-inputs
1190 (list python-pyte
1191 python-pytest
1192 python-setuptools
1193 python-wheel))
1194 (propagated-inputs
1195 (list python-blessed
1196 python-cwcwidth))
1197 (home-page "https://github.com/bpython/curtsies")
1198 (synopsis "Library for curses-like terminal interaction with colored strings")
1199 (description
1200 "Curtsies is a Python library for interacting with the terminal. It
1201features string-like objects which carry formatting information, per-line
1202fullscreen terminal rendering, and keyboard input event reporting.")
1203 (license license:expat)))
1204
1205(define-public python-customtkinter
1206 (package
1207 (name "python-customtkinter")
1208 (version "5.2.2")
1209 (source
1210 (origin
1211 (method git-fetch)
1212 (uri (git-reference
1213 (url "https://github.com/TomSchimansky/CustomTkinter")
1214 (commit (string-append "v" version))))
1215 (file-name (git-file-name name version))
1216 (sha256
1217 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1218 (build-system pyproject-build-system)
1219 (arguments
1220 (list
1221 #:phases
1222 #~(modify-phases %standard-phases
1223 (add-before 'check 'start-xorg-server
1224 (lambda _
1225 (setenv "HOME" "/tmp")
1226 ;; The test suite requires a running X server.
1227 (system "Xvfb :99 -screen 0 1024x768x24 &")
1228 (setenv "DISPLAY" ":99.0")))
1229 (replace 'check
1230 (lambda* (#:key tests? #:allow-other-keys)
1231 (when tests?
1232 (with-directory-excursion "test"
1233 (invoke "python" "unit_tests/test_all.py"))))))))
1234 (propagated-inputs
1235 (list (list python "tk")
1236 python-darkdetect
1237 python-packaging))
1238 (native-inputs
1239 (list python-setuptools
1240 xorg-server-for-tests))
1241 (home-page "https://customtkinter.tomschimansky.com")
1242 (synopsis
1243 "Python @acronym{User Interface, UI} library based on Tkinter")
1244 (description
1245 "CustomTkinter provides fully customizable widgets, created and used
1246like normal Tkinter widgets, which can also be used in combination with normal
1247Tkinter elements.")
1248 (license license:expat)))
1249
1250(define-public python-cyclopts
1251 (package
1252 (name "python-cyclopts")
1253 (version "4.14.0")
1254 (source
1255 (origin
1256 (method git-fetch)
1257 (uri (git-reference
1258 (url "https://github.com/BrianPugh/cyclopts")
1259 (commit (string-append "v" version))))
1260 (file-name (git-file-name name version))
1261 (sha256
1262 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1263 (build-system pyproject-build-system)
1264 (arguments
1265 (list
1266 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1267 #:test-flags
1268 #~(list #$@(map (lambda (test) (string-append "--deselect="
1269 "tests/completion/"
1270 "test_bash.py::"
1271 test))
1272 (list "test_list_path_multi_positional_default_case"
1273 "test_eq_form_path_completion"
1274 "test_bash_path_completion_reflects_caller_cwd"))
1275 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1276 (native-inputs
1277 (list python-docutils
1278 python-hatch-vcs
1279 python-hatchling
1280 python-mkdocs
1281 python-pexpect
1282 python-pydantic
1283 python-pytest
1284 python-pytest-mock
1285 python-pyyaml
1286 python-sphinx
1287 python-syrupy
1288 python-toml
1289 python-trio))
1290 (propagated-inputs
1291 (list python-attrs
1292 python-docstring-parser
1293 python-rich
1294 python-rich-rst
1295 python-tomli
1296 python-typing-extensions))
1297 (home-page "https://github.com/BrianPugh/cyclopts")
1298 (synopsis "Intuitive, easy CLIs based on type hints")
1299 (description
1300 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1301that aims to provide an intuitive & efficient developer experience.")
1302 (license license:asl2.0)))
1303
1304(define-public python-darkdetect
1305 (package
1306 (name "python-darkdetect")
1307 (version "0.8.0")
1308 (source
1309 (origin
1310 (method url-fetch)
1311 (uri (pypi-uri "darkdetect" version))
1312 (sha256
1313 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1314 (build-system pyproject-build-system)
1315 (arguments
1316 (list
1317 #:tests? #f)) ;no tests in PyPI or Git.
1318 (native-inputs (list python-setuptools))
1319 (home-page "https://github.com/albertosottile/darkdetect")
1320 (synopsis "Detect OS dark mode from Python")
1321 (description
1322 "This package allows to detect if the user is using Dark Mode.")
1323 (license license:bsd-3)))
1324
1325(define-public python-dbus-deviation
1326 (package
1327 (name "python-dbus-deviation")
1328 (version "0.6.1")
1329 (source
1330 (origin
1331 (method url-fetch)
1332 (uri (pypi-uri "dbus-deviation" version))
1333 (sha256
1334 (base32 "18xp1s6k2x08d7a4ksh4dwf3sikvkdycylfz4lkmv213wbpqhsz0"))))
1335 (build-system pyproject-build-system)
1336 (arguments
1337 (list
1338 #:phases
1339 #~(modify-phases %standard-phases
1340 (add-after 'unpack 'patch-sources
1341 ;; See: <https://github.com/pwithnall/dbus-deviation/issues/22>.
1342 (lambda _
1343 (with-directory-excursion "dbusapi/tests"
1344 (substitute* '("test_interfaceparser.py" "test_ast.py")
1345 (("assertEquals") "assertEqual"))))))))
1346 (propagated-inputs (list python-lxml))
1347 (native-inputs (list python-pytest python-setuptools))
1348 (home-page "https://tecnocode.co.uk/dbus-deviation/")
1349 (synopsis "D-Bus introspection XML parser")
1350 (description "The @{dbus-deviation} library and utility parses D-Bus
1351introspection XML and processes it in various ways. For example, it can
1352represent a parsed D-Bus API XML description as an @acronym{AST, abstract
1353syntax tree}, or calculate the differences between two D-Bus APIs.")
1354 (license license:lgpl2.1+)))
1355
1356(define-public python-decopatch
1357 (package
1358 (name "python-decopatch")
1359 (version "1.4.10")
1360 (source
1361 (origin
1362 (method url-fetch)
1363 (uri (pypi-uri "decopatch" version))
1364 (sha256
1365 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1366 (build-system pyproject-build-system)
1367 (arguments
1368 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1369 (native-inputs
1370 (list python-setuptools
1371 python-setuptools-scm))
1372 (propagated-inputs
1373 (list python-makefun))
1374 (home-page "https://github.com/smarie/python-decopatch")
1375 (synopsis "Create decorators easily in Python")
1376 (description
1377 "This package provide implements a functionality to simplify writing
1378decorators in Python.")
1379 (license license:bsd-3)))
1380
1381(define-public python-dek
1382 (package
1383 (name "python-dek")
1384 (version "1.6.0")
1385 (source
1386 (origin
1387 (method git-fetch)
1388 (uri (git-reference
1389 (url "https://github.com/rec/dek")
1390 (commit (string-append "v" version))))
1391 (file-name (git-file-name name version))
1392 (sha256
1393 (base32 "14y4d1vv9w13ng12x0gk1y4gfqn2sqz91r6bf4019gpgr6kvqj8v"))))
1394 (build-system pyproject-build-system)
1395 (native-inputs (list python-hatchling python-pytest))
1396 (propagated-inputs (list python-xmod))
1397 (home-page "https://rec.github.io/dek/")
1398 (synopsis "The decorator-decorator")
1399 (description
1400 "This package implements a functionality to write a Python decorator
1401which takes no parameters isn't hard.")
1402 (license license:expat)))
1403
1404(define-public python-discovery
1405 (package
1406 (name "python-discovery")
1407 (version "1.2.1")
1408 (source
1409 (origin
1410 (method git-fetch)
1411 (uri (git-reference
1412 (url "https://github.com/tox-dev/python-discovery")
1413 (commit version)))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1417 (build-system pyproject-build-system)
1418 (arguments
1419 (list
1420 #:test-flags
1421 ;; assert []
1422 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1423 (native-inputs
1424 (list python-pytest
1425 python-pytest-mock
1426 python-hatchling
1427 python-hatch-vcs))
1428 (propagated-inputs
1429 (list python-filelock
1430 python-platformdirs))
1431 (home-page "https://github.com/tox-dev/python-discovery")
1432 (synopsis "Python interpreter discovery")
1433 (description
1434 "@code{python-discovery} is a library for discovering Python interpreters
1435installed on the current machine which may have multiple Python versions from
1436system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1437Windows registry (PEP 514). This library finds the right one.")
1438 (license license:expat)))
1439
1440(define-public python-distance
1441 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1442 (revision "0"))
1443 (package
1444 (name "python-distance")
1445 (version (git-version "0.1.3" revision commit))
1446 (source
1447 (origin
1448 (method git-fetch)
1449 (uri (git-reference
1450 (url "https://github.com/doukremt/distance")
1451 (commit commit)))
1452 (file-name (git-file-name name version))
1453 (sha256
1454 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1455 (build-system pyproject-build-system)
1456 (arguments
1457 (list #:test-backend #~'custom
1458 #:test-flags #~(list "tests/tests.py")))
1459 (native-inputs (list python-setuptools))
1460 (home-page "https://github.com/doukremt/distance")
1461 (synopsis "Utilities for comparing sequences")
1462 (description
1463 "This package provides helpers for computing similarities between
1464arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1465Sorensen distance, plus some bonuses. All distance computations are
1466implemented in pure Python, and most of them are also implemented in C.")
1467 (license license:gpl2+))))
1468
1469(define-public python-docopt-ng
1470 (package
1471 (name "python-docopt-ng")
1472 (version "0.9.0")
1473 (source
1474 (origin
1475 (method git-fetch)
1476 (uri (git-reference
1477 (url "https://github.com/jazzband/docopt-ng")
1478 (commit version)))
1479 (file-name (git-file-name name version))
1480 (sha256
1481 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1482 (build-system pyproject-build-system)
1483 (native-inputs
1484 (list python-pdm-backend
1485 python-pytest-8))
1486 (home-page "https://github.com/jazzband/docopt-ng")
1487 (synopsis "Humane command line arguments parser")
1488 (description
1489 "This package provides Jazzband-maintained fork of docopt, the humane
1490command line arguments parser.")
1491 (license license:expat)))
1492
1493(define-public python-doi
1494 (package
1495 (name "python-doi")
1496 (version "0.2.0")
1497 (source
1498 (origin
1499 (method url-fetch)
1500 (uri (pypi-uri "python-doi" version))
1501 (sha256
1502 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1503 (build-system pyproject-build-system)
1504 (arguments
1505 (list #:test-flags
1506 #~(list "-vv"
1507 (string-append "-k not (test_validate_doi "
1508 "or test_get_real_url_from_doi)"))))
1509 (native-inputs
1510 (list python-pytest
1511 python-pytest-xdist
1512 python-setuptools
1513 python-sphinx
1514 python-sphinx-autobuild
1515 python-sphinx-rtd-theme))
1516 (home-page "https://github.com/papis/python-doi")
1517 (synopsis "Python package to work with Document Object Identifier (doi)")
1518 (description
1519 "Python package to work with Document Object Identifier (doi).")
1520 (license license:gpl3)))
1521
1522(define-public python-domdf-python-tools
1523 (package
1524 (name "python-domdf-python-tools")
1525 (version "3.10.0")
1526 (source
1527 (origin
1528 (method url-fetch)
1529 (uri (pypi-uri "domdf_python_tools" version))
1530 (sha256
1531 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1532 (build-system pyproject-build-system)
1533 (native-inputs (list python-hatch-requirements-txt))
1534 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1535 (propagated-inputs
1536 (list python-natsort
1537 python-typing-extensions))
1538 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1539 (synopsis "Helpful functions for Python")
1540 (description
1541 "This package provide helpful functions for Python's testing and
1542packaging tasks.")
1543 (license license:expat)))
1544
1545(define-public python-donfig
1546 (package
1547 (name "python-donfig")
1548 (version "0.8.1.post1")
1549 (source
1550 (origin
1551 (method git-fetch)
1552 (uri (git-reference
1553 (url "https://github.com/pytroll/donfig")
1554 (commit (string-append "v" version))))
1555 (file-name (git-file-name name version))
1556 (sha256
1557 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1558 (build-system pyproject-build-system)
1559 (native-inputs
1560 (list python-cloudpickle
1561 python-pytest
1562 python-setuptools
1563 python-versioneer))
1564 (propagated-inputs
1565 (list python-pyyaml))
1566 (home-page "https://github.com/pytroll/donfig")
1567 (synopsis "Python package for configuring a python package")
1568 (description
1569 "Donfig is a Python library meant to make configuration easier for other
1570python packages. Donfig can be configured programmatically, by environment
1571variables, or from YAML files in standard locations. The below examples show
1572the basics of using donfig.")
1573 (license license:expat)))
1574
1575(define-public python-duet
1576 (package
1577 (name "python-duet")
1578 (version "0.2.9")
1579 (source
1580 (origin
1581 (method git-fetch)
1582 (uri (git-reference
1583 (url "https://github.com/google/duet")
1584 (commit (string-append "v" version))))
1585 (file-name (git-file-name name version))
1586 (sha256
1587 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1588 (build-system pyproject-build-system)
1589 (native-inputs (list python-pytest python-setuptools))
1590 (home-page "https://github.com/google/duet")
1591 (synopsis "Simple future-based async library for Python")
1592 (description
1593 "This package provides a simple @code{Future}-based async library for
1594Python. Duet uses a structured concurrency approach to async programming,
1595relying on the @code{Future} interface for parallelism. Duet also provides
1596a way to run async/await coroutines around those @code{Future}s. Unlike most
1597async libraries, duet is re-entrant.")
1598 (license license:asl2.0)))
1599
1600(define-public python-encutils
1601 (package
1602 (name "python-encutils")
1603 (version "1.0.0")
1604 (source
1605 (origin
1606 (method git-fetch)
1607 (uri (git-reference
1608 (url "https://github.com/coherent-oss/encutils")
1609 (commit (string-append "v" version))))
1610 (file-name (git-file-name name version))
1611 (sha256
1612 (base32 "09q2rnlnkfw0pjg95can05xf8z4x5ighbckxnzkccz1f0z2y8xrc"))
1613 (snippet
1614 #~(begin
1615 ;; Upstream is badly packaged, prepare to use Flit-core build
1616 ;; backend.
1617 (use-modules (guix build utils))
1618 (mkdir "encutils")
1619 (rename-file "__init__.py" "encutils/__init__.py")))))
1620 (build-system pyproject-build-system)
1621 (arguments
1622 (list
1623 #:phases
1624 #~(modify-phases %standard-phases
1625 (add-after 'unpack 'prepare-python-module-with-flit
1626 (lambda _
1627 (call-with-output-file "pyproject.toml"
1628 (lambda (port)
1629 (format port "[build-system]
1630requires = ['flit_core']
1631build-backend = 'flit_core.buildapi'
1632[project]
1633name = ~s
1634version = ~s
1635description = ~s
1636[tool.flit.module]
1637name = ~s~%"
1638 "encutils"
1639 #$version
1640 #$(package-description this-package)
1641 "encutils"))))))))
1642 (propagated-inputs (list python-chardet))
1643 (native-inputs (list python-flit-core python-pytest))
1644 (home-page "https://github.com/coherent-oss/encutils")
1645 (synopsis "Encoding detection collection for Python")
1646 (description
1647 "This package provides a collection of helper functions to detect
1648encodings of text files (like HTML, XHTML, XML, CSS, etc.) retrieved via HTTP,
1649file or string.")
1650 ;; See: <https://github.com/coherent-oss/encutils/issues/1>.
1651 (license license:lgpl3+)))
1652
1653(define-public python-envs
1654 (package
1655 (name "python-envs")
1656 (version "1.4")
1657 (source
1658 (origin
1659 (method url-fetch)
1660 (uri (pypi-uri "envs" version))
1661 (sha256
1662 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1663 (build-system pyproject-build-system)
1664 (arguments
1665 (list #:test-backend #~'unittest))
1666 (native-inputs
1667 (list python-packaging python-poetry-core))
1668 (propagated-inputs
1669 (list python-click python-jinja2 python-terminaltables))
1670 (home-page "https://github.com/capless/envs")
1671 (synopsis "Easy access of environment variables from Python")
1672 (description
1673 "This package implements a functionality to access of environment
1674variables from Python with support for strings, booleans, list, tuples, and
1675dicts.")
1676 (license license:asl2.0)))
1677
1678(define-public python-eval-type-backport
1679 (package
1680 (name "python-eval-type-backport")
1681 (version "0.4.0")
1682 (source
1683 (origin
1684 (method git-fetch)
1685 (uri (git-reference
1686 (url "https://github.com/alexmojaki/eval_type_backport")
1687 (commit (string-append "v" version))))
1688 (file-name (git-file-name name version))
1689 (sha256
1690 (base32 "0ygbmsfyxis62xipcag8z2avl0bwpiwy83hbaghl5kq0s1m396la"))))
1691 (build-system pyproject-build-system)
1692 (native-inputs
1693 (list python-pytest python-setuptools python-setuptools-scm))
1694 (home-page "https://github.com/alexmojaki/eval_type_backport")
1695 (synopsis "Letting older Python versions use newer typing features")
1696 (description
1697 "This package makes runtime typing inspection with the typing module
1698possible with newer syntax in older Python versions. Specifically, this
1699transforms @code{X | Y} into @code{typing.Union[X, Y]} and @code{list[X]} into
1700@code{typing.List[X]} etc. (for all the types made generic in PEP 585) if the
1701original syntax is not supported in the current Python version.")
1702 (license license:expat)))
1703
1704(define-public python-exitcode
1705 (package
1706 (name "python-exitcode")
1707 (version "0.1.0")
1708 (source
1709 (origin
1710 (method url-fetch)
1711 (uri (pypi-uri "exitcode" version))
1712 (sha256
1713 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1714 (build-system pyproject-build-system)
1715 (arguments
1716 (list #:tests? #f)) ; no tests in PyPI or Git
1717 (native-inputs
1718 (list python-poetry-core
1719 python-setuptools))
1720 (home-page "https://github.com/rumpelsepp/exitcode")
1721 (synopsis "Preferred system exit codes as defined by sysexits.h")
1722 (description
1723 "This package implements a preferred system exit codes as defined by
1724@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1725Rust's @url{https://docs.rs/exitcode, exitcode}.")
1726 (license license:expat)))
1727
1728(define-public python-exrex
1729 (package
1730 (name "python-exrex")
1731 (version "0.12.0")
1732 (source
1733 (origin
1734 (method git-fetch)
1735 (uri (git-reference
1736 (url "https://github.com/asciimoo/exrex")
1737 (commit (string-append "v" version))))
1738 (file-name (git-file-name name version))
1739 (sha256
1740 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1741 (build-system pyproject-build-system)
1742 (arguments (list #:test-backend #~'custom
1743 #:test-flags #~'("tests.py")))
1744 (native-inputs (list python-setuptools))
1745 (home-page "https://github.com/asciimoo/exrex")
1746 (synopsis "Irregular methods for regular expressions")
1747 (description
1748 "Exrex is a command line tool and Python module that generates all,
1749or random, matching strings to a given regular expression.")
1750 (license license:agpl3+)))
1751
1752(define-public python-extra-platforms
1753 (package
1754 (name "python-extra-platforms")
1755 (version "13.6.0")
1756 (source
1757 (origin
1758 (method git-fetch)
1759 (uri (git-reference
1760 (url "https://github.com/kdeldycke/extra-platforms")
1761 (commit (string-append "v" version))))
1762 (file-name (git-file-name name version))
1763 (sha256
1764 (base32 "0h9bg8dn5zzcm0nnn5wvnc7yrwlglg5yvbxfzwkg4vm123l72zsa"))))
1765 (build-system pyproject-build-system)
1766 (arguments
1767 (list
1768 #:build-backend "setuptools.build_meta"
1769 ;; Skip the network tests.
1770 #:test-flags #~(list "-m" "not network")))
1771 (native-inputs
1772 (list python-pytest
1773 python-setuptools))
1774 (home-page "https://kdeldycke.github.io/extra-platforms/")
1775 (synopsis "Detection of architectures, platforms, and OS families")
1776 (description
1777 "Extra Platforms detects and identifies operating systems, platforms,
1778architectures, and OS families. It groups them by family for conditional
1779logic in cross-platform applications.")
1780 (license license:asl2.0)))
1781
1782(define-public python-ezdxf
1783 (package
1784 (name "python-ezdxf")
1785 (version "1.3.5")
1786 (source
1787 (origin
1788 (method git-fetch)
1789 (uri (git-reference
1790 (url "https://github.com/mozman/ezdxf")
1791 (commit (string-append "v" version))))
1792 (sha256
1793 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1794 (build-system pyproject-build-system)
1795 (native-inputs (list python-cython python-pillow python-pytest
1796 python-setuptools unzip))
1797 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1798 python-typing-extensions))
1799 (home-page "https://ezdxf.mozman.at/")
1800 (synopsis "Python library to read and write DXF drawings")
1801 (description "ezdxf is a Python package to create new DXF files and
1802read/modify/write existing DXF files.")
1803 (license license:expat)))
1804
1805(define-public python-fastnumbers
1806 (package
1807 (name "python-fastnumbers")
1808 (version "5.1.1")
1809 (source
1810 (origin
1811 (method url-fetch)
1812 (uri (pypi-uri "fastnumbers" version))
1813 (sha256
1814 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1815 (build-system pyproject-build-system)
1816 (native-inputs
1817 (list python-numpy
1818 python-pytest
1819 python-setuptools
1820 python-setuptools-scm))
1821 (home-page "https://github.com/SethMMorton/fastnumbers")
1822 (synopsis "Super-fast and clean conversions to numbers")
1823 (description
1824 "This package provides provides drop-in replacements for the Python
1825built-in @code{int} and @code{float} that are on par or faster with the Python
1826equivalents.")
1827 (license license:expat)))
1828
1829(define-public python-findpython
1830 (package
1831 (name "python-findpython")
1832 (version "0.7.0")
1833 (source
1834 (origin
1835 (method url-fetch)
1836 (uri (pypi-uri "findpython" version))
1837 (sha256
1838 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1839 (build-system pyproject-build-system)
1840 (native-inputs
1841 (list python-pdm-backend
1842 python-pytest))
1843 (propagated-inputs
1844 (list python-packaging
1845 python-platformdirs))
1846 (home-page "https://github.com/frostming/findpython")
1847 (synopsis "Find Python versions the system")
1848 (description
1849 "This package provides a utility to find Python versions on the current
1850system.")
1851 (license license:expat)))
1852
1853(define-public python-flexcache
1854 (package
1855 (name "python-flexcache")
1856 (version "0.3")
1857 (source
1858 (origin
1859 (method git-fetch)
1860 (uri (git-reference
1861 (url "https://github.com/hgrecco/flexcache")
1862 (commit version)))
1863 (file-name (git-file-name name version))
1864 (sha256
1865 (base32 "08b1i79q6gxcn6c5gkgscwjnzwlwaaz9vmlgrr7z9kbindxx61ih"))))
1866 (build-system pyproject-build-system)
1867 (native-inputs
1868 (list python-pytest
1869 python-setuptools
1870 python-setuptools-scm))
1871 (propagated-inputs
1872 (list python-typing-extensions))
1873 (home-page "https://github.com/hgrecco/flexcache")
1874 (synopsis "Caching transformed versions of a source object")
1875 (description
1876 "This package implements a functionality to cache on disk the result of
1877expensive calculations. It was started as part of
1878@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1879 (license license:bsd-3)))
1880
1881(define-public python-flexparser
1882 (package
1883 (name "python-flexparser")
1884 (version "0.4")
1885 (source
1886 (origin
1887 (method git-fetch)
1888 (uri (git-reference
1889 (url "https://github.com/hgrecco/flexparser")
1890 (commit version)))
1891 (file-name (git-file-name name version))
1892 (sha256
1893 (base32 "1aj6b2a5w0z814x4gr8z4lmpf4ivp41gikx998lkk7rbdgh2kryh"))))
1894 (build-system pyproject-build-system)
1895 (native-inputs
1896 (list python-pytest
1897 python-setuptools
1898 python-setuptools-scm))
1899 (propagated-inputs
1900 (list python-typing-extensions))
1901 (home-page "https://github.com/hgrecco/flexparser")
1902 (synopsis "Parsing made fun ... using typing")
1903 (description "This project provides a typed parser. It was started as
1904part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1905package. ")
1906 (license license:bsd-3)))
1907
1908(define-public python-fortranformat
1909 (package
1910 (name "python-fortranformat")
1911 (version "2.0.3")
1912 (source
1913 (origin
1914 (method git-fetch)
1915 (uri (git-reference
1916 (url "https://github.com/brendanarnold/py-fortranformat")
1917 (commit (string-append "v" version))))
1918 (file-name (git-file-name name version))
1919 (sha256
1920 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1921 (build-system pyproject-build-system)
1922 (native-inputs
1923 (list python-poetry-core
1924 python-pytest))
1925 (home-page "https://github.com/brendanarnold/py-fortranformat")
1926 (synopsis "FORTRAN format interpreter for Python")
1927 (description
1928 "This package mimics FORTRAN textual IO in Python - generates text from a
1929Python list of variables or will read a line of text into Python variables
1930according to the FORTRAN format statement passed.")
1931 (license license:expat)))
1932
1933(define-public python-gest-api
1934 (package
1935 (name "python-gest-api")
1936 (version "0.1")
1937 (source
1938 (origin
1939 (method url-fetch)
1940 (uri (pypi-uri "gest_api" version))
1941 (sha256
1942 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1943 (build-system pyproject-build-system)
1944 (native-inputs
1945 (list python-pytest
1946 python-setuptools))
1947 (propagated-inputs
1948 (list python-pydantic))
1949 (home-page "https://github.com/campa-consortium/gest-api")
1950 (synopsis "Standardization for generators")
1951 (description
1952 "This package provides a standard for generating test points and
1953exchanging variables, objectives, and constraints in optimization problems.
1954
1955It is an effort to standardize the interface of the generators in optimization
1956libraries such as:
1957@itemize
1958@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1959high-level optimization in Python
1960@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1961scale, powered by @code{libEnsemble}
1962@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1963toolkit for coordinating asynchronous and dynamic ensembles of calculations
1964@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1965and execution of large, black-box optimization problems
1966@end itemize")
1967 (license license:bsd-3)))
1968
1969(define-public python-grapheme
1970 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1971 ;; branch.
1972 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1973 (revision "0"))
1974 (package
1975 (name "python-grapheme")
1976 (version (git-version "0.6.0" revision commit))
1977 (source
1978 (origin
1979 (method git-fetch)
1980 (uri (git-reference
1981 (url "https://github.com/alvinlindstam/grapheme")
1982 (commit commit)))
1983 (file-name (git-file-name name version))
1984 (sha256
1985 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1986 (build-system pyproject-build-system)
1987 (native-inputs
1988 (list python-pytest
1989 python-setuptools))
1990 (home-page "https://github.com/alvinlindstam/grapheme")
1991 (synopsis "Unicode grapheme helpers")
1992 (description
1993 "This package provides a functionality for working with user perceived
1994characters. More specifically, string manipulation and calculation functions
1995for working with grapheme cluster groups (graphemes) as defined by the
1996@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1997 (license license:expat))))
1998
1999(define-public python-halo
2000 (package
2001 (name "python-halo")
2002 (version "0.0.31")
2003 (source
2004 (origin
2005 (method url-fetch)
2006 (uri (pypi-uri "halo" version))
2007 (sha256
2008 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
2009 (build-system pyproject-build-system)
2010 (arguments
2011 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
2012 (native-inputs
2013 (list python-setuptools))
2014 (propagated-inputs
2015 (list python-colorama
2016 python-log-symbols
2017 python-six
2018 python-spinners
2019 python-termcolor))
2020 (home-page "https://github.com/manrajgrover/halo")
2021 (synopsis "Python library to display graphical spinners in the terminal")
2022 (description
2023 "Halo is a Python library to display graphical spinners in the terminal.
2024It also supports IPython/Jupyter.")
2025 (license license:expat)))
2026
2027(define-public python-hatch-argparse-manpage
2028 (package
2029 (name "python-hatch-argparse-manpage")
2030 (version "1.0.0")
2031 (source
2032 (origin
2033 (method git-fetch)
2034 (uri (git-reference
2035 (url "https://github.com/damonlynch/hatch-argparse-manpage")
2036 (commit (string-append "v" version))))
2037 (file-name (git-file-name name version))
2038 (sha256
2039 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
2040 (build-system pyproject-build-system)
2041 (arguments (list #:tests? #f)) ; No tests upstream.
2042 (native-inputs (list python-hatchling))
2043 (propagated-inputs (list python-argparse-manpage python-rich))
2044 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
2045 (synopsis "Hatch build hook plugin to generate manual pages")
2046 (description
2047 "This package provides a build hook plugin for Hatch to automatically
2048 bs generate a manual page from an ArgumentParser object, using argparse-manpage
2049by Pavel Raiskup.")
2050 (license license:gpl3+)))
2051
2052(define-public python-hatch-cython
2053 (package
2054 (name "python-hatch-cython")
2055 (version "0.6.0")
2056 (source
2057 (origin
2058 (method git-fetch)
2059 (uri (git-reference
2060 (url "https://github.com/joshua-auchincloss/hatch-cython")
2061 (commit (string-append "v" version))))
2062 (file-name (git-file-name name version))
2063 (sha256
2064 (base32 "0fczzvmg7i62p3wr2jayyl11p5q5cmwnyw79f0a6jv5d9xhaygpn"))))
2065 (build-system pyproject-build-system)
2066 (arguments
2067 (list
2068 #:test-flags #~(list "tests")))
2069 (native-inputs
2070 (list python-hatchling
2071 python-numpy
2072 python-pytest
2073 python-toml))
2074 (propagated-inputs
2075 (list python-cython
2076 python-hatchling
2077 python-setuptools))
2078 (home-page "https://github.com/joshua-auchincloss/hatch-cython")
2079 (synopsis "Cython build hooks for Hatch")
2080 (description "This package provides a Cython build hooks for Hatch.")
2081 (license license:expat)))
2082
2083(define-public python-hatch-gettext
2084 (package
2085 (name "python-hatch-gettext")
2086 (version "1.1.0")
2087 (source
2088 (origin
2089 (method git-fetch)
2090 (uri (git-reference
2091 (url "https://github.com/damonlynch/hatch-gettext")
2092 (commit (string-append "v" version))))
2093 (file-name (git-file-name name version))
2094 (sha256
2095 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
2096 (build-system pyproject-build-system)
2097 (arguments (list #:tests? #f)) ; No tests upstream.
2098 (native-inputs (list python-hatchling))
2099 (propagated-inputs (list python-rich))
2100 (home-page "https://github.com/damonlynch/hatch-gettext")
2101 (synopsis "Hatch build hook plugin for GNU gettext")
2102 (description
2103 "This package provides a build hook plugin for Hatch that compiles
2104 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
2105 (license license:gpl3+)))
2106
2107(define-public python-hatch-nodejs-version
2108 (package
2109 (name "python-hatch-nodejs-version")
2110 (version "0.4.0")
2111 (source
2112 (origin
2113 (method git-fetch)
2114 (uri (git-reference
2115 (url "https://github.com/agoose77/hatch-nodejs-version")
2116 (commit (string-append "v" version))))
2117 (file-name (git-file-name name version))
2118 (sha256
2119 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
2120 (build-system pyproject-build-system)
2121 (propagated-inputs (list python-hatchling))
2122 (native-inputs (list python-hatchling python-pytest))
2123 (home-page "https://github.com/agoose77/hatch-nodejs-version")
2124 (synopsis "Hatch plugin for versioning from a package.json file")
2125 (description "This package provides a hatch plugin for fetching a version
2126from a @code{package.json} file.")
2127 (license license:expat)))
2128
2129(define-public python-hatch-regex-commit
2130 (package
2131 (name "python-hatch-regex-commit")
2132 (version "0.0.4")
2133 (source
2134 (origin
2135 (method git-fetch)
2136 (uri (git-reference
2137 (url "https://github.com/frankie567/hatch-regex-commit")
2138 (commit (string-append "v" version))))
2139 (file-name (git-file-name name version))
2140 (sha256
2141 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
2142 (build-system pyproject-build-system)
2143 (arguments (list #:tests? #f)) ;test directory is empty
2144 (propagated-inputs (list python-hatchling))
2145 (native-inputs (list python-hatchling))
2146 (home-page "https://github.com/frankie567/hatch-regex-commit")
2147 (synopsis "Hatch plugin to create a commit and tag when bumping version")
2148 (description
2149 "This provides a plugin for Hatch that automatically creates a Git commit
2150and tag after version bumping.")
2151 (license license:expat)))
2152
2153;; TODO: Move to ci or task-runners, see:
2154;; <https://codeberg.org/guix/guix/issues/3096>.
2155(define-public python-huey
2156 (package
2157 (name "python-huey")
2158 (version "2.5.3")
2159 (source
2160 (origin
2161 (method git-fetch)
2162 (uri (git-reference
2163 (url "https://github.com/coleifer/huey")
2164 (commit version)))
2165 (file-name (git-file-name name version))
2166 (sha256
2167 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
2168 (build-system pyproject-build-system)
2169 (arguments
2170 (list
2171 #:phases
2172 #~(modify-phases %standard-phases
2173 (add-after 'unpack 'remove-which
2174 (lambda _
2175 (substitute* "huey/tests/test_kt_huey.py"
2176 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
2177 "has_ktserver = False"))))
2178 (replace 'check
2179 (lambda* (#:key tests? #:allow-other-keys)
2180 (when tests?
2181 (spawn "redis-server" '("redis-server"))
2182 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
2183 (native-inputs (list python-setuptools redis tzdata-for-tests))
2184 (propagated-inputs (list python-redis))
2185 (home-page "https://huey.readthedocs.io")
2186 (synopsis "Lightweight task queue for Python")
2187 (description
2188 "Huey is a lightweight task queue for Python applications. Huey
2189supports:
2190@itemize
2191@item Redis, SQLite, file-system, or in-memory storage
2192@item multi-process, multi-thread or greenlet task execution models
2193@item scheduling tasks to execute at a given time, or after a given delay
2194@item scheduling recurring tasks, like a crontab
2195@item automatically retrying tasks that fail
2196@item task prioritization
2197@item task result storage
2198@item task expiration
2199@item task locking
2200@item task pipelines and chains
2201@end itemize")
2202 (license license:expat)))
2203
2204(define-public python-id
2205 (package
2206 (name "python-id")
2207 (version "1.5.0")
2208 (source
2209 (origin
2210 (method url-fetch)
2211 (uri (pypi-uri "id" version))
2212 (sha256
2213 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
2214 (build-system pyproject-build-system)
2215 (native-inputs
2216 (list python-flit-core
2217 python-pretend
2218 python-pytest))
2219 (propagated-inputs
2220 (list python-requests))
2221 (home-page "https://github.com/di/id")
2222 (synopsis "Tool for generating OIDC identities")
2223 (description
2224 "This package provides a tool for generating @code{OIDC, OpenID Connect}
2225identities.")
2226 (license license:asl2.0)))
2227
2228(define-public python-iniparse
2229 (package
2230 (name "python-iniparse")
2231 (version "0.5.1")
2232 (source
2233 (origin
2234 (method git-fetch)
2235 (uri (git-reference
2236 (url "https://github.com/candlepin/python-iniparse")
2237 (commit version)))
2238 (file-name (git-file-name name version))
2239 (sha256
2240 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
2241 (build-system pyproject-build-system)
2242 (arguments
2243 (list
2244 #:test-backend #~'custom
2245 #:test-flags #~(list "runtests.py")
2246 #:phases
2247 #~(modify-phases %standard-phases
2248 (add-before 'check 'disable-tests
2249 (lambda _
2250 ;; XXX: Three tests failed to compare lists.
2251 (substitute* "tests/test_compat.py"
2252 (("test_read_returns_file_list")
2253 "disabled_test_read_returns_file_list")))))))
2254 (native-inputs
2255 (list python-setuptools))
2256 (home-page "https://github.com/candlepin/python-iniparse")
2257 (synopsis "Accessing and Modifying INI files")
2258 (description
2259 "iniparse is a INI parser for Python which is:
2260@itemize
2261@item Compatible with ConfigParser: Backward compatible implementations of
2262ConfigParser, RawConfigParser, and SafeConfigParser are included that are
2263API-compatible with the Python standard library.
2264@item Preserves structure of INI files: Order of sections & options,
2265indentation, comments, and blank lines are preserved as far as possible when
2266data is updated.
2267@item More convenient: Values can be accessed using dotted notation
2268(@code{cfg.user.name}), or using container syntax
2269(@code{cfg['user']['name']}).
2270@end itemize")
2271 (license license:expat)))
2272
2273(define-public python-inotify
2274 (package
2275 (name "python-inotify")
2276 (version "0.2.12")
2277 (source
2278 (origin
2279 (method git-fetch)
2280 (uri (git-reference
2281 (url "https://github.com/dsoprea/PyInotify")
2282 (commit version)))
2283 (file-name (git-file-name name version))
2284 (sha256
2285 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2286 (build-system pyproject-build-system)
2287 (arguments
2288 (list
2289 #:phases
2290 #~(modify-phases %standard-phases
2291 (add-after 'unpack 'fix-requirements
2292 (lambda _
2293 (substitute* "inotify/resources/requirements.txt"
2294 (("build")
2295 "")))))))
2296 (native-inputs (list python-pytest python-setuptools))
2297 (propagated-inputs (list python-pyasyncore))
2298 (home-page "https://github.com/dsoprea/PyInotify")
2299 (synopsis "Linux filesystem activity monitor library for Python")
2300 (description
2301 "This package provides an efficient and elegant inotify (Linux filesystem
2302activity monitor) library for Python.")
2303 (license license:gpl2)))
2304
2305(define-public python-intervaltree
2306 (package
2307 (name "python-intervaltree")
2308 (version "3.1.0")
2309 (source
2310 (origin
2311 (method url-fetch)
2312 (uri (pypi-uri "intervaltree" version))
2313 (sha256
2314 (base32
2315 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2316 (build-system pyproject-build-system)
2317 (arguments
2318 `(#:phases
2319 (modify-phases %standard-phases
2320 ;; pytest seems to have a check to make sure the user is testing
2321 ;; their checked-out code and not an installed, potentially
2322 ;; out-of-date copy. This is harmless here, since we just installed
2323 ;; the package, so we disable the check to avoid skipping tests
2324 ;; entirely.
2325 (add-before 'check 'import-mismatch-error-workaround
2326 (lambda _
2327 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2328 #t)))))
2329 (propagated-inputs
2330 (list python-sortedcontainers))
2331 (native-inputs
2332 (list python-setuptools python-pytest))
2333 (home-page "https://github.com/chaimleib/intervaltree")
2334 (synopsis "Editable interval tree data structure")
2335 (description
2336 "This package provides a mutable, self-balancing interval tree
2337implementation for Python. Queries may be by point, by range overlap, or by
2338range envelopment. This library was designed to allow tagging text and time
2339intervals, where the intervals include the lower bound but not the upper
2340bound.")
2341 (license license:asl2.0)))
2342
2343(define-public python-jschon
2344 (package
2345 (name "python-jschon")
2346 (version "0.11.1")
2347 (source
2348 (origin
2349 (method git-fetch)
2350 (uri (git-reference
2351 (url "https://github.com/marksparkza/jschon/")
2352 (commit (string-append "v" version))
2353 (recursive? #t))) ;required for tests
2354 (sha256
2355 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2356 (file-name (git-file-name name version))))
2357 (build-system pyproject-build-system)
2358 (propagated-inputs
2359 (list python-rfc3986))
2360 (native-inputs
2361 (list python-coverage
2362 python-hypothesis
2363 python-pytest
2364 python-pytest-benchmark
2365 python-pytest-httpserver
2366 python-requests
2367 python-setuptools))
2368 (home-page "https://jschon.readthedocs.io/")
2369 (synopsis "Object-oriented JSON Schema implementation for Python")
2370 (description
2371 "This package provides a JSON toolkit for Python developers.")
2372 (license license:expat)))
2373
2374(define-public python-jsonpath-ng
2375 (package
2376 (name "python-jsonpath-ng")
2377 (version "1.7.0" )
2378 (source
2379 (origin
2380 (method git-fetch)
2381 (uri (git-reference
2382 (url "https://github.com/h2non/jsonpath-ng")
2383 (commit (string-append "v" version))))
2384 (file-name (git-file-name name version))
2385 (sha256
2386 (base32 "0z0qm5sgzal0qzml2fmc9h5nim8m3x6sz55gqhcd9c2jrq8jmwmi"))))
2387 (build-system pyproject-build-system)
2388 (native-inputs
2389 (list python-pytest
2390 python-setuptools))
2391 (propagated-inputs
2392 (list python-ply))
2393 (home-page "https://github.com/h2non/jsonpath-ng")
2394 (synopsis "JSONPath Next-Generation")
2395 (description
2396 "This package provides a final implementation of @code{JSONPath} for
2397Python that aims to be standard compliant, including arithmetic and binary
2398comparison operators, as defined in the original
2399@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2400 (license license:asl2.0)))
2401
2402(define-public python-json-log-formatter
2403 (package
2404 (name "python-json-log-formatter")
2405 (version "1.2.1")
2406 (source
2407 (origin
2408 (method git-fetch)
2409 (uri (git-reference
2410 (url "https://github.com/marselester/json-log-formatter")
2411 (commit (string-append "v" version))))
2412 (file-name (git-file-name name version))
2413 (sha256
2414 (base32 "0xpsv3a5cvwpggqyjkkr59z8wl8n44zkhpwqjnnn7cshb9skvkz1"))))
2415 (build-system pyproject-build-system)
2416 (arguments (list #:test-flags #~(list "-s" "tests.py")))
2417 (native-inputs
2418 (list python-django-minimal
2419 python-pytest
2420 python-setuptools
2421 python-simplejson
2422 python-ujson))
2423 (home-page "https://github.com/marselester/json-log-formatter")
2424 (synopsis "JSON log formatter")
2425 (description "The library helps you to store logs in JSON format.")
2426 (license license:expat)))
2427
2428(define-public python-keeper-secrets-manager-core
2429 ;; released from a monorepo with other packages following various versioning
2430 ;; schemes. This commit was selected because some failing tests were fixed
2431 ;; since the most recent release of the Python SDK packages.
2432 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2433 (revision "0"))
2434 (package
2435 (name "python-keeper-secrets-manager-core")
2436 (version (git-version "17.0.0" revision commit))
2437 (source
2438 (origin
2439 (method git-fetch)
2440 (uri (git-reference
2441 (url "https://github.com/Keeper-Security/secrets-manager")
2442 (commit commit)))
2443 (file-name (git-file-name name version))
2444 (sha256
2445 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2446 (build-system pyproject-build-system)
2447 (arguments
2448 (list
2449 #:phases
2450 #~(modify-phases %standard-phases
2451 (add-after 'unpack 'chdir
2452 (lambda _
2453 (chdir "sdk/python/core"))))))
2454 (propagated-inputs
2455 (list python-cryptography
2456 python-importlib-metadata
2457 python-requests))
2458 (native-inputs
2459 (list python-pytest
2460 python-setuptools))
2461 (home-page "https://github.com/Keeper-Security/secrets-manager")
2462 (synopsis "Keeper Secrets Manager for Python SDK")
2463 (description
2464 "The Keeper Secrets Manager Python SDK provides access to
2465@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2466Management} services.")
2467 (license license:expat))))
2468
2469(define-public python-keeper-secrets-manager-helper
2470 ;; released alongside keeper-secrets-manager-core, but with a different
2471 ;; versioning scheme.
2472 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2473 (revision "0"))
2474 (package
2475 (name "python-keeper-secrets-manager-helper")
2476 (version (git-version "1.0.6" revision commit))
2477 (source
2478 (origin
2479 (method git-fetch)
2480 (uri (git-reference
2481 (url "https://github.com/Keeper-Security/secrets-manager")
2482 (commit commit)))
2483 (file-name (git-file-name name version))
2484 (sha256
2485 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2486 (build-system pyproject-build-system)
2487 (arguments
2488 (list
2489 #:phases
2490 #~(modify-phases %standard-phases
2491 (add-after 'unpack 'chdir
2492 (lambda _
2493 (chdir "sdk/python/helper"))))))
2494 (propagated-inputs
2495 (list python-iso8601
2496 python-keeper-secrets-manager-core
2497 python-pyyaml))
2498 (native-inputs
2499 (list python-pytest
2500 python-setuptools))
2501 (home-page "https://github.com/Keeper-Security/secrets-manager")
2502 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2503 (description
2504 "Keeper Secrets Manager SDK helper is for creating and managing secret
2505records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2506 (license license:expat))))
2507
2508(define-public python-language-data
2509 (package
2510 (name "python-language-data")
2511 (version "1.3.0")
2512 (source
2513 (origin
2514 (method url-fetch)
2515 (uri (pypi-uri "language_data" version))
2516 (sha256
2517 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2518 (build-system pyproject-build-system)
2519 (native-inputs
2520 (list python-pytest
2521 python-setuptools
2522 python-setuptools-scm))
2523 (propagated-inputs
2524 (list python-marisa-trie))
2525 (home-page "https://github.com/georgkrause/language_data")
2526 (synopsis "Supplementary data about languages used by the langcodes module")
2527 (description
2528 "language_data is a supplement to the langcodes module, for working with
2529standardized codes for human languages. It stores the more bulky and
2530hard-to-index data about languages, particularly what they are named in
2531various languages.")
2532 (license license:expat)))
2533
2534(define-public python-log-symbols
2535 (package
2536 (name "python-log-symbols")
2537 (version "0.0.14")
2538 (source
2539 (origin
2540 (method url-fetch)
2541 (uri (pypi-uri "log_symbols" version))
2542 (sha256
2543 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2544 (build-system pyproject-build-system)
2545 (arguments
2546 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2547 (native-inputs
2548 (list python-setuptools))
2549 (propagated-inputs
2550 (list python-colorama))
2551 (home-page "https://github.com/manrajgrover/py-log-symbols")
2552 (synopsis "Python library with graphical symbols for logging on the terminal")
2553 (description
2554 "This package provides a Python library with graphical symbols that can
2555be displayed on the terminal, with color if possible, for logging purposes.")
2556 (license license:expat)))
2557
2558(define-public python-lsprotocol
2559 (package
2560 (name "python-lsprotocol")
2561 (version "2025.0.0")
2562 (source
2563 (origin
2564 (method git-fetch)
2565 (uri (git-reference
2566 (url "https://github.com/microsoft/lsprotocol")
2567 (commit version)))
2568 (file-name (git-file-name name version))
2569 (sha256
2570 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2571 (build-system pyproject-build-system)
2572 (arguments
2573 (list
2574 #:tests? #f ;no tests for Python package
2575 #:phases
2576 #~(modify-phases %standard-phases
2577 (add-after 'unpack 'cd-packages-python
2578 (lambda _
2579 (chdir "packages/python"))))))
2580 (native-inputs
2581 (list python-flit-core))
2582 (propagated-inputs
2583 (list python-attrs
2584 python-cattrs))
2585 (home-page "https://github.com/microsoft/lsprotocol")
2586 (synopsis "Python types for Language Server Protocol.")
2587 (description
2588 "@code{lsprotocol} is a Python implementation of object types used in
2589the Language Server Protocol (LSP). This repository contains the code
2590generator and the generated types for LSP.")
2591 (license license:expat)))
2592
2593(define-public python-marisa-trie
2594 (package
2595 (name "python-marisa-trie")
2596 (version "1.3.1")
2597 (source
2598 (origin
2599 (method url-fetch)
2600 (uri (pypi-uri "marisa_trie" version))
2601 (sha256
2602 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2603 (build-system pyproject-build-system)
2604 (native-inputs
2605 (list python-cython
2606 python-hypothesis
2607 python-pytest
2608 python-readme-renderer
2609 python-setuptools))
2610 (home-page "https://github.com/pytries/marisa-trie")
2611 (synopsis "Static memory-efficient Trie-like structures for Python")
2612 (description
2613 "This package provides static memory-efficient and fast Trie-like structures
2614for Python.")
2615 (license license:expat)))
2616
2617(define-public python-materialyoucolor
2618 (package
2619 (name "python-materialyoucolor")
2620 (version "3.0.2")
2621 (source
2622 (origin
2623 (method git-fetch)
2624 (uri (git-reference
2625 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2626 (commit (string-append "v" version))))
2627 (file-name (git-file-name name version))
2628 (sha256
2629 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2630 (build-system pyproject-build-system)
2631 (arguments
2632 (list #:test-backend #~'custom
2633 #:test-flags #~(list "tests/test_all.py")))
2634 (propagated-inputs (list python-pillow))
2635 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2636 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2637 (synopsis "Material You color generation algorithms")
2638 (description
2639 "@code{python-materialyoucolor} provides a tool that generates harmonious
2640color palettes from the dominant colors of an image, based on the
2641@uref{https://m3.material.io/styles/color/system/overview, Material color
2642system}.")
2643 (license license:expat)))
2644
2645(define-public python-menuinst
2646 (package
2647 (name "python-menuinst")
2648 (version "2.4.1")
2649 (source
2650 (origin
2651 (method git-fetch)
2652 (uri (git-reference
2653 (url "https://github.com/conda/menuinst")
2654 (commit version)))
2655 (file-name (git-file-name name version))
2656 (sha256
2657 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2658 (build-system pyproject-build-system)
2659 (arguments
2660 (list
2661 #:tests? #f)) ;tests need conda
2662 (native-inputs
2663 (list python-setuptools
2664 python-setuptools-scm))
2665 (home-page "https://conda.github.io/menuinst/")
2666 (synopsis "Cross platform menu item installation")
2667 (description
2668 "This package provides cross platform menu item installation for conda
2669packages.")
2670 (license license:bsd-3)))
2671
2672(define-public python-multiplex
2673 (package
2674 (name "python-multiplex")
2675 (version "0.6.1")
2676 (source
2677 (origin
2678 (method git-fetch) ;no tests in PyPI archive
2679 (uri (git-reference
2680 (url "https://github.com/dankilman/multiplex")
2681 (commit version)))
2682 (file-name (git-file-name name version))
2683 (sha256
2684 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2685 (build-system pyproject-build-system)
2686 (native-inputs
2687 (list python-poetry-core
2688 python-pytest
2689 python-pytest-asyncio))
2690 (propagated-inputs
2691 (list python-aiofiles
2692 python-aiostream
2693 python-click
2694 python-easy-ansi-0.3
2695 python-pyte))
2696 (home-page "https://github.com/dankilman/multiplex")
2697 (synopsis "Parallel stream of outputs from multiple processes")
2698 (description
2699 "This package provides a functionality to view output of multiple
2700processes, in parallel, in the console, with an interactive TUI.")
2701 (license license:expat)))
2702
2703(define-public python-nrepl
2704 (package
2705 (name "python-nrepl")
2706 (version "0.3.4")
2707 (source
2708 (origin
2709 (method git-fetch)
2710 (uri (git-reference
2711 (url "https://git.sr.ht/~ngraves/nrepl-python")
2712 (commit version)))
2713 (file-name (git-file-name name version))
2714 (sha256
2715 (base32 "12fi4ilkslh9rg5dilqknrr6sm2rhs2v91xhyfi432f0dp5920lp"))))
2716 (build-system pyproject-build-system)
2717 (arguments
2718 (list
2719 #:test-flags
2720 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2721 (native-inputs
2722 (list python-flit-core
2723 python-pytest
2724 python-pytest-asyncio
2725 python-pytest-xdist))
2726 (propagated-inputs
2727 (list python-fastbencode
2728 python-gevent
2729 python-ipython))
2730 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2731 (synopsis "NREPL server for Python")
2732 (description
2733 "This package provides an implementation of the @url{https://nrepl.org,
2734NREPL} protocol for Python.")
2735 (license license:gpl3+)))
2736
2737(define-public python-num2words
2738 (package
2739 (name "python-num2words")
2740 (version "0.5.14")
2741 (source
2742 (origin
2743 (method git-fetch)
2744 (uri (git-reference
2745 (url "https://github.com/savoirfairelinux/num2words")
2746 (commit (string-append "v" version))))
2747 (file-name (git-file-name name version))
2748 (sha256
2749 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2750 (build-system pyproject-build-system)
2751 (arguments
2752 (list
2753 #:test-flags
2754 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2755 (native-inputs (list python-pytest python-setuptools))
2756 (propagated-inputs (list python-docopt))
2757 (home-page "https://github.com/savoirfairelinux/num2words")
2758 (synopsis "Convert numbers to words in multiple languages")
2759 (description
2760 "@code{num2words} is a library that converts numbers like 42 to words like
2761forty-two. It supports multiple languages, and can even generate ordinal
2762numbers like forty-second.")
2763 (license license:lgpl2.1)))
2764
2765(define-public python-orderly-set
2766 (package
2767 (name "python-orderly-set")
2768 (version "5.5.0")
2769 (source
2770 (origin
2771 (method url-fetch)
2772 (uri (pypi-uri "orderly_set" version))
2773 (sha256
2774 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2775 (build-system pyproject-build-system)
2776 (native-inputs (list python-flit-core python-pytest))
2777 (home-page "https://github.com/seperman/orderly-set")
2778 (synopsis "Multiple implementations of Ordered Set")
2779 (description "Orderly Set is a package containing multiple implementations
2780of Ordered Set.")
2781 (license license:expat)))
2782
2783(define-public python-packageurl
2784 (package
2785 (name "python-packageurl")
2786 (version "0.17.6")
2787 (source
2788 (origin
2789 (method git-fetch)
2790 (uri (git-reference
2791 (url "https://github.com/package-url/packageurl-python")
2792 (commit (string-append "v" version))))
2793 (file-name (git-file-name name version))
2794 (sha256
2795 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2796 (modules '((guix build utils)))
2797 ;; Remove bundled virtualenv and license files used only for
2798 ;; development; not needed at build or runtime.
2799 (snippet '(delete-file-recursively "thirdparty"))))
2800 (build-system pyproject-build-system)
2801 (arguments
2802 (list #:test-flags
2803 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2804 ;; submodule at import time; skip it when the submodule is absent.
2805 #~(list "--ignore=tests/test_purl_spec.py")))
2806 (native-inputs
2807 (list python-pytest
2808 python-setuptools))
2809 (home-page "https://www.packageurl.org")
2810 (synopsis "Package URL parser and builder")
2811 (description
2812 "This library parses and builds Package URLs (purls) as defined in the
2813purl specification. It provides a @code{PackageURL} class for creating,
2814parsing, and normalizing package URL strings across different package
2815management ecosystems.")
2816 (license license:expat)))
2817
2818(define-public python-pandocfilters
2819 (package
2820 (name "python-pandocfilters")
2821 (version "1.5.1")
2822 (source
2823 (origin
2824 (method url-fetch)
2825 (uri (pypi-uri "pandocfilters" version))
2826 (sha256
2827 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2828 (build-system pyproject-build-system)
2829 (arguments
2830 (list #:tests? #f)) ;require pandoc to run tests
2831 (native-inputs
2832 (list python-setuptools))
2833 (home-page "https://github.com/jgm/pandocfilters")
2834 (synopsis "Python module for writing Pandoc filters")
2835 (description "Pandoc is a powerful utility to transform various
2836input formats into a wide range of output formats. To alter the
2837exported output document, Pandoc allows the usage of filters, which
2838are pipes that read a JSON serialization of the Pandoc AST from stdin,
2839transform it in some way, and write it to stdout. It allows therefore
2840to alter the processing of Pandoc's supported input formats, for
2841instance one can add new syntax elements to markdown, etc.
2842
2843This package provides Python bindings.")
2844 (license license:bsd-3)))
2845
2846(define-public python-panflute
2847 (package
2848 (name "python-panflute")
2849 (version "2.3.1")
2850 (source
2851 (origin
2852 (method url-fetch)
2853 (uri (pypi-uri "panflute" version))
2854 (sha256
2855 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2856 (build-system pyproject-build-system)
2857 (arguments
2858 (list #:tests? #f)) ;require pandoc to run tests
2859 (native-inputs
2860 (list python-setuptools))
2861 (propagated-inputs
2862 (list python-click
2863 python-pyyaml))
2864 (home-page "http://scorreia.com/software/panflute/")
2865 (synopsis "Pythonic Pandoc filters")
2866 (description
2867 "Panflute is a Python package that makes Pandoc filters fun to write.
2868It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2869is heavily inspired.")
2870 (license license:bsd-3)))
2871
2872(define-public python-pastel
2873 (package
2874 (name "python-pastel")
2875 (version "0.2.1")
2876 (source
2877 (origin
2878 (method git-fetch)
2879 (uri (git-reference
2880 (url "https://github.com/sdispater/pastel")
2881 (commit version)))
2882 (file-name (git-file-name name version))
2883 (sha256
2884 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2885 (build-system pyproject-build-system)
2886 (arguments
2887 (list
2888 #:test-flags
2889 #~(list "pastel" "tests/")
2890 #:phases
2891 #~(modify-phases %standard-phases
2892 (add-after 'unpack 'use-poetry-core
2893 (lambda _
2894 ;; Patch to use the core poetry API.
2895 (substitute* "pyproject.toml"
2896 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2897 (native-inputs (list python-poetry-core python-pytest))
2898 (home-page "https://github.com/sdispater/pastel")
2899 (synopsis "Library to colorize strings in your terminal")
2900 (description
2901 "Pastel is a simple library to help you colorize strings in your
2902terminal.")
2903 (license license:expat)))
2904
2905(define-public python-pathlib-abc
2906 (package
2907 (name "python-pathlib-abc")
2908 (version "0.5.0")
2909 (source
2910 (origin
2911 (method url-fetch)
2912 (uri (pypi-uri "pathlib_abc" version))
2913 (sha256
2914 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2915 (build-system pyproject-build-system)
2916 (native-inputs (list python-pytest python-hatchling))
2917 (home-page "https://github.com/barneygale/pathlib-abc")
2918 (synopsis "Python base classes for rich path objects")
2919 (description
2920 "This package is a preview of pathlib functionality planned for a future
2921release of Python; specifically, it provides three ABCs that can be used to
2922implement path classes for non-local filesystems")
2923 (license license:psfl)))
2924
2925;; XXX: It's for [email protected], remove when no longer required.
2926(define-public python-pathlib-abc-for-python-pathy
2927 (hidden-package
2928 (package
2929 (inherit python-pathlib-abc)
2930 (version "0.1.1")
2931 (source
2932 (origin
2933 (method url-fetch)
2934 (uri (pypi-uri "pathlib_abc" version))
2935 (sha256
2936 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2937
2938(define-public python-pbs-installer
2939 (package
2940 (name "python-pbs-installer")
2941 (version "2025.09.18")
2942 (source
2943 (origin
2944 (method git-fetch)
2945 (uri (git-reference
2946 (url "https://github.com/frostming/pbs-installer")
2947 (commit version)))
2948 (file-name (git-file-name name version))
2949 (sha256
2950 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2951 (build-system pyproject-build-system)
2952 (arguments
2953 (list
2954 #:tests? #f ;no tests provided
2955 #:phases
2956 #~(modify-phases %standard-phases
2957 (add-before 'build 'set-version
2958 (lambda _
2959 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2960 (native-inputs
2961 (list python-pdm-backend
2962 python-pytest))
2963 (propagated-inputs
2964 (list python-httpx
2965 python-zstandard))
2966 (home-page "https://github.com/frostming/pbs-installer")
2967 (synopsis "Installer for Python Build Standalone")
2968 (description
2969 "This package implements an installer for
2970@url{https://github.com/astral-sh/python-build-standalone, Python Build
2971Standalone}.")
2972 (license license:expat)))
2973
2974(define-public python-phply
2975 (package
2976 (name "python-phply")
2977 (version "1.2.6")
2978 (source
2979 (origin
2980 (method url-fetch)
2981 (uri (pypi-uri "phply" version))
2982 (sha256
2983 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2984 (build-system pyproject-build-system)
2985 (native-inputs
2986 (list python-pytest
2987 python-setuptools))
2988 (propagated-inputs
2989 (list python-ply))
2990 (home-page "https://github.com/viraptor/phply")
2991 (synopsis "PHP parser written in Python using PLY")
2992 (description
2993 "@code{phply} is a parser for the PHP programming language written using
2994PLY,a Lex/YACC-style parser generator toolkit for Python.")
2995 (license license:bsd-3)))
2996
2997(define-public python-puccinialin
2998 (package
2999 (name "python-puccinialin")
3000 (version "0.1.5")
3001 (source
3002 (origin
3003 (method url-fetch)
3004 (uri (pypi-uri "puccinialin" version))
3005 (sha256
3006 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
3007 (build-system pyproject-build-system)
3008 (arguments
3009 (list #:tests? #f)) ;no tests in PyPI or Git
3010 (native-inputs
3011 (list python-hatchling))
3012 (propagated-inputs
3013 (list python-httpx
3014 python-platformdirs
3015 python-tqdm))
3016 (home-page "https://github.com/konstin/puccinialin")
3017 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
3018 (description
3019 "This tool helps to install Rust into a temporary directory, allowing
3020support of Rust-based Python builds. Cargo and rustc are installed into a
3021cache directory, to avoid modifying the host's environment, and further
3022activated using a set of environment variables.")
3023 (license (list license:expat license:asl2.0))))
3024
3025(define-public python-py010parser
3026 (package
3027 (name "python-py010parser")
3028 (version "0.1.18")
3029 (source
3030 (origin
3031 (method git-fetch)
3032 (uri (git-reference
3033 (url "https://github.com/d0c-s4vage/py010parser")
3034 (commit (string-append "v" version))))
3035 (file-name (git-file-name name version))
3036 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
3037 (modules '((guix build utils)))
3038 (snippet #~(begin
3039 ;; Unbundle ply.
3040 (substitute* "requirements.txt"
3041 (("^six\\>.*") ""))
3042 (substitute* "setup.py"
3043 (("(packages += \\['py010parser').*\\]" all first)
3044 (string-append first "]")))
3045 (delete-file-recursively "py010parser/ply")
3046 (substitute* (find-files "py010parser" "\\.py$")
3047 ((" .*\\.ply\\>") " ply"))
3048 ;; Avoid regenerating the lex table.
3049 (substitute* '("py010parser/__init__.py"
3050 "py010parser/c_parser.py")
3051 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
3052 (string-append open "False" close)))
3053 (substitute* '("py010parser/__init__.py"
3054 "setup.py")
3055 (("\\{\\{VERSION\\}\\}") #$version))
3056 (substitute* "setup.cfg"
3057 (("description-file") "description_file"))))))
3058 (build-system pyproject-build-system)
3059 (arguments (list #:test-backend #~'unittest
3060 #:test-flags #~'("discover" "tests")))
3061 (propagated-inputs (list python-regex python-ply))
3062 (native-inputs (list python-setuptools))
3063 (home-page "https://github.com/d0c-s4vage/py010parser")
3064 (synopsis "Parser of 010 editor's template")
3065 (description
3066 "@code{py010parser} is a Python library for parsing templates
3067for the Sweetscape 010 binary-format editor.")
3068 (license license:bsd-3)))
3069
3070(define-public python-pyasynchat
3071 (package
3072 (name "python-pyasynchat")
3073 (version "1.0.5")
3074 (source
3075 (origin
3076 (method git-fetch)
3077 (uri (git-reference
3078 (url "https://github.com/simonrob/pyasynchat")
3079 (commit (string-append "v" version))))
3080 (file-name (git-file-name name version))
3081 (sha256
3082 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
3083 (build-system pyproject-build-system)
3084 (native-inputs
3085 (list python-pytest
3086 python-setuptools))
3087 (propagated-inputs
3088 (list python-pyasyncore))
3089 (home-page "https://github.com/simonrob/pyasynchat")
3090 (synopsis "Make asynchat available for Python 3.12 onwards")
3091 (description
3092 "This package contains the
3093@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
3094found in Python versions prior to 3.12. It is provided so that existing code
3095relying on @code{import asynchat} is able to continue being used without
3096significant refactoring.")
3097 (license license:psfl)))
3098
3099(define-public python-pyasyncore
3100 (package
3101 (name "python-pyasyncore")
3102 (version "1.0.5")
3103 (source
3104 (origin
3105 (method git-fetch)
3106 (uri (git-reference
3107 (url "https://github.com/simonrob/pyasyncore")
3108 (commit (string-append "v" version))))
3109 (file-name (git-file-name name version))
3110 (sha256
3111 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
3112 (build-system pyproject-build-system)
3113 (native-inputs (list python-pytest python-setuptools))
3114 (home-page "https://github.com/simonrob/pyasyncore")
3115 (synopsis "Make asyncore available for Python 3.12 onwards")
3116 (description
3117 "This package contains the
3118@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
3119found in Python versions prior to 3.12. It is provided so that existing code
3120relying on @code{import asyncore} is able to continue being used without
3121significant refactoring.")
3122 (license license:psfl)))
3123
3124(define-public python-pyconify
3125 (package
3126 (name "python-pyconify")
3127 (version "0.2.1")
3128 (source
3129 (origin
3130 (method git-fetch)
3131 (uri (git-reference
3132 (url "https://github.com/pyapp-kit/pyconify")
3133 (commit (string-append "v" version))))
3134 (file-name (git-file-name name version))
3135 (sha256
3136 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
3137 (build-system pyproject-build-system)
3138 (arguments
3139 (list #:tests? #f)) ;require netwok access
3140 (native-inputs
3141 (list python-hatch-vcs
3142 python-hatchling))
3143 (propagated-inputs
3144 (list python-requests))
3145 (home-page "https://github.com/pyapp-kit/pyconify")
3146 (synopsis "Python wrapper for the Iconify API")
3147 (description
3148 "This packge provides a Python wrapper for the
3149@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
3150framework that includes 100+ icon sets with more than 100,000 icons from
3151FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
3152Emoji and many other open source icon sets.")
3153 (license license:bsd-3)))
3154
3155(define-public python-pygls
3156 (package
3157 (name "python-pygls")
3158 (version "2.0.0")
3159 (source
3160 (origin
3161 (method git-fetch)
3162 (uri (git-reference
3163 (url "https://github.com/openlawlibrary/pygls")
3164 (commit (string-append "v" version))))
3165 (file-name (git-file-name name version))
3166 (sha256
3167 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
3168 (build-system pyproject-build-system)
3169 ;; tests: 265 passed, 8 skipped
3170 (native-inputs
3171 (list python-pytest
3172 python-pytest-asyncio
3173 python-poetry-core))
3174 (propagated-inputs
3175 (list python-attrs
3176 python-cattrs
3177 python-lsprotocol))
3178 (home-page "https://github.com/openlawlibrary/pygls")
3179 (synopsis "Pythonic generic language server")
3180 (description
3181 "This package provides a pythonic generic language server (pronounced
3182like pie glass').")
3183 (license license:asl2.0)))
3184
3185(define-public python-pyls-spyder
3186 (package
3187 (name "python-pyls-spyder")
3188 (version "0.4.0")
3189 (source
3190 (origin
3191 (method git-fetch)
3192 (uri (git-reference
3193 (url "https://github.com/spyder-ide/pyls-spyder")
3194 (commit (string-append "v" version))))
3195 (file-name (git-file-name name version))
3196 (sha256
3197 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
3198 (build-system pyproject-build-system)
3199 (propagated-inputs (list python-lsp-server))
3200 (native-inputs (list python-pytest python-setuptools))
3201 (home-page "https://github.com/spyder-ide/pyls-spyder")
3202 (synopsis "Spyder extensions for @code{python-lsp-server}")
3203 (description "This package provides Spyder-specific extras for the
3204Language Server Protocol (LSP) on Python, such as document symbol searching
3205and others.")
3206 (license license:expat)))
3207
3208(define-public python-pylsp-rope
3209 (package
3210 (name "python-pylsp-rope")
3211 (version "0.1.17")
3212 (source
3213 (origin
3214 (method git-fetch)
3215 (uri (git-reference
3216 (url "https://github.com/python-rope/pylsp-rope")
3217 (commit version)))
3218 (file-name (git-file-name name version))
3219 (sha256
3220 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
3221 (build-system pyproject-build-system)
3222 (native-inputs
3223 (list python-pytest
3224 python-setuptools))
3225 (propagated-inputs
3226 (list python-lsp-server
3227 python-rope))
3228 (home-page "https://github.com/python-rope/pylsp-rope")
3229 (synopsis
3230 "Extended refactoring capabilities for Python LSP Server using Rope")
3231 (description
3232 "This plugs in to Python LSP Server, adding code actions that refactor
3233using Rope.")
3234 (license license:expat)))
3235
3236(define-public python-pypydispatcher
3237 (package
3238 (name "python-pypydispatcher")
3239 (version "2.1.2")
3240 (source
3241 (origin
3242 (method url-fetch)
3243 (uri (pypi-uri "PyPyDispatcher" version))
3244 (sha256
3245 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
3246 (build-system pyproject-build-system)
3247 (native-inputs
3248 (list python-pytest
3249 python-setuptools
3250 python-setuptools-scm))
3251 (home-page "https://github.com/scrapy/pypydispatcher")
3252 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
3253 (description
3254 "This package implements a functionality of pulti-producer-multi-consumer
3255signal dispatching mechanism. It's a fork of
3256http://pydispatcher.sourceforge.net/ with PyPy support.")
3257 (license license:bsd-3)))
3258
3259(define-public python-pyread-eagle
3260 (package
3261 (name "python-pyread-eagle")
3262 (version "1.0.3")
3263 (source
3264 (origin
3265 (method git-fetch)
3266 (uri (git-reference
3267 (url "https://github.com/kyleaoman/pyread_eagle")
3268 (commit version)))
3269 (file-name (git-file-name name version))
3270 (sha256
3271 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3272 (build-system pyproject-build-system)
3273 (arguments
3274 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3275 (list #:tests? #f))
3276 (native-inputs
3277 (list python-setuptools))
3278 (propagated-inputs
3279 (list python-h5py
3280 python-numpy))
3281 (home-page "https://github.com/kyleaoman/pyread_eagle")
3282 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3283 (description
3284 "This package provides a pure-python port of
3285@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3286 (license license:gpl3)))
3287
3288(define-public python-pyserial-asyncio-fast
3289 (package
3290 (name "python-pyserial-asyncio-fast")
3291 (version "0.16")
3292 (source
3293 (origin
3294 (method git-fetch)
3295 (uri (git-reference
3296 (url
3297 "https://github.com/home-assistant-libs/pyserial-asyncio-fast")
3298 (commit version)))
3299 (file-name (git-file-name name version))
3300 (sha256
3301 (base32 "1chnqa895rhnl0ygbspp5xmxw60vsvyybk2z93pvxjsm4m574hkc"))))
3302 (build-system pyproject-build-system)
3303 (arguments
3304 (list
3305 #:test-backend
3306 #~'unittest))
3307 (native-inputs (list python-setuptools))
3308 (propagated-inputs (list python-pyserial))
3309 (home-page "https://github.com/home-assistant-libs/pyserial-asyncio-fast")
3310 (synopsis "Fast asyncio extension package for pyserial")
3311 (description
3312 "Async I/O extension package for the Python Serial Port Extension.
3313This version implements eager writes like cpython asyncio selector_events does.
3314This can significantly reduce overhead since the asyncio writer is no longer
3315added and removed frequently.
3316
3317This package is a fork of unmaintained package @code{pyserial-asyncio}
3318@url{https://github.com/pyserial/pyserial-asyncio}.")
3319 (license license:bsd-3)))
3320
3321(define-public python-pyte
3322 (package
3323 (name "python-pyte")
3324 (version "0.8.2")
3325 (source
3326 (origin
3327 (method git-fetch)
3328 (uri (git-reference
3329 (url "https://github.com/selectel/pyte")
3330 (commit version)))
3331 (file-name (git-file-name name version))
3332 (sha256
3333 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3334 (build-system pyproject-build-system)
3335 (propagated-inputs (list python-wcwidth))
3336 (native-inputs (list python-pytest python-setuptools python-wheel))
3337 (home-page "https://pyte.readthedocs.io/")
3338 (synopsis "Simple VTXXX-compatible terminal emulator")
3339 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3340emulator. @var{VTxxx} stands for a series of video terminals, developed by
3341DEC between 1970 and 1995. The first and probably most famous one was the
3342VT100 terminal, which is now a de-facto standard for all virtual terminal
3343emulators.
3344
3345pyte is a fork of vt102, which was an incomplete pure Python implementation
3346of VT100 terminal.")
3347 (license license:lgpl3+)))
3348
3349(define-public python-pytokens
3350 (package
3351 (name "python-pytokens")
3352 (version "0.4.1")
3353 (source
3354 (origin
3355 (method git-fetch)
3356 (uri (git-reference
3357 (url "https://github.com/tusharsadhwani/pytokens")
3358 (commit version)))
3359 (file-name (git-file-name name version))
3360 (sha256
3361 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3362 (build-system pyproject-build-system)
3363 (arguments
3364 (list
3365 #:phases
3366 #~(modify-phases %standard-phases
3367 (add-before 'build 'build-with-cython
3368 (lambda _
3369 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3370 (native-inputs
3371 (list python-cython
3372 python-pytest
3373 python-setuptools))
3374 (home-page "https://github.com/tusharsadhwani/pytokens")
3375 (synopsis "Spec compliant Python 3.14+ tokenizer")
3376 (description
3377 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3378runs on older Pythons.")
3379 (license license:expat)))
3380
3381(define-public python-pyuca
3382 (package
3383 (name "python-pyuca")
3384 (version "1.2")
3385 (source
3386 (origin
3387 (method git-fetch)
3388 (uri (git-reference
3389 (url "https://github.com/jtauber/pyuca")
3390 (commit (string-append "v" version))))
3391 (file-name (git-file-name name version))
3392 (sha256
3393 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3394 (build-system pyproject-build-system)
3395 (arguments
3396 (list #:tests? #f)) ; there are no tests
3397 (native-inputs (list python-setuptools))
3398 (home-page "https://github.com/jtauber/pyuca")
3399 (synopsis "Python implementation of the Unicode Collation Algorithm")
3400 (description "This package provides a Python implementation of the
3401@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3402 (license license:expat)))
3403
3404(define-public python-pyxdameraulevenshtein
3405 (package
3406 (name "python-pyxdameraulevenshtein")
3407 (version "1.8.0")
3408 (source
3409 (origin
3410 (method git-fetch)
3411 (uri (git-reference
3412 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3413 (commit (string-append "v" version))))
3414 (file-name (git-file-name name version))
3415 (sha256
3416 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3417 (build-system pyproject-build-system)
3418 (native-inputs (list python-cython python-pytest python-setuptools))
3419 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3420 (synopsis "Damerau-Levenshtein edit distance algorithm")
3421 (description
3422 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3423edit distance algorithm for Python in Cython for high performance.")
3424 (license license:bsd-3)))
3425
3426(define-public python-qrcodegen
3427 (package
3428 (name "python-qrcodegen")
3429 (version "1.8.0")
3430 (source
3431 (origin
3432 (method git-fetch)
3433 (uri (git-reference
3434 (url "https://github.com/nayuki/QR-Code-generator")
3435 (commit (string-append "v" version))))
3436 (sha256
3437 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3438 (build-system pyproject-build-system)
3439 (arguments
3440 (list
3441 #:tests? #f ;no tests
3442 #:phases
3443 #~(modify-phases %standard-phases
3444 (add-before 'build 'chdir
3445 (lambda _
3446 (chdir "python"))))))
3447 (native-inputs (list python-setuptools))
3448 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3449 (synopsis "QR Code generator")
3450 (description
3451 "@code{python-qrcodegen} is a QR code generator library in Python.")
3452 (license license:expat)))
3453
3454(define-public python-rectpack
3455 (package
3456 (name "python-rectpack")
3457 (version "0.2.2")
3458 (source
3459 (origin
3460 (method git-fetch)
3461 (uri (git-reference
3462 (url "https://github.com/secnot/rectpack/")
3463 (commit version)))
3464 (file-name (git-file-name name version))
3465 (sha256
3466 (base32 "0y6nzpqny2knlq5g53wdnrznv10xv21rbzmlbq5xgf92gi7i6kci"))))
3467 (build-system pyproject-build-system)
3468 (arguments (list #:test-backend #~'unittest))
3469 (native-inputs (list python-setuptools))
3470 (home-page "https://github.com/secnot/rectpack/")
3471 (synopsis "2D Rectangle packing Python library")
3472 (description "Rectpack is a collection of heuristic algorithms for solving
3473the 2D knapsack or bin packing problem, consisting on packing a set of
3474rectangles into the smallest number of bins.")
3475 (license license:asl2.0)))
3476
3477(define-public python-refleak
3478 (package
3479 (name "python-refleak")
3480 (version "0.2.2")
3481 (source
3482 (origin
3483 (method git-fetch)
3484 (uri (git-reference
3485 (url "https://github.com/mne-tools/refleak")
3486 (commit (string-append "v" version))))
3487 (file-name (git-file-name name version))
3488 (sha256
3489 (base32 "1851pxcbvdab1wq64drkw873mis9yqrvamsv0cxj7p6p4l7nfj4h"))))
3490 (build-system pyproject-build-system)
3491 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
3492 (home-page "https://github.com/mne-tools/refleak")
3493 (synopsis "Track down reference leaks in Python")
3494 (description
3495 "This package provides a library to find out what is still holding a
3496reference to an object that should be dead. It is used to track down reference
3497leaks in @code{MNE-Python}, @code{PyVista} and @code{pyvistaqt}.")
3498 (license license:bsd-3)))
3499
3500(define-public python-represent
3501 (package
3502 (name "python-represent")
3503 (version "2.1")
3504 (source
3505 (origin
3506 (method url-fetch)
3507 (uri (pypi-uri "Represent" version))
3508 (sha256
3509 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3510 (build-system pyproject-build-system)
3511 (native-inputs
3512 ;; XXX This might be too much for testing, maybe switch them off as it's
3513 ;; a simple middleware library.
3514 (list python-ipython
3515 python-pytest
3516 python-rich
3517 python-setuptools))
3518 (home-page "https://github.com/RazerM/represent")
3519 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3520 (description
3521 "This package implements a functionality to generate Python
3522@code{__repr__} methods automatically or declaratively.")
3523 (license license:expat)))
3524
3525(define-public python-rich-argparse
3526 (package
3527 (name "python-rich-argparse")
3528 (version "1.8.0")
3529 (source
3530 (origin
3531 (method git-fetch)
3532 (uri (git-reference
3533 (url "https://github.com/hamdanal/rich-argparse")
3534 (commit (string-append "v" version))))
3535 (file-name (git-file-name name version))
3536 (sha256
3537 (base32
3538 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3539 (build-system pyproject-build-system)
3540 (native-inputs
3541 (list python-pytest
3542 python-hatchling))
3543 (propagated-inputs
3544 (list python-rich))
3545 (home-page "https://github.com/hamdanal/rich-argparse")
3546 (synopsis "Format argparse and optparse help using rich")
3547 (description
3548 "This package improves the look and readability of argparse's help while
3549requiring minimal changes to the code.")
3550 (license license:expat)))
3551
3552(define-public python-rich-rst
3553 (package
3554 (name "python-rich-rst")
3555 (version "2.0.1")
3556 (source
3557 (origin
3558 (method git-fetch)
3559 (uri (git-reference
3560 (url "https://github.com/wasi-master/rich-rst")
3561 (commit (string-append "v" version))))
3562 (file-name (git-file-name name version))
3563 (sha256
3564 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3565 (build-system pyproject-build-system)
3566 (native-inputs
3567 (list python-pytest
3568 python-setuptools))
3569 (propagated-inputs
3570 (list python-pygments
3571 python-rich))
3572 (home-page "https://wasi-master.github.io/rich-rst")
3573 (synopsis "Beautiful reStructuredText renderer for Rich")
3574 (description
3575 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3576documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3577renderables.")
3578 (license license:expat)))
3579
3580(define-public python-roman-numerals
3581 (package
3582 (name "python-roman-numerals")
3583 (version "3.1.0")
3584 (source
3585 (origin
3586 (method url-fetch)
3587 (uri (pypi-uri "roman_numerals" version))
3588 (sha256
3589 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3590 (build-system pyproject-build-system)
3591 (native-inputs (list python-flit-core python-pytest))
3592 (home-page "https://pypi.org/project/roman-numbers/")
3593 (synopsis "Python library to manipulate Roman numerals")
3594 (description "This package provides a Python library to manipulate
3595well-formed Roman numerals.")
3596 (license license:expat)))
3597
3598(define-public python-runs
3599 (package
3600 (name "python-runs")
3601 (version "1.3.0")
3602 (source
3603 (origin
3604 (method git-fetch)
3605 (uri (git-reference
3606 (url "https://github.com/rec/runs")
3607 (commit (string-append "v" version))))
3608 (file-name (git-file-name name version))
3609 (sha256
3610 (base32 "0grzfnamxgnpvf3m0c139sknyj31vsvcplvcng6maq60xvnqrbw1"))))
3611 (build-system pyproject-build-system)
3612 (arguments
3613 (list
3614 #:test-flags
3615 ;; Expecting ".git".
3616 #~(list "--deselect=test/test_runs.py::TestRunsActual::test_many")))
3617 (native-inputs (list python-pytest python-tdir python-uv-build))
3618 (propagated-inputs (list python-xmod))
3619 (home-page "https://github.com/rec/runs")
3620 (synopsis "Run a block of text as a subprocess")
3621 (description
3622 "@code{runs} has improved versions of @code{call()}, @code{check_call()},
3623@code{check_output()}, and @code{run()} from Python's subprocess module that
3624handle multiple commands and blocks of text, fix some defects, and add some
3625features.")
3626 (license license:expat)))
3627
3628(define-public python-rush
3629 (package
3630 (name "python-rush")
3631 (version "2021.04.0")
3632 (source
3633 (origin
3634 (method git-fetch)
3635 (uri (git-reference
3636 (url "https://github.com/sigmavirus24/rush")
3637 (commit version)))
3638 (file-name (git-file-name name version))
3639 (sha256
3640 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3641 (build-system pyproject-build-system)
3642 (arguments
3643 (list
3644 #:test-flags
3645 ;; E ValueError: Redis URL must specify one of the following schemes
3646 ;; (redis://, rediss://, unix://)
3647 #~(list "-k" (string-append "not test_valid_url[redis://]"
3648 " and not test_valid_url[rediss://]"))))
3649 (native-inputs
3650 (list python-mock
3651 python-redis
3652 python-rfc3986
3653 python-pytest
3654 python-setuptools))
3655 (propagated-inputs
3656 (list python-attrs))
3657 (home-page "https://github.com/sigmavirus24/rush")
3658 (synopsis "Throttling and rate-limiting algorithms for Python")
3659 (description
3660 "This package provides is a small collection of algorithms that can be
3661reused when throttling user interactions with a resource (e.g., an API).")
3662 (license license:expat)))
3663
3664(define-public python-rustworkx
3665 (package
3666 (name "python-rustworkx")
3667 (version "0.17.1")
3668 (source
3669 (origin
3670 (method git-fetch)
3671 (uri (git-reference
3672 (url "https://github.com/Qiskit/rustworkx")
3673 (commit version)))
3674 (file-name (git-file-name name version))
3675 (sha256
3676 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3677 (build-system pyproject-build-system)
3678 (arguments
3679 (list
3680 #:test-flags #~(list "--test-path" "tests")
3681 #:imported-modules (append %cargo-build-system-modules
3682 %pyproject-build-system-modules)
3683 #:modules '(((guix build cargo-build-system)
3684 #:prefix cargo:)
3685 (guix build pyproject-build-system)
3686 (guix build utils))
3687 #:phases
3688 #~(modify-phases %standard-phases
3689 (add-after 'unpack 'prepare-cargo-build-system
3690 (lambda args
3691 (for-each
3692 (lambda (phase)
3693 (format #t "Running cargo phase: ~a~%" phase)
3694 (apply (assoc-ref cargo:%standard-phases phase)
3695 #:cargo-target #$(cargo-triplet) args))
3696 '(unpack-rust-crates
3697 configure
3698 check-for-pregenerated-files
3699 patch-cargo-checksums))))
3700 (add-before 'check 'pre-check
3701 (lambda _
3702 ;; Delete the source directory to avoid interference.
3703 (delete-file-recursively "rustworkx")
3704 ;; Matplotlib needs to be able to write its configuration file
3705 ;; somewhere.
3706 (setenv "MPLCONFIGDIR" "/tmp")
3707 ;; For fontconfig.
3708 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3709 (propagated-inputs (list python-numpy))
3710 (native-inputs
3711 (append (list graphviz
3712 python-matplotlib
3713 python-networkx
3714 python-pillow
3715 python-setuptools
3716 python-setuptools-rust
3717 python-stestr
3718 rust
3719 `(,rust "cargo"))
3720 (or (and=> (%current-target-system)
3721 (compose list make-rust-sysroot))
3722 '())))
3723 (inputs (cargo-inputs 'python-rustworkx))
3724 (home-page "https://www.rustworkx.org")
3725 (synopsis "High performance graph library for Python")
3726 (description
3727 "@code{rustworkx} is a Python package for working with graphs and complex
3728networks. It enables the creation, interaction with, and study of graphs and
3729networks.")
3730 (license license:asl2.0)))
3731
3732(define-public python-safety-schemas
3733 (package
3734 (name "python-safety-schemas")
3735 (version "0.0.19")
3736 (source
3737 (origin
3738 (method url-fetch)
3739 (uri (pypi-uri "safety_schemas" version))
3740 (sha256
3741 (base32 "13dany62q262l08441aps815nz42k9mcd3lgjs5z592j91nz10a7"))))
3742 (build-system pyproject-build-system)
3743 (arguments
3744 (list
3745 #:test-flags
3746 #~(list "-k" (string-join
3747 ;; These tests are failing for unknown reasons.
3748 ;; (AssertionError).
3749 (list "not test_model[ConfigModel-ConfigModel]"
3750 "test_model[MetadataModel-MetadataModel]"
3751 "test_model[PolicyFileModel-PolicyFileModel]"
3752 "test_model[ProjectModel-ProjectModel]"
3753 "test_model[ReportModel-ReportModel]")
3754 " and not "))))
3755 (propagated-inputs (list python-dparse
3756 python-packaging
3757 python-pydantic
3758 python-ruamel.yaml
3759 python-typing-extensions))
3760 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3761 ;; Source code is not yet published outside of PyPI:
3762 ;; https://github.com/pyupio/safety/issues/494
3763 (home-page "https://pypi.org/project/safety-schemas/")
3764 (synopsis "Schemas for Safety tools")
3765 (description "This package contains models and schemas used by Safety.")
3766 (license license:expat)))
3767
3768(define-public python-scverse-misc
3769 (package
3770 (name "python-scverse-misc")
3771 (version "0.1.1")
3772 (source
3773 (origin
3774 (method git-fetch)
3775 (uri (git-reference
3776 (url "https://github.com/scverse/scverse-misc")
3777 (commit (string-append "v" version))))
3778 (file-name (git-file-name name version))
3779 (sha256
3780 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3781 (build-system pyproject-build-system)
3782 (arguments
3783 (list
3784 #:test-flags
3785 ;; Optinal tests, Pydantic fails to validate inputs.
3786 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3787 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3788 (native-inputs
3789 (list python-hatch-vcs
3790 python-hatchling
3791 python-pytest
3792 python-pyyaml))
3793 (propagated-inputs
3794 (list python-session-info2
3795 python-typing-extensions
3796 ;; [optional]
3797 python-dotenv
3798 python-pydantic-settings))
3799 (home-page "https://github.com/scverse/scverse-misc")
3800 (synopsis "Miscellaneous utility code used by scverse packages")
3801 (description
3802 "This package provides miscellaneous utility code used by scverse
3803packages.")
3804 (license license:bsd-3)))
3805
3806(define-public python-senf
3807 (package
3808 (name "python-senf")
3809 (version "1.5.1")
3810 (source
3811 (origin
3812 (method git-fetch)
3813 (uri (git-reference
3814 (url "https://github.com/quodlibet/senf")
3815 (commit (string-append "v" version))))
3816 (file-name (git-file-name name version))
3817 (sha256
3818 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3819 (build-system pyproject-build-system)
3820 (arguments
3821 (list
3822 #:test-flags
3823 ;; These tests fail due to various home fetching methods during build.
3824 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3825 "--deselect" "tests/test_api.py::test_expanduser_user")))
3826 (native-inputs (list python-pytest python-setuptools))
3827 (home-page "https://github.com/quodlibet/senf")
3828 (synopsis "Text, bytes and paths conversion functions for Python")
3829 (description "Senf introduces a new platform native string type called
3830fsnative. It adds functions to convert text, bytes and paths to and from that
3831new type and helper functions to integrate it nicely with the Python
3832stdlib.")
3833 (license license:expat)))
3834
3835(define-public python-session-info2
3836 (package
3837 (name "python-session-info2")
3838 (version "0.2")
3839 (source
3840 (origin
3841 (method url-fetch)
3842 (uri (pypi-uri "session_info2" version))
3843 (sha256
3844 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3845 (build-system pyproject-build-system)
3846 (arguments
3847 (list
3848 #:test-flags
3849 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3850 ;; Tests require Jupyter Client.
3851 "--ignore=tests/test_subprocess.py")))
3852 (native-inputs
3853 (list python-hatch-docstring-description
3854 python-hatch-vcs
3855 python-hatchling
3856 python-pytest
3857 python-pytest-asyncio))
3858 (home-page "https://session-info2.readthedocs.io/")
3859 (synopsis "Print versions of imported packages")
3860 (description
3861 "This package implements a functionality to print versions of imported
3862Python packages.")
3863 (license license:mpl2.0)))
3864
3865(define-public python-show-in-file-manager
3866 (package
3867 (name "python-show-in-file-manager")
3868 (version "1.1.6")
3869 (source
3870 (origin
3871 (method git-fetch)
3872 (uri (git-reference
3873 (url "https://github.com/damonlynch/showinfilemanager")
3874 (commit (string-append "v" version))))
3875 (file-name (git-file-name name version))
3876 (sha256
3877 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3878 (build-system pyproject-build-system)
3879 (arguments (list #:tests? #f)) ;no tests upstream
3880 (native-inputs
3881 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3882 (propagated-inputs
3883 (list python-packaging python-pyxdg))
3884 (home-page "https://github.com/damonlynch/showinfilemanager")
3885 (synopsis "Open the system file manager and select files in it")
3886 (description
3887 "Show in File Manager is a Python package to open the system file manager
3888and optionally select files in it. The point is not to open the files, but to
3889select them in the file manager, thereby highlighting the files and allowing
3890the user to quickly do something with them.")
3891 (license license:expat)))
3892
3893(define-public python-shxparser
3894 (package
3895 (name "python-shxparser")
3896 (version "0.0.2")
3897 (source
3898 (origin
3899 (method url-fetch)
3900 (uri (pypi-uri "shxparser" version))
3901 (sha256
3902 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3903 (build-system pyproject-build-system)
3904 (arguments (list #:test-backend #~'unittest))
3905 (native-inputs
3906 (list python-svgelements python-setuptools))
3907 (home-page "https://github.com/tatarize/shxparser")
3908 (synopsis "SHX line font parser")
3909 (description
3910 "This is a pure python parser for SHX Hershey font files that are an
3911AutoCad format which can encode single line fonts. This format is used for
3912many CNC and laser operations.")
3913 (license license:expat)))
3914
3915(define-public python-simplify-polyline
3916 (package
3917 (name "python-simplify-polyline")
3918 (version "0.1.0")
3919 (source
3920 (origin
3921 (method url-fetch)
3922 (uri (pypi-uri "simplify_polyline" version))
3923 (sha256
3924 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3925 (build-system pyproject-build-system)
3926 (native-inputs
3927 (list python-pytest
3928 python-setuptools
3929 python-setuptools-scm
3930 python-wheel))
3931 (propagated-inputs
3932 (list python-numpy))
3933 (home-page "https://github.com/ShayHill/simplify_polyline")
3934 (synopsis "Simplify an open or closed polyline")
3935 (description
3936 "This package implements functionality to work with plyline.
3937Features:
3938@itemize
3939@item Visvalingham-Whyatt - removes the smallest triangles formed by
3940three consecutive points in a polyline or polygon
3941@item Douglas-Peucker - gives a better representation of the convex hull
3942@end itemize")
3943 (license license:expat)))
3944
3945(define-public python-siphash24
3946 (package
3947 (name "python-siphash24")
3948 (version "1.8")
3949 (source
3950 (origin
3951 (method git-fetch)
3952 (uri (git-reference
3953 (url "https://github.com/dnicolodi/python-siphash24/")
3954 (commit (string-append "v" version))))
3955 (file-name (git-file-name name version))
3956 (sha256
3957 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3958 (build-system pyproject-build-system)
3959 (arguments
3960 (list
3961 #:test-backend #~'custom
3962 #:test-flags #~(list "test.py")
3963 #:phases
3964 #~(modify-phases %standard-phases
3965 (add-after 'unpack 'patch-pyproject
3966 (lambda _
3967 (substitute* "pyproject.toml"
3968 ;; meson-python: error: Field `project.license` has an invalid
3969 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3970 ;; LGPL-2.1-or-later`)
3971 (("^license = .*")
3972 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3973 (native-inputs
3974 (list pkg-config
3975 python-meson
3976 python-pytest))
3977 (inputs
3978 (list c-siphash))
3979 (home-page "https://github.com/dnicolodi/python-siphash24/")
3980 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3981 (description
3982 "This package provides a C-based implementation of
3983@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3984compatible with the hash functions provided by the hashlib standard library
3985module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3986 ;; They are in LICENSES directory:
3987 (license (list license:asl2.0
3988 license:lgpl2.1+))))
3989
3990(define-public python-snakesay
3991 (package
3992 (name "python-snakesay")
3993 (version "0.10.4")
3994 (source
3995 (origin
3996 (method git-fetch)
3997 (uri (git-reference
3998 (url "https://github.com/pythonanywhere/snakesay")
3999 (commit (string-append "v" version))))
4000 (file-name (git-file-name name version))
4001 (sha256
4002 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
4003 (build-system pyproject-build-system)
4004 (native-inputs (list python-pytest python-uv-build))
4005 (home-page "https://github.com/pythonanywhere/snakesay")
4006 (synopsis "Like @command{cowsay} but with Python flavor")
4007 (description
4008 "This package provides a simple ASCII art pictures generator of a
4009Snake with a message.")
4010 (license license:expat)))
4011
4012(define-public python-jaconv
4013 (package
4014 (name "python-jaconv")
4015 ;; Last release is not tagged.
4016 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
4017 (revision . "0")))
4018 (version (git-version "0.4.0"
4019 (assoc-ref properties 'revision)
4020 (assoc-ref properties 'commit)))
4021 (source
4022 (origin
4023 (method git-fetch)
4024 (uri (git-reference
4025 (url "https://github.com/ikegami-yukino/jaconv")
4026 (commit (assoc-ref properties 'commit))))
4027 (file-name (git-file-name name version))
4028 (sha256
4029 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
4030 (build-system pyproject-build-system)
4031 (native-inputs (list python-setuptools python-pynose))
4032 (home-page "https://github.com/ikegami-yukino/jaconv")
4033 (synopsis
4034 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
4035Hankaku, Zenkaku")
4036 (description
4037 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
4038Hankaku (half-width character) and Zenkaku (full-width character)")
4039 (license license:expat)))
4040
4041(define-public python-janus
4042 (package
4043 (name "python-janus")
4044 (version "1.0.0")
4045 (source
4046 (origin
4047 (method url-fetch)
4048 (uri (pypi-uri "janus" version))
4049 (sha256
4050 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
4051 (build-system pyproject-build-system)
4052 (native-inputs
4053 (list python-pytest python-pytest-asyncio
4054 python-setuptools python-wheel))
4055 (propagated-inputs (list python-typing-extensions))
4056 (home-page "https://github.com/aio-libs/janus/")
4057 (synopsis
4058 "Sync-async queue to interoperate between asyncio tasks and classic threads")
4059 (description
4060 "Mixed sync-async queue, supposed to be used for communicating between
4061classic synchronous (threaded) code and asynchronous (in terms of
4062@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
4063@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
4064library has two faces: synchronous and asynchronous interface. Synchronous is
4065fully compatible with
4066@url{https://docs.python.org/3/library/queue.html,standard queue},
4067asynchronous one follows
4068@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
4069design}.")
4070 (license license:asl2.0)))
4071
4072(define-public python-concurrent-log-handler
4073 (package
4074 (name "python-concurrent-log-handler")
4075 (version "0.9.25")
4076 ;; No tests in the PyPI tarball.
4077 (source
4078 (origin
4079 (method git-fetch)
4080 (uri (git-reference
4081 (url "https://github.com/Preston-Landers/concurrent-log-handler")
4082 (commit version)))
4083 (file-name (git-file-name name version))
4084 (sha256
4085 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
4086 (build-system pyproject-build-system)
4087 (arguments
4088 (list
4089 ;; XXX: Tests are broken, no new version fixing them yet.
4090 #:tests? #f))
4091 (native-inputs
4092 (list python-hatchling))
4093 (propagated-inputs
4094 (list python-portalocker))
4095 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
4096 (synopsis
4097 "Additional log handler for Python's standard @code{logging} package")
4098 (description
4099 "This package provides an additional log handler for Python's standard
4100@code{logging} package (PEP 282). This handler will write log events to a log
4101file which is rotated when the log file reaches a certain size. Multiple
4102processes can safely write to the same log file concurrently and rotated logs
4103can be gzipped if desired. An optional threaded queue logging handler is
4104provided to perform logging in the background.")
4105 (license license:asl2.0)))
4106
4107(define-public python-lazy
4108 (package
4109 (name "python-lazy")
4110 (version "1.6")
4111 (source
4112 (origin
4113 (method url-fetch)
4114 (uri (pypi-uri "lazy" version))
4115 (sha256
4116 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
4117 (build-system pyproject-build-system)
4118 (native-inputs (list python-pytest python-setuptools python-wheel))
4119 (home-page "https://github.com/stefanholek/lazy")
4120 (synopsis "Lazy attributes for Python objects")
4121 (description "This package provides a decorator to create lazy
4122attributes.")
4123 (license license:bsd-2)))
4124
4125(define-public python-logfury
4126 (package
4127 (name "python-logfury")
4128 (version "1.0.1")
4129 (source
4130 (origin
4131 (method url-fetch)
4132 (uri (pypi-uri "logfury" version))
4133 (sha256
4134 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
4135 (build-system pyproject-build-system)
4136 (native-inputs
4137 (list python-pytest
4138 python-setuptools
4139 python-setuptools-scm
4140 python-testfixtures
4141 python-wheel))
4142 (home-page "https://github.com/reef-technologies/logfury/")
4143 (synopsis "Logging of method calls for python libraries")
4144 (description
4145 "Logfury is a tool for python library maintainers. It allows for
4146responsible, low-boilerplate logging of method calls.")
4147 (license license:bsd-3)))
4148
4149(define-public python-logzero
4150 (package
4151 (name "python-logzero")
4152 (version "1.7.0")
4153 (source
4154 (origin
4155 (method git-fetch)
4156 (uri (git-reference
4157 (url "https://github.com/metachris/logzero")
4158 (commit (string-append "v" version))))
4159 (file-name (git-file-name name version))
4160 (sha256
4161 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
4162 (build-system pyproject-build-system)
4163 (native-inputs (list python-pytest python-setuptools))
4164 (home-page "https://github.com/metachris/logzero")
4165 (synopsis "Robust and effective logging for Python")
4166 (description
4167 "@code{logzero} provides a fully configured Python logger object for
4168easy logging and rotating to a console or a file.")
4169 (license license:expat)))
4170
4171(define-public python-logbook
4172 (package
4173 (name "python-logbook")
4174 (version "1.8.2")
4175 (source
4176 (origin
4177 (method url-fetch)
4178 (uri (pypi-uri "logbook" version))
4179 (sha256
4180 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
4181 (build-system pyproject-build-system)
4182 (native-inputs
4183 (list python-brotli
4184 python-cython
4185 python-pytest
4186 python-setuptools
4187 python-wheel))
4188 (home-page "https://github.com/getlogbook/logbook")
4189 (synopsis "Logbook is a logging replacement for Python")
4190 (description
4191 "Logbook is a logging system for Python that replaces the standard
4192library’s logging module. It was designed with both complex and simple
4193applications in mind and the idea to make logging fun.")
4194 (license license:bsd-3)))
4195
4196(define-public python-databind-core
4197 (package
4198 (name "python-databind-core")
4199 (version "4.4.2")
4200 (source
4201 (origin
4202 (method url-fetch)
4203 (uri (pypi-uri "databind.core" version))
4204 (sha256
4205 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
4206 (snippet
4207 #~(begin (use-modules (guix build utils))
4208 ;; The problem with python-typing-extensions >= 4.7 is only
4209 ;; with python-3.7.
4210 (substitute* "pyproject.toml"
4211 ((",<4.7.*") "\"\n"))))))
4212 (build-system pyproject-build-system)
4213 (arguments
4214 (list
4215 #:phases
4216 #~(modify-phases %standard-phases
4217 (add-after 'install 'fix-name
4218 (lambda* (#:key inputs outputs #:allow-other-keys)
4219 (let* ((sitedir (site-packages inputs outputs))
4220 (dist-info
4221 (string-append sitedir "/databind_core-" #$version ".dist-info")))
4222 (substitute* (string-append dist-info "/METADATA")
4223 (("Name: databind-core")
4224 "Name: databind.core"))
4225 (substitute* (string-append dist-info "/RECORD")
4226 (("databind_core") "databind.core"))
4227 (rename-file dist-info
4228 (string-append sitedir
4229 "/databind.core-"
4230 #$version ".dist-info"))))))))
4231 (propagated-inputs
4232 (list python-deprecated
4233 python-nr-date
4234 python-nr-stream
4235 python-typeapi
4236 python-typing-extensions))
4237 (native-inputs
4238 (list python-poetry-core python-pytest))
4239 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
4240 (synopsis
4241 "Library for de-/serializing Python dataclasses")
4242 (description
4243 "Databind is a library inspired by jackson-databind to de-/serialize
4244Python dataclasses.")
4245 (license license:expat)))
4246
4247(define-public python-databind-json
4248 (package
4249 (name "python-databind-json")
4250 (version "4.4.2")
4251 (source
4252 (origin
4253 (method url-fetch)
4254 (uri (pypi-uri "databind.json" version))
4255 (sha256
4256 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
4257 (snippet
4258 #~(begin (use-modules (guix build utils))
4259 ;; The problem with python-typing-extensions >= 4.7 is only
4260 ;; with python-3.7.
4261 (substitute* "pyproject.toml"
4262 ((",<4.7.*") "\"\n"))))))
4263 (build-system pyproject-build-system)
4264 (arguments
4265 (list
4266 #:phases
4267 #~(modify-phases %standard-phases
4268 (add-after 'install 'fix-name
4269 (lambda* (#:key inputs outputs #:allow-other-keys)
4270 (let* ((sitedir (site-packages inputs outputs))
4271 (dist-info
4272 (string-append sitedir "/databind_json-" #$version ".dist-info")))
4273 (substitute* (string-append dist-info "/METADATA")
4274 (("Name: databind-json")
4275 "Name: databind.json"))
4276 (substitute* (string-append dist-info "/RECORD")
4277 (("databind_json") "databind.json"))
4278 (rename-file dist-info
4279 (string-append sitedir
4280 "/databind.json-"
4281 #$version ".dist-info"))))))))
4282 (propagated-inputs
4283 (list python-databind-core python-nr-date
4284 python-typeapi python-typing-extensions))
4285 (native-inputs (list python-poetry-core python-pytest))
4286 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
4287 (synopsis
4288 "De-/serialize Python dataclasses to or from JSON payloads")
4289 (description
4290 "The @code{databind.json} package implements the de-/serialization to or
4291from JSON payloads using the @code{databind.core} framework.")
4292 (license license:expat)))
4293
4294(define-public python-docspec
4295 (package
4296 (name "python-docspec")
4297 (version "2.2.1")
4298 (source
4299 (origin
4300 (method url-fetch)
4301 (uri (pypi-uri "docspec" version))
4302 (sha256
4303 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
4304 (build-system pyproject-build-system)
4305 (arguments (list #:tests? #false)) ;there are none
4306 (propagated-inputs
4307 (list python-databind-core
4308 python-databind-json
4309 python-deprecated))
4310 (native-inputs
4311 (list python-poetry-core))
4312 (home-page "https://github.com/NiklasRosenstein/python-docspec")
4313 (synopsis "Represent API documentation of programming languages")
4314 (description
4315 "Docspec is a JSON object specification for representing API
4316documentation of programming languages.")
4317 (license license:expat)))
4318
4319(define-public python-docspec-python
4320 (package
4321 (name "python-docspec-python")
4322 (version "2.2.1")
4323 (source
4324 (origin
4325 (method url-fetch)
4326 (uri (pypi-uri "docspec_python" version))
4327 (sha256
4328 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
4329 (build-system pyproject-build-system)
4330 (arguments
4331 (list #:tests? #false)) ;there are none
4332 (propagated-inputs (list python-docspec python-nr-util))
4333 (native-inputs (list python-poetry-core))
4334 (home-page "https://github.com/NiklasRosenstein/docspec/")
4335 (synopsis "Produce docspec data from Python source code")
4336 (description
4337 "This package provides a parser based on @code{lib2to3} producing
4338@code{docspec} data from Python source code.")
4339 (license license:expat)))
4340
4341(define-public python-fqdn
4342 (package
4343 (name "python-fqdn")
4344 (version "1.5.1")
4345 (source
4346 (origin
4347 (method git-fetch)
4348 (uri (git-reference
4349 (url "https://github.com/ypcrts/fqdn")
4350 (commit (string-append "v" version))))
4351 (file-name (git-file-name name version))
4352 (sha256
4353 (base32 "1cfxpvlvfi9s20v93m3rgw7jn6ybc5ga5rwxhrap59zwd9crsh2g"))))
4354 (build-system pyproject-build-system)
4355 (native-inputs
4356 (list python-pytest
4357 python-setuptools))
4358 (home-page "https://github.com/ypcrts/fqdn")
4359 (synopsis "Validate domain names against RFC 1123")
4360 (description
4361 "This package validates fully-qualified domain names against RFC 1123, so
4362that they are acceptable to modern bowsers")
4363 (license license:mpl2.0)))
4364
4365(define-public python-fire
4366 (package
4367 (name "python-fire")
4368 (version "0.7.0")
4369 (source
4370 (origin
4371 (method url-fetch)
4372 (uri (pypi-uri "fire" version))
4373 (sha256
4374 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4375 (build-system pyproject-build-system)
4376 (propagated-inputs (list python-termcolor))
4377 (native-inputs (list python-pytest python-setuptools python-wheel))
4378 (synopsis "Library for automatically generating command line interfaces")
4379 (description
4380 "Fire is a library for automatically generating command line interfaces
4381from absolutely any Python object. The following are the advantages:
4382@itemize
4383@item A simple way to create a CLI in Python.
4384@item A helpful tool for developing and debugging Python code.
4385@item Helps with exploring existing code or turning other people's code into a
4386command line interface.
4387@item Makes transitioning between Bash and Python easier.
4388@item Makes using a Python REPL easier by setting up the REPL with the modules
4389and variables you'll need already imported and created.
4390@end itemize")
4391 (home-page "https://github.com/google/python-fire")
4392 (license license:asl2.0)))
4393
4394(define-public python-fit-nbinom
4395 (package
4396 (name "python-fit-nbinom")
4397 (version "1.1")
4398 (source (origin
4399 (method url-fetch)
4400 (uri (pypi-uri "fit_nbinom" version))
4401 (sha256
4402 (base32
4403 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4404 (build-system pyproject-build-system)
4405 (arguments
4406 (list
4407 #:tests? #false ;there are none
4408 #:phases
4409 '(modify-phases %standard-phases
4410 (add-after 'unpack 'remove-invalid-syntax
4411 (lambda _
4412 (substitute* "setup.py"
4413 ((".\\*\"") "\"")))))))
4414 (propagated-inputs (list python-numpy python-scipy))
4415 (native-inputs (list python-setuptools python-wheel))
4416 (home-page "https://github.com/joachimwolff/fit_nbinom")
4417 (synopsis "Negative binomial maximum likelihood estimator")
4418 (description "This package provides an implementation in Python using
4419scipy and numpy of negative binomial maximum likelihood estimation.")
4420 (license license:gpl3+)))
4421
4422(define-public python-docrep
4423 (package
4424 (name "python-docrep")
4425 (version "0.3.2")
4426 (source (origin
4427 (method url-fetch)
4428 (uri (pypi-uri "docrep" version))
4429 (sha256
4430 (base32
4431 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4432 (build-system pyproject-build-system)
4433 (propagated-inputs (list python-six))
4434 (native-inputs (list python-pytest python-setuptools python-wheel))
4435 (home-page "https://github.com/Chilipp/docrep")
4436 (synopsis "Python package for docstring repetition")
4437 (description "Docrep is the documentation repetition module. This module
4438targets developers that develop complex and nested Python APIs and helps them
4439to create a well-documented piece of software.")
4440 (license license:asl2.0)))
4441
4442(define-public python-dotmap
4443 (package
4444 (name "python-dotmap")
4445 (version "1.3.30")
4446 (source
4447 (origin
4448 (method url-fetch)
4449 (uri (pypi-uri "dotmap" version))
4450 (sha256
4451 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4452 (build-system pyproject-build-system)
4453 (arguments (list #:test-backend #~'unittest))
4454 (native-inputs (list python-setuptools))
4455 (home-page "https://github.com/drgrib/dotmap")
4456 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4457 (description
4458 "DotMap is a dot-access dictionary subclass that has dynamic
4459hierarchy creation, can be initialized with keys, can be initialized from a
4460dictionary, can be convert to a dictionary, and is ordered by insertion.")
4461 (license license:expat)))
4462
4463(define-public python-dotty-dict
4464 (package
4465 (name "python-dotty-dict")
4466 (version "1.3.1")
4467 (source
4468 (origin
4469 (method git-fetch)
4470 (uri (git-reference
4471 (url "https://github.com/pawelzny/dotty_dict")
4472 (commit (string-append "v" version))))
4473 (sha256
4474 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4475 (build-system pyproject-build-system)
4476 (native-inputs
4477 (list python-poetry-core
4478 python-pytest
4479 python-setuptools))
4480 (home-page "https://github.com/pawelzny/dotty_dict")
4481 (synopsis "Python library for accessing dictionaries using a dot syntax")
4482 (description "This package provides a library that wraps the traditional
4483Python dictionaries and provides a syntax to access nested dictionaries values
4484using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4485 (license license:expat)))
4486
4487(define-public python-affine
4488 (package
4489 (name "python-affine")
4490 (version "2.4.0")
4491 (source (origin
4492 (method url-fetch)
4493 (uri (pypi-uri "affine" version))
4494 (sha256
4495 (base32
4496 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4497 (build-system pyproject-build-system)
4498 (propagated-inputs (list python-flake8
4499 python-pytest python-pytest-cov))
4500 (native-inputs (list python-flit-core))
4501 (home-page "https://github.com/rasterio/affine")
4502 (synopsis "Matrices describing affine transformation of the plane")
4503 (description "This is a package for matrices describing the affine
4504transformation of the plane.")
4505 (license license:bsd-3)))
4506
4507(define-public python-argopt
4508 (package
4509 (name "python-argopt")
4510 (version "0.9.1")
4511 (source
4512 (origin
4513 (method url-fetch)
4514 (uri (pypi-uri "argopt" version))
4515 (sha256
4516 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4517 (build-system pyproject-build-system)
4518 (native-inputs
4519 (list python-pytest
4520 python-pytest-timeout
4521 python-setuptools
4522 python-setuptools-scm
4523 python-wheel))
4524 (home-page "https://github.com/casperdcl/argopt")
4525 (synopsis "Generate a command-line interface from a docstring")
4526 (description
4527 "This package provides tools to define a command line interface
4528from a docstring rather than the other way around.")
4529 (license license:mpl2.0)))
4530
4531(define-public python-array-api-compat
4532 (package
4533 (name "python-array-api-compat")
4534 (version "1.12.0")
4535 (source
4536 (origin
4537 (method url-fetch)
4538 (uri (pypi-uri "array_api_compat" version))
4539 (sha256
4540 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4541 (build-system pyproject-build-system)
4542 ;; Tests would require all supported array libraries, including pytorch
4543 (arguments (list #:tests? #false))
4544 (native-inputs
4545 (list python-setuptools))
4546 (home-page "https://data-apis.org/array-api-compat/")
4547 (synopsis "Array API compatibility wrapper for NumPy et al")
4548 (description
4549 "This package provides a wrapper around @code{NumPy} and other array
4550libraries to make them compatible with the Array API standard")
4551 (license license:expat)))
4552
4553(define-public python-array-api-strict
4554 (package
4555 (name "python-array-api-strict")
4556 (version "2.5")
4557 (source
4558 (origin
4559 (method url-fetch)
4560 (uri (pypi-uri "array_api_strict" version))
4561 (sha256
4562 (base32 "1ig116ld5k8wx82ahld4l7qcb0d4s5s4f4a0nrflrh3hzabyarvp"))))
4563 (build-system pyproject-build-system)
4564 (arguments
4565 (list
4566 ;; tests: 585 passed, 2 deselected
4567 #:test-flags
4568 ;; hypothesis.errors.InvalidArgument:
4569 ;; xp.__array_api_version__='2025.12', but it must be a valid version
4570 ;; string ('2021.12', '2022.12', '2023.12', '2024.12'). If the standard
4571 ;; version you want is not available, please ensure you're using the
4572 ;; latest version of Hypothesis, then open an issue if one doesn't
4573 ;; already exist.
4574 #~(list "--ignore=array_api_strict/tests/test_set_functions.py"
4575 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4576 "-k" (string-append "not test_disabled_extensions"
4577 " and not test_environment_variables"))))
4578 (native-inputs
4579 (list python-hypothesis
4580 python-pytest
4581 python-setuptools
4582 python-setuptools-scm))
4583 (propagated-inputs
4584 (list python-numpy))
4585 (home-page "https://data-apis.org/array-api-strict/")
4586 (synopsis "Strict implementation of the Python array API")
4587 (description
4588 "@code{array_api_strict} is a strict, minimal implementation of the
4589@url{https://data-apis.org/array-api/latest/, Python array API}.
4590
4591The purpose of array-api-strict is to provide an implementation of the array
4592API for consuming libraries to test against so they can be completely sure
4593their usage of the array API is portable.")
4594 (license license:bsd-3)))
4595
4596(define-public python-cachedir-tag
4597 (package
4598 (name "python-cachedir-tag")
4599 (version "0.0.4")
4600 (source
4601 (origin
4602 (method git-fetch)
4603 (uri (git-reference
4604 (url "https://github.com/moreati/python-cachedir-tag")
4605 (commit (string-append "v" version))))
4606 (file-name (git-file-name name version))
4607 (sha256
4608 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4609 (build-system pyproject-build-system)
4610 (arguments '(#:tests? #f)) ;no test
4611 (native-inputs (list python-setuptools))
4612 (home-page "https://github.com/moreati/python-cachedir-tag")
4613 (synopsis
4614 "Handle @file{CACHEDIR.TAG} in cache directories")
4615 (description
4616 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4617a file llowing any arbitrary directory to be marked as a cache directory.")
4618 (license license:expat)))
4619
4620(define-public python-cachetools
4621 (package
4622 (name "python-cachetools")
4623 (version "6.1.0")
4624 (source
4625 (origin
4626 (method url-fetch)
4627 (uri (pypi-uri "cachetools" version))
4628 (sha256
4629 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4630 (build-system pyproject-build-system)
4631 (native-inputs
4632 (list python-pytest
4633 python-setuptools
4634 python-wheel))
4635 (home-page "https://github.com/tkem/cachetools/")
4636 (synopsis "Extensible memoizing collections and decorators")
4637 (description "This module provides various memoizing collections and
4638decorators, including variants of the Python standard library's
4639@code{lru_cache} function decorator.")
4640 (license license:expat)))
4641
4642(define-public python-cachetools-5
4643 (package
4644 (inherit python-cachetools)
4645 (version "5.5.2")
4646 (source
4647 (origin
4648 (method url-fetch)
4649 (uri (pypi-uri "cachetools" version))
4650 (sha256
4651 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4652
4653(define-public python-colorclass
4654 (package
4655 (name "python-colorclass")
4656 (version "2.2.2")
4657 (source
4658 (origin
4659 (method git-fetch)
4660 (uri (git-reference
4661 (url "https://github.com/matthewdeanmartin/colorclass")
4662 (commit (string-append "v" version))))
4663 (file-name (git-file-name name version))
4664 (sha256
4665 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4666 (build-system pyproject-build-system)
4667 (arguments
4668 (list
4669 #:test-flags
4670 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4671 #:phases
4672 #~(modify-phases %standard-phases
4673 (add-after 'unpack 'use-poetry-core
4674 (lambda _
4675 ;; Patch to use the core poetry API.
4676 (substitute* "pyproject.toml"
4677 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4678 (native-inputs (list python-poetry-core python-pytest))
4679 (home-page "https://github.com/matthewdeanmartin/colorclass")
4680 (synopsis "Colorful console applications with Python")
4681 (description
4682 "This package provides an ANSI color text library for Python. It
4683provides automatic coloring for dark or light terminals.")
4684 (license license:expat)))
4685
4686(define-public python-colorcet
4687 (package
4688 (name "python-colorcet")
4689 (version "3.1.1a1")
4690 (source
4691 (origin
4692 (method url-fetch)
4693 (uri (pypi-uri "colorcet" version))
4694 (sha256
4695 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4696 (build-system pyproject-build-system)
4697 (native-inputs (list python-nbval
4698 python-packaging
4699 python-pytest
4700 python-pytest-mpl
4701 python-setuptools
4702 python-setuptools-scm))
4703 (home-page "https://colorcet.holoviz.org/")
4704 (synopsis "Collection of perceptually uniform colormaps")
4705 (description "Colorcet is a collection of perceptually accurate 256-color
4706colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4707HoloViews, and Datashader.")
4708 (license license:cc-by4.0)))
4709
4710(define-public python-colored
4711 (package
4712 (name "python-colored")
4713 (version "2.3.0")
4714 (source (origin
4715 (method git-fetch)
4716 (uri (git-reference
4717 (url "https://gitlab.com/dslackw/colored")
4718 (commit version)))
4719 (file-name (git-file-name name version))
4720 (sha256
4721 (base32
4722 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4723 (build-system pyproject-build-system)
4724 (arguments
4725 (list
4726 #:phases
4727 #~(modify-phases %standard-phases
4728 (add-before 'check 'pre-check
4729 (lambda _
4730 ;; Tests expect ANSI escape codes for colors.
4731 (setenv "FORCE_COLOR" "1"))))))
4732 (native-inputs (list python-flit-core python-pytest))
4733 (home-page "https://gitlab.com/dslackw/colored")
4734 (synopsis "Simple library for color and formatting to terminal")
4735 (description "This is a very simple Python library for color and
4736formatting in the terminal. It comes with a collection of color codes and
4737names for 256 color terminal setups.")
4738 (license license:expat)))
4739
4740(define-public python-colored-traceback
4741 ;; No tags in upstream repository.
4742 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4743 (revision "0"))
4744 (package
4745 (name "python-colored-traceback")
4746 (version (git-version "0.4.2" revision commit))
4747 (source
4748 (origin
4749 (method git-fetch)
4750 (uri (git-reference
4751 (url "https://github.com/staticshock/colored-traceback.py")
4752 (commit commit)))
4753 (file-name (git-file-name name version))
4754 (sha256
4755 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4756 (build-system pyproject-build-system)
4757 (arguments
4758 ;; Tests are incompatible with current python version.
4759 (list #:tests? #f))
4760 (propagated-inputs (list python-colorama python-pygments))
4761 (native-inputs (list python-setuptools python-wheel))
4762 (home-page "https://github.com/staticshock/colored-traceback.py")
4763 (synopsis "Automatically color uncaught exception tracebacks")
4764 (description "This package provides python utilities to automatically
4765color uncaught exception tracebacks.")
4766 (license license:isc))))
4767
4768(define-public python-colorful
4769 (package
4770 (name "python-colorful")
4771 (version "0.5.8")
4772 (source
4773 (origin
4774 (method git-fetch)
4775 (uri (git-reference
4776 (url "https://github.com/timofurrer/colorful")
4777 (commit (string-append "v" version))))
4778 (file-name (git-file-name name version))
4779 (sha256
4780 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4781 (build-system pyproject-build-system)
4782 (native-inputs
4783 (list python-pytest
4784 python-setuptools))
4785 (propagated-inputs
4786 (list python-colorama))
4787 (home-page "http://github.com/timofurrer/colorful")
4788 (synopsis "Terminal string styling")
4789 (description "Colorful provides an array of text styles, that can be used
4790as functions or string constants to form colored terminal output.")
4791 (license license:expat)))
4792
4793(define-public python-colorthief
4794 (package
4795 (name "python-colorthief")
4796 (version "0.2.1")
4797 (source
4798 (origin
4799 (method url-fetch)
4800 (uri (pypi-uri "colorthief" version))
4801 (sha256
4802 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4803 (build-system pyproject-build-system)
4804 (arguments
4805 (list #:tests? #f)) ;no tests in PyPI or Git
4806 (native-inputs (list python-setuptools))
4807 (propagated-inputs (list python-pillow))
4808 (home-page "https://github.com/fengsp/color-thief-py")
4809 (synopsis "Grab the color palette of an image")
4810 (description
4811 "This package provides methods to determine the dominant color
4812of an image, as well as constructing a representative color palette.")
4813 (license license:bsd-3)))
4814
4815(define-public python-construct-classes
4816 (package
4817 (name "python-construct-classes")
4818 (version "0.1.2")
4819 (source
4820 (origin
4821 (method git-fetch)
4822 (uri (git-reference
4823 (url "https://github.com/matejcik/construct-classes")
4824 (commit (string-append "v" version))))
4825 (file-name (git-file-name name version))
4826 (sha256
4827 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4828 (build-system pyproject-build-system)
4829 (propagated-inputs
4830 (list python-construct))
4831 (native-inputs
4832 (list python-poetry-core
4833 python-pytest))
4834 (home-page "https://github.com/matejcik/construct-classes")
4835 (synopsis "Parse binary structs into dataclasses")
4836 (description "This package provides a parser to parse binary structs
4837into dataclasses.")
4838 (license license:expat)))
4839
4840(define-public python-contourpy
4841 (package
4842 (name "python-contourpy")
4843 (version "1.3.3")
4844 (source
4845 (origin
4846 (method url-fetch)
4847 (uri (pypi-uri "contourpy" version))
4848 (sha256
4849 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4850 (build-system pyproject-build-system)
4851 (arguments
4852 (list
4853 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4854 #:test-flags
4855 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4856 #~(list "-m" "not image"
4857 ;; Tests that pass but avoided for load reasons.
4858 "-k" "not test_filled_random_big and not test_lines_random_big")))
4859 (native-inputs
4860 (list pybind11-2
4861 python-meson
4862 python-pytest
4863 python-wurlitzer))
4864 (propagated-inputs
4865 (list python-numpy))
4866 (home-page "https://contourpy.readthedocs.io/")
4867 (synopsis
4868 "Python library for calculating contours of 2D quadrilateral grids")
4869 (description
4870 "ContourPy is a Python library for calculating contours of 2D
4871quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4872 (license license:bsd-3)))
4873
4874(define-public python-lunr
4875 (package
4876 (name "python-lunr")
4877 (version "0.8.0")
4878 (source
4879 (origin
4880 (method url-fetch)
4881 (uri
4882 (pypi-uri "lunr" version))
4883 (sha256
4884 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4885 (build-system pyproject-build-system)
4886 (arguments
4887 (list
4888 #:test-flags
4889 '(list "-k" "not TestLanguageSupport"
4890 "--ignore-glob=tests/acceptance_tests/*")))
4891 (native-inputs
4892 (list python-hatch-fancy-pypi-readme
4893 python-hatchling
4894 python-pytest
4895 python-pytest-timeout))
4896 (propagated-inputs
4897 (list python-nltk))
4898 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4899 (synopsis "Full-text search library")
4900 (description "This package provides python library for full-text search.
4901It indexes documents and provides a search interface for retrieving documents
4902that best match text queries.")
4903 (license license:expat)))
4904
4905(define-public python-mdit-py-plugins
4906 (package
4907 (name "python-mdit-py-plugins")
4908 (version "0.5.0")
4909 (source (origin
4910 (method git-fetch) ;for tests
4911 (uri (git-reference
4912 (url "https://github.com/executablebooks/mdit-py-plugins")
4913 (commit (string-append "v" version))))
4914 (file-name (git-file-name name version))
4915 (sha256
4916 (base32
4917 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4918 (build-system pyproject-build-system)
4919 (propagated-inputs
4920 (list python-markdown-it-py
4921 python-attrs))
4922 (native-inputs
4923 (list python-flit-core
4924 python-pytest
4925 python-pytest-regressions))
4926 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4927 (synopsis "Collection of plugins for markdown-it-py")
4928 (description "This package contains a collection of plugins for
4929@code{markdown-it-py} like:
4930@enumerate
4931@item amsmath,
4932@item attrs,
4933@item container,
4934@item definition list,
4935@item dollarmath,
4936@item field list,
4937@item footnote,
4938@item textmath, and
4939@item wordcount.
4940@end enumerate")
4941 (license license:expat)))
4942
4943(define-public python-mdurl
4944 (package
4945 (name "python-mdurl")
4946 (version "0.1.2")
4947 (source
4948 (origin
4949 (method git-fetch)
4950 (uri (git-reference
4951 (url "https://github.com/executablebooks/mdurl")
4952 (commit version)))
4953 (file-name (git-file-name name version))
4954 (sha256
4955 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4956 (build-system pyproject-build-system)
4957 (native-inputs (list python-flit-core python-pytest))
4958 (home-page "https://github.com/executablebooks/mdurl")
4959 (synopsis "Markdown URL utilities")
4960 (description
4961 "This package implements a Python port of the JavaScript @code{mdurl}.")
4962 (license license:expat)))
4963
4964(define-public python-mkdocs
4965 (package
4966 (name "python-mkdocs")
4967 (version "1.6.1")
4968 (source
4969 (origin
4970 (method git-fetch)
4971 (uri (git-reference
4972 (url "https://github.com/mkdocs/mkdocs")
4973 (commit version)))
4974 (file-name (git-file-name name version))
4975 (sha256
4976 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4977 (build-system pyproject-build-system)
4978 (arguments
4979 (list
4980 ;; tests: 687 passed
4981 #:test-backend #~'unittest
4982 #:test-flags
4983 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4984 #:phases
4985 #~(modify-phases %standard-phases
4986 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4987 ;; to run tests with pytest (and thus ignore them selectively).
4988 (add-before 'check 'delete-failing-tests
4989 (lambda _
4990 (delete-file "mkdocs/tests/cli_tests.py"))))))
4991 (native-inputs
4992 (list python-hatchling
4993 python-setuptools))
4994 (propagated-inputs
4995 (list python-click
4996 python-ghp-import
4997 python-jinja2
4998 python-markdown
4999 python-markupsafe
5000 python-mergedeep
5001 python-mkdocs-get-deps
5002 python-packaging
5003 python-pathspec
5004 python-pyyaml
5005 python-pyyaml-env-tag
5006 python-watchdog
5007 ;; [optional]
5008 python-babel))
5009 (home-page "https://www.mkdocs.org")
5010 (synopsis "Project documentation with Markdown")
5011 (description
5012 "MkDocs is a static site generator geared towards building project
5013documentation. Documentation source files are written in Markdown, and
5014configured with a single YAML configuration file.")
5015 (license license:bsd-3)))
5016
5017(define-public python-mkdocs-get-deps
5018 (package
5019 (name "python-mkdocs-get-deps")
5020 (version "0.2.0")
5021 (source
5022 (origin
5023 (method git-fetch)
5024 (uri (git-reference
5025 (url "https://github.com/mkdocs/get-deps")
5026 (commit (string-append "v" version))))
5027 (file-name (git-file-name name version))
5028 (sha256
5029 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
5030 (build-system pyproject-build-system)
5031 (native-inputs
5032 (list python-pytest
5033 python-hatchling))
5034 (propagated-inputs
5035 (list python-mergedeep
5036 python-platformdirs
5037 python-pyyaml))
5038 (home-page "https://github.com/mkdocs/get-deps")
5039 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
5040 (description
5041 "This package provides an @code{MkDocs} extension that lists all dependencies
5042according to a mkdocs.yml file. This command guesses the Python dependencies
5043that a MkDocs site requires in order to build. It simply prints the PyPI
5044packages that need to be installed.")
5045 (license license:expat)))
5046
5047(define-public python-mkdocs-markdownextradata-plugin
5048 (package
5049 (name "python-mkdocs-markdownextradata-plugin")
5050 (version "0.2.5")
5051 (source
5052 (origin
5053 (method git-fetch)
5054 (uri (git-reference
5055 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
5056 (commit version)))
5057 (file-name (git-file-name name version))
5058 (sha256
5059 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
5060 (build-system pyproject-build-system)
5061 (native-inputs (list python-pytest python-setuptools))
5062 (propagated-inputs (list python-mkdocs python-pyyaml))
5063 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
5064 (synopsis "Inject extra variables into the MkDocs markdown template")
5065 (description
5066 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
5067variables into the markdown template.")
5068 (license license:expat)))
5069
5070(define-public python-docstring-to-markdown
5071 (package
5072 (name "python-docstring-to-markdown")
5073 (version "0.15")
5074 (source
5075 (origin
5076 (method url-fetch)
5077 (uri (pypi-uri "docstring-to-markdown" version))
5078 (sha256
5079 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
5080 (build-system pyproject-build-system)
5081 (native-inputs
5082 (list python-pytest
5083 python-setuptools))
5084 (home-page "https://github.com/python-lsp/docstring-to-markdown")
5085 (synopsis "On the fly conversion of Python docstrings to markdown")
5086 (description
5087 "This module can convert Python docstrings to Markdown. It can recognise
5088reStructuredText inside docstrings and convert multiple of its features to
5089Markdown. It also includes initial support for Google-formatted docstrings.")
5090 (license license:lgpl2.1+)))
5091
5092(define-public python-pdoc
5093 (package
5094 (name "python-pdoc")
5095 (version "13.0.1")
5096 (source (origin
5097 (method git-fetch)
5098 (uri (git-reference
5099 (url "https://github.com/mitmproxy/pdoc")
5100 (commit (string-append "v" version))))
5101 (file-name (git-file-name name version))
5102 (sha256
5103 (base32
5104 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
5105 (build-system pyproject-build-system)
5106 (native-inputs (list python-pytest python-jinja2 python-pygments
5107 python-setuptools python-wheel))
5108 (arguments
5109 (list
5110 ;; Some tests fail, presumably because of slight version mismatches of
5111 ;; the dependencies.
5112 #:test-flags
5113 '(list "-k" (string-append "not test_var_with_raising_repr and "
5114 "not test_smoke[mock] and "
5115 "not test_snapshots[html"))))
5116 (home-page "https://pdoc.dev/")
5117 (synopsis "API documentation for Python projects")
5118 (description "pdoc auto-generates API documentation that follows your
5119project's Python module hierarchy. It requires no configuration, has
5120first-class support for type annotations, cross-links between identifiers,
5121comes with an integrated live-reloading web server, uses customizable HTML
5122templates, understands numpydoc and Google-style docstrings.")
5123 (license license:unlicense)))
5124
5125(define-public python-py4j
5126 (package
5127 (name "python-py4j")
5128 (version "0.10.9.7")
5129 (source (origin
5130 (method url-fetch)
5131 (uri (pypi-uri "py4j" version))
5132 (sha256
5133 (base32
5134 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
5135 (build-system pyproject-build-system)
5136 (arguments (list #:tests? #f)) ; Requires a running JVM?
5137 (native-inputs (list python-setuptools))
5138 (home-page "https://www.py4j.org/")
5139 (synopsis "Dynamically access arbitrary Java objects from Python")
5140 (description
5141 "This package enables Python programs to dynamically access arbitrary
5142Java objects.")
5143 (license license:bsd-3)))
5144
5145(define-public python-pymdown-extensions
5146 (package
5147 (name "python-pymdown-extensions")
5148 (version "10.16.1")
5149 (source
5150 (origin
5151 (method git-fetch)
5152 (uri (git-reference
5153 (url "https://github.com/facelessuser/pymdown-extensions")
5154 (commit version)))
5155 (file-name (git-file-name name version))
5156 (sha256
5157 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
5158 (build-system pyproject-build-system)
5159 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
5160 (arguments
5161 (list #:tests? #f))
5162 (native-inputs (list python-hatchling python-pytest python-pyyaml))
5163 (propagated-inputs (list python-markdown))
5164 (home-page "https://github.com/facelessuser/pymdown-extensions")
5165 (synopsis "Extension pack for Python Markdown")
5166 (description
5167 "PyMdown Extensions is a collection of extensions for Python Markdown.
5168All extensions are found under the module namespace of pymdownx.")
5169 (license license:expat)))
5170
5171(define-public python-plotext
5172 (package
5173 (name "python-plotext")
5174 (version "5.2.8")
5175 (source (origin
5176 (method url-fetch)
5177 (uri (pypi-uri "plotext" version))
5178 (sha256
5179 (base32
5180 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
5181 (build-system pyproject-build-system)
5182 (arguments (list #:tests? #false)) ;there are none
5183 (native-inputs (list python-setuptools python-wheel))
5184 (home-page "https://github.com/piccolomo/plotext")
5185 (synopsis "Plots in the terminal")
5186 (description "Plotext lets you plot directly to the terminal.")
5187 (license license:expat)))
5188
5189(define-public python-plotille
5190 (package
5191 (name "python-plotille")
5192 (version "5.0.0")
5193 (source
5194 (origin
5195 (method git-fetch)
5196 (uri (git-reference
5197 (url "https://github.com/tammoippen/plotille")
5198 (commit (string-append "v" version))))
5199 (file-name (git-file-name name version))
5200 (sha256
5201 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
5202 (modules '((guix build utils)))
5203 (snippet
5204 #~(begin
5205 ;; Without deleting ./imgs setuptools complains as follows: error:
5206 ;; Multiple top-level packages discovered in a flat-layout:
5207 ;; ['imgs', 'plotille'].
5208 (delete-file-recursively "./imgs")))))
5209 (build-system pyproject-build-system)
5210 (native-inputs
5211 (list python-pytest
5212 python-mock
5213 python-pendulum
5214 python-pytest-mock
5215 python-setuptools
5216 python-wheel))
5217 (home-page "https://github.com/tammoippen/plotille")
5218 (synopsis "Plot in the terminal using braille dots")
5219 (description
5220 "Plotille provides a figure class and graphing functions to create plots,
5221scatter plots, histograms and heatmaps in the terminal using braille dots.")
5222 (license license:expat)))
5223
5224(define-public python-poetry-dynamic-versioning
5225 (package
5226 (name "python-poetry-dynamic-versioning")
5227 (version "1.9.1")
5228 (source
5229 (origin
5230 (method url-fetch)
5231 (uri (pypi-uri "poetry_dynamic_versioning" version))
5232 (sha256
5233 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
5234 (build-system pyproject-build-system)
5235 (arguments
5236 (list
5237 #:test-flags
5238 #~(list "--ignore=tests/test_integration.py"
5239 "-k" (string-join
5240 ;; Tests searching for VCS back end.
5241 (list "not test__get_version__defaults"
5242 "test__enable_in_doc__project_with_dynamic"
5243 "test__enable_in_doc__project_with_version"
5244 "test__get_version__format_jinja"
5245 "test__get_version__format_jinja_imports_with_module_and_item"
5246 "test__get_version__format_jinja_imports_with_module_only"
5247 "test__get_version__format_jinja_with_enforced_style")
5248 " and not "))))
5249 (native-inputs
5250 (list python-poetry-core
5251 python-pytest))
5252 (propagated-inputs
5253 (list python-dunamai
5254 python-jinja2
5255 python-tomlkit))
5256 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
5257 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
5258 (description
5259 "This package provides a build backend that patches Poetry Core to enable
5260the versioning system in PEP 517 build frontends.")
5261 (license license:expat)))
5262
5263(define-public python-poetry-plugin-export
5264 (package
5265 (name "python-poetry-plugin-export")
5266 (version "1.10.0")
5267 (source
5268 (origin
5269 (method url-fetch)
5270 (uri (pypi-uri "poetry_plugin_export" version))
5271 (sha256
5272 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
5273 (build-system pyproject-build-system)
5274 (arguments
5275 (list
5276 #:tests? #f)) ;tests cycle with poetry
5277 (native-inputs
5278 (list python-poetry-core))
5279 (propagated-inputs
5280 (list python-cachy
5281 python-pendulum
5282 python-poetry-core
5283 python-tomlkit))
5284 (home-page "https://python-poetry.org/")
5285 (synopsis "Poetry plugin to export the dependencies to various formats")
5286 (description
5287 "Poetry plugin to export the dependencies to various formats.")
5288 (license license:expat)))
5289
5290(define-public python-portpicker
5291 (package
5292 (name "python-portpicker")
5293 (version "1.6.0")
5294 (source
5295 (origin
5296 (method url-fetch)
5297 (uri (pypi-uri "portpicker" version))
5298 (sha256
5299 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
5300 (build-system pyproject-build-system)
5301 (arguments
5302 (list
5303 #:test-flags
5304 ;; This fails because portserver ends up in bin, not site-packages
5305 '(list "--ignore=src/tests/portserver_test.py")))
5306 (propagated-inputs (list python-psutil))
5307 (native-inputs (list python-pytest python-setuptools python-wheel
5308 net-tools))
5309 (home-page "https://github.com/google/python_portpicker")
5310 (synopsis "Choose unique available network ports")
5311 (description
5312 "This package provides a library to choose unique available network
5313ports.")
5314 (license license:asl2.0)))
5315
5316(define-public python-md-ulb-pwrap
5317 (package
5318 (name "python-md-ulb-pwrap")
5319 (version "0.1.3")
5320 (source
5321 (origin
5322 (method git-fetch)
5323 (uri (git-reference
5324 (url "https://github.com/mondeja/md-ulb-pwrap")
5325 (commit (string-append "v" version))))
5326 (file-name (git-file-name name version))
5327 (sha256
5328 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
5329 (build-system pyproject-build-system)
5330 (arguments
5331 (list
5332 #:imported-modules `(,@%cargo-build-system-modules
5333 ,@%pyproject-build-system-modules)
5334 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5335 (guix build pyproject-build-system)
5336 (guix build utils))
5337 #:test-backend #~'custom
5338 #:test-flags #~(list "test.py")
5339 #:phases
5340 #~(modify-phases %standard-phases
5341 (add-after 'unpack 'prepare-cargo-build-system
5342 (lambda args
5343 (for-each
5344 (lambda (phase)
5345 (format #t "Running cargo phase: ~a~%" phase)
5346 (apply (assoc-ref cargo:%standard-phases phase)
5347 #:cargo-target #$(cargo-triplet)
5348 args))
5349 '(unpack-rust-crates
5350 configure
5351 check-for-pregenerated-files
5352 patch-cargo-checksums))))
5353 (add-after 'prepare-cargo-build-system 'chdir
5354 (lambda _
5355 (chdir "python"))))))
5356 (native-inputs
5357 (append
5358 (list maturin
5359 python-pytest
5360 python-unicode-linebreak
5361 rust
5362 `(,rust "cargo"))
5363 (or (and=> (%current-target-system)
5364 (compose list make-rust-sysroot))
5365 '())))
5366 (inputs (cargo-inputs 'md_ulb_pwrap))
5367 (home-page "https://github.com/mondeja/md-ulb-pwrap")
5368 (synopsis "Markdown paragraph wrapper")
5369 (description
5370 "This package provides a Markdown paragraph wrapper using Unicode Line
5371Breaking Algorithm written in Rust with Python bindings.")
5372 (license license:expat)))
5373
5374(define-public python-mdx-gh-links
5375 (package
5376 (name "python-mdx-gh-links")
5377 (version "0.4")
5378 (source
5379 (origin
5380 (method url-fetch)
5381 (uri (pypi-uri "mdx_gh_links" version))
5382 (sha256
5383 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5384 (build-system pyproject-build-system)
5385 (arguments (list #:tests? #f)) ;tests connect github
5386 (native-inputs (list python-setuptools))
5387 (propagated-inputs (list python-markdown))
5388 (home-page "https://github.com/Python-Markdown/github-links/")
5389 (synopsis "Python-Markdown extension adding support for shorthand links")
5390 (description "This package is an extension to Python-Markdown which adds
5391support for shorthand links to GitHub users, repositories, issues and
5392commits.")
5393 (license license:bsd-3)))
5394
5395(define-public python-mkdocs-material
5396 (package
5397 (name "python-mkdocs-material")
5398 (version "7.3.6")
5399 (source
5400 (origin
5401 (method git-fetch)
5402 (uri (git-reference
5403 (url "https://github.com/squidfunk/mkdocs-material")
5404 (commit version)))
5405 (file-name (git-file-name name version))
5406 (sha256
5407 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5408 (modules '((guix build utils)))
5409 (snippet
5410 ;; TODO There are still bundled assets and minified JS.
5411 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5412 (build-system pyproject-build-system)
5413 (arguments
5414 (list
5415 #:tests? #f ; No tests.
5416 #:phases
5417 #~(let ((symlink-js
5418 (lambda (inputs)
5419 (for-each
5420 (lambda (lang)
5421 (let* ((filename (string-append "lunr." lang ".min.js"))
5422 (file (string-append "share/javascript/" filename)))
5423 (symlink (search-input-file inputs file) filename)))
5424 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5425 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5426 "vi")))))
5427 (modify-phases %standard-phases
5428 ;; Requirement mkdocs-material-extensions
5429 ;; in-turn requires mkdocs-material. This causes
5430 ;; circular dependency, so we remove this requirement.
5431 (add-after 'unpack 'patch-requirements
5432 (lambda _
5433 (substitute* "requirements.txt"
5434 (("mkdocs-material-extensions.*$")
5435 ""))))
5436 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5437 (lambda* (#:key inputs #:allow-other-keys)
5438 (mkdir-p "material/assets/javascripts/lunr/min")
5439 (with-directory-excursion "material/assets/javascripts/lunr/min"
5440 (symlink-js inputs))))
5441 (add-after 'wrap 'replace-javascript-assets
5442 (lambda* (#:key inputs outputs #:allow-other-keys)
5443 (let* ((site (site-packages inputs outputs))
5444 (js-assets (string-append site "/material/"
5445 "assets/javascripts")))
5446 (with-directory-excursion js-assets
5447 (delete-file-recursively "lunr/min")
5448 (mkdir-p "lunr/min")
5449 (with-directory-excursion "lunr/min"
5450 (symlink-js inputs))))))))))
5451 (native-inputs (list python-setuptools))
5452 (inputs (list js-lunr-ar
5453 js-lunr-da
5454 js-lunr-de
5455 js-lunr-es
5456 js-lunr-fi
5457 js-lunr-fr
5458 js-lunr-hu
5459 js-lunr-it
5460 js-lunr-ja
5461 js-lunr-nl
5462 js-lunr-no
5463 js-lunr-pt
5464 js-lunr-ro
5465 js-lunr-ru
5466 js-lunr-sv
5467 js-lunr-tr
5468 js-lunr-vi
5469 js-lunr-multi
5470 js-lunr-stemmer-support))
5471 (propagated-inputs
5472 (list python-markdown python-mkdocs python-pygments
5473 python-pymdown-extensions))
5474 (home-page "https://squidfunk.github.io/mkdocs-material/")
5475 (synopsis "Material Design theme for MkDocs")
5476 (description "This package provides a theme plugin for the static site
5477generator MkDocs.")
5478 (license license:expat)))
5479
5480(define-public python-nanobind
5481 (package
5482 (name "python-nanobind")
5483 (version "2.10.2")
5484 (source
5485 (origin
5486 (method url-fetch)
5487 (uri (pypi-uri "nanobind" version))
5488 (sha256
5489 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5490 (build-system pyproject-build-system)
5491 (arguments
5492 (list
5493 ;; tests: 466 passed, 27 skipped
5494 #:phases
5495 #~(modify-phases %standard-phases
5496 (add-before 'build 'configure-cmake
5497 (lambda _
5498 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5499 (add-after 'configure-cmake 'build-c++
5500 (lambda _
5501 (invoke "cmake" "--build" "build" "-j" "2")))
5502 (add-before 'check 'pre-check
5503 (lambda _ (chdir "build"))))))
5504 (native-inputs
5505 (list cmake-minimal
5506 python-numpy
5507 python-pathspec
5508 python-pytest
5509 python-scikit-build-core
5510 python-scipy))
5511 (inputs
5512 (list eigen))
5513 (home-page "https://github.com/wjakob/nanobind/")
5514 (synopsis "Tiny and efficient C++/Python bindings")
5515 (description "Nanobind is a small binding library that exposes C++ types
5516in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5517@code{pybind11} and uses near-identical syntax. In contrast to these existing
5518tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5519of time, produce smaller binaries, and have better runtime performance.")
5520 (license license:bsd-3)))
5521
5522(define-public python-nr-date
5523 (package
5524 (name "python-nr-date")
5525 (version "2.1.0")
5526 (source
5527 (origin
5528 (method url-fetch)
5529 (uri (pypi-uri "nr_date" version))
5530 (sha256
5531 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5532 (build-system pyproject-build-system)
5533 (arguments (list #:tests? #false)) ;there are none
5534 (native-inputs (list python-poetry-core))
5535 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5536 (synopsis "Fast, regex-based date parsing library in plain Python")
5537 (description "This package provides a fast, regex-based date parsing
5538library in pure Python.")
5539 (license license:expat)))
5540
5541(define-public python-nr-stream
5542 (package
5543 (name "python-nr-stream")
5544 (version "1.1.5")
5545 (source
5546 (origin
5547 (method url-fetch)
5548 (uri (pypi-uri "nr_stream" version))
5549 (sha256
5550 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5551 (build-system pyproject-build-system)
5552 (arguments (list #:tests? #false)) ;there are none
5553 (native-inputs (list python-poetry-core))
5554 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5555 (synopsis "Stream and Optional classes for Python")
5556 (description "This package provides a @code{Stream} and @code{Optional}
5557class.")
5558 (license license:expat)))
5559
5560(define-public python-nr-util
5561 (package
5562 (name "python-nr-util")
5563 (version "0.8.12")
5564 (source
5565 (origin
5566 (method url-fetch)
5567 (uri (pypi-uri "nr.util" version))
5568 (sha256
5569 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5570 (build-system pyproject-build-system)
5571 (arguments
5572 (list
5573 #:tests? #false ;there are none
5574 #:phases
5575 #~(modify-phases %standard-phases
5576 (add-after 'unpack 'patch-build-system
5577 (lambda _
5578 (substitute* "pyproject.toml"
5579 (("^config =.*") "config = []\n"))))
5580 (add-after 'install 'fix-name
5581 (lambda* (#:key inputs outputs #:allow-other-keys)
5582 (let* ((sitedir (site-packages inputs outputs))
5583 (dist-info
5584 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5585 (substitute* (string-append dist-info "/METADATA")
5586 (("Name: nr-util")
5587 "Name: nr.util"))
5588 (substitute* (string-append dist-info "/RECORD")
5589 (("nr_util") "nr.util"))
5590 (rename-file dist-info
5591 (string-append sitedir
5592 "/nr.util-"
5593 #$version ".dist-info"))))))))
5594 (propagated-inputs (list python-deprecated python-typing-extensions))
5595 (native-inputs (list python-poetry-core))
5596 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5597 (synopsis "General purpose Python utility library")
5598 (description "This package provides a general purpose Python utility
5599library.")
5600 (license license:expat)))
5601
5602(define-public python-slicerator
5603 (package
5604 (name "python-slicerator")
5605 (version "1.1.0")
5606 (source
5607 (origin
5608 (method url-fetch)
5609 (uri (pypi-uri "slicerator" version))
5610 (sha256
5611 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5612 (build-system pyproject-build-system)
5613 (native-inputs
5614 (list python-numpy
5615 python-pytest
5616 python-setuptools))
5617 (home-page "https://github.com/soft-matter/slicerator")
5618 (synopsis "Lazy-loading, fancy-sliceable iterable")
5619 (description
5620 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5621of it like a generator that is \"reusable\" and has a length.")
5622 (license license:bsd-3)))
5623
5624(define-public python-pytelegrambotapi
5625 (package
5626 (name "python-pytelegrambotapi")
5627 (version "4.22.0")
5628 (source
5629 (origin
5630 (method git-fetch)
5631 (uri (git-reference
5632 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5633 (commit version)))
5634 (file-name (git-file-name name version))
5635 (sha256
5636 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5637 (build-system pyproject-build-system)
5638 (arguments
5639 (list
5640 #:phases
5641 #~(modify-phases %standard-phases
5642 (replace 'check
5643 (lambda* (#:key tests? #:allow-other-keys)
5644 (when tests?
5645 (with-directory-excursion "tests"
5646 (invoke "py.test"))))))))
5647 (propagated-inputs
5648 (list python-requests))
5649 (native-inputs
5650 (list python-hatchling python-pytest))
5651 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5652 (synopsis "Python Telegram bot api")
5653 (description "This package provides a simple, but extensible Python
5654implementation for the Telegram Bot API.")
5655 (license license:gpl2)))
5656
5657(define-public python-pytoolconfig
5658 (package
5659 (name "python-pytoolconfig")
5660 (version "1.3.1")
5661 (source
5662 (origin
5663 (method url-fetch)
5664 (uri (pypi-uri "pytoolconfig" version))
5665 (sha256
5666 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5667 (build-system pyproject-build-system)
5668 (arguments
5669 (list
5670 #:test-flags
5671 ;; Requires Sphinx.
5672 #~(list "--ignore=tests/test_documentation.py")))
5673 (native-inputs
5674 (list python-pdm-backend
5675 python-pytest))
5676 (propagated-inputs
5677 (list python-tomli
5678 python-packaging
5679 python-platformdirs))
5680 (home-page "https://pypi.org/project/pytoolconfig/")
5681 (synopsis "Python tool configuration")
5682 (description "The goal of this project is to manage configuration for
5683Python tools, such as rope and add support for a @file{pyproject.toml}
5684configuration file.")
5685 (license license:lgpl3+)))
5686
5687(define-public python-pytooling
5688 (package
5689 (name "python-pytooling")
5690 (version "9.0.0")
5691 (source
5692 (origin
5693 (method git-fetch)
5694 (uri (git-reference
5695 (url "https://github.com/pyTooling/pyTooling/")
5696 (commit (string-append "v" version))))
5697 (file-name (git-file-name name version))
5698 (sha256
5699 (base32 "19zbpy35bfcq3m49xd80qsy7f4b4r98dhv4vx76199a425n61932"))))
5700 (build-system pyproject-build-system)
5701 (arguments
5702 (list
5703 ;; Tests do not support linux-i686 system: Exception: Unknown
5704 ;; architecture 'linux-i686' for a native Linux.
5705 #:tests? (not (or (%current-target-system)
5706 (target-x86-32?)))
5707 #:test-flags
5708 #~(list
5709 "tests/unit"
5710 ;; These tests try to access the network.
5711 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5712 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5713 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5714 #:phases
5715 #~(modify-phases %standard-phases
5716 (add-after 'unpack 'patch-git-bin-for-tests
5717 (lambda* (#:key inputs #:allow-other-keys)
5718 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5719 "tests/unit/CLIAbstraction/Program.py")
5720 (("/usr/bin")
5721 (dirname (search-input-file inputs "/bin/git")))))))))
5722 (native-inputs
5723 (list git-minimal/pinned
5724 python-aiohttp
5725 python-colorama
5726 python-pytest
5727 python-requests
5728 python-ruamel.yaml
5729 python-setuptools))
5730 (home-page "https://pytooling.github.io/pyTooling/")
5731 (synopsis "Miscellaneous Python tools")
5732 (description
5733 "pyTooling is a collection of (abstract) data models, lacking classes,
5734decorators, a new performance boosting meta-class, and enhanced exceptions.
5735It also provides lots of helper functions---e.g., to ease the handling of
5736package descriptions or to unify multiple existing APIs into a single API.")
5737 (license license:asl2.0)))
5738
5739(define-public python-colorlog
5740 (package
5741 (name "python-colorlog")
5742 (version "6.9.0")
5743 (source
5744 (origin
5745 (method url-fetch)
5746 (uri (pypi-uri "colorlog" version))
5747 (sha256
5748 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5749 (build-system pyproject-build-system)
5750 (native-inputs
5751 (list python-pytest
5752 python-setuptools))
5753 (home-page "https://github.com/borntyping/python-colorlog")
5754 (synopsis "Log formatting with colors for python")
5755 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5756with Python's logging module that outputs records using terminal colors.")
5757 (license license:expat)))
5758
5759(define-public python-pyprind
5760 (package
5761 (name "python-pyprind")
5762 (version "2.11.3")
5763 (source
5764 (origin
5765 (method url-fetch)
5766 (uri (pypi-uri "PyPrind" version))
5767 (sha256
5768 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5769 (build-system pyproject-build-system)
5770 (native-inputs (list python-pytest python-setuptools))
5771 (propagated-inputs (list python-psutil))
5772 (home-page "https://github.com/rasbt/pyprind")
5773 (synopsis "Python Progress Bar and Percent Indicator Utility")
5774 (description
5775 "The PyPrind (Python Progress Indicator) module provides a progress bar
5776and a percentage indicator object that let you track the progress of a loop
5777structure or other iterative computation.")
5778 (license license:bsd-3)))
5779
5780(define-public python-gh-md-to-html
5781 (package
5782 (name "python-gh-md-to-html")
5783 (version "1.21.2")
5784 (source
5785 (origin
5786 (method url-fetch)
5787 (uri (pypi-uri "gh_md_to_html" version))
5788 (sha256
5789 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5790 (build-system pyproject-build-system)
5791 (arguments
5792 (list
5793 #:tests? #false ;there are none
5794 #:phases
5795 #~(modify-phases %standard-phases
5796 (add-after 'unpack 'relax-shellescape-requirement
5797 (lambda _
5798 (substitute* "src/__init__.py"
5799 (("import shellescape")
5800 "import shlex")
5801 (("shellescape\\.quote")
5802 "shlex.quote"))
5803 (substitute* "setup.py"
5804 (("\"shellescape\",")
5805 "")))))))
5806 (propagated-inputs
5807 (list python-beautifulsoup4
5808 python-emoji-for-gh-md-to-html
5809 python-pillow
5810 python-requests
5811 python-webcolors))
5812 (native-inputs (list python-setuptools))
5813 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5814 (synopsis "Github-flavored Markdown")
5815 (description
5816 "This package provides a feature-rich Github-flavored Markdown to HTML
5817Python library and command line interface.")
5818 (license license:expat)))
5819
5820(define-public python-gfloat
5821 (package
5822 (name "python-gfloat")
5823 (version "0.5.2")
5824 (source
5825 (origin
5826 (method url-fetch)
5827 (uri (pypi-uri "gfloat" version))
5828 (sha256
5829 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5830 (build-system pyproject-build-system)
5831 (arguments
5832 (list
5833 #:test-flags
5834 #~(list
5835 "--ignore=test/test_array_api.py" ;requires array_api_strict
5836 "--ignore=test/test_jax.py" ;requires python-jax
5837 "--ignore=test/test_microxcaling.py" ;requires torchao
5838 ;; Jupyter.
5839 "--ignore-glob=docs/source/*.ipynb")))
5840 (propagated-inputs
5841 (list python-array-api-compat python-more-itertools python-numpy))
5842 (native-inputs (list python-nbval
5843 python-ml-dtypes
5844 python-pytest
5845 python-pytorch
5846 python-setuptools
5847 openssl))
5848 (home-page "https://github.com/graphcore-research/gfloat")
5849 (synopsis "Generic floating point handling in Python")
5850 (description
5851 "This package provides an implementation of generic floating point encode
5852and decode logic in Python. It handles various current and proposed floating
5853point types:
5854
5855@itemize
5856@item IEEE 754: Binary16, Binary32
5857@item OCP Float8: E5M2, E4M3
5858@item IEEE WG P3109
5859@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5860@end itemize")
5861 (license license:expat)))
5862
5863(define-public python-glymur
5864 (package
5865 (name "python-glymur")
5866 (version "0.14.8")
5867 (source
5868 (origin
5869 (method git-fetch)
5870 (uri (git-reference
5871 (url "https://github.com/quintusdias/glymur")
5872 (commit (string-append "v" version))))
5873 (file-name (git-file-name name version))
5874 (sha256
5875 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5876 (build-system pyproject-build-system)
5877 (arguments
5878 (list
5879 #:test-flags
5880 #~(list "--numprocesses" (number->string (parallel-job-count))
5881 ;; Failing test due to inability of ctypes.util.find_library()
5882 ;; to determine library path, which is patched above.
5883 "--ignore=tests/test_config.py")
5884 #:phases
5885 #~(modify-phases %standard-phases
5886 (add-after 'unpack 'patch-library-locations
5887 (lambda* (#:key inputs #:allow-other-keys)
5888 ;; XXX: It's a workaround for Python inability to find the
5889 ;; .so libraries with ctypes.util.find_library()
5890 (substitute* '("glymur/config.py")
5891 (("path = find_library\\(libname\\)")
5892 (string-append
5893 "if libname == \"openjp2\":\n"
5894 " path = \""
5895 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5896 " elif libname == \"tiff\":\n"
5897 " path = \""
5898 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5899 " elif libname == \"c\":\n"
5900 " path = \""
5901 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5902 (native-inputs
5903 (list python-pytest
5904 python-pytest-xdist
5905 python-scikit-image
5906 python-setuptools))
5907 (inputs
5908 (list openjpeg ; glymur/lib/openjp2.py
5909 libtiff)) ; glymur/lib/tiff.py
5910 (propagated-inputs
5911 (list python-lxml
5912 python-numpy
5913 python-pillow ))
5914 (home-page "https://github.com/quintusdias/glymur")
5915 (synopsis "Python interface to OpenJPEG and LibTIFF")
5916 (description
5917 "This package provides Python interface to the OpenJPEG library which
5918allows one to read and write JPEG 2000 files")
5919 (license license:expat)))
5920
5921(define-public python-gphoto2
5922 (package
5923 (name "python-gphoto2")
5924 (version "2.6.1")
5925 (source
5926 (origin
5927 (method git-fetch) ; no tests in PyPI
5928 (uri (git-reference
5929 (url "https://github.com/jim-easterbrook/python-gphoto2")
5930 (commit (string-append "v" version))))
5931 (file-name (git-file-name name version))
5932 (sha256
5933 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5934 (build-system pyproject-build-system)
5935 (native-inputs
5936 (list pkg-config python-pytest python-setuptools python-wheel))
5937 (inputs
5938 (list libgphoto2))
5939 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5940 (synopsis "Python interface to libgphoto2")
5941 (description "@code{python-gphoto2} is a comprehensive Python interface
5942(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5943automatically generate the interface code.")
5944 (license license:lgpl3+)))
5945
5946(define-public python-colour
5947 (package
5948 (name "python-colour")
5949 (version "0.1.5")
5950 (source
5951 (origin
5952 (method git-fetch)
5953 (uri (git-reference
5954 (url "https://github.com/vaab/colour")
5955 (commit version)))
5956 (file-name (git-file-name name version))
5957 (sha256
5958 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5959 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5960 (build-system pyproject-build-system)
5961 (arguments
5962 (list
5963 #:tests? #f ; No tests.
5964 #:phases
5965 #~(modify-phases %standard-phases
5966 (add-after 'unpack 'set-version
5967 (lambda _
5968 (substitute* "autogen.sh"
5969 (("if ! \"\\$git\".*")
5970 "if false ; then\n")
5971 (("depends git grep")
5972 "depends grep")
5973 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5974 (format #f "version=~s" #$version))))))))
5975 (native-inputs (list python-setuptools))
5976 (home-page "https://github.com/vaab/colour")
5977 (synopsis "Convert and manipulate various color representations")
5978 (description
5979 "This package provides a pythonic way to manipulate color representations
5980(HSL, RVB,web, X11, ...).")
5981 (license license:expat)))
5982
5983(define-public python-rapidfuzz
5984 (package
5985 (name "python-rapidfuzz")
5986 (version "3.14.5")
5987 (source
5988 (origin
5989 (method git-fetch)
5990 (uri (git-reference
5991 (url "https://github.com/rapidfuzz/RapidFuzz")
5992 (commit (string-append "v" version))))
5993 (file-name (git-file-name name version))
5994 (sha256
5995 (base32 "0ic219rfw4nlj9jp3idhxpk8vjlcw3x0xc23s36hf6gs41wxwpn0"))))
5996 (build-system pyproject-build-system)
5997 (native-inputs
5998 (list python-cython
5999 python-pandas-minimal
6000 python-pytest
6001 python-scikit-build-core
6002 rapidfuzz-cpp
6003 taskflow))
6004 (home-page "https://github.com/rapidfuzz/RapidFuzz")
6005 (synopsis "Rapid fuzzy string matching")
6006 (description
6007 "RapidFuzz is a fast string matching library for Python and
6008C++, which is using the string similarity calculations from FuzzyWuzzy.")
6009 (license license:expat)))
6010
6011(define-public python-easygui
6012 (package
6013 (name "python-easygui")
6014 (version "0.98.1")
6015 (source
6016 (origin
6017 (method git-fetch)
6018 (uri (git-reference
6019 (url "https://github.com/robertlugg/easygui")
6020 (commit version)))
6021 (file-name (git-file-name name version))
6022 (sha256
6023 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
6024 (build-system pyproject-build-system)
6025 (arguments
6026 ;; XXX: There seem to be no tests upstream, although the package itself
6027 ;; seems to provide a lot of demo elements.
6028 (list #:tests? #f))
6029 (native-inputs (list python-pytest python-setuptools))
6030 (propagated-inputs (list `(,python "tk")))
6031 (home-page "https://github.com/robertlugg/easygui")
6032 (synopsis "GUI programming module for Python")
6033 (description
6034 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
6035different from other GUI generators in that EasyGUI is NOT event-driven.
6036Instead, all GUI interactions are invoked by simple function calls.")
6037 (license license:bsd-3)))
6038
6039(define-public python-echo
6040 (package
6041 (name "python-echo")
6042 (version "0.12.1")
6043 (source
6044 (origin
6045 (method url-fetch)
6046 (uri (pypi-uri "echo" version))
6047 (sha256
6048 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
6049 (build-system pyproject-build-system)
6050 (arguments
6051 (list
6052 #:phases
6053 #~(modify-phases %standard-phases
6054 (add-before 'check 'start-xorg-server
6055 (lambda _
6056 ;; The test suite requires a running X server.
6057 (system "Xvfb :99 -screen 0 1024x768x24 &")
6058 (setenv "DISPLAY" ":99.0"))))))
6059 (propagated-inputs
6060 (list python-numpy
6061 python-qtpy
6062 python-pyqt-6))
6063 (native-inputs
6064 (list python-pytest
6065 python-setuptools
6066 python-setuptools-scm
6067 xorg-server-for-tests))
6068 (home-page "https://github.com/glue-viz/echo")
6069 (synopsis "Callback Properties in Python")
6070 (description
6071 "Echo is a small library for attaching callback functions to property
6072state changes.")
6073 (license license:expat)))
6074
6075(define-public python-pymd4c
6076 (package
6077 (name "python-pymd4c")
6078 (version "1.3.0")
6079 (source
6080 (origin
6081 (method git-fetch)
6082 (uri (git-reference
6083 (url "https://github.com/dominickpastore/pymd4c")
6084 (commit (string-append "v" version))))
6085 (file-name (git-file-name name version))
6086 (sha256
6087 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
6088 (build-system pyproject-build-system)
6089 (arguments (list #:test-flags #~(list "test")))
6090 (inputs (list md4c))
6091 (native-inputs
6092 (list pkg-config python-pkgconfig python-pytest python-setuptools))
6093 (home-page "https://github.com/dominickpastore/pymd4c")
6094 (synopsis "Python bindings for MD4C")
6095 (description
6096 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
6097to CommonMark.")
6098 (license license:expat)))
6099
6100(define-public python-pymediainfo
6101 (package
6102 (name "python-pymediainfo")
6103 (version "4.1")
6104 (source
6105 (origin
6106 (method url-fetch)
6107 (uri (pypi-uri "pymediainfo" version))
6108 (sha256
6109 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
6110 (build-system pyproject-build-system)
6111 (arguments
6112 (list
6113 ;; The only failing test requires internet access.
6114 #:test-flags
6115 #~(list "-k" "not test_parse_url")
6116 #:phases
6117 #~(modify-phases %standard-phases
6118 (add-after 'unpack 'patch-libmediainfo
6119 (lambda* (#:key inputs #:allow-other-keys)
6120 (substitute* "pymediainfo/__init__.py"
6121 (("libmediainfo.so.0")
6122 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
6123 (native-inputs (list python-pytest python-setuptools))
6124 (inputs (list libmediainfo))
6125 (home-page "https://github.com/sbraz/pymediainfo")
6126 (synopsis "Python wrapper for the mediainfo library")
6127 (description
6128 "This package provides a Python wrapper for the mediainfo library to
6129access the technical and tag data for video and audio files.")
6130 (license license:expat)))
6131
6132(define-public python-psutil
6133 (package
6134 (name "python-psutil")
6135 (version "7.2.2")
6136 (source
6137 (origin
6138 (method git-fetch)
6139 (uri (git-reference
6140 (url "https://github.com/giampaolo/psutil")
6141 (commit (string-append "release-" version))))
6142 (file-name (git-file-name name version))
6143 (sha256
6144 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
6145 (build-system pyproject-build-system)
6146 (arguments
6147 (list
6148 ;; tests: X86_64-linux 414 passed, 278 skipped
6149 ;; i686-linux 410 passed, 278 skipped
6150 #:test-flags
6151 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
6152 "--dist" "loadgroup"
6153 #$@(map (lambda (ls) (string-append "--deselect=tests/"
6154 (string-join ls "::")))
6155 ;; assert None is not None
6156 '(("test_linux.py" "TestRootFsDeviceFinder"
6157 "test_comparisons")
6158 ;; FileNotFoundError: [Errno 2] No such file or
6159 ;; directory: '/sys/class/net/lo/mtu'
6160 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
6161 ;; AssertionError: assert '/dev/root' != '/dev/root'
6162 ("test_linux.py" "TestRootFsDeviceFinder"
6163 "test_disk_partitions_mocked")
6164 ;; psutil.AccessDenied: (pid=426)
6165 ("test_process.py" "TestProcess" "test_weird_environ")
6166 ;; assert []
6167 ("test_system.py" "TestMiscAPIs" "test_users")
6168 ;; ModuleNotFoundError: No module named '_common'
6169 ("test_scripts.py" "TestSetupScript"
6170 "test_invocation")
6171 ;; AssertionError: assert ''
6172 ("test_scripts.py" "TestExampleScripts" "test_who")
6173 ;; AssertionError: no disks on this system? assert
6174 ;; None is not None
6175 ("test_system.py" "TestDiskAPIs"
6176 "test_disk_io_counters")
6177 ;; psutil.NoSuchProcess: process no longer exists
6178 ;; (pid=247))
6179 ("test_process_all.py" "TestFetchAllProcesses"
6180 "test_all")
6181 ;; ModuleNotFoundError: No module named 'pypinfo'
6182 ("test_scripts.py" "TestInternalScripts"
6183 "test_import_all")
6184 ;; FileNotFoundError: [Errno 2] No such file or
6185 ;; directory: '/sys/class/power_supply'
6186 ("test_misc.py" "TestMisc" "test_serialization")))
6187 #$@(if (target-32bit?)
6188 (map (lambda (ls) (string-append "--deselect=tests/"
6189 (string-join ls "::")))
6190 ;; assert 12884901915 < 500 where 12884901915 =
6191 ;; abs((2596570605 - 15481472520))
6192 '(("test_linux.py" "TestSystemCPUStats"
6193 "test_interrupts")
6194 ;; OSError: [Errno 22] Invalid argument
6195 ("test_process.py" "TestProcess"
6196 "test_zombie_process")))
6197 '()))
6198 #:phases
6199 #~(modify-phases %standard-phases
6200 (add-before 'check 'pre-check
6201 (lambda _
6202 (delete-file-recursively "psutil")
6203 (substitute* "tests/test_linux.py"
6204 (("\"(free|vmstat)\"" _ cmd)
6205 (format #f "~s" (which cmd))))
6206 (setenv "PYTHONWARNINGS" "always")
6207 (setenv "PYTHONUNBUFFERED" "1")
6208 (setenv "PSUTIL_DEBUG" "1")
6209 (setenv "PSUTIL_TESTING" "1"))))))
6210 (native-inputs
6211 (list procps
6212 python-packaging
6213 python-psleak
6214 python-pyperf
6215 python-pytest
6216 python-pytest-instafail
6217 python-pytest-xdist
6218 python-setuptools))
6219 (home-page "https://github.com/giampaolo/psutil")
6220 (synopsis "Library for retrieving information on running processes")
6221 (description
6222 "@code{psutil} (Python system and process utilities) is a library for
6223retrieving information on running processes and system utilization (CPU,
6224memory, disks, network) in Python. It is useful mainly for system monitoring,
6225profiling and limiting process resources and management of running processes.
6226It implements many functionalities offered by command line tools such as: ps,
6227top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
6228iotop, uptime, pidof, tty, taskset, pmap.")
6229 (license license:bsd-3)))
6230
6231(define-public python-psutil-bootstrap
6232 (hidden-package
6233 (package/inherit python-psutil
6234 (name "python-psutil-bootstrap")
6235 (arguments
6236 (list #:tests? #f))
6237 (propagated-inputs '())
6238 (native-inputs
6239 (list python-setuptools)))))
6240
6241(define-public python-scapy
6242 (package
6243 (name "python-scapy")
6244 (version "2.6.1")
6245 (source (origin
6246 (method url-fetch)
6247 (uri (pypi-uri "scapy" version))
6248 (sha256
6249 (base32
6250 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
6251 (arguments
6252 '(#:tests? #f)) ; There is a test directory, but apparently no
6253 ; automatic testing framework.
6254 ;; The package has more optional dependencies such as ipython and
6255 ;; matplotlib. If functionality is missing, these should be added.
6256 ;; See
6257 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
6258 (build-system pyproject-build-system)
6259 (native-inputs (list python-setuptools python-wheel))
6260 (home-page "https://scapy.net")
6261 (synopsis "Python network packet crafting library")
6262 (description
6263 "Scapy is a Python library and executable for interactively
6264manipulating network packets. It can forge or decode packets of a number
6265of protocols, send them on the wire, capture them, store or read them
6266using pcap files, match requests and replies, and so on.
6267It can handle tasks such as scanning, tracerouting, probing, unit tests,
6268attacks or network discovery.")
6269 (license license:gpl2)))
6270
6271(define-public python-icmplib
6272 (package
6273 (name "python-icmplib")
6274 (version "3.0.4")
6275 (source
6276 (origin
6277 (method git-fetch)
6278 (uri (git-reference
6279 (url "https://github.com/ValentinBELYN/icmplib")
6280 (commit (string-append "v" version))))
6281 (file-name (git-file-name name version))
6282 (sha256
6283 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
6284 (build-system pyproject-build-system)
6285 (arguments (list #:tests? #f)) ; No tests.
6286 (native-inputs (list python-setuptools))
6287 (home-page "https://github.com/ValentinBELYN/icmplib")
6288 (synopsis
6289 "Python implementation of the Internet Control Message Protocol (ICMP)")
6290 (description
6291 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
6292ICMP is typically used for diagnostic or control purposes - well known from
6293utilities such as ping(1).")
6294 (license license:lgpl3)))
6295
6296(define-public python-iron-core
6297 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
6298 (revision "0"))
6299 (package
6300 (name "python-iron-core")
6301 (version (git-version "1.2.1" revision commit))
6302 (source
6303 (origin
6304 (method git-fetch)
6305 (uri (git-reference
6306 (url "https://www.github.com/iron-io/iron_core_python")
6307 (commit commit)))
6308 (file-name (git-file-name name version))
6309 (sha256
6310 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
6311 (build-system pyproject-build-system)
6312 (arguments
6313 (list
6314 ;; XXX: Tests are run, but they seem too old/not updated.
6315 #:tests? #f
6316 #:test-backend #~'unittest))
6317 (propagated-inputs (list python-dateutil python-requests))
6318 (native-inputs (list python-setuptools))
6319 (home-page "https://www.github.com/iron-io/iron_core_python")
6320 (synopsis "Universal classes and methods for Iron.io API wrappers")
6321 (description
6322 "This package provides universal classes and methods for the Iron.io
6323API wrappers to build on.")
6324 (license license:bsd-2))))
6325
6326(define-public python-iron-mq
6327 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
6328 (revision "0"))
6329 (package
6330 (name "python-iron-mq")
6331 (version (git-version "0.9" revision commit))
6332 (source
6333 (origin
6334 (method git-fetch)
6335 (uri (git-reference
6336 (url "https://github.com/iron-io/iron_mq_python")
6337 (commit commit)))
6338 (file-name (git-file-name name version))
6339 (sha256
6340 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
6341 (build-system pyproject-build-system)
6342 (arguments
6343 (list
6344 ;; XXX: Tests are broken and require network access.
6345 #:tests? #f
6346 #:test-backend #~'unittest))
6347 (propagated-inputs (list python-iron-core))
6348 (native-inputs (list python-setuptools))
6349 (home-page "https://github.com/iron-io/iron_mq_python")
6350 (synopsis "Client library for IronMQ, a message queue in the cloud")
6351 (description
6352 "This package provides Python language bindings for IronMQ. IronMQ is an
6353elastic message queue for managing data and event flow within cloud
6354applications and between systems.")
6355 (license license:bsd-2))))
6356
6357(define-public python-rasterio
6358 (package
6359 (name "python-rasterio")
6360 (version "1.3.7")
6361 (source (origin
6362 (method url-fetch)
6363 (uri (pypi-uri "rasterio" version))
6364 (sha256
6365 (base32
6366 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
6367 (properties
6368 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
6369 (build-system pyproject-build-system)
6370 (arguments
6371 (list
6372 #:tests? #false ;test data not present
6373 #:phases
6374 '(modify-phases %standard-phases
6375 (add-before 'check 'build-extensions
6376 (lambda _
6377 ;; Cython extensions have to be built before running the tests.
6378 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6379 (propagated-inputs (list python-affine
6380 python-attrs
6381 python-certifi
6382 python-click
6383 python-click-plugins
6384 python-cligj
6385 python-numpy
6386 python-setuptools ; For pkg_resources.
6387 python-snuggs))
6388 (native-inputs (list gdal
6389 python-boto3
6390 python-cython
6391 python-hypothesis
6392 python-packaging
6393 python-pytest
6394 python-shapely
6395 python-wheel))
6396 (home-page "https://github.com/rasterio/rasterio")
6397 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6398 (description "This package implements fast and direct raster I/O for use
6399with Numpy and SciPy.")
6400 (license license:bsd-3)))
6401
6402(define-public python-rich-tables
6403 (package
6404 (name "python-rich-tables")
6405 (version "0.8.0")
6406 (source
6407 (origin
6408 (method git-fetch) ; no tests data in PyPi package
6409 (uri (git-reference
6410 (url "https://github.com/snejus/rich-tables")
6411 (commit version)))
6412 (file-name (git-file-name name version))
6413 (sha256
6414 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6415 (build-system pyproject-build-system)
6416 (arguments
6417 (list
6418 #:test-flags
6419 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6420 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6421 (native-inputs
6422 (list python-freezegun
6423 python-poetry-core
6424 python-pytest))
6425 (propagated-inputs
6426 (list python-funcy
6427 python-humanize
6428 python-multimethod
6429 python-platformdirs
6430 python-rgbxy
6431 python-rich
6432 python-sqlparse))
6433 (home-page "https://github.com/snejus/rich-tables")
6434 (synopsis "Ready-made rich tables for various purposes")
6435 (description
6436 "This package implements rich tables for various purposes, it's JSON
6437human-prettifier based on the @code{rich} Python library.")
6438 (license license:expat)))
6439
6440(define-public python-rich-toolkit
6441 (package
6442 (name "python-rich-toolkit")
6443 (version "0.12.0")
6444 (source
6445 (origin
6446 (method url-fetch)
6447 (uri (pypi-uri "rich_toolkit" version))
6448 (sha256
6449 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6450 (build-system pyproject-build-system)
6451 (propagated-inputs (list python-click python-rich python-typing-extensions))
6452 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6453 (home-page "https://pypi.org/project/rich-toolkit/")
6454 (synopsis "Rich toolkit for building command-line applications")
6455 (description "This package provides the Rich toolkit for building
6456command-line applications.")
6457 (license license:expat)))
6458
6459(define-public python-shapely
6460 (package
6461 (name "python-shapely")
6462 (version "2.1.1")
6463 (source
6464 (origin
6465 (method url-fetch)
6466 (uri (pypi-uri "shapely" version))
6467 (sha256
6468 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6469 (build-system pyproject-build-system)
6470 (arguments
6471 (list
6472 #:phases
6473 '(modify-phases %standard-phases
6474 (add-before 'check 'build-extensions
6475 (lambda _
6476 ;; Cython extensions have to be built before running the tests.
6477 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6478 (native-inputs
6479 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6480 (inputs
6481 (list geos))
6482 (propagated-inputs
6483 (list python-numpy))
6484 (home-page "https://github.com/shapely/shapely")
6485 (synopsis "Library for the manipulation and analysis of geometric objects")
6486 (description "Shapely is a Python package for manipulation and analysis of
6487planar geometric objects. It is based on the @code{GEOS} library.")
6488 (license license:bsd-3)))
6489
6490(define-public python-shortuuid
6491 (package
6492 (name "python-shortuuid")
6493 (version "1.0.13")
6494 (source
6495 (origin
6496 (method url-fetch)
6497 (uri (pypi-uri "shortuuid" version))
6498 (sha256
6499 (base32
6500 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6501 (build-system pyproject-build-system)
6502 (native-inputs
6503 (list python-poetry-core python-pytest))
6504 (home-page "https://github.com/skorokithakis/shortuuid")
6505 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6506 (description
6507 "@code{shortuuid} is a Python library for generating concise, unambiguous
6508and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6509module and then similar looking characters are removed.")
6510 (license license:bsd-3)))
6511
6512(define-public python-logwrap
6513 (package
6514 (name "python-logwrap")
6515 (version "11.1.1")
6516 (source
6517 (origin
6518 (method git-fetch) ; no tests in PyPI release
6519 (uri (git-reference
6520 (url "https://github.com/python-useful-helpers/logwrap")
6521 (commit version)))
6522 (file-name (git-file-name name version))
6523 (sha256
6524 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6525 (build-system pyproject-build-system)
6526 (native-inputs (list python-pytest
6527 python-setuptools
6528 python-setuptools-scm
6529 python-wheel))
6530 (home-page "https://github.com/python-useful-helpers/logwrap")
6531 (synopsis "Decorator for logging function arguments")
6532 (description "This package provides a decorator to log function arguments
6533and function call return values in a human-readable way.")
6534 (license license:asl2.0)))
6535
6536(define-public python-babel
6537 (package
6538 (name "python-babel")
6539 (version "2.16.0")
6540 (source
6541 (origin
6542 (method url-fetch)
6543 (uri (pypi-uri "babel" version))
6544 (sha256
6545 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6546 (build-system pyproject-build-system)
6547 (native-inputs
6548 (list python-freezegun
6549 python-pytest
6550 python-setuptools
6551 tzdata-for-tests))
6552 (propagated-inputs
6553 (list python-pytz))
6554 (home-page "https://babel.pocoo.org/")
6555 (synopsis
6556 "Tools for internationalizing Python applications")
6557 (description
6558 "Babel is composed of two major parts:
6559- tools to build and work with gettext message catalogs
6560- a Python interface to the CLDR (Common Locale Data Repository), providing
6561access to various locale display names, localized number and date formatting,
6562etc.")
6563 (license license:bsd-3)))
6564
6565(define-public python-bidict
6566 (package
6567 (name "python-bidict")
6568 (version "0.23.1")
6569 (source
6570 (origin
6571 (method git-fetch) ; no tests in PyPI.
6572 (uri (git-reference
6573 (url "https://github.com/jab/bidict")
6574 (commit (string-append "v" version))))
6575 (file-name (git-file-name name version))
6576 (sha256
6577 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6578 (build-system pyproject-build-system)
6579 (native-inputs
6580 (list python-pytest
6581 python-pytest-benchmark
6582 python-pytest-xdist
6583 python-setuptools
6584 python-sortedcollections
6585 python-wheel))
6586 (home-page "https://bidict.readthedocs.io")
6587 (synopsis "Bidirectional mapping library")
6588 (description "The @code{bidict} library provides several data structures
6589for working with bidirectional mappings in Python.")
6590 (license license:mpl2.0)))
6591
6592(define-public python-bip39
6593 (package
6594 (name "python-bip39")
6595 (version "0.0.2")
6596 (source
6597 (origin
6598 (method url-fetch)
6599 (uri (pypi-uri "bip39" version))
6600 (sha256
6601 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6602 (build-system pyproject-build-system)
6603 (native-inputs (list python-pytest python-setuptools))
6604 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6605 (synopsis "Self-contained and simple BIP39 implementation in Python")
6606 (description
6607 "This package provides a self-contained and simple BIP39
6608implementation written in Python. It includes a @code{bip39.py} executable.
6609
6610BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6611and a list of words that are easier to remember for humans (the
6612@emph{mnemonic}).")
6613 (license license:expat)))
6614
6615(define-public python-bitarray
6616 (package
6617 (name "python-bitarray")
6618 (version "3.4.3")
6619 (source (origin
6620 (method url-fetch)
6621 (uri (pypi-uri "bitarray" version))
6622 (sha256
6623 (base32
6624 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6625 (build-system pyproject-build-system)
6626 (arguments
6627 (list #:phases
6628 #~(modify-phases %standard-phases
6629 (replace 'check
6630 (lambda* (#:key tests? #:allow-other-keys)
6631 (when tests?
6632 ;; Step out of the source directory to avoid interference.
6633 (with-directory-excursion "/tmp"
6634 (invoke "python" "-c"
6635 "import bitarray; bitarray.test()"))))))))
6636 (native-inputs (list python-setuptools python-wheel))
6637 (home-page "https://github.com/ilanschnell/bitarray")
6638 (synopsis "Efficient arrays of booleans")
6639 (description "This package provides an object type which efficiently
6640represents an array of booleans. Bitarrays are sequence types and behave very
6641much like usual lists. Eight bits are represented by one byte in a contiguous
6642block of memory. The user can select between two representations:
6643little-endian and big-endian. All of the functionality is implemented in C.
6644Methods for accessing the machine representation are provided. This can be
6645useful when bit level access to binary files is required, such as portable
6646bitmap image files. Also, when dealing with compressed data which uses
6647variable bit length encoding, you may find this module useful.")
6648 (license license:psfl)))
6649
6650(define-public python-bitarray-2
6651 (package
6652 (inherit python-bitarray)
6653 (version "2.8.1")
6654 (source (origin
6655 (method url-fetch)
6656 (uri (pypi-uri "bitarray" version))
6657 (sha256
6658 (base32
6659 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6660
6661(define-public python-boolean.py
6662 (package
6663 (name "python-boolean.py")
6664 (version "5.0")
6665 (source
6666 (origin
6667 (method url-fetch)
6668 (uri (pypi-uri "boolean_py" version))
6669 (sha256
6670 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6671 (build-system pyproject-build-system)
6672 (native-inputs (list python-pytest python-setuptools python-wheel))
6673 (home-page "https://github.com/bastikr/boolean.py")
6674 (synopsis "Boolean algebra in one Python module")
6675 (description
6676 "This is a small Python library that implements boolean algebra.
6677It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6678@code{Symbol} class that can take on one of these two values. Calculations
6679are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6680compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6681Expressions are constructed from parsed strings or directly in Python.")
6682 (license license:bsd-2)))
6683
6684(define-public python-h5netcdf
6685 (package
6686 (name "python-h5netcdf")
6687 (version "1.3.0")
6688 (source
6689 (origin
6690 (method url-fetch)
6691 (uri (pypi-uri "h5netcdf" version))
6692 (sha256
6693 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6694 (build-system pyproject-build-system)
6695 (native-inputs
6696 (list python-netcdf4
6697 python-pytest
6698 python-setuptools
6699 python-setuptools-scm
6700 python-wheel))
6701 (propagated-inputs
6702 (list python-h5py python-packaging))
6703 (home-page "https://h5netcdf.org")
6704 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6705 (description "This package provides a Python interface for the netCDF4
6706file-format that reads and writes local or remote HDF5 files directly via
6707@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6708https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6709library.")
6710 (license license:bsd-3)))
6711
6712(define-public python-h5py
6713 ;; TODO: Move to (gnu packages python-science) or maths, prevent import mpi
6714 ;; module here.
6715 (package
6716 (name "python-h5py")
6717 (version "3.16.0")
6718 (source
6719 (origin
6720 (method git-fetch)
6721 (uri (git-reference
6722 (url "https://github.com/h5py/h5py")
6723 (commit version)))
6724 (file-name (git-file-name name version))
6725 (sha256
6726 (base32 "1s5nqhylp7daizljnwr8bwwsxd92kqgz2106vi9q1c1q920ihsyy"))))
6727 (build-system pyproject-build-system)
6728 (arguments
6729 (list
6730 ;; tests: 849 passed, 50 skipped
6731 #:test-flags
6732 #~(list "--pyargs" "h5py")
6733 #:phases
6734 #~(modify-phases %standard-phases
6735 (add-after 'unpack 'set-hdf5-options
6736 ;; For custom installation with Parallel HDF5 see:
6737 ;; <https://docs.h5py.org/en/latest/build.html#custom-installation>.
6738 (lambda _
6739 ;; XXX: Check if we need this:
6740 ;; <https://github.com/h5py/h5py/issues/2560>.
6741 ;; (setenv "H5PY_SETUP_REQUIRES" "0")
6742 ;;
6743 ;; Project is part of h5py, but availalbe at
6744 ;; <https://oldhome.schmorp.de/marc/liblzf.html>, version 3.6
6745 ;; was released on 2019.
6746 ;; (setenv "H5PY_SYSTEM_LZF" "1")
6747 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
6748 (setenv "HDF5_MPI" "ON")))
6749 (add-before 'check 'pre-check
6750 (lambda _
6751 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6752 (delete-file-recursively "h5py"))))))
6753 (native-inputs
6754 (list pkg-config
6755 python-cython
6756 python-pkgconfig
6757 python-pytest
6758 python-pytest-mpi
6759 python-setuptools))
6760 (inputs
6761 (list hdf5-parallel-openmpi))
6762 (propagated-inputs
6763 (list python-mpi4py
6764 python-numpy))
6765 (home-page "https://www.h5py.org/")
6766 (synopsis "Read and write HDF5 files from Python")
6767 (description
6768 "The h5py package provides both a high- and low-level interface to the
6769HDF5 library from Python. The low-level interface is intended to be a
6770complete wrapping of the HDF5 API, while the high-level component supports
6771access to HDF5 files, datasets and groups using established Python and NumPy
6772concepts.")
6773 (license license:bsd-3)))
6774
6775(define-public python-hdf5storage
6776 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6777 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6778 ;;
6779 ;; This package probably is sun setting, consider to remove when stops
6780 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6781 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6782 (revision "0"))
6783 (package
6784 (name "python-hdf5storage")
6785 (version (git-version "0.1.19" revision commit))
6786 (source
6787 (origin
6788 (method git-fetch)
6789 (uri (git-reference
6790 (url "https://github.com/frejanordsiek/hdf5storage")
6791 (commit commit)))
6792 (file-name (git-file-name name version))
6793 (sha256
6794 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6795 (build-system pyproject-build-system)
6796 (arguments
6797 ;; Started failing with the move to [email protected], due to modules changes.
6798 (list
6799 #:test-flags
6800 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6801 (native-inputs
6802 (list python-pytest
6803 python-setuptools))
6804 (propagated-inputs
6805 (list python-h5py
6806 python-numpy-1))
6807 (home-page "https://github.com/frejanordsiek/hdf5storage")
6808 (synopsis "Read and write Python data types from and to HDF5 files")
6809 (description
6810 "This Python package provides high-level utilities to read and write a
6811variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6812formatted files. This package also provides support for MATLAB MAT v7.3
6813formatted files, which are HDF5 files with a different extension and some
6814extra metadata. Because HDF5 and MAT files might need to be read from
6815untrusted sources, pickling is avoided in this package.")
6816 (license license:bsd-2))))
6817
6818(define-public python-prctl
6819 (package
6820 (name "python-prctl")
6821 (version "1.8.1")
6822 (source (origin
6823 (method url-fetch)
6824 (uri (pypi-uri "python-prctl" version))
6825 (sha256
6826 (base32
6827 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6828 (build-system pyproject-build-system)
6829 (arguments
6830 (list #:test-backend ''custom
6831 #:test-flags ''("test_prctl.py")
6832 #:phases
6833 #~(modify-phases %standard-phases
6834 (add-after 'unpack 'patch-tests
6835 (lambda _
6836 (substitute* "test_prctl.py"
6837 ;; actual suffix used in cpython build output dir name
6838 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6839 ;; test_no_new_privs assumes existence of /bin/ping, but
6840 ;; can never run anyway due to it requiring setuid ping.
6841 ;; just short circuit it instead.
6842 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6843 (inputs (list libcap))
6844 (native-inputs (list python-setuptools))
6845 (supported-systems (filter target-linux? %supported-systems))
6846 (home-page "https://pythonhosted.org/python-prctl")
6847 (synopsis "Linux capabilities library")
6848 (description "This package provides a Python library for controlling Linux
6849capabilities and attributes, similar to the prctl syscall.")
6850 (license license:gpl3+)))
6851
6852(define-public python-pyhimitsu
6853 (package
6854 (name "python-pyhimitsu")
6855 (version "0.0.9")
6856 (source (origin
6857 (method url-fetch)
6858 (uri (pypi-uri "py_himitsu" version))
6859 (sha256
6860 (base32
6861 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6862 (build-system pyproject-build-system)
6863 (arguments
6864 (list
6865 #:phases
6866 #~(modify-phases %standard-phases
6867 (replace 'check
6868 (lambda _
6869 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6870 (invoke "make" "check"))))))
6871 (native-inputs (list python-hatchling))
6872 (propagated-inputs (list python-pyxdg))
6873 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6874 (synopsis "Himitsu client protocol implementation in Python")
6875 (description "This package provides a library for writing Himitsu client
6876programs in Python.")
6877 (license license:expat)))
6878
6879(define-public python-hjson
6880 ;; Using commit from master branch as the PyPI version does not contain
6881 ;; the hjson/tests/ directory.
6882 (let ((revision "0")
6883 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6884 (package
6885 (name "python-hjson")
6886 (version (git-version "3.1.0" revision commit))
6887 (source (origin
6888 (method git-fetch)
6889 (uri (git-reference
6890 (url "https://github.com/hjson/hjson-py")
6891 (commit commit)))
6892 (file-name (git-file-name name version))
6893 (sha256
6894 (base32
6895 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6896 (modules '((guix build utils)))
6897 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6898 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6899 (snippet #~(substitute* "hjson/__init__.py"
6900 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6901 "{'foo': 'a', 'bar': 1}")))))
6902 (build-system pyproject-build-system)
6903 (native-inputs (list python-setuptools python-wheel))
6904 (home-page "https://github.com/hjson/hjson-py")
6905 (synopsis "Python package to parse HJSON documents")
6906 (description "This package provides a Python library and a command-line
6907interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6908 (license license:expat))))
6909
6910(define-public python-hnswlib
6911 (package
6912 (name "python-hnswlib")
6913 (version "0.8.0")
6914 (source
6915 (origin
6916 (method git-fetch)
6917 (uri (git-reference
6918 (url "https://github.com/nmslib/hnswlib")
6919 (commit (string-append "v" version))))
6920 (file-name (git-file-name name version))
6921 (sha256
6922 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6923 (build-system pyproject-build-system)
6924 (arguments
6925 (list
6926 #:phases
6927 #~(modify-phases %standard-phases
6928 (add-after 'unpack 'disable-native-optimization
6929 (lambda _
6930 (substitute* "setup.py"
6931 ((", '-march=native'")
6932 "")))))))
6933 (native-inputs
6934 (list pybind11-2
6935 python-pytest
6936 python-setuptools))
6937 (propagated-inputs
6938 (list python-numpy))
6939 (home-page "https://github.com/nmslib/hnswlib")
6940 (synopsis "Fast approximate nearest neighbor search")
6941 (description "Hnswlib is a header-only C++ implementation of fast
6942approximate nearest neighbor search with Python bindings.")
6943 (license license:asl2.0)))
6944
6945(define-public python-pylatex
6946 (package
6947 (name "python-pylatex")
6948 (version "1.4.2")
6949 (source
6950 (origin
6951 (method git-fetch)
6952 (uri (git-reference
6953 (url "https://github.com/JelteF/PyLaTeX")
6954 (commit (string-append "v" version))))
6955 (file-name (git-file-name name version))
6956 (sha256
6957 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6958 (build-system pyproject-build-system)
6959 (arguments
6960 (list #:phases
6961 #~(modify-phases %standard-phases
6962 ;; some tests attempt to create directories
6963 (add-before 'check 'set-home-directory
6964 (lambda _
6965 (setenv "HOME" "/tmp"))))))
6966 (propagated-inputs (list python-ordered-set))
6967 (native-inputs (list python-matplotlib
6968 python-pytest
6969 python-quantities
6970 python-setuptools
6971 (texlive-local-tree
6972 (list texlive-lastpage
6973 texlive-latexmk
6974 texlive-parskip))))
6975 (home-page "https://github.com/JelteF/PyLaTeX")
6976 (synopsis "Library for creating LaTeX files and snippets")
6977 (description
6978 "This package provides a Python library for creating LaTeX files and
6979snippets.")
6980 (license license:expat)))
6981
6982(define-public python-pylatexenc
6983 (package
6984 (name "python-pylatexenc")
6985 (version "2.10")
6986 (source
6987 (origin
6988 (method url-fetch)
6989 (uri (pypi-uri "pylatexenc" version))
6990 (sha256
6991 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6992 (build-system pyproject-build-system)
6993 (native-inputs (list python-pytest python-setuptools python-wheel))
6994 (home-page "https://github.com/phfaist/pylatexenc")
6995 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6996 (description
6997 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6998Unicode-to-LaTeX conversion.")
6999 (license license:expat)))
7000
7001(define-public python-lsp-black
7002 (package
7003 (name "python-lsp-black")
7004 (version "2.0.0")
7005 (source
7006 (origin
7007 (method git-fetch)
7008 (uri (git-reference
7009 (url "https://github.com/python-lsp/python-lsp-black")
7010 (commit (string-append "v" version))))
7011 (file-name (git-file-name name version))
7012 (sha256
7013 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
7014 (build-system pyproject-build-system)
7015 (arguments
7016 ;; The python version is too old for these tests to pass properly.
7017 (list #:test-flags
7018 `'("-k" ,(string-append
7019 "not test_pylsp_format_document_syntax_error"
7020 " and not test_pylsp_format_range_syntax_error"
7021 " and not test_load_config_defaults"
7022 " and not test_load_config_with_skip_options"))))
7023 (propagated-inputs
7024 (list python-black python-lsp-server python-tomli))
7025 (native-inputs
7026 (list python-pytest python-setuptools python-wheel))
7027 (home-page "https://github.com/python-lsp/python-lsp-black")
7028 (synopsis "Black plugin for the Python LSP Server")
7029 (description "This package provides a plugin with support for the
7030@code{python-black} formatter for the Python LSP Server.")
7031 (license license:expat)))
7032
7033(define-public python-pylsp-mypy
7034 (package
7035 (name "python-pylsp-mypy")
7036 (version "0.7.1")
7037 (source
7038 (origin
7039 ;; "The newest version on PyPI is indeed not published on GitHub."
7040 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
7041 (method url-fetch)
7042 (uri (pypi-uri "pylsp_mypy" version))
7043 (sha256
7044 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
7045 (build-system pyproject-build-system)
7046 (native-inputs (list python-pytest python-setuptools))
7047 (propagated-inputs (list python-mypy python-lsp-server))
7048 (home-page "https://github.com/python-lsp/pylsp-mypy")
7049 (synopsis "Mypy linter for the Python LSP Server")
7050 (description
7051 "Mypy linter integration for use with @code{python-lsp-server}.")
7052 (license license:expat)))
7053
7054(define-public python-sh
7055 (package
7056 (name "python-sh")
7057 (version "2.4.0")
7058 (source
7059 (origin
7060 (method url-fetch)
7061 (uri (pypi-uri "sh" version))
7062 (sha256
7063 (base32
7064 "1ngzjpavdxbyf79r9fh7c7icpmbwcjq907cski0r7v89hpvawl52"))))
7065 (build-system pyproject-build-system)
7066 (arguments
7067 (list
7068 #:test-flags
7069 #~(list "-k" (string-join
7070 ;; These tests are shaky.
7071 (list "not test_bad_sig_raise_exception"
7072 "test_doesnt_execute_directories"
7073 "test_environment"
7074 "test_ok_code_ignores_bad_sig_exception"
7075 "test_unicode_path")
7076 " and not ")
7077 "tests")
7078 #:phases
7079 #~(modify-phases %standard-phases
7080 (add-before 'check 'pre-check
7081 (lambda _
7082 (setenv "HOME" "/tmp"))))))
7083 (native-inputs
7084 (list python-hatchling python-pytest))
7085 (home-page "https://github.com/amoffat/sh")
7086 (synopsis "Python subprocess replacement")
7087 (description "This package provides a replacement for Python's
7088@code{subprocess} feature.")
7089 (license license:expat)))
7090
7091;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
7092;; that is updated.
7093(define-public python-sh-1
7094 (package
7095 (inherit python-sh)
7096 (version "1.14.2")
7097 (source
7098 (origin
7099 (method url-fetch)
7100 (uri (pypi-uri "sh" version))
7101 (sha256
7102 (base32
7103 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
7104 (arguments
7105 '(#:phases
7106 (modify-phases %standard-phases
7107 (replace 'check
7108 (lambda _
7109 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
7110 (setenv "HOME" "/tmp")
7111 (invoke "python" "sh.py" "test"))))))
7112 (native-inputs
7113 (list python-setuptools))))
7114
7115(define-public python-cftime
7116 (package
7117 (name "python-cftime")
7118 (version "1.6.5")
7119 (source
7120 (origin
7121 (method url-fetch)
7122 (uri (pypi-uri "cftime" version))
7123 (sha256
7124 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
7125 (build-system pyproject-build-system)
7126 (propagated-inputs
7127 (list python-numpy))
7128 (native-inputs
7129 (list python-cython
7130 python-pytest
7131 python-setuptools
7132 python-wheel))
7133 (home-page "https://unidata.github.io/cftime/")
7134 (synopsis "Library for time handling")
7135 (description
7136 "This package provides time-handling functionality that used to be part
7137of the netcdf4 package before.")
7138 (license license:expat)))
7139
7140(define-public python-netcdf4
7141 ;; TODO: Move to (gnu packages python-science).
7142 (package
7143 (name "python-netcdf4")
7144 (version "1.7.4")
7145 (source
7146 (origin
7147 (method git-fetch)
7148 (uri (git-reference
7149 (url "https://github.com/Unidata/netcdf4-python")
7150 (commit (string-append "v" version "rel"))))
7151 (file-name (git-file-name name version))
7152 (sha256
7153 (base32 "0lmapnqc4rivv0nggm8865xpni1gbcg6dc7khf5r0p16jk8gv41c"))))
7154 (build-system pyproject-build-system)
7155 (arguments
7156 (list
7157 ;; tests: Ran 115 tests
7158 #:phases
7159 #~(modify-phases %standard-phases
7160 (add-before 'build 'set-configure-flags
7161 (lambda _
7162 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
7163 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
7164 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
7165 (setenv "USE_NCCONFIG" "0")))
7166 (replace 'check
7167 (lambda* (#:key tests? #:allow-other-keys)
7168 (when tests?
7169 (with-directory-excursion "test"
7170 (setenv "NO_NET" "1")
7171 (setenv "NO_CDL" "1")
7172 (invoke "python" "run_all.py"))))))))
7173 (native-inputs
7174 (list python-cython
7175 python-packaging
7176 python-pytest
7177 python-setuptools
7178 python-setuptools-scm
7179 python-typing-extensions))
7180 (inputs
7181 ;; After python-h5py was built with MPI support it can't be used together
7182 ;; with hdf5 and netcdf built without MPI support tests and load may
7183 ;; brake when python-netcdf4 and python-h5py are used together.
7184 (list netcdf-parallel-openmpi
7185 hdf5-parallel-openmpi
7186 zlib))
7187 (propagated-inputs
7188 (list python-certifi
7189 python-cftime
7190 python-mpi4py
7191 python-numpy))
7192 (home-page "https://github.com/Unidata/netcdf4-python")
7193 (synopsis "Python/numpy interface to the netCDF library")
7194 (description "Netcdf4-python is a Python interface to the netCDF C
7195library. netCDF version 4 has many features not found in earlier
7196versions of the library and is implemented on top of HDF5. This module
7197can read and write files in both the new netCDF 4 and the old netCDF 3
7198format, and can create files that are readable by HDF5 clients. The
7199API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
7200to users of that module.")
7201 ;; The software is mainly ISC, but includes some files covered
7202 ;; by the Expat license.
7203 (license (list license:isc license:expat))))
7204
7205(define-public python-ncclient
7206 (package
7207 (name "python-ncclient")
7208 (version "0.6.19")
7209 (source
7210 (origin
7211 (method git-fetch) ;no tests in PyPI release
7212 (uri (git-reference
7213 (url "https://github.com/ncclient/ncclient")
7214 (commit (string-append "v" version))))
7215 (file-name (git-file-name name version))
7216 (sha256
7217 (base32
7218 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
7219 (build-system pyproject-build-system)
7220 (native-inputs
7221 (list python-pytest
7222 python-setuptools
7223 python-wheel))
7224 (propagated-inputs
7225 (list python-lxml
7226 python-paramiko))
7227 (home-page "https://github.com/ncclient/ncclient")
7228 (synopsis "Python library for NETCONF clients")
7229 (description "@code{ncclient} is a Python library that facilitates
7230client-side scripting and application development around the NETCONF
7231protocol.")
7232 (license license:asl2.0)))
7233
7234(define-public python-ncls
7235 (package
7236 (name "python-ncls")
7237 (version "0.0.68")
7238 (source (origin
7239 (method url-fetch)
7240 (uri (pypi-uri "ncls" version))
7241 (sha256
7242 (base32
7243 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
7244 (build-system pyproject-build-system)
7245 (arguments
7246 ;; Those tests fail with warnings (not errors) for the Numpy update.
7247 ;; Remove it at next python-team iteration.
7248 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
7249 "--ignore=examples/test_find_overlap_list.py")))
7250 (native-inputs (list python-cython
7251 python-pandas
7252 python-pytest
7253 python-setuptools
7254 python-wheel))
7255 (propagated-inputs (list python-numpy))
7256 (home-page "https://github.com/endrebak/ncls")
7257 (synopsis "Nested containment list data structure")
7258 (description
7259 "This package provides a wrapper for the nested containment list data
7260structure. It is a static interval-tree that is fast for both construction
7261and lookups.")
7262 (license license:bsd-3)))
7263
7264(define-public python-license-expression
7265 (package
7266 (name "python-license-expression")
7267 (version "30.1.0")
7268 (source
7269 (origin
7270 (method url-fetch)
7271 (uri (pypi-uri "license-expression" version))
7272 (sha256
7273 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
7274 (build-system pyproject-build-system)
7275 (native-inputs
7276 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
7277 (propagated-inputs
7278 (list python-boolean.py))
7279 (home-page "https://github.com/nexB/license-expression")
7280 (synopsis "Apply boolean logic to license expressions")
7281 (description
7282 "This Python module defines a tiny language to evaluate and compare
7283license expressions using boolean logic. Logical combinations of licenses can
7284be tested for equality, containment, and equivalence. They can be normalised
7285and simplified. It supports SPDX license expressions as well as other naming
7286conventions and aliases in the same expression.")
7287 (license license:gpl2+)))
7288
7289(define-public python-limits
7290 (package
7291 (name "python-limits")
7292 (version "5.8.0")
7293 (source
7294 (origin
7295 (method git-fetch)
7296 (uri (git-reference
7297 (url "https://github.com/alisaifee/limits")
7298 (commit version)))
7299 (file-name (git-file-name name version))
7300 (sha256
7301 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
7302 (build-system pyproject-build-system)
7303 (arguments
7304 (list
7305 ;; tests: 155 passed, 620 deselected
7306 #:test-flags
7307 #~(list
7308 ;; The test suite spawns storages in Docker.
7309 "-k" (simple-format #f "not (~a)"
7310 (string-join
7311 '("lazy_dependency" ;importing redis
7312 "memcache"
7313 "mongo"
7314 "redis"
7315 "valkey")
7316 " or "))
7317 "--ignore=tests/benchmarks")
7318 #:phases
7319 #~(modify-phases %standard-phases
7320 (add-before 'check 'adjust-tests
7321 (lambda _
7322 (substitute* "pytest.ini"
7323 ((".*--cov=.*") "")
7324 ((".*-K.*") ""))
7325 (substitute* (find-files "tests" "\\.py$")
7326 (("import pymemcache.*") "")
7327 (("import pymongo.*") "")
7328 (("import redis.*") "")
7329 (("import valkey.*") "")
7330 ;; Lazy fixtures are only used for storages.
7331 (("from pytest_lazy_fixtures import lf.*") "")
7332 (("lf\\((.+)\\)" all fixture) fixture))
7333 (substitute* "tests/test_storage.py"
7334 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
7335 (propagated-inputs (list python-deprecated python-packaging))
7336 (native-inputs
7337 (list python-flaky
7338 python-hatch-vcs
7339 python-hatchling
7340 python-pytest
7341 python-pytest-asyncio))
7342 (home-page "https://limits.readthedocs.io/")
7343 (synopsis "Rate limiting utilities")
7344 (description
7345 "This package provides a Python library to perform rate limiting with
7346commonly used storage backends.")
7347 (license license:expat)))
7348
7349(define-public python-fb-re2
7350 (package
7351 (name "python-fb-re2")
7352 (version "1.0.7")
7353 (source
7354 (origin
7355 (method git-fetch)
7356 (uri (git-reference
7357 (url "https://github.com/facebook/pyre2")
7358 (commit (string-append "v" version))))
7359 (file-name (git-file-name name version))
7360 (sha256
7361 (base32
7362 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
7363 (build-system pyproject-build-system)
7364 (arguments
7365 (list
7366 #:phases
7367 #~(modify-phases %standard-phases
7368 (add-after 'unpack 'fix-tests
7369 (lambda _
7370 (substitute* "tests/test_match.py"
7371 (("assertRaisesRegexp")
7372 "assertRaisesRegex")))))))
7373 (native-inputs
7374 (list python-pytest python-setuptools))
7375 (inputs
7376 (list re2))
7377 (home-page "https://github.com/facebook/pyre2")
7378 (synopsis "Python wrapper for RE2")
7379 (description "This package provides a Python extension that wraps Google's
7380RE2 regular expression library. It implements many of the features of
7381Python's built-in @code{re} module with compatible interfaces.")
7382 (license license:bsd-3)))
7383
7384(define-public python-filelock
7385 ;; Try to update simultaneously with the bootstrap version in
7386 ;; (gnu packages python-build).
7387 (package
7388 (name "python-filelock")
7389 (version "3.16.1")
7390 (source
7391 (origin
7392 (method url-fetch)
7393 (uri (pypi-uri "filelock" version))
7394 (sha256
7395 (base32
7396 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7397 (build-system pyproject-build-system)
7398 (arguments
7399 (list
7400 ;; Break cycle with virtualenv.
7401 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7402 (native-inputs
7403 (list python-hatch-vcs
7404 python-hatchling
7405 python-pytest
7406 python-pytest-asyncio
7407 python-pytest-mock
7408 python-setuptools-scm))
7409 (home-page "https://github.com/tox-dev/py-filelock")
7410 (synopsis "Platform independent file lock")
7411 (description "@code{filelock} contains a single module implementing
7412a platform independent file lock in Python, which provides a simple way of
7413inter-process communication.")
7414 (license license:unlicense)))
7415
7416(define-public python-filelock-next
7417 (package
7418 (inherit python-filelock)
7419 (name "python-filelock")
7420 (version "3.20.0")
7421 (source
7422 (origin
7423 (method url-fetch)
7424 (uri (pypi-uri "filelock" version))
7425 (sha256
7426 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7427 (native-inputs
7428 (list python-hatch-vcs
7429 python-hatchling
7430 python-pytest
7431 python-pytest-asyncio
7432 python-pytest-mock
7433 python-pytest-timeout))))
7434
7435(define-public python-seedir
7436 (package
7437 (name "python-seedir")
7438 (version "0.5.0")
7439 (source
7440 (origin
7441 (method url-fetch)
7442 (uri (pypi-uri "seedir" version))
7443 (sha256
7444 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7445 (build-system pyproject-build-system)
7446 (propagated-inputs (list python-natsort))
7447 (native-inputs (list python-pytest python-setuptools python-wheel))
7448 (home-page "https://github.com/earnestt1234/seedir")
7449 (synopsis
7450 "Package for creating, editing, and reading folder tree diagrams.")
7451 (description
7452 "This is a package for creating, editing, and reading folder tree
7453diagrams.")
7454 (license license:expat)))
7455
7456(define-public python-semantic-version
7457 (package
7458 (name "python-semantic-version")
7459 (version "2.10.0")
7460 (source
7461 (origin
7462 (method url-fetch)
7463 (uri (pypi-uri "semantic_version" version))
7464 (sha256
7465 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7466 (build-system pyproject-build-system)
7467 (arguments (list #:test-backend #~'nose2))
7468 (native-inputs
7469 (list python-nose2
7470 python-setuptools))
7471 (home-page "https://github.com/rbarrois/python-semanticversion")
7472 (synopsis "Semantic versioning module for Python")
7473 (description
7474 "The @code{semantic_version} class is a small library for handling
7475@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7476
7477It can compare versions, generate a new version that represents a bump in one
7478of the version levels, and check whether any given string is a proper semantic
7479version identifier.")
7480 (license license:bsd-3)))
7481
7482(define-public python-serpent
7483 (package
7484 (name "python-serpent")
7485 (version "1.41")
7486 (source
7487 (origin
7488 (method git-fetch)
7489 (uri (git-reference
7490 (url "https://github.com/irmen/Serpent")
7491 (commit (string-append "serpent-" version))))
7492 (file-name (git-file-name name version))
7493 (sha256
7494 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7495 (build-system pyproject-build-system)
7496 (arguments (list #:test-backend #~'unittest
7497 #:test-flags #~(list "discover" "-s" "tests")))
7498 (native-inputs
7499 (list python-attrs python-pytz python-setuptools))
7500 (home-page "https://github.com/irmen/Serpent")
7501 (synopsis "Serializer for literal Python expressions")
7502 (description
7503 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7504serialization. It serializes an object tree into bytes (an utf-8 encoded
7505string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7506to rebuild the original object tree.
7507
7508Because only safe literals are encoded, it is safe to send serpent data to
7509other machines, such as over the network.")
7510 (license license:expat)))
7511
7512(define-public python-setuptools-declarative-requirements
7513 (package
7514 (name "python-setuptools-declarative-requirements")
7515 (version "1.3.0")
7516 (source
7517 (origin
7518 (method url-fetch)
7519 (uri (pypi-uri "setuptools-declarative-requirements" version))
7520 (sha256
7521 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7522 (build-system pyproject-build-system)
7523 (arguments
7524 (list #:tests? #f)) ;require dated inputs
7525 (native-inputs
7526 (list python-setuptools-scm))
7527 (propagated-inputs
7528 (list python-setuptools))
7529 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7530 (synopsis "File support for setuptools declarative setup.cfg")
7531 (description
7532 "This package provides file support for setuptools declarative
7533@code{setup.cfg}.")
7534 (license license:asl2.0)))
7535
7536(define-public python-humanfriendly
7537 (package
7538 (name "python-humanfriendly")
7539 (version "10.0")
7540 (source
7541 (origin
7542 (method git-fetch)
7543 (uri (git-reference
7544 (url "https://github.com/xolox/python-humanfriendly")
7545 (commit version)))
7546 (file-name (git-file-name name version))
7547 (sha256
7548 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7549 (build-system pyproject-build-system)
7550 (arguments
7551 (list
7552 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7553 #:tests? #f))
7554 (native-inputs (list python-setuptools))
7555 (home-page "https://humanfriendly.readthedocs.io")
7556 (synopsis "Human-friendly input and output in Python")
7557 (description
7558 "The functions and classes in @code{humanfriendly} can be used to make
7559text interfaces more user-friendly. It includes tools to parse and format
7560numbers, file sizes, and timespans, timers for long-running operations, menus
7561to allow the user to choose from a list of options, and terminal interaction
7562helpers.")
7563 (license license:expat)))
7564
7565(define-public python-calver
7566 (package
7567 (name "python-calver")
7568 (version "2022.06.26")
7569 (source
7570 (origin
7571 (method git-fetch)
7572 (uri (git-reference
7573 (url "https://github.com/di/calver")
7574 (commit version)))
7575 (file-name (git-file-name name version))
7576 (sha256
7577 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7578 (build-system pyproject-build-system)
7579 (native-inputs
7580 (list python-pretend
7581 python-pytest
7582 python-setuptools
7583 python-wheel))
7584 (home-page "https://github.com/di/calver")
7585 (synopsis "Setuptools extension for CalVer package versions")
7586 (description
7587 "The calver package is a setuptools extension for automatically defining
7588your Python package version as a calendar version.")
7589 (license license:asl2.0)))
7590
7591(define-public python-can
7592 (package
7593 (name "python-can")
7594 (version "4.6.1")
7595 (source
7596 (origin
7597 (method git-fetch)
7598 (uri (git-reference
7599 (url "https://github.com/hardbyte/python-can")
7600 (commit (string-append "v" version))))
7601 (file-name (git-file-name name version))
7602 (sha256
7603 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7604 (build-system pyproject-build-system)
7605 (arguments
7606 (list
7607 #:test-flags
7608 #~(list
7609 ;; TODO: Check if it could be packed:
7610 ;; https://github.com/projectgus/python-canalystii
7611 ;;
7612 ;; Disable tests which require specific CAN drivers we have no
7613 ;; package for in Guix.
7614 "--ignore=test/test_interface_canalystii.py"
7615 ;; These tests fail with "OSError: [Errno 19] No such device".
7616 "-k" "not BasicTestUdpMulticastBusIPv")
7617 #:phases
7618 #~(modify-phases %standard-phases
7619 (add-after 'unpack 'relax-requirements
7620 (lambda _
7621 (substitute* "pyproject.toml"
7622 (("\"wrapt~=.*\"")
7623 "\"wrapt\"")))))))
7624 (propagated-inputs (list python-packaging python-wrapt))
7625 (native-inputs
7626 (list ;; python-canalystii ; Not packed yet
7627 python-hypothesis
7628 python-mock
7629 python-parameterized
7630 python-pyserial
7631 python-pytest
7632 python-pytest-timeout
7633 python-setuptools
7634 python-setuptools-scm))
7635 (home-page "https://github.com/hardbyte/python-can")
7636 (synopsis "Controller Area Network (CAN) interface module for Python")
7637 (description
7638 "This package defines the @code{can} module, which provides controller
7639area network (CAN) support for Python developers; providing common
7640abstractions to different hardware devices, and a suite of utilities for
7641sending and receiving messages on a CAN bus.")
7642 (license license:lgpl3+)))
7643
7644(define-public python-canmatrix
7645 (package
7646 (name "python-canmatrix")
7647 (version "1.2")
7648 (source
7649 (origin
7650 (method git-fetch) ; no tests data in PyPi package
7651 (uri (git-reference
7652 (url "https://github.com/ebroecker/canmatrix")
7653 (commit version)))
7654 (file-name (git-file-name name version))
7655 (sha256
7656 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7657 (build-system pyproject-build-system)
7658 (native-inputs
7659 (list python-pytest
7660 python-pytest-timeout
7661 python-setuptools
7662 python-wheel))
7663 (propagated-inputs
7664 (list python-attrs
7665 python-canopen
7666 python-click
7667 ;; python-ldfparser
7668 python-lxml
7669 python-openpyxl
7670 python-pyyaml
7671 python-xlrd
7672 python-xlwt))
7673 (home-page "https://github.com/ebroecker/canmatrix")
7674 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7675 (description
7676 "This package implements a @acronym{CAN, Controller Area Network} matrix
7677object in Python which describes the CAN-communication and its needed objects
7678such as board units, frames, signals, and values. It also includes two
7679command-line tools (@command{canconvert} and @command{cancompare}) for
7680converting and comparing CAN databases.")
7681 (license license:bsd-2)))
7682
7683(define-public python-canopen
7684 (package
7685 (name "python-canopen")
7686 (version "2.4.1")
7687 (source
7688 (origin
7689 (method git-fetch)
7690 (uri (git-reference
7691 (url "https://github.com/canopen-python/canopen")
7692 (commit (string-append "v" version))))
7693 (file-name (git-file-name name version))
7694 (sha256
7695 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7696 (build-system pyproject-build-system)
7697 (native-inputs (list python-pytest python-setuptools))
7698 (propagated-inputs (list python-can))
7699 (home-page "https://github.com/canopen-python/canopen")
7700 (synopsis "CANopen stack implementation")
7701 (description
7702 "This package provides a Python implementation of the
7703@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7704@acronym{CANs, controller-area networks}. The aim of the project is to
7705support the most common parts of the CiA 301 standard in a simple
7706Pythonic interface. It is mainly targeted for testing and automation
7707tasks rather than a standard compliant master implementation.")
7708 (license license:expat)))
7709
7710(define-public python-diskcache
7711 (package
7712 (name "python-diskcache")
7713 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7714 ;; Django fixing failing tests.
7715 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7716 (revision . "0")))
7717 (version (git-version "5.6.3"
7718 (assoc-ref properties 'revision)
7719 (assoc-ref properties 'commit)))
7720 (source
7721 (origin
7722 (method git-fetch)
7723 (uri (git-reference
7724 (url "https://github.com/grantjenks/python-diskcache")
7725 (commit (assoc-ref properties 'commit))))
7726 (file-name (git-file-name name version))
7727 (sha256
7728 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7729 (build-system pyproject-build-system)
7730 (arguments
7731 (list
7732 #:phases
7733 #~(modify-phases %standard-phases
7734 (add-after 'unpack 'fix-pytest-config
7735 (lambda _
7736 ;; Prevent full threads utilization.
7737 (substitute* "tox.ini"
7738 (("-n auto") "")))))))
7739 (native-inputs
7740 (list python-django
7741 python-pytest
7742 python-setuptools))
7743 (home-page "https://www.grantjenks.com/docs/diskcache/")
7744 (synopsis "Disk and file backed cache library")
7745 (description "DiskCache is a disk and file backed persistent cache.")
7746 (license license:asl2.0)))
7747
7748(define-public python-optparse-pretty
7749 (package
7750 (name "python-optparse-pretty")
7751 (version "0.1.1")
7752 (source
7753 (origin
7754 (method url-fetch)
7755 (uri (pypi-uri "optparse-pretty" version))
7756 (sha256
7757 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7758 (build-system pyproject-build-system)
7759 (arguments (list #:tests? #false)) ;There are none
7760 (native-inputs (list python-setuptools python-wheel))
7761 (home-page "https://github.com/gvalkov/optparse-pretty")
7762 (synopsis "Compact help formatter for optparse")
7763 (description
7764 "This module provides two help formatters for optparse. They provide
7765terser and more customizable option formatting in comparison to the default
7766help formatter.")
7767 (license license:bsd-3)))
7768
7769(define-public python-orjson
7770 (package
7771 (name "python-orjson")
7772 (version "3.9.7")
7773 (source (origin
7774 (method url-fetch)
7775 (uri (pypi-uri "orjson" version))
7776 (sha256
7777 (base32
7778 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7779 (build-system cargo-build-system)
7780 (arguments
7781 (list
7782 #:imported-modules `(,@%cargo-build-system-modules
7783 ,@%pyproject-build-system-modules)
7784 #:modules '((guix build cargo-build-system)
7785 ((guix build pyproject-build-system) #:prefix py:)
7786 (guix build utils))
7787 #:phases
7788 #~(modify-phases %standard-phases
7789 (add-after 'build 'build-python-module
7790 (assoc-ref py:%standard-phases 'build))
7791 (add-after 'build-python-module 'install-python-module
7792 (assoc-ref py:%standard-phases 'install)))
7793 #:install-source? #false))
7794 (inputs
7795 (cons maturin (cargo-inputs 'python-orjson)))
7796 (native-inputs
7797 (list python-wrapper))
7798 (home-page "https://github.com/ijl/orjson")
7799 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7800 (description "Orjson is a fast, correct JSON library for Python. It
7801benchmarks as the fastest Python library for JSON and is more correct than the
7802standard @code{json} library or other third-party libraries. It serializes
7803dataclass, datetime, numpy, and UUID instances natively.")
7804 ;; Either of these licenses
7805 (license (list license:asl2.0 license:expat))))
7806
7807(define-public python-overrides
7808 (package
7809 (name "python-overrides")
7810 (version "7.7.0")
7811 (source
7812 (origin
7813 (method url-fetch)
7814 (uri (pypi-uri "overrides" version))
7815 (sha256
7816 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7817 (build-system pyproject-build-system)
7818 (native-inputs (list python-pytest python-setuptools python-wheel))
7819 (home-page "https://github.com/mkorpela/overrides")
7820 (synopsis "Decorator to detect mismatch when overriding a method")
7821 (description
7822 "This package provides a decorator to automatically detect mismatch when
7823overriding a method.")
7824 (license license:asl2.0)))
7825
7826(define-public python-argparse-addons
7827 (package
7828 (name "python-argparse-addons")
7829 (version "0.12.0")
7830 (source
7831 (origin
7832 (method url-fetch)
7833 (uri (pypi-uri "argparse_addons" version))
7834 (sha256
7835 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7836 (build-system pyproject-build-system)
7837 (native-inputs
7838 (list python-pytest python-setuptools))
7839 (home-page "https://github.com/eerimoq/argparse_addons")
7840 (synopsis "Extensions for Python's @code{argparse} library")
7841 (description "This Python library provides additional types and actions
7842for the standard @code{argparse} library.")
7843 (license license:expat)))
7844
7845(define-public python-bitstruct
7846 (package
7847 (name "python-bitstruct")
7848 (version "8.21.0")
7849 (source
7850 (origin
7851 (method url-fetch)
7852 (uri (pypi-uri "bitstruct" version))
7853 (sha256
7854 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7855 (build-system pyproject-build-system)
7856 (native-inputs
7857 (list python-pytest
7858 python-setuptools
7859 python-wheel))
7860 (home-page "https://github.com/eerimoq/bitstruct")
7861 (synopsis "Python values to and C bit field structs converter")
7862 (description
7863 "This module performs conversions between Python values and C bit field
7864structs represented as Python byte strings. It is intended to have a similar
7865interface as the @code{struct} module from Python, but working on bits instead
7866of primitive data types like @code{char}, @code{int}, etc.")
7867 (license license:expat)))
7868
7869(define-public python-cantools
7870 (package
7871 (name "python-cantools")
7872 (version "40.5.0")
7873 (source
7874 (origin
7875 (method git-fetch)
7876 (uri (git-reference
7877 (url "https://github.com/eerimoq/cantools")
7878 (commit version)))
7879 (file-name (git-file-name name version))
7880 (sha256
7881 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7882 (build-system pyproject-build-system)
7883 (native-inputs
7884 (list python-freezegun
7885 python-parameterized
7886 python-pytest
7887 python-setuptools
7888 python-setuptools-scm))
7889 (propagated-inputs
7890 (list python-argparse-addons
7891 python-bitstruct
7892 python-can
7893 python-crccheck
7894 python-diskcache
7895 python-matplotlib
7896 python-textparser))
7897 (home-page "https://github.com/eerimoq/cantools")
7898 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7899 (description
7900 "This package includes Controller Area Network (CAN) related tools that
7901can be used to:
7902@itemize
7903@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7904@item encode and decode CAN messages
7905@item multiplex simple and extended signals
7906@item diagnose DID encoding and decoding
7907@item dump the CAN decoder output
7908@item test CAN nodes
7909@item generate C source code
7910@item monitor the CAN bus
7911@end itemize")
7912 (license license:expat)))
7913
7914(define-public python-capturer
7915 (package
7916 (name "python-capturer")
7917 (version "3.0")
7918 (source
7919 (origin
7920 (method git-fetch)
7921 (uri (git-reference
7922 (url "https://github.com/xolox/python-capturer")
7923 (commit version)))
7924 (file-name (git-file-name name version))
7925 (sha256
7926 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7927 (build-system pyproject-build-system)
7928 (native-inputs (list python-pytest python-setuptools))
7929 (propagated-inputs (list python-humanfriendly))
7930 (home-page "https://capturer.readthedocs.io")
7931 (synopsis "Capture stdout and stderr streams of the current process")
7932 (description
7933 "The capturer package makes it easy to capture the stdout and stderr
7934streams of the current process and subprocesses. Output can be relayed
7935to the terminal in real time but is also available to the Python program
7936for additional processing.")
7937 (license license:expat)))
7938
7939(define-public python-fastprogress
7940 (package
7941 (name "python-fastprogress")
7942 (version "1.0.3")
7943 (source (origin
7944 (method git-fetch)
7945 (uri (git-reference
7946 (url "https://github.com/fastai/fastprogress")
7947 (commit version)))
7948 (file-name (git-file-name name version))
7949 (sha256
7950 (base32
7951 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7952 (build-system pyproject-build-system)
7953 (arguments
7954 (list #:tests? #f ;there are no tests
7955 #:phases #~(modify-phases %standard-phases
7956 ;; XXX: Fails with: "In procedure utime: No such file
7957 ;; or directory".
7958 (delete 'ensure-no-mtimes-pre-1980))))
7959 (native-inputs (list python-setuptools python-wheel))
7960 (home-page "https://github.com/fastai/fastprogress")
7961 (synopsis "Progress bar for Jupyter Notebook and console")
7962 (description
7963 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7964 (license license:asl2.0)))
7965
7966(define-public python-coloredlogs
7967 (package
7968 (name "python-coloredlogs")
7969 (version "15.0.1")
7970 (source
7971 (origin
7972 (method git-fetch)
7973 (uri (git-reference
7974 (url "https://github.com/xolox/python-coloredlogs")
7975 (commit version)))
7976 (file-name (git-file-name name version))
7977 (sha256
7978 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7979 (build-system pyproject-build-system)
7980 (arguments
7981 (list
7982 #:test-flags
7983 #~(list "-k"
7984 (string-join
7985 (list "not test_auto_install" ; Unclear why this fails.
7986 ;; XXX: Require a "script" executable.
7987 "test_cli_conversion"
7988 "test_empty_conversion"
7989 "test_output_interception")
7990 " and not "))))
7991 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7992 (propagated-inputs (list python-capturer))
7993 (home-page "https://coloredlogs.readthedocs.io")
7994 (synopsis "Colored stream handler for Python's logging module")
7995 (description
7996 "The @code{coloredlogs} package enables colored terminal output for
7997Python's logging module. The @code{ColoredFormatter} class inherits from
7998@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7999messages in color.")
8000 (license license:expat)))
8001
8002(define-public python-editorconfig
8003 (package
8004 (name "python-editorconfig")
8005 (version "0.17.1")
8006 (source
8007 (origin
8008 (method git-fetch)
8009 (uri (git-reference
8010 (url "https://github.com/editorconfig/editorconfig-core-py")
8011 (commit (string-append "v" version))
8012 (recursive? #t)))
8013 (file-name (git-file-name name version))
8014 (sha256
8015 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
8016 (build-system pyproject-build-system)
8017 (arguments
8018 (list
8019 #:phases
8020 #~(modify-phases %standard-phases
8021 (replace 'check
8022 (lambda _
8023 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
8024 (invoke "cmake" ".")
8025 (invoke "ctest" "."))))))
8026 (native-inputs (list cmake python-setuptools python-wheel))
8027 (home-page "https://editorconfig.org/")
8028 (synopsis "EditorConfig bindings for python")
8029 (description "The EditorConfig project consists of a file format for
8030defining coding styles and a collection of text editor plugins that enable
8031editors to read the file format and adhere to defined styles. EditorConfig
8032files are easily readable and they work nicely with version control systems.")
8033 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
8034 (license (list license:bsd-2 license:psfl))))
8035
8036(define-public dosage
8037 (package
8038 (name "dosage")
8039 (version "3.3")
8040 (source
8041 (origin
8042 (method git-fetch)
8043 (uri (git-reference
8044 (url "https://github.com/webcomics/dosage")
8045 (commit version)))
8046 (file-name (git-file-name name version))
8047 (sha256
8048 (base32 "1111hs9f9k0w303vgidlxdngbfp71x6fnc5lfb62jc5kw2sgfn6z"))))
8049 (build-system pyproject-build-system)
8050 (arguments
8051 ;; It requires additional modules for integration tests.
8052 (list #:test-flags #~(list "--ignore=tests/modules/")))
8053 (native-inputs
8054 (list python-pytest
8055 python-responses
8056 python-setuptools
8057 python-setuptools-scm))
8058 (inputs
8059 (list python-imagesize
8060 python-importlib-resources
8061 python-lxml
8062 python-platformdirs
8063 python-requests
8064 python-rich))
8065 (home-page "https://github.com/webcomics/dosage")
8066 (synopsis "Comic strip downloader and archiver")
8067 (description
8068 "Dosage is designed to keep a local copy of specific webcomics and other
8069picture-based content such as Picture of the Day sites. With the
8070@command{dosage} command-line script you can get the latest strip of a
8071webcomic, catch-up to the last strip downloaded, or download a strip for a
8072particular date or index, if possible.")
8073 (license license:expat)))
8074
8075(define-public python-etcd3
8076 (package
8077 (name "python-etcd3")
8078 (version "0.12.0")
8079 (source
8080 (origin
8081 (method git-fetch)
8082 (uri (git-reference
8083 (url "https://github.com/kragniz/python-etcd3")
8084 (commit (string-append "v" version))))
8085 (file-name (git-file-name name version))
8086 (sha256
8087 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
8088 (build-system pyproject-build-system)
8089 (arguments
8090 (list
8091 ;; XXX: Tests require the etcd package.
8092 #:tests? #f
8093 #:test-backend #~'custom
8094 #:test-flags ; Taken from tox.ini.
8095 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
8096 (propagated-inputs
8097 (list python-grpcio python-protobuf python-six python-tenacity))
8098 (native-inputs
8099 (list python-mock python-pifpaf python-pytest python-setuptools))
8100 (home-page "https://github.com/kragniz/python-etcd3")
8101 (synopsis "Python client for the etcd3 API")
8102 (description
8103 "This package provide a Python client for the @code{etcd3} API.")
8104 (license license:asl2.0)))
8105
8106(define-public python-et-xmlfile
8107 (package
8108 (name "python-et-xmlfile")
8109 (version "2.0.0")
8110 (source
8111 (origin
8112 ;; Use a checkout because the PyPI archive does not contain tests.
8113 (method hg-fetch)
8114 (uri (hg-reference
8115 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
8116 (changeset version)))
8117 (file-name (string-append name "-" version "-checkout"))
8118 (sha256
8119 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
8120 (build-system pyproject-build-system)
8121 (native-inputs
8122 (list python-pytest
8123 python-lxml
8124 python-setuptools))
8125 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
8126 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
8127 (description "This Python library is based upon the @code{xmlfile} module
8128from @code{lxml}. It aims to provide a low memory, compatible implementation
8129of @code{xmlfile}.")
8130 (license license:expat)))
8131
8132(define-public python-omero-py
8133 (let ((omero-blitz-version "5.8.2"))
8134 (package
8135 (name "python-omero-py")
8136 (version "5.20.0")
8137 (source
8138 (origin
8139 (method git-fetch)
8140 (uri (git-reference
8141 (url "https://github.com/ome/omero-py")
8142 (commit (string-append "v" version))))
8143 (file-name (git-file-name name version))
8144 (sha256
8145 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
8146 (build-system pyproject-build-system)
8147 (arguments
8148 (list
8149 #:test-flags
8150 #~(list
8151 "-m" "not broken" "-rf" "test" "-s"
8152 ;; TestImport tries to download Java things; TestSessions
8153 ;; and TestBuildQuery require networking.
8154 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
8155 #:modules '((guix build pyproject-build-system)
8156 (guix build utils)
8157 (ice-9 match)
8158 (srfi srfi-1)
8159 (srfi srfi-26))
8160 #:phases
8161 #~(modify-phases %standard-phases
8162 (add-after 'unpack 'find-artifacts
8163 (lambda* (#:key inputs #:allow-other-keys)
8164 (let ((zip-file
8165 (match inputs
8166 (((labels . files) ...)
8167 (find (cut string-suffix?
8168 (string-append "omero-blitz-"
8169 #$omero-blitz-version
8170 "-python.zip")
8171 <>)
8172 files)))))
8173 (setenv "ZIP_FILE"
8174 (or zip-file (error "failed to find artifact file"))))))
8175 ;; Some tests need this, such as TestTempFileManager
8176 (add-after 'build 'set-HOME
8177 (lambda _ (setenv "HOME" "/tmp")))
8178 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
8179 ;; module to load.
8180 (delete 'sanity-check)
8181 ;; The argument parser is picky and interprets the "-real" part as
8182 ;; the first argument.
8183 (add-after 'wrap 'rename-executable
8184 (lambda _
8185 (with-directory-excursion (string-append #$output "/bin")
8186 (rename-file ".omero-real" ".omero")
8187 (substitute* "omero"
8188 (("bin/.omero-real") "bin/.omero"))))))))
8189 (propagated-inputs
8190 (list python-appdirs
8191 python-future
8192 python-numpy
8193 python-pillow
8194 python-pyyaml
8195 python-requests
8196 python-tables
8197 python-zeroc-ice-3.6))
8198 (native-inputs
8199 (list python-portalocker
8200 python-pytest
8201 python-pytest-mock
8202 python-pytest-rerunfailures
8203 python-pytest-xdist
8204 python-setuptools
8205 python-wheel
8206 unzip
8207 (origin
8208 (method url-fetch)
8209 (uri (format #f "\
8210https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
8211openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
8212 omero-blitz-version
8213 omero-blitz-version))
8214 (sha256
8215 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
8216 (home-page "https://github.com/ome/omero-py")
8217 (synopsis "Python bindings to the OMERO.blitz server")
8218 (description "This package provides Python bindings to the OMERO.blitz
8219server.")
8220 (license license:gpl2))))
8221
8222(define-public python-openpyxl
8223 (package
8224 (name "python-openpyxl")
8225 (version "3.1.5")
8226 (source
8227 (origin
8228 (method hg-fetch)
8229 (uri (hg-reference
8230 (url "https://foss.heptapod.net/openpyxl/openpyxl")
8231 (changeset version)))
8232 (file-name (string-append name "-" version "-checkout"))
8233 (sha256
8234 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
8235 (build-system pyproject-build-system)
8236 (arguments
8237 (list
8238 ;; tests: 2577 passed, 17 skipped, 4 deselected, 7 xfailed
8239 #:test-flags
8240 #~(list (string-append "--deselect=openpyxl/xml/tests/"
8241 "test_functions.py::test_iterparse"))))
8242 (native-inputs
8243 (list python-lxml
8244 python-pillow
8245 python-pytest
8246 python-setuptools))
8247 (propagated-inputs
8248 (list python-et-xmlfile))
8249 (home-page "https://openpyxl.readthedocs.io")
8250 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
8251 (description
8252 "This Python library allows reading and writing to the Excel XLSX, XLSM,
8253XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
8254standard.")
8255 (license license:expat)))
8256
8257(define-public python-sinfo
8258 (package
8259 (name "python-sinfo")
8260 (version "1.0.1")
8261 (source
8262 (origin
8263 (method git-fetch)
8264 (uri (git-reference
8265 (url "https://gitlab.com/joelostblom/session_info")
8266 (commit (string-append "v" version))))
8267 (file-name (git-file-name name version))
8268 (sha256
8269 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
8270 (build-system pyproject-build-system)
8271 (arguments
8272 (list #:tests? #f)) ; no tests in PyPI or Git
8273 (native-inputs
8274 (list python-setuptools))
8275 (propagated-inputs
8276 (list python-stdlib-list))
8277 (home-page "https://gitlab.com/joelostblom/session_info")
8278 (synopsis "Output module version information loaded in a Python session")
8279 (description "This package outputs version information for modules loaded
8280in the current session, Python, and the OS.")
8281 (license license:bsd-3)))
8282
8283(define-public python-schedule
8284 (package
8285 (name "python-schedule")
8286 (version "1.2.2")
8287 (source
8288 (origin
8289 (method url-fetch)
8290 (uri (pypi-uri "schedule" version))
8291 (sha256
8292 (base32
8293 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
8294 (build-system pyproject-build-system)
8295 (native-inputs
8296 (list python-pytest python-setuptools python-wheel))
8297 (home-page "https://github.com/dbader/schedule")
8298 (synopsis "Schedule periodic function calls in Python")
8299 (description
8300 "Schedule is an in-process scheduler for periodic jobs that uses the
8301builder pattern for configuration. Schedule lets you run Python functions (or
8302any other callable) periodically at pre-determined intervals using a simple,
8303human-friendly syntax.")
8304 (license license:expat)))
8305
8306;; XXX: This project is unmaintained since 2020, see:
8307;; <https://github.com/scour-project/scour/issues/321>.
8308;;
8309;; The only user is Inkscape, see:
8310;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
8311(define-public python-scour
8312 (package
8313 (name "python-scour")
8314 (version "0.38.2")
8315 (source
8316 (origin
8317 (method git-fetch)
8318 (uri
8319 (git-reference
8320 (url "https://gitlab.com/inkscape/extras/scour")
8321 (commit
8322 (string-append "v" version))))
8323 (file-name (git-file-name name version))
8324 (sha256
8325 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
8326 (build-system pyproject-build-system)
8327 (arguments
8328 (list #:test-backend #~'custom
8329 #:test-flags #~(list "test_scour.py")))
8330 (native-inputs
8331 (list python-setuptools))
8332 (propagated-inputs
8333 (list python-six))
8334 (home-page "https://gitlab.com/inkscape/extras/scour")
8335 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
8336 (description
8337 "The goal of Scour is to output a file that renders identically at a
8338fraction of the size by removing a lot of redundant information created by
8339most SVG editors. Optimization options are typically lossless but can be
8340tweaked for more aggressive cleaning.")
8341 (license license:asl2.0)))
8342
8343(define-public python-mechanize
8344 (package
8345 (name "python-mechanize")
8346 (version "0.4.10")
8347 (source
8348 (origin
8349 (method url-fetch)
8350 (uri (pypi-uri "mechanize" version))
8351 (sha256
8352 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
8353 (build-system pyproject-build-system)
8354 (arguments
8355 ;; XXX: Unclear why tests are failing.
8356 (list #:tests? #f
8357 #:phases
8358 #~(modify-phases %standard-phases
8359 (add-before 'check 'configure-tests
8360 (lambda _
8361 (setenv "GUIX_PYTHONPATH"
8362 (string-append (getcwd) "/test-tools:"
8363 (getenv "GUIX_PYTHONPATH"))))))))
8364 (native-inputs
8365 (list python-html5-parser
8366 python-html5lib
8367 python-lxml
8368 python-service-identity
8369 python-setuptools
8370 python-six
8371 python-twisted
8372 python-wheel))
8373 (propagated-inputs
8374 (list python-html5lib))
8375 (home-page "https://github.com/python-mechanize/mechanize")
8376 (synopsis
8377 "Stateful programmatic web browsing in Python")
8378 (description
8379 "Mechanize implements stateful programmatic web browsing in Python,
8380after Andy Lester’s Perl module WWW::Mechanize.")
8381 (license license:bsd-3)))
8382
8383(define-public python-mediapy
8384 (package
8385 (name "python-mediapy")
8386 (version "1.2.6")
8387 (source
8388 (origin
8389 (method git-fetch)
8390 (uri (git-reference
8391 (url "https://github.com/google/mediapy")
8392 (commit (string-append "v" version))))
8393 (file-name (git-file-name name version))
8394 (sha256
8395 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8396 (build-system pyproject-build-system)
8397 (arguments
8398 (list
8399 #:phases
8400 '(modify-phases %standard-phases
8401 (add-after 'unpack 'fix-references
8402 (lambda _
8403 (substitute* "mediapy_test.py"
8404 (("'/bin/bash")
8405 (string-append "'" (which "bash")))))))))
8406 (inputs (list ffmpeg-6))
8407 (propagated-inputs (list python-absl-py
8408 python-ipython
8409 python-matplotlib
8410 python-numpy
8411 python-pillow))
8412 (native-inputs
8413 (list python-flit-core
8414 python-pytest
8415 python-pytest-xdist))
8416 (home-page "https://github.com/google/mediapy")
8417 (synopsis "Read/write/show images and videos in an IPython notebook")
8418 (description "This Python library makes it easy to display images and
8419videos in a notebook.")
8420 (license license:asl2.0)))
8421
8422(define-public python-simpleaudio
8423 (package
8424 (name "python-simpleaudio")
8425 (version "1.0.4")
8426 (source
8427 (origin
8428 (method git-fetch)
8429 (uri (git-reference
8430 (url "https://github.com/hamiltron/py-simple-audio")
8431 (commit version)))
8432 (file-name (git-file-name name version))
8433 (sha256
8434 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8435 (build-system pyproject-build-system)
8436 (arguments
8437 (list
8438 #:test-backend #~'unittest
8439 #:phases
8440 #~(modify-phases %standard-phases
8441 (add-before 'check 'fix-test-run
8442 (lambda _
8443 (delete-file-recursively "simpleaudio"))))))
8444 (native-inputs (list python-setuptools))
8445 (inputs (list alsa-lib))
8446 (home-page "https://github.com/hamiltron/py-simple-audio")
8447 (synopsis "Simple, asynchronous audio playback for Python 3")
8448 (description
8449 "The @code{simplaudio} package provides cross-platform, dependency-free
8450audio playback capability for Python 3 on OSX, Windows, and Linux.")
8451 (license license:expat))) ; MIT license
8452
8453(define-public python-jsonalias
8454 (package
8455 (name "python-jsonalias")
8456 (version "0.1.2")
8457 (source (origin
8458 (method url-fetch)
8459 (uri (pypi-uri "jsonalias" version))
8460 (sha256
8461 (base32
8462 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8463 (build-system pyproject-build-system)
8464 (arguments
8465 (list #:tests? #f)) ; no tests in PyPI or Git
8466 (native-inputs
8467 (list python-poetry-core))
8468 (home-page "https://github.com/kevinheavey/jsonalias/")
8469 (synopsis "JSON type alias for Python")
8470 (description
8471 "This package provides a microlibrary that defines a JSON type alias for
8472Python.")
8473 (license license:expat)))
8474
8475(define-public python-jsonargparse
8476 (package
8477 (name "python-jsonargparse")
8478 (version "4.49.0")
8479 (source
8480 (origin
8481 (method git-fetch)
8482 (uri (git-reference
8483 (url "https://github.com/omni-us/jsonargparse/")
8484 (commit (string-append "v" version))))
8485 (file-name (git-file-name name version))
8486 (sha256
8487 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8488 (build-system pyproject-build-system)
8489 (propagated-inputs
8490 (list python-pyyaml))
8491 (native-inputs
8492 (list python-attrs
8493 python-pydantic
8494 python-pytest
8495 python-requests
8496 python-responses
8497 python-setuptools
8498 python-types-pyyaml
8499 python-types-requests))
8500 (home-page "https://github.com/omni-us/jsonargparse/")
8501 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8502 (description
8503 "This package lets you implement minimal boilerplate CLIs derived from
8504type hints and parse from command line, config files and environment
8505variables.")
8506 (license license:expat)))
8507
8508(define-public python-pymarshal
8509 (package
8510 (name "python-pymarshal")
8511 (version "2.2.3")
8512 (source (origin
8513 (method url-fetch)
8514 (uri (pypi-uri "pymarshal" version))
8515 (sha256
8516 (base32
8517 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8518 (build-system pyproject-build-system)
8519 (arguments
8520 ;; Test fails with this error:
8521 ;; "CovReportWarning: Failed to generate report: No data to report."
8522 (list #:tests? #f))
8523 (native-inputs
8524 (list python-pytest python-setuptools python-wheel))
8525 (propagated-inputs (list python-bson python-pyyaml))
8526 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8527 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8528 (description "PyMarshal replicates the feature of (un)marshalling structs
8529in Golang.")
8530 (license license:bsd-2)))
8531
8532(define-public python-simplejson
8533 (package
8534 (name "python-simplejson")
8535 (version "3.20.1")
8536 (source
8537 (origin
8538 (method url-fetch)
8539 (uri (pypi-uri "simplejson" version))
8540 (sha256
8541 (base32
8542 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8543 (build-system pyproject-build-system)
8544 (native-inputs
8545 (list python-pytest python-setuptools))
8546 (home-page "https://simplejson.readthedocs.io/en/latest")
8547 (synopsis
8548 "Json library for Python")
8549 (description
8550 "JSON (JavaScript Object Notation) is a subset of JavaScript
8551syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8552format.
8553
8554Simplejson exposes an API familiar to users of the standard library marshal
8555and pickle modules. It is the externally maintained version of the json
8556library contained in Python 2.6, but maintains compatibility with Python 2.5
8557and (currently) has significant performance advantages, even without using
8558the optional C extension for speedups. Simplejson is also supported on
8559Python 3.3+.")
8560 (license license:x11)))
8561
8562(define-public python-simple-rlp
8563 (package
8564 (name "python-simple-rlp")
8565 (version "0.1.3")
8566 (source
8567 (origin
8568 (method git-fetch)
8569 (uri (git-reference
8570 (url "https://github.com/SamuelHaidu/simple-rlp")
8571 ;; Upstream doesn't tag the git repo.
8572 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8573 (file-name (git-file-name name version))
8574 (sha256
8575 (base32
8576 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8577 (build-system pyproject-build-system)
8578 (native-inputs
8579 (list
8580 python-pytest
8581 python-setuptools))
8582 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8583 (synopsis
8584 "Python implementation of RLP (Recursive Length Prefix) encoding")
8585 (description
8586 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8587Prefix) - Encode and decode data structures.")
8588 (license license:expat)))
8589
8590(define-public python-pyicu
8591 (package
8592 (name "python-pyicu")
8593 (version "2.15.2")
8594 (source
8595 (origin
8596 (method url-fetch)
8597 (uri (pypi-uri "pyicu" version))
8598 (sha256
8599 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8600 (build-system pyproject-build-system)
8601 (native-inputs
8602 (list pkg-config
8603 python-pytest
8604 python-setuptools
8605 python-six))
8606 (inputs
8607 (list icu4c))
8608 (home-page "https://gitlab.pyicu.org/main/pyicu")
8609 (synopsis "Python extension wrapping the ICU C++ API")
8610 (description
8611 "PyICU is a python extension wrapping the ICU C++ API.")
8612 (license license:x11)))
8613
8614(define-public python-dogtail
8615 (package
8616 (name "python-dogtail")
8617 (version "0.9.11")
8618 (source
8619 (origin
8620 (method url-fetch)
8621 (uri (string-append
8622 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8623 version ".tar.gz"))
8624 (sha256
8625 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8626 (build-system pyproject-build-system)
8627 (arguments
8628 (list
8629 #:tests? #f ;TODO Launching dbus for the tests fails
8630 #:phases
8631 #~(modify-phases %standard-phases
8632 (replace 'check
8633 (lambda* (#:key tests? #:allow-other-keys)
8634 (when tests?
8635 (system "Xvfb :1 &")
8636 (setenv "DISPLAY" ":1")
8637 (invoke "dbus-run-session" "--"
8638 "nosetests" "-v" "tests/")))))))
8639 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8640 (native-inputs
8641 (list python-pynose
8642 gtk+
8643 xorg-server-for-tests
8644 dbus
8645 gsettings-desktop-schemas
8646 gobject-introspection
8647 python-setuptools))
8648 (home-page "https://gitlab.com/dogtail/dogtail/")
8649 (synopsis "GUI test tool and automation framework written in Python")
8650 (description
8651 "Dogtail is a GUI test tool and automation framework written in Python.
8652It uses Accessibility (a11y) technologies to communicate with desktop
8653applications. dogtail scripts are written in Python and executed like any
8654other Python program.")
8655 (license license:gpl2+)))
8656
8657(define-public python-doxyqml
8658 (package
8659 (name "python-doxyqml")
8660 (version "0.5.3")
8661 (source (origin
8662 (method url-fetch)
8663 (uri (pypi-uri "doxyqml" version))
8664 (sha256
8665 (base32
8666 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8667 (build-system pyproject-build-system)
8668 (arguments
8669 (list #:test-backend #~'custom
8670 #:test-flags #~(list "tests/functional/tests.py")))
8671 (native-inputs
8672 (list python-setuptools))
8673 (home-page "https://agateau.com/projects/doxyqml")
8674 (synopsis "Doxygen input filter for QML files")
8675 (description
8676 "This package provides a Doxygen input filter for QML files.")
8677 (license license:bsd-3)))
8678
8679(define-public python-doxypypy
8680 (package
8681 (name "python-doxypypy")
8682 (version "0.8.8.7")
8683 (source (origin
8684 (method url-fetch)
8685 (uri (pypi-uri "doxypypy" version))
8686 (sha256
8687 (base32
8688 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8689 (build-system pyproject-build-system)
8690 (arguments
8691 (list
8692 #:test-flags
8693 #~(list "-k" (string-join
8694 ;; Test files are not in UTF-8 format and attmet to
8695 ;; substitute shebang fails, while tests fail with error:
8696 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8697 ;; File w[387 chars]g.')" !=
8698 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8699 ;; chars]g.')"
8700 (list "not test_utf16be_bom"
8701 "test_utf16le_bom"
8702 "test_utf32be_bom"
8703 "test_utf32le_bom"
8704 "test_utf8_bom")
8705 " and not "))
8706 #:phases
8707 #~(modify-phases %standard-phases
8708 ;; compile-bytecode phases fails with error: SyntaxError: source
8709 ;; code string cannot contain null bytes.
8710 (add-after 'unpack 'fix-setup.py
8711 (lambda _
8712 (substitute* "setup.py"
8713 (("packages=.*") "packages=['doxypypy'],\n")))))))
8714 (native-inputs
8715 (list python-pytest
8716 python-setuptools
8717 python-wheel))
8718 (propagated-inputs
8719 (list python-chardet))
8720 (home-page "https://github.com/Feneric/doxypypy")
8721 (synopsis "Doxygen filter for Python")
8722 (description
8723 "This package provides a Doxygen filter for Python.")
8724 (license license:gpl2+)))
8725
8726(define-public python-empy
8727 (package
8728 (name "python-empy")
8729 (version "3.3.4")
8730 (source
8731 (origin
8732 (method url-fetch)
8733 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8734 version ".tar.gz"))
8735 (sha256
8736 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8737 (build-system pyproject-build-system)
8738 (arguments
8739 (list
8740 #:phases
8741 #~(modify-phases %standard-phases
8742 (replace 'check
8743 (lambda* (#:key tests? #:allow-other-keys)
8744 (when tests?
8745 (invoke "./test.sh")))))))
8746 (native-inputs (list python-setuptools))
8747 (home-page "http://www.alcyone.com/software/empy/")
8748 (synopsis "Templating system for Python")
8749 (description
8750 "EmPy is a system for embedding Python expressions and statements in
8751template text; it takes an EmPy source file, processes it, and produces
8752output. This is accomplished via expansions, which are special signals to the
8753EmPy system and are set off by a special prefix (by default the at sign, @@).
8754EmPy can expand arbitrary Python expressions and statements in this way, as
8755well as a variety of special forms. Textual data not explicitly delimited in
8756this way is sent unaffected to the output, allowing Python to be used in
8757effect as a markup language. Also supported are callbacks via hooks,
8758recording and playback via diversions, and dynamic, chainable filters. The
8759system is highly configurable via command line options and embedded
8760commands.")
8761 (license license:lgpl2.1+)))
8762
8763(define-public python-palettable
8764 (package
8765 (name "python-palettable")
8766 (version "3.3.3")
8767 (source (origin
8768 (method url-fetch)
8769 (uri (pypi-uri "palettable" version))
8770 (sha256
8771 (base32
8772 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8773 (build-system pyproject-build-system)
8774 (native-inputs (list python-pytest python-setuptools python-wheel))
8775 (home-page "https://jiffyclub.github.io/palettable/")
8776 (synopsis "Color palettes for Python")
8777 (description "Palettable (formerly brewer2mpl) is a library of color
8778palettes for Python. It’s written in pure Python with no dependencies, but it
8779can supply color maps for matplotlib. You can use Palettable to customize
8780matplotlib plots or supply colors for a web application.")
8781 (license license:expat)))
8782
8783(define-public python-parse-type
8784 (package
8785 (name "python-parse-type")
8786 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8787 ;; 3.12+; move back to git tag when released.
8788 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8789 (revision . "0")))
8790 (version (git-version "0.6.6"
8791 (assoc-ref properties 'revision)
8792 (assoc-ref properties 'commit)))
8793 (source
8794 (origin
8795 (method git-fetch)
8796 (uri (git-reference
8797 (url "https://github.com/jenisys/parse_type")
8798 (commit (assoc-ref properties 'commit))))
8799 (file-name (git-file-name name version))
8800 (sha256
8801 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8802 (build-system pyproject-build-system)
8803 (arguments
8804 (list
8805 ;; tests: 332 passed, 2 skipped
8806 #:phases
8807 #~(modify-phases %standard-phases
8808 (add-after 'unpack 'fix-pytest-config
8809 ;; To bypass options: --metadata, --html and --junit-xml.
8810 (lambda _
8811 (delete-file "pytest.ini"))))))
8812 (native-inputs
8813 (list python-pytest
8814 python-setuptools
8815 python-setuptools-scm))
8816 (propagated-inputs
8817 (list python-six ;hard dependency
8818 python-parse))
8819 (home-page "https://github.com/jenisys/parse_type")
8820 (synopsis "Extended parse module")
8821 (description "Parse_type extends the python parse module.")
8822 (license license:expat)))
8823
8824(define-public python-parse
8825 (package
8826 (name "python-parse")
8827 (version "1.20.2")
8828 (source
8829 (origin
8830 (method git-fetch)
8831 (uri (git-reference
8832 (url "https://github.com/r1chardj0n3s/parse")
8833 (commit version)))
8834 (file-name (git-file-name name version))
8835 (sha256
8836 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8837 (build-system pyproject-build-system)
8838 (native-inputs (list python-pytest python-setuptools))
8839 (home-page "https://github.com/r1chardj0n3s/parse")
8840 (synopsis "Parse strings")
8841 (description
8842 "Parse strings using a specification based on the Python @code{format()}
8843syntax.")
8844 (license license:x11)))
8845
8846(define-public python-parsley
8847 (package
8848 (name "python-parsley")
8849 (version "1.3")
8850 (source
8851 (origin
8852 (method git-fetch)
8853 (uri (git-reference
8854 (url "https://github.com/pyga/parsley")
8855 (commit version)))
8856 (file-name (git-file-name name version))
8857 (sha256
8858 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8859 (patches
8860 (list
8861 (origin
8862 (method url-fetch)
8863 (uri
8864 (string-append "https://github.com/pyga/parsley/commit/"
8865 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8866 (sha256
8867 (base32
8868 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8869 (build-system pyproject-build-system)
8870 (arguments
8871 (list
8872 #:test-flags #~(list "ometa/test" "terml/test")))
8873 (native-inputs
8874 (list python-pytest
8875 python-setuptools
8876 python-twisted))
8877 (home-page "https://launchpad.net/parsley")
8878 (synopsis "Parsing and pattern matching Python library")
8879 (description
8880 "Parsley is a parsing library using PEG algorithm, so each expression in
8881the grammar rules works like a Python expression. In particular, alternatives
8882are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8883Parsley is an implementation of OMeta, an object-oriented pattern-matching
8884language.")
8885 (license license:expat)))
8886
8887(define-public python-petl
8888 (package
8889 (name "python-petl")
8890 (version "1.7.16")
8891 (source
8892 (origin
8893 (method url-fetch)
8894 (uri (pypi-uri "petl" version))
8895 (sha256
8896 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8897 (build-system pyproject-build-system)
8898 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8899 python-pytest))
8900 (home-page "https://github.com/petl-developers/petl")
8901 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8902processing pipelines.")
8903 (description
8904 "This package provides a library for extracting, transforming and loading
8905tables of data. It can read from and write to databases or files in multiple
8906formats, including:
8907@itemize @bullet
8908@item python objects
8909@item delimited files
8910@item pickle files
8911@item text/XML/JSON/HTML files
8912@item python I/O streams
8913@item Excel XLS/XLSX files
8914@item HDF5 files
8915@end itemize")
8916 (license license:expat)))
8917
8918(define-public python-polib
8919 (package
8920 (name "python-polib")
8921 (version "1.2.0")
8922 (source
8923 (origin
8924 (method git-fetch)
8925 (uri (git-reference
8926 (url "https://github.com/izimobil/polib/")
8927 (commit version)))
8928 (file-name (git-file-name name version))
8929 (sha256
8930 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8931 (build-system pyproject-build-system)
8932 (arguments
8933 (list #:test-backend #~'custom
8934 #:test-flags #~(list "tests/tests.py")))
8935 (native-inputs (list python-setuptools))
8936 (home-page "https://github.com/izimobil/polib/")
8937 (synopsis "Manipulate, create and modify gettext files")
8938 (description
8939 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8940be used to create po files from scratch or to modify existing ones.")
8941 (license license:expat)))
8942
8943(define-public python-polling2
8944 (package
8945 (name "python-polling2")
8946 (version "0.5.0")
8947 (source
8948 (origin
8949 (method git-fetch)
8950 (uri (git-reference
8951 (url "https://github.com/ddmee/polling2")
8952 (commit (string-append "v" version))))
8953 (file-name (git-file-name name version))
8954 (sha256
8955 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8956 (build-system pyproject-build-system)
8957 (arguments
8958 ;; XXX: Additional , in string comparison.
8959 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8960 (native-inputs (list python-mock python-pytest python-setuptools))
8961 (home-page "https://github.com/ddmee/polling2")
8962 (synopsis "Polling utility with many configurable options")
8963 (description "Polling2 is a utility used to wait for a function to return
8964a certain expected condition.")
8965 (license license:expat)))
8966
8967(define-public python-daft
8968 (package
8969 (name "python-daft")
8970 (version "0.1.2")
8971 (source (origin
8972 (method url-fetch)
8973 (uri (pypi-uri "daft" version))
8974 (sha256
8975 (base32
8976 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8977 (build-system pyproject-build-system)
8978 (arguments
8979 (list
8980 #:test-flags
8981 '(list "-k"
8982 (string-append
8983 ;; The following tests compare matplotlib output with
8984 ;; previously generated images. They fail due to minor
8985 ;; differences in where matplotlib places labels.
8986 "not test_bca[png]"
8987 " and not test_classic[png]"
8988 " and not test_deconvolution[png]"
8989 " and not test_exoplanets[png]"
8990 " and not test_fixed[png]"
8991 " and not test_gaia[png]"
8992 " and not test_galex[png]"
8993 " and not test_huey_p_newton[png]"
8994 " and not test_logo[png]"
8995 " and not test_no_circles[png]"
8996 " and not test_no_gray[png]"
8997 " and not test_recursive[png]"
8998 " and not test_thick_lines[png]"
8999 " and not test_weaklensing[png]"
9000 " and not test_wordy[png]"))))
9001 (native-inputs
9002 (list python-pytest
9003 python-setuptools
9004 python-wheel))
9005 (propagated-inputs (list python-matplotlib python-numpy))
9006 (home-page "https://docs.daft-pgm.org/")
9007 (synopsis "PGM rendering library")
9008 (description "Daft is a Python package that uses matplotlib to
9009render pixel-perfect probabilistic graphical models for publication in
9010a journal or on the internet. With a short Python script and an
9011intuitive model-building syntax you can design directed (Bayesian
9012Networks, directed acyclic graphs) and undirected (Markov random fields)
9013models and save them in any formats that matplotlib supports (including
9014PDF, PNG, EPS and SVG).")
9015 (license license:expat)))
9016
9017(define-public python-portalocker
9018 (package
9019 (name "python-portalocker")
9020 (version "2.7.0")
9021 (source (origin
9022 (method url-fetch)
9023 (uri (pypi-uri "portalocker" version))
9024 (sha256
9025 (base32
9026 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
9027 (build-system pyproject-build-system)
9028 (native-inputs (list python-pytest
9029 python-pytest-timeout
9030 python-redis
9031 python-setuptools
9032 python-wheel))
9033 (home-page "https://github.com/WoLpH/portalocker")
9034 (synopsis "Python library for file locking")
9035 (description "Portalocker is a library to provide an easy API to file
9036locking..")
9037 (license license:bsd-3)))
9038
9039(define-public python-poyo
9040 (package
9041 (name "python-poyo")
9042 (version "0.5.0")
9043 (source
9044 (origin
9045 (method url-fetch)
9046 (uri (pypi-uri "poyo" version))
9047 (sha256
9048 (base32
9049 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
9050 (build-system pyproject-build-system)
9051 (native-inputs
9052 (list python-pytest python-setuptools))
9053 (home-page "https://github.com/hackebrot/poyo")
9054 (synopsis "Lightweight YAML Parser for Python")
9055 (description
9056 "This package provides a lightweight YAML Parser for Python. It supports
9057only a chosen subset of the YAML format that is required to parse cookiecutter
9058user configuration files. It does not have support for serializing into YAML
9059and is not compatible with JSON.")
9060 (license license:expat)))
9061
9062(define-public python-expandvars
9063 (package
9064 (name "python-expandvars")
9065 (version "1.1.2")
9066 (source
9067 (origin
9068 (method url-fetch)
9069 (uri (pypi-uri "expandvars" version))
9070 (sha256
9071 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
9072 (build-system pyproject-build-system)
9073 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
9074 (native-inputs
9075 (list python-hatchling python-pytest))
9076 (home-page "https://pypi.org/project/expandvars/")
9077 (synopsis "Expand system variables Unix style")
9078 (description "This module is inspired by GNU bash's variable expansion
9079features. It can be used as an alternative to Python's
9080@code{os.path.expandvars} function. A good use case is reading config files
9081with the flexibility of reading values from environment variables using
9082advanced features like returning a default value if some variable is not
9083defined.")
9084 (license license:expat)))
9085
9086(define-public python-expiringdict
9087 (package
9088 (name "python-expiringdict")
9089 (version "1.2.2")
9090 (source
9091 (origin
9092 (method git-fetch)
9093 (uri (git-reference
9094 (url "https://github.com/mailgun/expiringdict")
9095 (commit (string-append "v" version))))
9096 (file-name (git-file-name name version))
9097 (sha256
9098 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
9099 (build-system pyproject-build-system)
9100 (arguments
9101 ;; Started failing with [email protected], but it's only repr not functionality
9102 ;; so we should be fine.
9103 (list #:test-flags #~'("-v" "-e" "test_repr")))
9104 (native-inputs
9105 (list python-dill python-mock python-pynose python-setuptools))
9106 (home-page "https://github.com/mailgun/expiringdict")
9107 (synopsis "Dictionary with auto-expiring values for caching purposes")
9108 (description
9109 "This Python library provides an ordered dictionary
9110with a maximum capacity and auto-expiring values for caching purposes.
9111Expiration happens on any access, object is locked during cleanup
9112from expired values.")
9113 (license license:asl2.0)))
9114
9115(define-public python-extension-helpers
9116 (package
9117 (name "python-extension-helpers")
9118 (version "1.4.0")
9119 (source
9120 (origin
9121 (method git-fetch) ; no tests in the PyPI tarball
9122 (uri (git-reference
9123 (url "https://github.com/astropy/extension-helpers")
9124 (commit (string-append "v" version))))
9125 (file-name (git-file-name name version))
9126 (sha256
9127 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
9128 (build-system pyproject-build-system)
9129 (arguments
9130 (list
9131 #:test-flags
9132 #~(list "--pyargs" "extension_helpers"
9133 "-k" (string-join
9134 ;; XXX: Tests try to check various compilation options and
9135 ;; fail with some incomparability or trying to download
9136 ;; missing modules.
9137 (list "not test_only_pyproject"
9138 "test_no_setup_py"
9139 "test_limited_api")
9140 " and not "))))
9141 (native-inputs
9142 (list python-pytest
9143 python-setuptools-scm))
9144 (propagated-inputs
9145 (list python-setuptools))
9146 (home-page "https://extension-helpers.readthedocs.io")
9147 (synopsis "Astropy ecosystem utilities for building and installing packages")
9148 (description
9149 "The extension-helpers package includes convenience helpers to assist
9150with building Python packages with compiled C/Cython extensions. It is
9151developed by the Astropy project but is intended to be general and usable by
9152any Python package.")
9153 (license license:bsd-3)))
9154
9155(define-public python-milc
9156 (package
9157 (name "python-milc")
9158 (version "1.9.1")
9159 (source
9160 (origin
9161 (method git-fetch) ;no tests in PyPI archive
9162 (uri (git-reference
9163 (url "https://github.com/clueboard/milc")
9164 (commit version)))
9165 (file-name (git-file-name name version))
9166 (sha256
9167 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
9168 (build-system pyproject-build-system)
9169 (native-inputs
9170 (list python-pytest
9171 python-semver
9172 python-setuptools))
9173 (propagated-inputs
9174 (list python-argcomplete
9175 python-colorama
9176 python-halo
9177 python-platformdirs
9178 python-spinners
9179 python-types-colorama))
9180 (home-page "https://github.com/clueboard/milc")
9181 (synopsis "Python library for command line interface programs")
9182 (description "MILC is a Python library for developing command line
9183interface programs. This library provides features to parse arguments,
9184automatic tab-completion, color support, logging to @code{std}, etc.")
9185 (license license:expat)))
9186
9187(define-public python-extract-dtb
9188 (package
9189 (name "python-extract-dtb")
9190 (version "1.2.3")
9191 (source
9192 (origin
9193 (method git-fetch)
9194 (uri (git-reference
9195 (url "https://github.com/PabloCastellano/extract-dtb/")
9196 (commit version)))
9197 (file-name (git-file-name name version))
9198 (sha256
9199 (base32
9200 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
9201 (build-system pyproject-build-system)
9202 (arguments
9203 (list #:tests? #f)) ;no tests
9204 (native-inputs
9205 (list python-setuptools))
9206 (home-page "https://github.com/PabloCastellano/extract-dtb/")
9207 (synopsis "Extract device tree blobs (DTB) from kernel images")
9208 (description
9209 "This package provides a tool to split a kernel image with appended
9210@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
9211 (license license:gpl3+)))
9212
9213(define-public python-mimeparse
9214 (package
9215 (name "python-mimeparse")
9216 (version "2.0.0")
9217 (source
9218 (origin
9219 (method url-fetch)
9220 (uri (pypi-uri "python_mimeparse" version))
9221 (sha256
9222 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
9223 (build-system pyproject-build-system)
9224 (native-inputs
9225 (list python-pytest
9226 python-setuptools))
9227 (home-page "https://github.com/falconry/python-mimeparse")
9228 (synopsis "Python library for parsing MIME types")
9229 (description
9230 "Mimeparse provides basic functions for parsing MIME type names and
9231matching them against a list of media-ranges.")
9232 (license license:expat)))
9233
9234(define-public python-miniboa
9235 (package
9236 (name "python-miniboa")
9237 (version "1.0.9")
9238 (source
9239 (origin
9240 (method git-fetch) ;no tests in PyPI archive
9241 (uri (git-reference
9242 (url "https://github.com/shmup/miniboa")
9243 (commit (string-append "v" version))))
9244 (file-name (git-file-name name version))
9245 (sha256
9246 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
9247 (build-system pyproject-build-system)
9248 (native-inputs
9249 (list python-pytest
9250 python-setuptools
9251 python-wheel))
9252 (home-page "https://github.com/shmup/miniboa")
9253 (synopsis "Simple, single-threaded Telnet server")
9254 (description
9255 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
9256server.")
9257 (license license:asl2.0)))
9258
9259(define-public python-mir-eval
9260 (package
9261 (name "python-mir-eval")
9262 (version "0.8.2")
9263 (source (origin
9264 (method git-fetch)
9265 (uri (git-reference
9266 (url "https://github.com/mir-evaluation/mir_eval")
9267 (commit version)))
9268 (file-name (git-file-name name version))
9269 (sha256
9270 (base32
9271 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
9272 (build-system pyproject-build-system)
9273 (arguments
9274 (list
9275 #:phases
9276 #~(modify-phases %standard-phases
9277 (add-before 'check 'cd-tests
9278 (lambda _
9279 ;; Move to 'tests' directory because tests read data files from
9280 ;; a relative path.
9281 (chdir "tests"))))))
9282 (propagated-inputs (list python-decorator python-numpy python-scipy))
9283 (native-inputs (list python-matplotlib
9284 python-pytest
9285 python-pytest-mpl
9286 python-setuptools
9287 python-wheel))
9288 (home-page "https://github.com/mir-evaluation/mir_eval")
9289 (synopsis "Common metrics for common audio/music processing tasks")
9290 (description "This is a Python library for computing common heuristic
9291accuracy scores for various music/audio information retrieval/signal
9292processing tasks.")
9293 (license license:expat)))
9294
9295(define-public python-mizani
9296 (package
9297 (name "python-mizani")
9298 (version "0.14.4")
9299 (source
9300 (origin
9301 (method git-fetch)
9302 (uri (git-reference
9303 (url "https://github.com/has2k1/mizani")
9304 (commit (string-append "v" version))))
9305 (file-name (git-file-name name version))
9306 (sha256
9307 (base32 "00n8jbsk35ywa3saypc83p8624kr65xz6m2sbf5js5n17b9m6438"))))
9308 (build-system pyproject-build-system)
9309 (propagated-inputs
9310 (list python-matplotlib
9311 python-numpy
9312 python-pandas
9313 python-scipy))
9314 (native-inputs
9315 (list python-pytest
9316 python-setuptools
9317 python-setuptools-scm
9318 tzdata-for-tests))
9319 (home-page "https://github.com/has2k1/mizani")
9320 (synopsis "Create data visualizations in Python")
9321 (description
9322 "Mizani is a Python package for creating data visualizations. It
9323provides functions and tools to help with the creation of visually appealing
9324and informative visualizations, including scales, transformations and color
9325palettes.")
9326 (license license:bsd-3)))
9327
9328(define-public python-miniupnpc
9329 (package
9330 (name "python-miniupnpc")
9331 (version "2.3.3")
9332 (source
9333 (origin
9334 (method git-fetch)
9335 (uri
9336 (git-reference
9337 ;; The project tags miniupnpd_ as well but with a different version,
9338 ;; where updater may select a wrong version.
9339 (url "https://github.com/miniupnp/miniupnp")
9340 (commit
9341 (string-append
9342 "miniupnpc_" (string-replace-substring version "." "_")))))
9343 (file-name
9344 (git-file-name name version))
9345 (sha256
9346 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
9347 (build-system pyproject-build-system)
9348 (arguments
9349 (list
9350 #:phases
9351 #~(modify-phases %standard-phases
9352 (add-after 'unpack 'subdir
9353 (lambda* (#:key inputs #:allow-other-keys)
9354 (chdir "miniupnpc")
9355 (setenv "CC" #$(cc-for-target))
9356 (substitute* "Makefile"
9357 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
9358 (add-before 'subdir 'remove-kernel-version
9359 ;; Avoid embedding the running kernel version for reproducible builds
9360 (lambda _
9361 (substitute*
9362 "miniupnpc/updateminiupnpcstrings.sh"
9363 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
9364 (replace 'check
9365 (lambda* (#:key tests? #:allow-other-keys)
9366 (when tests?
9367 (invoke "make" "check")))))))
9368 (native-inputs
9369 (list python-setuptools
9370 python-wheel))
9371 (inputs (list python)) ;we are building a Python extension
9372 (synopsis "UPnP client for Python")
9373 (description "Miniupnpc is a client library for Python programs to set up
9374port forwards using @acronym{UPnP, Universal Plug and Play}.")
9375 (home-page "http://miniupnp.free.fr")
9376 (license license:bsd-3)))
9377
9378(define-public python-pyrsistent
9379 (package
9380 (name "python-pyrsistent")
9381 (version "0.20.0")
9382 (home-page "https://github.com/tobgu/pyrsistent")
9383 (source (origin
9384 (method url-fetch)
9385 (uri (pypi-uri "pyrsistent" version))
9386 (sha256
9387 (base32
9388 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9389 (build-system pyproject-build-system)
9390 (native-inputs
9391 (list python-pytest python-setuptools python-wheel))
9392 (synopsis "Persistent data structures for Python")
9393 (description
9394 "Pyrsistent is a number of persistent collections (by some referred to as
9395functional data structures). Persistent in the sense that they are immutable.
9396
9397All methods on a data structure that would normally mutate it instead return a
9398new copy of the structure containing the requested updates. The original
9399structure is left untouched.")
9400 (license license:expat)))
9401
9402(define-public python-exif-read
9403 (package
9404 (name "python-exif-read")
9405 (version "3.3.2")
9406 (source
9407 (origin
9408 (method git-fetch) ;PyPI doesn't contain the test images
9409 (uri (git-reference
9410 (url "https://github.com/ianare/exif-py")
9411 (commit version)))
9412 (file-name (git-file-name name version))
9413 (sha256
9414 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9415 (build-system pyproject-build-system)
9416 (native-inputs (list python-pytest python-setuptools python-wheel))
9417 (home-page "https://github.com/ianare/exif-py")
9418 (synopsis "Python library to extract EXIF data from image files")
9419 (description
9420 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9421files.")
9422 (license license:bsd-3)))
9423
9424(define-public python-pyld
9425 (package
9426 (name "python-pyld")
9427 (version "2.0.4")
9428 (source
9429 (origin
9430 (method git-fetch)
9431 (uri (git-reference
9432 (url "https://github.com/digitalbazaar/pyld")
9433 ;; Not all tags have the 'v' prefix.
9434 (commit (string-append "v" version))))
9435 (file-name (git-file-name name version))
9436 (sha256
9437 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9438 (build-system pyproject-build-system)
9439 (arguments
9440 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9441 (list #:tests? #f))
9442 (native-inputs
9443 (list python-lxml
9444 python-setuptools))
9445 (propagated-inputs
9446 (list python-aiohttp
9447 python-cachetools
9448 python-frozendict
9449 python-requests))
9450 (home-page "https://github.com/digitalbazaar/pyld")
9451 (synopsis "Python implementation of the JSON-LD specification")
9452 (description "PyLD is an implementation of the JSON-LD specification.")
9453 (license license:bsd-3)))
9454
9455(define-public python-cli-helpers
9456 (package
9457 (name "python-cli-helpers")
9458 (version "2.7.0")
9459 (source
9460 (origin
9461 (method url-fetch)
9462 (uri (pypi-uri "cli_helpers" version))
9463 (sha256
9464 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9465 (build-system pyproject-build-system)
9466 (native-inputs
9467 (list python-pytest
9468 python-setuptools))
9469 (propagated-inputs
9470 (list python-configobj
9471 python-tabulate))
9472 (home-page "https://github.com/dbcli/cli_helpers")
9473 (synopsis "Helpers for building command-line apps")
9474 (description
9475 "CLI Helpers is a Python package that makes it easy to perform common
9476tasks when building command-line apps. It's a helper library for command-line
9477interfaces.")
9478 (license license:bsd-3)))
9479
9480(define-public python-click
9481 (package
9482 (name "python-click")
9483 (version "8.4.1")
9484 (source
9485 (origin
9486 (method git-fetch)
9487 (uri (git-reference
9488 (url "https://github.com/pallets/click")
9489 (commit version)))
9490 (file-name (git-file-name name version))
9491 (sha256
9492 (base32 "18fhb6j3fz90088j5xw9vbd9k8xpq0cbk9i7izik4n3q3pm6vq3k"))))
9493 (build-system pyproject-build-system)
9494 (native-inputs
9495 (list less
9496 python-flit-core
9497 python-pytest))
9498 (home-page "https://palletsprojects.com/p/click/")
9499 (synopsis "Command line library for Python")
9500 (description
9501 "Click is a Python package for creating command line interfaces in a
9502composable way with as little code as necessary. Its name stands for
9503\"Command Line Interface Creation Kit\". It's highly configurable but comes
9504with sensible defaults out of the box.")
9505 (license license:bsd-3)))
9506
9507(define-public python-click-7
9508 (package (inherit python-click)
9509 (name "python-click")
9510 (version "7.1.2")
9511 (source
9512 (origin
9513 (method url-fetch)
9514 (uri (pypi-uri "click" version))
9515 (sha256
9516 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9517 (arguments (list #:tests? #f)) ;no tests in PyPI
9518 (native-inputs
9519 (list python-setuptools))))
9520
9521(define-public python-click-8.1
9522 (package
9523 (inherit python-click)
9524 (name "python-click")
9525 (version "8.1.7")
9526 (source
9527 (origin
9528 (method git-fetch)
9529 (uri (git-reference
9530 (url "https://github.com/pallets/click")
9531 (commit version)))
9532 (file-name (git-file-name name version))
9533 (sha256
9534 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9535 (native-inputs
9536 (list less
9537 python-pytest
9538 python-setuptools))))
9539
9540(define-public python-click-aliases
9541 (package
9542 (name "python-click-aliases")
9543 (version "1.0.6")
9544 (source
9545 (origin
9546 (method git-fetch)
9547 (uri (git-reference
9548 (url "https://github.com/click-contrib/click-aliases")
9549 (commit (string-append "v" version))))
9550 (file-name (git-file-name name version))
9551 (sha256
9552 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9553 (build-system pyproject-build-system)
9554 (native-inputs
9555 (list python-pytest
9556 python-poetry-core))
9557 (propagated-inputs
9558 (list python-click))
9559 (home-page "https://github.com/click-contrib/click-aliases")
9560 (synopsis "Enable aliases for Click")
9561 (description
9562 "This package helps to add (mutiple) aliases to a click group or command.")
9563 (license license:expat)))
9564
9565(define-public python-click-option-group
9566 (package
9567 (name "python-click-option-group")
9568 (version "0.5.9")
9569 (source
9570 (origin
9571 (method git-fetch)
9572 (uri (git-reference
9573 (url "https://github.com/click-contrib/click-option-group")
9574 (commit (string-append "v" version))))
9575 (file-name (git-file-name name version))
9576 (sha256
9577 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9578 (build-system pyproject-build-system)
9579 (native-inputs
9580 (list python-hatch-vcs
9581 python-hatchling
9582 python-pytest))
9583 (propagated-inputs
9584 (list python-click))
9585 (home-page "https://click-option-group.readthedocs.io/")
9586 (synopsis "Option groups missing in Click")
9587 (description
9588 "Click is a package for creating powerful and beautiful command line
9589interfaces (CLI) in Python, but it has no the functionality for creating option
9590groups. The aim of this package is to provide group options with extensible
9591functionality using canonical and clean API (Click-like API as far as
9592possible).")
9593 (license license:bsd-3)))
9594
9595(define-public python-clickgen
9596 (package
9597 (name "python-clickgen")
9598 (version "2.2.5")
9599 (source (origin
9600 (method git-fetch)
9601 (uri (git-reference
9602 (url "https://github.com/ful1e5/clickgen")
9603 (commit (string-append "v" version))))
9604 (file-name (git-file-name name version))
9605 (sha256
9606 (base32
9607 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9608 (build-system pyproject-build-system)
9609 (arguments
9610 (list
9611 #:test-flags
9612 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9613 '(list "-k" "not test_clickgen_raises")))
9614 (native-inputs
9615 (list python-pytest
9616 python-setuptools))
9617 (propagated-inputs
9618 (list python-attrs
9619 python-numpy
9620 python-pillow
9621 python-pyyaml
9622 python-toml))
9623 (home-page "https://github.com/ful1e5/clickgen")
9624 (synopsis "The hassle-free cursor building toolbox")
9625 (description
9626 "Clickgen is an API for building X11 and Windows cursors from .png files.
9627clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9628 (license license:expat)))
9629
9630(define-public python-clickhouse-connect
9631 (package
9632 (name "python-clickhouse-connect")
9633 (version "0.6.1")
9634 (source (origin
9635 (method git-fetch)
9636 (uri (git-reference
9637 (url "https://github.com/ClickHouse/clickhouse-connect")
9638 (commit (string-append "v" version))))
9639 (file-name (git-file-name name version))
9640 (sha256
9641 (base32
9642 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9643 (build-system pyproject-build-system)
9644 (arguments
9645 (list
9646 #:test-flags
9647 ;; All these tests require docker-compose
9648 '(list "--ignore-glob=tests/integration_tests/*")
9649 #:phases
9650 '(modify-phases %standard-phases
9651 (add-after 'unpack 'patch-pyproject
9652 (lambda _
9653 ;; Our version of pytest is confused by this field.
9654 (substitute* "pyproject.toml"
9655 (("^env_files.*") ""))))
9656 (add-before 'check 'build-extensions
9657 (lambda _
9658 ;; Cython extensions have to be built before running the tests.
9659 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9660 (propagated-inputs
9661 (list python-arrow
9662 python-certifi
9663 python-lz4
9664 python-numpy
9665 python-orjson
9666 python-pandas
9667 python-pytz
9668 python-setuptools ; For pkg_resources.
9669 python-sqlalchemy
9670 python-urllib3
9671 python-zstandard))
9672 (native-inputs
9673 (list python-cython
9674 python-pytest
9675 python-wheel))
9676 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9677 (synopsis
9678 "ClickHouse database core driver for Python, Pandas, and Superset")
9679 (description
9680 "This package provides a high performance core database driver for
9681connecting ClickHouse to Python, Pandas, and Superset.")
9682 (license license:asl2.0)))
9683
9684(define-public python-cligj
9685 (package
9686 (name "python-cligj")
9687 (version "0.7.2")
9688 (source
9689 (origin
9690 (method url-fetch)
9691 (uri (pypi-uri "cligj" version))
9692 (sha256
9693 (base32
9694 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9695 (build-system pyproject-build-system)
9696 (native-inputs
9697 (list python-pytest
9698 python-setuptools))
9699 (propagated-inputs
9700 (list python-click))
9701 (home-page "https://github.com/mapbox/cligj")
9702 (synopsis "Click params for command line interfaces to GeoJSON")
9703 (description
9704 "cligj is for Python developers who create command line interfaces
9705for geospatial data. cligj allows you to quickly build consistent,
9706well-tested and interoperable CLIs for handling GeoJSON.")
9707 (license license:bsd-3)))
9708
9709(define-public python-cloup
9710 (package
9711 (name "python-cloup")
9712 (version "3.0.8")
9713 (source (origin
9714 (method url-fetch)
9715 (uri (pypi-uri "cloup" version))
9716 (sha256
9717 (base32
9718 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9719 (build-system pyproject-build-system)
9720 (propagated-inputs (list python-click))
9721 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9722 (home-page "https://github.com/janLuke/cloup")
9723 (synopsis "Extension library for python-click")
9724 (description
9725 "Cloup enriches Click with several features that make it more expressive
9726and configurable such as option groups, constraints, subcommand aliases,
9727subcommands sections and a themeable HelpFormatter.")
9728 (license license:bsd-3)))
9729
9730(define-public python-jsondiff
9731 (package
9732 (name "python-jsondiff")
9733 (version "2.2.1")
9734 (source
9735 (origin
9736 (method url-fetch)
9737 (uri (pypi-uri "jsondiff" version))
9738 (sha256
9739 (base32
9740 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9741 (build-system pyproject-build-system)
9742 (arguments
9743 (list
9744 #:phases
9745 #~(modify-phases %standard-phases
9746 (add-before 'build 'set-version
9747 (lambda _
9748 (substitute* "pyproject.toml"
9749 (("^version_file.*") "")
9750 (("dynamic = \\[\"version\"\\]")
9751 (string-append "version = \"" #$version "\""))))))))
9752 (propagated-inputs (list python-pyyaml))
9753 (native-inputs
9754 (list python-hypothesis
9755 python-pytest
9756 python-setuptools
9757 python-setuptools-scm
9758 python-wheel))
9759 (home-page "https://github.com/fzumstein/jsondiff")
9760 (synopsis "Compare JSON and JSON-like structures in Python")
9761 (description "@code{jsondiff} is a Python library which lets you compare,
9762diff, and patch JSON and JSON-like structures in Python.")
9763 (license license:expat)))
9764
9765(define-public python-ddlparse
9766 (package
9767 (name "python-ddlparse")
9768 (version "1.10.0")
9769 (source
9770 (origin
9771 (method url-fetch)
9772 (uri (pypi-uri "ddlparse" version))
9773 (sha256
9774 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9775 (build-system pyproject-build-system)
9776 (native-inputs
9777 (list python-pytest python-setuptools))
9778 (propagated-inputs (list python-pyparsing))
9779 (home-page "https://github.com/shinichi-takii/ddlparse")
9780 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9781 (description "This package provides @code{ddlparse}, a Python library to parse
9782and convert DDL to BigQuery JSON schema.")
9783 (license license:bsd-3)))
9784
9785(define-public python-jsonschema
9786 (package
9787 (name "python-jsonschema")
9788 (version "4.26.0")
9789 (source
9790 (origin
9791 (method git-fetch)
9792 (uri (git-reference
9793 (url "https://github.com/Julian/jsonschema")
9794 (commit (string-append "v" version))))
9795 (file-name (git-file-name name version))
9796 (sha256
9797 (base32 "0p89jy7s1agi2zqrsdm56p843k847n9cixjsc12hnzscll37kysk"))))
9798 (build-system pyproject-build-system)
9799 (arguments
9800 (list
9801 ;; tests: 7762 passed, 53 skipped
9802 #:phases
9803 #~(modify-phases %standard-phases
9804 (add-before 'check 'pre-check
9805 (lambda _
9806 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9807 (native-inputs
9808 (list python-hatchling
9809 python-hatch-fancy-pypi-readme
9810 python-hatch-vcs
9811 python-jsonpath-ng
9812 python-pytest))
9813 (propagated-inputs
9814 (list python-attrs
9815 python-jsonschema-specifications
9816 python-referencing
9817 python-rpds-py
9818 ;; [optional]
9819 python-fqdn
9820 python-idna
9821 python-isoduration
9822 python-jsonpointer
9823 python-rfc3339-validator
9824 python-rfc3986-validator
9825 python-rfc3987-syntax ;sanity-check fails without this
9826 python-uri-template
9827 python-webcolors))
9828 (home-page "https://github.com/Julian/jsonschema")
9829 (synopsis "Implementation of JSON Schema for Python")
9830 (description
9831 "Jsonschema is an implementation of JSON Schema for Python.")
9832 (license license:expat)))
9833
9834;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9835;; version.
9836(define-public python-jsonschema-3
9837 (package
9838 (inherit python-jsonschema)
9839 (version "3.2.0")
9840 (source (origin
9841 (method url-fetch)
9842 (uri (pypi-uri "jsonschema" version))
9843 (sha256
9844 (base32
9845 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9846 (arguments
9847 (substitute-keyword-arguments arguments
9848 ((#:tests? _ #t) #f)))
9849 (propagated-inputs
9850 (list python-attrs
9851 python-pyrsistent
9852 python-typing-extensions))
9853 (native-inputs
9854 (list python-setuptools-scm python-twisted
9855 python-setuptools python-wheel))))
9856
9857;; A bare minimal package, mainly to use in tests and reduce closure size.
9858;; Tests are left out in the main package to slim down native-inputs and
9859;; propagated-inputs.
9860(define-public python-jsonschema-minimal
9861 (package/inherit python-jsonschema
9862 (name "python-jsonschema-minimal")
9863 (arguments
9864 (substitute-keyword-arguments arguments
9865 ((#:tests? _ #t) #f)))
9866 (native-inputs
9867 (list python-hatchling
9868 python-hatch-fancy-pypi-readme
9869 python-hatch-vcs))
9870 (propagated-inputs
9871 (list python-attrs
9872 python-jsonschema-specifications
9873 python-referencing
9874 python-rpds-py))))
9875
9876(define-public python-jsonschema-path
9877 (package
9878 (name "python-jsonschema-path")
9879 (version "0.3.2")
9880 (source
9881 (origin
9882 (method url-fetch)
9883 (uri (pypi-uri "jsonschema_path" version))
9884 (sha256
9885 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9886 (build-system pyproject-build-system)
9887 (arguments
9888 (list
9889 #:tests? #false ;there are none
9890 #:phases
9891 '(modify-phases %standard-phases
9892 (add-after 'unpack 'relax-requirements
9893 (lambda _
9894 (substitute* "pyproject.toml"
9895 (("referencing = \">=0.28.0,<0.32.0\"")
9896 "referencing = \">=0.28.0\"")))))))
9897 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9898 python-requests))
9899 (native-inputs (list python-poetry-core))
9900 (home-page "https://github.com/p1c2u/jsonschema-path")
9901 (synopsis "JSONSchema Spec with object-oriented paths")
9902 (description "This package implements object-oriented JSONSchema. It lets
9903you traverse a schema like paths and access a schema on demand with separate
9904dereferencing accessor layer.")
9905 (license license:asl2.0)))
9906
9907(define-public python-jsonschema-objects
9908 (package
9909 (name "python-jsonschema-objects")
9910 (version "0.5.7")
9911 (source
9912 (origin
9913 (method git-fetch)
9914 (uri (git-reference
9915 (url "https://github.com/cwacek/python-jsonschema-objects/")
9916 (commit version)))
9917 (file-name (git-file-name name version))
9918 (sha256
9919 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9920 (build-system pyproject-build-system)
9921 (native-inputs
9922 (list python-pytest
9923 python-pytest-mock
9924 python-setuptools))
9925 (propagated-inputs
9926 (list python-inflection
9927 python-jsonschema
9928 python-markdown))
9929 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9930 (synopsis "Automatic Python binding generation from JSON schemas")
9931 (description
9932 "This package provides an automatic class-based binding to JSON
9933Schemas for use in python.")
9934 (license license:expat)))
9935
9936(define-public python-jsonschema-specifications
9937 (package
9938 (name "python-jsonschema-specifications")
9939 (version "2025.9.1")
9940 (source
9941 (origin
9942 (method git-fetch)
9943 (uri (git-reference
9944 (url "https://github.com/python-jsonschema/jsonschema-specifications")
9945 (commit (string-append "v" version))))
9946 (file-name (git-file-name name version))
9947 (sha256
9948 (base32 "0fxjcq2qqzahfi9jinns2gmrnjq1zf216dr3i480aphabdx1c67z"))))
9949 (build-system pyproject-build-system)
9950 (native-inputs
9951 (list python-hatch-vcs
9952 python-hatchling
9953 python-pytest))
9954 (propagated-inputs
9955 (list python-referencing))
9956 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9957 (synopsis
9958 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9959 (description
9960 "This package provides JSON support files from the JSON Schema
9961Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9962from Python as a referencing-based Schema Registry.")
9963 (license license:expat)))
9964
9965(define-public python-schema
9966 (package
9967 (name "python-schema")
9968 (version "0.7.8")
9969 (source
9970 (origin
9971 (method git-fetch)
9972 (uri (git-reference
9973 (url "https://github.com/keleshev/schema")
9974 (commit (string-append "v" version))))
9975 (file-name (git-file-name name version))
9976 (sha256
9977 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9978 (build-system pyproject-build-system)
9979 (native-inputs
9980 (list python-pytest python-setuptools))
9981 (home-page "https://github.com/keleshev/schema")
9982 (synopsis "Simple data validation library")
9983 (description
9984 "@code{python-schema} is a library for validating Python data
9985structures, such as those obtained from config-files, forms, external
9986services or command-line parsing, converted from JSON/YAML (or
9987something else) to Python data-types.")
9988 (license license:psfl)))
9989
9990(define-public python-kitchen
9991 (package
9992 (name "python-kitchen")
9993 (version "1.2.6")
9994 (source
9995 (origin
9996 (method git-fetch)
9997 (uri (git-reference
9998 (url "https://github.com/fedora-infra/kitchen")
9999 (commit version)))
10000 (file-name (git-file-name name version))
10001 (sha256
10002 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
10003 (build-system pyproject-build-system)
10004 (arguments
10005 (list
10006 #:test-flags
10007 #~(list "kitchen3"
10008 ;; XXX: Unclear why these tests fail.
10009 "-e" "test_invalid_fallback_no_raise"
10010 "-e" "test_internal_generate_combining_table"
10011 "-e" "test_lgettext"
10012 "-e" "test_lngettext"
10013 "-e" "test_easy_gettext_setup_non_unicode")
10014 #:phases
10015 #~(modify-phases %standard-phases
10016 (add-before 'check 'delete-broken-test-files
10017 (lambda _
10018 (delete-file "kitchen3/tests/test__all__.py")
10019 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
10020 (native-inputs (list python-pynose python-setuptools))
10021 (home-page "https://github.com/fedora-infra/kitchen")
10022 (synopsis "Python API for snippets")
10023 (description
10024 "@code{kitchen} module provides a python API for all sorts of little
10025useful snippets of code that everybody ends up writing for their projects but
10026never seem big enough to build an independent release. Use kitchen and stop
10027cutting and pasting that code over and over.")
10028 (license (list license:lgpl2.1+
10029 ;; subprocess.py, test_subprocess.py,
10030 ;; kitchen/pycompat25/defaultdict.py:
10031 license:psfl))))
10032
10033(define-public python-roman
10034 (package
10035 (name "python-roman")
10036 (version "5.2")
10037 (source
10038 (origin
10039 (method git-fetch)
10040 (uri (git-reference
10041 (url "https://github.com/zopefoundation/roman")
10042 (commit version)))
10043 (file-name (git-file-name name version))
10044 (sha256
10045 (base32
10046 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
10047 (build-system pyproject-build-system)
10048 (arguments
10049 (list
10050 #:test-backend #~'unittest
10051 #:test-flags #~(list "discover" "-s" "src")))
10052 (native-inputs (list python-setuptools))
10053 (home-page "https://github.com/zopefoundation/roman")
10054 (synopsis "Integer to Roman numerals converter")
10055 (description
10056 "This package provides a small helper library to convert Arabic Numbers
10057to Roman Numerals.")
10058 (license license:zpl2.1)))
10059
10060(define-public python-rollbar
10061 (package
10062 (name "python-rollbar")
10063 (version "1.3.0")
10064 (source (origin
10065 (method url-fetch)
10066 (uri (pypi-uri "rollbar" version))
10067 (sha256
10068 (base32
10069 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
10070 (build-system pyproject-build-system)
10071 (native-inputs (list python-httpx
10072 python-pytest
10073 python-setuptools
10074 python-webob
10075 python-wheel))
10076 (inputs (list python-requests))
10077 (home-page "https://github.com/rollbar/pyrollbar")
10078 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
10079 (description
10080 "Python SDK for reporting exceptions, errors, and log messages
10081to @url{https://rollbar.com/, Rollbar}.
10082
10083Capabilities include:
10084
10085@itemize @bullet
10086@item Sending messages and exceptions with arbitrary context
10087@item Getting back aggregates
10088@item Debugging production issues
10089@end itemize")
10090 (license license:expat)))
10091
10092(define-public python-pyjwt
10093 (package
10094 (name "python-pyjwt")
10095 (version "2.10.1")
10096 (source
10097 (origin
10098 (method url-fetch)
10099 (uri (pypi-uri "pyjwt" version))
10100 (sha256
10101 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
10102 (build-system pyproject-build-system)
10103 (arguments
10104 (list
10105 ;; tests: 286 passed, 4 skipped, 1 deselected
10106 ;;
10107 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
10108 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
10109 ;; resolution>"
10110 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
10111 (native-inputs
10112 (list python-pytest
10113 python-setuptools))
10114 (propagated-inputs
10115 (if (supported-package? python-cryptography)
10116 (list python-cryptography)
10117 '()))
10118 (home-page "https://github.com/progrium/pyjwt")
10119 (synopsis "JSON Web Token implementation in Python")
10120 (description
10121 "PyJWT is a JSON Web Token implementation written in Python.")
10122 (license license:expat)))
10123
10124(define-public python-pymsgbox
10125 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
10126 (revision "1"))
10127 (package
10128 (name "python-pymsgbox")
10129 (version (git-version "1.0.6" revision commit))
10130 (source
10131 (origin
10132 (method git-fetch)
10133 (uri (git-reference
10134 (url "https://github.com/asweigart/PyMsgBox")
10135 (commit commit)))
10136 (file-name (git-file-name name version))
10137 (sha256
10138 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
10139 (build-system pyproject-build-system)
10140 (arguments
10141 ;; Circular dependency to run tests:
10142 ;; Tests need pyautogui, which depends on pymsgbox.
10143 '(#:tests? #f))
10144 (native-inputs (list python-setuptools python-wheel))
10145 (home-page "https://github.com/asweigart/PyMsgBox")
10146 (synopsis "Python module for JavaScript-like message boxes")
10147 (description
10148 "PyMsgBox is a simple, cross-platform, pure Python module for
10149JavaScript-like message boxes. Types of dialog boxes include:
10150@enumerate
10151@item alert
10152@item confirm
10153@item prompt
10154@item password
10155@end enumerate
10156")
10157 (license license:bsd-3))))
10158
10159(define-public python-pympler
10160 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
10161 (revision "0"))
10162 (package
10163 (name "python-pympler")
10164 (version (git-version "1.1" revision commit))
10165 (source
10166 (origin
10167 (method git-fetch)
10168 (uri (git-reference
10169 (url "https://github.com/pympler/pympler")
10170 (commit commit)))
10171 (file-name (git-file-name name version))
10172 (sha256
10173 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
10174 (build-system pyproject-build-system)
10175 (arguments
10176 (list
10177 #:tests? #f ;FIXME: tests timeout.
10178 #:test-flags
10179 #~(list
10180 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
10181 ;; != 'function (muppy.test_summary.func)'.
10182 ;; See <https://github.com/pympler/pympler/issues/134>.
10183 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
10184 ;; This test times out.
10185 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback"
10186 "--deselect=test/muppy/test_tracker.py::TrackerTest::test_otracker_diff")))
10187 (native-inputs
10188 (list python-pytest python-setuptools))
10189 (home-page "https://pythonhosted.org/Pympler/")
10190 (synopsis "Measure, monitor and analyze memory behavior")
10191 (description
10192 "Pympler is a development tool to measure, monitor and analyze
10193the memory behavior of Python objects in a running Python application.
10194
10195By pympling a Python application, detailed insight in the size and the
10196lifetime of Python objects can be obtained. Undesirable or unexpected
10197runtime behavior like memory bloat and other @samp{pymples} can easily
10198be identified.
10199
10200A web profiling frontend exposes process statistics, garbage
10201visualisation and class tracker statistics.")
10202 (license license:asl2.0))))
10203
10204(define-public python-itsdangerous
10205 (package
10206 (name "python-itsdangerous")
10207 (version "2.2.0")
10208 (source
10209 (origin
10210 (method url-fetch)
10211 (uri (pypi-uri "itsdangerous" version))
10212 (sha256
10213 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
10214 (build-system pyproject-build-system)
10215 (native-inputs
10216 (list python-flit-core
10217 python-freezegun
10218 python-pytest))
10219 (home-page "https://palletsprojects.com/p/itsdangerous/")
10220 (synopsis "Python library for passing data to/from untrusted environments")
10221 (description
10222 "Itsdangerous provides various helpers to pass trusted data to untrusted
10223environments and back.")
10224 (license license:bsd-3)))
10225
10226;; WARNING: This package is a dependency of mesa.
10227(define-public python-pyyaml
10228 (package
10229 (name "python-pyyaml")
10230 (version "6.0.3")
10231 (source
10232 (origin
10233 (method git-fetch)
10234 (uri (git-reference
10235 (url "https://github.com/yaml/pyyaml")
10236 (commit version)))
10237 (file-name (git-file-name name version))
10238 (sha256
10239 (base32 "0w00gkjqx1g8c5gdm9qqznnj7ijzfjqwqgymppqw5lbw38h2hjld"))))
10240 (build-system pyproject-build-system)
10241 (native-inputs
10242 (list python-cython
10243 python-pytest
10244 python-setuptools))
10245 (inputs
10246 (list libyaml))
10247 (home-page "https://pyyaml.org")
10248 (synopsis "YAML parser and emitter for Python")
10249 (description
10250 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
10251complete YAML 1.1 parser, Unicode support, pickle support, capable extension
10252API, and sensible error messages. PyYAML supports standard YAML tags and
10253provides Python-specific tags that represent an arbitrary Python object.")
10254 (license license:expat)))
10255
10256(define-public python-crossenv
10257 (package
10258 (name "python-crossenv")
10259 (version "1.6.1")
10260 (source
10261 (origin
10262 (method git-fetch)
10263 (uri (git-reference
10264 (url "https://github.com/benfogle/crossenv")
10265 (commit (string-append "v" version))))
10266 (file-name (git-file-name name version))
10267 (sha256
10268 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
10269 (build-system pyproject-build-system)
10270 (arguments
10271 (list
10272 ;; XXX: Running test require setting environment variables for
10273 ;; architectures.
10274 #:tests? #f))
10275 (native-inputs (list python-hatchling))
10276 (home-page "https://github.com/benfogle/crossenv")
10277 (synopsis "Cross-compiling virtualenv for Python")
10278 (description
10279 "This package is a tool for cross-compiling extension modules. It
10280creates a special virtual environment such that @command{pip} or
10281@file{setup.py} will cross compile packages for you, usually with no further
10282work on your part.")
10283 (license license:expat)))
10284
10285(define-public python-linkify-it-py
10286 (package
10287 (name "python-linkify-it-py")
10288 (version "2.1.0")
10289 (source (origin
10290 (method git-fetch)
10291 (uri (git-reference
10292 (url "https://github.com/tsutsu3/linkify-it-py")
10293 (commit (string-append "v" version))))
10294 (file-name (git-file-name name version))
10295 (sha256
10296 (base32
10297 "006yvm2pcilq60zb02ijhdma26csynhkffb8wscjmjzbwqq8fzqh"))))
10298 (build-system pyproject-build-system)
10299 (propagated-inputs (list python-uc-micro-py))
10300 (native-inputs (list python-pytest python-setuptools))
10301 (home-page "https://github.com/tsutsu3/linkify-it-py")
10302 (synopsis "Links recognition library with full Unicode support")
10303 (description "This is Python port of
10304@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
10305recognition library with full Unicode support. It has features like:
10306@itemize
10307@item Full unicode support, with @i{astral} characters
10308@item International domains support
10309@item Allows rules extension and custom normalizers.
10310@end itemize")
10311 (license license:expat)))
10312
10313(define-public python-makefun
10314 (package
10315 (name "python-makefun")
10316 ;; Released version fails tests in Python 3.12 due to asyncio
10317 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
10318 (revision . "0")))
10319 (version (git-version "1.16.0"
10320 (assoc-ref properties 'revision)
10321 (assoc-ref properties 'commit)))
10322 (source
10323 (origin
10324 (method git-fetch)
10325 (uri (git-reference
10326 (url "https://github.com/smarie/python-makefun")
10327 (commit (assoc-ref properties 'commit))))
10328 (file-name (git-file-name name version))
10329 (sha256
10330 (base32
10331 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
10332 (build-system pyproject-build-system)
10333 (native-inputs
10334 (list python-pytest
10335 python-pytest-asyncio
10336 python-setuptools
10337 python-setuptools-scm))
10338 (home-page "https://github.com/smarie/python-makefun")
10339 (synopsis "Library to dynamically create python functions")
10340 (description "@code{makefun} helps create functions dynamically with a
10341given signature. It was largely inspired by @code{python-decorator} and
10342@code{functools}.")
10343 (license license:bsd-3)))
10344
10345(define-public python-markdown-it-py
10346 (package
10347 (name "python-markdown-it-py")
10348 (version "4.0.0")
10349 (source
10350 (origin
10351 (method git-fetch)
10352 (uri (git-reference
10353 (url "https://github.com/executablebooks/markdown-it-py")
10354 (commit (string-append "v" version))))
10355 (file-name (git-file-name name version))
10356 (sha256
10357 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
10358 (build-system pyproject-build-system)
10359 (arguments (list #:test-flags #~(list "--benchmark-disable")))
10360 (native-inputs
10361 (list python-flit-core
10362 python-pytest
10363 python-pytest-benchmark
10364 python-pytest-regressions
10365 python-requests))
10366 (propagated-inputs
10367 (list python-commonmark
10368 python-linkify-it-py
10369 python-markdown
10370 python-mdurl
10371 python-mistletoe
10372 python-mistune
10373 python-panflute
10374 python-pyyaml))
10375 (home-page "https://github.com/executablebooks/markdown-it-py")
10376 (synopsis "Python port of markdown-it")
10377 (description
10378 "This is a Python port of @code{markdown-it}, and some of its associated
10379plugins. The driving design philosophy of the port has been to change as
10380little of the fundamental code structure (file names, function name, etc) as
10381possible.")
10382 (license license:expat)))
10383
10384(define-public python-markupsafe
10385 (package
10386 (name "python-markupsafe")
10387 (version "3.0.3")
10388 (source
10389 (origin
10390 (method url-fetch)
10391 (uri (pypi-uri "markupsafe" version))
10392 (sha256
10393 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10394 (build-system pyproject-build-system)
10395 ;; tests: 79 passed, 1 skipped
10396 (native-inputs
10397 (list python-pytest
10398 python-setuptools))
10399 (home-page "https://markupsafe.palletsprojects.com")
10400 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10401 (description
10402 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10403for Python.")
10404 (license license:bsd-3)))
10405
10406(define-public python-jinja2
10407 (package
10408 (name "python-jinja2")
10409 (version "3.1.6")
10410 (source
10411 (origin
10412 (method git-fetch)
10413 (uri (git-reference
10414 (url "https://github.com/pallets/jinja")
10415 (commit version)))
10416 (file-name (git-file-name name version))
10417 (sha256
10418 (base32 "01ds59a1cync34xq7s0q6f50k9nvn2n80zh62qa2a8vnr7fz5nlv"))))
10419 (build-system pyproject-build-system)
10420 (native-inputs
10421 (list python-flit-core
10422 python-pytest
10423 python-trio))
10424 (propagated-inputs
10425 (list python-markupsafe))
10426 (home-page "https://jinja.palletsprojects.com/")
10427 (synopsis "Python template engine")
10428 (description
10429 "Jinja2 is a small but fast and easy to use stand-alone template engine
10430written in pure Python.")
10431 (license license:bsd-3)))
10432
10433(define-public python-jinja2-fragments
10434 (package
10435 (name "python-jinja2-fragments")
10436 (version "1.11.0")
10437 (source
10438 (origin
10439 (method git-fetch)
10440 (uri (git-reference
10441 (url "https://github.com/sponsfreixes/jinja2-fragments")
10442 (commit version)))
10443 (file-name (git-file-name name version))
10444 (sha256
10445 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10446 (patches
10447 ;; Remove test setup code related to `litestar` and `sanic`
10448 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10449 (build-system pyproject-build-system)
10450 (arguments
10451 (list
10452 #:test-flags
10453 #~(list "--ignore=tests/test_litestar.py"
10454 "--ignore=tests/test_sanic.py")))
10455 (native-inputs
10456 (list python-fastapi
10457 python-flask
10458 python-pytest
10459 python-pytest-asyncio
10460 python-quart
10461 python-setuptools))
10462 (propagated-inputs
10463 (list python-jinja2))
10464 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10465 (synopsis "Jinja2 extension for template fragments")
10466 (description
10467 "Render Jinja2 template block as HTML page fragments on Python web
10468frameworks.")
10469 (license license:expat)))
10470
10471(define-public python-pypugjs
10472 (package
10473 (name "python-pypugjs")
10474 (version "5.12.0")
10475 (source
10476 (origin
10477 (method git-fetch)
10478 (uri (git-reference
10479 (url "https://github.com/kakulukia/pypugjs")
10480 (commit (string-append "v" version))))
10481 (file-name (git-file-name name version))
10482 (sha256
10483 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10484 (build-system pyproject-build-system)
10485 (native-inputs (list python-django
10486 python-jinja2
10487 python-flask
10488 python-mako
10489 python-poetry-core
10490 python-pytest
10491 python-tornado))
10492 (propagated-inputs (list python-charset-normalizer python-six))
10493 (home-page "https://github.com/kakulukia/pypugjs")
10494 (synopsis "Convert Pug source files into different template languages")
10495 (description
10496 "PyPugJS is a high-performance port of PugJS for Python, that converts
10497any @file{.pug} source into different template languages: Django, Jinja2,
10498Mako, and Tornado.")
10499 (license license:expat))) ;; MIT
10500
10501(define-public python-pysrt
10502 (package
10503 (name "python-pysrt")
10504 (version "1.1.2")
10505 (source
10506 (origin
10507 (method git-fetch)
10508 (uri (git-reference
10509 (url "https://github.com/byroot/pysrt")
10510 (commit (string-append "v" version))))
10511 (file-name (git-file-name name version))
10512 (sha256
10513 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10514 (build-system pyproject-build-system)
10515 (arguments
10516 (list
10517 #:test-backend #~'unittest
10518 #:phases
10519 #~(modify-phases %standard-phases
10520 (add-after 'unpack 'fix-python-incompatibilities
10521 (lambda _
10522 (substitute* (find-files "tests" "\\.py$")
10523 (("assertEquals") "assertEqual")))))))
10524 (propagated-inputs (list python-chardet))
10525 (native-inputs (list python-setuptools))
10526 (home-page "https://github.com/byroot/pysrt")
10527 (synopsis "SubRip Text subtitle parser and writer")
10528 (description
10529 "This package provides a Python library to edit or create
10530SubRip Text files, and additionally a command-line program @command{srt}
10531to shift, split or rescale them.")
10532 (license license:gpl3+)))
10533
10534(define-public python-pystache
10535 (package
10536 (name "python-pystache")
10537 (version "0.6.8")
10538 (source (origin
10539 (method url-fetch)
10540 (uri (pypi-uri "pystache" version))
10541 (sha256
10542 (base32
10543 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10544 (build-system pyproject-build-system)
10545 (native-inputs (list python-pytest python-setuptools python-wheel))
10546 (home-page "http://defunkt.io/pystache/")
10547 (synopsis "Python logic-less template engine")
10548 (description
10549 "Pystache is a Python implementation of the framework agnostic,
10550logic-free templating system Mustache.")
10551 (license license:expat)))
10552
10553(define-public python-pystack
10554 (package
10555 (name "python-pystack")
10556 (version "1.5.1")
10557 (source
10558 (origin
10559 (method git-fetch)
10560 (uri (git-reference
10561 (url "https://github.com/bloomberg/pystack")
10562 (commit (string-append "v" version))))
10563 (file-name (git-file-name name version))
10564 (sha256
10565 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10566 (build-system pyproject-build-system)
10567 (arguments
10568 (list
10569 ;; Integration tests need ptrace and gcore (gdb).
10570 #:test-flags #~(list "tests/unit")))
10571 (native-inputs
10572 (list python-cython
10573 python-pkgconfig
10574 python-pytest
10575 python-setuptools))
10576 (inputs
10577 (list elfutils))
10578 (home-page "https://github.com/bloomberg/pystack")
10579 (synopsis "Python stack trace analyzer for core dumps and live processes")
10580 (description
10581 "PyStack analyzes stack frames of running Python processes or Python core
10582dumps. It can inspect what a process is doing or what it was doing when it
10583crashed, without modifying any memory or executing code in the target process.")
10584 (license license:asl2.0)))
10585
10586(define-public python-pystitcher
10587 (package
10588 (name "python-pystitcher")
10589 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10590 (revision . "0")
10591 (upstream-version . "1.0.5")))
10592 (version (git-version (assoc-ref properties 'upstream-version)
10593 (assoc-ref properties 'revision)
10594 (assoc-ref properties 'commit)))
10595 (source
10596 (origin
10597 (method git-fetch)
10598 (uri (git-reference
10599 (url "https://github.com/captn3m0/pystitcher")
10600 (commit (assoc-ref properties 'commit))))
10601 (file-name (git-file-name name version))
10602 (sha256
10603 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10604 (build-system pyproject-build-system)
10605 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10606 (inputs (list python-html5lib
10607 python-markdown
10608 python-pypdf
10609 python-validators))
10610 (home-page "https://github.com/captn3m0/pystitcher")
10611 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10612 (description
10613 "This package stitches your PDF files together, generating customizable
10614bookmarks using a declarative input in the form of a markdown file.")
10615 (license license:expat)))
10616
10617(define-public python-joblib
10618 (package
10619 (name "python-joblib")
10620 (version "1.5.3")
10621 (source
10622 (origin
10623 (method git-fetch)
10624 (uri (git-reference
10625 (url "https://github.com/joblib/joblib")
10626 (commit version)))
10627 (file-name (git-file-name name version))
10628 (sha256
10629 (base32 "0vblgi0mb1jcwgf8f3rslw82g28fjl6n52mwgsm7p7y2nrixdrjb"))))
10630 (build-system pyproject-build-system)
10631 (arguments
10632 (list
10633 ;; tests: 1319 passed, 103 skipped, 3 xpassed, 563 warnings
10634 #:test-flags
10635 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10636 ;; Disabled to avoid having to depend on ipython/jupyter.
10637 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10638 (native-inputs
10639 (list python-pytest
10640 python-pytest-asyncio
10641 python-pytest-xdist
10642 python-setuptools))
10643 (home-page "https://joblib.readthedocs.io/")
10644 (synopsis "Using Python functions as pipeline jobs")
10645 (description
10646 "Joblib is a set of tools to provide lightweight pipelining in Python.
10647In particular, joblib offers: transparent disk-caching of the output values
10648and lazy re-evaluation (memoize pattern), easy simple parallel computing
10649logging and tracing of the execution.")
10650 (license license:bsd-3)))
10651
10652(define-public python-daemon
10653 (package
10654 (name "python-daemon")
10655 (version "3.1.2")
10656 (source
10657 (origin
10658 (method git-fetch)
10659 (uri (git-reference
10660 (url "https://pagure.io/python-daemon")
10661 (commit (string-append "release/" version))))
10662 (file-name (git-file-name name version))
10663 (sha256
10664 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10665 (patches
10666 (search-patches "python-daemon-relax-lockfile.patch"))))
10667 (build-system pyproject-build-system)
10668 (arguments
10669 (list
10670 #:phases
10671 #~(modify-phases %standard-phases
10672 (add-after 'unpack 'discard-dynamic-metadata
10673 (lambda _
10674 (substitute* "pyproject.toml"
10675 (("^dynamic = " all)
10676 (format #f "version = ~s~%~a" #$version all))
10677 (("\"(description|readme|version|maintainers)\",")
10678 ""))
10679 (for-each delete-file
10680 '("setup.py"
10681 "test/test_util_metadata.py"
10682 "test/test_setup.py")))))))
10683 (propagated-inputs (list python-filelock))
10684 (native-inputs (list python-testscenarios python-setuptools))
10685 (home-page "https://pagure.io/python-daemon/")
10686 (synopsis "Python library for making a Unix daemon process")
10687 (description
10688 "Python-daemon is a library that assists a Python program to turn itself
10689into a well-behaved Unix daemon process, as specified in PEP 3143.
10690
10691This library provides a @code{DaemonContext} class that manages the following
10692important tasks for becoming a daemon process:
10693@enumerate
10694@item Detach the process into its own process group.
10695@item Set process environment appropriate for running inside a chroot.
10696@item Renounce suid and sgid privileges.
10697@item Close all open file descriptors.
10698@item Change the working directory, uid, gid, and umask.
10699@item Set appropriate signal handlers.
10700@item Open new file descriptors for stdin, stdout, and stderr.
10701@item Manage a specified PID lock file.
10702@item Register cleanup functions for at-exit processing.
10703@end enumerate")
10704 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10705 (license (list license:asl2.0 license:gpl3+))))
10706
10707(define-public python-annotated-types
10708 (package
10709 (name "python-annotated-types")
10710 (version "0.7.0")
10711 (source
10712 (origin
10713 (method url-fetch)
10714 (uri (pypi-uri "annotated_types" version))
10715 (sha256
10716 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10717 (build-system pyproject-build-system)
10718 (native-inputs
10719 (list python-hatchling
10720 python-pytest))
10721 (propagated-inputs (list python-typing-extensions))
10722 (home-page "https://github.com/annotated-types/annotated-types")
10723 (synopsis "Reusable constraint types to use with typing.Annotated")
10724 (description "This package provides metadata objects which can be used to
10725represent common constraints such as upper and lower bounds on scalar values and
10726collection sizes, a Predicate marker for runtime checks, and descriptions of how
10727we intend these metadata to be interpreted. In some cases, we also note
10728alternative representations which do not require this package.")
10729 (license license:expat)))
10730
10731(define-public python-anytree
10732 (package
10733 (name "python-anytree")
10734 (version "2.13.0")
10735 (source
10736 (origin
10737 (method git-fetch) ; no tests data in PyPi package
10738 (uri (git-reference
10739 (url "https://github.com/c0fec0de/anytree")
10740 (commit version)))
10741 (file-name (git-file-name name version))
10742 (sha256
10743 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10744 (build-system pyproject-build-system)
10745 (arguments
10746 (list
10747 #:phases
10748 #~(modify-phases %standard-phases
10749 (add-before 'check 'pre-check
10750 (lambda _
10751 ;; Tests need to write to that direcroty.
10752 (mkdir-p "tests/dotexport/"))))))
10753 (native-inputs
10754 (list graphviz ;for 'dot'
10755 python-pdm-backend
10756 python-pytest
10757 python-pyyaml
10758 python-test2ref))
10759 (home-page "https://github.com/c0fec0de/anytree")
10760 (synopsis "Lightweight tree data library")
10761 (description
10762 "@code{anytree} is a simple, lightweight, and extensible tree data
10763structure for Python.")
10764 (license license:asl2.0)))
10765
10766(define-public kalamine
10767 (package
10768 (name "kalamine")
10769 (version "0.38")
10770 (source
10771 (origin
10772 (method url-fetch)
10773 (uri (pypi-uri "kalamine" version))
10774 (sha256
10775 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10776 (build-system pyproject-build-system)
10777 (arguments
10778 (list
10779 #:phases
10780 #~(modify-phases %standard-phases
10781 (add-before 'check 'make-test-layouts
10782 (lambda _
10783 (apply invoke
10784 (cons* "python" "-m" "kalamine.cli" "build"
10785 (find-files "layouts" "\\.toml")))
10786 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10787 (propagated-inputs
10788 (list python-click
10789 python-livereload
10790 python-lxml
10791 python-progress
10792 python-pyyaml
10793 python-tomli))
10794 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10795 ;; packaged.
10796 (native-inputs
10797 (list python-hatchling python-pytest))
10798 (home-page "https://github.com/OneDeadKey/kalamine")
10799 (synopsis "Keyboard layout maker")
10800 (description
10801 "Kalamine provides a CLI to create advanced keyboard layout from a
10802textual portable description. It also supports layout emulation via web
10803browser.")
10804 (license license:expat)))
10805
10806(define-public python-dm-tree
10807 (package
10808 (name "python-dm-tree")
10809 (version "0.1.9")
10810 (source
10811 (origin
10812 (method url-fetch)
10813 (uri (pypi-uri "dm_tree" version))
10814 (sha256
10815 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10816 (build-system pyproject-build-system)
10817 (arguments
10818 (list #:tests? #f
10819 #:phases
10820 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10821 ;; and USE_SYSTEM_PYBIND11=true.
10822 #~(modify-phases %standard-phases
10823 (add-before 'build 'build-shared-lib
10824 (lambda _
10825 (let* ((pybind11 #$(this-package-input "pybind11"))
10826 (python #$(this-package-input "python"))
10827 (version (python-version python))
10828 (abseil-cpp #$(this-package-input "abseil-cpp")))
10829 ;; Delete default cmake build.
10830 (substitute* "setup.py"
10831 (("ext_modules.*") "")
10832 (("cmdclass.*") ""))
10833 ;; Actual build phase.
10834 (mkdir-p "build/temp/tree/")
10835 (invoke
10836 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10837 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10838 "-fno-semantic-interposition" "-fPIC"
10839 "-I" (string-append pybind11
10840 "/lib/python" version
10841 "/site-packages/pybind11/include")
10842 "-I" (string-append python "/include/python"
10843 version)
10844 "-I" (string-append abseil-cpp "/include")
10845 "-c" "tree/tree.cc"
10846 "-o" "build/temp/tree/tree.o"
10847 "-fvisibility=hidden" "-g0")
10848 (mkdir-p "build/lib/tree")
10849 (invoke
10850 "g++" "-pthread" "-shared"
10851 (string-append "-Wl," "-rpath=" python "/lib")
10852 "-fno-semantic-interposition"
10853 "build/temp/tree/tree.o"
10854 "-L" (string-append python "/lib")
10855 (string-append abseil-cpp "/lib/libabsl_int128.a")
10856 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10857 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10858 (string-append abseil-cpp "/lib/libabsl_strings.a")
10859 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10860 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10861 "-o" "build/lib/tree/_tree.so")))))))
10862 ;; We link the static abseil libraries here to avoid problems in
10863 ;; downstream libraries using potentially different variants of
10864 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10865 (native-inputs
10866 (list python-setuptools))
10867 (inputs
10868 (list pybind11-2
10869 static-abseil-cpp
10870 python))
10871 (propagated-inputs
10872 (list python-absl-py
10873 python-attrs
10874 python-numpy
10875 python-wrapt))
10876 (home-page "https://github.com/deepmind/tree")
10877 (synopsis "Work with nested data structures in Python")
10878 (description "Tree is a python library for working with nested data
10879structures. In a way, @code{tree} generalizes the builtin @code{map} function
10880which only supports flat sequences, and allows you to apply a function to each
10881leaf preserving the overall structure.")
10882 (license license:asl2.0)))
10883
10884(define-public python-pyment
10885 (package
10886 (name "python-pyment")
10887 (version "0.3.4")
10888 (source
10889 (origin
10890 (method git-fetch)
10891 (uri
10892 (git-reference
10893 (url "https://github.com/dadadel/pyment")
10894 (commit (string-append "v" version))))
10895 (file-name (git-file-name name version))
10896 (sha256
10897 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10898 (build-system pyproject-build-system)
10899 (native-inputs (list python-pytest python-setuptools))
10900 (home-page "https://github.com/dadadel/pyment/")
10901 (synopsis "Convert Python docstrings automatically")
10902 (description "Pyment is a command line tool and library that can be
10903used to convert between several docstring styles.")
10904 (license license:gpl3+)))
10905
10906(define-public python-docstring-parser
10907 (package
10908 (name "python-docstring-parser")
10909 (version "0.15")
10910 (source (origin
10911 (method url-fetch)
10912 (uri (pypi-uri "docstring_parser" version))
10913 (sha256
10914 (base32
10915 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10916 (build-system pyproject-build-system)
10917 (native-inputs (list python-poetry-core python-pytest))
10918 (home-page "https://github.com/rr-/docstring_parser")
10919 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10920 (description "This package lets you parse Python docstrings in reST,
10921Google and Numpydoc format.")
10922 (license license:expat)))
10923
10924(define-public python-docutils
10925 (package
10926 (name "python-docutils")
10927 (version "0.22.4")
10928 (source
10929 (origin
10930 (method url-fetch)
10931 (uri (pypi-uri "docutils" version))
10932 (sha256
10933 (base32 "0s4ryafs954ivgb7bifzpbv98vb2mcr0s8wi9nvwpglsvqgkpdad"))))
10934 (build-system pyproject-build-system)
10935 (arguments
10936 (list
10937 #:test-backend #~'custom
10938 #:test-flags #~(list "test/alltests.py")
10939 #:phases
10940 (if (target-hurd?)
10941 #~(modify-phases %standard-phases
10942 (add-before 'check 'fix-errno
10943 (lambda _
10944 ;; Some tests check for an exact error message
10945 ;; Expecting ENOENT == 2.
10946 (substitute* (find-files "test" "\\.py$")
10947 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10948 #~%standard-phases)))
10949 (native-inputs
10950 (list python-flit-core))
10951 (home-page "https://docutils.sourceforge.net/")
10952 (synopsis "Python Documentation Utilities")
10953 (description
10954 "Docutils is a modular system for processing documentation into useful
10955formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10956easy to use markup language, for input.
10957
10958This package provides tools for converting @file{.rst} files to other formats
10959via commands such as @command{rst2man}, as well as supporting Python code.")
10960 ;; Most of the source code is public domain, but some source files are
10961 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10962 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10963
10964(define-public python-docutils-0.19
10965 (hidden-package
10966 (package
10967 (inherit python-docutils)
10968 (version "0.19")
10969 (source (origin
10970 (method url-fetch)
10971 (uri (pypi-uri "docutils" version))
10972 (sha256
10973 (base32
10974 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10975 (native-inputs
10976 (list python-setuptools)))))
10977
10978(define-public python-docx
10979 (package
10980 (name "python-docx")
10981 (version "1.2.0")
10982 (source (origin
10983 (method url-fetch)
10984 (uri (pypi-uri "python_docx" version))
10985 (sha256
10986 (base32
10987 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10988 (build-system pyproject-build-system)
10989 (native-inputs
10990 (list behave
10991 python-pyparsing
10992 python-pytest
10993 python-setuptools
10994 python-wheel))
10995 (propagated-inputs
10996 (list python-lxml python-typing-extensions))
10997 (home-page "https://github.com/python-openxml/python-docx/")
10998 (synopsis "Python library to create and modify Microsoft Word documents")
10999 (description "This Python library can be used to create and update
11000Microsoft Word (.docx) documents.")
11001 (license license:expat)))
11002
11003(define-public python-repoze-lru
11004 (package
11005 (name "python-repoze-lru")
11006 (version "0.7")
11007 (source
11008 (origin
11009 (method url-fetch)
11010 (uri (pypi-uri "repoze.lru" version))
11011 (sha256
11012 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
11013 (build-system pyproject-build-system)
11014 (arguments
11015 (list
11016 #:test-backend #~'unittest
11017 #:test-flags #~(list "discover" "repoze")))
11018 (native-inputs
11019 (list python-setuptools))
11020 (home-page "https://www.repoze.org")
11021 (synopsis "Tiny LRU cache implementation and decorator")
11022 (description
11023 "This package provides a tiny LRU cache implementation and decorator.")
11024 (license license:bsd-4)))
11025
11026(define-public python-reretry
11027 (package
11028 (name "python-reretry")
11029 (version "0.11.8")
11030 (source
11031 (origin
11032 (method git-fetch)
11033 (uri (git-reference
11034 (url "https://github.com/leshchenko1979/reretry")
11035 (commit version)))
11036 (file-name (git-file-name name version))
11037 (sha256
11038 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
11039 (build-system pyproject-build-system)
11040 (native-inputs
11041 (list python-pytest python-pytest-asyncio python-setuptools))
11042 (home-page "https://github.com/leshchenko1979/reretry")
11043 (synopsis "Functional decorator for retrying on exceptions")
11044 (description
11045 "This package is a fork from the retry package, but with some of added
11046community-sourced features. It provides an easy to use, but functional
11047decorator for retrying on exceptions.")
11048 (license license:asl2.0)))
11049
11050(define-public python-restructuredtext-lint
11051 (package
11052 (name "python-restructuredtext-lint")
11053 (version "2.0.2")
11054 (source
11055 (origin
11056 (method git-fetch)
11057 (uri (git-reference
11058 (url "https://github.com/twolfson/restructuredtext-lint")
11059 (commit version)))
11060 (file-name (git-file-name name version))
11061 (sha256
11062 (base32 "1q86a1qd9xwyl5h76b4yk2hpbnbyq6llla7rmnnp9ifrgax6vx6j"))))
11063 (build-system pyproject-build-system)
11064 (arguments (list #:test-backend #~'unittest))
11065 (propagated-inputs (list python-docutils))
11066 (native-inputs (list python-setuptools))
11067 (home-page "https://github.com/twolfson/restructuredtext-lint")
11068 (synopsis "Linter")
11069 (description
11070 "This package provides a linter for the reStructuredText format.")
11071 (license license:unlicense)))
11072
11073(define-public python-click-repl
11074 (package
11075 (name "python-click-repl")
11076 ;; To support Python 3.12, see:
11077 ;; <https://github.com/click-contrib/click-repl/issues/128>.
11078 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
11079 (revision . "1")))
11080 (version (git-version "0.3.0"
11081 (assoc-ref properties 'revision)
11082 (assoc-ref properties 'commit)))
11083 (source
11084 (origin
11085 (method git-fetch)
11086 (uri (git-reference
11087 (url "https://github.com/click-contrib/click-repl")
11088 (commit (assoc-ref properties 'commit))))
11089 (file-name (git-file-name name version))
11090 (sha256
11091 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
11092 (build-system pyproject-build-system)
11093 (native-inputs
11094 (list python-pytest
11095 python-setuptools))
11096 (propagated-inputs
11097 (list python-click
11098 python-prompt-toolkit))
11099 (home-page "https://github.com/click-contrib/click-repl")
11100 (synopsis "REPL plugin for Click")
11101 (description "This package provides a REPL plugin for Click.")
11102 (license license:expat)))
11103
11104(define-public python-pygdbmi
11105 (package
11106 (name "python-pygdbmi")
11107 (version "0.11.0.0")
11108 (source
11109 (origin
11110 (method url-fetch)
11111 (uri (pypi-uri "pygdbmi" version))
11112 (sha256
11113 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
11114 (build-system pyproject-build-system)
11115 (arguments (list #:tests? #f)) ;no tests in PyPI archive
11116 (native-inputs (list python-setuptools python-wheel))
11117 (home-page "https://github.com/cs01/pygdbmi")
11118 (synopsis "Parse gdb machine interface output with Python")
11119 (description "This package provides a parse gdb machine interface output
11120with Python.")
11121 (license license:expat)))
11122
11123(define-public python-pygtrie
11124 (package
11125 (name "python-pygtrie")
11126 (version "2.5.0")
11127 (source
11128 (origin
11129 (method git-fetch)
11130 (uri (git-reference
11131 (url "https://github.com/mina86/pygtrie")
11132 (commit (string-append "v" version))))
11133 (file-name (git-file-name name version))
11134 (sha256
11135 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
11136 (build-system pyproject-build-system)
11137 (arguments
11138 (list
11139 #:test-backend #~'unittest
11140 #:phases
11141 #~(modify-phases %standard-phases
11142 (add-after 'unpack 'set-version
11143 (lambda _
11144 (delete-file "version.py")
11145 (substitute* "setup.py"
11146 (("import version")
11147 "")
11148 (("version\\.get_version\\(\\)")
11149 (format #f "~s" #$version))))))))
11150 (native-inputs (list python-setuptools))
11151 (home-page "https://github.com/mina86/pygtrie")
11152 (synopsis "Pure Python trie data structure implementation")
11153 (description
11154 "This package provides a pure Python trie data structure implementation.")
11155 (license license:asl2.0)))
11156
11157(define-public python-bump2version
11158 (package
11159 (name "python-bump2version")
11160 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
11161 (revision . "1")))
11162 (version (git-version "1.0.1"
11163 (assoc-ref properties 'revision)
11164 (assoc-ref properties 'commit)))
11165 (source
11166 (origin
11167 (method git-fetch)
11168 (uri (git-reference
11169 (url "https://github.com/c4urself/bump2version")
11170 (commit (assoc-ref properties 'commit))))
11171 (file-name (git-file-name name version))
11172 (sha256
11173 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
11174 (build-system pyproject-build-system)
11175 (arguments
11176 ;; XXX: Single flaky failing test.
11177 (list #:test-flags #~(list "-k" "not test_usage_string")))
11178 (native-inputs (list python-pytest python-setuptools python-testfixtures))
11179 (home-page "https://github.com/c4urself/bump2version")
11180 (synopsis "Version-bump your software with a single command!")
11181 (description
11182 "This package provides a small command line tool to simplify releasing
11183software by updating all version strings in your source code by the correct
11184increment. It also creates commits and tags.")
11185 (license license:expat)))
11186
11187(define-public python-deprecated
11188 (package
11189 (name "python-deprecated")
11190 (version "1.3.1")
11191 (source
11192 (origin
11193 (method git-fetch)
11194 (uri (git-reference
11195 (url "https://github.com/tantale/deprecated")
11196 (commit (string-append "v" version))))
11197 (file-name (git-file-name name version))
11198 (sha256
11199 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
11200 (build-system pyproject-build-system)
11201 (native-inputs
11202 (list python-pytest
11203 python-setuptools))
11204 (propagated-inputs
11205 (list python-wrapt))
11206 (home-page "https://github.com/tantale/deprecated")
11207 (synopsis "Python decorator to deprecate classes, functions or methods")
11208 (description
11209 "The @code{deprecated} decorator provides a convenient way to deprecate
11210to deprecate classes, functions or methods.")
11211 (license license:expat)))
11212
11213(define-public python-pygithub
11214 (package
11215 (name "python-pygithub")
11216 (version "2.8.1")
11217 (source
11218 (origin
11219 (method git-fetch)
11220 (uri (git-reference
11221 (url "https://github.com/PyGithub/PyGithub")
11222 (commit (string-append "v" version))))
11223 (file-name (git-file-name name version))
11224 (sha256
11225 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
11226 (build-system pyproject-build-system)
11227 (propagated-inputs
11228 (list python-pyjwt
11229 python-pynacl
11230 python-requests
11231 python-typing-extensions
11232 python-urllib3))
11233 (native-inputs
11234 (list python-responses
11235 python-pytest
11236 python-setuptools
11237 python-setuptools-scm))
11238 (home-page "https://pygithub.readthedocs.io/en/latest/")
11239 (synopsis "Python library for the GitHub API")
11240 (description "This library allows managing GitHub resources such as
11241repositories, user profiles, and organizations in your Python applications,
11242using version 3 of the GitHub application programming interface (API).")
11243 (license license:lgpl3+)))
11244
11245(define-public python-rellu
11246 (package
11247 (name "python-rellu")
11248 (version "0.7")
11249 (source
11250 (origin
11251 (method git-fetch)
11252 (uri (git-reference
11253 (url "https://github.com/robotframework/rellu")
11254 (commit (string-append "v" version))))
11255 (file-name (git-file-name name version))
11256 (sha256
11257 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
11258 (build-system pyproject-build-system)
11259 (native-inputs (list python-pytest python-setuptools))
11260 (propagated-inputs (list python-invoke python-pygithub))
11261 (home-page "https://github.com/robotframework/rellu")
11262 (synopsis "Utilities to create PyPI releases")
11263 (description
11264 "This collection of utilities contains tooling and templates to assist in
11265creating releases on GitHub and publishing them on PyPI. It is designed to be
11266used by Robot Framework and tools and libraries in its ecosystem, but can
11267naturally be used also by other projects.")
11268 (license license:asl2.0)))
11269
11270(define-public python-robotframework
11271 (package
11272 (name "python-robotframework")
11273 (version "7.3.2")
11274 (source
11275 (origin
11276 (method git-fetch) ; no tests in the PyPI archive
11277 (uri (git-reference
11278 (url "https://github.com/robotframework/robotframework")
11279 (commit (string-append "v" version))))
11280 (file-name (git-file-name name version))
11281 (sha256
11282 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
11283 (outputs '("out" "doc"))
11284 (build-system pyproject-build-system)
11285 (arguments
11286 (list
11287 #:modules '((guix build pyproject-build-system)
11288 (guix build utils)
11289 (ice-9 ftw)
11290 (ice-9 match)
11291 (srfi srfi-26))
11292 #:phases
11293 #~(modify-phases %standard-phases
11294 (add-before 'build 'build-and-install-doc
11295 (lambda* (#:key outputs #:allow-other-keys)
11296 (let ((doc (string-append #$output:doc
11297 "/share/doc/robotframework")))
11298 (invoke "invoke" "library-docs" "all")
11299 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
11300 (mkdir-p doc)
11301 (with-directory-excursion "dist"
11302 (define user-guide-dir
11303 (match (scandir "." (cut string-prefix?
11304 "robotframework-userguide-" <>))
11305 ((dir) dir)
11306 (_ (error "could not find the user guide directory"))))
11307 (copy-recursively user-guide-dir doc)))))
11308 (replace 'check
11309 (lambda* (#:key tests? #:allow-other-keys)
11310 (when tests?
11311 ;; TODO: Some acceptance failed and took near 30min to
11312 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
11313 ;; to skip failing ones.
11314 (format #t "Running unit tests...~%")
11315 (invoke "utest/run.py")))))))
11316 (native-inputs
11317 (list python-docutils
11318 python-invoke
11319 python-jsonschema
11320 python-pygments
11321 python-rellu
11322 python-typing-extensions
11323 python-setuptools
11324 `(,python "tk") ;used when building the HTML doc
11325 python-wheel))
11326 (home-page "https://robotframework.org")
11327 (synopsis "Generic automation framework")
11328 (description "Robot Framework is a generic automation framework for
11329acceptance testing, acceptance test driven development (ATDD), and robotic
11330process automation (RPA).")
11331 (license license:asl2.0)))
11332
11333(define-public python-robotframework-datadriver
11334 (package
11335 (name "python-robotframework-datadriver")
11336 (version "1.11.2")
11337 (source
11338 (origin
11339 (method git-fetch) ; no tests in PyPI release
11340 (uri (git-reference
11341 (url "https://github.com/Snooz82/robotframework-datadriver")
11342 (commit version)))
11343 (file-name (git-file-name name version))
11344 (sha256
11345 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
11346 (build-system pyproject-build-system)
11347 (arguments
11348 (list
11349 #:phases
11350 #~(modify-phases %standard-phases
11351 (add-before 'check 'skip-problematic-tests
11352 (lambda _
11353 (for-each delete-file-recursively
11354 (list
11355 ;; The test file 'tab-csv-file-name.tsv' contains
11356 ;; special characters for which there is no locale
11357 ;; in the build environment, causing one test to
11358 ;; fail.
11359 "atest/TestCases/csv_reader_config"
11360 ;; Error in file on line 6: Non-existing setting
11361 ;; 'Test Tags'.
11362 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
11363 (replace 'check
11364 (lambda* (#:key tests? #:allow-other-keys)
11365 (when tests?
11366 (with-directory-excursion "atest"
11367 (invoke "sh" "run_atest.sh"))))))))
11368 (native-inputs
11369 (list python-docutils
11370 python-robotframework-stacktrace
11371 python-setuptools
11372 python-xlrd))
11373 (propagated-inputs
11374 (list python-openpyxl
11375 python-pandas
11376 python-pygments
11377 python-robotframework))
11378 (home-page "https://github.com/Snooz82/robotframework-datadriver")
11379 (synopsis "Data-driven test extension for Robot Framework")
11380 (description "DataDriver is a data-driven extension for Robot Framework.
11381DataDriver uses the Listener Interface of Robot Framework to create new test
11382cases based on a data file that contains the test data. DataDriver supports
11383data files in the CSV, XLS or XLSX formats.")
11384 (license license:asl2.0)))
11385
11386(define-public python-robotframework-pabot
11387 (package
11388 (name "python-robotframework-pabot")
11389 (version "4.2.0")
11390 (source
11391 (origin
11392 ;; There are no tests in the PyPI archive.
11393 (method git-fetch)
11394 (uri (git-reference
11395 (url "https://github.com/mkorpela/pabot")
11396 (commit version)))
11397 (file-name (git-file-name name version))
11398 (sha256
11399 (base32
11400 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11401 (build-system pyproject-build-system)
11402 (arguments
11403 (list
11404 #:test-flags
11405 #~(list "-k" (string-join
11406 ;; XXX: Maybe it's a bad idea to skip these tests which
11407 ;; failing assertions highlight incomparability issues.
11408 ;;
11409 ;; 93 passed, 23 deselected, 11 warnings
11410 (list "not test_argumentfile_outputs"
11411 "test_dependency_ok"
11412 "test_longnames_in_tests"
11413 "test_multiple_dependencies_ok"
11414 "test_orders"
11415 "test_pabotprerunmodifier"
11416 "test_pabotprerunmodifier_with_prerunmodifier"
11417 "test_pabotprerunmodifier_with_testlevelsplit"
11418 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11419 "test_parallel_execution"
11420 "test_parallel_execution_with_testlevelsplit"
11421 "test_pre_run_with_new_name"
11422 "test_pre_run_with_new_tag"
11423 "test_run_dir_2_then_dir_3"
11424 "test_run_dir_3_then_dir_2"
11425 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11426 "test_sleep_test_cases_and_group"
11427 "test_stdout_should_display_passed_test"
11428 "test_stdout_should_display_passed_test"
11429 "test_stdout_should_display_passed_test_and_not_"
11430 "test_testlevelsplit_output_task_order"
11431 "test_too_big_testname"
11432 "test_two_orders")
11433 " and not "))
11434 #:phases
11435 #~(modify-phases %standard-phases
11436 (add-after 'unpack 'relax-requirements
11437 (lambda _
11438 (substitute* "setup.cfg"
11439 ;; natsort>=8.2.0
11440 ((">=8.2.0") "")))))))
11441 (native-inputs
11442 (list python-pytest
11443 python-setuptools
11444 python-wheel))
11445 (propagated-inputs
11446 (list python-natsort
11447 python-robotframework
11448 python-robotframework-stacktrace))
11449 (home-page "https://pabot.org")
11450 (synopsis "Parallel test runner for Robot Framework")
11451 (description "Pabot is a parallel executor for Robot Framework tests.")
11452 (license license:asl2.0)))
11453
11454(define-public python-robotframework-stacktrace
11455 (package
11456 (name "python-robotframework-stacktrace")
11457 (version "0.4.1")
11458 (source
11459 (origin
11460 (method git-fetch)
11461 (uri (git-reference
11462 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11463 (commit version)))
11464 (file-name (git-file-name name version))
11465 (sha256
11466 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11467 (build-system pyproject-build-system)
11468 (arguments
11469 ;; XXX: The test suite fails (see:
11470 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11471 (list
11472 #:tests? #f
11473 #:phases
11474 #~(modify-phases %standard-phases
11475 (add-after 'unpack 'set-version
11476 (lambda _
11477 (substitute* "setup.py"
11478 (("VERSION =.*")
11479 (string-append "VERSION = '" #$version "'"))))))))
11480 (native-inputs (list python-setuptools))
11481 (propagated-inputs (list python-robotframework))
11482 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11483 (synopsis "Robot Framework listener to print a stack trace on error")
11484 (description "StackTrace is a Robot Framework listener that prints a stack
11485trace directly to the terminal to ease debugging.")
11486 (license license:asl2.0)))
11487
11488(define-public python-robotframework-sshlibrary
11489 (package
11490 (name "python-robotframework-sshlibrary")
11491 (version "3.8.0")
11492 ;; There are no tests in the PyPI archive.
11493 (source
11494 (origin
11495 (method git-fetch)
11496 (uri (git-reference
11497 (url "https://github.com/robotframework/SSHLibrary")
11498 (commit (string-append "v" version))))
11499 (file-name (git-file-name name version))
11500 (sha256
11501 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11502 (patches (search-patches
11503 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11504 (build-system pyproject-build-system)
11505 (arguments
11506 (list
11507 #:phases
11508 #~(modify-phases %standard-phases
11509 (add-after 'unpack 'fix-python-incompatibilities
11510 (lambda _
11511 (substitute* (find-files "utest" "\\.py$")
11512 (("assertEquals") "assertEqual"))))
11513 (add-before 'build 'build-and-install-doc
11514 (lambda _
11515 (let ((doc (string-append #$output:doc
11516 "/share/doc/robotframework-sshlibrary")))
11517 (invoke "chmod" "-R" "+w" "docs")
11518 (invoke "invoke" "kw-docs" "project-docs")
11519 (mkdir-p doc)
11520 (for-each delete-file
11521 (find-files "docs" "\\.rst"))
11522 (copy-recursively "docs" doc))))
11523 (replace 'check
11524 (lambda* (#:key tests? #:allow-other-keys)
11525 (when tests?
11526 ;; Some tests require an SSH server; we remove them.
11527 (delete-file "utest/test_client_api.py")
11528 (delete-file "utest/test_scp.py")
11529 (invoke "python" "utest/run.py")))))))
11530 (propagated-inputs
11531 (list python-robotframework python-paramiko python-scp))
11532 (native-inputs
11533 (list openssh
11534 which
11535 ;; To generate the documentation
11536 python-docutils
11537 python-invoke
11538 python-pygments
11539 python-rellu
11540 python-setuptools))
11541 (outputs '("out" "doc"))
11542 (home-page "https://github.com/robotframework/SSHLibrary")
11543 (synopsis "Robot Framework library for SSH and SFTP")
11544 (description
11545 "SSHLibrary is a Robot Framework library providing support for SSH and
11546SFTP. It has the following main usages:
11547@itemize @bullet
11548@item Executing commands on the remote machine, either blocking or non-blocking.
11549@item Writing and reading in an interactive shell.
11550@item Transferring files and directories over SFTP.
11551@item Ensuring that files and directories exist on the remote machine.
11552@end itemize")
11553 (license license:asl2.0)))
11554
11555(define-public python-robotframework-pythonlibcore
11556 (package
11557 (name "python-robotframework-pythonlibcore")
11558 (version "4.4.1")
11559 (source
11560 (origin
11561 (method git-fetch) ;no tests in pypi archive
11562 (uri (git-reference
11563 (url "https://github.com/robotframework/PythonLibCore")
11564 (commit (string-append "v" version))))
11565 (file-name (git-file-name name version))
11566 (sha256
11567 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11568 (build-system pyproject-build-system)
11569 (arguments
11570 (list
11571 #:test-backend #~'custom
11572 #:test-flags #~(list "utest/run.py")))
11573 (native-inputs
11574 (list python-approvaltests
11575 python-pytest
11576 python-pytest-cov ; This package has a custom way to run tests.
11577 python-pytest-mockito
11578 python-robotframework
11579 python-setuptools))
11580 (home-page "https://github.com/robotframework/PythonLibCore")
11581 (synopsis "Robot Framework Python library tools")
11582 (description
11583 "PythonLibCore provides tools for creating larger test libraries for
11584Robot Framework using Python. The Robot Framework hybrid and dynamic library
11585APIs give more flexibility for library than the static library API, but they
11586also set requirements for libraries which need to be implemented in the
11587library side. PythonLibCore eases the problem by providing a simpler
11588interface and by handling all the requirements towards the Robot Framework
11589library APIs.")
11590 (license license:asl2.0)))
11591
11592(define-public python-robotframework-seleniumlibrary
11593 (package
11594 (name "python-robotframework-seleniumlibrary")
11595 (version "6.8.0")
11596 (source
11597 (origin
11598 (method git-fetch)
11599 (uri (git-reference
11600 (url "https://github.com/robotframework/SeleniumLibrary")
11601 (commit (string-append "v" version))))
11602 (file-name (git-file-name name version))
11603 (sha256
11604 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11605 (build-system pyproject-build-system)
11606 (arguments
11607 (list
11608 #:test-flags
11609 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11610 "-k" (string-join
11611 (list "not test_create_firefox_with_options"
11612 "test_create_headless_firefox_with_options"
11613 "test_create_driver_firefox")
11614 " and not "))))
11615 (native-inputs
11616 (list python-approvaltests
11617 python-pytest
11618 python-pytest-mockito
11619 python-setuptools))
11620 (propagated-inputs
11621 (list python-click
11622 python-robotframework
11623 python-robotframework-pythonlibcore
11624 python-selenium))
11625 (home-page "https://github.com/robotframework/SeleniumLibrary")
11626 (synopsis "Web testing library for Robot Framework")
11627 (description "SeleniumLibrary is a web testing library for Robot Framework
11628that utilizes the Selenium tool internally.")
11629 (license license:asl2.0)))
11630
11631(define-public python-robotframework-seleniumscreenshots
11632 (package
11633 (name "python-robotframework-seleniumscreenshots")
11634 (version "0.9.5")
11635 (source
11636 (origin
11637 (method git-fetch)
11638 (uri (git-reference
11639 (url
11640 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11641 (commit version)))
11642 (file-name (git-file-name name version))
11643 (sha256
11644 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11645 (build-system pyproject-build-system)
11646 (arguments
11647 ;; XXX: The tests require a relatively complicated setup configured in
11648 ;; their CI with Nix (!).
11649 `(#:tests? #f))
11650 (native-inputs (list python-setuptools))
11651 (propagated-inputs
11652 (list python-robotframework python-robotframework-seleniumlibrary))
11653 (home-page
11654 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11655 (synopsis
11656 "Robot Framework library for annotating and cropping screenshots")
11657 (description
11658 "The SeleniumScreenshots library for Robot Framework provides keywords
11659for annotating and cropping screenshots taken with SeleniumLibrary. It is
11660useful for scripting automatically updated screenshots for documentation or
11661for visual regression testing purposes.")
11662 (license license:bsd-3)))
11663
11664(define-public python-rstr
11665 (package
11666 (name "python-rstr")
11667 (version "3.2.2")
11668 (source
11669 (origin
11670 (method git-fetch)
11671 (uri (git-reference
11672 (url "https://github.com/leapfrogonline/rstr")
11673 (commit version)))
11674 (file-name (git-file-name name version))
11675 (sha256
11676 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11677 (build-system pyproject-build-system)
11678 (native-inputs (list python-pytest
11679 python-setuptools
11680 python-setuptools-scm
11681 python-wheel))
11682 (home-page "https://github.com/leapfrogonline/rstr")
11683 (synopsis "Generate random strings in Python")
11684 (description "This package provides a python module for generating
11685random strings of various types. It could be useful for fuzz testing,
11686generating dummy data, or other applications. It has no dependencies
11687outside the standard library.")
11688 (license license:bsd-3)))
11689
11690(define-public python-scp
11691 (package
11692 (name "python-scp")
11693 (version "0.15.0")
11694 (source
11695 (origin
11696 (method git-fetch)
11697 (uri (git-reference
11698 (url "https://github.com/jbardin/scp.py")
11699 (commit (string-append "v" version))))
11700 (file-name (git-file-name name version))
11701 (sha256
11702 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11703 (build-system pyproject-build-system)
11704 (arguments (list #:tests? #f)) ;tests require an SSH server
11705 (native-inputs (list python-setuptools))
11706 (propagated-inputs (list python-paramiko))
11707 (home-page "https://github.com/jbardin/scp.py")
11708 (synopsis "SCP protocol module for Python and Paramiko")
11709 (description
11710 "The scp module extends the Paramiko library to send and receive files
11711via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11712 (license license:gpl2+)))
11713
11714(define-public python-rst-linker
11715 (package
11716 (name "python-rst-linker")
11717 (version "2.6.0")
11718 (source
11719 (origin
11720 (method git-fetch)
11721 (uri (git-reference
11722 (url "https://github.com/jaraco/rst.linker")
11723 (commit (string-append "v" version))))
11724 (file-name (git-file-name name version))
11725 (sha256
11726 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11727 (build-system pyproject-build-system)
11728 (propagated-inputs (list python-jaraco-context))
11729 (native-inputs
11730 (list python-path
11731 python-jaraco-vcs
11732 python-pytest
11733 python-pytest-subprocess
11734 python-setuptools-scm
11735 python-setuptools))
11736 (home-page "https://github.com/jaraco/rst.linker")
11737 (synopsis "Sphinx plugin to add links and timestamps")
11738 (description
11739 "rst.linker automatically replaces text by a reStructuredText external
11740reference or timestamps. It's primary purpose is to augment the changelog,
11741but it can be used for other documents, too.")
11742 (license license:expat)))
11743
11744(define-public python-feedgenerator
11745 (package
11746 (name "python-feedgenerator")
11747 (version "2.1.0")
11748 (source
11749 (origin
11750 (method url-fetch)
11751 (uri (pypi-uri "feedgenerator" version))
11752 (sha256
11753 (base32
11754 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11755 (build-system pyproject-build-system)
11756 (native-inputs
11757 (list python-pytest python-setuptools python-wheel))
11758 (propagated-inputs
11759 (list python-pytz))
11760 (home-page "https://github.com/getpelican/feedgenerator")
11761 (synopsis
11762 "Standalone version of Django's Atom/RSS feed generator")
11763 (description
11764 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11765which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11766 (license license:bsd-3)))
11767
11768(define-public python-lsp-jsonrpc
11769 (package
11770 (name "python-lsp-jsonrpc")
11771 (version "1.1.2")
11772 (source
11773 (origin
11774 (method url-fetch)
11775 (uri (pypi-uri "python-lsp-jsonrpc" version))
11776 (sha256
11777 (base32
11778 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11779 (build-system pyproject-build-system)
11780 (native-inputs
11781 (list python-pyflakes
11782 python-pytest
11783 python-setuptools
11784 python-setuptools-scm
11785 python-wheel))
11786 (propagated-inputs
11787 (list python-ujson))
11788 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11789 (synopsis "JSON RPC 2.0 server library")
11790 (description
11791 "This package provides a JSON RPC 2.0 server library for Python.")
11792 (license license:expat)))
11793
11794(define-public python-pydantic
11795 (package
11796 (name "python-pydantic")
11797 (version "2.12.5")
11798 (source
11799 (origin
11800 (method git-fetch)
11801 (uri (git-reference
11802 (url "https://github.com/samuelcolvin/pydantic")
11803 (commit (string-append "v" version))))
11804 (file-name (git-file-name name version))
11805 (sha256
11806 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11807 (build-system pyproject-build-system)
11808 (arguments
11809 (list
11810 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11811 #:test-flags
11812 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11813 (native-inputs
11814 (list tzdata-for-tests
11815 python-dirty-equals-bootstrap
11816 python-faker
11817 python-hatch-fancy-pypi-readme
11818 python-hatchling
11819 python-jsonschema
11820 python-pytest
11821 python-pytest-benchmark
11822 python-pytest-examples
11823 python-pytest-mock
11824 python-pytest-run-parallel
11825 python-pytz))
11826 (propagated-inputs
11827 (list python-annotated-types
11828 python-pydantic-core ;it's hard == requirement, keep it in sync
11829 python-typing-extensions
11830 python-typing-inspection))
11831 (home-page "https://github.com/samuelcolvin/pydantic")
11832 (synopsis "Python data validation and settings management")
11833 (description
11834 "Pydantic enforces type hints at runtime, and provides user friendly
11835errors when data is invalid.")
11836 (license license:expat)))
11837
11838(define-public python-pydantic-core
11839 (package
11840 (name "python-pydantic-core")
11841 (version "2.41.5")
11842 (source
11843 (origin
11844 (method url-fetch)
11845 (uri (pypi-uri "pydantic_core" version))
11846 (sha256
11847 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11848 (build-system pyproject-build-system)
11849 (arguments
11850 (list
11851 #:imported-modules `(,@%cargo-build-system-modules
11852 ,@%pyproject-build-system-modules)
11853 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11854 (guix build pyproject-build-system)
11855 (guix build utils))
11856 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11857 #:test-flags
11858 #~(list "--ignore=tests/benchmarks"
11859 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11860 ;; python-pydantic-core -> python-pydantic ->
11861 ;; python-inline-snapshot -> python-pydantic-core
11862 "--ignore=tests/test_docstrings.py"
11863 "--ignore=tests/test_hypothesis.py"
11864 "--ignore=tests/validators/test_allow_partial.py"
11865 "--ignore=tests/validators/test_frozenset.py"
11866 "--ignore=tests/validators/test_list.py"
11867 "--ignore=tests/validators/test_set.py")
11868 #:phases
11869 #~(modify-phases %standard-phases
11870 (add-after 'unpack 'prepare-cargo-build-system
11871 (lambda args
11872 (for-each (lambda (phase)
11873 (format #t "Running cargo phase: ~a~%" phase)
11874 (apply (assoc-ref cargo:%standard-phases phase)
11875 #:cargo-target #$(cargo-triplet)
11876 args))
11877 '(unpack-rust-crates
11878 configure
11879 check-for-pregenerated-files
11880 patch-cargo-checksums)))))))
11881 (native-inputs
11882 (append
11883 (list maturin
11884 python-dirty-equals-bootstrap
11885 python-pytest
11886 python-pytest-benchmark ;TODO: disable in pyproject.toml
11887 python-pytest-mock
11888 python-pytest-timeout
11889 python-typing-inspection
11890 python-tzdata
11891 rust
11892 `(,rust "cargo"))
11893 (or (and=> (%current-target-system)
11894 (compose list make-rust-sysroot))
11895 '())))
11896 (inputs
11897 (cargo-inputs 'python-pydantic-core))
11898 (propagated-inputs
11899 (list python-typing-extensions))
11900 (home-page "https://github.com/pydantic/pydantic-core")
11901 (synopsis "Core validation logic for pydantic")
11902 (description "This package provides the core functionality for pydantic
11903validation and serialization.")
11904 (license license:expat)))
11905
11906(define-public python-pydantic-cli
11907 (package
11908 (name "python-pydantic-cli")
11909 (version "9.1.0")
11910 (source
11911 (origin
11912 (method git-fetch) ;for tests
11913 (uri (git-reference
11914 (url "https://github.com/mpkocher/pydantic-cli")
11915 (commit (string-append "v" version))))
11916 (file-name (git-file-name name version))
11917 (sha256
11918 (base32
11919 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11920 (build-system pyproject-build-system)
11921 (propagated-inputs
11922 (list python-pydantic))
11923 (native-inputs
11924 (list python-hatchling python-pytest))
11925 (home-page "https://github.com/mpkocher/pydantic-cli")
11926 (synopsis "Turn Pydantic defined data models into CLI tools")
11927 (description
11928 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11929Interfaces} via data models provided in the JSON format.")
11930 (license license:expat)))
11931
11932(define-public python-pydantic-extra-types
11933 (package
11934 (name "python-pydantic-extra-types")
11935 (version "2.10.6")
11936 (source
11937 (origin
11938 (method git-fetch)
11939 (uri (git-reference
11940 (url "https://github.com/pydantic/pydantic-extra-types")
11941 (commit (string-append "v" version))))
11942 (file-name (git-file-name name version))
11943 (sha256
11944 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11945 (build-system pyproject-build-system)
11946 (arguments
11947 (list
11948 ;; tests: 13079 passed, 1 deselected
11949 #:test-flags
11950 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11951 #~(list "--ignore=tests/test_s3.py"
11952 "--deselect=tests/test_coordinate.py::test_json_schema"
11953 ;; XXX: The most of the tests fail, pendulum is optional package
11954 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11955 ;; requires Rust.
11956 "--ignore=tests/test_pendulum_dt.py"
11957 "--ignore=tests/test_json_schema.py")
11958 #:phases
11959 #~(modify-phases %standard-phases
11960 (add-before 'check 'pre-check
11961 (lambda* (#:key inputs #:allow-other-keys)
11962 (setenv "TZ" "UTC")
11963 (setenv "TZDIR" (search-input-directory inputs
11964 "share/zoneinfo")))))))
11965 (native-inputs
11966 (list python-pytest
11967 python-hatchling
11968 tzdata-for-tests))
11969 (propagated-inputs
11970 (list python-pydantic
11971 python-typing-extensions
11972 ;; [optional]
11973 python-cron-converter
11974 ;; python-pendulum
11975 python-phonenumbers
11976 python-pycountry
11977 python-pymongo
11978 python-pytz
11979 python-semver
11980 python-tzdata
11981 python-ulid))
11982 (home-page "https://github.com/pydantic/pydantic-extra-types")
11983 (synopsis "Extra Pydantic types")
11984 (description "This package provides sxtra types for Pydantic.")
11985 (license license:expat)))
11986
11987(define-public python-pydantic-settings
11988 (package
11989 (name "python-pydantic-settings")
11990 (version "2.12.0")
11991 (source
11992 (origin
11993 (method url-fetch)
11994 (uri (pypi-uri "pydantic_settings" version))
11995 (sha256
11996 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11997 (build-system pyproject-build-system)
11998 (arguments
11999 (list
12000 ;; tests: 399 passed, 27 skipped
12001 #:test-flags
12002 ;; XXX: Ignore tests requiring python-ruff.
12003 #~(list "--ignore=tests/test_docs.py")
12004 #:phases
12005 #~(modify-phases %standard-phases
12006 (add-before 'check 'set-home
12007 (lambda _
12008 ;; FileNotFoundError: [Errno 2] No such file or directory:
12009 ;; '/homeless-shelter/
12010 (setenv "HOME" "/tmp"))))))
12011 (native-inputs
12012 (list python-hatchling
12013 python-pytest
12014 python-pytest-examples
12015 python-pytest-mock))
12016 (propagated-inputs
12017 (list python-dotenv
12018 python-pydantic
12019 python-typing-inspection
12020 ;; [optional]
12021 python-pyyaml
12022 python-tomli))
12023 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
12024 (synopsis "Settings management using Pydantic")
12025 (description
12026 "Pydantic Settings provides optional Pydantic features for loading a
12027settings or config class from environment variables or secrets files.")
12028 (license license:expat)))
12029
12030(define-public python-pydoc-markdown
12031 (package
12032 (name "python-pydoc-markdown")
12033 (version "4.8.2")
12034 (source
12035 (origin
12036 (method url-fetch)
12037 (uri (pypi-uri "pydoc_markdown" version))
12038 (sha256
12039 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
12040 (build-system pyproject-build-system)
12041 (arguments
12042 (list
12043 #:tests? #false ;there are none
12044 #:phases
12045 '(modify-phases %standard-phases
12046 ;; This is probably not a good idea, but it wants a rather old
12047 ;; version of docstring-parser.
12048 (add-after 'unpack 'relax-requirements
12049 (lambda _
12050 (substitute* "pyproject.toml"
12051 (("docstring-parser = .*")
12052 "docstring-parser = \"^0\"\n")))))))
12053 (propagated-inputs (list python-click
12054 python-databind-core
12055 python-databind-json
12056 python-docspec
12057 python-docspec-python
12058 python-docstring-parser
12059 python-jinja2
12060 python-nr-util
12061 python-pyyaml
12062 python-requests
12063 python-tomli
12064 python-tomli-w
12065 python-watchdog
12066 python-yapf))
12067 (native-inputs (list python-poetry-core))
12068 (home-page "https://pypi.org/project/pydoc-markdown/")
12069 (synopsis "Create Python API documentation in Markdown format")
12070 (description "Pydoc-Markdown is a tool to create Python API documentation
12071in Markdown format. Instead of executing your Python code like so many other
12072documentation tools, it parses it using docspec instead.")
12073 (license license:expat)))
12074
12075;; XXX: The project is deprecated upstream, still in use by some packages,
12076;; consider to remove when nothing depends on it.
12077(define-public python-pydocstyle
12078 (package
12079 (name "python-pydocstyle")
12080 (version "6.3.0")
12081 (source
12082 (origin
12083 (method git-fetch) ;no tests in PyPI archive
12084 (uri (git-reference
12085 (url "https://github.com/PyCQA/pydocstyle")
12086 (commit version)))
12087 (file-name (git-file-name name version))
12088 (sha256
12089 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
12090 (patches (search-patches
12091 "python-pydocstyle-add-support-for-pep701.patch"))))
12092 (build-system pyproject-build-system)
12093 (arguments
12094 (list
12095 ;; It tries to install with pip.
12096 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
12097 #:phases
12098 #~(modify-phases %standard-phases
12099 (add-after 'unpack 'set-version
12100 (lambda _
12101 (substitute* "pyproject.toml"
12102 (("0.0.0-dev") #$version)))))))
12103 (native-inputs
12104 (list python-poetry-core
12105 python-pytest
12106 python-tomli))
12107 (propagated-inputs
12108 (list python-six
12109 python-snowballstemmer))
12110 (home-page "https://github.com/PyCQA/pydocstyle/")
12111 (synopsis "Python docstring style checker")
12112 (description
12113 "This package provides a style checker for the Python Language
12114Server (PLS).")
12115 (license license:expat)))
12116
12117(define-public python-lsp-server
12118 (package
12119 (name "python-lsp-server")
12120 (version "1.15.0")
12121 (source
12122 (origin
12123 (method git-fetch)
12124 (uri (git-reference
12125 (url "https://github.com/python-lsp/python-lsp-server")
12126 (commit (string-append "v" version))))
12127 (file-name (git-file-name name version))
12128 (sha256
12129 (base32 "0bmwshwdlnbj15ki2vld832lbp6j1slyhvgmwrr8kjbhgk3v8vic"))
12130 (patches
12131 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
12132 (build-system pyproject-build-system)
12133 (arguments
12134 (list
12135 #:test-flags
12136 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
12137 "-k"
12138 (string-append
12139 "not test_concurrent_ws_requests " ; flaky
12140 "and not test_pyqt_completion " ; avoid pyqt5
12141 "and not test_pandas_completion")) ; avoid pandas
12142 #:phases
12143 #~(modify-phases %standard-phases
12144 (add-after 'unpack 'relax-deps
12145 (lambda _
12146 (substitute* "pyproject.toml"
12147 (("autopep8>=2.0.4,<2.1.0") "autopep8")
12148 (("pycodestyle>=2.12.0,<2.13.0") "pycodestyle")
12149 (("pyflakes>=3.2.0,<3.3.0") "pyflakes"))))
12150 (add-before 'check 'set-HOME
12151 (lambda _ (setenv "HOME" "/tmp"))))))
12152 (propagated-inputs
12153 (list python-autopep8
12154 python-black
12155 python-docstring-to-markdown
12156 python-flake8
12157 python-jedi
12158 python-lsp-jsonrpc
12159 python-mccabe
12160 python-pluggy
12161 python-pycodestyle
12162 python-pydocstyle
12163 python-pyflakes
12164 python-pylint
12165 python-rope
12166 python-ujson
12167 python-whatthepatch
12168 python-yapf))
12169 (native-inputs
12170 (list python-flaky
12171 python-matplotlib
12172 python-pytest
12173 python-setuptools
12174 python-setuptools-scm
12175 python-websockets))
12176 (home-page "https://github.com/python-lsp/python-lsp-server")
12177 (synopsis "Python implementation of the Language Server Protocol")
12178 (description
12179 "The Python Language Server @command{pylsp} is an implementation of the
12180Python 3 language specification for the Language Server Protocol (LSP).
12181This tool is used in text editing environments to provide a complete
12182and integrated feature-set for programming Python effectively.")
12183 (license license:expat)))
12184
12185(define-public python-black
12186 (package
12187 (name "python-black")
12188 (version "26.5.1")
12189 (source
12190 (origin
12191 (method git-fetch)
12192 (uri (git-reference
12193 (url "https://github.com/psf/black")
12194 (commit version)))
12195 (file-name (git-file-name name version))
12196 (sha256
12197 (base32 "13fsaasnbgvlnxzsy81mlyp2pjni7fpp1v9gwh7xmq0pzxzai8h8"))))
12198 (build-system pyproject-build-system)
12199 (arguments
12200 (list
12201 ;; tests: 443 passed, 3 skipped, 4 subtests passed
12202 #:test-flags
12203 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
12204 ;; Diffs are not equal.
12205 (string-append "--deselect=tests/test_format.py"
12206 "::test_simple_format"
12207 "[module_docstring_after_comment]"))
12208 #:phases
12209 #~(modify-phases %standard-phases
12210 (add-after 'patch-source-shebangs 'use-absolute-file-names
12211 (lambda* (#:key inputs #:allow-other-keys)
12212 (substitute* (find-files "tests" "\\.py$")
12213 (("#!/usr/bin/env python3")
12214 (string-append
12215 "#!" (search-input-file inputs "/bin/python3")))))))))
12216 (propagated-inputs
12217 (list python-click
12218 python-mypy-extensions
12219 python-packaging
12220 python-pathspec
12221 python-platformdirs
12222 python-pytokens
12223 ;; [optional]
12224 python-aiohttp))
12225 (native-inputs
12226 (list python-hatch-fancy-pypi-readme
12227 python-hatch-vcs
12228 python-hatchling
12229 python-pytest
12230 python-pytest-xdist))
12231 (home-page "https://github.com/psf/black")
12232 (synopsis "The uncompromising code formatter")
12233 (description "Black is the uncompromising Python code formatter.")
12234 (license license:expat)))
12235
12236(define-public python-black-macchiato
12237 (package
12238 (name "python-black-macchiato")
12239 (version "1.3.0")
12240 (source
12241 (origin
12242 (method git-fetch)
12243 (uri (git-reference
12244 (url "https://github.com/wbolster/black-macchiato")
12245 (commit version)))
12246 (file-name (git-file-name name version))
12247 (sha256
12248 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
12249 (build-system pyproject-build-system)
12250 (arguments
12251 (list
12252 #:phases
12253 #~(modify-phases %standard-phases
12254 (add-after 'unpack 'ignore-failing-tests
12255 (lambda _
12256 (substitute* "test_macchiato.py"
12257 (("\\(.*\\n'\\)," all)
12258 (string-append "# " all))))))))
12259 (native-inputs (list python-pytest python-setuptools))
12260 (propagated-inputs (list python-black))
12261 (home-page "https://github.com/wbolster/black-macchiato")
12262 (synopsis "Partial @code{python-black} formatting")
12263 (description
12264 "This package is built on top the @code{python-black} code formatter to
12265enable formatting of partial files.")
12266 (license license:bsd-3)))
12267
12268(define-public python-blinker
12269 (package
12270 (name "python-blinker")
12271 (version "1.9.0")
12272 (source
12273 (origin
12274 (method url-fetch)
12275 (uri (pypi-uri "blinker" version))
12276 (sha256
12277 (base32
12278 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
12279 (build-system pyproject-build-system)
12280 (native-inputs
12281 (list python-flit-core
12282 python-pytest
12283 python-pytest-asyncio))
12284 (home-page "https://pythonhosted.org/blinker/")
12285 (synopsis "Fast, simple object-to-object and broadcast signaling")
12286 (description
12287 "Blinker provides a fast dispatching system that allows any number of
12288interested parties to subscribe to events, or \"signals\".")
12289 (license license:expat)))
12290
12291(define-public pelican
12292 (package
12293 (name "pelican")
12294 (version "4.11.0")
12295 (source
12296 (origin
12297 (method url-fetch)
12298 (uri (pypi-uri "pelican" version))
12299 (sha256
12300 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
12301 (build-system pyproject-build-system)
12302 (arguments
12303 (list
12304 #:test-flags #~(list "-k" (string-append
12305 ;; These tests failed with AssertionError.
12306 "not test_typogrify_ignore_filters"
12307 " and not test_typogrify_ignore_tags"
12308 " and not test_error_on_warning"))))
12309 (native-inputs
12310 (list python-anyio
12311 python-beautifulsoup4
12312 python-lxml
12313 python-pdm-backend
12314 python-pytest
12315 python-smartypants
12316 python-typogrify))
12317 (inputs
12318 (list python-blinker
12319 python-dateutil
12320 ;; Ignoring `guix lint` warning as python-docutils is used to support
12321 ;; reStructuredText processing at runtime.
12322 python-docutils
12323 python-feedgenerator
12324 python-jinja2
12325 python-ordered-set
12326 python-pygments
12327 python-rich
12328 python-tzdata
12329 python-unidecode
12330 python-watchfiles))
12331 (home-page "https://blog.getpelican.com/")
12332 (synopsis "Python-based static site publishing system")
12333 (description
12334 "Pelican is a tool to generate a static blog from reStructuredText,
12335Markdown input files, and more. Pelican uses Jinja2 for templating
12336and is very extensible.")
12337 (license license:agpl3+)))
12338
12339(define-public python-cykhash
12340 (package
12341 (name "python-cykhash")
12342 (version "2.0.1")
12343 (source
12344 (origin
12345 (method url-fetch)
12346 (uri (pypi-uri "cykhash" version))
12347 (sha256
12348 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
12349 (build-system pyproject-build-system)
12350 (arguments
12351 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
12352 (native-inputs
12353 (list python-cython
12354 python-setuptools))
12355 (home-page "https://github.com/realead/cykhash")
12356 (synopsis "Khash-sets and maps")
12357 (description
12358 "This package is a Cython wrapper for khash-sets/maps. It brings
12359functionality of
12360@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
12361Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
12362world is lacking the concept of a (hash-)set. This shortcoming is fixed and
12363efficient (memory- and speedwise compared to pandas) @code{unique} and
12364@code{isin} are implemented. Python-set/dict have a big memory-footprint.
12365For some datatypes the overhead can be reduced by using khash by factor 4-8.")
12366 (license license:expat)))
12367
12368(define-public python-cython
12369 ;; TODO: Move to python-build.
12370 (package
12371 (name "python-cython")
12372 (version "3.2.5")
12373 (source
12374 (origin
12375 (method git-fetch)
12376 (uri (git-reference
12377 (url "https://github.com/cython/cython")
12378 (commit version)))
12379 (file-name (git-file-name name version))
12380 (sha256
12381 (base32 "07n0x4z0ifkhl8hi47amqhqfjc6jlh5dra9r54nlsnwnai83psy1"))))
12382 (build-system pyproject-build-system)
12383 (arguments
12384 (list
12385 #:test-backend #~'custom
12386 #:test-flags
12387 #~(list "runtests.py"
12388 "-vv"
12389 ;; Some tests fail when number of cores are 24, keep on save
12390 ;; minimal count.
12391 "-j" (number->string (min 8 (parallel-job-count)))
12392 "-x" (string-join
12393 (list "annotate_html"
12394 "Debugger"
12395 ;; It fails with AssertionError: Failed doctest test
12396 ;; for complex_numbers_cpp.double_abs.
12397 ;; See: <https://github.com/cython/cython/issues/6528>.
12398 "complex_numbers_cpp"
12399 #$@(if (target-32bit?)
12400 ;; XXX: On 32-bit architectures, running the
12401 ;; parallel tests fails on many-core systems.
12402 ;; See: <https://github.com/cython/cython/issues/2807>.
12403 '("run.parallel"
12404 ;; Test cpp_stl_any.cast_test fails.
12405 ;; See: <https://github.com/cython/cython/issues/5928>.
12406 "cpp_stl_any")
12407 '())
12408 #$@(if (system-hurd?)
12409 '("test_class_ref"
12410 "test_compiler_directives"
12411 "test_lang_version")
12412 '()))
12413 "|"))
12414 #:phases
12415 #~(modify-phases %standard-phases
12416 (add-before 'check 'pre-check
12417 (lambda* (#:key tests? test-flags #:allow-other-keys)
12418 ;; Disable compiler optimizations to greatly reduce the running
12419 ;; time of the test suite.
12420 (setenv "CFLAGS" "-O0")
12421 ;; Some tests require access to "$HOME/.cython".
12422 (setenv "HOME" "/tmp"))))))
12423 (native-inputs
12424 (list libxcrypt
12425 python-setuptools))
12426 ;; we need the full python package and not just the python-wrapper
12427 ;; because we need libpython3.3m.so
12428 (inputs
12429 (list python))
12430 (home-page "https://cython.org/")
12431 (synopsis "C extensions for Python")
12432 (description "Cython is an optimising static compiler for both the Python
12433programming language and the extended Cython programming language. It makes
12434writing C extensions for Python as easy as Python itself.")
12435 (license license:asl2.0)))
12436
12437(define-public python-cython-0
12438 (package
12439 (inherit python-cython)
12440 ;; It's the latest version of 0.29. See
12441 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12442 (version "0.29.37")
12443 (source
12444 (origin
12445 (method url-fetch)
12446 (uri (pypi-uri "Cython" version))
12447 (sha256
12448 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12449 (arguments
12450 (list
12451 ;; XXX: Tests are broken with [email protected], but dependent packages
12452 ;; build, so keep it until unnecessary.
12453 #:tests? #f
12454 #:test-backend #~'custom
12455 #:test-flags
12456 #~(list "runtests.py"
12457 "-vv"
12458 "-j" (number->string (parallel-job-count))
12459 ;; XXX: On 32-bit architectures, running the parallel tests
12460 ;; fails on many-core systems, see
12461 ;; <https://github.com/cython/cython/issues/2807>.
12462 #$@(if (target-32bit?)
12463 #~("-x" "run.parallel")
12464 #~())
12465 #$@(if (system-hurd?)
12466 #~("-x" "test_class_ref"
12467 "-x" "test_compiler_directives"
12468 "-x" "test_lang_version")
12469 #~())
12470 ;; This test fails when running on 24 cores.
12471 "-x" "cpp_stl_conversion")
12472 #:phases
12473 #~(modify-phases %standard-phases
12474 (add-after 'unpack 'fix-pyximport-python-3.12
12475 (lambda _
12476 (let ((importlib-util-load-dynamic "\
12477import importlib.util
12478from importlib.machinery import ExtensionFileLoader
12479
12480def load_dynamic(name, path):
12481 loader = ExtensionFileLoader(name, path)
12482 spec = importlib.util.spec_from_file_location(name, loader=loader)
12483 module = importlib.util.module_from_spec(spec)
12484 spec.loader.exec_module(module)
12485 return module
12486"))
12487 (substitute* "pyximport/pyximport.py"
12488 (("^import imp")
12489 importlib-util-load-dynamic)
12490 (("imp\\.load_dynamic")
12491 "load_dynamic")))))
12492 (add-before 'check 'pre-check
12493 ;; some tests require access to "$HOME/.cython"
12494 (lambda _
12495 (setenv "HOME" "/tmp")
12496 ;; Disable compiler optimizations to greatly reduce the running
12497 ;; time of the test suite.
12498 (setenv "CFLAGS" "-O0"))))))))
12499
12500;; XXX: Deprecated on <2026-05-28>.
12501(define-public python-cython-next python-cython)
12502
12503;; NOTE: when upgrading numpy please make sure that python-numba,
12504;; python-pandas and python-scipy still build, as these three packages are
12505;; often used together.
12506(define-public python-numpy
12507 (package
12508 (name "python-numpy")
12509 (version "2.4.6")
12510 (source
12511 (origin
12512 ;; XXX: When switching to Git it fails to find Numpy's fork of Meson
12513 ;; git submodule -- <https://github.com/numpy/meson>.
12514 (method url-fetch)
12515 (uri (string-append
12516 "https://github.com/numpy/numpy/releases/download/v"
12517 version "/numpy-" version ".tar.gz"))
12518 (sha256
12519 (base32 "1nkx73blw298dzdk6blhrsann60cgdy7q6n3q9m785ia9865g8zk"))))
12520 (build-system pyproject-build-system)
12521 (arguments
12522 (list
12523 ;; tests: 47255 passed, 1079 skipped, 32 xfailed, 2 xpassed, 318 warnings
12524 #:modules '((guix build utils)
12525 (guix build pyproject-build-system)
12526 (ice-9 format))
12527 #:test-flags
12528 #~(list "-m" "not slow"
12529 "--numprocesses" (number->string (min 8 (parallel-job-count))))
12530 #:phases
12531 #~(modify-phases %standard-phases
12532 (add-after 'unpack 'fix-executable-paths
12533 (lambda* (#:key inputs #:allow-other-keys)
12534 (substitute* "numpy/distutils/exec_command.py"
12535 (("'/bin/sh'")
12536 (format #f "~s" (which "bash"))))
12537 (substitute* "numpy/meson.build"
12538 ;; Relay on python from the PATH instead of full reference
12539 ;; stored in built wheel.
12540 (("'py.full_path\\(\\)'") "'python'"))
12541 (substitute* "numpy/_core/tests/test_cpu_features.py"
12542 (("/bin/true")
12543 (search-input-file inputs "bin/true")))))
12544 (add-before 'build 'parallelize-build
12545 (lambda _
12546 (setenv "OMP_NUM_THREAD"
12547 (number->string (parallel-job-count)))
12548 (setenv "NPY_NUM_BUILD_JOBS"
12549 (number->string (parallel-job-count)))))
12550 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12551 ;; when the gfortran header is used. Remove gfortran from
12552 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12553 ;; <https://issues.guix.gnu.org/73439#45>.
12554 (add-after 'set-paths 'hide-gfortran
12555 (lambda* (#:key inputs #:allow-other-keys)
12556 (let ((gfortran (assoc-ref inputs "gfortran")))
12557 (setenv "CPLUS_INCLUDE_PATH"
12558 (string-join
12559 (delete (string-append gfortran "/include/c++")
12560 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12561 ":")))))
12562 (add-before 'build 'configure-blas
12563 (lambda _
12564 (call-with-output-file "site.cfg"
12565 (lambda (port)
12566 (format port
12567 "[openblas]
12568libraries = openblas
12569library_dirs = ~a/lib
12570include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12571 (replace 'check
12572 (lambda* (#:key tests? test-flags #:allow-other-keys)
12573 (when tests?
12574 (with-directory-excursion #$output
12575 (apply invoke "pytest" test-flags)
12576 (let ((pytest-cache (string-append #$output
12577 "/.pytest_cache")))
12578 (when (access? pytest-cache X_OK)
12579 (delete-file-recursively pytest-cache)))))))
12580 ;; The executables provided by this package ('f2py' and 'numpy-config')
12581 ;; only depend on Python. By customizing the wrap phase we can ensure
12582 ;; that we don't add all Python packages listed in native-inputs to
12583 ;; the closure. This significantly reduces the overall closure size.
12584 ;;
12585 ;; See also <https://bugs.gnu.org/25235>.
12586 (replace 'wrap
12587 (lambda* (#:key inputs outputs #:allow-other-keys)
12588 (for-each
12589 (lambda (program)
12590 (wrap-program program
12591 `("GUIX_PYTHONPATH" ":" suffix
12592 ,(list (site-packages inputs outputs)))))
12593 (find-files (in-vicinity #$output "/bin"))))))))
12594 (native-inputs
12595 (list gfortran
12596 python-cython
12597 python-hypothesis
12598 python-meson
12599 python-pytest
12600 python-pytest-xdist))
12601 (inputs
12602 (list bash
12603 openblas))
12604 (home-page "https://numpy.org")
12605 (synopsis "Fundamental package for scientific computing with Python")
12606 (description "NumPy is the fundamental package for scientific computing
12607with Python. It contains among other things: a powerful N-dimensional array
12608object, sophisticated (broadcasting) functions, tools for integrating C/C++
12609and Fortran code, useful linear algebra, Fourier transform, and random number
12610capabilities.")
12611 (properties
12612 '((upstream-name . "numpy")))
12613 (license license:bsd-3)))
12614
12615(define-public python-numpy-1
12616 (package
12617 (inherit python-numpy)
12618 (name "python-numpy")
12619 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12620 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12621 ;; in upstream Meson.
12622 ;;
12623 ;; See:
12624 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12625 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12626 ;; - file <doc/source/building/understanding_meson.rst>
12627 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12628 (source
12629 (origin
12630 (method url-fetch)
12631 (uri (string-append
12632 "https://github.com/numpy/numpy/releases/download/v"
12633 version "/numpy-" version ".tar.gz"))
12634 (sha256
12635 (base32
12636 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12637 (patches (search-patches "python-numpy-gcc-14.patch"))))
12638 (arguments
12639 (list
12640 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12641 #:modules '((guix build utils)
12642 (guix build pyproject-build-system)
12643 (ice-9 format))
12644 #:phases
12645 #~(modify-phases %standard-phases
12646 (add-after 'unpack 'delete-test-files
12647 (lambda _
12648 ;; These tests depend on older setuptools, see:
12649 ;; <https://github.com/numpy/numpy/issues/27531>.
12650 ;;
12651 ;; E ModuleNotFoundError: No module named
12652 ;; 'distutils.msvccompiler'
12653 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12654 (delete-file "numpy/distutils/tests/test_system_info.py")))
12655 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12656 ;; when the gfortran header is used. Remove gfortran from
12657 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12658 ;; <https://issues.guix.gnu.org/73439#45>.
12659 (add-after 'set-paths 'hide-gfortran
12660 (lambda* (#:key inputs #:allow-other-keys)
12661 (let ((gfortran (assoc-ref inputs "gfortran")))
12662 (setenv "CPLUS_INCLUDE_PATH"
12663 (string-join
12664 (delete (string-append gfortran "/include/c++")
12665 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12666 ":")))))
12667 (add-before 'build 'relax-gcc-14-strictness
12668 (lambda _
12669 (setenv "CFLAGS"
12670 "-g -O2 -Wno-error=implicit-function-declaration")))
12671 (add-before 'build 'parallelize-build
12672 (lambda _
12673 (setenv "NPY_NUM_BUILD_JOBS"
12674 (number->string (parallel-job-count)))))
12675 (add-before 'build 'configure-blas
12676 (lambda* (#:key inputs #:allow-other-keys)
12677 (call-with-output-file "site.cfg"
12678 (lambda (port)
12679 (format port
12680 "\
12681[openblas]
12682libraries = openblas
12683library_dirs = ~a/lib
12684include_dirs = ~:*~a/include~%"
12685 (dirname (dirname
12686 (search-input-file
12687 inputs "include/openblas_config.h"))))))))
12688 (add-before 'build 'fix-executable-paths
12689 (lambda* (#:key inputs #:allow-other-keys)
12690 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12691 ;; instead of /bin/sh.
12692 (substitute* "numpy/distutils/exec_command.py"
12693 (("'/bin/sh'")
12694 (format #f "~s" (search-input-file inputs "bin/bash"))))
12695 ;; Don't try to call '/bin/true' specifically.
12696 (substitute* "numpy/core/tests/test_cpu_features.py"
12697 (("/bin/true") (search-input-file inputs "bin/true")))))
12698 (replace 'check
12699 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12700 (when tests?
12701 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12702 "-j" (number->string (parallel-job-count))
12703 ;; Contrary to scipy, the runtests.py script of numpy
12704 ;; does *not* automatically provide -n when -j is used
12705 ;; (see: https://github.com/numpy/numpy/issues/21359).
12706 "--" "-n" (number->string (parallel-job-count))
12707 ;; Disable Pytest Warnings, they are resolved in the
12708 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12709 ;; applied to fixtures have no effect,
12710 ;; DeprecationWarning.
12711 "-p" "no:warnings"
12712 "-k" (string-append
12713 ;; These tests may fail on 32-bit systems (see:
12714 ;; https://github.com/numpy/numpy/issues/18387).
12715 "not test_float_remainder_overflow "
12716 "and not test_pareto "
12717 ;; The 'test_rint_big_int' test fails on older
12718 ;; x86_64 CPUs such as the Core 2 Duo (see:
12719 ;; https://github.com/numpy/numpy/issues/22170).
12720 "and not test_rint_big_int "
12721 ;; They fail to detect compiler.
12722 "and not test_compile1 "
12723 "and not test_compile2 "
12724 ;; Due to disabled warnings
12725 "and not test_getattr_warning "
12726 "and not test_integer_signs "
12727 "and not test_implicit_cast_float_to_int_fails "
12728 "and not test_integer_signs "
12729 ;; The huge_array test is too large for 32-bit (see:
12730 ;; https://bugs.gentoo.org/843599 and
12731 ;; https://bugs.gentoo.org/846548).
12732 ;; TestKind.test_all is a Fortran type failure
12733 ;; that may be toolchain or environment related.
12734 #$@(if (or (target-x86?) (target-arm32?))
12735 `(" and not test_identityless_reduction_huge_array"
12736 " and not (TestKind and test_all)")
12737 '())
12738 ;; This test fails with a Fortran failure (16
12739 ;; expected but got -1), due to the fact that it
12740 ;; requires a 64-bit system.
12741 #$@(if (or (target-x86-32?) (target-arm32?))
12742 `(" and not test_int")
12743 '())
12744 ;; These tests fail when building from aarch64-linux.
12745 #$@(if (target-arm32?)
12746 `(" and not test_features"
12747 " and not test_unary_spurious_fpexception")
12748 '())
12749 ;; These tests seem to fail on machines without
12750 ;; an FPU is still under investigation upstream.
12751 ;; https://github.com/numpy/numpy/issues/20635
12752 #$@(if (target-riscv64?)
12753 `(" and not test_fp_noncontiguous")
12754 '())
12755 ;; They also fail with gcc-14
12756 " and not test_float"
12757 " and not test_fpclass"
12758
12759 ;; These tests fail with gcc-14
12760 " and not test_context_locality"
12761 " and not test_cosh"
12762 " and not test_default_policy_singleton"
12763 " and not test_exp_exceptions"
12764 " and not test_half_fpe"
12765 " and not test_owner_is_base"
12766 " and not test_policy_propagation"
12767 " and not test_set_policy"
12768 " and not test_sinh"
12769 " and not test_square_values"
12770 " and not test_sum"
12771 " and not test_switch_owner"
12772 " and not test_thread_locality"
12773
12774 ;; These tests depend on older setuptools, see:
12775 ;; <https://github.com/numpy/numpy/issues/27531>.
12776 " and not test_api_importable"
12777 " and not test_all_modules_are_expected_2")))))
12778 ;; See comment for custom python-numpy wrap phase above.
12779 (replace 'wrap
12780 (lambda* (#:key inputs outputs #:allow-other-keys)
12781 (for-each
12782 (lambda (program)
12783 (wrap-program program
12784 `("GUIX_PYTHONPATH" ":" suffix
12785 ,(list (site-packages inputs outputs)))))
12786 (find-files (in-vicinity #$output "/bin"))))))))
12787 (native-inputs
12788 (list python-hypothesis
12789 python-meson
12790 python-pytest
12791 python-pytest-xdist
12792 python-setuptools
12793 python-typing-extensions
12794 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12795 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12796 ;; <https://github.com/numpy/numpy/issues/24318>.
12797 gcc ;fevn.h c[++] include must precede fortran's
12798 gfortran))
12799 (inputs (list bash openblas))))
12800
12801(define-deprecated/public-alias python-numpy-2 python-numpy)
12802
12803(define-public python-numpysane
12804 (package
12805 (name "python-numpysane")
12806 (version "0.43")
12807 (source
12808 (origin
12809 (method git-fetch)
12810 (uri (git-reference
12811 (url "https://github.com/dkogan/numpysane.git")
12812 (commit (string-append "v" version))))
12813 (file-name (git-file-name name version))
12814 (sha256
12815 (base32 "1ls1nrdcizscdpv4712jr7wiaxkmryrai7w0ci06fiq5haq54hrn"))))
12816 (build-system pyproject-build-system)
12817 (arguments
12818 (list
12819 #:phases
12820 #~(modify-phases %standard-phases
12821 (add-after 'unpack 'patch
12822 (lambda* (#:key inputs outputs #:allow-other-keys)
12823 (let* ((numpy (assoc-ref inputs "python-numpy"))
12824 (site (site-packages inputs `(("out" . ,numpy)))))
12825 (substitute* "Makefile.common.header"
12826 ;; See: <https://github.com/dkogan/numpysane/issues/3>.
12827 (("pkg-config --cflags-only-I numpy")
12828 (format #f "echo -I~a/numpy/_core/include" site))))))
12829 (replace 'check
12830 (lambda _
12831 (setenv "CC"
12832 #$(cc-for-target))
12833 (invoke "make" "check"))))))
12834 (propagated-inputs (list python-numpy))
12835 (native-inputs (list perl pkg-config python-setuptools))
12836 (home-page "https://github.com/dkogan/numpysane")
12837 (synopsis "More-reasonable core functionality for numpy")
12838 (description
12839 "This package provides more-reasonable core functionality for numpy.
12840
12841A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12842
12843numpysane has:
12844@itemize
12845@item easier broadcasting
12846@item nicer array manipulation
12847@item array concatenation
12848@item manipulation of dimensions
12849@item broadcast-aware inner product
12850@item broadcast-aware outer product
12851@item broadcast-aware 2-norm
12852@item broadcast-aware matrix multiplication
12853@end itemize
12854")
12855 (license license:lgpl2.0+)))
12856
12857(define-public python-numpy-documentation
12858 (package
12859 (inherit python-numpy)
12860 (name "python-numpy-documentation")
12861 (arguments
12862 (list
12863 #:tests? #f ;we're only generating the documentation
12864 #:phases
12865 #~(modify-phases %standard-phases
12866 (add-after 'unpack 'avoid-external-deps
12867 (lambda _
12868 ;; XXX: Avoid search-button to avoid sphinx error
12869 ;; TemplateNotFound('search-button.html')
12870 (substitute* "doc/source/conf.py"
12871 (("\"search-button\",") ""))
12872 ;; XXX: Avoid theme-switcher to avoid sphinx error
12873 ;; TemplateNotFound('theme-switcher.html')
12874 (substitute* "doc/source/conf.py"
12875 (("\"theme-switcher\",") ""))
12876 ;; XXX: Avoid version-switcher because it depends on the value
12877 ;; of external https://numpy.org/doc/_static/versions.json
12878 (substitute* "doc/source/conf.py"
12879 (("\"version-switcher\",") ""))))
12880 (add-before 'build 'add-gnu-freefont-to-texmf
12881 (lambda _
12882 ;; XXX: The Sphinx-generated tex output specifies the GNU
12883 ;; FreeFont font to be searched via its extension, which uses
12884 ;; kpathsea instead of fontconfig and fail (see:
12885 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12886 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12887 ;; GUIX_TEXMF.
12888 (mkdir-p "texmf-dist/fonts/opentype/public")
12889 (symlink (string-append
12890 #$(this-package-native-input "font-gnu-freefont")
12891 "/share/fonts/opentype")
12892 (string-append
12893 (getcwd) "/"
12894 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12895 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12896 (getcwd) "/texmf-dist"))))
12897 (replace 'build
12898 (lambda _
12899 (chdir "doc")
12900 (let ((sphinxopts (string-append
12901 "SPHINXOPTS=-j"
12902 (number->string (parallel-job-count)))))
12903 ;; Do not treat warnings as errors.
12904 (substitute* "Makefile"
12905 ((" -WT ") " -T "))
12906 (setenv "HOME" "/tmp")
12907 ;; Build the PDF documentation.
12908 (invoke "make" "latex-build" sphinxopts)
12909 ;; FIXME: PDF build fails
12910 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12911 ;; Build the HTML documentation
12912 (invoke "make" "html" sphinxopts)
12913 ;; Build the Info documentation. The issues worked around
12914 ;; below can be tracked at
12915 ;; https://github.com/numpy/numpy/issues/12278.
12916 (substitute* "source/conf.py"
12917 ;; The root document should be "index", not "contents".
12918 (("\"contents\"") "'index'")
12919 ;; Disable Sphinx extensions that produce broken Texinfo.
12920 ((".*'numpydoc'.*") "")
12921 ((".*'sphinx.ext.autodoc'.*") "")
12922 ((".*'sphinx.ext.autosummary'.*") ""))
12923 (invoke "make" "info" sphinxopts))))
12924 (replace 'install
12925 (lambda _
12926 (let* ((data (string-append #$output "/share"))
12927 (doc (string-append data "/doc/numpy"))
12928 (html (string-append doc "/html"))
12929 (info (string-append data "/info")))
12930 ;; Install the HTML documentation.
12931 (mkdir-p html)
12932 (copy-recursively "build/html" html)
12933 ;; Install the PDF reference and user manuals.
12934 ;; FIXME:
12935 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12936 ;; (install-file "build/latex/numpy-user.pdf" doc)
12937 ;; Install the info manual.
12938 (install-file "build/texinfo/numpy.info" info)
12939 (symlink (string-append html "/_images")
12940 (string-append info "/numpy-figures"))))))))
12941 (native-inputs
12942 (list font-gnu-freefont
12943 perl
12944 python-breathe
12945 python-ipython
12946 python-jupyterlite-sphinx
12947 python-matplotlib
12948 python-numpy
12949 python-numpydoc
12950 python-pandas
12951 python-pydata-sphinx-theme
12952 python-scipy ;used by matplotlib
12953 python-setuptools
12954 python-sphinx
12955 python-sphinx-copybutton
12956 python-sphinx-design
12957 texinfo
12958 (texlive-local-tree
12959 (list texlive-cbfonts
12960 texlive-cm-super
12961 texlive-cmap
12962 texlive-expdlist
12963 texlive-fandol
12964 texlive-greek-fontenc
12965 texlive-latexmk
12966 texlive-polyglossia
12967 texlive-xetex
12968 texlive-xindy))))
12969 (inputs '())
12970 (propagated-inputs '())
12971 (synopsis "Documentation for the @code{python-numpy} package")
12972 (description "This package provides the complete NumPy documentation in
12973the Texinfo, and HTML formats.")))
12974
12975(define-public python-numpy-stl
12976 (package
12977 (name "python-numpy-stl")
12978 (version "3.2.0")
12979 (source
12980 (origin
12981 (method url-fetch)
12982 (uri (pypi-uri "numpy_stl" version))
12983 (sha256
12984 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12985 (build-system pyproject-build-system)
12986 (native-inputs
12987 (list python-cython
12988 python-pytest
12989 python-setuptools
12990 python-wheel))
12991 (propagated-inputs
12992 (list python-numpy
12993 python-utils))
12994 (home-page "https://github.com/WoLpH/numpy-stl/")
12995 (synopsis "Read, write and modify binary/ASCII STL files library")
12996 (description
12997 "Library to make reading, writing and modifying both binary and ascii STL
12998files, file format native to the stereolithography CAD software created by 3D
12999Systems, easy.")
13000 (license license:bsd-3)))
13001
13002(define-public python-npx
13003 (package
13004 (name "python-npx")
13005 (version "0.1.6")
13006 (source
13007 (origin
13008 (method git-fetch) ; no source archive in PyPI
13009 (uri (git-reference
13010 (url "https://github.com/sigma-py/npx")
13011 (commit (string-append "v" version))))
13012 (file-name (git-file-name name version))
13013 (sha256
13014 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
13015 (build-system pyproject-build-system)
13016 (native-inputs
13017 (list python-networkx
13018 python-pytest
13019 python-setuptools
13020 python-wheel))
13021 (propagated-inputs
13022 (list python-numpy))
13023 (home-page "https://github.com/nschloe/npx")
13024 (synopsis "Extensions for NumPy")
13025 (description "NumPy is a large library used everywhere in scientific
13026computing. That's why breaking backwards-compatibility comes at a
13027significant cost and is almost always avoided, even if the API of some
13028methods is arguably lacking. This package provides drop-in wrappers
13029\"fixing\" those.")
13030 (license license:bsd-3)))
13031
13032(define-public python-munch
13033 (package
13034 (name "python-munch")
13035 (version "4.0.0")
13036 (source
13037 (origin
13038 (method url-fetch)
13039 (uri (pypi-uri "munch" version))
13040 (sha256
13041 (base32
13042 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
13043 (build-system pyproject-build-system)
13044 (native-inputs
13045 (list python-astroid
13046 python-pytest
13047 python-setuptools
13048 python-wheel))
13049 (home-page "https://github.com/Infinidat/munch")
13050 (synopsis "Dot-accessible dictionary")
13051 (description "Munch is a dot-accessible dictionary similar to JavaScript
13052objects.")
13053 (license license:expat)))
13054
13055(define-public python-colormath2
13056 (package
13057 (name "python-colormath2")
13058 (version "3.0.3")
13059 (source
13060 (origin
13061 (method git-fetch)
13062 (uri (git-reference
13063 (url "https://github.com/bkmgit/python-colormath2")
13064 (commit version)))
13065 (file-name (git-file-name name version))
13066 (sha256
13067 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
13068 (build-system pyproject-build-system)
13069 (propagated-inputs (list python-networkx python-numpy))
13070 (native-inputs (list python-nose2 python-setuptools))
13071 (home-page "https://github.com/bkmgit/python-colormath2")
13072 (synopsis "Color math and conversion library")
13073 (description
13074 "This is a Python library for color math and conversions.")
13075 (license license:bsd-3)))
13076
13077(define-public python-pam
13078 (package
13079 (name "python-pam")
13080 (version "2.0.2")
13081 (source
13082 (origin
13083 (method git-fetch)
13084 (uri (git-reference
13085 (url "https://github.com/FirefighterBlu3/python-pam")
13086 (commit (string-append "v" version))))
13087 (file-name (git-file-name name version))
13088 (sha256
13089 (base32 "05fvf9rg4h7sigzvipm1ghq34zk6i8na7wkyk905nvk4gdhln7ri"))))
13090 (build-system pyproject-build-system)
13091 (arguments
13092 (list
13093 #:test-flags
13094 #~(list "-k"
13095 (string-append " not __normal_"
13096 " and not __env_requires_"
13097 " and not __getenv"
13098 " and not __putenv"
13099 " and not __unset"
13100 " and not _setenv"
13101 " and not _env_set"
13102 " and not __pam_end"
13103 " and not _session_unauthenticated"))
13104 #:phases
13105 #~(modify-phases %standard-phases
13106 (add-after 'unpack 'bake-pam
13107 (lambda* (#:key inputs #:allow-other-keys)
13108 (substitute* "src/pam/__internals.py"
13109 (("find_library\\(\"(pam|pam_misc)\"\\)" all lib)
13110 (string-append
13111 "\""
13112 (search-input-file inputs
13113 (string-append "lib/lib" lib ".so"))
13114 "\"")))))
13115 (add-before 'check 'fix-test-config
13116 (lambda _
13117 (substitute* "pyproject.toml"
13118 (("\"test_\\*.py\"")
13119 (format
13120 #f "[~{~s~^,~}]"
13121 (map basename (find-files "tests" "test_.*\\.py$"))))
13122 (("norecursedirs = (\".*\")" all dirs)
13123 (string-append "norecursedirs = [" dirs "]"))))))))
13124 (inputs (list linux-pam))
13125 (propagated-inputs (list python-six))
13126 (native-inputs (list python-pytest
13127 python-setuptools))
13128 (home-page "https://github.com/FirefighterBlu3/python-pam")
13129 (synopsis "Python PAM module")
13130 (description "This package provides a Python module to interface with
13131@acronym{PAM, pluggable authentication modules}.")
13132 (license license:expat)))
13133
13134(define-public python-pyspnego
13135 (package
13136 (name "python-pyspnego")
13137 (version "0.8.0")
13138 (source (origin
13139 (method url-fetch)
13140 (uri (pypi-uri "pyspnego" version))
13141 (sha256
13142 (base32
13143 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
13144 (build-system pyproject-build-system)
13145 (native-inputs
13146 (list python-pytest python-pytest-mock python-setuptools python-wheel))
13147 (propagated-inputs
13148 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
13149 (home-page "https://github.com/jborean93/pyspnego")
13150 (synopsis "Python SPNEGO library")
13151 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
13152Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
13153parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
13154readable format.")
13155 (license license:expat)))
13156
13157(define-public python-pygit2
13158 (package
13159 (name "python-pygit2")
13160 (version "1.18.2")
13161 (source
13162 (origin
13163 (method url-fetch)
13164 (uri (pypi-uri "pygit2" version))
13165 (sha256
13166 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
13167 (build-system pyproject-build-system)
13168 (propagated-inputs (list python-cffi libgit2))
13169 (native-inputs (list python-pytest python-setuptools python-wheel))
13170 (home-page "https://github.com/libgit2/pygit2")
13171 (synopsis "Python bindings for libgit2")
13172 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
13173 ;; GPL2.0 only, with linking exception.
13174 (license license:gpl2)))
13175
13176(define-public python-patiencediff
13177 (package
13178 (name "python-patiencediff")
13179 (version "0.2.15")
13180 (source
13181 (origin
13182 (method url-fetch)
13183 (uri (pypi-uri "patiencediff" version))
13184 (sha256
13185 (base32
13186 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
13187 (build-system pyproject-build-system)
13188 (arguments
13189 (list
13190 #:phases #~(modify-phases %standard-phases
13191 ;; Fails because bin/patiencediff expects two files to diff
13192 (delete 'sanity-check))))
13193 (native-inputs (list python-pytest python-setuptools python-wheel))
13194 (home-page "https://www.breezy-vcs.org/")
13195 (synopsis "Python implementation of the patiencediff algorithm")
13196 (description
13197 "This package contains a Python implementation of the @code{patiencediff}
13198algorithm. Patiencediff provides a good balance of performance, nice output for
13199humans, and implementation simplicity.")
13200 (license license:gpl2+)))
13201
13202(define-public python-merge3
13203 (package
13204 (name "python-merge3")
13205 (version "0.0.16")
13206 (source
13207 (origin
13208 (method git-fetch)
13209 (uri (git-reference
13210 (url "https://github.com/breezy-team/merge3")
13211 (commit (string-append "v" version))))
13212 (file-name (git-file-name name version))
13213 (sha256
13214 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
13215 (build-system pyproject-build-system)
13216 (arguments (list #:test-backend #~'unittest))
13217 (native-inputs (list python-setuptools))
13218 (home-page "https://github.com/breezy-team/merge3")
13219 (synopsis "Python implementation of 3-way merge")
13220 (description "This Python library implements 3-way merge for text.")
13221 (license license:gpl2+)))
13222
13223(define-public python-fancycompleter
13224 (package
13225 (name "python-fancycompleter")
13226 (version "0.9.1")
13227 (source
13228 (origin
13229 (method git-fetch)
13230 (uri (git-reference
13231 (url "https://github.com/pdbpp/fancycompleter")
13232 (commit version)))
13233 (file-name (git-file-name name version))
13234 (sha256
13235 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
13236 (build-system pyproject-build-system)
13237 (arguments
13238 (list
13239 #:phases
13240 #~(modify-phases %standard-phases
13241 (add-after 'unpack 'fix-setup.py
13242 (lambda _
13243 (substitute* "setup.py"
13244 ((".*setupmeta.*")
13245 "")
13246 (("versioning=.*")
13247 (string-append "version='" #$version "',"))
13248 ((".*pyrepl.*") ; broken on Python 3
13249 "")))))))
13250 (native-inputs (list python-pytest python-setuptools))
13251 (home-page "https://github.com/pdbpp/fancycompleter")
13252 (synopsis "TAB completion library for Python")
13253 (description
13254 "@code{fancycompleter} is a module that adds TAB completion to the
13255interactive prompt. It is an extension of the @code{rlcompleter} module from
13256the standard Python library.")
13257 (license license:bsd-3)))
13258
13259(define-public python-ipdb
13260 (package
13261 (name "python-ipdb")
13262 (version "0.13.13")
13263 (source
13264 (origin
13265 (method git-fetch)
13266 (uri (git-reference
13267 (url "https://github.com/gotcha/ipdb")
13268 (commit version)))
13269 (file-name (git-file-name name version))
13270 (sha256
13271 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
13272 (build-system pyproject-build-system)
13273 (arguments (list #:test-backend #~'unittest))
13274 (native-inputs (list python-setuptools))
13275 (propagated-inputs (list python-ipython python-toml python-decorator))
13276 (home-page "https://github.com/gotcha/ipdb")
13277 (synopsis "IPython-enhanced Python debugger (pdb)")
13278 (description
13279 "@code{ipdb} exports functions to access the IPython debugger, which
13280features tab completion, syntax highlighting, better tracebacks and better
13281introspection than Python's standard @command{pdb} debugger, with which it
13282shares the same interface.")
13283 (license license:bsd-3)))
13284
13285(define-public python-ipfsspec
13286 (package
13287 (name "python-ipfsspec")
13288 (version "0.4.0")
13289 (source
13290 (origin
13291 (method url-fetch)
13292 (uri (pypi-uri "ipfsspec" version))
13293 (sha256
13294 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
13295 (build-system pyproject-build-system)
13296 (arguments
13297 (list
13298 #:test-flags
13299 '(list "-m not local_gw"
13300 ;; Require local gateway
13301 "--ignore=test/test_gateway.py"
13302 ;; Require internet
13303 "--ignore=test/test_async.py"
13304 "--ignore=test/test_ipfs.py")))
13305 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
13306 (native-inputs
13307 (list python-pytest
13308 python-pytest-asyncio
13309 python-setuptools
13310 python-wheel))
13311 (home-page "https://github.com/fsspec/ipfsspec")
13312 (synopsis "Read-only implementation of fsspec for IPFS")
13313 (description "This package provides a read-only implementation of
13314@code{fsspec} for IPFS.")
13315 (license license:expat)))
13316
13317(define-public python-pdftotext
13318 (package
13319 (name "python-pdftotext")
13320 (version "3.0.0")
13321 (source
13322 (origin
13323 (method url-fetch)
13324 (uri (pypi-uri "pdftotext" version))
13325 (sha256
13326 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
13327 (build-system pyproject-build-system)
13328 (native-inputs (list python-pytest python-setuptools python-wheel))
13329 (inputs (list poppler))
13330 (home-page "https://github.com/jalan/pdftotext")
13331 (synopsis "Simple PDF text extraction")
13332 (description "Pdftotext is a Python library of PDF text extraction.")
13333 (license license:expat)))
13334
13335(define-public python-pluginbase
13336 (package
13337 (name "python-pluginbase")
13338 (version "1.0.1")
13339 (source
13340 (origin
13341 (method git-fetch)
13342 (uri (git-reference
13343 (url "https://github.com/mitsuhiko/pluginbase")
13344 (commit (string-append "v" version))))
13345 (file-name (git-file-name name version))
13346 (sha256
13347 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
13348 (build-system pyproject-build-system)
13349 (arguments
13350 (list
13351 #:phases
13352 #~(modify-phases %standard-phases
13353 (replace 'check
13354 (lambda* (#:key tests? #:allow-other-keys)
13355 (when tests?
13356 (invoke "make" "test")))))))
13357 (native-inputs (list python-pytest python-setuptools))
13358 (home-page "https://github.com/mitsuhiko/pluginbase")
13359 (synopsis "Simple but flexible plugin system for Python")
13360 (description
13361 "PluginBase is a library useful in the development of flexible plugin
13362systems in Python.")
13363 (license license:bsd-3)))
13364
13365(define-public python-node-semver
13366 (package
13367 (name "python-node-semver")
13368 (version "0.8.1")
13369 (source
13370 (origin
13371 (method git-fetch)
13372 (uri (git-reference
13373 (url "https://github.com/podhmo/python-node-semver")
13374 (commit version)))
13375 (file-name (git-file-name name version))
13376 (sha256
13377 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
13378 (build-system pyproject-build-system)
13379 (native-inputs (list python-pytest python-setuptools))
13380 (home-page "https://github.com/podhmo/python-node-semver")
13381 (synopsis "Python port of node-semver")
13382 (description
13383 "This module provides a Python version of node-semver, a semantic version
13384parser for Node.js.")
13385 (license license:expat)))
13386
13387(define-public python-norns
13388 (package
13389 (name "python-norns")
13390 (version "0.1.6")
13391 (source
13392 (origin
13393 (method git-fetch)
13394 (uri (git-reference
13395 (url "https://github.com/simonvh/norns")
13396 (commit version)))
13397 (file-name (git-file-name name version))
13398 (sha256
13399 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
13400 (patches
13401 (search-patches "python-norns-nose.patch"))))
13402 (build-system pyproject-build-system)
13403 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
13404 (native-inputs (list python-setuptools))
13405 (home-page "https://github.com/simonvh/norns")
13406 (synopsis "Simple YAML-based config module")
13407 (description "This package provides a simple YAML-based config module.")
13408 (license license:expat)))
13409
13410(define-public python-patch-ng
13411 (package
13412 (name "python-patch-ng")
13413 (version "1.18.1")
13414 (source
13415 (origin
13416 (method git-fetch)
13417 (uri (git-reference
13418 (url "https://github.com/conan-io/python-patch-ng")
13419 (commit version)))
13420 (file-name (git-file-name name version))
13421 (sha256
13422 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
13423 (build-system pyproject-build-system)
13424 (arguments
13425 (list
13426 #:test-backend #~'custom
13427 #:test-flags #~(list "tests/run_tests.py" "-v")))
13428 (native-inputs (list python-pytest python-setuptools))
13429 (home-page "https://github.com/conan-io/python-patch-ng")
13430 (synopsis "Python library to parse and apply unified diffs")
13431 (description
13432 "Patch NG (New Generation) is a command and Python library to parse and
13433apply unified diffs. It has features such as:
13434@itemize
13435@item automatic correction of common patch formatting corruption
13436@item patch format detection (SVN, Hg, Git)
13437@item nice diffstat histogram.
13438@end itemize")
13439 (license license:expat)))
13440
13441(define-public python-numpydoc
13442 (package
13443 (name "python-numpydoc")
13444 (version "1.10.0")
13445 (source
13446 (origin
13447 (method url-fetch)
13448 (uri (pypi-uri "numpydoc" version))
13449 (sha256
13450 (base32
13451 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13452 (build-system pyproject-build-system)
13453 (arguments
13454 (list
13455 #:test-flags
13456 '(list "numpydoc/tests"
13457 "-k" (string-append
13458 ;; TODO: unclear why these fail.
13459 "not test_MyClass and not test_my_function "
13460 ;; This test compares installed vs source absolute file
13461 ;; names.
13462 "and not test_source_file_name_with_properties"))))
13463 (propagated-inputs (list python-sphinx python-tomli))
13464 (native-inputs
13465 (list python-matplotlib python-pytest python-setuptools))
13466 (home-page "https://pypi.org/project/numpydoc/")
13467 (synopsis "Numpy's Sphinx extensions")
13468 (description "Sphinx extension to support docstrings in Numpy format.")
13469 (license license:bsd-2)))
13470
13471(define-public python-numexpr
13472 (package
13473 (name "python-numexpr")
13474 (version "2.14.1")
13475 (source
13476 (origin
13477 (method git-fetch)
13478 (uri (git-reference
13479 (url "https://github.com/pydata/numexpr")
13480 (commit (string-append "v" version))))
13481 (file-name (git-file-name name version))
13482 (sha256
13483 (base32 "1zbpi7whjh6sccn1fndii735gv14kjaaqm3c3w1g2ry0z9948v9v"))))
13484 (build-system pyproject-build-system)
13485 (arguments
13486 (list
13487 ;; tests: 6039 passed, 1 warning
13488 #:test-flags #~(list "--pyargs" "numexpr")
13489 #:phases
13490 #~(modify-phases %standard-phases
13491 (add-before 'check 'remove-local-source
13492 (lambda _
13493 (delete-file-recursively "numexpr"))))))
13494 (native-inputs
13495 (list python-pytest
13496 python-setuptools))
13497 (propagated-inputs
13498 (list python-numpy))
13499 (home-page "https://github.com/pydata/numexpr")
13500 (synopsis "Fast numerical expression evaluator for NumPy")
13501 (description
13502 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13503expressions that operate on arrays are accelerated and use less memory than
13504doing the same calculation in Python. In addition, its multi-threaded
13505capabilities can make use of all your cores, which may accelerate
13506computations, most specially if they are not memory-bounded (e.g. those using
13507transcendental functions).")
13508 (license license:expat)))
13509
13510(define-public python-cycler
13511 (package
13512 (name "python-cycler")
13513 (version "0.12.1")
13514 (source
13515 (origin
13516 (method git-fetch) ;no tests in PyPI archive
13517 (uri (git-reference
13518 (url "https://github.com/matplotlib/cycler")
13519 (commit (string-append "v" version))))
13520 (file-name (git-file-name name version))
13521 (sha256
13522 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13523 (build-system pyproject-build-system)
13524 (native-inputs
13525 (list python-pytest
13526 python-setuptools))
13527 (home-page "https://matplotlib.org/cycler/")
13528 (synopsis "Composable keyword argument iterator")
13529 (description
13530 "When using @code{matplotlib} and plotting more than one line, it is
13531common to want to be able to want to be able to cycle over one or more artist
13532styles; but the plotting logic can quickly become involved.
13533To address this and enable easy cycling over arbitrary @code{kwargs}, the
13534@code{Cycler} class was developed.")
13535 (license license:bsd-3)))
13536
13537(define-public python-colorspacious
13538 (package
13539 (name "python-colorspacious")
13540 (version "1.1.2")
13541 (source
13542 (origin
13543 (method git-fetch)
13544 (uri (git-reference
13545 (url "https://github.com/njsmith/colorspacious")
13546 (commit (string-append "v" version))))
13547 (file-name (git-file-name name version))
13548 (sha256
13549 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13550 (build-system pyproject-build-system)
13551 (arguments (list #:tests? #f)) ; No tests.
13552 (propagated-inputs (list python-numpy))
13553 (native-inputs (list python-pytest python-setuptools))
13554 (home-page "https://github.com/njsmith/colorspacious")
13555 (synopsis "Python library for colorspace conversions")
13556 (description
13557 "@code{colorspacious} is a Python library that lets you convert between
13558colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13559 (license license:expat)))
13560
13561(define-public python-propcache
13562 (package
13563 (name "python-propcache")
13564 (version "0.2.1")
13565 (source
13566 (origin
13567 (method url-fetch)
13568 (uri (pypi-uri "propcache" version))
13569 (sha256
13570 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13571 (build-system pyproject-build-system)
13572 (arguments
13573 (list
13574 #:test-flags
13575 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13576 "--ignore=tests/test_benchmarks.py")
13577 #:phases
13578 '(modify-phases %standard-phases
13579 (add-after 'unpack 'patch-build-system
13580 (lambda _
13581 ;; XXX: I don't know how to tell it to build the extensions in
13582 ;; place.
13583 (substitute* "packaging/pep517_backend/_backend.py"
13584 (("build_inplace=False") "build_inplace=True")))))))
13585 (native-inputs
13586 (list python-cython
13587 python-expandvars
13588 python-pytest
13589 python-pytest-xdist
13590 python-setuptools
13591 python-tomli))
13592 (home-page "https://github.com/aio-libs/propcache")
13593 (synopsis "Accelerated property cache")
13594 (description "The module provides a fast implementation of cached
13595properties for Python 3.9+.")
13596 (license license:asl2.0)))
13597
13598(define-public python-proto-matcher
13599 (package
13600 (name "python-proto-matcher")
13601 (version "0.0.3")
13602 (source
13603 (origin
13604 (method git-fetch)
13605 (uri (git-reference
13606 (url "https://github.com/dayfine/proto-matcher")
13607 (commit version)))
13608 (file-name (git-file-name name version))
13609 (sha256
13610 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13611 (build-system pyproject-build-system)
13612 (native-inputs (list python-pytest python-setuptools))
13613 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13614 (propagated-inputs (list python-protobuf python-pyhamcrest))
13615 (home-page "https://github.com/dayfine/proto-matcher")
13616 (synopsis "PyHamcrest test matchers for protocol buffers")
13617 (description
13618 "This package provides the following PyHamcrest test matchers, that
13619enable matching a protocol buffer message:
13620@table @code
13621@item equals_proto
13622Test the argument equals the given protobuf message.
13623@item approximately
13624Test the argument equals the given protobuf message, while comparing any float
13625field using approximation.
13626@item ignoring_field_paths
13627Test the argument equals the given protobuf message, while ignoring those
13628fields specified in the field paths.
13629@item ignoring_repeated_field_ordering
13630Test the argument equals the given protobuf message, ignoring the ordering of
13631any repeated field.
13632@item partially
13633Test the argument partially equals the given protobuf message, i.e. if a field
13634is in the argument but not in the expected message, it's ignored in the
13635comparison.
13636@end table")
13637 (license license:asl2.0)))
13638
13639(define-public python-matplotlib
13640 (package
13641 (name "python-matplotlib")
13642 (version "3.10.9")
13643 (source
13644 (origin
13645 (method git-fetch)
13646 (uri (git-reference
13647 (url "https://github.com/matplotlib/matplotlib")
13648 (commit (string-append "v" version))))
13649 (file-name (git-file-name name version))
13650 (sha256
13651 (base32 "1mff6s0nldfgdczjrfkkg68j2sx9l7jpslbcyq0d4slhnkx1lp2g"))))
13652 (build-system pyproject-build-system)
13653 (arguments
13654 (list
13655 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13656 #:configure-flags
13657 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13658 "-Dsystem-freetype=true"
13659 "-Dsystem-qhull=true"))
13660 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13661 #:test-flags
13662 #~(list "-m" "not network"
13663 "-n" (number->string (parallel-job-count))
13664 ;; Run the installed tests, which is what we want since not
13665 ;; everything gets built in the source directory.
13666 "--pyargs" "matplotlib"
13667 "-k"
13668 (string-join
13669 (list
13670 ;; XXX: Disable all image comparison tests because we're using
13671 ;; a newer version of FreeType than matplotlib expects. This
13672 ;; leads to minor differences throughout the tests.
13673 "not image_comparison"
13674 "check_figures_equal"
13675 "png" ;disables many problematic image tests
13676 "test_figure_legend_outside"
13677 "test_ft2font_get_kerning"
13678 "test_normal_axes"
13679 "test_get_tightbbox_polar"
13680 ;; The invisible line ordering test fails due to a too short
13681 ;; timeout (see:
13682 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13683 "test_invisible_Line_rendering"
13684 ;; The determinism check test is not deterministic (see:
13685 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13686 "test_determinism_check")
13687 " and not "))
13688 #:phases
13689 #~(modify-phases %standard-phases
13690 (add-after 'unpack 'patch-commands
13691 (lambda _
13692 (substitute* "lib/matplotlib/tests/test_animation.py"
13693 (("/bin/sh") (which "sh")))))
13694 (add-after 'unpack 'patch-dlopen
13695 (lambda* (#:key inputs #:allow-other-keys)
13696 (substitute* "src/_c_internal_utils.cpp"
13697 (("libX11.so.6")
13698 (search-input-file inputs "lib/libX11.so.6")))))
13699 (add-before 'build 'configure-environment
13700 (lambda* (#:key inputs #:allow-other-keys)
13701 ;; Fix rounding errors when using the x87 FPU.
13702 (when (string-prefix? "i686" #$(%current-system))
13703 (setenv "CFLAGS" "-ffloat-store"))))
13704 (add-before 'check 'chdir
13705 (lambda _
13706 ;; Step out of the source directory to avoid interference.
13707 (chdir "/tmp"))))))
13708 (propagated-inputs
13709 (list python-contourpy
13710 python-cycler
13711 python-dateutil
13712 python-fonttools-minimal
13713 python-importlib-resources
13714 python-kiwisolver
13715 python-numpy
13716 python-packaging
13717 python-pillow
13718 python-pyparsing
13719 `(,python "tk")))
13720 (inputs
13721 (list cairo
13722 freetype
13723 glib
13724 libpng
13725 qhull
13726 tcl
13727 tk))
13728 (native-inputs
13729 (list pkg-config
13730 python-meson
13731 pybind11
13732 python-pytest
13733 python-pytest-timeout
13734 python-pytest-xdist
13735 python-setuptools
13736 python-setuptools-scm))
13737 (home-page "https://matplotlib.org/")
13738 (synopsis "2D plotting library for Python")
13739 (description
13740 "Matplotlib is a Python 2D plotting library which produces publication
13741quality figures in a variety of hardcopy formats and interactive environments
13742across platforms. Matplotlib can be used in Python scripts, the python and
13743ipython shell, web application servers, and six graphical user interface
13744toolkits.")
13745 (license license:psfl)))
13746
13747(define-public python-matplotlib-documentation
13748 (package
13749 (inherit python-matplotlib)
13750 (name "python-matplotlib-documentation")
13751 (arguments
13752 (list
13753 #:tests? #f ;we're only generating documentation
13754 #:phases
13755 #~(modify-phases %standard-phases
13756 (add-after 'unpack 'avoid-external-deps
13757 (lambda _
13758 ;; XXX: Avoid theme-switcher to avoid sphinx error
13759 ;; TemplateNotFound('theme-switcher.html')
13760 ;; XXX: Avoid version-switcher because it depends on an
13761 ;; external file, and we pack only one version anyway.
13762 (substitute* "doc/conf.py"
13763 (("\
13764\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13765 "\"navbar_end\": ["))))
13766 (replace 'build
13767 (lambda _
13768 (setenv "HOME" "/tmp")
13769 (chdir "doc")
13770 (invoke "make" "html" "info"
13771 ;; Don't abort on warnings; build in parallel.
13772 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13773 (replace 'install
13774 (lambda _
13775 (let* ((data (string-append #$output "/share"))
13776 (doc (string-append data "/doc/matplotlib"))
13777 (info (string-append data "/info"))
13778 (html (string-append doc "/html")))
13779 (mkdir-p html)
13780 (copy-recursively "build/html" html)
13781 (install-file "build/texinfo/matplotlib.info" info)
13782 ;; The "matplotlib-figures" directory contains are a subset of
13783 ;; the images produced for the html target; simply create a
13784 ;; symlink to it, saving about 11 MiB.
13785 (symlink (string-append html "/_images")
13786 (string-append info "/matplotlib-figures"))))))))
13787 ;; Move all propagated inputs to inputs. *-documentation packages are
13788 ;; expected to be installed as standalone leaf packages, and not as
13789 ;; libraries with propagated inputs.
13790 (propagated-inputs '())
13791 (inputs (append
13792 (package-inputs python-matplotlib)
13793 (package-propagated-inputs python-matplotlib)))
13794 (native-inputs
13795 (list ffmpeg ;for matplotlib animation support
13796 graphviz
13797 inkscape/pinned
13798 python-colorspacious
13799 python-ipython
13800 python-ipykernel
13801 python-ipywidgets
13802 python-matplotlib
13803 python-mpl-sphinx-theme
13804 python-numpydoc
13805 python-pyyaml
13806 python-scipy
13807 python-setuptools
13808 ;; XXX: investigate how to build using a newer version of sphinx.
13809 python-sphinx-6
13810 python-sphinx-copybutton
13811 python-sphinx-design
13812 python-sphinx-gallery
13813 python-sphinx-tags
13814 python-sphinxcontrib-svg2pdfconverter
13815 python-sphinxcontrib-video
13816 texinfo
13817 texlive-dvipng-bin
13818 (texlive-local-tree
13819 (list texlive-amsfonts
13820 texlive-amsmath
13821 texlive-babel
13822 texlive-cm-super
13823 texlive-etoolbox
13824 texlive-expdlist
13825 texlive-fontspec
13826 texlive-times
13827 texlive-type1cm
13828 texlive-underscore
13829 texlive-unicode-math))))
13830 (synopsis "Documentation for the @code{python-matplotlib} package")))
13831
13832(define-public python-matplotlib-inline
13833 (package
13834 (name "python-matplotlib-inline")
13835 (version "0.1.7")
13836 (source
13837 (origin
13838 (method url-fetch)
13839 (uri (pypi-uri "matplotlib_inline" version))
13840 (sha256
13841 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13842 (build-system pyproject-build-system)
13843 (arguments
13844 (list
13845 ;; Tests disabled because of a circular dependency with IPython.
13846 #:tests? #f
13847 #:phases
13848 #~(modify-phases %standard-phases
13849 ;; Disabled because of a circular dependency with IPython.
13850 (delete 'sanity-check))))
13851 (native-inputs
13852 (list python-setuptools))
13853 (propagated-inputs
13854 (list python-matplotlib
13855 python-traitlets))
13856 (home-page "https://github.com/ipython/matplotlib-inline")
13857 (synopsis "Inline Matplotlib backend for Jupyter")
13858 (description
13859 "This package provides a Matplotlib inline back-end for IPython and
13860Jupyter.")
13861 (license license:bsd-3)))
13862
13863(define-public python-matplotlib-venn
13864 (package
13865 (name "python-matplotlib-venn")
13866 (version "1.1.2")
13867 (source
13868 (origin
13869 (method url-fetch)
13870 (uri (pypi-uri "matplotlib-venn" version))
13871 (sha256
13872 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13873 (build-system pyproject-build-system)
13874 (native-inputs (list python-pytest
13875 python-setuptools
13876 python-shapely
13877 python-wheel))
13878 (propagated-inputs
13879 (list python-matplotlib python-numpy python-scipy))
13880 (home-page "https://github.com/konstantint/matplotlib-venn")
13881 (synopsis "Plot area-proportional Venn diagrams")
13882 (description
13883 "This package provides tools for plotting area-proportional two- and
13884three-way Venn diagrams in @code{matplotlib}.")
13885 (license license:expat)))
13886
13887(define-public python-matplotx
13888 (package
13889 (name "python-matplotx")
13890 (version "0.3.10")
13891 (source
13892 (origin
13893 (method git-fetch)
13894 (uri (git-reference
13895 (url "https://github.com/nschloe/matplotx")
13896 (commit (string-append "v" version))))
13897 (file-name (git-file-name name version))
13898 (sha256
13899 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13900 (build-system pyproject-build-system)
13901 (arguments
13902 (list
13903 #:test-flags
13904 ;; This test fails with ValueError: not enough values to unpack.
13905 #~(list "--deselect" "tests/test_spy.py::test_cli"
13906 ;; XXX: unknown failure
13907 "--deselect" "tests/test_spy.py::test_png")))
13908 (native-inputs
13909 (list python-imageio
13910 python-meshzoo
13911 python-pytest
13912 python-scipy-minimal
13913 python-setuptools
13914 python-scikit-fem))
13915 (propagated-inputs
13916 (list python-matplotlib
13917 python-numpy
13918 ;; [optional]
13919 python-networkx
13920 python-pypng
13921 python-scipy))
13922 (home-page "https://github.com/nschloe/matplotx")
13923 (synopsis "Minimal matplotlib styles")
13924 (description
13925 "This package includes some extensions for Matplotlib to create clean
13926plots with a minimalistic style.")
13927 (license license:expat)))
13928
13929(define-public python-cplot
13930 (package
13931 (name "python-cplot")
13932 (version "0.9.3")
13933 (source
13934 (origin
13935 (method git-fetch)
13936 (uri (git-reference
13937 (url "https://github.com/nschloe/cplot")
13938 (commit (string-append "v" version))))
13939 (file-name (git-file-name name version))
13940 (sha256
13941 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13942 (build-system pyproject-build-system)
13943 (native-inputs
13944 (list python-pytest
13945 python-setuptools))
13946 (propagated-inputs
13947 (list python-matplotlib
13948 python-matplotx
13949 python-npx
13950 python-numpy))
13951 (home-page "https://github.com/nschloe/cplot")
13952 (synopsis "Plot complex-valued functions")
13953 (description "@code{cplot} is a Python library for plotting
13954complex-valued functions.")
13955 (license license:gpl3+)))
13956
13957(define-public python-cppheaderparser
13958 (package
13959 (name "python-cppheaderparser")
13960 (version "2.7.4")
13961 (source
13962 (origin
13963 (method url-fetch)
13964 (uri (pypi-uri "CppHeaderParser" version))
13965 (sha256
13966 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13967 (build-system pyproject-build-system)
13968 (arguments
13969 (list
13970 #:tests? #f)) ; no tests
13971 (propagated-inputs (list python-ply))
13972 (native-inputs (list python-setuptools python-wheel))
13973 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13974 (synopsis
13975 "Parse C++ header files and generate a data structure representing the class")
13976 (description
13977 "CppHeaderParser is a pure python module that will parse C++ header files
13978and generate a data structure representing the class.")
13979 (license license:bsd-3)))
13980
13981(define-public python-cppy
13982 (package
13983 (name "python-cppy")
13984 (version "1.3.1")
13985 (source
13986 (origin
13987 (method git-fetch)
13988 (uri (git-reference
13989 (url "https://github.com/nucleic/cppy")
13990 (commit version)))
13991 (file-name (git-file-name name version))
13992 (sha256
13993 (base32 "16g0f9kjyybmlxy9w5bbxm98g7wqhcvh4pw77r0jk3dgd11lkvzy"))))
13994 (build-system pyproject-build-system)
13995 (arguments
13996 (list #:tests? #f)) ;there is just one test coping include directory
13997 (native-inputs
13998 (list python-setuptools
13999 python-setuptools-scm))
14000 (home-page "https://github.com/nucleic/cppy")
14001 (synopsis "C++ header library for Python extension modules")
14002 (description "This package is a small C++ header library which makes it
14003easier to write Python extension modules. The primary feature is a
14004@code{PyObject} smart pointer which automatically handles reference counting
14005and provides convenience methods for performing common object operations.")
14006 (license license:bsd-3)))
14007
14008(define-public python-perfplot
14009 (package
14010 (name "python-perfplot")
14011 (version "0.10.2")
14012 (source
14013 (origin
14014 (method git-fetch)
14015 (uri (git-reference
14016 (url "https://github.com/nschloe/perfplot")
14017 (commit (string-append "v" version))))
14018 (file-name (git-file-name name version))
14019 (sha256
14020 (base32 "1j73m8v9l8bhf79qa9apj6lcw1afxbvdq4mrn0yb31541dhrxvkf"))))
14021 (build-system pyproject-build-system)
14022 (native-inputs
14023 (list python-flit-core
14024 python-pytest))
14025 (propagated-inputs
14026 (list python-matplotlib
14027 python-matplotx
14028 python-numpy
14029 python-rich))
14030 (home-page "https://github.com/nschloe/perfplot")
14031 (synopsis "Performance plots for Python code snippets")
14032 (description "@code{perfplot} extends Python's timeit by testing
14033snippets with input parameters (e.g., the size of an array) and plotting
14034the results.")
14035 (license license:gpl3+)))
14036
14037(define-public python-persist-queue
14038 (package
14039 (name "python-persist-queue")
14040 (version "1.1.0")
14041 (source
14042 (origin
14043 (method git-fetch)
14044 (uri (git-reference
14045 (url "https://github.com/peter-wangxu/persist-queue")
14046 (commit (string-append "v" version))))
14047 (file-name (git-file-name name version))
14048 (sha256
14049 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
14050 (build-system pyproject-build-system)
14051 (native-inputs
14052 (list python-pytest
14053 python-pytest-asyncio
14054 python-setuptools))
14055 (propagated-inputs
14056 (list python-aiofiles
14057 python-aiosqlite
14058 python-cbor2
14059 python-dbutils
14060 python-msgpack))
14061 (home-page "https://github.com/peter-wangxu/persist-queue")
14062 (synopsis "Thread-safe disk based persistent queue in Python")
14063 (description
14064 "This package provides a thread-safe disk (file and sqlite) based
14065persistent queue in Python.")
14066 (license license:bsd-3)))
14067
14068(define-public python-pycodestyle
14069 (package
14070 (name "python-pycodestyle")
14071 (version "2.14.0")
14072 (source
14073 (origin
14074 (method url-fetch) ;git has no the same version tag as PyPI
14075 (uri (pypi-uri "pycodestyle" version))
14076 (sha256
14077 (base32 "10xpcy8m54cvnk4a37j4cwrjl9lprlcwkpmbs3wry23qs8bvbdf4"))))
14078 (build-system pyproject-build-system)
14079 (arguments
14080 (list
14081 #:test-backend #~'custom
14082 #:test-flags
14083 ;; Taken from Tox config
14084 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
14085 #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")))
14086 (native-inputs
14087 (list python-setuptools))
14088 (home-page "https://pycodestyle.readthedocs.io/")
14089 (synopsis "Python style guide checker")
14090 (description "@code{pycodestyle} (formerly pep8) is a tool to check
14091Python code against some of the style conventions in
14092@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
14093 (license license:expat)))
14094
14095(define-public python-pycollada
14096 (package
14097 (name "python-pycollada")
14098 (version "0.9.2")
14099 (source
14100 (origin
14101 (method git-fetch)
14102 (uri (git-reference
14103 (url "https://github.com/pycollada/pycollada")
14104 (commit (string-append "v" version))))
14105 (file-name (git-file-name name version))
14106 (sha256
14107 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
14108 (build-system pyproject-build-system)
14109 (native-inputs
14110 (list python-pytest
14111 python-setuptools))
14112 (propagated-inputs
14113 (list python-numpy
14114 python-dateutil))
14115 (home-page "https://pycollada.readthedocs.io")
14116 (synopsis "Reading and writing collada documents library")
14117 (description
14118 "This package implements a functionality for creating, editing and
14119loading @url{https://www.khronos.org/collada/,COLLADA},which is a
14120COLLAborative Design Activity for establishing an interchange file format for
14121interactive 3D applications.
14122
14123The library allows you to load a COLLADA file and interact with it as a python
14124object. In addition, it supports creating a collada python object from
14125scratch, as well as in-place editing.")
14126 (license license:bsd-3)))
14127
14128(define-public python-pyct
14129 (package
14130 (name "python-pyct")
14131 (version "0.5.0")
14132 (source
14133 (origin
14134 (method url-fetch)
14135 (uri (pypi-uri "pyct" version))
14136 (sha256
14137 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
14138 (build-system pyproject-build-system)
14139 (arguments
14140 (list
14141 #:test-flags
14142 ;; These tests want to download example data from the internet.
14143 '(list "-k" (string-append
14144 "not test_examples_with_use_test_data"
14145 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
14146 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
14147 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
14148 (propagated-inputs (list python-param python-pyyaml))
14149 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
14150 (home-page "https://github.com/holoviz-dev/pyct")
14151 (synopsis "Common packaging tasks")
14152 (description
14153 "This Python package provides utilities to run common packaging tasks,
14154e.g. copy examples, fetch data, etc.")
14155 (license license:bsd-3)))
14156
14157(define-public python-multidict
14158 (package
14159 (name "python-multidict")
14160 (version "6.7.0")
14161 (source
14162 (origin
14163 (method git-fetch)
14164 (uri (git-reference
14165 (url "https://github.com/aio-libs/multidict/")
14166 (commit (string-append "v" version))))
14167 (file-name (git-file-name name version))
14168 (sha256
14169 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
14170 (build-system pyproject-build-system)
14171 (arguments
14172 (list
14173 ;; tests: 1395 passed
14174 #:test-flags
14175 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
14176 "--ignore-glob=tests/test_*_benchmarks.py")))
14177 (native-inputs
14178 (list python-objgraph
14179 python-psutil
14180 python-pytest
14181 python-setuptools))
14182 (home-page "https://github.com/aio-libs/multidict/")
14183 (synopsis "Multidict implementation")
14184 (description
14185 "Multidict is dict-like collection of key-value pairs where key might be
14186occurred more than once in the container.")
14187 (license license:asl2.0)))
14188
14189(define-public python-orderedmultidict
14190 (package
14191 (name "python-orderedmultidict")
14192 (version "1.0.1")
14193 (source
14194 (origin
14195 (method url-fetch)
14196 (uri (pypi-uri "orderedmultidict" version))
14197 (sha256
14198 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
14199 (build-system pyproject-build-system)
14200 (propagated-inputs
14201 (list python-six))
14202 (native-inputs
14203 (list python-pytest
14204 python-setuptools))
14205 (home-page "https://github.com/gruns/orderedmultidict")
14206 (synopsis "Python Ordered Multivalue Dictionary - omdict")
14207 (description "This package contains a library for ordered multivalue
14208dictionaries. A multivalue dictionary is a dictionary that can store
14209multiple values for the same key. An ordered multivalue dictionary is a
14210multivalue dictionary that retains the order of insertions and deletions.")
14211 (license license:unlicense)))
14212
14213(define-public python-autopage
14214 (package
14215 (name "python-autopage")
14216 (version "0.5.1")
14217 (source (origin
14218 (method url-fetch)
14219 (uri (pypi-uri "autopage" version))
14220 (sha256
14221 (base32
14222 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
14223 (build-system pyproject-build-system)
14224 (arguments
14225 (list
14226 #:phases
14227 #~(modify-phases %standard-phases
14228 (add-before 'check 'disable-e2e-tests
14229 (lambda _
14230 ;; These tests rely on KeyboardInterrupts which do not
14231 ;; work in the build container.
14232 (delete-file "autopage/tests/test_end_to_end.py"))))))
14233 (native-inputs
14234 (list python-pypa-build
14235 python-setuptools
14236 python-wheel
14237 ;; For tests.
14238 python-fixtures
14239 python-pytest
14240 python-testtools))
14241 (home-page "https://github.com/zaneb/autopage")
14242 (synopsis "Automatic paging for console output")
14243 (description
14244 "Autopage is a Python library to automatically display terminal output
14245from a program in a @dfn{pager} such as @command{less}.")
14246 (license license:asl2.0)))
14247
14248(define-public python-dirty-equals
14249 (package
14250 (name "python-dirty-equals")
14251 (version "0.11.0")
14252 (source
14253 (origin
14254 (method git-fetch)
14255 (uri (git-reference
14256 (url "https://github.com/samuelcolvin/dirty-equals")
14257 (commit (string-append "v" version))))
14258 (file-name (git-file-name name version))
14259 (sha256
14260 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
14261 (build-system pyproject-build-system)
14262 ;; tests: 551 passed, 60 skipped
14263 (native-inputs
14264 (list python-hatchling
14265 python-pydantic
14266 python-pytest
14267 python-pytest-examples
14268 tzdata-for-tests))
14269 (home-page "https://dirty-equals.helpmanual.io/")
14270 (synopsis "Do dirty (but useful) things with equals")
14271 (description
14272 "@code{dirty-equals} is a Python library that (mis)uses the
14273@code{__eq__} method to make code (generally unit tests) more declarative
14274and therefore easier to read and write.")
14275 (license license:expat)))
14276
14277(define-public python-dirty-equals-bootstrap
14278 (hidden-package
14279 (package
14280 (inherit python-dirty-equals)
14281 (name "python-dirty-equals-bootstrap")
14282 (arguments
14283 (list #:tests? #f))
14284 (native-inputs
14285 (list python-hatchling)))))
14286
14287(define-public python-distutils-extra
14288 (package
14289 (name "python-distutils-extra")
14290 (version "2.38")
14291 (source
14292 (origin
14293 (method url-fetch)
14294 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
14295 version "/+download/python-distutils-extra-"
14296 version ".tar.gz"))
14297 (sha256
14298 (base32
14299 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
14300 (build-system pyproject-build-system)
14301 (arguments
14302 (list #:tests? #f)) ;tests are outdated and broken
14303 (native-inputs (list python-setuptools python-wheel))
14304 (home-page "https://launchpad.net/python-distutils-extra/")
14305 (synopsis "Enhancements to Python's distutils")
14306 (description
14307 "The python-distutils-extra module enables you to easily integrate
14308gettext support, themed icons, and scrollkeeper-based documentation into
14309Python's distutils.")
14310 (license license:gpl2)))
14311
14312(define-public python-olefile
14313 (package
14314 (name "python-olefile")
14315 (version "0.47")
14316 (source
14317 (origin
14318 (method git-fetch)
14319 (uri (git-reference
14320 (url "https://github.com/decalage2/olefile")
14321 (commit (string-append "v" version))))
14322 (file-name (git-file-name name version))
14323 (sha256
14324 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
14325 (build-system pyproject-build-system)
14326 (native-inputs
14327 (list python-pytest
14328 python-setuptools))
14329 (home-page "https://www.decalage.info/python/olefileio")
14330 (synopsis "Read and write Microsoft OLE2 files")
14331 (description
14332 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
14333Storage or Compound Document, Microsoft Office). It is an improved version of
14334the OleFileIO module from PIL, the Python Image Library.")
14335 (license license:bsd-3)))
14336
14337(define-public python-property-cached
14338 (package
14339 (name "python-property-cached")
14340 (version "1.6.4")
14341 (source
14342 (origin
14343 (method url-fetch)
14344 (uri (pypi-uri "property-cached" version ".zip"))
14345 (sha256
14346 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
14347 (patches
14348 (search-patches "python-property-cached-asyncio-3_11.patch"))))
14349 (build-system pyproject-build-system)
14350 (arguments
14351 (list
14352 ;; AssertionError.
14353 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
14354 (native-inputs (list python-freezegun python-pytest unzip
14355 python-setuptools python-wheel))
14356 (home-page "https://github.com/althonos/property-cached/")
14357 (synopsis "Decorator for caching properties in classes")
14358 (description "This package provides a decorator for caching properties in
14359classes. It is forked from @code{cached-property}.")
14360 (license license:bsd-3)))
14361
14362(define-public python-pdf2image
14363 (package
14364 (name "python-pdf2image")
14365 (version "1.17.0")
14366 (source
14367 (origin
14368 (method git-fetch)
14369 (uri (git-reference
14370 (url "https://github.com/Belval/pdf2image")
14371 (commit (string-append "v" version))))
14372 (file-name (git-file-name name version))
14373 (sha256
14374 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
14375 (build-system pyproject-build-system)
14376 (arguments
14377 (list
14378 ;; The following excluded tests assume hardcoded binary paths to
14379 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
14380 #:test-flags
14381 #~(list "--exclude=^test_use_poppler_path$"
14382 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
14383 (propagated-inputs (list python-pillow))
14384 (inputs (list poppler))
14385 (native-inputs (list python-pynose which python-setuptools))
14386 (home-page "https://github.com/Belval/pdf2image")
14387 (synopsis
14388 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
14389 (description
14390 "This package provides a Python API wrapping the @command{pdftoppm} and
14391@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
14392Python list with elements of type @code{PIL.Image} (from the
14393@code{python-pillow} library).")
14394 (license license:expat)))
14395
14396(define-public python-pikepdf
14397 (package
14398 (name "python-pikepdf")
14399 (version "8.15.1")
14400 (source
14401 (origin
14402 (method git-fetch)
14403 (uri (git-reference
14404 (url "https://github.com/pikepdf/pikepdf")
14405 (commit (string-append "v" version))))
14406 (file-name (git-file-name name version))
14407 (sha256
14408 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
14409 (build-system pyproject-build-system)
14410 (native-inputs
14411 (list pybind11-2
14412 python-attrs
14413 python-hypothesis
14414 python-setuptools-scm
14415 python-psutil
14416 python-pytest
14417 python-pytest-timeout
14418 python-pytest-xdist
14419 python-dateutil
14420 python-xmp-toolkit
14421 python-tomli
14422 python-setuptools))
14423 (inputs
14424 (list qpdf))
14425 (propagated-inputs
14426 (list python-deprecated python-lxml python-packaging python-pillow))
14427 (home-page "https://github.com/pikepdf/pikepdf")
14428 (synopsis "Read and write PDFs with Python")
14429 (description
14430 "pikepdf is a Python library for reading and writing PDF files.")
14431 (license license:mpl2.0)))
14432
14433(define-public python-pillow
14434 (package
14435 (name "python-pillow")
14436 (version "12.2.0")
14437 (source
14438 (origin
14439 (method git-fetch)
14440 (uri (git-reference
14441 (url "https://github.com/python-pillow/Pillow")
14442 (commit version)))
14443 (file-name (git-file-name name version))
14444 (sha256
14445 (base32 "140ynzxpazq6gq041bhkzx314z4kkzv3wlmvph68a0nkj9nqa3pg"))))
14446 (build-system pyproject-build-system)
14447 (arguments
14448 (list
14449 #:phases
14450 #~(modify-phases %standard-phases
14451 (add-after 'unpack 'patch-ldconfig
14452 (lambda _
14453 (substitute* "setup.py"
14454 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14455 (replace 'check
14456 (lambda* (#:key tests? #:allow-other-keys)
14457 (when tests?
14458 (setenv "HOME" (getcwd))
14459 (invoke "python" "selftest.py" "--installed")
14460 (invoke "python" "-m" "pytest" "-vv")))))))
14461 (native-inputs (list pybind11
14462 python-defusedxml
14463 python-markdown2
14464 python-olefile
14465 python-pytest
14466 python-setuptools
14467 python-trove-classifiers))
14468 (inputs (list freetype
14469 lcms
14470 libjpeg-turbo
14471 libtiff
14472 libwebp
14473 openjpeg
14474 zlib))
14475 (home-page "https://python-pillow.github.io/")
14476 (synopsis "Fork of the Python Imaging Library")
14477 (description
14478 "The Python Imaging Library adds image processing capabilities to your
14479Python interpreter. This library provides extensive file format support, an
14480efficient internal representation, and fairly powerful image processing
14481capabilities. The core image library is designed for fast access to data
14482stored in a few basic pixel formats. It should provide a solid foundation for
14483a general image processing tool.")
14484 (properties `((cpe-name . "pillow")))
14485 (license (license:x11-style
14486 "https://github.com/python-pillow/Pillow/blob/12.2.0/LICENSE"
14487 "MIT-CMU License"))))
14488
14489(define-public python-pillow-avif-plugin
14490 (package
14491 (name "python-pillow-avif-plugin")
14492 (version "1.5.5")
14493 (source
14494 (origin
14495 (method git-fetch)
14496 (uri (git-reference
14497 (url "https://github.com/fdintino/pillow-avif-plugin/")
14498 (commit (string-append "v" version))))
14499 (file-name (git-file-name name version))
14500 (sha256
14501 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14502 (build-system pyproject-build-system)
14503 (propagated-inputs (list python-requests))
14504 (native-inputs (list python-packaging
14505 python-pillow
14506 python-pytest
14507 python-setuptools))
14508 (inputs (list libavif))
14509 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14510 (synopsis "Pillow plugin that adds avif support via libavif")
14511 (description
14512 "This package provides a pillow plugin that adds avif support via
14513libavif.")
14514 (license license:expat)))
14515
14516(define-public python-pillow-heif
14517 (package
14518 (name "python-pillow-heif")
14519 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14520 ;; commit is taken from the master branch.
14521 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14522 (revision . "0")))
14523 (version (git-version "1.3.0"
14524 (assoc-ref properties 'revision)
14525 (assoc-ref properties 'commit)))
14526 (source
14527 (origin
14528 (method git-fetch)
14529 (uri (git-reference
14530 (url "https://github.com/bigcat88/pillow_heif")
14531 (commit (assoc-ref properties 'commit))))
14532 (file-name (git-file-name name version))
14533 (sha256
14534 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14535 (build-system pyproject-build-system)
14536 (inputs (list libheif))
14537 (propagated-inputs (list python-pillow))
14538 (native-inputs (list opencv ; for opencv-python
14539 python-defusedxml
14540 python-numpy
14541 python-packaging
14542 python-pympler
14543 python-pytest
14544 python-setuptools))
14545 (home-page "https://github.com/bigcat88/pillow_heif")
14546 (synopsis "Python interface for libheif library")
14547 (description "This package provides Python bindings for the libheif library
14548and a plugin for Pillow.")
14549 (license license:bsd-3)))
14550
14551(define-public python-pillow-jxl-plugin
14552 (package
14553 (name "python-pillow-jxl-plugin")
14554 (version "1.3.7")
14555 (source
14556 (origin
14557 (method git-fetch)
14558 (uri (git-reference
14559 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14560 (commit (string-append "v" version))))
14561 (file-name (git-file-name name version))
14562 (sha256
14563 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14564 (build-system pyproject-build-system)
14565 (arguments
14566 (list
14567 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14568 ;; in Guix.
14569 #:tests? #f
14570 #:imported-modules `(,@%cargo-build-system-modules
14571 ,@%pyproject-build-system-modules)
14572 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14573 (guix build pyproject-build-system)
14574 (guix build utils))
14575 #:phases
14576 #~(modify-phases %standard-phases
14577 (add-after 'unpack 'prepare-cargo-build-system
14578 (lambda args
14579 (for-each (lambda (phase)
14580 (format #t "Running cargo phase: ~a~%" phase)
14581 (apply (assoc-ref cargo:%standard-phases phase)
14582 #:cargo-target #$(cargo-triplet)
14583 args))
14584 '(unpack-rust-crates
14585 configure
14586 check-for-pregenerated-files
14587 patch-cargo-checksums))))
14588 (add-after 'unpack 'patch-pyproject
14589 (lambda _
14590 ;; maturin failed to parse pyproject.toml.
14591 (substitute* "pyproject.toml"
14592 (("^license-files = .*") "")))))))
14593 (propagated-inputs (list python-brotli
14594 python-packaging
14595 python-pillow))
14596 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14597 (native-inputs (list maturin
14598 python-numpy
14599 python-pytest
14600 rust
14601 `(,rust "cargo")))
14602 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14603 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14604 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14605 (description "This package provides pillow plugin for JPEG-XL, using Rust
14606for bindings.")
14607 (license license:gpl3+)))
14608
14609(define-public python-jxlpy
14610 (package
14611 (name "python-jxlpy")
14612 (version "0.9.5")
14613 (source
14614 (origin
14615 (method git-fetch)
14616 (uri (git-reference
14617 (url "https://github.com/olokelo/jxlpy")
14618 (commit version)))
14619 (file-name (git-file-name name version))
14620 (sha256
14621 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14622 (build-system pyproject-build-system)
14623 (arguments (list #:tests? #f)) ; no tests, just examples
14624 (inputs (list libjxl))
14625 (propagated-inputs (list python-cython))
14626 (native-inputs (list python-cython python-setuptools))
14627 (home-page "https://github.com/olokelo/jxlpy")
14628 (synopsis "JPEG XL integration in Python")
14629 (description "This package provides Cython-based Python bindings for
14630libjxl, as well as a pillow plugin.")
14631 (license license:expat)))
14632
14633(define-public python-pixelmatch
14634 (package
14635 (name "python-pixelmatch")
14636 (version "0.3.0")
14637 (source
14638 (origin
14639 (method git-fetch)
14640 (uri (git-reference
14641 (url "https://github.com/whtsky/pixelmatch-py")
14642 (commit (string-append "v" version))))
14643 (file-name (git-file-name name version))
14644 (sha256
14645 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14646 (build-system pyproject-build-system)
14647 (arguments
14648 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14649 (list #:tests? #f))
14650 (native-inputs
14651 (list python-poetry-core
14652 python-pillow
14653 python-pytest
14654 python-pytest-benchmark))
14655 (home-page "https://github.com/whtsky/pixelmatch-py")
14656 (synopsis "Pixel-level image comparison library")
14657 (description
14658 "This package provides a pixel-level image comparison library for Python,
14659originally created to compare screenshots in tests. Its features include
14660accurate anti-aliased pixels detection and perceptual color difference
14661metrics.")
14662 (license license:isc)))
14663
14664(define-public python-imagecodecs
14665 (package
14666 (name "python-imagecodecs")
14667 (version "2025.8.2")
14668 (source
14669 (origin
14670 (method url-fetch)
14671 (uri (pypi-uri "imagecodecs" version))
14672 (sha256
14673 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14674 (modules '((guix build utils)))
14675 (snippet #~(for-each delete-file
14676 ;; Delete pre-generated Cython files.
14677 (find-files "imagecodecs" "_.*\\.c$")))))
14678 (build-system pyproject-build-system)
14679 (arguments
14680 (list
14681 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14682 #:test-flags
14683 ;; Some of those tests are flaky.
14684 #~(list "-k" "not test_cms_identity_transforms")
14685 #:phases
14686 #~(modify-phases %standard-phases
14687 (add-after 'unpack 'create-configuration
14688 (lambda _
14689 ;; By default everything is enabled. We can selectively disable
14690 ;; extensions (and thus dependencies) by deleting them from the
14691 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14692 (call-with-output-file "imagecodecs_distributor_setup.py"
14693 (lambda (port)
14694 (format port "\
14695def customize_build(EXTENSIONS, OPTIONS):
14696~{ del EXTENSIONS[~s]~%~}~%"
14697 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14698 ;; Those rely on unpackaged inputs.
14699 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14700 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14701 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14702 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14703 "zlibng" "zopfli"))))))
14704 (add-after 'unpack 'fix-sanity-check
14705 (lambda _
14706 ;; XXX: Don't exit twice. The generated script already does that.
14707 (substitute* "imagecodecs/__main__.py"
14708 (("sys\\.exit\\(main\\(\\)\\)")
14709 ""))))
14710 (add-before 'check 'configure-tests
14711 (lambda _
14712 (setenv "HOME" (getcwd)))))))
14713 (inputs
14714 (list brotli
14715 c-blosc
14716 c-blosc2
14717 giflib
14718 lcms
14719 libheif
14720 libjpeg-turbo
14721 libpng
14722 libtiff
14723 libwebp
14724 lz4
14725 lzfse
14726 snappy
14727 xz
14728 zlib
14729 `(,zstd "lib")))
14730 (propagated-inputs
14731 (list python-numpy python-matplotlib python-tifffile))
14732 (native-inputs
14733 (list python-cython python-pytest python-setuptools))
14734 (home-page "https://www.lfd.uci.edu/~gohlke/")
14735 (synopsis "Image transformation, compression, and decompression codecs")
14736 (description
14737 "Imagecodecs is a Python library that provides block-oriented, in-memory
14738buffer transformation, compression, and decompression functions for use in the
14739tifffile, czifile, and other scientific image input/output modules.")
14740 (license license:bsd-3)))
14741
14742(define-public python-property-manager
14743 (package
14744 (name "python-property-manager")
14745 (version "3.0")
14746 (source
14747 (origin
14748 (method git-fetch)
14749 (uri (git-reference
14750 (url "https://github.com/xolox/python-property-manager")
14751 (commit version)))
14752 (file-name (git-file-name name version))
14753 (sha256
14754 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14755 (build-system pyproject-build-system)
14756 (native-inputs (list python-pytest python-setuptools))
14757 (propagated-inputs
14758 (list python-verboselogs
14759 python-humanfriendly
14760 python-coloredlogs))
14761 (home-page "https://github.com/xolox/python-property-manager")
14762 (synopsis "Useful property variants for Python programming")
14763 (description
14764 "The @code{property-manager} package defines several custom property
14765variants for Python programming including required properties,writable
14766properties, cached properties, etc.")
14767 (license license:expat)))
14768
14769(define-public python-executing
14770 (package
14771 (name "python-executing")
14772 (version "2.2.0")
14773 (source
14774 (origin
14775 (method url-fetch)
14776 (uri (pypi-uri "executing" version))
14777 (sha256
14778 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14779 (build-system pyproject-build-system)
14780 (arguments
14781 (list
14782 #:test-flags
14783 ;; Test needs IPython
14784 #~(list "-k" "not test_two_statement_lookups")
14785 #:phases
14786 #~(modify-phases %standard-phases
14787 (add-after 'unpack 'fix-tests
14788 (lambda _
14789 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14790 (substitute* "pyproject.toml"
14791 (("ignore_missing_imports = true.*")
14792 "ignore_missing_imports = true
14793
14794[tool.pytest.ini_options]
14795python_functions = \"test_\"\n")))))))
14796 (native-inputs
14797 (list python-asttokens
14798 python-littleutils
14799 python-pytest
14800 python-rich
14801 python-setuptools
14802 python-setuptools-scm
14803 python-wheel))
14804 (home-page "https://github.com/alexmojaki/executing")
14805 (synopsis "Get information about what a Python frame is currently doing")
14806 (description "This package lets you get information about what a frame is
14807currently doing, particularly the AST node being executed.")
14808 (license license:expat)))
14809
14810(define-public python-executor
14811 (package
14812 (name "python-executor")
14813 (version "23.2")
14814 (source
14815 (origin
14816 (method git-fetch)
14817 (uri (git-reference
14818 (url "https://github.com/xolox/python-executor")
14819 (commit version)))
14820 (file-name (git-file-name name version))
14821 (sha256
14822 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14823 (build-system pyproject-build-system)
14824 (arguments
14825 (list #:tests? #f)) ;TODO: tests require root/sudo
14826 (native-inputs (list python-mock python-pytest python-setuptools))
14827 (propagated-inputs
14828 (list python-six
14829 python-property-manager
14830 python-fasteners
14831 python-virtualenv))
14832 (home-page "https://github.com/xolox/python-executor")
14833 (synopsis "Programmer friendly subprocess wrapper")
14834 (description
14835 "The @code{executor} package is a simple wrapper for Python’s subprocess
14836module that makes it very easy to handle subprocesses on UNIX systems with
14837proper escaping of arguments and error checking currently doing, particularly
14838the AST node being executed.")
14839 (license license:expat)))
14840
14841(define-public python-roifile
14842 (package
14843 (name "python-roifile")
14844 (version "2025.5.10")
14845 (source
14846 (origin
14847 (method url-fetch)
14848 (uri (pypi-uri "roifile" version))
14849 (sha256
14850 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14851 (build-system pyproject-build-system)
14852 (arguments (list #:tests? #f)) ; There are none.
14853 (native-inputs (list python-setuptools))
14854 (propagated-inputs (list python-numpy))
14855 (home-page "https://www.lfd.uci.edu/~gohlke/")
14856 (synopsis "Read and write ImageJ ROI format")
14857 (description "Roifile is a Python library to read, write, create, and plot
14858ImageJ ROIs, an undocumented and ImageJ application specific format to store
14859regions of interest, geometric shapes, paths, text, etc for image overlays.")
14860 (license license:bsd-3)))
14861
14862(define-public python-lfdfiles
14863 (package
14864 (name "python-lfdfiles")
14865 (version "2026.4.30")
14866 (source
14867 (origin
14868 (method url-fetch)
14869 (uri (pypi-uri "lfdfiles" version))
14870 (sha256
14871 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14872 (modules '((guix build utils)))
14873 (snippet
14874 ;; Delete pre-generated Cython files.
14875 #~(begin
14876 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14877 (delete-file "lfdfiles/conftest.py")))))
14878 (build-system pyproject-build-system)
14879 (arguments
14880 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14881 (list #:tests? #f))
14882 (native-inputs (list python-setuptools))
14883 (propagated-inputs (list python-click python-numpy python-tifffile))
14884 (home-page "https://www.lfd.uci.edu/~gohlke/")
14885 (synopsis "Work with LFD data files")
14886 (description
14887 "Lfdfiles is a Python library and console script for reading, writing,
14888converting, and viewing many of the proprietary file formats used to store
14889experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14890 (license license:bsd-3)))
14891
14892;; ~8Mo of test files.
14893(define python-av-testdata
14894 (file-union
14895 "python-av-testdata"
14896 (cons*
14897 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14898 `(,(string-append "pyav-curated/" file)
14899 ,(origin
14900 (method url-fetch)
14901 (uri (string-append "https://pyav.org/datasets/" file))
14902 (sha256
14903 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14904 (map
14905 (match-lambda
14906 ((file . hash)
14907 (list (string-append "fate-suite/" file)
14908 (origin
14909 (method url-fetch)
14910 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14911 (sha256 (base32 hash))))))
14912 '(("aac/latm_stereo_to_51.ts" .
14913 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14914 ("h264/extradata-reload-multi-stsd.mov" .
14915 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14916 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14917 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14918 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14919 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14920 ("h264/interlaced_crop.mp4" .
14921 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14922 ("hap/HAPQA_NoSnappy_127x1.mov" .
14923 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14924 ("mkv/codec_delay_opus.mkv" .
14925 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14926 ("mov/displaymatrix.mov" .
14927 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14928 ("mov/mov-1elist-ends-last-bframe.mov" .
14929 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14930 ("mov/white_zombie_scrunch-part.mov" .
14931 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14932 ("mpeg2/mpeg2_field_encoding.ts" .
14933 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14934 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14935 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14936 ("mxf/track_01_v02.mxf" .
14937 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14938 ("png1/55c99e750a5fd6_50314226.png" .
14939 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14940 ("qtrle/aletrek-rle.mov" .
14941 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14942 ("sub/MovText_capability_tester.mp4" .
14943 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14944 ("sub/vobsub.sub" .
14945 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14946
14947(define-public python-av
14948 (package
14949 (name "python-av")
14950 (version "16.0.1")
14951 (source
14952 (origin
14953 (method url-fetch)
14954 (uri (pypi-uri "av" version))
14955 (sha256
14956 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14957 (build-system pyproject-build-system)
14958 (arguments
14959 (list
14960 ;; Upstream is not great in responding to open issues or change requests.
14961 ;; See:
14962 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14963 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14964 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14965 #:test-flags
14966 ;; Writing to custom IO requires network access.
14967 #~(list "-k" "not test_writing_to_custom_io_dash")
14968 #:phases
14969 #~(modify-phases %standard-phases
14970 (add-before 'check 'pre-check
14971 (lambda _
14972 ;; This would otherwise interfere with finding the installed
14973 ;; av when running tests.
14974 (delete-file-recursively "av")
14975 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14976 (substitute* "tests/common.py"
14977 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14978 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14979 (native-inputs
14980 (list pkg-config
14981 python-cython
14982 python-numpy
14983 python-pillow
14984 python-pytest
14985 python-setuptools))
14986 (inputs (list ffmpeg))
14987 (home-page "https://github.com/PyAV-Org/PyAV")
14988 (synopsis "Pythonic bindings for FFmpeg's libraries")
14989 (description
14990 "PyAV is a Python library that allows for direct and precise manipulation
14991of media through containers, streams, packets, codecs, and frames. It provides
14992access to the powerful FFmpeg libraries while managing the complex details as
14993much as possible.
14994PyAV also facilitates data transformation and integration with
14995other packages such as Numpy and Pillow. However, working with media is a
14996challenging task and PyAV cannot abstract it away or make all the best decisions
14997for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14998be necessary. Nonetheless, PyAV is an essential tool when working with media
14999that requires its specific capabilities.")
15000 (license license:bsd-3)))
15001
15002(define-public python-ffmpeg-python
15003 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
15004 (package
15005 (name "python-ffmpeg-python")
15006 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
15007 (revision . "0")))
15008 (version (git-version "0.2.0"
15009 (assoc-ref properties 'revision)
15010 (assoc-ref properties 'commit)))
15011 (source
15012 (origin
15013 (method git-fetch)
15014 (uri (git-reference
15015 (url "https://github.com/kkroening/ffmpeg-python.git")
15016 (commit (assoc-ref properties 'commit))))
15017 (file-name (git-file-name name version))
15018 (sha256
15019 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
15020 (build-system pyproject-build-system)
15021 (arguments
15022 (list
15023 #:test-flags
15024 #~(list "-k" "not test_pipe and not test__probe")
15025 #:phases
15026 #~(modify-phases %standard-phases
15027 (add-after 'unpack 'hardcode-ffmpeg
15028 (lambda* (#:key inputs #:allow-other-keys)
15029 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
15030 (substitute* "ffmpeg/_run.py"
15031 (("cmd='ffmpeg'")
15032 (string-append "cmd='" ffmpeg "'")))
15033 (substitute* "ffmpeg/tests/test_ffmpeg.py"
15034 (("out_file.compile\\(\\) == \\['ffmpeg'")
15035 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
15036 (inputs (list ffmpeg))
15037 (propagated-inputs (list python-future))
15038 (native-inputs (list python-future
15039 python-numpy
15040 python-pytest
15041 python-pytest-mock
15042 python-setuptools))
15043 (home-page "https://github.com/kkroening/ffmpeg-python")
15044 (synopsis "Python bindings for FFmpeg with complex filtering support")
15045 (description
15046 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
15047Python terms, taking care of running ffmpeg with the correct command-line
15048arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
15049 (license license:asl2.0)))
15050
15051(define-public python-imageio-ffmpeg
15052 (package
15053 (name "python-imageio-ffmpeg")
15054 (version "0.6.0")
15055 (source
15056 (origin
15057 (method url-fetch)
15058 (uri (pypi-uri "imageio_ffmpeg" version))
15059 (sha256
15060 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
15061 (build-system pyproject-build-system)
15062 (arguments
15063 (list
15064 #:tests? #f ;XXX: tests require network access to get FFmpeg data
15065 #:phases
15066 #~(modify-phases %standard-phases
15067 (add-after 'unpack 'hardcode-ffmpeg
15068 (lambda* (#:key inputs #:allow-other-keys)
15069 (substitute* "imageio_ffmpeg/_utils.py"
15070 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
15071 (string-append "(" all " or \""
15072 (search-input-file inputs "bin/ffmpeg")
15073 "\")"))))))))
15074 (native-inputs
15075 (list python-setuptools
15076 python-wheel))
15077 (inputs
15078 (list ffmpeg))
15079 (home-page "https://github.com/imageio/imageio-ffmpeg")
15080 (synopsis "FFMPEG wrapper for Python")
15081 (description
15082 "This package provides an FFMPEG wrapper for working with video files.
15083It implements generator functions for reading and writing data to and from
15084FFMPEG, reliably terminating the process when done.")
15085 (license license:bsd-2)))
15086
15087(define-public python-imageio
15088 (package
15089 (name "python-imageio")
15090 (version "2.36.1")
15091 (source
15092 (origin
15093 (method url-fetch)
15094 (uri (pypi-uri "imageio" version))
15095 (sha256
15096 (base32
15097 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
15098 (build-system pyproject-build-system)
15099 (arguments
15100 (list
15101 #:test-flags #~(list "-m" "not needs_internet"
15102 ;; This attempts to load libGL.so (provided by mesa)
15103 ;; at the Python store path (sys.base_prefix?).
15104 "-k" "not test_findlib2"
15105 "--ignore" "tests/test_freeimage.py")
15106 #:phases
15107 #~(modify-phases %standard-phases
15108 (add-after 'unpack 'fix-source
15109 (lambda* (#:key inputs #:allow-other-keys)
15110 (substitute* "imageio/core/util.py"
15111 (("\"/var/tmp\"")
15112 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
15113 (propagated-inputs
15114 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
15115 (native-inputs
15116 (list python-fsspec
15117 python-pytest
15118 python-setuptools))
15119 (home-page "https://imageio.github.io/")
15120 (synopsis "Library for reading and writing a wide range of image data")
15121 (description
15122 "Imageio is a Python library that provides an easy interface to read and
15123write a wide range of image data, including animated images, video, volumetric
15124data, and scientific formats.")
15125 (license license:bsd-2)))
15126
15127(define-public python-pyudorandom
15128 ;; Releases are not tagged in Git:
15129 ;; https://github.com/mewwts/pyudorandom/issues/3
15130 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
15131 (revision "0"))
15132 (package
15133 (name "python-pyudorandom")
15134 (version (git-version "1.0.0" revision commit))
15135 (source
15136 (origin
15137 (method git-fetch)
15138 (uri (git-reference
15139 (url "https://github.com/mewwts/pyudorandom")
15140 (commit commit)))
15141 (file-name (git-file-name name version))
15142 (sha256
15143 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
15144 (build-system pyproject-build-system)
15145 (arguments (list #:test-backend #~'unittest))
15146 (native-inputs (list python-setuptools))
15147 (home-page "https://github.com/mewwts/pyudorandom")
15148 (synopsis "Generate pseudorandom numbers by using algebra")
15149 (description
15150 "The @code{pyudorandom} module lets you iterate over a list
15151in a non-succsessive, yet deterministic way based on integer modulo.
15152It comes in handy when you want to mix up the items, but don't need
15153any guarantees of randomness. It might be slow on small data,
15154but shall be significantly faster than @code{random.shuffle}
15155for longer lists.")
15156 (license license:expat))))
15157
15158(define-public python-pyvips
15159 (package
15160 (name "python-pyvips")
15161 (version "3.1.1")
15162 (source
15163 (origin
15164 (method git-fetch) ; PyPI does not include test helpers
15165 (uri (git-reference
15166 (url "https://github.com/libvips/pyvips")
15167 (commit (string-append "v" version))))
15168 (file-name (git-file-name name version))
15169 (sha256
15170 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
15171 (build-system pyproject-build-system)
15172 (native-inputs
15173 (list pkg-config
15174 python-pytest
15175 python-setuptools
15176 python-wheel))
15177 (inputs
15178 (list glib vips))
15179 (propagated-inputs
15180 (list python-cffi python-pkgconfig))
15181 (home-page "https://github.com/libvips/pyvips")
15182 (synopsis "Python bindings for VIPS")
15183 (description "The @code{pyvips} package provides Python bindings for VIPS,
15184a multithreaded image-processing system with low memory needs.")
15185 (license license:expat)))
15186
15187;; WARNING: This package is a dependency of mesa.
15188;; There are no users in python-xyz for this package, consider to adopt closer
15189;; to Mesa.
15190(define-public python-pycparser
15191 (package
15192 (name "python-pycparser")
15193 (version "2.22")
15194 (source
15195 (origin
15196 (method url-fetch)
15197 (uri (pypi-uri "pycparser" version))
15198 (sha256
15199 (base32
15200 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
15201 (outputs '("out" "doc"))
15202 (build-system pyproject-build-system)
15203 (arguments
15204 (list
15205 #:test-backend #~'unittest
15206 #:phases
15207 #~(modify-phases %standard-phases
15208 (add-after 'install 'install-doc
15209 (lambda _
15210 (let* ((data (string-append #$output:doc "/share"))
15211 (doc (string-append data "/doc/" #$name "-" #$version))
15212 (examples (string-append doc "/examples")))
15213 (mkdir-p examples)
15214 (for-each (lambda (file)
15215 (copy-file (string-append "." file)
15216 (string-append doc file)))
15217 '("/README.rst" "/CHANGES" "/LICENSE"))
15218 (copy-recursively "examples" examples)))))))
15219 (native-inputs
15220 (list python-setuptools))
15221 (home-page "https://github.com/eliben/pycparser")
15222 (synopsis "C parser in Python")
15223 (description
15224 "Pycparser is a complete parser of the C language, written in pure Python
15225using the PLY parsing library. It parses C code into an AST and can serve as
15226a front-end for C compilers or analysis tools.")
15227 (license license:bsd-3)))
15228
15229(define-public python-pywavelets
15230 (package
15231 (name "python-pywavelets")
15232 (version "1.8.0")
15233 (home-page "https://github.com/PyWavelets/pywt")
15234 (source (origin
15235 (method url-fetch)
15236 (uri (pypi-uri "pywavelets" version))
15237 (sha256
15238 (base32
15239 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
15240 (build-system pyproject-build-system)
15241 (arguments
15242 (list
15243 #:test-flags '(list "--pyargs" "pywt")
15244 #:phases
15245 #~(modify-phases %standard-phases
15246 ;; The compiled libraries are only in the output at this point,
15247 ;; but they are needed to run tests.
15248 ;; FIXME: This should be handled by the pyargs pytest argument,
15249 ;; but is not for some reason.
15250 (add-before 'check 'pre-check
15251 (lambda _ (chdir #$output))))))
15252 (native-inputs
15253 (list meson
15254 ninja
15255 pkg-config
15256 python-cython
15257 python-meson
15258 python-numpy
15259 python-pytest))
15260 (propagated-inputs
15261 (list python-numpy python-scipy))
15262 (synopsis "Wavelet transforms in Python")
15263 (description
15264 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
15265mathematical basis functions that are localized in both time and frequency.
15266Wavelet transforms are time-frequency transforms employing wavelets. They are
15267similar to Fourier transforms, the difference being that Fourier transforms are
15268localized only in frequency instead of in time and frequency.")
15269 (license license:expat)))
15270
15271(define-public python-pywal
15272 (package
15273 (name "python-pywal")
15274 (version "3.3.0")
15275 (source
15276 (origin
15277 (method git-fetch)
15278 (uri (git-reference
15279 (url "https://github.com/dylanaraps/pywal")
15280 (commit version)))
15281 (file-name (git-file-name name version))
15282 (sha256
15283 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
15284 (build-system pyproject-build-system)
15285 (arguments
15286 `(#:phases
15287 (modify-phases %standard-phases
15288 (add-before 'check 'fix-home-directory
15289 (lambda _
15290 ;; Tests fail with "Permission denied: '/homeless-shelter'".
15291 (setenv "HOME" "/tmp"))))))
15292 (native-inputs
15293 (list python-pytest
15294 python-setuptools))
15295 (inputs
15296 (list imagemagick))
15297 (home-page "https://github.com/dylanaraps/pywal")
15298 (synopsis "Color palette generator and applicator")
15299 (description
15300 "Pywal is a tool that generates a color palette from the dominant colors
15301in an image. It then applies the colors system-wide and on-the-fly in all of
15302your favourite programs.")
15303 (license license:expat)))
15304
15305(define-public python-pywal16
15306 (package
15307 (name "python-pywal16")
15308 (version "3.8.10")
15309 (source
15310 (origin
15311 (method url-fetch)
15312 (uri (pypi-uri "pywal16" version))
15313 (sha256
15314 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
15315 (build-system pyproject-build-system)
15316 (arguments
15317 (list
15318 #:phases
15319 '(modify-phases %standard-phases
15320 (add-before 'check 'set-HOME
15321 (lambda _ (setenv "HOME" "/tmp"))))))
15322 (native-inputs
15323 (list imagemagick
15324 python-pytest
15325 python-setuptools))
15326 (home-page "https://github.com/eylles/pywal16")
15327 (synopsis "16 colors fork of pywal")
15328 (description
15329 "Pywal16 is a tool that generates a color palette from the dominant
15330colors in an image. It then applies the colors system-wide and on-the-fly in
15331all of your favorite programs.")
15332 (license license:expat)))
15333
15334(define-public python-click-didyoumean
15335 (package
15336 (name "python-click-didyoumean")
15337 (version "0.3.1")
15338 (source
15339 (origin
15340 (method git-fetch) ;no tests in PyPI archive
15341 (uri (git-reference
15342 (url "https://github.com/click-contrib/click-didyoumean")
15343 (commit (string-append "v" version))))
15344 (file-name (git-file-name name version))
15345 (sha256
15346 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
15347 (build-system pyproject-build-system)
15348 (native-inputs
15349 (list python-poetry-core python-pytest))
15350 (propagated-inputs
15351 (list python-click))
15352 (home-page "https://github.com/timofurrer/click-didyoumean")
15353 (synopsis "Git-like did-you-mean feature in Click")
15354 (description
15355 "This plugin enables git-like did-you-mean feature in Click.")
15356 (license license:expat)))
15357
15358(define-public python-pywinrm
15359 (package
15360 (name "python-pywinrm")
15361 (version "0.5.0")
15362 (source
15363 (origin
15364 (method git-fetch)
15365 (uri (git-reference
15366 (url "https://github.com/diyan/pywinrm/")
15367 (commit (string-append "v" version))))
15368 (file-name (git-file-name name version))
15369 (sha256
15370 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
15371 (build-system pyproject-build-system)
15372 (propagated-inputs
15373 (list python-requests python-requests-ntlm python-xmltodict))
15374 (native-inputs
15375 (list python-mock python-pytest python-setuptools))
15376 (home-page "https://github.com/diyan/pywinrm/")
15377 (synopsis "Python library for Windows Remote Management (WinRM)")
15378 (description
15379 "pywinrm is a Python client for the Windows Remote Management (WinRM)
15380service. It allows you to invoke commands on target Windows machines from
15381any machine that can run Python.")
15382 (license license:expat)))
15383
15384(define-public python-manimpango
15385 (package
15386 (name "python-manimpango")
15387 (version "0.5.0")
15388 (source
15389 (origin
15390 (method git-fetch) ; no tests data in PyPi package
15391 (uri (git-reference
15392 (url "https://github.com/ManimCommunity/ManimPango")
15393 (commit (string-append "v" version))))
15394 (file-name (git-file-name name version))
15395 (sha256
15396 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
15397 (build-system pyproject-build-system)
15398 (arguments
15399 (list
15400 #:phases
15401 #~(modify-phases %standard-phases
15402 (add-before 'check 'build-extensions
15403 (lambda _
15404 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
15405 (native-inputs
15406 (list pkg-config
15407 python-cython
15408 python-pytest
15409 python-setuptools
15410 python-wheel))
15411 (inputs
15412 (list pango))
15413 (home-page "https://manimpango.manim.community/")
15414 (synopsis "Bindings for Pango for using with Manim")
15415 (description
15416 "Python bindings for ManimPango which is a C binding for Pango,
15417using Cython.
15418
15419ManimPango is internally used in Manim to render (non-LaTeX) text.")
15420 (license license:expat)))
15421
15422(define-public python-cairocffi
15423 (package
15424 (name "python-cairocffi")
15425 (version "1.7.1")
15426 (source
15427 (origin
15428 ;; The PyPI archive does not include the documentation, so use Git.
15429 (method git-fetch)
15430 (uri (git-reference
15431 (url "https://github.com/Kozea/cairocffi")
15432 (commit (string-append "v" version))))
15433 (file-name (git-file-name name version))
15434 (sha256
15435 (base32
15436 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
15437 (build-system pyproject-build-system)
15438 (outputs '("out" "doc"))
15439 (inputs
15440 (list glib gtk+ gdk-pixbuf cairo))
15441 (native-inputs
15442 (list python-flit-core
15443 python-numpy
15444 python-pikepdf
15445 python-pytest
15446 python-sphinx
15447 python-sphinx-rtd-theme))
15448 (propagated-inputs
15449 (list python-xcffib)) ; used at run time
15450 (arguments
15451 (list
15452 #:phases
15453 #~(modify-phases %standard-phases
15454 (add-after 'unpack 'patch-paths
15455 (lambda* (#:key inputs #:allow-other-keys)
15456 (substitute* "cairocffi/__init__.py"
15457 ;; Hack the dynamic library loading mechanism.
15458 (("find_library\\(library_name\\)")
15459 "\"found\"")
15460 (("filenames = \\(library_filename,\\) \\+ filenames")
15461 "pass")
15462 (("libcairo.so.2")
15463 (search-input-file inputs "/lib/libcairo.so.2")))
15464 (substitute* "cairocffi/pixbuf.py"
15465 (("libgdk_pixbuf-2.0.so.0")
15466 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15467 (("libgobject-2.0.so.0")
15468 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15469 (("libglib-2.0.so.0")
15470 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15471 (("libgdk-3.so.0")
15472 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15473 (add-after 'install 'install-doc
15474 (lambda* (#:key inputs #:allow-other-keys)
15475 (let* ((data (string-append #$output:doc "/share"))
15476 (doc (string-append data "/doc/" #$name "-" #$version))
15477 (html (string-append doc "/html")))
15478 (setenv "LD_LIBRARY_PATH"
15479 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15480 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15481 (setenv "LANG" "en_US.UTF-8")
15482 (mkdir-p html)
15483 (for-each (lambda (file)
15484 (copy-file (string-append "." file)
15485 (string-append doc file)))
15486 '("/README.rst" "/NEWS.rst"))
15487 (system* "python" "setup.py" "build_sphinx")
15488 (copy-recursively "docs/_build/html" html)))))))
15489 (home-page "https://github.com/Kozea/cairocffi")
15490 (synopsis "Python bindings and object-oriented API for Cairo")
15491 (description
15492 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15493Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15494graphics library with support for multiple backends including image buffers,
15495PNG, PostScript, PDF, and SVG file output.")
15496 (license license:bsd-3)))
15497
15498(define-public python-decorator
15499 (package
15500 (name "python-decorator")
15501 (version "5.2.1")
15502 (source
15503 (origin
15504 (method url-fetch)
15505 (uri (pypi-uri "decorator" version))
15506 (sha256
15507 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15508 (build-system pyproject-build-system)
15509 (arguments
15510 (list #:test-backend #~'custom
15511 #:test-flags #~(list "tests/test.py")))
15512 (native-inputs
15513 (list python-setuptools))
15514 (home-page "https://pypi.org/project/decorator/")
15515 (synopsis "Python module to simplify usage of decorators")
15516 (description
15517 "The aim of the decorator module is to simplify the usage of decorators
15518for the average programmer, and to popularize decorators usage giving examples
15519of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15520etc. The core of this module is a decorator factory.")
15521 (license license:expat)))
15522
15523(define-public python-drmaa
15524 (package
15525 (name "python-drmaa")
15526 (version "0.7.7")
15527 (source
15528 (origin
15529 (method url-fetch)
15530 (uri (pypi-uri "drmaa" version))
15531 (sha256
15532 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15533 (build-system pyproject-build-system)
15534 ;; The test suite requires libdrmaa which is provided by the cluster
15535 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15536 ;; should be set to the path of the libdrmaa library.
15537 (arguments
15538 (list
15539 #:tests? #f
15540 #:phases
15541 #~(modify-phases %standard-phases
15542 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15543 ;; is not configured.
15544 (delete 'sanity-check))))
15545 (native-inputs (list python-setuptools))
15546 (home-page "https://pypi.org/project/drmaa/")
15547 (synopsis "Python bindings for the DRMAA library")
15548 (description
15549 "A Python package for Distributed Resource Management (DRM) job
15550submission and control. This package is an implementation of the DRMAA 1.0
15551Python language binding specification.")
15552 (license license:bsd-3)))
15553
15554(define-public python-grako
15555 (package
15556 (name "python-grako")
15557 (version "3.99.9")
15558 (source
15559 (origin
15560 (method url-fetch)
15561 (uri (pypi-uri "grako" version ".zip"))
15562 (sha256
15563 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15564 (snippet
15565 #~(begin (use-modules (guix build utils))
15566 (substitute* "grako/grammars.py"
15567 (("from collections import defaultdict, Mapping")
15568 (string-append "from collections import defaultdict\n"
15569 "from collections.abc import Mapping")))
15570 (substitute* '("grako/util.py"
15571 "grako/walkers.py")
15572 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15573 (build-system pyproject-build-system)
15574 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15575 (arguments (list #:tests? #f))
15576 (native-inputs (list unzip python-pytest python-setuptools))
15577 (home-page "https://pypi.org/project/grako")
15578 (synopsis "EBNF parser generator")
15579 (description
15580 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15581memoizing PEG/Packrat parser in Python.")
15582 (license license:bsd-3)))
15583
15584(define-public python-grandalf
15585 (package
15586 (name "python-grandalf")
15587 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15588 (version "0.8")
15589 (source
15590 (origin
15591 (method git-fetch)
15592 (uri (git-reference
15593 (url "https://github.com/bdcht/grandalf")
15594 (commit (string-append "v" version))))
15595 (file-name (git-file-name name version))
15596 (sha256
15597 (base32 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))
15598 (patches
15599 (list
15600 (origin
15601 (method url-fetch)
15602 (uri
15603 (string-append "https://github.com/bdcht/grandalf/commit/"
15604 "e61df12f00124b615a220cfcd58dd6f89d226264.patch"))
15605 (sha256
15606 (base32 "1p0315flsg4frpadcnn7fh41y5k3cdz4h722v6ri88a3s6hcpd36")))))))
15607 (build-system pyproject-build-system)
15608 (arguments
15609 (list
15610 #:phases
15611 #~(modify-phases %standard-phases
15612 (add-before 'build 'patch-requirements
15613 (lambda _
15614 (substitute* "setup.py"
15615 (("install_requires=\\['pyparsing'],") "")))))))
15616 (native-inputs
15617 (list python-setuptools python-pytest))
15618 (propagated-inputs
15619 (list python-numpy python-ply))
15620 (home-page "https://github.com/bdcht/grandalf")
15621 (synopsis "Graph and drawing algorithms framework")
15622 (description
15623 "Grandalf is a Python package made for experimentations with graphs
15624drawing algorithms. It is written in pure Python, and currently implements
15625two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15626minimization approach. While not as fast or featured as graphviz or other
15627libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15628than thousands of nodes, while keeping the source code simple enough to tweak
15629and hack any part of it for experimental purpose. With a total of about 1500
15630lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15631in less than 600 lines. The energy minimization approach is comprised of only
15632250 lines!
15633
15634Grandalf does only 2 not-so-simple things:
15635@itemize
15636@item computing the nodes (x,y) coordinates (based on provided nodes
15637dimensions, and a chosen layout)
15638@item routing the edges with lines or nurbs
15639@end itemize
15640
15641It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15642will help you find where to draw things like nodes and edges, but it’s up to
15643you to actually draw things with your favorite toolkit.")
15644 ;; The user can choose either license.
15645 (license (list license:gpl2 license:epl1.0))))
15646
15647(define-public python-gridmap
15648 ;; XXX: Project is unmaintained since 2020-08-24, see:
15649 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15650 (package
15651 (name "python-gridmap")
15652 (version "0.15.0")
15653 (source
15654 (origin
15655 (method git-fetch)
15656 (uri (git-reference
15657 (url "https://github.com/pygridtools/gridmap")
15658 (commit (string-append "v" version))))
15659 (file-name (git-file-name name version))
15660 (sha256
15661 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15662 (build-system pyproject-build-system)
15663 (arguments
15664 (list #:tests? #f ;XXX: freezes or timeout
15665 #:test-backend #~'nose))
15666 (native-inputs
15667 (list ;; python-pynose
15668 python-setuptools))
15669 (propagated-inputs
15670 (list python-cherrypy
15671 python-cloudpickle
15672 python-psutil
15673 python-drmaa
15674 python-pyzmq))
15675 (home-page "https://github.com/pygridtools/gridmap")
15676 (synopsis "Create jobs on a cluster directly from Python")
15677 (description
15678 "Gridmap is a Python package to allow you to easily create jobs on the
15679cluster directly from Python. You can directly map Python functions onto the
15680cluster without needing to write any wrapper code yourself.")
15681 (license license:gpl3+)))
15682
15683(define-public python-honcho
15684 (package
15685 (name "python-honcho")
15686 (version "2.0.0")
15687 (source
15688 (origin
15689 (method git-fetch)
15690 (uri (git-reference
15691 (url "https://github.com/nickstenning/honcho")
15692 (commit (string-append "v" version))))
15693 (file-name (git-file-name name version))
15694 (sha256
15695 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15696 (build-system pyproject-build-system)
15697 (arguments
15698 ;; Tests below fail with the error
15699 ;; ValueError: The 'honcho.export.xxx' package was not installed
15700 ;; in a way that PackageLoader understands.
15701 ;; Probably safe because it's testing for different init systems.
15702 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15703 "--ignore" "tests/test_export_runit.py"
15704 "--ignore" "tests/test_export_supervisord.py"
15705 "--ignore" "tests/test_export_systemd.py"
15706 "--ignore" "tests/test_export_upstart.py")))
15707 (native-inputs
15708 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15709 (propagated-inputs
15710 (list python-colorama))
15711 (home-page "https://github.com/nickstenning/honcho")
15712 (synopsis "Manage Procfile-based applications")
15713 (description
15714 "A Procfile is a file which describes how to run an application
15715consisting of several processes. honcho starts all listed processes.
15716The output of all running processes is collected by honcho and
15717displayed.")
15718 (license license:expat)))
15719
15720(define-public python-hsluv
15721 (package
15722 (name "python-hsluv")
15723 (version "5.0.4")
15724 (source
15725 (origin
15726 (method url-fetch)
15727 (uri (pypi-uri "hsluv" version))
15728 (sha256
15729 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15730 (build-system pyproject-build-system)
15731 (native-inputs
15732 (list python-pytest python-setuptools))
15733 (home-page "https://www.hsluv.org")
15734 (synopsis "Human-friendly HSL colour space implemented in Python")
15735 (description
15736 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15737@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15738component that allows you to span all the available chroma as a neat
15739percentage.")
15740 (license license:expat)))
15741
15742(define-public python-pebble
15743 (package
15744 (name "python-pebble")
15745 (version "5.1.3")
15746 (source
15747 (origin
15748 (method git-fetch)
15749 (uri (git-reference
15750 (url "https://github.com/noxdafox/pebble")
15751 (commit version)))
15752 (file-name (git-file-name name version))
15753 (sha256
15754 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15755 (build-system pyproject-build-system)
15756 (native-inputs (list python-pytest python-setuptools))
15757 (home-page "https://github.com/noxdafox/pebble")
15758 (synopsis "Threading and multiprocessing for Python")
15759 (description
15760 "Pebble aims to help manage threads and processes in an easier way. It
15761wraps Python's standard library threading and multiprocessing objects.")
15762 (license license:lgpl3+)))
15763
15764(define-public python-pexpect
15765 (package
15766 (name "python-pexpect")
15767 (version "4.9.0")
15768 (source
15769 (origin
15770 (method url-fetch)
15771 (uri (pypi-uri "pexpect" version))
15772 (sha256
15773 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15774 (build-system pyproject-build-system)
15775 (arguments
15776 (list
15777 #:test-flags
15778 ;; The socket tests can hang (most often, but not only, when run in
15779 ;; parallel, see: <https://github.com/pexpect/pexpect/issues/809>)
15780 #~(list "--ignore=tests/test_socket.py"
15781 "--ignore=tests/test_socket_fd.py"
15782 "-k" (string-join
15783 (list
15784 ;; Disable failing test, see
15785 ;; <https://github.com/pexpect/pexpect/issues/568>.
15786 "not test_bash"
15787 ;; Fails with attempt to find OpenSSL.
15788 "test_large_stdout_stream"
15789 ;; Tests fail while trying to find
15790 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15791 "test_run_uses_env"
15792 "test_run_uses_env_path"
15793 "test_run_uses_env_path_over_path"
15794 "test_spawn_uses_env"
15795 ;; Fails with assertion error: assert 0 == 500
15796 "test_before_across_chunks"
15797 ;; Bash is enough for tests.
15798 "test_zsh")
15799 " and not "))
15800 #:phases
15801 #~(modify-phases %standard-phases
15802 (add-before 'check 'prepare-tests
15803 (lambda _
15804 (substitute* (find-files "tests")
15805 (("/bin/bash") (which "bash"))
15806 (("/bin/echo") (which "echo"))
15807 (("/bin/ls") (which "ls"))
15808 (("/bin/which") (which "which"))
15809 ;; Many tests try to use the /bin directory which is not
15810 ;; present in the build environment. Use one that's non-empty
15811 ;; and unlikely to change.
15812 (("/bin'") "/dev'")))))))
15813 (native-inputs
15814 (list bash ;full Bash for 'test_replwrap.py'
15815 man-db
15816 python-pytest
15817 python-setuptools
15818 which))
15819 (propagated-inputs
15820 (list python-ptyprocess))
15821 (home-page "https://pexpect.readthedocs.org/")
15822 (synopsis "Controlling interactive console applications")
15823 (description
15824 "Pexpect is a pure Python module for spawning child applications;
15825controlling them; and responding to expected patterns in their output. Pexpect
15826works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15827application and control it as if a human were typing commands.")
15828 (license license:isc)))
15829
15830(define-public python-sexpdata
15831 (package
15832 (name "python-sexpdata")
15833 (version "1.0.2")
15834 (source
15835 (origin
15836 (method url-fetch)
15837 (uri (pypi-uri "sexpdata" version))
15838 (sha256
15839 (base32
15840 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15841 (build-system pyproject-build-system)
15842 (arguments
15843 (list #:tests? #f)) ; no tests
15844 (native-inputs (list python-setuptools python-wheel))
15845 (home-page "https://github.com/jd-boyd/sexpdata")
15846 (synopsis "S-expression parser for Python")
15847 (description
15848 "Sexpdata is an S-expression parser/serializer. It has load and dump
15849functions like pickle, json or PyYAML module.")
15850 (license license:bsd-3)))
15851
15852(define-public python-pathable
15853 (package
15854 (name "python-pathable")
15855 (version "0.4.3")
15856 (source
15857 (origin
15858 (method url-fetch)
15859 (uri (pypi-uri "pathable" version))
15860 (sha256
15861 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15862 (build-system pyproject-build-system)
15863 (arguments (list #:tests? #false)) ;there are none
15864 (native-inputs (list python-poetry-core))
15865 (home-page "https://github.com/p1c2u/pathable")
15866 (synopsis "Object-oriented paths")
15867 (description "With this package you can traverse resources like paths and
15868access resources on demand with separate accessor layer.")
15869 (license license:asl2.0)))
15870
15871(define-public python-importlib-resources
15872 (package
15873 (name "python-importlib-resources")
15874 (version "6.5.2")
15875 (source (origin
15876 (method url-fetch)
15877 (uri (pypi-uri "importlib_resources" version))
15878 (sha256
15879 (base32
15880 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15881 (build-system pyproject-build-system)
15882 (native-inputs
15883 (list python-jaraco-test
15884 python-jaraco-collections
15885 python-pytest
15886 python-setuptools
15887 python-setuptools-scm
15888 python-zipp))
15889 (home-page "https://importlib-resources.readthedocs.io/")
15890 (synopsis "Read resources from Python packages")
15891 (description
15892 "@code{importlib_resources} is a backport of Python 3's standard library
15893@code{importlib.resources} module for Python 2.7, and Python 3.")
15894 (license license:asl2.0)))
15895
15896(define-public python-importlib-metadata
15897 (package
15898 (name "python-importlib-metadata")
15899 (version "8.7.0")
15900 (source
15901 (origin
15902 (method url-fetch)
15903 (uri (pypi-uri "importlib_metadata" version))
15904 (sha256
15905 (base32
15906 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15907 (build-system pyproject-build-system)
15908 (arguments
15909 (list #:test-flags #~(list "tests")))
15910 (native-inputs
15911 (list python-jaraco-test
15912 python-packaging-bootstrap
15913 python-pyfakefs
15914 python-pytest-bootstrap
15915 python-setuptools
15916 python-setuptools-scm))
15917 (propagated-inputs
15918 (list python-zipp))
15919 (home-page "https://importlib-metadata.readthedocs.io/")
15920 (synopsis "Read metadata from Python packages")
15921 (description
15922 "@code{importlib_metadata} is a library which provides an API for
15923accessing an installed Python package's metadata, such as its entry points or
15924its top-level name. This functionality intends to replace most uses of
15925@code{pkg_resources} entry point API and metadata API. Along with
15926@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15927need to use the older and less efficient @code{pkg_resources} package.")
15928 (license license:asl2.0)))
15929
15930(define-public python-importlib-metadata-argparse-version
15931 (package
15932 (name "python-importlib-metadata-argparse-version")
15933 (version "2.0.1")
15934 (home-page
15935 "https://github.com/mondeja/importlib-metadata-argparse-version")
15936 (source
15937 (origin
15938 (method git-fetch)
15939 (uri (git-reference
15940 (url home-page)
15941 (commit (string-append "v" version))))
15942 (file-name (git-file-name name version))
15943 (sha256
15944 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15945 (build-system pyproject-build-system)
15946 (native-inputs (list python-pytest python-hatchling))
15947 (synopsis "Get Python package version more efficiently")
15948 (description
15949 "This package provides an @code{argparse} action to define CLI version
15950with a delayed call to @code{importlib.metadata}, avoiding to load this module
15951when not needed.")
15952 (license license:bsd-3)))
15953
15954(define-public python-importmagic
15955 (package
15956 (name "python-importmagic")
15957 (version "0.1.7")
15958 (source
15959 (origin
15960 (method git-fetch)
15961 (uri (git-reference
15962 (url "https://github.com/alecthomas/importmagic")
15963 (commit version)))
15964 (file-name (git-file-name name version))
15965 (sha256
15966 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15967 (build-system pyproject-build-system)
15968 (native-inputs (list python-pytest python-setuptools))
15969 (home-page "https://github.com/alecthomas/importmagic")
15970 (synopsis "Library for adding, removing and managing Python imports")
15971 (description
15972 "Importmagic is a Python library for automatically managing imports by
15973finding unresolved symbols in Python code and their corresponding imports.")
15974 (license license:bsd-3)))
15975
15976(define-public python-inotify-simple
15977 (package
15978 (name "python-inotify-simple")
15979 (version "1.3.5")
15980 (source
15981 (origin
15982 (method git-fetch)
15983 (uri (git-reference
15984 (url "https://github.com/chrisjbillington/inotify_simple")
15985 (commit version)))
15986 (file-name (git-file-name name version))
15987 (sha256
15988 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15989 (build-system pyproject-build-system)
15990 (arguments
15991 (list
15992 #:test-backend #~'custom
15993 #:test-flags #~(list "example.py")))
15994 (native-inputs (list python-setuptools))
15995 (home-page "https://github.com/chrisjbillington/inotify_simple")
15996 (synopsis "Simple wrapper around inotify library")
15997 (description
15998 "@code{inotify-simple} is a simple wrapper around inotify library.")
15999 (license license:bsd-3)))
16000
16001(define-public python-interface-meta
16002 (package
16003 (name "python-interface-meta")
16004 (version "1.3.0")
16005 (source
16006 (origin
16007 (method url-fetch)
16008 (uri (pypi-uri "interface_meta" version))
16009 (sha256
16010 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
16011 (build-system pyproject-build-system)
16012 (native-inputs (list python-poetry-core python-pytest))
16013 (home-page "https://github.com/matthewwardrop/interface_meta")
16014 (synopsis
16015 "API for enforced method signatures and consistent documentation")
16016 (description
16017 "This package provides a convenient way to expose an extensible API with
16018enforced method signatures and consistent documentation.")
16019 (license license:expat)))
16020
16021(define-public python-jaraco-itertools
16022 (package
16023 (name "python-jaraco-itertools")
16024 (version "6.4.3")
16025 (source
16026 (origin
16027 (method git-fetch)
16028 (uri (git-reference
16029 (url "https://github.com/jaraco/jaraco.itertools")
16030 (commit (string-append "v" version))))
16031 (file-name (git-file-name name version))
16032 (sha256
16033 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
16034 (build-system pyproject-build-system)
16035 (arguments
16036 (list #:tests? #f)) ;no tests
16037 (native-inputs
16038 (list python-setuptools
16039 python-setuptools-scm))
16040 (propagated-inputs
16041 (list python-inflect
16042 python-more-itertools))
16043 (home-page "https://github.com/jaraco/jaraco.itertools")
16044 (synopsis "Tools for working with iterables")
16045 (description
16046 "This package provides an utility collection based on no longer
16047maintained @code{jaraco.util}.")
16048 (license license:expat)))
16049
16050(define-public python-jaraco-logging
16051 (package
16052 (name "python-jaraco-logging")
16053 (version "3.4.0")
16054 (source
16055 (origin
16056 (method git-fetch)
16057 (uri (git-reference
16058 (url "https://github.com/jaraco/jaraco.logging")
16059 (commit (string-append "v" version))))
16060 (file-name (git-file-name name version))
16061 (sha256
16062 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
16063 (build-system pyproject-build-system)
16064 (native-inputs
16065 (list python-pytest
16066 python-setuptools
16067 python-setuptools-scm))
16068 (propagated-inputs
16069 (list python-tempora))
16070 (home-page "https://github.com/jaraco/jaraco.logging")
16071 (synopsis "Support for Python's logging facility")
16072 (description
16073 "This package allows soliciting log-level info from command-line
16074parameters.")
16075 (license license:expat)))
16076
16077(define-public python-jaraco-packaging
16078 (package
16079 (name "python-jaraco-packaging")
16080 (version "9.4.0") ;the latest version compatible with [email protected]
16081 (source
16082 (origin
16083 (method url-fetch)
16084 (uri (pypi-uri "jaraco.packaging" version))
16085 (sha256
16086 (base32
16087 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
16088 (build-system pyproject-build-system)
16089 (arguments
16090 (list #:tests? #f)) ;no tests in PyPI archive
16091 (native-inputs
16092 (list python-setuptools
16093 python-setuptools-scm))
16094 (propagated-inputs
16095 (list python-pypa-build
16096 python-virtualenv
16097 python-domdf-python-tools
16098 python-jaraco-context
16099 python-sphinx))
16100 (home-page "https://github.com/jaraco/jaraco.packaging")
16101 (synopsis "Tools to supplement packaging Python releases")
16102 (description
16103 "This package provides various tools to supplement packaging Python
16104releases.")
16105 (license license:expat)))
16106
16107(define-public python-jaraco-vcs
16108 (package
16109 (name "python-jaraco-vcs")
16110 (version "2.4.1")
16111 (source
16112 (origin
16113 (method git-fetch)
16114 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
16115 (commit (string-append "v" version))))
16116 (file-name (git-file-name name version))
16117 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
16118 (build-system pyproject-build-system)
16119 (arguments
16120 (list
16121 #:test-flags
16122 ;; Ignore doctests.
16123 #~(list "--ignore-glob=jaraco/vcs/*.py")))
16124 (propagated-inputs (list python-jaraco-classes
16125 python-jaraco-path
16126 python-jaraco-versioning
16127 python-more-itertools
16128 python-packaging
16129 python-dateutil
16130 python-tempora))
16131 (native-inputs (list python-pygments
16132 python-pytest
16133 python-pytest-home
16134 python-setuptools
16135 python-setuptools-scm))
16136 (home-page "https://github.com/jaraco/jaraco.vcs")
16137 (synopsis "Utilities for working with VCS repositories")
16138 (description
16139 "This package provides facilities for working with VCS repositories in
16140Python.")
16141 (license license:expat)))
16142
16143(define-public python-jaraco-versioning
16144 (package
16145 (name "python-jaraco-versioning")
16146 (version "1.1.0")
16147 (source
16148 (origin
16149 (method git-fetch)
16150 (uri (git-reference
16151 (url "https://github.com/jaraco/jaraco.versioning")
16152 (commit (string-append "v" version))))
16153 (file-name (git-file-name name version))
16154 (sha256
16155 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
16156 (build-system pyproject-build-system)
16157 (arguments
16158 (list
16159 #:phases
16160 #~(modify-phases %standard-phases
16161 ;; doctest started failing with python-packaging 26.2
16162 (add-after 'unpack 'fix-doc-test
16163 (lambda _
16164 (substitute* "jaraco/versioning.py"
16165 (("<Version") "<SummableVersion")))))))
16166 (propagated-inputs (list python-packaging))
16167 (native-inputs
16168 (list python-pytest python-setuptools python-setuptools-scm))
16169 (home-page "https://github.com/jaraco/jaraco.versioning")
16170 (synopsis "Version manipulation utils")
16171 (description
16172 "This package builds upon @code{python-packaging} to provide more
16173sophisticated version manipulation.")
16174 (license license:expat)))
16175
16176(define-public python-simplegeneric
16177 (package
16178 (name "python-simplegeneric")
16179 (version "0.8.1")
16180 (source
16181 (origin
16182 (method url-fetch)
16183 (uri (pypi-uri "simplegeneric" version ".zip"))
16184 (sha256
16185 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
16186 (build-system pyproject-build-system)
16187 (arguments
16188 (list
16189 #:test-backend #~'custom
16190 #:test-flags #~(list "-m" "simplegeneric")))
16191 (native-inputs
16192 (list unzip python-setuptools))
16193 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
16194 (synopsis "Python module for simple generic functions")
16195 (description
16196 "The simplegeneric module lets you define simple single-dispatch generic
16197functions, akin to Python’s built-in generic functions like @code{len()},
16198@code{iter()} and so on. However, instead of using specially-named methods,
16199these generic functions use simple lookup tables, akin to those used by
16200e.g. @code{pickle.dump()} and other generic functions found in the Python
16201standard library.")
16202 (license license:zpl2.1)))
16203
16204(define-public python-ipython-genutils
16205 ;; TODO: This package is retired, check if can be removed, see description.
16206 (package
16207 (name "python-ipython-genutils")
16208 (version "0.1.0")
16209 (source
16210 (origin
16211 (method url-fetch)
16212 (uri (pypi-uri "ipython_genutils" version))
16213 (sha256
16214 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
16215 (build-system pyproject-build-system)
16216 (arguments `(#:tests? #f)) ; no tests
16217 (native-inputs
16218 (list python-setuptools))
16219 (home-page "https://ipython.org")
16220 (synopsis "Vestigial utilities from IPython")
16221 (description
16222 "This package provides retired utilities from IPython. No packages
16223outside IPython/Jupyter should depend on it.
16224
16225This package shouldn't exist. It contains some common utilities shared by
16226Jupyter and IPython projects during The Big Split. As soon as possible, those
16227packages will remove their dependency on this, and this package will go
16228away.")
16229 (license license:bsd-3)))
16230
16231;;; Variant used to break a cycle with python-ipykernel.
16232(define-public python-ipyparallel-bootstrap
16233 (hidden-package
16234 (package
16235 (name "python-ipyparallel-bootstrap")
16236 (version "9.0.1")
16237 (source
16238 (origin
16239 (method url-fetch)
16240 (uri (pypi-uri "ipyparallel" version))
16241 (sha256
16242 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
16243 (build-system pyproject-build-system)
16244 (arguments
16245 (list
16246 #:tests? #f
16247 #:phases #~(modify-phases %standard-phases
16248 ;; The python-ipykernel is normally propagated but is
16249 ;; removed from this package to break the cycle.
16250 (delete 'sanity-check))))
16251 (native-inputs
16252 (list python-hatchling))
16253 (propagated-inputs
16254 (list python-dateutil
16255 python-decorator
16256 python-entrypoints
16257 python-ipython
16258 ;; python-ipykernel is omitted here to break a cycle.
16259 python-jupyter-client-bootstrap
16260 python-psutil
16261 python-pyzmq
16262 python-tornado
16263 python-tqdm
16264 python-traitlets))
16265 (home-page "https://ipython.org/")
16266 (synopsis "Interactive Parallel Computing with IPython")
16267 (description
16268 "@code{ipyparallel} is a Python package and collection of CLI scripts
16269for controlling clusters for Jupyter. @code{ipyparallel} contains the
16270following CLI scripts:
16271@enumerate
16272@item ipcluster - start/stop a cluster
16273@item ipcontroller - start a scheduler
16274@item ipengine - start an engine
16275@end enumerate")
16276 (license license:bsd-3))))
16277
16278(define-public python-ipyparallel
16279 (package
16280 (inherit python-ipyparallel-bootstrap)
16281 (name "python-ipyparallel")
16282 (arguments
16283 (list
16284 #:test-flags
16285 ;; Disable warning because DeprecationWarnings make tests fail.
16286 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
16287 (native-inputs
16288 (modify-inputs native-inputs
16289 (append python-ipython
16290 python-pytest
16291 python-pytest-asyncio
16292 python-pytest-tornado
16293 python-testpath)))
16294 (propagated-inputs
16295 (modify-inputs propagated-inputs
16296 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
16297 (append python-ipykernel)))
16298 (properties (alist-delete 'hidden? (package-properties
16299 python-ipyparallel-bootstrap)))))
16300
16301;; TODO: Package python-jupysql which is the maintained fork of this one.
16302(define-public python-ipython-sql
16303 (package
16304 (name "python-ipython-sql")
16305 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
16306 (revision . "0")))
16307 (version (git-version "0.5.0"
16308 (assoc-ref properties 'revision)
16309 (assoc-ref properties 'commit)))
16310 (source
16311 (origin
16312 (method git-fetch)
16313 (uri (git-reference
16314 (url "https://github.com/catherinedevlin/ipython-sql")
16315 (commit (assoc-ref properties 'commit))))
16316 (file-name (git-file-name name version))
16317 (sha256
16318 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
16319 (build-system pyproject-build-system)
16320 (arguments
16321 (list #:tests? #f ;Fail because of prettytable.
16322 #:phases
16323 #~(modify-phases %standard-phases
16324 (replace 'check
16325 (lambda* (#:key tests? #:allow-other-keys)
16326 (setenv "HOME" (getcwd))
16327 (if tests?
16328 (invoke "ipython" "-c"
16329 "import pytest; pytest.main(['.'])")
16330 (format #t "test suite not run.~%")))))))
16331 (native-inputs (list python-pytest python-setuptools))
16332 (propagated-inputs
16333 (list python-ipython
16334 python-ipython-genutils
16335 python-prettytable
16336 python-sqlalchemy-2
16337 python-sqlparse))
16338 (home-page "https://github.com/catherinedevlin/ipython-sql")
16339 (synopsis "RDBMS access via IPython")
16340 (description "This library connects to a database, using SQLAlchemy URL
16341connect strings, then issue SQL commands within IPython or IPython Notebook.")
16342 (license license:expat)))
16343
16344(define-public python-optree
16345 (package
16346 (name "python-optree")
16347 (version "0.14.0")
16348 (source
16349 (origin
16350 (method git-fetch)
16351 (uri (git-reference
16352 (url "https://github.com/metaopt/optree")
16353 (commit (string-append "v" version))))
16354 (file-name (git-file-name name version))
16355 (sha256
16356 (base32
16357 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
16358 (build-system pyproject-build-system)
16359 (arguments
16360 (list
16361 #:test-flags
16362 ;; These tests fails due to a circular import
16363 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
16364 " and not test_import_no_warnings"))))
16365 (propagated-inputs (list python-typing-extensions))
16366 (native-inputs
16367 (list python-pytest
16368 python-setuptools
16369 python-wheel
16370 cmake-minimal
16371 pybind11-2))
16372 (home-page "https://github.com/metaopt/optree")
16373 (synopsis "Optimized PyTree Utilities")
16374 (description "This package contains operations on PyTrees (a tree made of
16375container data structures in Python).")
16376 (license license:asl2.0)))
16377
16378(define-public python-backcall
16379 (package
16380 (name "python-backcall")
16381 (version "0.2.0")
16382 (source
16383 (origin
16384 (method git-fetch)
16385 (uri (git-reference
16386 (url "https://github.com/takluyver/backcall/")
16387 (commit version)))
16388 (file-name (git-file-name name version))
16389 (sha256
16390 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
16391 (build-system pyproject-build-system)
16392 (native-inputs (list python-flit-core python-pytest))
16393 (home-page "https://github.com/takluyver/backcall/")
16394 (synopsis "Specifications for callback functions passed in to an API")
16395 (description
16396 "If your code lets other people supply callback functions, it's important
16397to specify the function signature you expect, and check that functions support
16398that. Adding extra parameters later would break other peoples code unless
16399you're careful. The @code{backcall} package provides a way of specifying the
16400callback signature using a prototype function.")
16401 (license license:bsd-3)))
16402
16403(define-public python-pubmed-parser
16404 (package
16405 (name "python-pubmed-parser")
16406 (version "0.5.1")
16407 (source (origin
16408 (method git-fetch)
16409 (uri (git-reference
16410 (url "https://github.com/titipata/pubmed_parser")
16411 (commit version)))
16412 (file-name (git-file-name name version))
16413 (sha256
16414 (base32
16415 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
16416 (build-system pyproject-build-system)
16417 (arguments (list #:tests? #f)) ;; Tests require internet
16418 (native-inputs
16419 (list python-setuptools))
16420 (propagated-inputs
16421 (list python-lxml
16422 python-numpy
16423 python-requests
16424 python-six ;hard dependency
16425 python-unidecode))
16426 (home-page "https://titipata.github.io/pubmed_parser/")
16427 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16428 (description
16429 "This package provides a Python parser for Pubmed Open-Access Subset and
16430MEDLINE XML repository.")
16431 (license license:expat)))
16432
16433(define-public python-pure-eval
16434 (package
16435 (name "python-pure-eval")
16436 (version "0.2.3")
16437 (source
16438 (origin
16439 (method url-fetch)
16440 (uri (pypi-uri "pure_eval" version))
16441 (sha256
16442 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16443 (build-system pyproject-build-system)
16444 (native-inputs
16445 (list python-pytest
16446 python-setuptools
16447 python-setuptools-scm
16448 python-wheel))
16449 (home-page "https://github.com/alexmojaki/pure_eval")
16450 (synopsis "Python library to evaluate abstract syntax tree nodes")
16451 (description "The @code{pure_eval} Python library can safely evaluate
16452abstract syntax tree (AST) nodes without side effects.")
16453 (license license:expat)))
16454
16455(define-public python-puremagic
16456 (package
16457 (name "python-puremagic")
16458 (version "1.28")
16459 (source
16460 (origin
16461 (method git-fetch) ;no tests in PyPI archive
16462 (uri (git-reference
16463 (url "https://github.com/cdgriffith/puremagic")
16464 (commit version)))
16465 (file-name (git-file-name name version))
16466 (sha256
16467 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16468 (build-system pyproject-build-system)
16469 (native-inputs
16470 (list python-pytest python-setuptools python-wheel))
16471 (home-page "https://github.com/cdgriffith/puremagic")
16472 (synopsis "Pure Python implementation of magic file detection")
16473 (description
16474 "This package implements a functionality that will identify a file based
16475off it's magic numbers.")
16476 (license license:expat)))
16477
16478(define-public python-ast-decompiler
16479 (package
16480 (name "python-ast-decompiler")
16481 (version "0.7.0")
16482 (source
16483 (origin
16484 (method url-fetch)
16485 (uri (pypi-uri "ast_decompiler" version))
16486 (sha256
16487 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16488 ;; We need to manually create an __init__.py file under the tests/
16489 ;; directory, since it is not included in the distributed
16490 ;; version. (See:
16491 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16492 (modules '((guix build utils)))
16493 (snippet '(call-with-output-file "tests/__init__.py"
16494 (const #t)))))
16495 (build-system pyproject-build-system)
16496 (native-inputs (list python-flit-core python-pytest))
16497 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16498 (synopsis
16499 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16500 (description
16501 "This library provides functionality to decompile @acronym{AST, Abstract
16502Syntax Tree} objects, as generated by the standard library @code{ast} module,
16503to Python code.")
16504 (license license:asl2.0)))
16505
16506(define-public python-asttokens
16507 (package
16508 (name "python-asttokens")
16509 (version "3.0.1")
16510 (source
16511 (origin
16512 (method git-fetch)
16513 (uri (git-reference
16514 (url "https://github.com/gristlabs/asttokens")
16515 (commit (string-append "v" version))))
16516 (file-name (git-file-name name version))
16517 (sha256 (base32 "1qqi7dygcv58czrsafc4gf41prfb6shd0crx33kd9wypk0v29afn"))))
16518 (build-system pyproject-build-system)
16519 (native-inputs
16520 (list python-astroid
16521 python-pytest
16522 python-setuptools
16523 python-setuptools-scm))
16524 (home-page "https://github.com/gristlabs/asttokens")
16525 (synopsis "Python library to annotate abstract syntax trees")
16526 (description "The @code{asttokens} module annotates Python abstract syntax
16527trees (ASTs) with the positions of tokens and text in the source code that
16528generated them. It makes it possible for tools that work with logical AST
16529nodes to find the particular text that resulted in those nodes, for example
16530for automated refactoring or highlighting.")
16531 (license license:asl2.0)))
16532
16533(define-public python-littleutils
16534 (package
16535 (name "python-littleutils")
16536 (version "0.2.4")
16537 (source
16538 (origin
16539 (method url-fetch)
16540 (uri (pypi-uri "littleutils" version))
16541 (sha256
16542 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16543 (build-system pyproject-build-system)
16544 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16545 (native-inputs
16546 (list python-setuptools
16547 python-setuptools-scm
16548 python-wheel))
16549 (home-page "https://github.com/alexmojaki/littleutils")
16550 (synopsis "Python utility function collection")
16551 (description "@code{littleutils} is a small collection of Python utility
16552functions, useful in the context of writing unit tests among other uses.")
16553 (license license:expat)))
16554
16555(define-public python-ipython
16556 (package
16557 (name "python-ipython")
16558 (version "9.8.0")
16559 (source
16560 (origin
16561 (method git-fetch)
16562 (uri (git-reference
16563 (url "https://github.com/ipython/ipython")
16564 (commit version)))
16565 (file-name (git-file-name name version))
16566 (sha256
16567 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16568 (build-system pyproject-build-system)
16569 (arguments
16570 (list
16571 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16572 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16573 #:test-backend #~'custom
16574 ;; XXX: It's a workaround to fix the error with module import
16575 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16576 ;; <https://codeberg.org/guix/guix/issues/2108>.
16577 #:test-flags
16578 #~(list "-m" "pytest" "-vv"
16579 "-k" (string-join
16580 ;; These need git.
16581 (list "not test_json_getsysinfo"
16582 "IPython.utils.sysinfo.sys_info"
16583 ;; Failed: DID NOT RAISE
16584 "test_timeit_raise_on_interrupt"
16585 "test_script_raise_on_interrupt"
16586 "test_time_raise_on_interrupt")
16587 " and not "))
16588 #:phases
16589 #~(modify-phases %standard-phases
16590 (add-before 'check 'pre-check
16591 (lambda _
16592 (setenv "HOME" "/tmp"))))))
16593 (propagated-inputs
16594 (list python-decorator
16595 python-ipython-pygments-lexers
16596 python-jedi
16597 python-matplotlib-inline
16598 python-pexpect
16599 python-prompt-toolkit
16600 python-pygments
16601 python-stack-data
16602 python-traitlets
16603 python-typing-extensions))
16604 (native-inputs
16605 (list python-pytest
16606 python-pytest-asyncio
16607 python-setuptools
16608 python-testpath
16609 ;; [extra]
16610 ;; python-curio ;deprecated
16611 ;; python-ipykernel ;cycles
16612 ;; python-jupyter-ai ;not packaged
16613 python-matplotlib
16614 ;; python-nbclient ;cycles
16615 python-nbformat
16616 python-numpy
16617 python-pandas
16618 python-trio))
16619 (home-page "https://ipython.org")
16620 (synopsis "IPython is a tool for interactive computing in Python")
16621 (description
16622 "IPython provides a rich architecture for interactive computing with:
16623Powerful interactive shells, a browser-based notebook, support for interactive
16624data visualization, embeddable interpreters and tools for parallel
16625computing.")
16626 (properties '((cpe-name . "ipython")))
16627 (license license:bsd-3)))
16628
16629(define-public python-ipython-documentation
16630 (package
16631 (inherit python-ipython)
16632 (name "python-ipython-documentation")
16633 (version (package-version python-ipython))
16634 (arguments
16635 (list
16636 #:phases
16637 #~(modify-phases %standard-phases
16638 (add-after 'unpack 'set-pythonpath
16639 (lambda _
16640 ;; Ensure this fixed (via the
16641 ;; "python-ipython-documentation-chars.patch" patch) copy of
16642 ;; IPython gets used.
16643 (setenv "PYTHONPATH" (string-append (getcwd)))))
16644 (delete 'build)
16645 (delete 'check)
16646 (replace 'install
16647 (lambda* (#:key outputs #:allow-other-keys)
16648 (let* ((data (string-append #$output "/share"))
16649 (doc (string-append data "/doc/" #$name "-" #$version))
16650 (html (string-append doc "/html"))
16651 (info (string-append data "/info")))
16652 (invoke "make" "-C" "docs" "info" "html"
16653 (string-append "SPHINXOPTS=-j"
16654 (number->string (parallel-job-count))))
16655 (install-file "COPYING.rst" doc)
16656 (copy-recursively "examples" (string-append doc "/examples"))
16657 ;; Install HTML documentation.
16658 (copy-recursively "docs/build/html" html)
16659 ;; Likewise for the info manual.
16660 (install-file "docs/build/texinfo/ipython.info" info)
16661 (symlink (string-append html "/_images")
16662 (string-append info "/ipython-figures"))))))))
16663 (native-inputs
16664 (list graphviz
16665 python-docrepr
16666 python-ipykernel
16667 python-sphinx
16668 python-sphinx-rtd-theme
16669 python-sphinx-toml
16670 texinfo))))
16671
16672;; A bare minimal package, mainly to use in tests and reduce closure
16673;; size. Tests are left out in the main package to slim down native-inputs.
16674(define-public python-ipython-minimal
16675 (package/inherit python-ipython
16676 (name "python-ipython-minimal")
16677 (arguments
16678 (list #:tests? #f))
16679 (native-inputs
16680 (list python-setuptools))))
16681
16682(define-public python-ipython-pygments-lexers
16683 (package
16684 (name "python-ipython-pygments-lexers")
16685 (version "1.1.1")
16686 (source
16687 (origin
16688 (method git-fetch)
16689 (uri (git-reference
16690 (url "https://github.com/ipython/ipython-pygments-lexers/")
16691 (commit version)))
16692 (file-name (git-file-name name version))
16693 (sha256
16694 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16695 (build-system pyproject-build-system)
16696 (propagated-inputs (list python-pygments))
16697 (native-inputs (list python-flit-core python-pytest))
16698 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16699 (synopsis "Plugin for IPython code sessions")
16700 (description
16701 "This package defines a variety of Pygments lexers for highlighting IPython
16702code.")
16703 (license license:bsd-3)))
16704
16705(define-public python-pydbus
16706 (package
16707 (name "python-pydbus")
16708 (version "0.6.0")
16709 (source
16710 (origin
16711 (method url-fetch)
16712 (uri (pypi-uri "pydbus" version))
16713 (sha256
16714 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16715 (build-system pyproject-build-system)
16716 (arguments
16717 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16718 #:phases
16719 #~(modify-phases %standard-phases
16720 (add-after 'unpack 'fix-comparability-with-pygobject
16721 (lambda _
16722 (substitute* "pydbus/_inspect3.py"
16723 (("getargspec")
16724 "getfullargspec")))))))
16725 (native-inputs
16726 (list python-setuptools
16727 python-wheel))
16728 (propagated-inputs
16729 (list python-pygobject))
16730 (home-page "https://github.com/LEW21/pydbus")
16731 (synopsis "Pythonic D-Bus library")
16732 (description
16733 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16734Pydbus can be used to access remote objects and also for object publication.
16735It is based on PyGI, the Python GObject Introspection bindings, which is the
16736recommended way to use GLib from Python.")
16737 (license license:lgpl2.1+)))
16738
16739(define-public python-dbus-1.2
16740 (package
16741 (name "python-dbus")
16742 (version "1.2.18")
16743 (source
16744 (origin
16745 (method url-fetch)
16746 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16747 "dbus-python-" version ".tar.gz"))
16748 (sha256
16749 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16750 (build-system gnu-build-system)
16751 (native-inputs
16752 (list pkg-config
16753 python-setuptools))
16754 (inputs
16755 `(("python" ,python-wrapper)
16756 ("dbus-glib" ,dbus-glib)))
16757 (synopsis "Python bindings for D-bus")
16758 (description "python-dbus provides bindings for libdbus, the reference
16759implementation of D-Bus.")
16760 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16761 (license license:expat)))
16762
16763(define-public python-dasbus
16764 (package
16765 (name "python-dasbus")
16766 (version "1.7")
16767 (source
16768 (origin
16769 (method git-fetch)
16770 (uri (git-reference
16771 (url "https://github.com/dasbus-project/dasbus")
16772 (commit (string-append "v" version))))
16773 (file-name (git-file-name name version))
16774 (sha256
16775 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16776 (build-system pyproject-build-system)
16777 (arguments
16778 (list
16779 #:phases
16780 #~(modify-phases %standard-phases
16781 (replace 'check
16782 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16783 (when tests?
16784 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16785 (native-inputs
16786 (list dbus
16787 python-hatchling
16788 python-pytest
16789 python-setuptools))
16790 (propagated-inputs
16791 (list python-pygobject))
16792 (home-page "https://dasbus.readthedocs.io/")
16793 (synopsis "DBus library in Python")
16794 (description
16795 "This DBus library is written in Python, based on GLib and inspired by
16796@code{pydbus}.")
16797 (license license:lgpl2.1+)))
16798
16799(define-public python-notify2
16800 (package
16801 (name "python-notify2")
16802 (version "0.3.1")
16803 (source
16804 (origin
16805 (method url-fetch)
16806 (uri (pypi-uri "notify2" version))
16807 (sha256
16808 (base32
16809 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16810 (build-system pyproject-build-system)
16811 (arguments (list #:tests? #f)) ; tests depend on system state
16812 (native-inputs (list python-setuptools))
16813 (propagated-inputs (list python-dbus))
16814 (home-page "https://bitbucket.org/takluyver/pynotify2")
16815 (synopsis "Python interface to D-Bus notifications")
16816 (description
16817 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16818It is a reimplementation of pynotify in pure Python, and an alternative to
16819the GObject Introspection bindings to libnotify for non-GTK applications.")
16820 (license (list license:bsd-2
16821 license:lgpl2.1+))))
16822
16823;; beautifulsoup4 has a totally different namespace than 3.x,
16824;; and pypi seems to put it under its own name, so I guess we should too
16825(define-public python-beautifulsoup4
16826 (package
16827 (name "python-beautifulsoup4")
16828 (version "4.14.3")
16829 (source
16830 (origin
16831 (method url-fetch)
16832 (uri (pypi-uri "beautifulsoup4" version))
16833 (sha256
16834 (base32
16835 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16836 (build-system pyproject-build-system)
16837 (native-inputs
16838 (list python-hatchling
16839 python-pytest))
16840 (propagated-inputs
16841 (list python-soupsieve
16842 python-typing-extensions
16843 ;; [optional]
16844 python-cchardet
16845 python-chardet
16846 python-charset-normalizer
16847 python-html5lib
16848 python-lxml))
16849 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16850 (synopsis "Python screen-scraping library")
16851 (description
16852 "Beautiful Soup is a Python library designed for rapidly setting up
16853screen-scraping projects. It offers Pythonic idioms for navigating,
16854searching, and modifying a parse tree, providing a toolkit for
16855dissecting a document and extracting what you need. It automatically
16856converts incoming documents to Unicode and outgoing documents to UTF-8.")
16857 (license license:expat)))
16858
16859(define-public python-beautifulsoup4-bootstrap
16860 (hidden-package
16861 (package/inherit python-beautifulsoup4
16862 (arguments
16863 (list #:tests? #f))
16864 (native-inputs
16865 (list python-hatchling))
16866 (propagated-inputs '()))))
16867
16868
16869(define-public python-netifaces
16870 (package
16871 (name "python-netifaces")
16872 (version "0.11.0")
16873 (source
16874 (origin
16875 (method url-fetch)
16876 (uri (pypi-uri "netifaces" version))
16877 (sha256
16878 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16879 (build-system pyproject-build-system)
16880 (arguments
16881 (list
16882 #:test-backend #~'custom
16883 #:test-flags #~(list "test.py")))
16884 (native-inputs (list python-setuptools))
16885 (home-page "https://github.com/al45tair/netifaces")
16886 (synopsis "Python module for portable network interface information")
16887 (description
16888 "Netifaces is a Python module providing information on network
16889interfaces in an easy and portable manner.")
16890 (license license:expat)))
16891
16892(define-public python-networkx
16893 (package
16894 (name "python-networkx")
16895 (version "3.4.2")
16896 (source
16897 (origin
16898 (method url-fetch)
16899 (uri (pypi-uri "networkx" version))
16900 (sha256
16901 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16902 (build-system pyproject-build-system)
16903 (arguments
16904 (list
16905 #:test-flags
16906 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16907 (native-inputs
16908 (list python-pytest
16909 python-pytest-xdist
16910 python-setuptools
16911 python-wheel))
16912 (propagated-inputs
16913 (list python-decorator))
16914 (home-page "https://networkx.github.io/")
16915 (synopsis "Python module for creating and manipulating graphs and networks")
16916 (description
16917 "NetworkX is a Python package for the creation, manipulation, and study
16918of the structure, dynamics, and functions of complex networks.")
16919 (license license:bsd-3)))
16920
16921(define-public python-datrie
16922 (package
16923 (name "python-datrie")
16924 (version "0.8.3")
16925 (source
16926 (origin
16927 (method git-fetch)
16928 (uri (git-reference
16929 (url "https://github.com/kmike/datrie")
16930 (commit version)))
16931 (file-name (git-file-name name version))
16932 (sha256
16933 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16934 (build-system pyproject-build-system)
16935 (arguments
16936 (list
16937 #:phases
16938 #~(modify-phases %standard-phases
16939 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16940 (lambda* (#:key inputs #:allow-other-keys)
16941 (let* ((headers (search-input-directory inputs
16942 "include/datrie"))
16943 (base (dirname (dirname headers))))
16944 (symlink headers "libdatrie/datrie")
16945 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16946 (add-before 'build 'relax-gcc-14-strictness
16947 (lambda _
16948 (setenv "CFLAGS"
16949 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16950 (native-inputs
16951 (list python-cython python-hypothesis python-pytest python-setuptools))
16952 (inputs (list libdatrie))
16953 (home-page "https://github.com/kmike/datrie")
16954 (synopsis "Fast, efficiently stored trie for Python")
16955 (description
16956 "This package provides a fast, efficiently stored trie implementation for
16957Python.")
16958 (license license:lgpl2.1+)))
16959
16960(define-public python-amply
16961 (package
16962 (name "python-amply")
16963 (version "0.1.6")
16964 (source
16965 (origin
16966 (method url-fetch)
16967 (uri (pypi-uri "amply" version))
16968 (sha256
16969 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16970 (build-system pyproject-build-system)
16971 (native-inputs
16972 (list python-pytest
16973 python-setuptools
16974 python-setuptools-scm
16975 python-wheel))
16976 (propagated-inputs
16977 (list python-docutils
16978 python-pyparsing))
16979 (home-page "https://github.com/willu47/amply")
16980 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16981 (description
16982 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16983structures.")
16984 (license license:epl1.0)))
16985
16986(define-public python-pulp
16987 (package
16988 (name "python-pulp")
16989 (version "3.3.2")
16990 (source
16991 (origin
16992 (method git-fetch)
16993 (uri (git-reference
16994 (url "https://github.com/coin-or/pulp")
16995 (commit version)))
16996 (file-name (git-file-name name version))
16997 (sha256
16998 (base32 "1vagp2xg4kl7swrd7snf1dlrj5mgccbascy30j4zncvi9cplyxfk"))
16999 (snippet
17000 #~(begin
17001 ;; The solverdir contains several binaries; use the Guix cbc
17002 ;; package instead.
17003 (use-modules (guix build utils))
17004 (delete-file-recursively "pulp/solverdir")))))
17005 (build-system pyproject-build-system)
17006 (arguments
17007 (list
17008 #:phases
17009 #~(modify-phases %standard-phases
17010 (add-after 'unpack 'use-system-cbc
17011 (lambda* (#:key inputs #:allow-other-keys)
17012 (substitute* "pyproject.toml"
17013 ;; Do not copy the binaries.
17014 ((".*solverdir.*") ""))
17015 (let ((cbc (search-input-file inputs "/bin/cbc")))
17016 ;; PuLP default points to pulp/solverdir/../cbc,
17017 ;; use cbc from Guix instead.
17018 (substitute* "pulp/apis/coin_api.py"
17019 ((".*solverdir.*")
17020 (string-append " r\"" cbc "\"\n")))))))))
17021 (native-inputs
17022 (list python-pytest
17023 python-setuptools))
17024 (inputs
17025 (list cbc)) ;TODO: Add more solvers? Like highs
17026 (home-page "https://github.com/coin-or/pulp")
17027 (synopsis "Linear Programming modeler")
17028 (description
17029 "PuLP is a Linear Programming modeler written in Python. PuLP can
17030generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
17031solve linear problems.")
17032 (license license:expat)))
17033
17034(define-public python-py-partiql-parser
17035 (package
17036 (name "python-py-partiql-parser")
17037 (version "0.6.3")
17038 (source
17039 (origin
17040 (method git-fetch)
17041 (uri (git-reference
17042 (url "https://github.com/getmoto/py-partiql-parser")
17043 (commit version)))
17044 (file-name (git-file-name name version))
17045 (sha256
17046 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
17047 (build-system pyproject-build-system)
17048 (native-inputs
17049 (list python-hatchling
17050 python-pytest))
17051 (home-page "https://pypi.org/project/py-partiql-parser/")
17052 (synopsis "Pure Python PartiQL Parser")
17053 (description
17054 "This package provides a tokenizer/parser/executor for the PartiQL
17055language, in Python.")
17056 (license license:expat)))
17057
17058(define-public python-py-tes
17059 (package
17060 (name "python-py-tes")
17061 (version "0.4.2")
17062 (source
17063 (origin
17064 (method git-fetch)
17065 (uri (git-reference
17066 (url "https://github.com/ohsu-comp-bio/py-tes")
17067 (commit version)))
17068 (file-name (git-file-name name version))
17069 (sha256
17070 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
17071 (build-system pyproject-build-system)
17072 (native-inputs
17073 (list python-pytest python-requests-mock python-setuptools))
17074 (propagated-inputs
17075 (list python-attrs python-dateutil python-future python-requests))
17076 (home-page "https://github.com/ohsu-comp-bio/py-tes")
17077 (synopsis "Library for communicating with the GA4GH Task Execution API")
17078 (description "This package provides a library for communicating with the
17079GA4GH Task Execution API.")
17080 (license license:expat)))
17081
17082(define-public python-altgraph
17083 (package
17084 (name "python-altgraph")
17085 (version "0.17.4")
17086 (source
17087 (origin
17088 (method url-fetch)
17089 (uri (pypi-uri "altgraph" version))
17090 (sha256
17091 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
17092 (build-system pyproject-build-system)
17093 (native-inputs (list python-pytest python-setuptools python-wheel))
17094 (home-page "https://altgraph.readthedocs.io")
17095 (synopsis "Python graph network package")
17096 (description
17097"This package provides tools for constructing graphs, BFS and DFS
17098traversals, topological sort, shortest paths, and more with graphviz
17099output.")
17100 (license license:expat)))
17101
17102(define-public python-pyqrcode
17103 (package
17104 (name "python-pyqrcode")
17105 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
17106 (revision . "0")))
17107 (version (git-version "1.2.1"
17108 (assoc-ref properties 'revision)
17109 (assoc-ref properties 'commit)))
17110 (source
17111 (origin
17112 (method git-fetch)
17113 (uri (git-reference
17114 (url "https://github.com/mnooner256/pyqrcode")
17115 (commit (assoc-ref properties 'commit))))
17116 (file-name (git-file-name name version))
17117 (sha256
17118 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
17119 (build-system pyproject-build-system)
17120 (arguments (list #:test-backend #~'nose))
17121 (native-inputs (list python-pynose python-pypng python-setuptools))
17122 (home-page "https://github.com/mnooner256/pyqrcode")
17123 (synopsis "QR code generator")
17124 (description
17125 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
17126PNG and terminal output.")
17127 (license license:bsd-3)))
17128
17129(define-public python-seaborn
17130 ;; TODO: Move to (gnu packages statistics).
17131 (package
17132 (name "python-seaborn")
17133 ;; 0.13.2 (2024-01-25), the latest release contains known
17134 ;; incompatibilities, see:
17135 ;; <https://github.com/mwaskom/seaborn/issues/3892>,
17136 ;; <https://github.com/mwaskom/seaborn/issues/3893>.
17137 (properties '((commit . "32088bbc3adc611b7118e57fce6d4ed096a76a29")
17138 (revision . "0")))
17139 (version (git-version "0.13.2"
17140 (assoc-ref properties 'revision)
17141 (assoc-ref properties 'commit)))
17142 (source
17143 (origin
17144 (method git-fetch)
17145 (uri (git-reference
17146 (url "https://github.com/mwaskom/seaborn")
17147 (commit (assoc-ref properties 'commit))))
17148 (file-name (git-file-name name version))
17149 (sha256
17150 (base32 "1d2aig4kpjc8lcvk1sp824ksy1vl17dd36s4zryhjhmz5b0idqx3"))))
17151 (build-system pyproject-build-system)
17152 (arguments
17153 (list
17154 ;; tests: 2359 passed, 16 skipped, 6 xfailed
17155 #:test-flags
17156 #~(list "--numprocesses" (number->string (parallel-job-count)))))
17157 (native-inputs
17158 (list python-flit-core
17159 python-pytest
17160 python-pytest-xdist))
17161 (propagated-inputs
17162 (list python-matplotlib
17163 python-numpy
17164 python-pandas
17165 python-scipy
17166 python-statsmodels))
17167 (home-page "https://seaborn.pydata.org/")
17168 (synopsis "Statistical data visualization")
17169 (description
17170 "Seaborn is a library for making attractive and informative statistical
17171graphics in Python. It is built on top of matplotlib and tightly integrated
17172with the PyData stack, including support for numpy and pandas data structures
17173and statistical routines from scipy and statsmodels.")
17174 (license license:bsd-3)))
17175
17176(define-public python-session-info
17177 (package
17178 (name "python-session-info")
17179 (version "1.0.0")
17180 (source
17181 (origin
17182 (method git-fetch)
17183 (uri (git-reference
17184 (url "https://gitlab.com/joelostblom/session_info")
17185 (commit version)))
17186 (file-name (git-file-name name version))
17187 (sha256
17188 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
17189 (build-system pyproject-build-system)
17190 (arguments (list #:tests? #f)) ; No tests.
17191 (native-inputs (list python-setuptools))
17192 (propagated-inputs (list python-stdlib-list))
17193 (home-page "https://gitlab.com/joelostblom/session_info")
17194 (synopsis "Output version information for modules currently loaded")
17195 (description
17196 "This package outputs version information for modules loaded in the current
17197session, Python, and the OS.")
17198 (license license:bsd-3)))
17199
17200(define-public python-mpmath
17201 (package
17202 (name "python-mpmath")
17203 (version "1.3.0")
17204 (source
17205 (origin
17206 (method git-fetch)
17207 (uri (git-reference
17208 (url "https://github.com/fredrik-johansson/mpmath")
17209 (commit version)))
17210 (file-name (git-file-name name version))
17211 (sha256
17212 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
17213 (build-system pyproject-build-system)
17214 (native-inputs
17215 (list python-pytest
17216 python-setuptools
17217 python-setuptools-scm))
17218 (home-page "https://mpmath.org")
17219 (synopsis "Arbitrary-precision floating-point arithmetic in python")
17220 (description
17221 "@code{mpmath} can be used as an arbitrary-precision substitute for
17222Python's float/complex types and math/cmath modules, but also does much
17223more advanced mathematics.")
17224 (license license:bsd-3)))
17225
17226(define-public python-bigfloat
17227 (package
17228 (name "python-bigfloat")
17229 (version "0.4.0")
17230 (source
17231 (origin
17232 (method url-fetch)
17233 (uri (pypi-uri "bigfloat" version))
17234 (sha256
17235 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
17236 (snippet '(delete-file "mpfr.c"))))
17237 (build-system pyproject-build-system)
17238 (arguments
17239 (list
17240 #:test-flags
17241 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
17242 ;; but I don't know what to do about it.
17243 '(list "-k" "not test_hash")
17244 #:phases
17245 '(modify-phases %standard-phases
17246 (add-before 'build 'cythonize
17247 (lambda _ (invoke "cython" "mpfr.pyx"))))))
17248 (inputs (list mpfr))
17249 (native-inputs
17250 (list python-cython python-pytest python-setuptools python-wheel))
17251 (propagated-inputs
17252 (list python-six))
17253 (home-page "https://github.com/mdickinson/bigfloat")
17254 (synopsis "Arbitrary precision floating-point arithmetic for Python")
17255 (description
17256 "This package provides a Python interface to the MPFR library for
17257multiprecision arithmetic.")
17258 (license license:lgpl3+)))
17259
17260(define-public python-plac
17261 (package
17262 (name "python-plac")
17263 (version "1.4.3")
17264 (source
17265 (origin
17266 (method git-fetch)
17267 (uri (git-reference
17268 (url "https://github.com/ialbert/plac")
17269 (commit (string-append "v" version))))
17270 (file-name (git-file-name name version))
17271 (sha256
17272 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
17273 (build-system pyproject-build-system)
17274 (arguments
17275 (list
17276 #:phases
17277 #~(modify-phases %standard-phases
17278 (add-after 'unpack 'fix-tkinter
17279 (lambda _
17280 (substitute* "plac_tk.py"
17281 (("from Tkinter import Tk")
17282 "from tkinter import Tk")
17283 (("from ScrolledText import ScrolledText")
17284 "from tkinter.scrolledtext import ScrolledText")))))))
17285 (native-inputs
17286 (list (list python "tk") python-pytest python-setuptools))
17287 (home-page "https://github.com/ialbert/plac")
17288 (synopsis "Command line arguments parser")
17289 (description
17290 "This package can generate command line parameters from function
17291signatures.")
17292 (license license:bsd-3)))
17293
17294(define-public python-q
17295 (package
17296 (name "python-q")
17297 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
17298 (revision . "0")))
17299 (version (git-version "2.7"
17300 (assoc-ref properties 'revision)
17301 (assoc-ref properties 'commit)))
17302 (source
17303 (origin
17304 (method git-fetch)
17305 (uri (git-reference
17306 (url "https://github.com/zestyping/q")
17307 (commit (assoc-ref properties 'commit))))
17308 (file-name (git-file-name name version))
17309 (sha256
17310 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
17311 (build-system pyproject-build-system)
17312 (arguments
17313 (list
17314 ;; Deduced from the makefile.
17315 #:test-backend #~'custom
17316 #:test-flags #~(list "test/test_basic.py")
17317 #:phases
17318 #~(modify-phases %standard-phases
17319 (add-before 'check 'configure-tests
17320 (lambda* (#:key tests? #:allow-other-keys)
17321 (when tests?
17322 (setenv "TMPDIR" "/tmp")))))))
17323 (native-inputs (list python-setuptools))
17324 (home-page "https://github.com/zestyping/q")
17325 (synopsis "Quick-and-dirty debugging output for tired programmers")
17326 (description
17327 "q is a Python module for \"print\" style of debugging Python code. It
17328provides convenient short API for print out of values, tracebacks, and
17329falling into the Python interpreter.")
17330 (license license:asl2.0)))
17331
17332(define-public python-qnorm
17333 (package
17334 (name "python-qnorm")
17335 (version "0.9.0")
17336 (source
17337 (origin
17338 (method git-fetch)
17339 (uri (git-reference
17340 (url "https://github.com/Maarten-vd-Sande/qnorm")
17341 (commit (string-append "v" version))))
17342 (file-name (git-file-name name version))
17343 (sha256
17344 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
17345 (build-system pyproject-build-system)
17346 (arguments
17347 (list
17348 #:phases
17349 #~(modify-phases %standard-phases
17350 (add-after 'unpack 'fix-pandas-3
17351 (lambda _
17352 ;; Pandas 3.0 removed the implicit engine fallback that used
17353 ;; to switch to the Python engine whenever sep=None was
17354 ;; passed without an explicit 'engine', which get_delim()
17355 ;; relied on for delimiter auto-detection
17356 ;; Try removing the phase on the next update.
17357 (substitute* "qnorm/util.py"
17358 (("table, sep=None, iterator=True")
17359 "table, sep=None, engine=\"python\", iterator=True")))))))
17360 (propagated-inputs
17361 (list python-numba python-numpy python-pandas
17362 ;; XXX: pandas optional dependencies.
17363 python-tables python-pyarrow python-fastparquet))
17364 (native-inputs (list python-setuptools))
17365 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
17366 (synopsis "Quantile normalization")
17367 (description
17368 "This tool implements quantile normalization. It properly resolves rank
17369ties, which is important when ties happen frequently, such as when working
17370with discrete numbers (integers) in count tables. This implementation should
17371be relatively fast, and can use multiple cores to sort the columns and
17372tie-resolvement is accelerated by numba.")
17373 (license license:expat)))
17374
17375(define-public python-quantlaw
17376 (package
17377 (name "python-quantlaw")
17378 (version "0.0.7")
17379 (source
17380 (origin
17381 (method git-fetch)
17382 (uri (git-reference
17383 (url "https://github.com/Quantlaw/quantlaw")
17384 (commit (string-append "v" version))))
17385 (file-name (git-file-name name version))
17386 (sha256
17387 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
17388 (build-system pyproject-build-system)
17389 (arguments
17390 (list
17391 #:test-flags
17392 #~(list "-k"
17393 ;; test expects network access
17394 "not test_load_statue_names")))
17395 (native-inputs (list python-pytest python-setuptools))
17396 (propagated-inputs (list python-beautifulsoup4 python-networkx
17397 python-pandas python-regex python-requests))
17398 (home-page "https://quantlaw.readthedocs.io/")
17399 (synopsis "Coding utilities for quantitative legal studies")
17400 (description
17401 "This package provides coding utilities for quantitative legal studies.")
17402 (license license:bsd-3)))
17403
17404(define-public python-singledispatch
17405 (package
17406 (name "python-singledispatch")
17407 (version "4.0.0")
17408 (source
17409 (origin
17410 (method url-fetch)
17411 (uri (pypi-uri "singledispatch" version))
17412 (sha256
17413 (base32
17414 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
17415 (build-system pyproject-build-system)
17416 (native-inputs
17417 (list python-pytest
17418 python-setuptools
17419 python-six ; required for conversion, not at run-time
17420 python-wheel))
17421 (home-page
17422 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
17423 (synopsis "Backport of singledispatch feature from Python 3.4")
17424 (description
17425 "This library brings functools.singledispatch from Python 3.4 to Python
174262.6-3.3.")
17427 (license license:expat)))
17428
17429(define-public python-pyzmq
17430 (package
17431 (name "python-pyzmq")
17432 (version "27.1.0")
17433 (source
17434 (origin
17435 (method git-fetch)
17436 (uri (git-reference
17437 (url "https://github.com/zeromq/pyzmq")
17438 (commit (string-append "v" version))))
17439 (file-name (git-file-name name version))
17440 (sha256
17441 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
17442 (build-system pyproject-build-system)
17443 (arguments
17444 (list
17445 #:test-flags
17446 '(list "-m" "not flaky")
17447 #:phases
17448 #~(modify-phases %standard-phases
17449 (add-before 'build 'configure
17450 (lambda _
17451 ;; Our zeromq package is built with '--enable-drafts'; also
17452 ;; enable draft support for pyzmq so the draft test passes.
17453 (setenv "ZMQ_DRAFT_API" "1")
17454 ;; Make sure to prevent building bundled libzmq.
17455 (setenv "PYZMQ_NO_BUNDLE" "1")))
17456 (add-before 'check 'delete-source
17457 ;; To prevent loading it and skip build extensions one more times.
17458 (lambda _
17459 (delete-file-recursively "zmq"))))))
17460 (native-inputs
17461 (list cmake-minimal
17462 ;; python-cffi ; for PyPy
17463 python-cython
17464 python-packaging
17465 python-pytest
17466 python-pytest-asyncio
17467 python-scikit-build-core
17468 python-tornado))
17469 (inputs
17470 (list libsodium
17471 zeromq))
17472 (home-page "https://github.com/zeromq/pyzmq")
17473 (synopsis "Python bindings for 0MQ")
17474 (description
17475 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17476 (license license:bsd-4)))
17477
17478(define-public python-immutabledict
17479 (package
17480 (name "python-immutabledict")
17481 (version "4.2.0")
17482 (source
17483 (origin
17484 (method url-fetch)
17485 (uri (pypi-uri "immutabledict" version))
17486 (sha256
17487 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17488 (build-system pyproject-build-system)
17489 (native-inputs
17490 (list python-poetry-core python-pytest))
17491 (home-page "https://github.com/corenting/immutabledict")
17492 (synopsis "Immutable wrapper around dictionaries")
17493 (description
17494 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17495It implements the complete mapping interface and can be used as a drop-in
17496replacement for dictionaries where immutability is desired.")
17497 (license license:expat)))
17498
17499(define-public python-emoji
17500 (package
17501 (name "python-emoji")
17502 (version "2.12.1")
17503 (source
17504 (origin
17505 (method url-fetch)
17506 (uri (pypi-uri "emoji" version))
17507 (sha256
17508 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17509 (build-system pyproject-build-system)
17510 (propagated-inputs (list python-typing-extensions))
17511 (native-inputs
17512 (list python-pytest
17513 python-setuptools
17514 python-wheel))
17515 (home-page "https://github.com/carpedm20/emoji/")
17516 (synopsis "Emoji terminal output for Python")
17517 (description
17518 "This package provides Emoji terminal output for Python. The
17519entire set of Emoji codes as defined by the Unicode Consortium is supported in
17520addition to a bunch of aliases.")
17521 (license license:bsd-3)))
17522
17523;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17524;; latest version. The latest gh-md-to-html does not build successfully from
17525;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17526;; version 1.21.2 from failing.
17527;; https://issues.guix.gnu.org/72102
17528;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17529(define-public python-emoji-for-gh-md-to-html
17530 (package
17531 (inherit python-emoji)
17532 (version "1.6.1")
17533 (source
17534 (origin
17535 (method url-fetch)
17536 (uri (pypi-uri "emoji" version))
17537 (sha256
17538 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17539
17540(define-public python-sarge
17541 (package
17542 (name "python-sarge")
17543 (version "0.1.7.post1") ;post release only to correct errors in metadata
17544 (source
17545 (origin
17546 (method git-fetch)
17547 (uri (git-reference
17548 (url "https://github.com/vsajip/sarge")
17549 (commit version)))
17550 (file-name (git-file-name name version))
17551 (sha256
17552 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17553 (build-system pyproject-build-system)
17554 (native-inputs (list python-pytest python-setuptools))
17555 (home-page "https://docs.red-dove.com/sarge/")
17556 (synopsis "Subprocess wrapper with command pipeline functionality")
17557 (description "@code{sarge} is a wrapper for subprocess which provides
17558command pipeline functionality.")
17559 (license license:bsd-3)))
17560
17561(define-public python-sentry-sdk
17562 ;; TODO: Move to (gnu packages python-web).
17563 (package
17564 (name "python-sentry-sdk")
17565 (version "2.59.0")
17566 (source
17567 (origin
17568 (method git-fetch)
17569 (uri (git-reference
17570 (url "https://github.com/getsentry/sentry-python")
17571 (commit version)))
17572 (file-name (git-file-name name version))
17573 (sha256
17574 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17575 (build-system pyproject-build-system)
17576 (arguments
17577 (list
17578 ;; tests: 2119 passed, 128 skipped, 224 warnings
17579 #:test-flags
17580 #~(list "--durations=10"
17581 "--numprocesses" (number->string (parallel-job-count))
17582 ;; The whole test suite is quite shaky, may fail unpredictably
17583 ;; and depends on many additional inputs to enable all
17584 ;; integration tests.
17585 "-k" (string-join
17586 (list "not test_aggregates"
17587 "test_aggregates_deprecated"
17588 (string-append "test_aggregates_explicitly_disabled"
17589 "_session_tracking_request_mode")
17590 (string-append "test_aggregates_explicitly_disabled"
17591 "_session_tracking_request"
17592 "_mode_deprecated")
17593 "test_auto_session_tracking_with_aggregates[False]"
17594 "test_auto_session_tracking_with_aggregates[True]"
17595 "test_basic"
17596 "test_default_attributes"
17597 "test_default_release"
17598 (string-append "test_ensure_integration_enabled"
17599 "_no_original_function_enabled")
17600 "test_logger_with_all_attributes"
17601 "test_merging"
17602 (string-append "test_session_mode_defaults_to"
17603 "_request_mode_in_wsgi_handler"))
17604 " and not "))
17605 #:phases
17606 #~(modify-phases %standard-phases
17607 (add-after 'unpack 'fix-pytest-config
17608 (lambda _
17609 ;; Tests run in debug mode which generats a lot of noise.
17610 (delete-file "tox.ini")
17611 (substitute* "pyproject.toml"
17612 (("addopts =.*") "")))))))
17613 (native-inputs
17614 (list nss-certs-for-test
17615 python-brotli
17616 python-jsonschema
17617 python-mock
17618 python-pysocks
17619 python-pytest
17620 python-pytest-aiohttp
17621 python-pytest-asyncio
17622 python-pytest-localserver
17623 python-pytest-timeout
17624 python-pytest-xdist
17625 python-responses
17626 python-setuptools
17627 python-socksio))
17628 (propagated-inputs
17629 (list python-certifi
17630 python-urllib3
17631 ;; [optional]
17632 ;; python-unleashclient
17633 python-aiohttp
17634 ;; python-anthropic
17635 ;; python-apache-beam
17636 ;; python-arq
17637 python-asttokens
17638 ;; python-asyncpg
17639 ;; python-blinker
17640 ;; python-bottle
17641 ;; python-celery
17642 ;; python-celery-redbeat
17643 ;; python-chalice
17644 ;; python-clickhouse-driver
17645 ;; python-django
17646 python-executing
17647 ;; python-falcon
17648 ;; python-fastapi
17649 ;; python-flask
17650 ;; python-google-genai
17651 ;; python-grpcio
17652 python-httpcore
17653 ;; python-httpx
17654 ;; python-huey
17655 ;; python-huggingface-hub
17656 ;; python-langchain
17657 ;; python-langgraph
17658 ;; python-launchdarkly-server-sdk
17659 ;; python-litellm
17660 ;; python-litestar
17661 ;; python-loguru
17662 ;; python-markupsafe
17663 ;; python-mcp
17664 ;; python-openai
17665 ;; python-openfeature-sdk
17666 ;; python-opentelemetry-distro
17667 ;; python-protobuf
17668 ;; python-pure-eval
17669 ;; python-pydantic-ai
17670 ;; python-pymongo
17671 ;; python-pyspark
17672 ;; python-quart
17673 ;; python-rq
17674 ;; python-sanic
17675 ;; python-sqlalchemy
17676 ;; python-starlette
17677 ;; python-starlite
17678 ;; python-statsig
17679 ;; python-tiktoken
17680 #;python-tornado))
17681 (home-page "https://github.com/getsentry/sentry-python")
17682 (synopsis "Python SDK for Sentry")
17683 (description "This package provides a Python SDK for the Sentry
17684application monitoring and error tracking software.")
17685 (license license:bsd-2)))
17686
17687;; A bare minimal package, mainly to use in tests and reduce closure
17688;; size. Tests are left out in the main package to slim down native-inputs.
17689(define-public python-sentry-sdk-minimal
17690 (package/inherit python-sentry-sdk
17691 (name "python-sentry-sdk-minimal")
17692 (arguments
17693 (list #:tests? #f))
17694 (native-inputs
17695 (list python-setuptools))
17696 (propagated-inputs
17697 (list python-certifi
17698 python-urllib3))))
17699
17700(define-public python-pep440
17701 (package
17702 (name "python-pep440")
17703 (version "0.1.2")
17704 (source
17705 (origin
17706 (method url-fetch)
17707 (uri (pypi-uri "pep440" version))
17708 (sha256
17709 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17710 (build-system pyproject-build-system)
17711 (arguments
17712 ;; This checks for "pep440" in the output, but we actually print
17713 ;; ".pep440-real" due to wrapping.
17714 (list #:test-flags '(list "-k" "not test_cli_help")))
17715 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17716 python-pytest-console-scripts python-pytest-cov))
17717 (native-inputs (list python-flit-core))
17718 (home-page "https://pypi.org/project/pep440/")
17719 (synopsis "Utils to check whether versions number match PEP 440")
17720 (description
17721 "This package provides a simple package with utils to check whether
17722versions number match PEP 440.")
17723 (license license:expat)))
17724
17725(define-public python-pyproject-metadata
17726 (package
17727 (name "python-pyproject-metadata")
17728 (version "0.11.0")
17729 (source
17730 (origin
17731 (method git-fetch)
17732 (uri (git-reference
17733 (url "https://github.com/FFY00/python-pyproject-metadata")
17734 (commit version)))
17735 (file-name (git-file-name name version))
17736 (sha256
17737 (base32 "0f838jc5m8f3f4gazzsidhk6x2d359g53ysa0bp0fw11jsv1n2vp"))))
17738 (build-system pyproject-build-system)
17739 (propagated-inputs (list python-packaging))
17740 (native-inputs
17741 (list python-flit-core python-pytest python-tomli))
17742 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17743 (synopsis "Dataclass for PEP 621 metadata")
17744 (description "This project does not implement the parsing of
17745@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17746data structure representing PEP 621 metadata (already parsed), it will
17747validate this input and generate a PEP 643-compliant metadata
17748file (e.g. @file{PKG-INFO}).")
17749 (license license:expat)))
17750
17751(define-public python-meson
17752 (package
17753 (name "python-meson")
17754 (version "0.19.0")
17755 (source
17756 (origin
17757 (method git-fetch)
17758 (uri (git-reference
17759 (url "https://github.com/mesonbuild/meson-python")
17760 (commit version)))
17761 (file-name (git-file-name name version))
17762 (sha256
17763 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17764 (build-system pyproject-build-system)
17765 ;; tests: 124 passed, 16 skipped
17766 (native-inputs
17767 (list git-minimal/pinned
17768 patchelf
17769 python-pytest
17770 python-pytest-mock))
17771 (propagated-inputs
17772 (list meson
17773 ninja
17774 python-cython
17775 python-packaging
17776 python-pyproject-metadata))
17777 (home-page "https://github.com/mesonbuild/meson-python")
17778 (synopsis "Meson Python build backend (PEP 517)")
17779 (description "This package provides a PEP 517 build backend that makes
17780use of the Meson build system.")
17781 (license license:expat)))
17782
17783(define-public python-mfusepy
17784 (package
17785 (name "python-mfusepy")
17786 (version "3.1.1")
17787 (source
17788 (origin
17789 (method git-fetch)
17790 (uri (git-reference
17791 (url "https://github.com/mxmlnkn/mfusepy")
17792 (commit (string-append "v" version))))
17793 (file-name (git-file-name name version))
17794 (sha256
17795 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17796 (build-system pyproject-build-system)
17797 (native-inputs (list python-setuptools))
17798 (inputs (list fuse))
17799 (arguments
17800 (list
17801 #:tests? #f ; Tests require fuse kernel module
17802 #:phases
17803 #~(modify-phases %standard-phases
17804 (add-after 'unpack 'embed-libfuse
17805 (lambda* (#:key inputs #:allow-other-keys)
17806 (substitute* "mfusepy.py"
17807 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17808 (format #f "~a\"~a\"\n"
17809 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17810 (home-page "https://github.com/mxmlnkn/mfusepy")
17811 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17812 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17813 (license license:isc)))
17814
17815(define-public python-mccabe
17816 ;; Last public release (0.7.0) is from 2022-01-24.
17817 (let ((commit "292b5c71c3fe5496771b46ac9d86361c9b760d17")
17818 (revision "0"))
17819 (package
17820 (name "python-mccabe")
17821 (version (git-version "0.7.0" revision commit))
17822 (source
17823 (origin
17824 (method git-fetch)
17825 (uri (git-reference
17826 (url "https://github.com/PyCQA/mccabe")
17827 (commit commit)))
17828 (file-name (git-file-name name version))
17829 (sha256
17830 (base32 "12aa5qjzf0anx1bdfcgg4gvn9kkm1cc5qi2lzrh23c5gxyfyxw17"))))
17831 (build-system pyproject-build-system)
17832 (arguments
17833 (list
17834 #:test-flags
17835 ;; AssertionError: 0 != 1
17836 #~(list (string-append "--deselect=test_mccabe.py"
17837 "::RegressionTests::test_get_module_complexity"))))
17838 (native-inputs
17839 (list python-pytest
17840 python-setuptools))
17841 (home-page "https://github.com/PyCQA/mccabe")
17842 (synopsis "McCabe checker, plugin for flake8")
17843 (description
17844 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17845complexity of Python source code.")
17846 (license license:expat))))
17847
17848(define-public python-autoflake8
17849 (package
17850 (name "python-autoflake8")
17851 (version "0.4.0")
17852 (source (origin
17853 (method git-fetch) ;for tests
17854 (uri (git-reference
17855 (url "https://github.com/fsouza/autoflake8")
17856 (commit (string-append "v" version))))
17857 (file-name (git-file-name name version))
17858 (sha256
17859 (base32
17860 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17861 (build-system pyproject-build-system)
17862 (native-inputs
17863 (list python-aiofiles
17864 python-poetry-core
17865 python-pytest
17866 python-pytest-xdist))
17867 (propagated-inputs (list python-pyflakes))
17868 (home-page "https://github.com/fsouza/autoflake8")
17869 (synopsis "Automatically fix issues reported by flake8")
17870 (description "Tool to automatically fix some issues reported by
17871@command{flake8}.")
17872 (license license:expat)))
17873
17874(define-public python-flake8
17875 (package
17876 (name "python-flake8")
17877 (version "7.3.0")
17878 (source
17879 (origin
17880 (method git-fetch)
17881 (uri (git-reference
17882 (url "https://github.com/pycqa/flake8")
17883 (commit version)))
17884 (file-name (git-file-name name version))
17885 (sha256
17886 (base32 "0dva22djb3pdrizghvs5r1k7vr1j3khs0k9z8y6dz4ga50dli4bm"))))
17887 (build-system pyproject-build-system)
17888 (native-inputs
17889 (list python-pytest
17890 python-setuptools))
17891 (propagated-inputs
17892 (list python-mccabe
17893 python-pycodestyle
17894 python-pyflakes))
17895 (home-page "https://flake8.pycqa.org/en/latest/")
17896 (synopsis "The modular source code checker: pep8, pyflakes and co")
17897 (description
17898 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17899 (license license:expat)))
17900
17901(define-public python-flake8-blind-except
17902 (package
17903 (name "python-flake8-blind-except")
17904 (version "0.2.1")
17905 (source
17906 (origin
17907 (method git-fetch)
17908 (uri (git-reference
17909 (url "https://github.com/elijahandrews/flake8-blind-except")
17910 (commit (string-append "v" version))))
17911 (file-name (git-file-name name version))
17912 (sha256
17913 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17914 (build-system pyproject-build-system)
17915 (arguments (list #:tests? #f)) ;no tests
17916 (native-inputs (list python-setuptools))
17917 (propagated-inputs (list python-pycodestyle))
17918 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17919 (synopsis "Check for blind @code{except:} statements")
17920 (description
17921 "This package provides a flake8 extension that checks for blind
17922@code{except:} statements.")
17923 (license license:expat)))
17924
17925(define-public python-flake8-bugbear
17926 (package
17927 (name "python-flake8-bugbear")
17928 (version "24.10.31")
17929 (source
17930 (origin
17931 (method url-fetch)
17932 (uri (pypi-uri "flake8_bugbear" version))
17933 (sha256
17934 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17935 (build-system pyproject-build-system)
17936 (native-inputs
17937 (list python-hypothesmith
17938 python-pytest
17939 python-setuptools
17940 python-wheel))
17941 (propagated-inputs
17942 (list python-attrs
17943 python-flake8))
17944 (home-page "https://github.com/PyCQA/flake8-bugbear")
17945 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17946 (description
17947 "This package contains a plugin for Flake8 finding likely bugs and design
17948problems in your program. It contains warnings that don't belong in pyflakes
17949and pycodestyle.")
17950 (license license:expat)))
17951
17952(define-public python-flake8-continuation
17953 (package
17954 (name "python-flake8-continuation")
17955 (version "1.0.5")
17956 (source
17957 (origin
17958 (method git-fetch)
17959 (uri (git-reference
17960 (url "https://github.com/planetlabs/flake8-continuation")
17961 (commit version)))
17962 (file-name (git-file-name name version))
17963 (sha256
17964 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17965 (build-system pyproject-build-system)
17966 (arguments
17967 (list
17968 #:phases
17969 #~(modify-phases %standard-phases
17970 (add-after 'unpack 'remove-python-six-dependency
17971 (lambda _
17972 (substitute* "flake8_continuation.py"
17973 (("import six|six\\.moves\\.")
17974 ""))
17975 (substitute* "setup.py"
17976 ((", \"six\"")
17977 "")))))))
17978 (native-inputs (list python-pytest python-setuptools))
17979 (propagated-inputs (list python-flake8 python-pycodestyle))
17980 (home-page "https://github.com/planetlabs/flake8-continuation")
17981 (synopsis "Flake8 Line Continuation Plugin")
17982 (description
17983 "A Flake8 plugin that checks for the line continuation style to be in the
17984preferred method according to PEP-8, specifically:
17985@quotation
17986The preferred way of wrapping long lines is by using Python's implied line
17987continuation inside parentheses, brackets and braces. Long lines can be
17988broken over multiple lines by wrapping expressions in parentheses. These
17989should be used in preference to using a backslash for line continuation.
17990@end quotation")
17991 (license license:asl2.0)))
17992
17993(define-public python-flake8-debugger
17994 (package
17995 (name "python-flake8-debugger")
17996 (version "4.1.2")
17997 (source
17998 (origin
17999 (method git-fetch)
18000 (uri (git-reference
18001 (url "https://github.com/jbkahn/flake8-debugger")
18002 (commit version)))
18003 (file-name (git-file-name name version))
18004 (sha256
18005 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
18006 (build-system pyproject-build-system)
18007 (native-inputs (list python-poetry-core python-pytest python-setuptools))
18008 (propagated-inputs (list python-flake8 python-pycodestyle))
18009 (home-page "https://github.com/jbkahn/flake8-debugger")
18010 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
18011 (description
18012 "This package provides a Flake8 plugin that checks for @code{ipdb} and
18013@code{pdb} imports and set traces, as well as @code{from
18014IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
18015@code{InteractiveShellEmbed()()}.")
18016 (license license:expat)))
18017
18018(define-public python-flake8-implicit-str-concat
18019 (package
18020 (name "python-flake8-implicit-str-concat")
18021 (version "0.5.0")
18022 (source
18023 (origin
18024 (method url-fetch)
18025 (uri (pypi-uri "flake8_implicit_str_concat" version))
18026 (sha256
18027 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
18028 (build-system pyproject-build-system)
18029 (arguments
18030 (list
18031 #:tests? #f)) ; no tests in PiPY or git checkout
18032 (native-inputs
18033 (list python-hatchling))
18034 (propagated-inputs
18035 (list python-attrs
18036 python-more-itertools))
18037 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
18038 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
18039 (description
18040 "This is a plugin for the Python code checking tool Flake8 to encourage
18041correct string literal concatenation.
18042
18043It looks for style problems like implicitly concatenated string literals on
18044the same line (which can be introduced by the code formatting tool Black), or
18045unnecessary plus operators for explicit string literal concatenation.")
18046 (license license:expat)))
18047
18048(define-public python-flake8-print
18049 (package
18050 (name "python-flake8-print")
18051 (version "5.0.0")
18052 (source
18053 (origin
18054 (method url-fetch)
18055 (uri (pypi-uri "flake8-print" version))
18056 (sha256
18057 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
18058 (build-system pyproject-build-system)
18059 (arguments
18060 (list
18061 #:tests? #f)) ; no tests in PiPY or git checkout
18062 (native-inputs
18063 (list python-poetry-core))
18064 (propagated-inputs
18065 (list python-flake8
18066 python-pycodestyle))
18067 (home-page "https://github.com/jbkahn/flake8-print")
18068 (synopsis "Print statement checker plugin for Flake8")
18069 (description
18070 "This plugin for Flake8 checks for @code{print} statements in Python
18071files.")
18072 (license license:expat)))
18073
18074(define-public python-flake8-pyi
18075 (package
18076 (name "python-flake8-pyi")
18077 (version "26.5.0")
18078 (source
18079 (origin
18080 (method git-fetch)
18081 (uri (git-reference
18082 (url "https://github.com/ambv/flake8-pyi")
18083 (commit version)))
18084 (file-name (git-file-name name version))
18085 (sha256
18086 (base32 "006shfi8a99ysfac5s7fizx8f5w9hz3pl551kp9q1883rh1rfd5m"))))
18087 (build-system pyproject-build-system)
18088 (arguments
18089 (list
18090 #:phases
18091 #~(modify-phases %standard-phases
18092 (add-after 'unpack 'fix-pytest-config
18093 (lambda _
18094 ;; Prevent full threads utilization.
18095 (substitute* "pyproject.toml"
18096 (("-nauto") "")))))))
18097 (native-inputs
18098 (list python-hatch-vcs
18099 python-hatchling
18100 python-pytest))
18101 (propagated-inputs
18102 (list python-attrs
18103 python-flake8
18104 python-pyflakes))
18105 (home-page "https://github.com/ambv/flake8-pyi")
18106 (synopsis "Flake8 plugin for type hinting stub files")
18107 (description
18108 "This package contains a plugin that provides specializations for type
18109hinting stub files, especially interesting for linting typeshed. It adds the
18110@file{.pyi} extension to the default value of the @code{--filename}
18111command-line argument to Flake8. This means stubs are linted by default with
18112this plugin enabled, without needing to explicitly list every file. It
18113modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
18114expressions after the entire file has been read. This enables support for
18115first-class forward references that stub files use.")
18116 (license license:expat)))
18117
18118(define-public python-flake8-quotes
18119 (package
18120 (name "python-flake8-quotes")
18121 (version "3.4.0")
18122 (source
18123 (origin
18124 (method url-fetch)
18125 (uri (pypi-uri "flake8-quotes" version))
18126 (sha256
18127 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
18128 (build-system pyproject-build-system)
18129 (native-inputs
18130 (list python-pytest
18131 python-setuptools
18132 python-wheel))
18133 (propagated-inputs
18134 (list python-flake8))
18135 (home-page "https://github.com/zheller/flake8-quotes/")
18136 (synopsis "Flake8 lint for quotes")
18137 (description "This package provides a Flake8 lint for quotes.")
18138 (license license:expat)))
18139
18140(define-public python-flake8-todo
18141 (package
18142 (name "python-flake8-todo")
18143 (version "0.7")
18144 (source
18145 (origin
18146 (method git-fetch)
18147 (uri (git-reference
18148 (url "https://github.com/schlamar/flake8-todo")
18149 (commit (string-append "v" version))))
18150 (file-name (git-file-name name version))
18151 (sha256
18152 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
18153 (build-system pyproject-build-system)
18154 (arguments (list #:tests? #f)) ; No tests.
18155 (native-inputs (list python-setuptools))
18156 (propagated-inputs (list python-pycodestyle))
18157 (home-page "https://github.com/schlamar/flake8-todo")
18158 (synopsis "TODO notes checker, plugin for flake8")
18159 (description
18160 "This package provides the @code{flake8-todo} Python module, a
18161TODO notes checker plugin for flake8.")
18162 (license license:expat)))
18163
18164(define-public python-flake8-isort
18165 (package
18166 (name "python-flake8-isort")
18167 (version "7.0.0")
18168 (source
18169 (origin
18170 (method git-fetch)
18171 (uri (git-reference
18172 (url "https://github.com/gforcada/flake8-isort")
18173 (commit version)))
18174 (file-name (git-file-name name version))
18175 (sha256
18176 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
18177 (build-system pyproject-build-system)
18178 (arguments (list #:test-backend #~'custom
18179 #:test-flags #~(list "run_tests.py")))
18180 (native-inputs (list python-hatchling python-pytest))
18181 (propagated-inputs (list python-flake8 python-isort))
18182 (home-page "https://github.com/gforcada/flake8-isort")
18183 (synopsis "Flake8 plugin integrating isort")
18184 (description
18185 "This package provides a flake8 plugin that integrates isort,
18186extending flake8 so that it can warn about badly sorted Python import
18187directives.")
18188 (license license:gpl2+)))
18189
18190(define-public python-autoflake
18191 (package
18192 (name "python-autoflake")
18193 (version "2.3.1")
18194 (source
18195 (origin
18196 (method url-fetch)
18197 (uri (pypi-uri "autoflake" version))
18198 (sha256
18199 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
18200 (build-system pyproject-build-system)
18201 (arguments
18202 (list
18203 #:phases
18204 #~(modify-phases %standard-phases
18205 (replace 'check
18206 (lambda _
18207 (invoke "python" "test_autoflake.py"))))))
18208 (native-inputs
18209 (list python-hatchling))
18210 (propagated-inputs
18211 (list python-pyflakes))
18212 (home-page "https://github.com/myint/autoflake")
18213 (synopsis "Removes unused imports and unused variables")
18214 (description
18215 "@code{autoflake} removes unused imports and unused variables from Python
18216code as reported by @code{pyflakes}.
18217
18218By default, it only removes unused imports for modules that are part of the
18219standard library. Removal of unused variables is also disabled by default.
18220It also removes useless @code{pass} statements.")
18221 (license license:expat)))
18222
18223(define-public python-mistune
18224 (package
18225 (name "python-mistune")
18226 (version "3.2.1")
18227 (source
18228 (origin
18229 (method git-fetch)
18230 (uri (git-reference
18231 (url "https://github.com/lepture/mistune")
18232 (commit (string-append "v" version))))
18233 (file-name (git-file-name name version))
18234 (sha256
18235 (base32 "1zcfky6rr860mdbjxs1h0lhla39g8s3048xdnb24y0lnyj3h80gh"))))
18236 (build-system pyproject-build-system)
18237 (native-inputs
18238 (list python-pytest
18239 python-setuptools))
18240 (home-page "https://github.com/lepture/mistune")
18241 (synopsis "Markdown parser in pure Python")
18242 (description
18243 "This package provides a fast markdown parser in pure Python.")
18244 (license license:bsd-3)))
18245
18246(define-public python-markdown
18247 (package
18248 (name "python-markdown")
18249 (version "3.10.2")
18250 (source
18251 (origin
18252 (method git-fetch)
18253 (uri (git-reference
18254 (url "https://github.com/Python-Markdown/markdown")
18255 (commit version)))
18256 (file-name (git-file-name name version))
18257 (sha256
18258 (base32 "1i7hn91zhg5blykvsdzr1hq00p8xqysdh1l73iypx9pd2pdvk7w9"))))
18259 (build-system pyproject-build-system)
18260 (native-inputs
18261 (list python-pyyaml
18262 python-setuptools))
18263 (home-page "https://python-markdown.github.io/")
18264 (synopsis "Python implementation of Markdown")
18265 (description
18266 "This package provides a Python implementation of John Gruber's
18267Markdown. The library features international input, various Markdown
18268extensions, and several HTML output formats. A command line wrapper
18269markdown_py is also provided to convert Markdown files to HTML.")
18270 (license license:bsd-3)))
18271
18272(define-public python-markdown2
18273 (package
18274 (name "python-markdown2")
18275 (version "2.5.3")
18276 (source
18277 (origin
18278 (method git-fetch) ; no tests data in PyPi package
18279 (uri (git-reference
18280 (url "https://github.com/trentm/python-markdown2")
18281 (commit version)))
18282 (file-name (git-file-name name version))
18283 (sha256
18284 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
18285 (build-system pyproject-build-system)
18286 (arguments
18287 (list
18288 #:test-backend #~'custom
18289 #:test-flags #~(list "test.py" "--" "-knownfailure")
18290 #:phases
18291 #~(modify-phases %standard-phases
18292 (add-before 'check 'pre-check
18293 (lambda _
18294 (chdir "test"))))))
18295 (native-inputs
18296 (list ;; python-pygments ;optional, tests fail when added
18297 ;; python-wavedrom ;optional, not packaged
18298 ;; python-latex2mathml ;optional, not packaged
18299 python-setuptools))
18300 (home-page "https://github.com/trentm/python-markdown2")
18301 (synopsis "Fast and complete Python implementation of Markdown")
18302 (description
18303 "This package provides a fast and complete Python implementation of
18304Markdown. It was written to closely match the behaviour of the original
18305Perl-implemented Markdown.pl. It also comes with a number of
18306extensions (called @code{extras}) for things like syntax coloring, tables,
18307header-ids.")
18308 (license license:expat)))
18309
18310(define-public python-mdx-include
18311 (package
18312 (name "python-mdx-include")
18313 (version "1.4.2")
18314 (source
18315 (origin
18316 (method git-fetch)
18317 (uri (git-reference
18318 (url "https://github.com/neurobin/mdx_include")
18319 (commit (string-append "v" version))))
18320 (file-name (git-file-name name version))
18321 (sha256
18322 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
18323 (build-system pyproject-build-system)
18324 (arguments
18325 (list
18326 #:test-backend #~'unittest
18327 #:phases
18328 (let* ((django-hello-url "\
18329https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1833073951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
18331 (django-hello
18332 (origin
18333 (method url-fetch)
18334 (uri django-hello-url)
18335 (sha256 (base32 "\
1833613bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
18337 #~(modify-phases %standard-phases
18338 (add-before 'check 'disable-test-requiring-network
18339 (lambda _
18340 (substitute* "mdx_include/test/test.py"
18341 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
18342 (string-append pre "__off__test_" post "("))
18343 (((string-join (string-split #$django-hello-url #\.) "\\."))
18344 #+django-hello))))))))
18345 (native-inputs (list python-setuptools))
18346 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
18347 (home-page "https://github.com/neurobin/mdx_include")
18348 (synopsis "Python Markdown extension to include local or remote files")
18349 (description "Include extension for Python Markdown. It lets you include
18350local or remote (downloadable) files into your markdown at arbitrary
18351positions.
18352
18353This project is motivated by markdown-include and provides the same
18354functionalities with some extras.")
18355 (license license:bsd-3)))
18356
18357(define-public python-ptyprocess
18358 (package
18359 (name "python-ptyprocess")
18360 (version "0.7.0")
18361 (source
18362 (origin
18363 (method url-fetch)
18364 (uri (pypi-uri "ptyprocess" version))
18365 (sha256
18366 (base32
18367 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
18368 (build-system pyproject-build-system)
18369 (native-inputs
18370 (list python-flit-core
18371 python-pytest))
18372 (home-page "https://github.com/pexpect/ptyprocess")
18373 (synopsis "Run a subprocess in a pseudo terminal")
18374 (description
18375 "This package provides a Python library used to launch a subprocess in a
18376pseudo terminal (pty), and interact with both the process and its pty.")
18377 (license license:isc)))
18378
18379(define-public python-configshell-fb
18380 (package
18381 (name "python-configshell-fb")
18382 (version "1.1.30")
18383 (source
18384 (origin
18385 (method url-fetch)
18386 (uri (pypi-uri "configshell-fb" version))
18387 ;; XXX: Snippet below is required because on v1.1.30 the source code
18388 ;; has configshell_fb as softlink to configshell and guix
18389 ;; pyproject-build-system doesn't work with symlinks very well.
18390 ;;
18391 ;; This package is only used in spdk for now and it's crucial to keep
18392 ;; it locked on version and keep the snipped for spdk to build
18393 ;; successfully.
18394 (snippet #~(begin
18395 (use-modules (guix build utils))
18396 (delete-file "setup.py")
18397 (delete-file-recursively "configshell_fb")
18398 (rename-file "configshell" "configshell_fb")))
18399 (sha256
18400 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
18401 (build-system pyproject-build-system)
18402 (arguments
18403 (list #:tests? #f)) ;; this package has no tests
18404 (native-inputs
18405 (list python-setuptools
18406 python-six
18407 python-wheel))
18408 (propagated-inputs
18409 (list python-pyparsing))
18410 (home-page "https://github.com/open-iscsi/configshell-fb")
18411 (synopsis "Framework to implement simple but nice CLIs")
18412 (description
18413 "This package provides a framework to implement simple but nice CLIs.")
18414 (license license:asl2.0)))
18415
18416(define-public python-configupdater
18417 (package
18418 (name "python-configupdater")
18419 (version "3.2")
18420 (source
18421 (origin
18422 (method git-fetch)
18423 (uri (git-reference
18424 (url "https://github.com/pyscaffold/configupdater")
18425 (commit (string-append "v" version))))
18426 (file-name (git-file-name name version))
18427 (sha256
18428 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
18429 (build-system pyproject-build-system)
18430 (native-inputs
18431 (list python-pytest python-setuptools python-setuptools-scm))
18432 (home-page "https://github.com/pyscaffold/configupdater")
18433 (synopsis "Parser like ConfigParser but for updating configuration files")
18434 (description
18435 "ConfigUpdater is a Python library for updating INI configuration files
18436while preserving the original file's formatting, structure, and comments.
18437Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
18438targeted changes--keeping comments, section ordering, key-value pair
18439ordering, and original casing intact.")
18440 (license license:expat)))
18441
18442(define-public python-crccheck
18443 (package
18444 (name "python-crccheck")
18445 (version "1.3.0")
18446 (source
18447 (origin
18448 (method git-fetch) ; no tests in PyPI
18449 (uri (git-reference
18450 (url "https://github.com/MartinScharrer/crccheck")
18451 (commit (string-append "v" version))))
18452 (file-name (git-file-name name version))
18453 (sha256
18454 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
18455 (build-system pyproject-build-system)
18456 (native-inputs (list python-pytest python-setuptools python-wheel))
18457 (home-page "https://github.com/MartinScharrer/crccheck")
18458 (synopsis "Calculation library for CRCs and checksums")
18459 (description "@code{crccheck} is a calculation library for CRCs and
18460checksums. It implement more than a hundred checksum routines.")
18461 (license license:gpl3+)))
18462
18463(define-public python-crashtest
18464 (package
18465 (name "python-crashtest")
18466 (version "0.4.1")
18467 (source
18468 (origin
18469 (method git-fetch)
18470 (uri (git-reference
18471 (url "https://github.com/sdispater/crashtest")
18472 (commit version)))
18473 (file-name (git-file-name name version))
18474 (sha256
18475 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18476 (build-system pyproject-build-system)
18477 (native-inputs (list python-poetry-core python-pytest))
18478 (home-page "https://github.com/sdispater/crashtest")
18479 (synopsis "Manage Python errors with ease")
18480 (description
18481 "Python library that makes exceptions handling and inspection easier.")
18482 (license license:expat)))
18483
18484(define-public python-pysendfile
18485 (package
18486 (name "python-pysendfile")
18487 (version "2.0.1")
18488 (source
18489 (origin
18490 (method git-fetch)
18491 (uri (git-reference
18492 (url "https://github.com/giampaolo/pysendfile")
18493 (commit (string-append "release-" version))))
18494 (file-name (git-file-name name version))
18495 (sha256
18496 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18497 (build-system pyproject-build-system)
18498 (arguments
18499 (list
18500 #:phases
18501 #~(modify-phases %standard-phases
18502 (replace 'check
18503 (lambda* (#:key tests? #:allow-other-keys)
18504 (when tests?
18505 (setenv "HOME" "/tmp")
18506 (invoke "make" "test")))))))
18507 (native-inputs (list python-pytest python-setuptools))
18508 (propagated-inputs (list python-pyasynchat))
18509 (home-page "https://github.com/giampaolo/pysendfile")
18510 (synopsis "Python interface to sendfile(2)")
18511 (description "The @code{pysendfile} Python library provides an interface to
18512the @code{sendfile(2)} system call.")
18513 (license license:expat)))
18514
18515(define-public python-pyftpdlib
18516 (package
18517 (name "python-pyftpdlib")
18518 (version "1.5.10")
18519 (source
18520 (origin
18521 (method url-fetch)
18522 (uri (pypi-uri "pyftpdlib" version))
18523 (sha256
18524 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18525 (build-system pyproject-build-system)
18526 ;; Using Pytest instead of the Makefile causes the command line tests to
18527 ;; fail on unknown Pytest arguments.
18528 (arguments
18529 (list
18530 #:test-flags
18531 #~(list
18532 "-k" "not TestCommandLineParser"
18533 ;; These contains flaky tests.
18534 "--deselect=pyftpdlib/test/test_functional.py"
18535 "--deselect=pyftpdlib/test/test_functional_ssl.py")))
18536 (native-inputs
18537 (list python-psutil
18538 python-pytest
18539 python-setuptools
18540 python-wheel))
18541 (propagated-inputs
18542 (list python-pyopenssl
18543 python-pysendfile))
18544 (home-page "https://github.com/giampaolo/pyftpdlib/")
18545 (synopsis "Asynchronous and scalable Python FTP server library")
18546 (description "The Python FTP server library provides a high-level
18547interface to write efficient, scalable and asynchronous FTP servers with
18548Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18549RFC-959} FTP server implementation available for Python, and has the following
18550traits:
18551@itemize
18552@item
18553It is lightweight, fast and scalable.
18554@item
18555It uses the @code{sendfile(2)} system call for uploads.
18556@item
18557It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18558asynchronously.
18559@item
18560It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18561IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18562RFC-2640}) and MLSD/MLST commands (RFC-3659).
18563@item
18564It has a flexible system of @samp{authorizers} able to manage both
18565@samp{virtual} and @samp{real} users.
18566@end itemize")
18567 (license license:expat)))
18568
18569(define-public python-fonttools
18570 (package
18571 (name "python-fonttools")
18572 (version "4.59.2")
18573 (source
18574 (origin
18575 (method url-fetch)
18576 (uri (pypi-uri "fonttools" version ".tar.gz"))
18577 (sha256
18578 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18579 (build-system pyproject-build-system)
18580 (arguments
18581 (list
18582 #:tests? (not (%current-target-system))
18583 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18584 ;; 3 subtests passed
18585 #:test-flags
18586 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18587 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18588 (string-join ls "::")))
18589 ;; XXX: Some test data is not included in PyPI archive,
18590 ;; remove when switched to git-fetch.
18591 '(("cffLib/cffLib_test.py" "CffLibTest"
18592 "test_reading_supplement_encoding")
18593 ("tfmLib/tfmLib_test.py"
18594 "test_read_boundary_char")
18595 ("tfmLib/tfmLib_test.py"
18596 "test_read_fontdimens_vanilla")
18597 ("tfmLib/tfmLib_test.py"
18598 "test_read_fontdimens_mathex")
18599 ("tfmLib/tfmLib_test.py"
18600 "test_read_fontdimens_mathsy")
18601 ("voltLib/volttofea_test.py" "ToFeaTest"
18602 "test_cli_vtp")
18603 ("voltLib/volttofea_test.py" "ToFeaTest"
18604 "test_group_order"))))))
18605 (native-inputs
18606 (list python-pytest
18607 python-setuptools))
18608 ;; All of them are listed as extras_require.
18609 (propagated-inputs
18610 (list python-brotli
18611 python-lxml
18612 python-unicodedata2
18613 python-zopfli))
18614 (home-page "https://github.com/fonttools/fonttools")
18615 (synopsis "Tools to manipulate font files")
18616 (description
18617 "FontTools/TTX is a library to manipulate font files from Python. It
18618supports reading and writing of TrueType/OpenType fonts, reading and writing
18619of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18620also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18621from an XML-based format.")
18622 (license license:expat)))
18623
18624;;; Tests are left out in the main package to avoid cycles.
18625;; XXX: When updating, solve comment in python-cu2qu.
18626(define-public python-fonttools-minimal
18627 (hidden-package
18628 (package
18629 (inherit python-fonttools)
18630 (name "python-fonttools-minimal")
18631 (arguments '(#:tests? #f))
18632 (native-inputs
18633 (list python-setuptools))
18634 (propagated-inputs '()))))
18635
18636(define-public python-ly
18637 (package
18638 (name "python-ly")
18639 (version "0.9.9")
18640 (source
18641 (origin
18642 (method git-fetch)
18643 (uri (git-reference
18644 (url "https://github.com/frescobaldi/python-ly")
18645 (commit (string-append "v" version))))
18646 (file-name (git-file-name name version))
18647 (sha256
18648 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18649 (build-system pyproject-build-system)
18650 (arguments
18651 (list
18652 #:phases
18653 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18654 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18655 #~(modify-phases %standard-phases
18656 (add-after 'unpack 'inject-data
18657 (lambda _
18658 (substitute* "tests/musicxml.xsd"
18659 (((string-join (string-split #$namespace-url #\.) "\\."))
18660 #$(origin
18661 (method url-fetch)
18662 (uri namespace-url)
18663 (sha256 (base32 "\
186641j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18665 (((string-join (string-split #$xlink-url #\.) "\\."))
18666 #$(origin
18667 (method url-fetch)
18668 (uri xlink-url)
18669 (sha256 (base32 "\
186700jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18671 (native-inputs (list python-hatchling python-lxml python-pytest))
18672 (synopsis "Tool and library for manipulating LilyPond files")
18673 (description
18674 "This package provides a Python library to parse, manipulate or create
18675documents in LilyPond format. A command line program ly is also provided that
18676can be used to do various manipulations with LilyPond files.")
18677 (home-page "https://pypi.org/project/python-ly/")
18678 (license license:gpl2+)))
18679
18680(define-public python-appdirs
18681 (package
18682 (name "python-appdirs")
18683 (version "1.4.4")
18684 (source
18685 (origin
18686 (method url-fetch)
18687 (uri (pypi-uri "appdirs" version))
18688 (sha256
18689 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18690 (build-system pyproject-build-system)
18691 (arguments (list #:test-backend #~'unittest))
18692 (native-inputs (list python-setuptools))
18693 (home-page "https://github.com/ActiveState/appdirs")
18694 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18695 (description
18696 "This module provides a portable way of finding out where user data
18697should be stored on various operating systems.")
18698 (license license:expat)))
18699
18700(define-public python-gorilla
18701 (package
18702 (name "python-gorilla")
18703 (version "0.5.0")
18704 (source
18705 (origin
18706 (method git-fetch)
18707 (uri (git-reference
18708 (url "https://github.com/christophercrouzet/gorilla")
18709 (commit (string-append "v" version))))
18710 (file-name (git-file-name name version))
18711 (sha256
18712 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18713 (build-system pyproject-build-system)
18714 (arguments (list #:test-backend #~'unittest))
18715 (native-inputs (list python-setuptools))
18716 (home-page "https://github.com/christophercrouzet/gorilla")
18717 (synopsis "Convenient monkey patching with Python")
18718 (description
18719 "Gorilla is a Python library that provides a convenient approach to
18720monkey patching. Monkey patching is the process of modifying module and
18721class attributes at runtime with the purpose of replacing or extending
18722third-party code.")
18723 (license license:expat)))
18724
18725(define-public python-llfuse
18726 (package
18727 (name "python-llfuse")
18728 (version "1.5.1")
18729 (source
18730 (origin
18731 (method git-fetch)
18732 (uri (git-reference
18733 (url "https://github.com/python-llfuse/python-llfuse")
18734 (commit (string-append "release-" version))))
18735 (file-name (git-file-name name version))
18736 (sha256
18737 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18738 (build-system pyproject-build-system)
18739 (arguments
18740 (list
18741 #:test-flags
18742 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18743 #:phases
18744 #~(modify-phases %standard-phases
18745 (add-before 'build 'build-cython
18746 (lambda _
18747 (invoke "python" "setup.py" "build_cython"))))))
18748 (inputs (list fuse-2 attr))
18749 (native-inputs
18750 (list pkg-config python-cython python-pytest python-setuptools))
18751 (synopsis "Python bindings for FUSE")
18752 (description
18753 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18754 (home-page "https://github.com/python-llfuse/python-llfuse")
18755 (license license:lgpl2.0+)))
18756
18757(define-public python-msgpack
18758 (package
18759 (name "python-msgpack")
18760 (version "1.1.2")
18761 (source
18762 (origin
18763 (method url-fetch)
18764 (uri (pypi-uri "msgpack" version))
18765 (sha256
18766 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18767 (build-system pyproject-build-system)
18768 (native-inputs
18769 (list python-pytest
18770 python-setuptools))
18771 (home-page "https://msgpack.org/")
18772 (synopsis "MessagePack (de)serializer")
18773 (description "MessagePack is a fast, compact binary serialization format,
18774suitable for similar data to JSON. This package provides CPython bindings for
18775reading and writing MessagePack data.")
18776 (license license:asl2.0)))
18777
18778(define-public python-openstep-plist
18779 (package
18780 (name "python-openstep-plist")
18781 (version "0.5.2")
18782 (source
18783 (origin
18784 (method git-fetch)
18785 (uri (git-reference
18786 (url "https://github.com/fonttools/openstep-plist")
18787 (commit (string-append "v" version))))
18788 (file-name (git-file-name name version))
18789 (sha256
18790 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18791 (build-system pyproject-build-system)
18792 (native-inputs
18793 (list python-cython
18794 python-pytest
18795 python-setuptools-scm
18796 python-setuptools))
18797 (home-page "https://github.com/fonttools/openstep-plist")
18798 (synopsis "OpenStep plist parser and writer")
18799 (description
18800 "This package provides a parser for the \"old style\" OpenStep property
18801list format (also known as ASCII plist), written in Cython.")
18802 (license license:expat)))
18803
18804(define-public python-resolvelib
18805 (package
18806 (name "python-resolvelib")
18807 ;; Use latest commit, because last release, 1.2.1 is incompatible
18808 ;; with python-packaging 26,
18809 (properties '((commit . "a0cb7c50b78028f840b238d8e1c391e0546f2325")
18810 (revision . "0")))
18811 (version (git-version "1.2.1"
18812 (assoc-ref properties 'revision)
18813 (assoc-ref properties 'commit)))
18814 (source
18815 (origin
18816 (method git-fetch)
18817 (uri (git-reference
18818 (url "https://github.com/sarugaku/resolvelib")
18819 (commit (assoc-ref properties 'commit))))
18820 (file-name (git-file-name name version))
18821 (sha256
18822 (base32 "1f00jlcv7fal4y6iyvqsycc6b5mkvxgc0jdddbkm1jcci1qy1yfl"))))
18823 (build-system pyproject-build-system)
18824 (native-inputs
18825 (list python-packaging
18826 python-pytest
18827 python-setuptools
18828 python-wheel))
18829 (home-page "https://github.com/sarugaku/resolvelib")
18830 (synopsis "Abstract dependencies resolver")
18831 (description
18832 "The ResolveLib library provides a @code{Resolver} class that includes
18833dependency resolution logic.")
18834 (license license:isc)))
18835
18836;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18837;; 2022. It is now read-only.
18838(define-public python-commonmark
18839 (package
18840 (name "python-commonmark")
18841 (version "0.9.1")
18842 (source
18843 (origin
18844 (method url-fetch)
18845 (uri (pypi-uri "commonmark" version))
18846 (sha256
18847 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18848 (build-system pyproject-build-system)
18849 (native-inputs
18850 (list python-setuptools))
18851 (home-page "https://github.com/readthedocs/commonmark.py")
18852 (synopsis "Python parser for the CommonMark Markdown spec")
18853 (description
18854 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18855Markdown parser and renderer for the CommonMark specification, using only
18856native modules.")
18857 (license license:bsd-3)))
18858
18859(define-public python-immutables
18860 (package
18861 (name "python-immutables")
18862 (version "0.21")
18863 (source
18864 (origin
18865 (method git-fetch)
18866 (uri (git-reference
18867 (url "https://github.com/MagicStack/immutables")
18868 (commit (string-append "v" version))))
18869 (file-name (git-file-name name version))
18870 (sha256
18871 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18872 (build-system pyproject-build-system)
18873 (arguments
18874 (list #:phases #~(modify-phases %standard-phases
18875 (add-after 'unpack 'remove-mypy-dependency
18876 (lambda _
18877 (delete-file "tests/test_mypy.py")
18878 (delete-file "tests/conftest.py"))))))
18879 (native-inputs
18880 (list python-pytest python-setuptools python-wheel))
18881 (home-page "https://github.com/MagicStack/immutables")
18882 (synopsis "High-performance immutable mapping type for Python")
18883 (description
18884 "An immutable mapping type for Python. The underlying datastructure is a
18885Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18886functional languages.")
18887 (license license:asl2.0)))
18888
18889(define-public python-prettytable
18890 (package
18891 (name "python-prettytable")
18892 (version "3.12.0")
18893 (source
18894 (origin
18895 (method url-fetch)
18896 (uri (pypi-uri "prettytable" version))
18897 (sha256
18898 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18899 (build-system pyproject-build-system)
18900 (native-inputs
18901 (list python-hatchling
18902 python-hatch-vcs
18903 python-pytest
18904 python-pytest-lazy-fixtures
18905 python-setuptools-scm))
18906 (propagated-inputs
18907 (list python-wcwidth))
18908 (home-page "https://github.com/jazzband/prettytable")
18909 (synopsis "Display tabular data in an ASCII table format")
18910 (description
18911 "A library designed to represent tabular data in visually appealing ASCII
18912tables. PrettyTable allows for selection of which columns are to be printed,
18913independent alignment of columns (left or right justified or centred) and
18914printing of sub-tables by specifying a row range.")
18915 (license license:bsd-3)))
18916
18917(define-public python-rtf-tokenize
18918 (package
18919 (name "python-rtf-tokenize")
18920 (version "1.0.1")
18921 (source (origin
18922 (method url-fetch)
18923 (uri (pypi-uri "rtf_tokenize" version))
18924 (sha256
18925 (base32
18926 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18927 (build-system pyproject-build-system)
18928 (native-inputs (list python-pytest python-setuptools python-wheel))
18929 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18930 (synopsis "Simple RTF tokenizer")
18931 (description "This package is a simple RTF tokenizer.")
18932 (license license:gpl2+)))
18933
18934(define-public python-sniffio
18935 (package
18936 (name "python-sniffio")
18937 (version "1.3.1")
18938 (source
18939 (origin
18940 (method url-fetch)
18941 (uri (pypi-uri "sniffio" version))
18942 (sha256
18943 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18944 (build-system pyproject-build-system)
18945 (arguments
18946 (list
18947 #:test-flags
18948 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18949 (native-inputs
18950 (list python-pytest python-setuptools))
18951 (home-page "https://github.com/python-trio/sniffio")
18952 (synopsis "Detect which async library a program is running under")
18953 (description
18954 "This package detects which async library a program is running under. It
18955supports multiple async I/O packages, like Trio, and asyncio.")
18956 ;; Either license applies.
18957 (license (list license:expat license:asl2.0))))
18958
18959(define-public python-snuggs
18960 (package
18961 (name "python-snuggs")
18962 (version "1.4.7")
18963 (source (origin
18964 (method url-fetch)
18965 (uri (pypi-uri "snuggs" version))
18966 (sha256
18967 (base32
18968 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18969 (build-system pyproject-build-system)
18970 (propagated-inputs (list python-numpy python-pyparsing))
18971 (native-inputs (list python-hypothesis python-pytest python-setuptools
18972 python-wheel))
18973 (home-page "https://github.com/mapbox/snuggs")
18974 (synopsis "Snuggs are S-expressions for Numpy")
18975 (description "Snuggs are S-expressions for Numpy.")
18976 (license license:expat)))
18977
18978(define-public python-geojson
18979 (package
18980 (name "python-geojson")
18981 (version "3.2.0")
18982 (source
18983 (origin
18984 (method url-fetch)
18985 (uri (pypi-uri "geojson" version))
18986 (sha256
18987 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18988 (build-system pyproject-build-system)
18989 (native-inputs (list python-pytest python-setuptools))
18990 (home-page "https://github.com/jazzband/geojson")
18991 (synopsis "Python bindings and utilities for GeoJSON")
18992 (description
18993 "This package provides Python bindings and utilities for
18994@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18995structures.")
18996 (license license:bsd-3)))
18997
18998;; pyowm only accepts a version less than version 3.
18999(define-public python-geojson-for-pyowm
19000 (package
19001 (inherit python-geojson)
19002 (version "2.5.0")
19003 (source
19004 (origin
19005 (method url-fetch)
19006 (uri (pypi-uri "geojson" version))
19007 (sha256
19008 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
19009 (arguments
19010 ;; https://github.com/jazzband/geojson/issues/175
19011 (list #:tests? #f))))
19012
19013(define-public python-gpxpy
19014 (package
19015 (name "python-gpxpy")
19016 (version "1.6.2")
19017 (source
19018 (origin
19019 (method url-fetch)
19020 (uri (pypi-uri "gpxpy" version))
19021 (sha256
19022 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
19023 (build-system pyproject-build-system)
19024 (arguments
19025 (list #:test-backend #~'unittest))
19026 (native-inputs
19027 (list python-setuptools))
19028 (home-page "https://github.com/tkrajina/gpxpy")
19029 (synopsis "Python GPX parser")
19030 (description "GPX file parser and GPS track manipulation library.")
19031 (license license:asl2.0)))
19032
19033(define-public python-get-version
19034 (package
19035 (name "python-get-version")
19036 (version "3.5.5")
19037 (source
19038 (origin
19039 (method url-fetch)
19040 (uri (pypi-uri "get_version" version))
19041 (sha256
19042 (base32
19043 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
19044 (build-system pyproject-build-system)
19045 (arguments
19046 ;; XXX: No tests in PyPI and building from GitHub fails because of the
19047 ;; lack of git metadata in the checkout.
19048 (list #:tests? #f))
19049 (native-inputs (list python-flit-core))
19050 (propagated-inputs (list python-dunamai))
19051 (home-page "https://github.com/flying-sheep/get_version")
19052 (synopsis "Version helper in the spirit of versioneer")
19053 (description
19054 "This package provides a version helper that lets you automatically use
19055the latest @code{vX.X.X} Git tag as the version in your Python package. It
19056also supports getting the version from Python source distributions or, once
19057your package is installed, via @code{pkg_resources} (part of
19058@code{setuptools}).")
19059 (license license:gpl3+)))
19060
19061(define-public python-filetype
19062 (package
19063 (name "python-filetype")
19064 (version "1.2.0")
19065 (source
19066 (origin
19067 (method url-fetch)
19068 (uri (pypi-uri "filetype" version))
19069 (sha256
19070 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
19071 (build-system pyproject-build-system)
19072 (native-inputs (list python-pytest
19073 python-pytest-benchmark
19074 python-setuptools
19075 python-wheel))
19076 (home-page "https://github.com/h2non/filetype.py")
19077 (synopsis "Infer file type and MIME type of any file/buffer")
19078 (description "@code{filetype} is a small and dependency free Python
19079package to infer file type and MIME type checking the magic numbers
19080signature of a file or buffer.")
19081 (license license:expat)))
19082
19083(define-public python-cachelib
19084 (package
19085 (name "python-cachelib")
19086 (version "0.13.0")
19087 (source
19088 (origin
19089 (method url-fetch)
19090 (uri (pypi-uri "cachelib" version))
19091 (sha256
19092 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
19093 (build-system pyproject-build-system)
19094 (arguments
19095 ;; These tests use a remote connection.
19096 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
19097 "--ignore" "tests/test_mongodb_cache.py")))
19098 (native-inputs
19099 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
19100 (home-page "https://github.com/pallets-eco/cachelib")
19101 (synopsis "Collection of cache libraries")
19102 (description "Cachelib is a library extracted from @code{werkzeug} which
19103provides a collection of cache libraries in the same API interface.")
19104 (license license:bsd-3)))
19105
19106(define-public python-pylru
19107 (package
19108 (name "python-pylru")
19109 (version "1.2.0")
19110 (source
19111 (origin
19112 (method git-fetch)
19113 (uri (git-reference
19114 (url "https://github.com/jlhutch/pylru")
19115 (commit (string-append "v" version))))
19116 (file-name (git-file-name name version))
19117 (sha256
19118 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
19119 (build-system pyproject-build-system)
19120 (arguments
19121 (list
19122 #:test-backend #~'custom
19123 #:test-flags #~(list "test.py")))
19124 (native-inputs (list python-pytest python-setuptools))
19125 (home-page "https://github.com/jlhutch/pylru")
19126 (synopsis "Least recently used (LRU) cache implementation")
19127 (description
19128 "Pylru implements a true LRU cache along with several support classes.
19129Pylru provides a cache class with a simple dict interface. It also provides
19130classes to wrap any object that has a dict interface with a cache. Both
19131write-through and write-back semantics are supported. Pylru also provides
19132classes to wrap functions in a similar way, including a function decorator.")
19133 (license license:gpl2+)))
19134
19135(define-public python-legacy-api-wrap
19136 (package
19137 (name "python-legacy-api-wrap")
19138 (version "1.5")
19139 (source
19140 (origin
19141 (method url-fetch)
19142 (uri (pypi-uri "legacy_api_wrap" version))
19143 (sha256
19144 (base32
19145 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
19146 (build-system pyproject-build-system)
19147 (native-inputs
19148 (list python-hatch-docstring-description
19149 python-hatch-vcs
19150 python-hatchling
19151 python-pytest
19152 python-typer))
19153 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
19154 (synopsis "Legacy API wrapper")
19155 (description "This module defines a decorator to wrap legacy APIs. The
19156primary use case is APIs defined before keyword-only parameters existed.")
19157 (license license:gpl3+)))
19158
19159(define-public python-langdetect
19160 (package
19161 (name "python-langdetect")
19162 (version "1.0.9")
19163 (source
19164 (origin
19165 (method url-fetch)
19166 (uri (pypi-uri "langdetect" version))
19167 (sha256
19168 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
19169 (build-system pyproject-build-system)
19170 (native-inputs
19171 (list python-pytest
19172 python-setuptools))
19173 (propagated-inputs
19174 (list python-six))
19175 (home-page "https://github.com/Mimino666/langdetect")
19176 (synopsis "Language detection library")
19177 (description
19178 "This library is a port of Nakatani Shuyo's language-detection library
19179(version from 03/03/2014) to Python.")
19180 (license license:expat)))
19181
19182(define-public python-pyasn1
19183 (package
19184 (name "python-pyasn1")
19185 (version "0.6.3")
19186 (source
19187 (origin
19188 (method git-fetch)
19189 (uri (git-reference
19190 (url "https://github.com/pyasn1/pyasn1")
19191 (commit (string-append "v" version))))
19192 (file-name (git-file-name name version))
19193 (sha256
19194 (base32 "0b22m94j163nikfkl031hgrfasb6wgqp3374b8dbr84jalkl0ykw"))))
19195 (build-system pyproject-build-system)
19196 (arguments
19197 (list #:test-backend #~'unittest
19198 #:test-flags #~(list "discover" "tests")))
19199 (native-inputs
19200 (list python-setuptools))
19201 (home-page "https://github.com/pyasn1/pyasn1")
19202 (synopsis "ASN.1 types and codecs")
19203 (description
19204 "This is an implementation of ASN.1 types and codecs in Python. It is
19205suitable for a wide range of protocols based on the ASN.1 specification.")
19206 (license license:bsd-2)))
19207
19208(define-public python-pyasn1-modules
19209 (package
19210 (name "python-pyasn1-modules")
19211 (version "0.4.2")
19212 (source
19213 (origin
19214 (method url-fetch)
19215 (uri (pypi-uri "pyasn1_modules" version))
19216 (sha256
19217 (base32
19218 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
19219 (build-system pyproject-build-system)
19220 (arguments
19221 (list #:test-backend #~'unittest
19222 #:test-flags #~(list "discover" "tests")))
19223 (native-inputs
19224 (list python-setuptools))
19225 (propagated-inputs
19226 (list python-pyasn1))
19227 (home-page "https://github.com/pyasn1/pyasn1-modules")
19228 (synopsis "ASN.1 codec implementations")
19229 (description
19230 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
19231implementations of ASN.1-based codecs and protocols.")
19232 (license license:bsd-3)))
19233
19234(define-public python-asn1tools
19235 (package
19236 (name "python-asn1tools")
19237 (version "0.167.0")
19238 (source
19239 (origin
19240 (method url-fetch)
19241 (uri (pypi-uri "asn1tools" version))
19242 (sha256
19243 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
19244 (build-system pyproject-build-system)
19245 (arguments
19246 (list
19247 #:test-flags
19248 #~(list "-k" (string-join
19249 ;; Tests fail with error: IndexError: string index out of
19250 ;; range. It may be some incompatibility with pyparsing,
19251 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
19252 (list "not test_c_source"
19253 "test_command_line_generate_c_source_oer"
19254 "test_command_line_generate_c_source_uper"
19255 "test_command_line_generate_rust_source_uper"
19256 "test_missing_parameterized_value"
19257 "test_c_source"
19258 "test_parse_parameterization")
19259 " and not "))))
19260 (native-inputs
19261 (list python-pytest
19262 python-setuptools
19263 python-wheel))
19264 (propagated-inputs
19265 (list python-bitstruct
19266 python-diskcache
19267 python-prompt-toolkit
19268 python-pyparsing))
19269 (home-page "https://github.com/eerimoq/asn1tools")
19270 (synopsis "ASN.1 parsing, encoding and decoding")
19271 (description "This package provides ASN.1 parsing, encoding and decoding
19272for Python, including constraints checking. It supports several
19273codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
19274for OER and UPER.")
19275 (license license:expat)))
19276
19277(define-public python-idna
19278 (package
19279 (name "python-idna")
19280 (version "3.18")
19281 (source
19282 (origin
19283 (method git-fetch)
19284 (uri (git-reference
19285 (url "https://github.com/kjd/idna")
19286 (commit (string-append "v" version))))
19287 (file-name (git-file-name name version))
19288 (sha256
19289 (base32 "0phrdwf6gqjpbs5kv3y6wbkvvpmq6kmjby674s8b9f6dsgzz4wpn"))))
19290 (build-system pyproject-build-system)
19291 (native-inputs
19292 (list python-flit-core python-pytest))
19293 (home-page "https://github.com/kjd/idna")
19294 (synopsis "Internationalized domain names in applications")
19295 (description
19296 "This is a library to support the Internationalised Domain Names in
19297Applications (IDNA) protocol as specified in RFC 5891. This version of the
19298protocol is often referred to as “IDNA2008” and can produce different results
19299from the earlier standard from 2003. The library is also intended to act as a
19300suitable drop-in replacement for the “encodings.idna” module that comes with
19301the Python standard library but currently only supports the older 2003
19302specification.")
19303 (license license:bsd-4)))
19304
19305(define-public python-libsass
19306 (package
19307 (name "python-libsass")
19308 (version "0.23.0")
19309 (source
19310 (origin
19311 ;; PyPI tarball is missing some test files.
19312 (method git-fetch)
19313 (uri (git-reference
19314 (url "https://github.com/sass/libsass-python")
19315 (commit version)))
19316 (file-name (git-file-name name version))
19317 (sha256
19318 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
19319 (build-system pyproject-build-system)
19320 (arguments
19321 '(#:phases
19322 (modify-phases %standard-phases
19323 ;; Use Guix package of libsass instead of compiling from a checkout.
19324 (add-before 'build 'set-libsass
19325 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
19326 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
19327 ;; https://github.com/sass/libsass-python/issues/440. It passed with
19328 ;; [email protected] which requires rebuild the world (1200+ packages),
19329 ;; remove when v3.6.5 is available.
19330 (add-before 'check 'silent-failing-tests
19331 (lambda _
19332 (substitute* "sasstests.py"
19333 (("def test_build_one")
19334 "def __off_test_build_one")
19335 (("def test_stack_trace_formatting")
19336 "def __off_test_stack_trace_formatting"))))
19337 (replace 'check
19338 (lambda* (#:key tests? #:allow-other-keys)
19339 (when tests?
19340 (invoke "pytest" "sasstests.py"))))
19341 (add-after 'install 'delete-test
19342 (lambda* (#:key inputs outputs #:allow-other-keys)
19343 ;; Delete sasstests.py because it attempts to open a file
19344 ;; that is not installed when loaded, which breaks the sanity
19345 ;; check.
19346 (delete-file (string-append
19347 (assoc-ref outputs "out")
19348 "/lib/python"
19349 (python-version
19350 (dirname (dirname
19351 (search-input-file inputs "bin/python"))))
19352 "/site-packages/sasstests.py")))))))
19353 (native-inputs
19354 (list python-pytest python-setuptools python-werkzeug python-wheel))
19355 (inputs
19356 (list libsass))
19357 (home-page "https://sass.github.io/libsass-python/")
19358 (synopsis "Straightforward binding of libsass for Python")
19359 (description
19360 "This package provides a simple Python extension module @code{sass} which
19361is binding LibSass.")
19362 (license license:expat)))
19363
19364;; It may be removed after 2026-01-24.
19365(define-deprecated/public-alias python-path-bootstrap python-path)
19366
19367(define-public python-pip-run
19368 (package
19369 (name "python-pip-run")
19370 (version "8.8.0")
19371 (source
19372 (origin
19373 (method git-fetch)
19374 (uri (git-reference
19375 (url "https://github.com/jaraco/pip-run")
19376 (commit (string-append "v" version))))
19377 (file-name (git-file-name name version))
19378 (sha256
19379 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
19380 (build-system pyproject-build-system)
19381 (arguments
19382 (list
19383 #:tests? (not (%current-target-system))
19384 #:test-flags
19385 #~(list "-k" (string-append
19386 ;; Do not test the myproject.toml build as it tries
19387 ;; to pull dependencies from the internet.
19388 "not project "
19389 ;; These tests attempt to install dependencies from
19390 ;; the network and fail.
19391 "and not test_pkg_imported "
19392 "and not test_pkg_loaded_from_alternate_index "
19393 "and not test_pkg_loaded_from_url "))))
19394 (native-inputs
19395 (list python-nbformat
19396 python-pygments
19397 python-pytest
19398 python-setuptools
19399 python-setuptools-scm))
19400 (propagated-inputs
19401 (list python-autocommand
19402 python-packaging
19403 python-path
19404 python-pip))
19405 (home-page "https://github.com/jaraco/pip-run")
19406 (synopsis "Dynamic dependency loader for Python")
19407 (description "The @command{pip-run} command provides on-demand temporary
19408package installation for a single interpreter run. It replaces this series of
19409commands:
19410@example
19411$ virtualenv --python pythonX.X --system-site-packages /tmp/env
19412$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
19413$ /tmp/env/bin/python ...
19414$ rm -rf /tmp/env
19415@end example")
19416 (license license:expat)))
19417
19418;; It may be removed after 2026-01-24.
19419(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
19420
19421(define-public python-libarchive-c
19422 (package
19423 (name "python-libarchive-c")
19424 (version "5.2")
19425 (source (origin
19426 (method url-fetch)
19427 (uri (pypi-uri "libarchive_c" version))
19428 (sha256
19429 (base32
19430 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
19431 (build-system pyproject-build-system)
19432 (arguments
19433 (list
19434 #:phases
19435 #~(modify-phases %standard-phases
19436 (add-before 'build 'reference-libarchive
19437 (lambda* (#:key inputs #:allow-other-keys)
19438 ;; Retain the absolute file name of libarchive.so.
19439 (substitute* "libarchive/ffi.py"
19440 (("find_library\\('archive'\\)")
19441 (string-append
19442 "'"
19443 (search-input-file inputs "/lib/libarchive.so")
19444 "'"))))))))
19445 (native-inputs
19446 (list python-setuptools python-wheel python-pytest))
19447 (inputs
19448 (list libarchive))
19449 (home-page "https://github.com/Changaco/python-libarchive-c")
19450 (synopsis "Python interface to libarchive")
19451 (description
19452 "This package provides Python bindings to libarchive, a C library to
19453access possibly compressed archives in many different formats. It uses
19454Python's @code{ctypes} foreign function interface (FFI).")
19455 (license license:lgpl2.0+)))
19456
19457(define-public python-file
19458 (package/inherit file
19459 (name "python-file")
19460 (build-system pyproject-build-system)
19461 (arguments
19462 (list
19463 #:tests? #f ;no tests
19464 #:phases
19465 #~(modify-phases %standard-phases
19466 (add-before 'build 'change-directory
19467 (lambda _
19468 (chdir "python")))
19469 (add-before 'build 'set-library-file-name
19470 (lambda* (#:key inputs #:allow-other-keys)
19471 (substitute* "magic.py"
19472 (("find_library\\('magic'\\)")
19473 (format #f "~s" (search-input-file inputs
19474 "lib/libmagic.so")))))))))
19475 (inputs (list file))
19476 (native-inputs (cons* python-setuptools
19477 (if (%current-target-system)
19478 (list this-package)
19479 '())))
19480 (synopsis "Python bindings to the libmagic file type guesser")
19481 (description "This package provides Python bindings to the libmagic file
19482type guesser.
19483
19484Note that this module and the @code{python-magic} module both provide a
19485@file{magic.py} file; these two modules, which are different and were
19486developed separately, both serve the same purpose: provide Python bindings for
19487libmagic.")))
19488
19489(define-public python-pydemumble
19490 (package
19491 (name "python-pydemumble")
19492 (version "0.0.1")
19493 (source
19494 (origin
19495 (method git-fetch)
19496 (uri (git-reference
19497 (url "https://github.com/angr/pydemumble")
19498 (commit (string-append "v" version))))
19499 (file-name (git-file-name name version))
19500 (sha256
19501 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19502 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19503 (build-system pyproject-build-system)
19504 (arguments
19505 (list
19506 #:test-flags
19507 #~(list "discover" "-s" "tests")
19508 #:phases
19509 #~(modify-phases %standard-phases
19510 (add-after 'unpack 'set-demumble-source
19511 (lambda* _
19512 ;; demumble is only a binary and not intended to be used as
19513 ;; a library. Therefore, python-pydemumble creates it's own
19514 ;; bindings for demumble, which are autogenerated from C code.
19515 (substitute* "CMakeLists.txt"
19516 (("src/demumble")
19517 #+(package-source demumble))))))))
19518 (native-inputs (list python-nanobind python-scikit-build-core))
19519 (home-page "https://github.com/angr/pydemumble")
19520 (synopsis "Python library for demangling symbol names")
19521 (description
19522 "This package provides a Python wrapper library for @code{demumble}, which
19523is a tool to demangle C++, Rust, and Swift symbol names.")
19524 (license license:bsd-2)))
19525
19526(define-public python-pydevd
19527 (package
19528 (name "python-pydevd")
19529 (version "3.2.3")
19530 (source
19531 (origin
19532 (method git-fetch)
19533 (uri (git-reference
19534 (url "https://github.com/fabioz/PyDev.Debugger")
19535 (commit (string-append
19536 "pydev_debugger_"
19537 (string-join (string-split version #\.) "_")))))
19538 (modules '((guix build utils)))
19539 (snippet '(begin
19540 ;; Delete pre-built binaries.
19541 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19542 ;; This source is generated via Cython.
19543 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19544 (file-name (git-file-name name version))
19545 (sha256
19546 (base32
19547 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19548 (build-system pyproject-build-system)
19549 (arguments
19550 (list
19551 #:test-flags
19552 #~(list "-n" (number->string (parallel-job-count))
19553 "-m" "not flaky"
19554 "-k"
19555 (string-join
19556 (list
19557 ;; The two "break_01" tests have been failing on
19558 ;; Python 3.10:
19559 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19560 "not test_set_pydevd_break_01 "
19561 ;; the GUI event loop requires an X server.
19562 "test_gui_event_loop_custom"
19563 ;; This test validates that 'pydevd' is not in the
19564 ;; exception message, but it is due to being part
19565 ;; of the build file name present in the message.
19566 "test_evaluate_exception_trace"
19567 ;; This test fail with TimeoutError, no message on stderr.
19568 "test_soft_terminate"
19569 "test_debugger_case_deadlock_interrupt_thread"
19570 ;; subprocess.CalledProcessError
19571 ;; Python 3.11/3.12 specific issue:
19572 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19573 "test_find_main_thread_id")
19574 " and not "))
19575 #:phases
19576 #~(modify-phases %standard-phases
19577 (add-after 'unpack 'fix-tests
19578 (lambda _
19579 (substitute* "tests_python/test_convert_utilities.py"
19580 ;; Add missing trailing '/'.
19581 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19582 (string-append all "/")))))
19583 (add-after 'unpack 'patch-command-paths
19584 (lambda* (#:key inputs #:allow-other-keys)
19585 (substitute* "_pydevd_bundle/pydevd_api.py"
19586 (("'kill'")
19587 (format #f "~s" (search-input-file inputs "bin/kill")))
19588 (("'pgrep'")
19589 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19590 (add-after 'unpack 'generate-sources
19591 (lambda _
19592 (setenv "PYTHONPATH" (getcwd))
19593 (invoke "python" "build_tools/build.py")))
19594 (add-after 'unpack 'adjust-attach-binary-name
19595 (lambda _
19596 (substitute*
19597 '("pydevd_tracing.py"
19598 "pydevd_attach_to_process/add_code_to_python_process.py")
19599 (("def get_(target|python_helper_lib)_filename.*" all)
19600 (format #f "~a return ~s~%" all
19601 (string-append #$output "/lib/attach.so"))))))
19602 (add-after 'unpack 'patch-gdb
19603 (lambda* (#:key inputs #:allow-other-keys)
19604 (substitute*
19605 "pydevd_attach_to_process/add_code_to_python_process.py"
19606 (("'gdb',")
19607 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19608 (add-after 'build 'build-attach-linux-binary
19609 (lambda _
19610 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19611 "-fPIC" "-nostartfiles"
19612 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19613 (add-before 'check 'pre-check
19614 (lambda* (#:key tests? #:allow-other-keys)
19615 (when tests?
19616 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19617 (add-after 'install 'install-attach-binary
19618 (lambda _
19619 (install-file "attach.so"
19620 (string-append #$output "/lib"))))
19621 ;; Some modules aren't designed to be loadable by themselves, such
19622 ;; as 'pydev_app_engine_debug_startup' and fail.
19623 (delete 'sanity-check))))
19624 (native-inputs
19625 (list python-cython
19626 python-numpy
19627 python-psutil
19628 python-pytest
19629 python-pytest-xdist
19630 python-setuptools
19631 python-trio
19632 python-untangle
19633 python-wheel))
19634 (inputs (list coreutils gdb/pinned procps))
19635 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19636 (synopsis "Python debugger")
19637 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19638and other @acronym{IDEs, Integrated Development Environments}.")
19639 (license license:epl1.0)))
19640
19641(define-public python-debugpy
19642 (package
19643 (name "python-debugpy")
19644 (version "1.8.17")
19645 (source
19646 (origin
19647 (method git-fetch)
19648 (uri (git-reference ;no tests in PyPI archive
19649 (url "https://github.com/microsoft/debugpy")
19650 (commit (string-append "v" version))))
19651 (file-name (git-file-name name version))
19652 (modules '((guix build utils)))
19653 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19654 ;; attach binary.
19655 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19656 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19657 (sha256
19658 (base32
19659 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19660 (build-system pyproject-build-system)
19661 (arguments
19662 (list
19663 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19664 #:phases
19665 #~(modify-phases %standard-phases
19666 (add-after 'unpack 'patch-sh-in-tests
19667 (lambda _
19668 (substitute* "tests/debugpy/test_run.py"
19669 (("#!/bin/sh")
19670 (string-append "#!" (which "sh"))))))
19671 (add-before 'build 'configure
19672 (lambda _
19673 ;; This adjusts the behavior of debugpy to load pydevd from
19674 ;; Python site packages.
19675 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19676 (native-inputs
19677 (list python-setuptools
19678 python-versioneer))
19679 (propagated-inputs
19680 (list python-pydevd))
19681 (home-page "https://aka.ms/debugpy")
19682 (synopsis "Debug Adapter Protocol Python implementation")
19683 (description "An implementation of the Debug Adapter Protocol for
19684Python.")
19685 (license license:expat)))
19686
19687(define-public python-debian
19688 (package
19689 (name "python-debian")
19690 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19691 (version "0.1.49")
19692 (source
19693 (origin
19694 ;; Use git-fetch, as pypi doesn't include test suite.
19695 (method git-fetch)
19696 (uri (git-reference
19697 (url home-page)
19698 (commit version)))
19699 (file-name (git-file-name name version))
19700 (sha256
19701 (base32
19702 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19703 (modules '((guix build utils)))
19704 (snippet
19705 #~(begin
19706 ;; python-apt, apt and dpkg are not yet available in guix,
19707 ;; and these tests heavily depend on them.
19708 (for-each delete-file
19709 '("lib/debian/tests/test_deb822.py"
19710 "lib/debian/tests/test_debfile.py"))
19711
19712 ;; for reproducible builds, otherwise python-debian
19713 ;; generates a _version.py including the date
19714 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19715 (substitute* "lib/debian/_version.py"
19716 (("__CHANGELOG_VERSION__") #$version))))))
19717 (build-system pyproject-build-system)
19718 (native-inputs
19719 (list python-pytest python-setuptools))
19720 (propagated-inputs
19721 (list python-six python-chardet))
19722 (synopsis "Debian package related modules")
19723 (description
19724 "This package provides Python modules that abstract many formats of
19725Debian-related files, such as:
19726@itemize
19727@item Debtags information;
19728@item @file{debian/changelog} files;
19729@item packages files, pdiffs;
19730@item control files of single or multiple RFC822-style paragraphs---e.g.
19731 @file{debian/control}, @file{.changes}, @file{.dsc};
19732@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19733 contained files and meta-information.
19734@end itemize")
19735 ;; Modules are either GPLv2+ or GPLv3+.
19736 (license license:gpl3+)))
19737
19738(define-public python-json-spec
19739 (package
19740 (name "python-json-spec")
19741 (version "0.12.0")
19742 (source
19743 (origin
19744 (method git-fetch) ;no tests in PyPI archive
19745 (uri (git-reference
19746 (url "https://github.com/johnnoone/json-spec")
19747 (commit version)))
19748 (file-name (git-file-name name version))
19749 (sha256
19750 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19751 (build-system pyproject-build-system)
19752 (native-inputs
19753 (list python-pytest
19754 python-poetry-core))
19755 (propagated-inputs
19756 (list python-termcolor)) ;for the CLI
19757 (home-page "https://json-spec.readthedocs.io/")
19758 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19759 (description
19760 "This Python library implements several JSON specs, like JSON Schema,
19761JSON Reference and JSON Pointer.")
19762 (license license:bsd-3)))
19763
19764(define-public python-fastbencode
19765 (package
19766 (name "python-fastbencode")
19767 (version "0.3.9")
19768 (source
19769 (origin
19770 (method git-fetch)
19771 (uri (git-reference
19772 (url "https://github.com/breezy-team/fastbencode")
19773 (commit (string-append "v" version))))
19774 (file-name (git-file-name name version))
19775 (sha256
19776 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19777 (build-system pyproject-build-system)
19778 (arguments
19779 (list
19780 #:test-backend #~'unittest
19781 #:test-flags #~(list "tests.test_suite")
19782 #:imported-modules (append %cargo-build-system-modules
19783 %pyproject-build-system-modules)
19784 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19785 (guix build pyproject-build-system)
19786 (guix build utils))
19787 #:phases
19788 #~(modify-phases %standard-phases
19789 (add-after 'unpack 'prepare-cargo-build-system
19790 (lambda args
19791 (for-each
19792 (lambda (phase)
19793 (format #t "Running cargo phase: ~a~%" phase)
19794 (apply (assoc-ref cargo:%standard-phases phase)
19795 #:cargo-target #$(cargo-triplet)
19796 args))
19797 '(unpack-rust-crates
19798 configure
19799 check-for-pregenerated-files
19800 patch-cargo-checksums)))))))
19801 (inputs (cargo-inputs 'fastbencode))
19802 (native-inputs
19803 (append
19804 (list python-setuptools-rust
19805 rust
19806 `(,rust "cargo"))
19807 (or (and=> (%current-target-system)
19808 (compose list make-rust-sysroot))
19809 '())))
19810 (home-page "https://github.com/breezy-team/fastbencode")
19811 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19812 (description
19813 "The fastbencode Python package implements the bencode serialization
19814format for storing and transmitting loosely structured data, originally used
19815by BitTorrent.
19816
19817The format can encode four different types of values: byte strings, integers,
19818lists, and dictionaries (associative arrays). It's simple and unaffected by
19819endianness,
19820
19821This package includes both a pure-Python version and an optional C extension
19822based on Cython. Both provide the same functionality, but the C version has
19823significantly better performance.")
19824 (license (list license:expat ; _bencode_py.py
19825 license:gpl2+)))) ; __init__.py
19826
19827(define-public python-fastjsonschema
19828 (package
19829 (name "python-fastjsonschema")
19830 (version "2.21.1")
19831 (source
19832 (origin
19833 (method git-fetch) ; no tests in PyPI release
19834 (uri (git-reference
19835 (url "https://github.com/horejsek/python-fastjsonschema")
19836 (commit (string-append "v" version))))
19837 (file-name (git-file-name name version))
19838 (sha256
19839 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19840 (build-system pyproject-build-system)
19841 (arguments
19842 (list
19843 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19844 (native-inputs
19845 (list python-json-spec
19846 python-jsonschema
19847 python-pytest
19848 python-pytest-benchmark
19849 python-setuptools))
19850 (home-page "https://github.com/horejsek/python-fastjsonschema")
19851 (synopsis "Fast Python implementation of JSON schema")
19852 (description
19853 "This library implements validation of JSON documents by JSON schema for
19854drafts 04, 06 and 07.")
19855 (license license:bsd-3)))
19856
19857(define-public python-nbformat
19858 (package
19859 (name "python-nbformat")
19860 (version "5.10.4")
19861 ;; The PyPi release tarball lacks some test cases and test data.
19862 (source (origin
19863 (method git-fetch)
19864 (uri (git-reference
19865 (url "https://github.com/jupyter/nbformat")
19866 (commit (string-append "v" version))))
19867 (sha256
19868 (base32
19869 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19870 (file-name (git-file-name name version))))
19871 (build-system pyproject-build-system)
19872 (arguments
19873 (list
19874 #:phases
19875 #~(modify-phases %standard-phases
19876 ;; We don't want to use hatch-nodejs just to get a version string.
19877 (add-after 'unpack 'patch-pyproject
19878 (lambda _
19879 (substitute* "pyproject.toml"
19880 ((", \"hatch-nodejs-version\"") "")
19881 (("dynamic = \\[\"version\"\\]")
19882 (string-append "version = \"" #$version "\""))))))))
19883 (propagated-inputs
19884 (list python-fastjsonschema python-jsonschema python-jupyter-core
19885 python-traitlets))
19886 (native-inputs
19887 (list python-hatchling
19888 python-pep440
19889 python-pytest
19890 python-testpath))
19891 (home-page "https://jupyter.org")
19892 (synopsis "Jupyter Notebook format")
19893 (description "This package provides the reference implementation of the
19894Jupyter Notebook format and Python APIs for working with notebooks.")
19895 (license license:bsd-3)))
19896
19897(define-public python-nb-clean
19898 (package
19899 (name "python-nb-clean")
19900 (version "4.0.1")
19901 (source
19902 (origin
19903 (method git-fetch) ; no tests in PyPI
19904 (uri (git-reference
19905 (url "https://github.com/srstevenson/nb-clean")
19906 (commit version)))
19907 (file-name (git-file-name name version))
19908 (sha256
19909 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19910 (build-system pyproject-build-system)
19911 (native-inputs (list python-poetry-core
19912 python-pytest
19913 python-pytest-mock))
19914 (propagated-inputs (list python-nbformat))
19915 (home-page "https://github.com/srstevenson/nb-clean")
19916 (synopsis "Clean Jupyter notebooks for versioning")
19917 (description "This package cleans Jupyter notebooks of cell execution
19918counts, metadata, outputs, and empty cells, preparing them for committing to
19919version control. It provides a Git filter to automatically clean notebooks
19920before they're staged, and can also be used with other version control
19921systems, as a command line tool, and as a Python library.")
19922 (license license:isc)))
19923
19924(define-public python-entrypoints
19925 (package
19926 (name "python-entrypoints")
19927 (version "0.4")
19928 (source
19929 (origin
19930 (method url-fetch)
19931 (uri (pypi-uri "entrypoints" version))
19932 (sha256
19933 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19934 (build-system pyproject-build-system)
19935 (native-inputs
19936 (list python-flit-core
19937 python-pytest))
19938 (home-page "https://github.com/takluyver/entrypoints")
19939 (synopsis "Discover and load entry points from installed Python packages")
19940 (description "Entry points are a way for Python packages to advertise
19941objects with some common interface. The most common examples are
19942@code{console_scripts} entry points, which define shell commands by
19943identifying a Python function to run. The @code{entrypoints} module contains
19944functions to find and load entry points.")
19945 (license license:expat)))
19946
19947(define-public python-epc
19948 (package
19949 (name "python-epc")
19950 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19951 (revision . "0")))
19952 (version (git-version "0.0.5"
19953 (assoc-ref properties 'revision)
19954 (assoc-ref properties 'commit)))
19955 (source
19956 (origin
19957 (method git-fetch)
19958 (uri (git-reference
19959 (url "https://github.com/tkf/python-epc")
19960 (commit (assoc-ref properties 'commit))))
19961 (file-name (git-file-name name version))
19962 (sha256
19963 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19964 (build-system pyproject-build-system)
19965 (arguments (list #:test-backend #~'nose))
19966 (propagated-inputs (list python-sexpdata))
19967 (native-inputs (list python-pynose python-setuptools))
19968 (home-page "https://github.com/tkf/python-epc")
19969 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19970 (description
19971 "Python-EPC can call elisp functions from Python and Python functions
19972from elisp.")
19973 (license license:gpl3)))
19974
19975(define-public python-forex-python
19976 (package
19977 (name "python-forex-python")
19978 (version "1.5")
19979 (source
19980 (origin
19981 (method git-fetch)
19982 (uri (git-reference
19983 (url "https://github.com/MicroPyramid/forex-python")
19984 (commit version)))
19985 (file-name (git-file-name name version))
19986 (sha256
19987 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19988 (build-system pyproject-build-system)
19989 (arguments (list #:tests? #f)) ; Tests require online data.
19990 (native-inputs (list python-setuptools))
19991 (propagated-inputs (list python-requests python-simplejson))
19992 (home-page "https://github.com/MicroPyramid/forex-python")
19993 (synopsis "Foreign exchange rates and currency conversion")
19994 (description
19995 "@code{python-forex-python} can be used to manipulate foreign
19996exchange rates and to operate currency conversions.
19997
19998Features:
19999@itemize
20000@item List all currency rates.
20001@item BitCoin price for all currencies.
20002@item Converting amount to BitCoins.
20003@item Get historical rates for any day since 1999.
20004@item Conversion rate for one currency(ex; USD to INR).
20005@item Convert amount from one currency to other.('USD 10$' to INR).
20006@item Currency symbols.
20007@item Currency names.
20008@end itemize")
20009 (license license:expat)))
20010
20011(define-public python-simpleeval
20012 (package
20013 (name "python-simpleeval")
20014 (version "0.9.12")
20015 (source
20016 (origin
20017 (method git-fetch)
20018 (uri (git-reference
20019 (url "https://github.com/danthedeckie/simpleeval")
20020 (commit version)))
20021 (file-name (git-file-name name version))
20022 (sha256
20023 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
20024 (build-system pyproject-build-system)
20025 (native-inputs (list python-pytest python-setuptools))
20026 (home-page "https://github.com/danthedeckie/simpleeval")
20027 (synopsis "Simple, safe single expression evaluator library")
20028 (description
20029 "This package provides a quick single file library for easily adding
20030evaluatable expressions into python projects. Say you want to allow a user
20031to set an alarm volume, which could depend on the time of day, alarm level,
20032how many previous alarms had gone off, and if there is music playing at the
20033time.")
20034 (license license:expat)))
20035
20036(define-public python-haas
20037 ;; A recent revision is required to avoid obsoleted dependencies.
20038 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
20039 (revision "0"))
20040 (package
20041 (name "python-haas")
20042 (version (git-version "0.9.0" revision commit))
20043 (source
20044 (origin
20045 (method git-fetch)
20046 (uri (git-reference
20047 (url "https://github.com/scalative/haas")
20048 (commit commit)))
20049 (file-name (git-file-name name version))
20050 (sha256
20051 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
20052 (build-system pyproject-build-system)
20053 (propagated-inputs
20054 (list python-stevedore))
20055 (native-inputs
20056 (list python-coverage
20057 python-pytest
20058 python-setuptools
20059 python-testfixtures))
20060 (home-page "https://github.com/scalative/haas")
20061 (synopsis "Extensible Python test runner")
20062 (description "Haas is a python test runner that is backward-compatible
20063with Python's built-in unittest test-cases, but supports more advanced
20064features, such as project-specific plugins.")
20065 (license license:bsd-3))))
20066
20067(define-public python-okonomiyaki
20068 (package
20069 (name "python-okonomiyaki")
20070 (version "3.0.0")
20071 (source
20072 (origin
20073 (method git-fetch)
20074 (uri (git-reference
20075 (url "https://github.com/enthought/okonomiyaki/")
20076 (commit version)))
20077 (file-name (git-file-name name version))
20078 (sha256
20079 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
20080 (build-system pyproject-build-system)
20081 (arguments
20082 (list
20083 #:phases
20084 #~(modify-phases %standard-phases
20085 ;; Unknown platform.
20086 (add-before 'check 'delete-fail-tests
20087 (lambda _
20088 (delete-file-recursively
20089 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
20090 (native-inputs
20091 (list python-distro
20092 python-haas
20093 python-jsonschema
20094 python-packaging
20095 python-parameterized
20096 python-pytest
20097 python-setuptools
20098 python-testfixtures
20099 python-zipfile2))
20100 (home-page "https://github.com/enthought/okonomiyaki/")
20101 (synopsis "Python library to deal with Enthought-specific metadata")
20102 (description
20103 "Okonomiyaki is a self-contained library aiming at consolidating
20104low-level code used in Enthought-specific egg and runtime archives.")
20105 (license license:bsd-3)))
20106
20107(define-public python-nbconvert
20108 (package
20109 (name "python-nbconvert")
20110 (version "7.17.0")
20111 (source
20112 (origin
20113 (method url-fetch)
20114 (uri (pypi-uri "nbconvert" version))
20115 (sha256
20116 (base32
20117 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
20118 (build-system pyproject-build-system)
20119 (arguments
20120 (list
20121 #:test-flags
20122 '(list "-k"
20123 (string-append
20124 ;; These tests require pyppeteer, not yet
20125 ;; available in Guix.
20126 "not test_webpdf_with_chromium"
20127 " and not test_webpdf.py"
20128 ;; These tests require ipywidgets, which would
20129 ;; introduce a dependency cycle.
20130 " and not test_execute_widgets_from_nbconvert"
20131 " and not test_execute_multiple_notebooks"
20132
20133 ;; This test calls nbconvert itself via "sys.executable -m
20134 ;; nbconvert". It's probably harmless.
20135 " and not test_default_config"))
20136 #:phases
20137 #~(modify-phases %standard-phases
20138 (add-after 'unpack 'fix-paths
20139 (lambda* (#:key inputs #:allow-other-keys)
20140 ;; Use pandoc binary from input.
20141 (substitute* "nbconvert/utils/pandoc.py"
20142 (("'pandoc'")
20143 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
20144 ;; Same for LaTeX.
20145 (substitute* "nbconvert/exporters/pdf.py"
20146 (("\"xelatex\"")
20147 (format #f "~s" (search-input-file inputs "bin/xelatex")))
20148 (("\"bibtex\"")
20149 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
20150 ;; Likewise for Inkscape.
20151 (substitute* "nbconvert/preprocessors/svg2pdf.py"
20152 (("inkscape_path = which\\(\"inkscape\")")
20153 (format #f "inkscape_path = ~s"
20154 (search-input-file inputs "bin/inkscape"))))))
20155 (add-after 'unpack 'ignore-deprecation-warnings
20156 (lambda _
20157 (substitute* "pyproject.toml"
20158 (("\"ignore:nbconvert.utils" m)
20159 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
20160 m)))))
20161 (add-before 'check 'pre-check
20162 (lambda _
20163 ;; Tests depend on templates installed to output.
20164 (setenv "JUPYTER_PATH"
20165 (string-append #$output "/share/jupyter:"
20166 (getenv "JUPYTER_PATH")))
20167 ;; jupyter-core demands this
20168 (setenv "JUPYTER_PLATFORM_DIRS" "1")
20169 ;; Tests need writable HOME and TEXMFVAR.
20170 (setenv "HOME" "/tmp")
20171 (setenv "TEXMFVAR" "/tmp"))))))
20172 (inputs
20173 (list inkscape/pinned pandoc))
20174 (native-inputs
20175 (list python-flaky
20176 python-hatchling
20177 python-ipykernel
20178 ;; Adding ipywidgets would create a cycle.
20179 ;;python-ipywidgets
20180 python-pytest
20181 (texlive-local-tree
20182 (list texlive-adjustbox
20183 texlive-booktabs
20184 texlive-caption
20185 texlive-enumitem
20186 texlive-eurosym
20187 texlive-fancyvrb
20188 texlive-float
20189 texlive-fontspec
20190 texlive-grffile
20191 texlive-jknapltx
20192 texlive-parskip
20193 texlive-pdfcol
20194 texlive-rsfs
20195 texlive-soul
20196 texlive-tcolorbox
20197 texlive-titling
20198 texlive-ulem
20199 texlive-unicode-math
20200 texlive-upquote
20201 texlive-xetex))))
20202 (propagated-inputs
20203 (list python-beautifulsoup4
20204 python-bleach
20205 python-defusedxml
20206 python-jinja2
20207 python-jupyter-core
20208 python-jupyterlab-pygments
20209 python-markupsafe
20210 python-mistune
20211 python-nbclient
20212 python-nbformat
20213 python-packaging
20214 python-pandocfilters
20215 python-pygments
20216 python-tinycss2
20217 python-traitlets
20218 ;; Required, even if [serve] is not used.
20219 python-tornado
20220 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
20221 texlive-adjustbox
20222 texlive-amsmath
20223 texlive-booktabs
20224 texlive-caption
20225 texlive-collection-basic
20226 texlive-enumitem
20227 texlive-environ
20228 texlive-etoolbox
20229 texlive-eurosym
20230 texlive-etoolbox
20231 texlive-fancyvrb
20232 texlive-float
20233 texlive-fontspec
20234 texlive-geometry
20235 texlive-grffile
20236 texlive-hyperref
20237 texlive-infwarerr
20238 texlive-jknapltx
20239 texlive-kvoptions
20240 texlive-lm
20241 texlive-lm-math
20242 texlive-mathpazo
20243 texlive-parskip
20244 texlive-pdfcol
20245 texlive-pgf
20246 texlive-rsfs
20247 texlive-soul
20248 texlive-stringenc
20249 texlive-tcolorbox
20250 texlive-titling
20251 texlive-tools
20252 texlive-trimspaces
20253 texlive-ucs
20254 texlive-ulem
20255 texlive-unicode-math
20256 texlive-upquote
20257 texlive-xcolor
20258 texlive-xetex
20259 texlive-zapfding))
20260 (home-page "https://jupyter.org")
20261 (synopsis "Converting Jupyter Notebooks")
20262 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
20263notebooks to various other formats via Jinja templates. It allows you to
20264convert an @code{.ipynb} notebook file into various static formats including:
20265
20266@enumerate
20267@item HTML
20268@item LaTeX
20269@item PDF
20270@item Reveal JS
20271@item Markdown (md)
20272@item ReStructured Text (rst)
20273@item executable script
20274@end enumerate\n")
20275 (license license:bsd-3)))
20276
20277(define-public python-ipywidgets
20278 (package
20279 (name "python-ipywidgets")
20280 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
20281 (version "8.1.4")
20282 (source
20283 (origin
20284 (method url-fetch)
20285 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
20286 (uri (pypi-uri "ipywidgets" version))
20287 (sha256
20288 (base32
20289 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
20290 (build-system pyproject-build-system)
20291 (native-inputs
20292 (list python-ipykernel
20293 python-jsonschema
20294 python-pytest
20295 python-pytz
20296 python-setuptools))
20297 (propagated-inputs
20298 (list python-comm
20299 python-ipython
20300 python-jupyterlab-widgets
20301 python-traitlets
20302 python-widgetsnbextension))
20303 (home-page "https://ipython.org")
20304 (synopsis "IPython HTML widgets for Jupyter")
20305 (description "Ipywidgets are interactive HTML widgets for Jupyter
20306notebooks and the IPython kernel. Notebooks come alive when interactive
20307widgets are used. Users gain control of their data and can visualize changes
20308in the data.")
20309 (license license:bsd-3)))
20310
20311(define-public python-jsbeautifier
20312 (package
20313 (name "python-jsbeautifier")
20314 (version "1.15.3")
20315 (home-page "https://github.com/beautify-web/js-beautify")
20316 (source
20317 (origin
20318 (method git-fetch)
20319 (uri (git-reference
20320 (url home-page)
20321 (commit (string-append "v" version))))
20322 (file-name (git-file-name name version))
20323 (sha256
20324 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
20325 (build-system pyproject-build-system)
20326 (arguments
20327 (list
20328 #:phases
20329 #~(modify-phases %standard-phases
20330 (add-after 'unpack 'chdir
20331 (lambda _
20332 (chdir "python")
20333 (rename-file "setup-js.py" "setup.py"))))))
20334 (propagated-inputs (list python-editorconfig python-six))
20335 (native-inputs (list python-pytest python-setuptools))
20336 (synopsis "JavaScript unobfuscator and beautifier")
20337 (description
20338 "This packages provides tooling to beautify, unpack or deobfuscate
20339JavaScript, leveraging popular online obfuscators.")
20340 (license license:expat)))
20341
20342(define-public python-chardet
20343 (package
20344 (name "python-chardet")
20345 ;; XXX: Before update, check status of guix/guix#9242.
20346 (version "5.2.0")
20347 (source
20348 (origin
20349 (method url-fetch)
20350 (uri (pypi-uri "chardet" version))
20351 (sha256
20352 (base32
20353 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
20354 (native-inputs
20355 (list python-pytest python-setuptools))
20356 (build-system pyproject-build-system)
20357 (arguments
20358 (list #:test-flags
20359 ;; Disable test that fails sporadically:
20360 ;; https://github.com/chardet/chardet/issues/256
20361 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
20362 #:phases
20363 #~(modify-phases %standard-phases
20364 ;; This package provides a 'chardetect' executable that only
20365 ;; depends on Python, so customize the wrap phase to avoid
20366 ;; adding pytest and friends in order to save size.
20367 ;; (See also <https://bugs.gnu.org/25235>.)
20368 (replace 'wrap
20369 (lambda* (#:key inputs outputs #:allow-other-keys)
20370 (let* ((sitedir (site-packages inputs outputs))
20371 (python (dirname (dirname
20372 (search-input-file
20373 inputs "bin/python"))))
20374 (python-sitedir
20375 (string-append python "/lib/python"
20376 (python-version python)
20377 "/site-packages")))
20378 (wrap-program (string-append #$output "/bin/chardetect")
20379 `("GUIX_PYTHONPATH" ":" suffix
20380 ,(list sitedir python-sitedir)))))))))
20381 (home-page "https://github.com/chardet/chardet")
20382 (synopsis "Universal encoding detector for Python 2 and 3")
20383 (description
20384 "This package provides @code{chardet}, a Python module that can
20385automatically detect a wide range of file encodings.")
20386 (license license:lgpl2.1+)))
20387
20388(define-public python-charset-normalizer
20389 (package
20390 (name "python-charset-normalizer")
20391 (version "3.4.7")
20392 (source
20393 (origin
20394 (method git-fetch)
20395 (uri (git-reference
20396 (url "https://github.com/ousret/charset_normalizer")
20397 (commit version)))
20398 (file-name (git-file-name name version))
20399 (sha256 (base32 "0faqj59d0z0yzgvsxndy48xrlvj05lfdqaf9fsc61ckwzzhlkrvl"))))
20400 (build-system pyproject-build-system)
20401 (native-inputs
20402 (list python-pytest
20403 python-setuptools))
20404 (home-page "https://github.com/ousret/charset_normalizer")
20405 (synopsis "Universal Charset Detector, alternative to Chardet")
20406 (description "This library helps you read text from an unknown charset
20407encoding. Motivated by @code{chardet}, it tries to resolve the issue by
20408taking a new approach. All IANA character set names for which the Python core
20409library provides codecs are supported.")
20410 (license license:expat)))
20411
20412(define-public python-docopt
20413 (package
20414 (name "python-docopt")
20415 (version "0.6.2")
20416 (source
20417 (origin
20418 (method git-fetch)
20419 (uri (git-reference
20420 (url "https://github.com/docopt/docopt")
20421 (commit version)))
20422 (file-name (git-file-name name version))
20423 (sha256
20424 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
20425 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
20426 (build-system pyproject-build-system)
20427 ;; tests: 203 passed, 6 warnings
20428 (native-inputs
20429 (list python-pytest-8 python-setuptools))
20430 (home-page "http://docopt.org")
20431 (synopsis "Command-line interface description language for Python")
20432 (description
20433 "This library allows the user to define a command-line interface from a
20434program's help message rather than specifying it programmatically with
20435command-line parsers like @code{getopt} and @code{argparse}.")
20436 (license license:expat)))
20437
20438(define-public python-pythonanywhere
20439 (package
20440 (name "python-pythonanywhere")
20441 (version "0.19.0")
20442 (source
20443 (origin
20444 (method git-fetch)
20445 (uri (git-reference
20446 (url "https://github.com/pythonanywhere/helper_scripts")
20447 (commit (string-append "v" version))))
20448 (file-name (git-file-name name version))
20449 (sha256
20450 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
20451 (build-system pyproject-build-system)
20452 (arguments
20453 (list
20454 #:test-flags
20455 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
20456 "-k" (string-join
20457 ;; Network access is required to clone external
20458 ;; repositories.
20459 (list "not test_actually_creates_django_project_in_vir"
20460 "test_actually_downloads_repo"
20461 "test_actually_installing_a_real_package"
20462 "test_actually_works_against_example_repo"
20463 "test_autoconfigure_actually_works_against_example_repo"
20464 "test_exits_because_boolean_not_satisfied"
20465 "test_gets_version"
20466 "test_nuke_option_lets_you_run_twice"
20467 "test_nuke_option_lets_you_run_twice"
20468 "test_start_actually_creates_django_project_in_vir")
20469 " and not "))
20470 #:phases
20471 #~(modify-phases %standard-phases
20472 (add-after 'unpack 'relax-requirements
20473 (lambda _
20474 (substitute* "pyproject.toml"
20475 (("\"schema==.*\",")
20476 "\"schema\","))))
20477 (add-before 'check 'change-home
20478 (lambda _
20479 (setenv "HOME" "/tmp"))))))
20480 (native-inputs
20481 (list python-psutil
20482 python-pytest
20483 python-pytest-mock
20484 python-responses
20485 python-setuptools))
20486 (propagated-inputs
20487 (list python-dateutil
20488 python-docopt
20489 python-packaging
20490 python-pythonanywhere-core
20491 python-requests
20492 python-schema
20493 python-snakesay
20494 python-tabulate
20495 python-typer))
20496 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20497 (synopsis "PythonAnywhere helper tools for users")
20498 (description
20499 "PythonAnywhere provides a command-line interface and an application
20500programming interface that allows managing files Web apps, scheduled
20501tasks and students. It includes single-command deployment for the Django Girls
20502tutorial.")
20503 (license license:expat)))
20504
20505(define-public python-pythonanywhere-core
20506 (package
20507 (name "python-pythonanywhere-core")
20508 (version "0.3.0")
20509 (source
20510 (origin
20511 (method git-fetch)
20512 (uri (git-reference
20513 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20514 (commit (string-append "v" version))))
20515 (file-name (git-file-name name version))
20516 (sha256
20517 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20518 (build-system pyproject-build-system)
20519 (arguments
20520 (list
20521 #:phases
20522 #~(modify-phases %standard-phases
20523 (add-before 'check 'pre-check
20524 (lambda _
20525 (setenv "HOME" "/tmp"))))))
20526 (native-inputs
20527 (list python-poetry-core
20528 python-pytest
20529 python-pytest-mock
20530 python-responses))
20531 (propagated-inputs
20532 (list python-dateutil
20533 python-requests
20534 python-snakesay
20535 python-typing-extensions))
20536 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20537 (synopsis "API wrapper for PythonAnywhere services")
20538 (description
20539 "This package provides an API wrapper for programmatic management of
20540@code{PythonAnywhere} services.")
20541 (license license:expat)))
20542
20543(define-public python-dialog
20544 (package
20545 (name "python-dialog")
20546 (version "3.5.3")
20547 (source
20548 (origin
20549 (method url-fetch)
20550 (uri (pypi-uri "pythondialog" version))
20551 (sha256
20552 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20553 (modules '((guix build utils)))
20554 (snippet #~(delete-file-recursively "doc"))))
20555 (build-system pyproject-build-system)
20556 (arguments
20557 (list
20558 ;; XXX: There are no tests, but some examples. However, they need to
20559 ;; be run on a terminal.
20560 #:tests? #f
20561 #:phases
20562 #~(modify-phases %standard-phases
20563 (add-after 'unpack 'patch-path
20564 (lambda* (#:key inputs #:allow-other-keys)
20565 (substitute* "dialog.py"
20566 (("_path_to_executable\\(dialog\\)")
20567 (format #f "os.path.realpath(~s)"
20568 (search-input-file inputs "bin/dialog")))))))))
20569 (native-inputs (list python-setuptools))
20570 (inputs (list dialog))
20571 (home-page "https://pythondialog.sourceforge.net/")
20572 (synopsis "Python interface to the UNIX dialog utility")
20573 (description
20574 "A Python wrapper for the dialog utility. Its purpose is to provide an
20575easy to use, pythonic and comprehensive Python interface to dialog. This
20576allows one to make simple text-mode user interfaces on Unix-like systems")
20577 (license license:lgpl2.1)))
20578
20579(define-deprecated-package python-pythondialog python-dialog)
20580
20581(define-public python-confection
20582 (package
20583 (name "python-confection")
20584 (version "1.3.3")
20585 (source
20586 (origin
20587 (method git-fetch)
20588 (uri (git-reference
20589 (url "https://github.com/explosion/confection")
20590 (commit (string-append "release-v" version))))
20591 (file-name (git-file-name name version))
20592 (sha256
20593 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20594 (build-system pyproject-build-system)
20595 (arguments
20596 (list
20597 #:phases
20598 #~(modify-phases %standard-phases
20599 (add-before 'check 'patch-pythonpath
20600 (lambda _
20601 (setenv "PYTHONPATH"
20602 (string-append (getcwd) ":"
20603 (getenv "GUIX_PYTHONPATH"))))))))
20604 (propagated-inputs (list python-pydantic python-srsly))
20605 (native-inputs (list python-pytest python-setuptools))
20606 (home-page "https://github.com/explosion/confection")
20607 (synopsis "Config system for Python")
20608 (description
20609 "Confection is a lightweight library that offers a configuration system
20610letting you conveniently describe arbitrary trees of objects.")
20611 (license license:expat)))
20612
20613(define-public python-configobj
20614 (package
20615 (name "python-configobj")
20616 (version "5.0.9")
20617 (source
20618 (origin
20619 (method url-fetch)
20620 (uri (pypi-uri "configobj" version))
20621 (sha256
20622 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20623 (build-system pyproject-build-system)
20624 (native-inputs
20625 (list python-pytest
20626 python-setuptools))
20627 (home-page "https://github.com/DiffSK/configobj")
20628 (synopsis "Config file reading, writing and validation")
20629 (description
20630 "ConfigObj is a simple but powerful config file reader and writer: an
20631 ini file round tripper. Its main feature is that it is very easy to use,
20632with a straightforward programmer’s interface and a simple syntax for config
20633files.")
20634 (license license:bsd-3)))
20635
20636(define-public python-omegaconf
20637 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20638 (revision "1"))
20639 (package
20640 (name "python-omegaconf")
20641 (version (git-version "2.3.0" revision commit))
20642 (source
20643 (origin
20644 (method git-fetch)
20645 (uri (git-reference
20646 (url "https://github.com/omry/omegaconf")
20647 (commit commit)))
20648 (file-name (git-file-name name version))
20649 (modules '((guix build utils)))
20650 (snippet
20651 #~(begin
20652 (delete-file-recursively "build_helpers/bin")
20653 (substitute* "build_helpers/build_helpers.py"
20654 (("java") "antlr4")
20655 (("\"-jar\",") "")
20656 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20657 (sha256
20658 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20659 (build-system pyproject-build-system)
20660 (arguments
20661 (list
20662 #:test-flags
20663 ;; XXX: Those tests currently fail collection.
20664 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20665 "--ignore=tests/test_basic_ops_list.py"
20666 "--ignore=tests/test_merge.py"
20667 "--ignore=tests/test_select.py")
20668 #:phases
20669 #~(modify-phases %standard-phases
20670 (add-after 'unpack 'loosen-requirements
20671 (lambda _
20672 (substitute* "requirements/base.txt"
20673 (("antlr4-python3-runtime==.*")
20674 "antlr4-python3-runtime >=4.9\n"))
20675 ;; Ignore deprecation warnings.
20676 (substitute* "pyproject.toml"
20677 (("-Werror") "")))))))
20678 (native-inputs
20679 (list icedtea
20680 antlr4
20681 python-pytest
20682 python-pytest-mock
20683 python-setuptools
20684 python-wheel))
20685 (propagated-inputs
20686 (list python-antlr4-runtime
20687 python-pydevd
20688 python-pyyaml))
20689 (home-page "https://github.com/omry/omegaconf")
20690 (synopsis "Flexible configuration system")
20691 (description
20692 "OmegaConf is a hierarchical configuration system and supports merging
20693configurations from multiple sources. It provides a consistent API regardless
20694of how the configuration was created.")
20695 (license license:bsd-3))))
20696
20697(define-public python-configargparse
20698 (package
20699 (name "python-configargparse")
20700 (version "1.7.5")
20701 (source
20702 (origin
20703 (method git-fetch)
20704 (uri (git-reference
20705 (url "https://github.com/bw2/ConfigArgParse")
20706 (commit (string-append "v" version))))
20707 (file-name (git-file-name name version))
20708 (sha256
20709 (base32 "04d54knfjgxci3far2cp72xr8bjabq0xcawc0ks2nk7mfl1p05v5"))))
20710 (build-system pyproject-build-system)
20711 (native-inputs
20712 (list python-mock
20713 python-pytest
20714 python-pyyaml
20715 python-setuptools
20716 python-setuptools-scm))
20717 (home-page "https://github.com/bw2/ConfigArgParse")
20718 (synopsis "Replacement for argparse")
20719 (description
20720 "This package provides a drop-in replacement for argparse that allows
20721options to also be set via config files and/or environment variables.")
20722 (license license:expat)))
20723
20724(define-public python-connection-pool
20725 (package
20726 (name "python-connection-pool")
20727 (version "0.0.3")
20728 (source
20729 (origin
20730 (method git-fetch)
20731 (uri (git-reference
20732 (url "https://github.com/zhouyl/ConnectionPool")
20733 (commit version)))
20734 (file-name (git-file-name name version))
20735 (sha256
20736 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20737 (build-system pyproject-build-system)
20738 (arguments (list #:tests? #f)) ; No tests.
20739 (native-inputs (list python-setuptools))
20740 (home-page "https://github.com/zhouyl/ConnectionPool")
20741 (synopsis "Thread-safe connection pool")
20742 (description
20743 "This package provides a library implementing a thread-safe connection
20744pool.")
20745 (license license:expat)))
20746
20747(define-public python-argparse-dataclass
20748 (package
20749 (name "python-argparse-dataclass")
20750 (version "2.0.0")
20751 (source
20752 (origin
20753 (method git-fetch) ;no tests in PyPI archive
20754 (uri (git-reference
20755 (url "https://github.com/mivade/argparse_dataclass")
20756 (commit version)))
20757 (file-name (git-file-name name version))
20758 (sha256
20759 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20760 (build-system pyproject-build-system)
20761 (native-inputs (list python-pytest python-setuptools python-wheel))
20762 (home-page "https://github.com/mivade/argparse_dataclass")
20763 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20764 (description
20765 "This package provides declarative command-line interfaces using argparse
20766and dataclasses.")
20767 (license license:expat)))
20768
20769(define-public python-argparse-manpage
20770 (package
20771 (name "python-argparse-manpage")
20772 (version "4.7")
20773 (source
20774 (origin
20775 (method url-fetch)
20776 (uri (pypi-uri "argparse_manpage" version))
20777 (sha256
20778 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20779 (build-system pyproject-build-system)
20780 (arguments
20781 (list
20782 #:test-flags
20783 ;; Tests require PIP.
20784 #~(list "--ignore=tests/test_examples.py")))
20785 (native-inputs
20786 (list python-pytest
20787 python-setuptools))
20788 (home-page "https://github.com/praiskup/argparse-manpage")
20789 (synopsis "Build manual page from Python's ArgumentParser object")
20790 (description
20791 "This package provides tools to build manual pages from Python's
20792@code{ArgumentParser} object.")
20793 (license license:asl2.0)))
20794
20795(define-public python-atomicwrites
20796 (package
20797 (name "python-atomicwrites")
20798 (version "1.4.0")
20799 (source
20800 (origin
20801 (method git-fetch)
20802 (uri (git-reference
20803 (url "https://github.com/untitaker/python-atomicwrites")
20804 (commit version)))
20805 (file-name (git-file-name name version))
20806 (sha256
20807 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20808 (build-system pyproject-build-system)
20809 (native-inputs (list python-pytest python-setuptools))
20810 (synopsis "Atomic file writes in Python")
20811 (description
20812 "Library for atomic file writes using platform dependent tools
20813for atomic file system operations.")
20814 (home-page "https://github.com/untitaker/python-atomicwrites")
20815 (license license:expat)))
20816
20817(define-public python-qstylizer
20818 (package
20819 (name "python-qstylizer")
20820 (version "0.2.4")
20821 (source
20822 (origin
20823 (method git-fetch)
20824 (uri (git-reference
20825 (url "https://github.com/blambright/qstylizer")
20826 (commit version)))
20827 (file-name (git-file-name name version))
20828 (sha256
20829 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20830 (build-system pyproject-build-system)
20831 (native-inputs
20832 (list python-pbr
20833 python-pytest
20834 python-pytest-mock
20835 python-setuptools
20836 python-wheel))
20837 (propagated-inputs
20838 (list python-inflection
20839 python-tinycss2))
20840 (home-page "https://github.com/blambright/qstylizer")
20841 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20842 (description "@code{qstylizer} is a Python package designed to help with
20843the construction of PyQt/PySide stylesheets.")
20844 (license license:expat)))
20845
20846(define-public python-click-threading
20847 (package
20848 (name "python-click-threading")
20849 (version "0.5.0")
20850 (source
20851 (origin
20852 (method git-fetch)
20853 (uri (git-reference
20854 (url "https://github.com/click-contrib/click-threading")
20855 (commit version)))
20856 (file-name (git-file-name name version))
20857 (sha256
20858 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20859 (build-system pyproject-build-system)
20860 (native-inputs (list python-pytest python-setuptools))
20861 (propagated-inputs (list python-click))
20862 (synopsis "Utilities for multithreading in Click")
20863 (description
20864 "This package provides utilities for multithreading in Click
20865applications.")
20866 (home-page "https://github.com/click-contrib/click-threading")
20867 (license license:expat)))
20868
20869(define-public python-click-log
20870 (package
20871 (name "python-click-log")
20872 (version "0.3.2")
20873 (source
20874 (origin
20875 (method git-fetch)
20876 (uri (git-reference
20877 (url "https://github.com/click-contrib/click-log")
20878 (commit version)))
20879 (file-name (git-file-name name version))
20880 (sha256
20881 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20882 (build-system pyproject-build-system)
20883 (native-inputs (list python-pytest python-setuptools))
20884 (propagated-inputs (list python-click))
20885 (synopsis "Logging for click applications")
20886 (description
20887 "This package provides a Python library for logging Click applications.")
20888 (home-page "https://github.com/click-contrib/click-log")
20889 (license license:expat)))
20890
20891(define-public python-click-default-group
20892 (package
20893 (name "python-click-default-group")
20894 (version "1.2.4")
20895 (source
20896 (origin
20897 (method git-fetch) ; no tests in PyPI release
20898 (uri (git-reference
20899 (url "https://github.com/click-contrib/click-default-group")
20900 (commit (string-append "v" version))))
20901 (file-name (git-file-name name version))
20902 (sha256
20903 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20904 (build-system pyproject-build-system)
20905 (propagated-inputs
20906 (list python-click))
20907 (native-inputs
20908 (list python-flit-core python-pytest))
20909 (synopsis "Extends click.Group")
20910 (description "This package extends click.Group to invoke a command without
20911explicit subcommand name.")
20912 (home-page "https://github.com/click-contrib/click-default-group")
20913 (license license:bsd-3)))
20914
20915(define-public python-apipkg
20916 (package
20917 (name "python-apipkg")
20918 (version "3.0.2")
20919 (source
20920 (origin
20921 (method url-fetch)
20922 (uri (pypi-uri "apipkg" version))
20923 (sha256
20924 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20925 (build-system pyproject-build-system)
20926 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20927 (native-inputs
20928 (list python-hatch-vcs
20929 python-hatchling))
20930 (home-page "https://github.com/pytest-dev/apipkg")
20931 (synopsis "Namespace control and lazy-import mechanism")
20932 (description "With apipkg you can control the exported namespace of a Python
20933package and greatly reduce the number of imports for your users. It is a small
20934pure Python module that works on virtually all Python versions.")
20935 (license license:expat)))
20936
20937(define-public python-essentials
20938 (package
20939 (name "python-essentials")
20940 (version "1.1.8")
20941 (source
20942 (origin
20943 (method git-fetch)
20944 (uri (git-reference
20945 (url "https://github.com/Neoteroi/essentials")
20946 (commit (string-append "v" version))))
20947 (file-name (git-file-name name version))
20948 (sha256
20949 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20950 (build-system pyproject-build-system)
20951 (native-inputs
20952 (list python-hatchling
20953 python-pydantic
20954 python-pytest-asyncio))
20955 (home-page "https://github.com/Neoteroi/essentials/wiki")
20956 (synopsis
20957 "Utility functions, exceptions, and classes for Python applications")
20958 (description
20959 "Essentials is a collection of functions, exceptions, and classes for Python
20960applications. Examples of utilities are exceptions for common scenarios,
20961friendly JSON encoder, decorators for retries and logging.")
20962 (license license:expat)))
20963
20964(define-public python-execnet
20965 (package
20966 (name "python-execnet")
20967 (version "2.1.2")
20968 (source
20969 (origin
20970 (method git-fetch)
20971 (uri (git-reference
20972 (url "https://github.com/pytest-dev/execnet")
20973 (commit (string-append "v" version))))
20974 (file-name (git-file-name name version))
20975 (sha256
20976 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20977 (build-system pyproject-build-system)
20978 (arguments
20979 (list
20980 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20981 #:phases
20982 #~(modify-phases %standard-phases
20983 (add-before 'check 'pre-check
20984 (lambda _
20985 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20986 ;; test in 'testing/test_gateway.py'.
20987 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20988 (native-inputs
20989 (list python-hatchling
20990 python-hatch-vcs
20991 python-pytest-bootstrap))
20992 (home-page "https://codespeak.net/execnet/")
20993 (synopsis "Rapid multi-Python deployment")
20994 (description
20995 "Execnet provides a share-nothing model with channel-send/receive communication
20996for distributing execution across many Python interpreters across version,
20997platform and network barriers. It has a minimal and fast API targeting the
20998following uses:
20999
21000@enumerate
21001@item distribute tasks to (many) local or remote CPUs
21002@item write and deploy hybrid multi-process applications
21003@item write scripts to administer multiple environments
21004@end enumerate")
21005 (license license:expat)))
21006
21007(define-public python-icalendar
21008 (package
21009 (name "python-icalendar")
21010 (version "6.3.2")
21011 (source
21012 (origin
21013 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
21014 (uri (pypi-uri "icalendar" version))
21015 (sha256
21016 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
21017 (build-system pyproject-build-system)
21018 (arguments
21019 (list
21020 ;; tests: 8995 passed, 21 skipped, 2 deselected
21021 #:test-flags
21022 #~(list
21023 "-k"
21024 (string-append
21025 ;; See: <https://github.com/collective/icalendar/issues/812>.
21026 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
21027 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
21028 (native-inputs
21029 (list python-hatch-vcs
21030 python-hatchling
21031 python-pytest
21032 python-pytz))
21033 (propagated-inputs
21034 (list python-dateutil
21035 python-tzdata))
21036 (home-page "https://github.com/collective/icalendar")
21037 (synopsis "Python library for parsing and generating iCalendar files")
21038 (description
21039 "@code{icalendar} is a Python library for parsing and generating
21040iCalendar files.")
21041 (license license:bsd-2)))
21042
21043(define-public python-args
21044 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
21045 (revision "0"))
21046 (package
21047 (name "python-args")
21048 (version (git-version "0.1.0" revision commit))
21049 (source
21050 (origin
21051 (method git-fetch)
21052 (uri (git-reference
21053 (url "https://github.com/kennethreitz-archive/args")
21054 (commit commit)))
21055 (file-name (git-file-name name version))
21056 (sha256
21057 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
21058 (build-system pyproject-build-system)
21059 (arguments
21060 (list
21061 #:tests? #f ; XXX: python-nose is deprecated.
21062 #:phases
21063 #~(modify-phases %standard-phases
21064 (add-after 'unpack 'patch-args.py
21065 (lambda _
21066 (substitute* "args.py"
21067 (("basestring")
21068 "str")))))))
21069 (native-inputs (list python-setuptools python-wheel))
21070 (home-page "https://github.com/kennethreitz-archive/args")
21071 (synopsis "Command-line argument parser")
21072 (description
21073 "This library provides a Python module to parse command-line arguments.")
21074 (license license:bsd-3))))
21075
21076(define-public python-clint
21077 (package
21078 (name "python-clint")
21079 (version "0.5.1")
21080 (source (origin
21081 (method url-fetch)
21082 (uri (pypi-uri "clint" version))
21083 (sha256
21084 (base32
21085 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
21086 (build-system pyproject-build-system)
21087 (native-inputs
21088 (list python-pytest python-setuptools python-wheel))
21089 (propagated-inputs
21090 (list python-args))
21091 (home-page "https://github.com/kennethreitz/clint")
21092 (synopsis "Command-line interface tools")
21093 (description
21094 "Clint is a Python module filled with a set of tools for developing
21095command-line applications, including tools for colored and indented
21096output, progress bar display, and pipes.")
21097 (license license:isc)))
21098
21099(define-public python-rply
21100 (package
21101 (name "python-rply")
21102 (version "0.7.8")
21103 (source
21104 (origin
21105 (method git-fetch)
21106 (uri (git-reference
21107 (url "https://github.com/alex/rply")
21108 (commit (string-append "v" version))))
21109 (file-name (git-file-name name version))
21110 (sha256
21111 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
21112 (build-system pyproject-build-system)
21113 (arguments
21114 (list
21115 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
21116 #:phases
21117 #~(modify-phases %standard-phases
21118 (add-before 'check 'fix-pytest-use
21119 (lambda _
21120 (substitute* (find-files "tests" "\\.py$")
21121 (("import py")
21122 "import pytest")
21123 (("py\\.test")
21124 "pytest"))
21125 (setenv "HOME" (getcwd)))))))
21126 (native-inputs (list python-pytest python-setuptools))
21127 (propagated-inputs (list python-appdirs))
21128 (home-page "https://github.com/alex/rply")
21129 (synopsis "Parser generator for Python")
21130 (description
21131 "This package provides a pure Python based parser generator, that also
21132works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
21133with a new public API, and RPython support.")
21134 (license license:bsd-3)))
21135
21136(define-public python-hy
21137 (package
21138 (name "python-hy")
21139 (version "1.3.1")
21140 (source
21141 (origin
21142 (method git-fetch)
21143 (uri (git-reference
21144 (url "https://github.com/hylang/hy")
21145 (commit version)))
21146 (file-name (git-file-name name version))
21147 (sha256
21148 (base32 "0fc1qjr2kkl3a5hig9l2g3ysapvc16gj1gyblaszm3xza6w0zn58"))))
21149 (build-system pyproject-build-system)
21150 (arguments
21151 (list
21152 ;; This test expects the hy executable to be called 'hy', but in Guix
21153 ;; it's .hy-real.
21154 #:test-flags #~(list "-k" "not test_sys_executable")))
21155 (native-inputs (list python-pytest python-setuptools))
21156 (propagated-inputs (list python-funcparserlib))
21157 (home-page "https://hylang.org/hy/doc")
21158 (synopsis "Lisp frontend to Python")
21159 (description
21160 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
21161its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
21162Python at your fingertips, in Lisp form.")
21163 (license license:expat)))
21164
21165(define-public python-hissp
21166 (package
21167 (name "python-hissp")
21168 (version "0.5.0")
21169 (source
21170 (origin
21171 (method git-fetch)
21172 (uri (git-reference
21173 (url "https://github.com/gilch/hissp")
21174 (commit (string-append "v" version))))
21175 (file-name (git-file-name name version))
21176 (sha256
21177 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
21178 (build-system pyproject-build-system)
21179 (arguments (list #:test-backend #~'unittest))
21180 (native-inputs (list python-hypothesis python-setuptools))
21181 (home-page "https://github.com/gilch/hissp")
21182 (synopsis "It's Python with a Lissp")
21183 (description
21184 "Hissp is a modular Lisp implementation that compiles to a functional
21185subset of Python—Syntactic macro metaprogramming with full access to the
21186Python ecosystem.")
21187 (license license:asl2.0)))
21188
21189(define-public python-promise
21190 (package
21191 (name "python-promise")
21192 (version "2.3.0")
21193 (source
21194 (origin
21195 (method git-fetch)
21196 (uri (git-reference
21197 (url "https://github.com/syrusakbary/promise")
21198 (commit (string-append "v" version))))
21199 (file-name (git-file-name name version))
21200 (sha256
21201 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
21202 (build-system pyproject-build-system)
21203 (arguments
21204 (list
21205 #:test-flags
21206 #~(list "--ignore=tests/test_benchmark.py"
21207 ;; Issues with pytest-asyncio
21208 "--ignore=tests/test_awaitable.py"
21209 "-k" (string-join
21210 (list "not test_issue_9_safe"
21211 ;; Stacktrace issues.
21212 "test_thrown_exceptions_have_stacktrace"
21213 "test_thrown_exceptions_preserve_stacktrace")
21214 " and not "))))
21215 (native-inputs
21216 (list python-mock
21217 python-pytest
21218 python-pytest-asyncio
21219 python-setuptools))
21220 (propagated-inputs (list python-six))
21221 (home-page "https://github.com/syrusakbary/promise")
21222 (synopsis "Promises/A+ implementation for Python")
21223 (description
21224 "This package provides an implementation of Promises in Python. It is a
21225super set of Promises/A+ designed to have readable, performant code and to
21226provide just the extensions that are absolutely necessary for using promises
21227in Python.")
21228 (license license:expat)))
21229
21230(define-public python-progress
21231 (package
21232 (name "python-progress")
21233 (version "1.6")
21234 (source
21235 (origin
21236 (method git-fetch)
21237 (uri (git-reference
21238 (url "https://github.com/verigak/progress/")
21239 (commit version)))
21240 (file-name (git-file-name name version))
21241 (sha256
21242 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
21243 (snippet #~(delete-file "demo.gif"))))
21244 (build-system pyproject-build-system)
21245 (arguments
21246 (list
21247 #:test-backend #~'custom
21248 #:test-flags #~(list "test_progress.py")))
21249 (native-inputs (list python-setuptools))
21250 (home-page "https://github.com/verigak/progress/")
21251 (synopsis "Progress reporting bars for Python")
21252 (description
21253 "This Python package provides progress reporting for visual of progress
21254of long running operations. There are multiple choices of progress bars and
21255spinners, with customizable options, such as width, fill character, and
21256suffix.")
21257 (license license:isc)))
21258
21259(define-public python-progressbar2
21260 (package
21261 (name "python-progressbar2")
21262 (version "4.5.0")
21263 (source
21264 (origin
21265 (method url-fetch)
21266 (uri (pypi-uri "progressbar2" version))
21267 (sha256
21268 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
21269 (build-system pyproject-build-system)
21270 (arguments
21271 (list
21272 #:test-flags #~(list "--pyargs" "progressbar" "tests")
21273 #:phases
21274 #~(modify-phases %standard-phases
21275 (add-after 'unpack 'fix-pytest-config
21276 (lambda _
21277 ;; Drop test coverage requirements.
21278 (substitute* "pytest.ini"
21279 ((".*-cov.*") "")))))))
21280 (native-inputs
21281 (list python-dill
21282 python-pytest
21283 python-freezegun
21284 python-setuptools
21285 python-setuptools-scm
21286 python-wheel))
21287 (propagated-inputs
21288 (list python-utils))
21289 (home-page "https://github.com/WoLpH/python-progressbar")
21290 (synopsis "Text progress bar library for Python")
21291 (description
21292 "This package provides a Python progressbar library to provide
21293visual (yet text based) progress to long running operations.")
21294 (license license:bsd-3)))
21295
21296(define-public python-progressbar33
21297 (package
21298 (name "python-progressbar33")
21299 (version "2.4")
21300 (source
21301 (origin
21302 (method git-fetch)
21303 (uri (git-reference
21304 (url "https://github.com/germangh/python-progressbar")
21305 (commit (string-append "v" version))))
21306 (file-name (git-file-name name version))
21307 (sha256
21308 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
21309 (build-system pyproject-build-system)
21310 (arguments
21311 (list
21312 #:test-backend #~'custom
21313 #:test-flags #~(list "examples.py")))
21314 (native-inputs (list python-setuptools))
21315 (home-page "https://github.com/germangh/python-progressbar")
21316 (synopsis "Text progress bar library for Python")
21317 (description
21318 "This package provides a text progress bar library for Python. This
21319version only differs from the original @code{progressbar} package in that it
21320uses relative package imports instead of absolute imports, which is necessary
21321for the module to work under Python 3.3.")
21322 ;; Either or both of these licenses may be selected.
21323 (license (list license:lgpl2.1+ license:bsd-3))))
21324
21325;; XXX: Not maintained since 2012.
21326(define-public python-monthdelta
21327 (package
21328 (name "python-monthdelta")
21329 (version "0.9.1")
21330 (source
21331 (origin
21332 (method url-fetch)
21333 (uri (pypi-uri "MonthDelta" version))
21334 (sha256
21335 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
21336 (build-system pyproject-build-system)
21337 (arguments
21338 (list #:tests? #f)) ; No tests.
21339 (native-inputs (list python-setuptools))
21340 (home-page "http://packages.python.org/MonthDelta")
21341 (synopsis "Date computations with months")
21342 (description
21343 "MonthDelta provides functionality to do date computations with months.")
21344 (license license:expat)))
21345
21346(define-public python-moto
21347 (package
21348 (name "python-moto")
21349 (version "5.1.20")
21350 (source (origin
21351 (method url-fetch)
21352 (uri (pypi-uri "moto" version))
21353 (sha256
21354 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
21355 (build-system pyproject-build-system)
21356 (arguments
21357 (list
21358 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
21359 #:test-flags
21360 #~(list "-m" "not network and not requires_docker"
21361 ;; Not all of the tests are thread save, see:
21362 ;; <https://github.com/getmoto/moto/issues/7786>.
21363 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
21364 "-k" (string-join
21365 ;; Network access is required.
21366 (list "not test_passthrough_calls_for_entire_service"
21367 "test_passthrough_calls_for_specific_url"
21368 "test_passthrough_calls_for_wildcard_urls"
21369 "test_put_record_batch_http_destination"
21370 "test_put_record_http_destination"
21371 "test_s3_server_post_cors_multiple_origins"
21372 "test_with_custom_request_header"
21373 ;; AttributeError: 'ImportError' object has no
21374 ;; attribute 'message'
21375 "test_batch_update"
21376 "test_batch_update__not_enough_parameters"
21377 "test_execute_transaction"
21378 "test_without_primary_key_in_where_clause")
21379 " and not ")
21380 "tests")
21381 #:phases
21382 #~(modify-phases %standard-phases
21383 (add-after 'unpack 'patch-hardcoded-executable-names
21384 (lambda* (#:key inputs #:allow-other-keys)
21385 (let ((bash-exec (search-input-file inputs "/bin/sh")))
21386 (substitute* "moto/batch/models.py"
21387 (("/bin/sh") bash-exec))
21388 (substitute* (find-files "tests" "\\.py$")
21389 (("#!/bin/bash") (string-append "#!" bash-exec))))))
21390 (add-before 'check 'pre-check
21391 (lambda _
21392 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
21393 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
21394 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
21395 (native-inputs
21396 (list python-flask
21397 python-flask-cors
21398 python-freezegun
21399 python-pycognito
21400 python-pyotp
21401 python-pytest
21402 python-setuptools))
21403 (inputs
21404 (list bash-minimal))
21405 (propagated-inputs
21406 (list python-antlr4-runtime
21407 python-aws-xray-sdk
21408 python-boto3
21409 python-botocore
21410 python-cfn-lint
21411 python-cryptography
21412 python-dateutil
21413 python-graphql-core
21414 python-jinja2
21415 python-joserfc
21416 python-jsonpath-ng
21417 python-multipart
21418 python-openapi-spec-validator
21419 python-py-partiql-parser
21420 python-pyparsing
21421 python-requests
21422 python-responses
21423 python-werkzeug
21424 python-xmltodict))
21425 (home-page "https://github.com/spulec/moto")
21426 (synopsis "Mock out the boto library")
21427 (description
21428 "@code{moto} is a library designed to easily mock out the
21429@code{boto} library.")
21430 (license license:asl2.0)))
21431
21432(define-public python-plumbum
21433 (package
21434 (name "python-plumbum")
21435 (version "1.7.0")
21436 (source
21437 (origin
21438 (method git-fetch)
21439 (uri (git-reference
21440 (url "https://github.com/tomerfiliba/plumbum")
21441 (commit (string-append "v" version))))
21442 (file-name (git-file-name name version))
21443 (sha256
21444 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
21445 (build-system pyproject-build-system)
21446 (arguments
21447 (list
21448 #:test-flags
21449 #~(list "--ignore=tests/test_remote.py"
21450 "--ignore=tests/test_putty.py"
21451 "--ignore=tests/test_sudo.py"
21452 "-k"
21453 (string-join (list "not test_home"
21454 "test_iter_lines_error"
21455 "test_quoting"
21456 "test_copy_move_delete")
21457 " and not "))))
21458 (native-inputs
21459 (list procps
21460 python-psutil
21461 python-pytest
21462 python-setuptools
21463 python-setuptools-scm
21464 python-wheel))
21465 (home-page "https://plumbum.readthedocs.io")
21466 (synopsis "Python shell combinators library")
21467 (description
21468 "Plumbum is a library of tools for replacing shell scripts with Python
21469code.")
21470 (license license:expat)))
21471
21472(define-public python-deprecation
21473 (package
21474 (name "python-deprecation")
21475 (version "2.1.0")
21476 (source
21477 (origin
21478 (method url-fetch)
21479 (uri (pypi-uri "deprecation" version))
21480 (sha256
21481 (base32
21482 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21483 (build-system pyproject-build-system)
21484 (arguments
21485 (list
21486 #:test-backend #~'unittest
21487 #:phases
21488 #~(modify-phases %standard-phases
21489 (add-after 'unpack 'drop-unittest2
21490 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21491 (lambda _
21492 (substitute* "tests/test_deprecation.py"
21493 (("import unittest2")
21494 "import unittest as unittest2")))))))
21495 (native-inputs
21496 (list python-setuptools))
21497 (propagated-inputs
21498 (list python-packaging))
21499 (home-page "https://deprecation.readthedocs.io/")
21500 (synopsis "Python library to handle automated deprecations")
21501 (description
21502 "This is a library that enables automated deprecations. It offers the
21503@code{deprecated()} decorator to wrap functions, providing proper warnings
21504both in documentation and via Python’s warnings system, as well as the
21505@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21506that deprecated code is eventually removed.")
21507 (license license:asl2.0)))
21508
21509(define-public python-jmespath
21510 (package
21511 (name "python-jmespath")
21512 (version "1.0.1")
21513 (source
21514 (origin
21515 (method url-fetch)
21516 (uri (pypi-uri "jmespath" version))
21517 (sha256
21518 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21519 (build-system pyproject-build-system)
21520 (native-inputs
21521 (list python-pytest
21522 python-setuptools))
21523 (home-page "https://github.com/jmespath/jmespath.py")
21524 (synopsis "JSON Matching Expressions")
21525 (description
21526 "JMESPath (pronounced “james path”) is a Python library that allows one
21527to declaratively specify how to extract elements from a JSON document.")
21528 (license license:expat)))
21529
21530(define-public python-asteval
21531 (package
21532 (name "python-asteval")
21533 (version "1.0.6")
21534 (source
21535 (origin
21536 (method url-fetch)
21537 (uri (pypi-uri "asteval" version))
21538 (sha256
21539 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21540 (build-system pyproject-build-system)
21541 (native-inputs
21542 (list python-pytest python-setuptools python-setuptools-scm))
21543 (home-page "https://github.com/newville/asteval")
21544 (synopsis "Minimalistic evaluator of Python expressions")
21545 (description
21546 "This package provides a minimalistic evaluator of Python expression
21547using the @code{ast} module.")
21548 (license license:expat)))
21549
21550(define-public python-lmfit
21551 (package
21552 (name "python-lmfit")
21553 (version "1.3.4")
21554 (source
21555 (origin
21556 (method git-fetch)
21557 (uri (git-reference
21558 (url "https://github.com/lmfit/lmfit-py")
21559 (commit version)))
21560 (file-name (git-file-name name version))
21561 (sha256
21562 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21563 (build-system pyproject-build-system)
21564 (native-inputs
21565 (list python-pytest
21566 python-setuptools
21567 python-setuptools-scm))
21568 (propagated-inputs
21569 (list python-asteval
21570 python-dill
21571 python-numpy
21572 python-scipy
21573 python-uncertainties))
21574 (home-page "https://lmfit.github.io/lmfit-py/")
21575 (synopsis "Least-Squares minimization with bounds and constraints")
21576 (description
21577 "Lmfit provides a high-level interface to non-linear optimization and
21578curve fitting problems for Python. It builds on and extends many of the
21579optimization methods of @code{scipy.optimize}. Initially inspired by (and
21580named for) extending the Levenberg-Marquardt method from
21581@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21582enhancements to optimization and data fitting problems.")
21583 (license license:bsd-3)))
21584
21585(define-public python-bokeh
21586 (package
21587 (name "python-bokeh")
21588 ;; Update bokehjs on (gnu packages javascript) to the same version.
21589 (version "3.10.0")
21590 (source
21591 (origin
21592 (method git-fetch)
21593 (uri (git-reference
21594 (url "https://github.com/bokeh/bokeh")
21595 (commit version)))
21596 (file-name (git-file-name name version))
21597 (sha256
21598 (base32 "0gh3zmc6nb7awxgpyry3ncy15a18kmimm1ja6sa0qprw4bysx1xb"))
21599 (patches (list (search-patch "python-bokeh-bokehjs-env.patch")))
21600 (modules '((guix build utils)))
21601 (snippet
21602 #~(delete-file-recursively "bokehjs"))))
21603 (build-system pyproject-build-system)
21604 (arguments
21605 (list
21606 #:test-flags
21607 #~(list
21608 ;; Ignore bokehjs outdated resources tests.
21609 ;; 11983 passed, 23 skipped, 1 deselected.
21610 "--ignore=tests/test_bokehjs.py" ;1 failed.
21611 "--ignore=tests/test_defaults.py" ;1 failed.
21612 "--ignore=tests/test_examples.py" ;430 failed.
21613 "--ignore=tests/test_cross.py" ;8 failed.
21614 "--ignore=tests/codebase/" ;12 failed.
21615 "--ignore=tests/unit/bokeh/embed/" ;3 failed.
21616 "--ignore=tests/unit/bokeh/core/test_templates.py" ;2 failed.
21617 "--ignore=tests/unit/bokeh/test_resources.py" ;5 failed.
21618 "--ignore=tests/unit/bokeh/util/test_compiler.py" ;4 failed.
21619 "--ignore=tests/unit/bokeh/test_ext.py" ;1 failed.
21620 "--ignore=tests/unit/bokeh/server/" ;3 failed
21621 "--ignore=tests/unit/bokeh/util/test_package.py" ;1 failed.
21622 "-k" "not test_handling_SIGTERM")
21623 #:phases
21624 #~(modify-phases %standard-phases
21625 ;; Skip bokehjs build and set environment
21626 (add-after 'unpack 'skip-bokehjs-build-install
21627 (lambda _
21628 (substitute* "setup.py"
21629 ((" else:" all)
21630 (string-append
21631 " elif action == \"skip\":\n"
21632 " return\n"
21633 all)))
21634 (setenv "BOKEHJS_ACTION" "skip")
21635 (setenv "HOME" "/tmp")))
21636 (add-before 'build 'set-version
21637 (lambda _
21638 (substitute* "pyproject.toml"
21639 ((", \"setuptools-git-versioning\"") "")
21640 (("dynamic = \\[\"version\"\\]")
21641 (string-append "version = '" #$version "'"))))))))
21642 (native-inputs
21643 (list git-minimal
21644 python-beautifulsoup4
21645 python-dateutil
21646 python-flaky
21647 python-json5
21648 python-mock
21649 python-nbconvert
21650 python-pandas
21651 python-pytest
21652 python-pytest-asyncio
21653 python-pytest-timeout
21654 python-pytz
21655 python-requests
21656 python-setuptools
21657 python-toml
21658 python-wheel))
21659 (propagated-inputs
21660 (list node-bokehjs
21661 python-contourpy
21662 python-jinja2
21663 python-narwhals
21664 python-numpy
21665 python-packaging
21666 python-pandas
21667 python-pillow
21668 python-pyyaml
21669 python-tornado
21670 python-xyzservices))
21671 (native-search-paths
21672 (list (search-path-specification
21673 (variable "BOKEHJS_PATH")
21674 (files '("bokehjs/static")))))
21675 (home-page "https://github.com/bokeh/bokeh")
21676 (synopsis "Interactive plots and applications in the browser from Python")
21677 (description
21678 "This package provides tools for interactive plots and applications in the
21679browser from Python.")
21680 (license license:bsd-3)))
21681
21682;; TODO: Move to python-web.
21683(define-public python-botocore
21684 ;; Note: When updating botocore, also make sure that boto3 and awscli
21685 ;; are compatible.
21686 (package
21687 (name "python-botocore")
21688 (version "1.42.5")
21689 (source
21690 (origin
21691 (method url-fetch)
21692 (uri (pypi-uri "botocore" version))
21693 (sha256
21694 (base32
21695 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21696 (build-system pyproject-build-system)
21697 (arguments
21698 (list
21699 ;; tests: 4496 passed, 87 skipped
21700 #:test-flags
21701 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21702 ;; The full test suite is huge, run some of it's portion.
21703 "--ignore=tests/integration"
21704 "--ignore=tests/functional")))
21705 (native-inputs
21706 (list python-jsonschema
21707 python-pytest
21708 python-pytest-xdist
21709 python-setuptools))
21710 (propagated-inputs
21711 (list python-dateutil
21712 python-jmespath
21713 python-urllib3))
21714 (home-page "https://github.com/boto/botocore")
21715 (synopsis "Low-level interface to AWS")
21716 (description
21717 "Botocore is a Python library that provides a low-level interface to the
21718Amazon Web Services (AWS) API.")
21719 (license license:asl2.0)))
21720
21721(define-public python-boto3
21722 (package
21723 (name "python-boto3")
21724 (version "1.42.5")
21725 (source
21726 (origin
21727 (method git-fetch)
21728 (uri (git-reference
21729 (url "https://github.com/boto/boto3")
21730 (commit version)))
21731 (file-name (git-file-name name version))
21732 (sha256
21733 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21734 (build-system pyproject-build-system)
21735 (arguments
21736 (list
21737 ;; tests: 1435 passed, 22 skipped, 1 warning
21738 #:test-flags
21739 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21740 ;; Integration tests are trying to connect to AWS.
21741 "--ignore=tests/integration")))
21742 (native-inputs
21743 (list python-mock
21744 python-pytest
21745 python-pytest-xdist
21746 python-setuptools))
21747 (propagated-inputs
21748 (list python-botocore
21749 python-jmespath
21750 python-s3transfer))
21751 (home-page "https://github.com/boto/boto3")
21752 (synopsis "AWS SDK for Python")
21753 (description
21754 "Boto3 is a Python library for writing programs that interact with
21755@acronym{AWS,Amazon Web Services}.")
21756 (license license:asl2.0)))
21757
21758(define-public python-pyfiglet
21759 (package
21760 (name "python-pyfiglet")
21761 (version "1.0.4")
21762 (source
21763 (origin
21764 (method git-fetch)
21765 (uri (git-reference
21766 (url "https://github.com/pwaller/pyfiglet")
21767 (commit (string-append "v" version))))
21768 (file-name (git-file-name name version))
21769 (sha256
21770 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21771 (build-system pyproject-build-system)
21772 (arguments
21773 (list
21774 #:phases
21775 #~(modify-phases %standard-phases
21776 (add-after 'unpack 'fallback-on-default-build
21777 (lambda _
21778 ;; This pyproject has little value and fails because of the
21779 ;; :__legacy__ suffix. Removing it to rely on defaults.
21780 (delete-file "pyproject.toml"))))))
21781 (native-inputs (list python-pytest python-setuptools))
21782 (home-page "https://github.com/pwaller/pyfiglet")
21783 (synopsis "Draw ASCII art big letters in Python")
21784 (description
21785 "This module lets you draw large letter from ordinary characters in pure
21786 Python.")
21787 (license license:expat)))
21788
21789(define-public python-mako
21790 (package
21791 (name "python-mako")
21792 (version "1.3.12")
21793 (source
21794 (origin
21795 (method git-fetch)
21796 (uri (git-reference
21797 (url "https://github.com/sqlalchemy/mako")
21798 (commit (string-append "rel_" (string-replace-substring
21799 version "." "_")))))
21800 (file-name (git-file-name name version))
21801 (sha256
21802 (base32 "1cvx14yvsx13fnxbwjy4jh8yy87pa6lzfgqzkih4j6c8q0zjd0v0"))))
21803 (build-system pyproject-build-system)
21804 (native-inputs
21805 (list python-pytest
21806 python-setuptools))
21807 (propagated-inputs
21808 (list python-markupsafe))
21809 (home-page "https://www.makotemplates.org/")
21810 (synopsis "Templating language for Python")
21811 (description "Mako is a templating language for Python that compiles
21812templates into Python modules.")
21813 (license license:expat)))
21814
21815(define-public python-cookiecutter
21816 (package
21817 (name "python-cookiecutter")
21818 (version "2.6.0")
21819 (source
21820 (origin
21821 (method url-fetch)
21822 (uri (pypi-uri "cookiecutter" version))
21823 (sha256
21824 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21825 (build-system pyproject-build-system)
21826 (arguments
21827 (list
21828 #:phases #~(modify-phases %standard-phases
21829 (add-before 'check 'pre-check
21830 (lambda _
21831 ;; test_get_user_config.py requires a writable home
21832 ;; directory.
21833 (setenv "HOME"
21834 (getcwd))
21835 ;; test_hooks.py dynamically creates shell scripts
21836 ;; with a /bin/bash shebang. We have to patch these.
21837 (substitute* "tests/test_hooks.py"
21838 (("/bin/bash")
21839 (string-append #$(this-package-native-input
21840 "bash-minimal") "/bin/bash"))))))))
21841 (native-inputs (list bash-minimal
21842 git-minimal/pinned
21843 python-freezegun
21844 python-pytest
21845 python-pytest-mock
21846 python-setuptools
21847 python-wheel))
21848 (propagated-inputs (list python-arrow
21849 python-binaryornot
21850 python-click
21851 python-jinja2
21852 python-pyyaml
21853 python-requests
21854 python-rich
21855 python-slugify))
21856 (home-page "https://github.com/cookiecutter/cookiecutter")
21857 (synopsis
21858 "Command-line utility that creates projects from project templates")
21859 (description
21860 "This package provides a command-line utility that creates projects from
21861project templates, e.g. creating a Python package project from a Python package
21862project template.")
21863 (license license:bsd-3)))
21864
21865(define-public python-pyquery
21866 (package
21867 (name "python-pyquery")
21868 (version "2.0.1")
21869 (source
21870 (origin
21871 (method url-fetch)
21872 (uri (pypi-uri "pyquery" version))
21873 (sha256
21874 (base32
21875 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21876 (build-system pyproject-build-system)
21877 (arguments
21878 (list
21879 #:test-flags
21880 #~(list #$@(map (lambda (test) (string-append
21881 "--deselect=tests/test_pyquery.py::"
21882 test))
21883 (list
21884 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21885 "TestWebScrapping::test_post"
21886 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21887 "TestWebScrapping::test_session"
21888 ;; Assertion is not equal.
21889 "TestManipulating::test_val_for_textarea"
21890 "TestHTMLParser::test_replaceWith"
21891 "TestHTMLParser::test_replaceWith_with_function"
21892 ;; Network access is required.
21893 "TestWebScrapping::test_get"
21894 "TestWebScrappingEncoding::test_get")))))
21895 (native-inputs
21896 (list python-pytest
21897 python-requests
21898 python-setuptools
21899 python-webob
21900 python-webtest
21901 python-wheel))
21902 (propagated-inputs
21903 (list python-cssselect python-lxml))
21904 (home-page "https://github.com/gawel/pyquery")
21905 (synopsis "Make jQuery-like queries on xml documents")
21906 (description "pyquery allows you to make jQuery queries on xml documents.
21907The API is as much as possible the similar to jQuery. pyquery uses lxml for
21908fast xml and html manipulation.")
21909 (license license:bsd-3)))
21910
21911(define-public python-amqp
21912 (package
21913 (name "python-amqp")
21914 (version "5.1.1")
21915 (source
21916 (origin
21917 (method url-fetch)
21918 (uri (pypi-uri "amqp" version))
21919 (sha256
21920 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21921 (build-system pyproject-build-system)
21922 (arguments
21923 (list ; Integration tests require network connectivity.
21924 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21925 (native-inputs (list python-pytest python-setuptools python-wheel))
21926 (propagated-inputs (list python-vine))
21927 (home-page "https://github.com/celery/py-amqp")
21928 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21929 (description
21930 "This is a fork of amqplib which was originally written by Barry Pederson.
21931It is maintained by the Celery project, and used by kombu as a pure python
21932alternative when librabbitmq is not available.")
21933 (license license:lgpl2.1+)))
21934
21935(define-public python-benchmark-4dn
21936 (package
21937 (name "python-benchmark-4dn")
21938 (version "0.5.24")
21939 (source (origin
21940 (method url-fetch)
21941 (uri (pypi-uri "benchmark_4dn" version))
21942 (sha256
21943 (base32
21944 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21945 (properties '(("upstream-name" . "benchmark_4dn")))
21946 (build-system pyproject-build-system)
21947 ;; There are none.
21948 (arguments (list #:tests? #false))
21949 (native-inputs
21950 (list python-poetry-core))
21951 (home-page "https://github.com/SooLee/Benchmark/")
21952 (synopsis "Benchmark functions for CWL workflows")
21953 (description
21954 "This package provides benchmark functions that return total space, memory,
21955CPUs required per given input size, and parameters for CWL workflows.")
21956 (license license:expat)))
21957
21958(define-public python-beniget
21959 (package
21960 (name "python-beniget")
21961 (version "0.5.0")
21962 (source
21963 (origin
21964 (method url-fetch)
21965 (uri (pypi-uri "beniget" version))
21966 (sha256
21967 (base32 "08ig66dp3xjl3nhqlpdkv0bl1m0m5mr1x2yrncz3vpn7ivx13bz7"))))
21968 (build-system pyproject-build-system)
21969 (native-inputs
21970 (list python-pytest
21971 python-setuptools))
21972 (propagated-inputs
21973 (list python-gast))
21974 (home-page "https://github.com/serge-sans-paille/beniget")
21975 (synopsis "Extract semantic information about static Python code")
21976 (description
21977 "Beniget is a collection of analyzers for Python @acronym{AST,
21978Abstract Syntax Tree}. It is a building block for writing a static analyzer
21979or compiler for Python.")
21980 (license license:bsd-3)))
21981
21982(define-public python-kombu
21983 (package
21984 (name "python-kombu")
21985 (version "5.6.2")
21986 (source
21987 (origin
21988 (method git-fetch)
21989 (uri (git-reference
21990 (url "https://github.com/celery/kombu")
21991 (commit (string-append "v" version))))
21992 (file-name (git-file-name name version))
21993 (sha256
21994 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21995 (build-system pyproject-build-system)
21996 (arguments
21997 (list
21998 ;; tests: 854 passed, 193 skipped
21999 #:test-flags
22000 #~(list
22001 ;; TODO: Package azure-identity (required for this file)
22002 "--ignore=t/unit/transport/test_azurestoragequeues.py"
22003 ;; XXX: Requires google-cloud-pubsub.
22004 "--ignore=t/unit/transport/test_gcpubsub.py"
22005 ;; XXX: Requires pyro, see:
22006 ;; <https://codeberg.org/guix/guix/issues/5857>
22007 "--ignore=t/unit/transport/test_pyro.py")
22008 #:phases
22009 #~(modify-phases %standard-phases
22010 (add-after 'unpack 'relax-requirements
22011 (lambda _
22012 (substitute* "requirements/default.txt"
22013 (("tzdata>=2025.2")
22014 "tzdata>=2025.1")))))))
22015 (native-inputs
22016 (list python-botocore
22017 python-pytest
22018 python-pytest-freezer
22019 python-pytest-sugar
22020 python-setuptools))
22021 (propagated-inputs
22022 (list python-amqp
22023 python-packaging
22024 python-tzdata
22025 python-vine))
22026 (home-page "https://kombu.readthedocs.io")
22027 (synopsis "Message passing library for Python")
22028 (description
22029 "The aim of Kombu is to make messaging in Python as easy as possible by
22030providing an idiomatic high-level interface for the AMQ protocol, and also
22031provide proven and tested solutions to common messaging problems. AMQP is the
22032Advanced Message Queuing Protocol, an open standard protocol for message
22033orientation, queuing, routing, reliability and security, for which the
22034RabbitMQ messaging server is the most popular implementation.")
22035 (license license:bsd-3)))
22036
22037(define-public python-billiard
22038 (package
22039 (name "python-billiard")
22040 (version "4.2.2")
22041 (source
22042 (origin
22043 (method git-fetch)
22044 (uri (git-reference
22045 (url "https://github.com/celery/billiard")
22046 (commit (string-append "v" version))))
22047 (file-name (git-file-name name version))
22048 (sha256
22049 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
22050 (build-system pyproject-build-system)
22051 (arguments
22052 (list
22053 #:phases
22054 #~(modify-phases %standard-phases
22055 (add-after 'unpack 'remove-win-files
22056 (lambda _
22057 (for-each delete-file-recursively
22058 '("billiard/popen_spawn_win32.py"
22059 "billiard/_win.py")))))))
22060 (native-inputs (list python-psutil python-pytest python-setuptools))
22061 (home-page "https://github.com/celery/billiard")
22062 (synopsis "Python multiprocessing fork with improvements and bugfixes")
22063 (description
22064 "Billiard is a fork of the Python 2.7 multiprocessing package. The
22065multiprocessing package itself is a renamed and updated version of R Oudkerk's
22066pyprocessing package. This standalone variant is intended to be compatible with
22067Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
22068 (license license:bsd-3)))
22069
22070(define-public python-celery
22071 (package
22072 (name "python-celery")
22073 (version "5.6.3")
22074 (source
22075 (origin
22076 (method url-fetch)
22077 (uri (pypi-uri "celery" version))
22078 (sha256
22079 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
22080 (build-system pyproject-build-system)
22081 (arguments
22082 (list
22083 ;; tests: 3362 passed, 38 skipped, 10 deselected, 3 xfailed, 63
22084 ;; warnings, 28808 subtests passed
22085 #:test-flags
22086 ;; The MongoDB backend test appears to expect an older version of
22087 ;; MongoDB which provided its own bson module, fails with "
22088 ;; AttributeError: module 'bson' has no attribute 'encode'".
22089 #~(list "--ignore=t/unit/backends/test_mongodb.py"
22090 ;; XXX: Requires google-cloud-firestore
22091 "--ignore=t/unit/backends/test_gcs.py"
22092 "-k" (string-join
22093 ;; AssertionError.
22094 (list "not test_check_privileges_no_fchown"
22095 ;; These 3 tests error out on ci.guix.gnu.org with
22096 ;; OSError: [Errno 24] Too many open files
22097 "test_register_with_event_loop__no_on_tick_dupes"
22098 "test_with_autoscaler_file_descriptor_safety"
22099 "test_with_file_descriptor_safety"
22100 ;; XXX: Fails to compare local timezones.
22101 "test_use_local_timezone"
22102 ;; assert 'No such option: --ini' in <...>
22103 "test_preload_options[subcommand_with_params0]"
22104 "test_preload_options[subcommand_with_params1]")
22105 " and not "))
22106 #:phases
22107 #~(modify-phases %standard-phases
22108 (add-before 'check 'increase-resource-limits
22109 (lambda* (#:key tests? #:allow-other-keys)
22110 (when tests?
22111 ;; XXX: Copied from ungoogled-chromium. Try increasing the
22112 ;; soft resource limit of max open files to 2048, or equal to
22113 ;; the hard limit, whichever is lower.
22114 (call-with-values (lambda () (getrlimit 'nofile))
22115 (lambda (soft hard)
22116 (when (and soft (< soft 2048))
22117 (if hard
22118 (setrlimit 'nofile (min hard 2048) hard)
22119 (setrlimit 'nofile 2048 #f))
22120 (format #t
22121 "increased maximum number of open files from ~d to ~d~%"
22122 soft (if hard (min hard 2048) 2048)))))))))))
22123 (native-inputs
22124 (list python-azure-core
22125 python-dnspython
22126 python-flaky
22127 python-gevent
22128 python-google-cloud-storage
22129 python-iniconfig
22130 python-moto
22131 python-msgpack
22132 python-pymongo
22133 python-pytest
22134 python-pytest-celery
22135 python-pytest-click
22136 python-pytest-order
22137 python-pytest-timeout
22138 python-redis
22139 python-setuptools))
22140 (propagated-inputs
22141 (list python-billiard
22142 python-click
22143 python-click-didyoumean
22144 python-click-plugins
22145 python-click-repl
22146 python-dateutil
22147 python-kombu
22148 python-tzlocal
22149 python-vine))
22150 (home-page "https://celeryproject.org")
22151 (synopsis "Distributed Task Queue")
22152 (description
22153 "Celery is an asynchronous task queue/job queue based on distributed
22154message passing. It is focused on real-time operation, but supports
22155scheduling as well. The execution units, called tasks, are executed
22156concurrently on a single or more worker servers using multiprocessing,
22157Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
22158synchronously (wait until ready).")
22159 (license license:bsd-3)))
22160
22161;; A bare minimal package, mainly to use in tests and reduce closure
22162;; size. Tests are left out in the main package to slim down native-inputs.
22163(define-public python-celery-minimal
22164 (package/inherit python-celery
22165 (name "python-celery-minimal")
22166 (arguments
22167 (list #:tests? #f))
22168 (native-inputs
22169 (list python-setuptools))))
22170
22171(define-public python-anyqt
22172 (package
22173 (name "python-anyqt")
22174 (version "0.2.1")
22175 (source
22176 (origin
22177 (method git-fetch)
22178 (uri (git-reference
22179 (url "https://github.com/ales-erjavec/anyqt")
22180 (commit version)))
22181 (file-name (git-file-name name version))
22182 (sha256
22183 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
22184 (build-system pyproject-build-system)
22185 (arguments
22186 (list
22187 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
22188 ;; TODO Add/configure the right Qt inputs.
22189 #:test-flags
22190 #~(list "--ignore-glob=tests/test_q*.py")
22191 #:phases
22192 #~(modify-phases %standard-phases
22193 (add-after 'unpack 'delete-files
22194 ;; Delete files related to other operating systems.
22195 (lambda _
22196 (delete-file "AnyQt/QtMacExtras.py")
22197 (delete-file "AnyQt/QtWinExtras.py"))))))
22198 (native-inputs
22199 (list python-pyqt-6
22200 python-pytest
22201 python-pytest-qt
22202 python-setuptools))
22203 (home-page "https://github.com/ales-erjavec/anyqt")
22204 (synopsis "PyQt compatibility layer")
22205 (description
22206 "This package provides a PyQt/PySide compatibility layer. More precisely,
22207it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
22208PySide, PySide2.")
22209 (license license:gpl3)))
22210
22211(define-public python-qasync
22212 (package
22213 (name "python-qasync")
22214 (version "0.28.0")
22215 (source
22216 (origin
22217 (method git-fetch)
22218 (uri (git-reference
22219 (url "https://github.com/CabbageDevelopment/qasync/")
22220 (commit (string-append "v" version))))
22221 (file-name (git-file-name name version))
22222 (sha256
22223 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
22224 (build-system pyproject-build-system)
22225 (arguments
22226 (list
22227 #:phases
22228 #~(modify-phases %standard-phases
22229 (add-before 'check 'set-qpa
22230 (lambda _
22231 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
22232 (native-inputs
22233 (list python-pytest python-uv-build))
22234 (propagated-inputs
22235 (list python-pyqt-6))
22236 (home-page "https://github.com/CabbageDevelopment/qasync")
22237 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
22238 (description
22239 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
22240by providing an implementation of the PEP 3156 event-loop.")
22241 (license license:bsd-2)))
22242
22243(define-public python-editor
22244 (package
22245 (name "python-editor")
22246 (version "1.8.0")
22247 (source
22248 (origin
22249 (method git-fetch)
22250 (uri (git-reference
22251 (url "https://github.com/rec/editor")
22252 (commit (string-append "v" version))))
22253 (file-name (git-file-name name version))
22254 (sha256
22255 (base32 "0xc8p92n7lsgaah0xbaxyml2l8mfajb7v8kdiwy5rw6mh3phbwlr"))))
22256 (build-system pyproject-build-system)
22257 (native-inputs (list python-hatchling python-pytest python-tdir))
22258 (propagated-inputs (list python-runs python-xmod))
22259 (home-page "https://rec.github.io/editor/")
22260 (synopsis "Open the default text editor")
22261 (description
22262 "@code{editor} opens the default text editor to edit an existing file, a
22263new file, or a tempfile, blocks while the user edits text, then returns the
22264contents of the file.")
22265 (license license:expat)))
22266
22267(define-public python-multiprocessing-logging
22268 (package
22269 (name "python-multiprocessing-logging")
22270 (version "0.3.4")
22271 (home-page "https://github.com/jruere/multiprocessing-logging")
22272 (source
22273 (origin
22274 (method git-fetch)
22275 (uri (git-reference
22276 (url home-page)
22277 (commit (string-append "v" version))))
22278 (file-name (git-file-name name version))
22279 (sha256
22280 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
22281 (build-system pyproject-build-system)
22282 (arguments (list #:test-backend #~'unittest))
22283 (native-inputs (list python-setuptools))
22284 (synopsis "Manage logs from multiple processes")
22285 (description
22286 "This Python module implements a multiprocessing-aware @code{Handler}
22287that, when set on the root @code{Logger}, will tunnel log records to the
22288main process so that they are handled correctly.")
22289 (license license:lgpl3+)))
22290
22291(define-public python-munkres
22292 (package
22293 (name "python-munkres")
22294 (version "1.1.4")
22295 (source
22296 (origin
22297 (method url-fetch)
22298 (uri (pypi-uri "munkres" version))
22299 (sha256
22300 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
22301 (build-system pyproject-build-system)
22302 (arguments
22303 (list
22304 ;; See https://github.com/bmc/munkres/issues/40
22305 #:test-flags
22306 (if (member (%current-system) %32bit-supported-systems)
22307 #~(list "-k" "not test_profit_float")
22308 #~(list))))
22309 (native-inputs (list python-pytest python-setuptools))
22310 (home-page "https://software.clapper.org/munkres/")
22311 (synopsis "Implementation of the Munkres algorithm")
22312 (description
22313 "The Munkres module provides an implementation of the Munkres algorithm
22314(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
22315for solving the Assignment Problem.")
22316 (license license:bsd-3)))
22317
22318(define-public python-codespell
22319 (package
22320 (name "python-codespell")
22321 (version "2.4.3")
22322 (source
22323 (origin
22324 (method git-fetch)
22325 (uri (git-reference
22326 (url "https://github.com/codespell-project/codespell")
22327 (commit (string-append "v" version))))
22328 (file-name (git-file-name name version))
22329 (sha256
22330 (base32 "1c1wnl14af496s5iwsc0bp6pg4i8yankr7wvxxb66dc8s87n2rd1"))))
22331 (build-system pyproject-build-system)
22332 (native-inputs
22333 (list python-pygments
22334 python-pytest
22335 python-pytest-dependency
22336 python-setuptools
22337 python-setuptools-scm))
22338 (propagated-inputs
22339 (list python-chardet))
22340 (home-page "https://github.com/codespell-project/codespell/")
22341 (synopsis "Spellchecker for code")
22342 (description
22343 "Codespell fixes common misspellings in text files. It's designed
22344primarily for checking misspelled words in source code, but it can be used
22345with other files as well. It does not check for word membership in a complete
22346dictionary, but instead looks for a set of common misspellings. Therefore it
22347should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
22348also means it shouldn't generate false-positives when you use a niche term it
22349doesn't know about.")
22350 (license
22351 (list
22352 ; for codespell and codespell_lib
22353 license:gpl2
22354 ; for dictionary*.txt
22355 license:cc-by-sa3.0))))
22356
22357(define-public python-jellyfish
22358 (package
22359 (name "python-jellyfish")
22360 (version "1.2.1")
22361 (source
22362 (origin
22363 (method git-fetch)
22364 (uri (git-reference
22365 (url "https://github.com/jamesturk/jellyfish")
22366 (commit (string-append "v" version))))
22367 (file-name (git-file-name name version))
22368 (sha256
22369 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
22370 (build-system pyproject-build-system)
22371 (arguments
22372 (list
22373 #:imported-modules (append %cargo-build-system-modules
22374 %pyproject-build-system-modules)
22375 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
22376 (guix build pyproject-build-system)
22377 (guix build utils))
22378 #:phases
22379 #~(modify-phases %standard-phases
22380 (add-after 'unpack 'prepare-cargo-build-system
22381 (lambda args
22382 (for-each
22383 (lambda (phase)
22384 (format #t "Running cargo phase: ~a~%" phase)
22385 (apply (assoc-ref cargo:%standard-phases phase)
22386 #:cargo-target #$(cargo-triplet)
22387 args))
22388 '(unpack-rust-crates
22389 configure
22390 check-for-pregenerated-files
22391 patch-cargo-checksums)))))))
22392 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
22393 (native-inputs
22394 (append
22395 (list python-pytest
22396 python-setuptools
22397 rust
22398 `(,rust "cargo"))
22399 (or (and=> (%current-target-system)
22400 (compose list make-rust-sysroot))
22401 '())))
22402 (home-page "https://www.jpt.sh/projects/jellyfish/")
22403 (synopsis "Approximate and phonetic matching of strings")
22404 (description "Jellyfish uses a variety of string comparison and phonetic
22405encoding algorithms to do fuzzy string matching.")
22406 (license license:bsd-2)))
22407
22408(define-public python-pdfminer-six
22409 (package
22410 (name "python-pdfminer-six")
22411 (version "20260107")
22412 ;; There are no tests in the PyPI tarball.
22413 (source
22414 (origin
22415 (method git-fetch)
22416 (uri (git-reference
22417 (url "https://github.com/pdfminer/pdfminer.six")
22418 (commit version)))
22419 (file-name (git-file-name name version))
22420 (sha256
22421 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
22422 (build-system pyproject-build-system)
22423 (arguments
22424 (list #:phases
22425 #~(modify-phases %standard-phases
22426 ;; Tests write to the source tree.
22427 (add-after 'unpack 'make-git-checkout-writable
22428 (lambda _
22429 (for-each make-file-writable (find-files ".")))))))
22430 (propagated-inputs
22431 (list python-charset-normalizer python-cryptography))
22432 (native-inputs
22433 (list python-pytest python-setuptools python-setuptools-scm))
22434 (home-page "https://github.com/pdfminer/pdfminer.six")
22435 (synopsis "PDF parser and analyzer")
22436 (description "@code{pdfminer.six} is a community maintained fork of
22437the original PDFMiner. It is a tool for extracting information from PDF
22438documents. It focuses on getting and analyzing text data. Pdfminer.six
22439extracts the text from a page directly from the sourcecode of the PDF. It
22440can also be used to get the exact location, font or color of the text.")
22441 (license license:expat)))
22442
22443(define-public python-rarfile
22444 (package
22445 (name "python-rarfile")
22446 (version "4.2")
22447 (source
22448 (origin
22449 (method git-fetch)
22450 (uri (git-reference
22451 (url "https://github.com/markokr/rarfile")
22452 (commit (string-append "v" version))))
22453 (file-name (git-file-name name version))
22454 (sha256
22455 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
22456 (build-system pyproject-build-system)
22457 (arguments
22458 (list
22459 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
22460 #:phases
22461 #~(modify-phases %standard-phases
22462 (add-after 'unpack 'patch
22463 (lambda* (#:key inputs #:allow-other-keys)
22464 (substitute* "rarfile.py"
22465 ;; Disable unrar and unar, which are unavailable on Guix.
22466 (("(unrar|unar)=True" all tool)
22467 (string-append tool "=False"))
22468 ;; Hardcode path to bsdtar
22469 (("\"bsdtar\"")
22470 (format #f "~s"
22471 (search-input-file inputs "bin/bsdtar")))))))))
22472 (native-inputs (list python-pytest python-setuptools))
22473 (inputs (list libarchive))
22474 (home-page "https://github.com/markokr/rarfile")
22475 (synopsis "RAR archive reader for Python")
22476 (description
22477 "This is Python module for RAR archive reading. The interface is made as
22478zipfile like as possible.")
22479 (license license:isc)))
22480
22481(define-public python-slugid
22482 (package
22483 (name "python-slugid")
22484 (version "2.0.0")
22485 (source
22486 (origin
22487 (method git-fetch)
22488 (uri (git-reference
22489 (url "https://github.com/taskcluster/slugid.py")
22490 (commit (string-append "v" version))))
22491 (file-name (git-file-name name version))
22492 (sha256
22493 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22494 (build-system pyproject-build-system)
22495 (arguments (list #:test-backend #~'nose))
22496 (native-inputs (list python-pynose python-setuptools))
22497 (home-page "http://taskcluster.github.io/slugid.py")
22498 (synopsis "Module for Base64 encoded UUID v4 slugs")
22499 (description
22500 "This package provides a module for generating v4 UUIDs and encoding them
22501into 22 character URL-safe base64 slug representation.")
22502 (license license:mpl2.0)))
22503
22504(define-public python-rich
22505 (package
22506 (name "python-rich")
22507 (version "15.0.0")
22508 (source
22509 (origin
22510 (method git-fetch)
22511 (uri (git-reference
22512 (url "https://github.com/willmcgugan/rich")
22513 (commit (string-append "v" version))))
22514 (file-name (git-file-name name version))
22515 (sha256
22516 (base32 "1qs8n1hcjxcpwbfjjlzfmywfczxzcpvjkk3ay04kdbi1lvlynkaj"))))
22517 (build-system pyproject-build-system)
22518 ;; The test_brokenpipeerror is flaky.
22519 (arguments (list #:test-flags #~(list "-k" "not test_brokenpipeerror")))
22520 (native-inputs
22521 (list python-poetry-core
22522 python-pytest
22523 which))
22524 (propagated-inputs
22525 (list python-markdown-it-py
22526 python-pygments))
22527 (home-page "https://github.com/willmcgugan/rich")
22528 (synopsis "Render rich text and more to the terminal")
22529 (description
22530 "This is a Python package for rendering rich text, tables, progress bars,
22531syntax highlighting, markdown and more to the terminal.")
22532 (license license:expat)))
22533
22534(define-public python-rich-click
22535 (package
22536 (name "python-rich-click")
22537 (version "1.9.8")
22538 (source
22539 (origin
22540 (method git-fetch)
22541 (uri (git-reference
22542 (url "https://github.com/ewels/rich-click")
22543 (commit (string-append "v" version))))
22544 (file-name (git-file-name name version))
22545 (sha256
22546 (base32 "1xgsblpkp4f43y579614n6cp8br2acms8vdj8gpqxa05csap0fqn"))))
22547 (build-system pyproject-build-system)
22548 (arguments
22549 (list
22550 #:test-flags
22551 ;; python-typer 0.26 vendored python-click and broke a lot of things.
22552 ;; See <https://github.com/ewels/rich-click/issues/330> and
22553 ;; <https://github.com/ewels/rich-click/commit/989c38cf4ed918a25fa523c8191c66b42315cb10>.
22554 ;; 136 passed, 6 skipped, 6 deselected
22555 #~(list "-k" "not _typer_")))
22556 (native-inputs
22557 (list python-inline-snapshot
22558 python-pytest
22559 python-setuptools
22560 python-typer))
22561 (propagated-inputs
22562 (list python-click
22563 python-rich))
22564 (home-page "https://github.com/ewels/rich-click")
22565 (synopsis "Format click help output nicely with rich")
22566 (description "Click is a \"Python package for creating beautiful command
22567line interfaces\". Rich is a \"Python library for rich text and beautiful
22568formatting in the terminal\". The intention of rich-click is to provide
22569attractive help output from click, formatted with rich, with minimal
22570customization required.")
22571 (license license:expat)))
22572
22573(define-public python-magic
22574 (package
22575 (name "python-magic")
22576 (version "0.4.27")
22577 (home-page "https://github.com/ahupp/python-magic")
22578 (source
22579 (origin
22580 (method git-fetch)
22581 (uri (git-reference (url home-page) (commit version)))
22582 (file-name (git-file-name name version))
22583 (sha256
22584 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22585 (build-system pyproject-build-system)
22586 (arguments
22587 (list
22588 #:test-backend #~'custom
22589 #:test-flags #~(list "test/libmagic_test.py")
22590 #:phases
22591 #~(modify-phases %standard-phases
22592 (add-after 'unpack 'fix-tests
22593 (lambda _
22594 ;; Adjust expected output for [email protected].
22595 (substitute* "test/libmagic_test.py"
22596 (("PDF document, version 1\\.2, 2 pages")
22597 "PDF document, version 1.2, 2 page(s)"))))
22598 ;; Replace a specific method call with a hard-coded path to the
22599 ;; necessary libmagic.so file in the store.
22600 (add-before 'build 'hard-code-path-to-libmagic
22601 (lambda* (#:key inputs #:allow-other-keys)
22602 (substitute* "magic/loader.py"
22603 (("find_library\\('magic'\\)")
22604 (format #f "~s"
22605 (search-input-file inputs "lib/libmagic.so")))))))))
22606 (native-inputs (list which python-setuptools))
22607 (inputs
22608 ;; python-magic needs to be able to find libmagic.so.
22609 (list file))
22610 (synopsis "File type identification using libmagic")
22611 (description
22612 "This module uses ctypes to access the libmagic file type identification
22613library. It makes use of the local magic database and supports both textual
22614and MIME-type output. Note that this module and the python-file module both
22615provide a \"magic.py\" file; these two modules, which are different and were
22616developed separately, both serve the same purpose: to provide Python bindings
22617for libmagic.")
22618 (license license:expat)))
22619
22620(define-public python-securetar
22621 (package
22622 (name "python-securetar")
22623 (version "2025.1.4")
22624 (source
22625 (origin
22626 (method git-fetch)
22627 (uri (git-reference
22628 (url "https://github.com/pvizeli/securetar")
22629 (commit version)))
22630 (file-name (git-file-name name version))
22631 (sha256
22632 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22633 (build-system pyproject-build-system)
22634 (native-inputs (list python-setuptools python-wheel python-pytest))
22635 (propagated-inputs (list python-cryptography))
22636 (home-page "https://github.com/pvizeli/securetar")
22637 (synopsis "Python module to handle tarfile backups")
22638 (description
22639 "This library provides a streaming wrapper around python tarfile and allow
22640secure handling files and support encryption.")
22641 (license license:asl2.0)))
22642
22643(define-public python-pkgconfig
22644 (package
22645 (name "python-pkgconfig")
22646 (version "1.6.0")
22647 (source
22648 (origin
22649 (method git-fetch)
22650 (uri (git-reference
22651 (url "https://github.com/matze/pkgconfig")
22652 (commit (string-append "v" version))))
22653 (file-name (git-file-name name version))
22654 (sha256
22655 (base32 "0xlfghjbx04gls3ad1ncggpi4xvjxcirrm3bamv5gp9wv3z5ln8s"))))
22656 (build-system pyproject-build-system)
22657 (arguments
22658 (list
22659 #:phases
22660 #~(modify-phases %standard-phases
22661 (add-after 'unpack 'fix-test-data
22662 (lambda _
22663 (substitute* "tests/data/fake-openssl.pc"
22664 (("Requires: libssl libcrypto") ""))))
22665 (add-before 'build 'set-pkg-config-path
22666 (lambda* (#:key inputs #:allow-other-keys)
22667 (setenv "PKG_CONFIG"
22668 (search-input-file inputs "/bin/pkg-config"))
22669 (substitute* "src/pkgconfig/pkgconfig.py"
22670 (("'pkg-config'")
22671 (format #f "~s"
22672 (search-input-file inputs "/bin/pkg-config")))))))))
22673 (native-inputs (list python-poetry-core python-pytest))
22674 (inputs (list pkg-config))
22675 (home-page "https://github.com/matze/pkgconfig")
22676 (synopsis "Python interface for pkg-config")
22677 (description "This module provides a Python interface to pkg-config. It
22678can be used to find all pkg-config packages, check if a package exists,
22679check if a package meets certain version requirements, query CFLAGS and
22680LDFLAGS and parse the output to build extensions with setup.py.")
22681 (license license:expat)))
22682
22683;; This package is unmaintained since 2014, but still used in `khmer'.
22684(define-public python-bz2file
22685 (package
22686 (name "python-bz2file")
22687 (version "0.98")
22688 (source
22689 (origin
22690 (method url-fetch)
22691 (uri (pypi-uri "bz2file" version))
22692 (sha256
22693 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22694 (build-system pyproject-build-system)
22695 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22696 (native-inputs (list python-setuptools))
22697 (home-page "https://github.com/nvawda/bz2file")
22698 (synopsis "Read and write bzip2-compressed files")
22699 (description
22700 "Bz2file is a Python library for reading and writing bzip2-compressed
22701files. It contains a drop-in replacement for the I/O interface in the
22702standard library's @code{bz2} module, including features from the latest
22703development version of CPython that are not available in older releases.")
22704 (license license:asl2.0)))
22705
22706(define-public python-future
22707 (package
22708 (name "python-future")
22709 (version "1.0.0")
22710 (source
22711 (origin
22712 (method url-fetch)
22713 (uri (pypi-uri "future" version))
22714 (sha256
22715 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22716 (build-system pyproject-build-system)
22717 (arguments
22718 (list
22719 #:test-flags
22720 ;; Self tests failed.
22721 #~(list "--ignore=tests/test_future/test_futurize.py"
22722 "-k" (string-join
22723 ;; Self tests failed.
22724 (list "not test_division"
22725 "test_functions_unchanged"
22726 "test_mixed_annotations"
22727 "test_multiple_param_annotations"
22728 "test_print"
22729 "test_range_slice"
22730 ;; Network access is required.
22731 "test_ftp"
22732 "test_main"
22733 "test_moves_urllib_request_http"
22734 "test_urllib_request_http"
22735 ;; Tests failing on Python 3.12
22736 "test_converting_drive_letter"
22737 "test_converting_drive_letter"
22738 "test_converting_when_no_drive_letter"
22739 "test_converting_when_no_drive_letter"
22740 "test_converting_when_no_drive_letter"
22741 "test_converting_when_no_drive_letter"
22742 "test_isinstance_recursion_limit"
22743 "test_roundtrip_pathname2url"
22744 "test_roundtrip_pathname2url"
22745 "test_roundtrip_url2pathname"
22746 "test_roundtrip_url2pathname"
22747 "test_subclass_recursion_limit")
22748 " and not "))))
22749 (native-inputs
22750 (list python-pytest
22751 python-setuptools))
22752 (home-page "https://python-future.org")
22753 (synopsis "Single-source support for Python 3 and 2")
22754 (description
22755 "@code{python-future} is the missing compatibility layer between Python 2
22756and Python 3. It allows you to use a single, clean Python 3.x-compatible
22757codebase to support both Python 2 and Python 3 with minimal overhead.")
22758 (license license:expat)))
22759
22760(define-public python-cysignals
22761 (package
22762 (name "python-cysignals")
22763 (version "1.12.3")
22764 (source
22765 (origin
22766 (method url-fetch)
22767 (uri (pypi-uri "cysignals" version))
22768 (sha256
22769 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22770 (build-system pyproject-build-system)
22771 (native-inputs (list python-meson
22772 python-cython
22773 python-pytest))
22774 (home-page "https://github.com/sagemath/cysignals")
22775 (synopsis "Handling of interrupts and signals for Cython")
22776 (description
22777 "The cysignals package provides mechanisms to handle interrupts (and
22778other signals and errors) in Cython code, using two related approaches,
22779for mixed Cython/Python code or external C libraries and pure Cython code,
22780respectively.")
22781 (license license:lgpl3+)))
22782
22783(define-public python-rope
22784 (package
22785 (name "python-rope")
22786 (version "1.13.0")
22787 (source
22788 (origin
22789 (method url-fetch)
22790 (uri (pypi-uri "rope" version))
22791 (sha256
22792 (base32
22793 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22794 (build-system pyproject-build-system)
22795 (arguments
22796 (list
22797 #:test-flags
22798 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22799 (propagated-inputs (list python-pytoolconfig))
22800 (native-inputs
22801 (list python-pytest python-pytest-timeout python-setuptools))
22802 (home-page "https://github.com/python-rope/rope")
22803 (synopsis "Refactoring library for Python")
22804 (description
22805 "Rope is a refactoring library for Python. It facilitates the renaming,
22806moving and extracting of attributes, functions, modules, fields and parameters
22807in Python source code. These refactorings can also be applied to occurrences
22808in strings and comments.")
22809 (license license:lgpl3+)))
22810
22811(define-public python-py3status
22812 (package
22813 (name "python-py3status")
22814 (version "3.62")
22815 (source
22816 (origin
22817 (method git-fetch)
22818 (uri (git-reference
22819 (url "https://github.com/ultrabug/py3status")
22820 (commit version)))
22821 (file-name (git-file-name name version))
22822 (sha256
22823 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22824 (build-system pyproject-build-system)
22825 (arguments
22826 (list
22827 #:phases
22828 #~(modify-phases %standard-phases
22829 (add-before 'build 'hardcode-file-path
22830 (lambda* (#:key inputs #:allow-other-keys)
22831 (substitute* "py3status/parse_config.py"
22832 (("\\[\"file\", \"-b\"")
22833 (format #f "[~s, \"-b\""
22834 (search-input-file inputs "bin/file")))))))))
22835 (native-inputs (list python-hatchling python-pytest))
22836 (inputs (list file))
22837 (home-page "https://github.com/ultrabug/py3status")
22838 (synopsis "Extensible i3status wrapper written in Python")
22839 (description
22840 "py3status is an i3status wrapper which extends i3status functionality in
22841a modular way, allowing you to extend your panel with your own code,
22842responding to click events and updating clock every second.")
22843 (license license:bsd-3)))
22844
22845(define-public python-greenlet
22846 (package
22847 (name "python-greenlet")
22848 (version "3.5.1")
22849 (source
22850 (origin
22851 (method git-fetch)
22852 (uri (git-reference
22853 (url "https://github.com/python-greenlet/greenlet")
22854 (commit version)))
22855 (file-name (git-file-name name version))
22856 (sha256
22857 (base32 "1hvnpkmd9r9li62p5gmidkyq4zazi5adw5c2cah8w2f4n47zg7ix"))))
22858 (build-system pyproject-build-system)
22859 (arguments
22860 (list
22861 #:test-flags #~(list "--pyargs" "greenlet")
22862 #:phases
22863 #~(modify-phases %standard-phases
22864 (add-before 'check 'remove-local-source
22865 (lambda _
22866 (delete-file-recursively "src/greenlet"))))))
22867 (native-inputs
22868 (list python-objgraph
22869 python-pytest
22870 python-psutil
22871 python-setuptools))
22872 (home-page "https://greenlet.readthedocs.io/")
22873 (synopsis "Lightweight in-process concurrent programming")
22874 (description
22875 "Greenlet package is a spin-off of Stackless, a version of CPython
22876that supports micro-threads called \"tasklets\". Tasklets run
22877pseudo-concurrently (typically in a single or a few OS-level threads) and
22878are synchronized with data exchanges on \"channels\".")
22879 (license (list license:psfl license:expat))))
22880
22881(define-public python-objgraph
22882 (package
22883 (name "python-objgraph")
22884 (version "3.6.2")
22885 (source
22886 (origin
22887 (method url-fetch)
22888 (uri (pypi-uri "objgraph" version))
22889 (sha256
22890 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22891 (build-system pyproject-build-system)
22892 (arguments
22893 (list
22894 #:test-flags
22895 #~(list "tests.py"
22896 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22897 ;; [], [], [], [], [], [], [], ...
22898 "-k" "not test_at_addrs")))
22899 (native-inputs
22900 (list graphviz
22901 python-pytest
22902 python-setuptools))
22903 (propagated-inputs
22904 (list python-graphviz))
22905 (home-page "https://mg.pov.lt/objgraph/")
22906 (synopsis "Draw Python object reference graphs with graphviz")
22907 (description
22908 "This package provides tools to draw Python object reference graphs with
22909graphviz.")
22910 (license license:expat)))
22911
22912(define-public python-gevent
22913 (package
22914 (name "python-gevent")
22915 (version "24.11.1")
22916 (source (origin
22917 (method url-fetch)
22918 (uri (pypi-uri "gevent" version))
22919 (sha256
22920 (base32
22921 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22922 (modules '((guix build utils)))
22923 (snippet
22924 '(begin
22925 ;; unbunding libev and c-ares
22926 (delete-file-recursively "deps")
22927 ;; Remove cythonized files.
22928 (with-directory-excursion "src/gevent"
22929 (for-each delete-file
22930 (append (list "resolver/cares.c"
22931 "queue.c"
22932 "local.c"
22933 "libev/corecext.h"
22934 "libev/corecext.c"
22935 "greenlet.c"
22936 "event.c"
22937 "_waiter.c"
22938 "_tracer.c"
22939 "_semaphore.c"
22940 "_imap.c"
22941 "_ident.c"
22942 "_hub_primitives.c"
22943 "_hub_local.c"
22944 "_greenlet_primitives.c"
22945 "_abstract_linkable.c")
22946 (find-files "." "\\.html$"))))))))
22947 (build-system pyproject-build-system)
22948 (arguments
22949 (list
22950 #:test-flags
22951 '(list
22952 ;; These tests relies on networking which is
22953 ;; not available in the build container.
22954 "test__getaddrinfo_import.py"
22955 ;; These tests rely on KeyboardInterrupts which do not
22956 ;; work inside the build container for some reason
22957 ;; (lack of controlling terminal?).
22958 "test__issues461_471.py"
22959 ;; TODO: Patch out the tests that use getprotobyname, etc
22960 ;; instead of disabling all the tests from these files.
22961 "test__resolver_dnspython.py"
22962 ;; This test contains 'test_unlink', which
22963 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22964 "test__core_stat.py")
22965 #:phases
22966 #~(modify-phases %standard-phases
22967 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22968 (lambda _
22969 (substitute* "src/gevent/subprocess.py"
22970 (("/bin/sh") (which "sh")))
22971 (for-each (lambda (file)
22972 (substitute* file
22973 (("/bin/sh") (which "sh"))
22974 (("/bin/true") (which "true"))))
22975 (find-files "src/greentest" "\\.py$"))))
22976 (add-before 'build 'do-not-use-bundled-sources
22977 (lambda _
22978 (setenv "GEVENTSETUP_EMBED" "0")
22979
22980 ;; Prevent building bundled libev.
22981 (substitute* "setup.py"
22982 (("run_make=_BUILDING")
22983 "run_make=False"))))
22984 (add-before 'build 'augment-C_INCLUDE_PATH
22985 (lambda* (#:key inputs #:allow-other-keys)
22986 (let* ((python (dirname (dirname
22987 (search-input-file
22988 inputs "bin/python"))))
22989 (version (python-version python))
22990 (greenlet (string-append
22991 #$(this-package-input "python-greenlet")
22992 "/include/python" version)))
22993 (setenv "C_INCLUDE_PATH"
22994 (string-append greenlet "/:"
22995 (or (getenv "C_INCLUDE_PATH")
22996 ""))))))
22997 (add-before 'check 'pretend-to-be-CI
22998 (lambda _
22999 ;; A few tests are skipped due to network constraints or
23000 ;; get longer timeouts when running in a CI environment.
23001 ;; Piggy-back on that, as we need the same adjustments.
23002 (setenv "TRAVIS" "1")
23003 (setenv "APPVEYOR" "1")))
23004 (add-before 'check 'adjust-tests
23005 (lambda* (#:key test-flags #:allow-other-keys)
23006 (call-with-output-file "skipped_tests.txt"
23007 (lambda (port)
23008 (format port "~a~%" (string-join test-flags "\n"))))))
23009 (replace 'check
23010 (lambda* (#:key tests? #:allow-other-keys)
23011 (when tests?
23012 ;; Use the build daemons configured number of workers.
23013 (setenv "NWORKERS" (number->string (parallel-job-count)))
23014 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
23015 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
23016 (propagated-inputs
23017 (list python-greenlet python-zope-event python-zope-interface))
23018 (native-inputs
23019 (list python-cffi
23020 python-cython
23021 python-dnspython
23022 python-idna
23023 python-objgraph
23024 python-psutil
23025 python-requests
23026 python-setuptools))
23027 (inputs
23028 (list c-ares libev libuv))
23029 (home-page "https://www.gevent.org/")
23030 (synopsis "Coroutine-based network library")
23031 (description
23032 "@code{gevent} is a coroutine-based Python networking library that uses
23033@code{greenlet} to provide a high-level synchronous API on top of the
23034@code{libev} event loop.")
23035 (license license:expat)))
23036
23037(define-public python-fastimport
23038 (package
23039 (name "python-fastimport")
23040 (version "0.9.16")
23041 (source
23042 (origin
23043 (method git-fetch)
23044 (uri (git-reference
23045 (url "https://github.com/jelmer/python-fastimport")
23046 (commit (string-append "v" version))))
23047 (file-name (git-file-name name version))
23048 (sha256
23049 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
23050 (build-system pyproject-build-system)
23051 (arguments (list #:test-backend #~'unittest))
23052 (native-inputs (list python-setuptools))
23053 (home-page "https://github.com/jelmer/python-fastimport")
23054 (synopsis "VCS fastimport parser and generator in Python")
23055 (description
23056 "This package provides a parser for and generator of the Git
23057@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
23058format.")
23059 (license license:gpl2+)))
23060
23061(define-public python-pika
23062 (package
23063 (name "python-pika")
23064 (version "1.3.2")
23065 (source
23066 (origin
23067 (method git-fetch)
23068 (uri (git-reference
23069 (url "https://github.com/pika/pika")
23070 (commit version)))
23071 (file-name (git-file-name name version))
23072 (sha256
23073 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
23074 (build-system pyproject-build-system)
23075 (arguments
23076 (list
23077 #:test-flags
23078 ;; XXX: These test most likely require a running RabbitMQ server.
23079 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
23080 #:phases
23081 #~(modify-phases %standard-phases
23082 (add-before 'check 'configure-tests
23083 (lambda* (#:key tests? #:allow-other-keys)
23084 (when tests?
23085 (setenv "PYTHONPATH" (getcwd))))))))
23086 (native-inputs (list python-pytest
23087 python-gevent
23088 python-tornado
23089 python-twisted
23090 python-setuptools))
23091 (home-page "https://pika.readthedocs.org")
23092 (synopsis "Pure Python AMQP Client Library")
23093 (description
23094 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
23095Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
23096network support library.")
23097 (license license:bsd-3)))
23098
23099(define-public python-pykka
23100 (package
23101 (name "python-pykka")
23102 (version "4.4.2")
23103 (source
23104 (origin
23105 (method git-fetch)
23106 (uri (git-reference
23107 (url "https://github.com/jodal/pykka")
23108 (commit (string-append "v" version))))
23109 (file-name (git-file-name name version))
23110 (sha256
23111 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
23112 (build-system pyproject-build-system)
23113 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
23114 (home-page "https://pykka.readthedocs.io")
23115 (synopsis "Implementation of the actor model")
23116 (description
23117 "Pykka implements the actor model in Python, which introduces some simple
23118rules to control the sharing of state and cooperation between execution units,
23119and makes it easier to build concurrent applications.")
23120 (license license:asl2.0)))
23121
23122;; WARNING: This package is a dependency of mesa.
23123;; XXX: This project was archived by the owner on Dec 21, 2025. It is now
23124;; read-only. Consider to remove when nothing depends on it.
23125(define-public python-ply
23126 (package
23127 (name "python-ply")
23128 (version "3.11")
23129 (source
23130 (origin
23131 (method url-fetch)
23132 (uri (pypi-uri "ply" version))
23133 (sha256
23134 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
23135 (build-system pyproject-build-system)
23136 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
23137 (native-inputs
23138 (list python-setuptools))
23139 (home-page "http://www.dabeaz.com/ply/")
23140 (synopsis "Python Lex & Yacc")
23141 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
23142It uses LR parsing and does extensive error checking.")
23143 (license license:bsd-3)))
23144
23145(define-public python-kazoo
23146 (package
23147 (name "python-kazoo")
23148 (version "2.10.0")
23149 (source
23150 (origin
23151 (method git-fetch)
23152 (uri (git-reference
23153 (url "https://github.com/python-zk/kazoo")
23154 (commit version)))
23155 (file-name (git-file-name name version))
23156 (sha256
23157 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
23158 (build-system pyproject-build-system)
23159 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
23160 (native-inputs (list python-setuptools))
23161 (home-page "https://kazoo.readthedocs.org")
23162 (synopsis "High-level Zookeeper client library")
23163 (description
23164 "Kazoo is a Python client library for the Apache Zookeeper distributed
23165application service. It is designed to be easy to use and to avoid common
23166programming errors.")
23167 (license license:asl2.0)))
23168
23169(define-public python-columnize
23170 (package
23171 (name "python-columnize")
23172 (version "0.3.11")
23173 (source
23174 (origin
23175 (method url-fetch)
23176 (uri (pypi-uri "columnize" version))
23177 (sha256
23178 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
23179 (build-system pyproject-build-system)
23180 (native-inputs (list python-pytest python-setuptools))
23181 (home-page "https://github.com/rocky/pycolumnize")
23182 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
23183 (description
23184 "This package provides a way to format a simple (i.e. not nested) list
23185into aligned columns.")
23186 (license license:expat)))
23187
23188(define-public python-pysol-cards
23189 (package
23190 (name "python-pysol-cards")
23191 (version "0.24.0")
23192 (source
23193 (origin
23194 (method url-fetch)
23195 (uri (pypi-uri "pysol_cards" version))
23196 (sha256
23197 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
23198 (build-system pyproject-build-system)
23199 (arguments
23200 (list
23201 #:phases
23202 #~(modify-phases %standard-phases
23203 (replace 'check
23204 (lambda* (#:key test-flags tests? #:allow-other-keys)
23205 (when tests?
23206 (apply invoke
23207 "python"
23208 "-m"
23209 "unittest"
23210 "discover"
23211 "tests"
23212 test-flags)))))))
23213 (native-inputs (list python-setuptools python-wheel))
23214 (home-page "https://github.com/shlomif/pysol_cards")
23215 (synopsis "Deal PySol FC Cards")
23216 (description
23217 "The pysol-cards python modules provide code to generate the initial deals of
23218some PySol games.")
23219 (license license:expat)))
23220
23221(define-public python-freecell-solver
23222 (package
23223 (name "python-freecell-solver")
23224 (version "0.6.0")
23225 (source
23226 (origin
23227 (method url-fetch)
23228 (uri (pypi-uri "freecell_solver" version))
23229 (sha256
23230 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
23231 (build-system pyproject-build-system)
23232 (propagated-inputs (list python-cffi))
23233 (native-inputs (list python-pytest python-setuptools))
23234 (home-page "https://pypi.org/project/freecell-solver/")
23235 (synopsis "Freecell Solver bindings")
23236 (description
23237 "This package provides Python bindings for the freecell-solver
23238package. Freecell Solver is a program that automatically solves layouts of
23239Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
23240and Seahaven Towers, as well as Simple Simon boards.")
23241 (license license:expat)))
23242
23243(define-public python-inflection
23244 (package
23245 (name "python-inflection")
23246 (version "0.5.1")
23247 (source
23248 (origin
23249 (method git-fetch)
23250 (uri (git-reference
23251 (url "https://github.com/jpvanhal/inflection")
23252 (commit version)))
23253 (file-name (git-file-name name version))
23254 (sha256
23255 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
23256 (build-system pyproject-build-system)
23257 (native-inputs (list python-pytest python-setuptools))
23258 (home-page "https://github.com/jpvanhal/inflection")
23259 (synopsis "Python string transformation library")
23260 (description
23261 "Inflection is a string transformation library. It singularizes
23262and pluralizes English words, and transforms strings from CamelCase to
23263underscored string.")
23264 (license license:expat)))
23265
23266(define-public python-krb5
23267 (package
23268 (name "python-krb5")
23269 (version "0.5.1")
23270 (source
23271 (origin
23272 (method url-fetch)
23273 (uri (pypi-uri "krb5" version))
23274 (sha256
23275 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
23276 (build-system pyproject-build-system)
23277 (inputs (list mit-krb5))
23278 (native-inputs (list python-cython python-k5test python-pytest
23279 python-setuptools python-wheel))
23280 (home-page "https://github.com/jborean93/pykrb5")
23281 (synopsis "Kerberos API bindings for Python")
23282 (description "This library provides Python functions that wraps the
23283Kerberos 5 C API.")
23284 (license license:expat)))
23285
23286(define-public python-pylev
23287 (package
23288 (name "python-pylev")
23289 (version "1.4.0")
23290 (source
23291 (origin
23292 (method git-fetch)
23293 (uri (git-reference
23294 (url "https://github.com/toastdriven/pylev")
23295 (commit (string-append "v" version))))
23296 (file-name (git-file-name name version))
23297 (sha256
23298 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
23299 (build-system pyproject-build-system)
23300 (arguments
23301 (list
23302 #:test-backend #~'custom
23303 #:test-flags #~(list "tests.py")))
23304 (native-inputs (list python-setuptools))
23305 (home-page "https://github.com/toastdriven/pylev")
23306 (synopsis "Levenshtein distance implementation in Python")
23307 (description
23308 "Pure Python Levenshtein implementation, based off the Wikipedia code
23309samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
23310 (license license:bsd-3)))
23311
23312(define-public python-cleo
23313 (package
23314 (name "python-cleo")
23315 (version "2.1.0")
23316 (source (origin
23317 (method url-fetch)
23318 (uri (pypi-uri "cleo" version))
23319 (sha256
23320 (base32
23321 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
23322 (build-system pyproject-build-system)
23323 (native-inputs
23324 (list python-poetry-core
23325 python-mock
23326 python-pytest-mock
23327 python-pytest))
23328 (propagated-inputs
23329 (list python-crashtest python-rapidfuzz))
23330 (home-page "https://github.com/sdispater/cleo")
23331 (synopsis "Command-line arguments library for Python")
23332 (description
23333 "Cleo allows you to create command-line commands with signature in
23334docstring and colored output.")
23335 (license license:expat)))
23336
23337(define-public python-shellingham
23338 (package
23339 (name "python-shellingham")
23340 (version "1.5.4")
23341 (source
23342 (origin
23343 (method url-fetch)
23344 (uri (pypi-uri "shellingham" version))
23345 (sha256
23346 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
23347 (build-system pyproject-build-system)
23348 (native-inputs
23349 (list python-pytest python-pytest-mock python-setuptools python-wheel))
23350 (home-page "https://github.com/sarugaku/shellingham")
23351 (synopsis "Tool to detect surrounding shell")
23352 (description
23353 "Shellingham detects what shell the current Python executable is
23354running in.")
23355 (license license:isc)))
23356
23357(define-public python-shshsh
23358 (package
23359 (name "python-shshsh")
23360 (version "1.0.5")
23361 (source
23362 (origin
23363 (method git-fetch)
23364 (uri
23365 (git-reference
23366 (url "https://github.com/zqqqqz2000/shshsh")
23367 (commit
23368 "fd21c8696aebaae04507760c16cb45979291fef5")))
23369 (file-name (git-file-name name version))
23370 (sha256
23371 (base32
23372 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
23373 (build-system pyproject-build-system)
23374 (native-inputs
23375 (list python-poetry-core
23376 python-pytest))
23377 (home-page "https://github.com/zqqqqz2000/shshsh")
23378 (synopsis "Write Shell commands simply and safely within Python")
23379 (description "This package provides a way to write Shell commands from
23380within Python. Python functions can be chained together to process input
23381Bash control characters are escapted so that parameters can be passed
23382without worrying about command injection.")
23383 (license license:expat)))
23384
23385(define-public python-memcached
23386 (package
23387 (name "python-memcached")
23388 (version "1.62")
23389 (source
23390 (origin
23391 (method git-fetch)
23392 (uri (git-reference
23393 (url "https://github.com/linsomniac/python-memcached")
23394 (commit version)))
23395 (file-name (git-file-name name version))
23396 (sha256
23397 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
23398 (build-system pyproject-build-system)
23399 (arguments
23400 (list
23401 #:tests? #f ;Requires a connection to a socket.
23402 #:test-backend #~'unittest))
23403 (native-inputs (list python-setuptools))
23404 (home-page "https://github.com/linsomniac/python-memcached")
23405 (synopsis "Pure python memcached client")
23406 (description
23407 "This software is a pure Python interface to the memcached memory cache
23408daemon. It is the client side software which allows storing values in one or
23409more, possibly remote, memcached servers.")
23410 (license license:psfl)))
23411
23412(define-public python-mergedeep
23413 (package
23414 (name "python-mergedeep")
23415 (version "1.3.4")
23416 (source
23417 (origin
23418 (method git-fetch)
23419 (uri (git-reference
23420 (url "https://github.com/clarketm/mergedeep")
23421 (commit (string-append "v" version))))
23422 (file-name (git-file-name name version))
23423 (sha256
23424 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
23425 (build-system pyproject-build-system)
23426 (arguments (list #:test-backend #~'unittest))
23427 (native-inputs (list python-setuptools))
23428 (home-page "https://github.com/clarketm/mergedeep")
23429 (synopsis "Deep merge function for Python")
23430 (description
23431 "This package provides a deep merge function for Python, useful to
23432combine multiple data objects as one.")
23433 (license license:expat)))
23434
23435(define-public python-clikit
23436 (package
23437 (name "python-clikit")
23438 (version "0.6.2")
23439 (source
23440 (origin
23441 (method git-fetch)
23442 (uri (git-reference
23443 (url "https://github.com/sdispater/clikit")
23444 (commit version)))
23445 (file-name (git-file-name name version))
23446 (sha256
23447 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
23448 (build-system pyproject-build-system)
23449 (arguments
23450 (list
23451 #:phases
23452 #~(modify-phases %standard-phases
23453 (add-after 'unpack 'relax-requirements
23454 (lambda _
23455 (substitute* "pyproject.toml"
23456 (("^crashtest.*")
23457 (format #f "crashtest=~s"
23458 #$(package-version
23459 (this-package-input "python-crashtest"))))))))))
23460 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
23461 (propagated-inputs (list python-crashtest python-pastel python-pylev))
23462 (home-page "https://github.com/sdispater/clikit")
23463 (synopsis "Group of utilities to build command line interfaces")
23464 (description
23465 "CliKit is a group of utilities to build testable command line
23466interfaces.")
23467 (license license:expat)))
23468
23469(define-public python-cattrs
23470 (package
23471 (name "python-cattrs")
23472 (version "26.1.0")
23473 (source
23474 (origin
23475 (method git-fetch)
23476 (uri (git-reference
23477 (url "https://github.com/python-attrs/cattrs")
23478 (commit (string-append "v" version))))
23479 (file-name (git-file-name name version))
23480 (sha256
23481 (base32 "0msn1zgv7shlh7nnmhydg7gv6j0y9yy1061f7qcj31jhzd7bnl4b"))))
23482 (build-system pyproject-build-system)
23483 (arguments
23484 (list
23485 ;; tests: 1010 passed, 15 xfailed
23486 #:test-flags
23487 #~(list "-m" "not benchmark"
23488 "--numprocesses" (number->string (parallel-job-count)))
23489 #:phases
23490 #~(modify-phases %standard-phases
23491 (add-after 'unpack 'fix-pytest-config
23492 (lambda _
23493 (substitute* "pyproject.toml"
23494 ;; All options are benchmark related.
23495 (("addopts =.*") "\n")))))))
23496 (native-inputs
23497 (list python-hatchling
23498 python-hatch-vcs
23499 python-immutables
23500 python-pytest
23501 python-pytest-benchmark
23502 python-pytest-xdist))
23503 (propagated-inputs
23504 (list python-attrs
23505 python-typing-extensions
23506 ;; [optional]
23507 python-cbor2
23508 python-msgpack
23509 python-msgspec
23510 python-orjson
23511 python-pymongo ;for the bson module
23512 python-pyyaml
23513 python-tomli-w
23514 python-tomlkit
23515 python-ujson))
23516 (home-page "https://github.com/python-attrs/cattrs")
23517 (synopsis "Python library for structuring and unstructuring data")
23518 (description "@code{cattrs} is an Python library for structuring and
23519unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23520@code{dataclasses} and the usual Python collections, but other kinds of
23521classes can also be supported by manually registering converters.")
23522 (license license:expat)))
23523
23524;; A bare minimal package, mainly to use in tests and reduce closure
23525;; size. Tests are left out in the main package to slim down native-inputs and
23526;; optional propagated-inputs.
23527(define-public python-cattrs-minimal
23528 (package/inherit python-cattrs
23529 (name "python-cattrs-minimal")
23530 (arguments
23531 (substitute-keyword-arguments arguments
23532 ((#:tests? _ #t) #f)))
23533 (native-inputs
23534 (list python-hatchling
23535 python-hatch-vcs))
23536 (propagated-inputs
23537 (list python-attrs
23538 python-typing-extensions))))
23539
23540(define-public python-cachy
23541 (package
23542 (name "python-cachy")
23543 (version "0.3.0")
23544 (source
23545 (origin
23546 (method url-fetch)
23547 (uri (pypi-uri "cachy" version))
23548 (sha256
23549 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23550 (build-system pyproject-build-system)
23551 (arguments
23552 (list
23553 #:phases
23554 #~(modify-phases %standard-phases
23555 (replace 'check
23556 (lambda* (#:key tests? #:allow-other-keys)
23557 (when tests?
23558 ;; Make it compatible with python-flexmock 0.12.
23559 (substitute* (find-files "tests" "\\.py$")
23560 (("from flexmock import flexmock, flexmock_teardown")
23561 (string-append "from flexmock import flexmock\n"
23562 "from flexmock._api import flexmock_teardown")))
23563 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23564 "pytest")))))))
23565 (native-inputs
23566 (list memcached
23567 python-fakeredis
23568 python-flexmock
23569 python-pifpaf
23570 python-pytest
23571 python-setuptools
23572 python-wheel))
23573 (propagated-inputs
23574 (list python-memcached
23575 python-msgpack
23576 python-redis))
23577 (home-page "https://github.com/sdispater/cachy")
23578 (synopsis "Simple yet effective caching library")
23579 (description
23580 "Cachy provides a simple yet effective caching library. A simple but
23581powerful API: thread-safety; decorator syntax; support for memcached, redis,
23582database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23583 (license license:expat)))
23584
23585(define-public python-pyproject-api
23586 (package
23587 (name "python-pyproject-api")
23588 (version "1.10.0")
23589 (source
23590 (origin
23591 (method url-fetch)
23592 (uri (pypi-uri "pyproject_api" version))
23593 (sha256
23594 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23595 (build-system pyproject-build-system)
23596 (native-inputs
23597 (list python-hatch-vcs
23598 python-hatchling
23599 python-pytest
23600 python-pytest-mock
23601 python-setuptools))
23602 (propagated-inputs
23603 (list python-packaging python-tomli))
23604 (home-page "https://pyproject-api.readthedocs.io/latest/")
23605 (synopsis "API to interact with the Python pyproject.toml based projects")
23606 (description
23607 "@code{pyproject-api} aims to abstract away interaction with
23608@code{pyproject.toml} style projects in a flexible way.")
23609 (license license:expat)))
23610
23611(define-public python-lark
23612 (package
23613 (name "python-lark")
23614 (version "1.2.2")
23615 (source
23616 (origin
23617 (method url-fetch)
23618 (uri (pypi-uri "lark" version))
23619 (sha256
23620 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23621 (build-system pyproject-build-system)
23622 (native-inputs (list python-pytest python-setuptools python-wheel))
23623 (home-page "https://github.com/lark-parser/lark")
23624 (synopsis "Multi-language parser for Python")
23625 (description
23626 "Lark is a parser built with a focus on ergonomics, performance and
23627resilience. Lark can parse all context-free languages. That means it is
23628capable of parsing almost any programming language out there, and to
23629some degree most natural languages too.")
23630 (license license:expat)))
23631
23632(define-public python-find-libpython
23633 (package
23634 (name "python-find-libpython")
23635 (version "0.5.1")
23636 (source
23637 (origin
23638 (method git-fetch)
23639 (uri (git-reference
23640 (url "https://github.com/ktbarrett/find_libpython")
23641 (commit (string-append "v" version))))
23642 (file-name (git-file-name name version))
23643 (sha256
23644 (base32 "0r4mzmlbgzbxldxhw55b6haj9xybx1wwm9pvpr665mhsxgxaaqc3"))))
23645 (build-system pyproject-build-system)
23646 (native-inputs (list python-pytest python-setuptools))
23647 (home-page "https://github.com/ktbarrett/find_libpython")
23648 (synopsis "Find the path to the @code{libpython} dynamic library")
23649 (description
23650 "@code{find_libpython} helps find the path to the
23651@code{libpython} dynamic library for the current Python environment. It is
23652both a script and a Python package.")
23653 (license license:expat)))
23654
23655(define-public python-libcst
23656 (package
23657 (name "python-libcst")
23658 (version "1.6.0")
23659 (source (origin
23660 (method url-fetch)
23661 (uri (pypi-uri "libcst" version))
23662 (sha256
23663 (base32
23664 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23665 (snippet
23666 #~(begin (use-modules (guix build utils))
23667 ;; This is mostly to keep the cargo-build-system happy
23668 (with-output-to-file "Cargo.toml"
23669 (lambda ()
23670 (format #t "\
23671[workspace]
23672
23673members = [
23674 \"native\",]")))))))
23675 (build-system cargo-build-system)
23676 (arguments
23677 (list
23678 #:install-source? #false
23679 #:cargo-test-flags
23680 ;; According to .github/workflows/ci.yml
23681 '(list "--manifest-path=native/Cargo.toml"
23682 "--release"
23683 "--no-default-features")
23684 #:imported-modules `(,@%pyproject-build-system-modules
23685 ,@%cargo-build-system-modules)
23686 #:modules `((guix build cargo-build-system)
23687 ((guix build pyproject-build-system) #:prefix py:)
23688 (guix build utils))
23689 #:phases
23690 #~(modify-phases %standard-phases
23691 (add-after 'unpack 'prepare-source
23692 (lambda _
23693 (delete-file "native/Cargo.lock")))
23694 (replace 'build
23695 (assoc-ref py:%standard-phases 'build))
23696 (add-after 'install 'wrap
23697 (lambda _
23698 ;; Collection of python- and pyproject-build-system phases
23699 ;; between 'install and 'check.
23700 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23701 (assoc-ref py:%standard-phases 'add-install-to-path)
23702 (assoc-ref py:%standard-phases 'wrap)
23703 (assoc-ref py:%standard-phases 'create-entrypoints)
23704 (assoc-ref py:%standard-phases 'compile-bytecode)))
23705 ;; We are not the only ones who cannot load libcst.native
23706 ;; during the 'check phase
23707 ;; https://github.com/Instagram/LibCST/issues/1176
23708 ;; (add-after 'wrap 'python-check
23709 ;; (lambda args
23710 ;; (apply (assoc-ref py:%standard-phases 'check)
23711 ;; #:test-flags '()
23712 ;; args)))
23713 (replace 'install
23714 (assoc-ref py:%standard-phases 'install)))))
23715 (native-inputs
23716 (list python-minimal-wrapper
23717 python-hypothesmith
23718 python-pytest
23719 python-setuptools
23720 python-setuptools-rust
23721 python-setuptools-scm
23722 python-wheel))
23723 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23724 (propagated-inputs
23725 (list python-pyyaml))
23726 (home-page "https://github.com/Instagram/LibCST")
23727 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23728 (description
23729 "LibCST parses Python source code as a CST tree that keeps all
23730formatting details (comments, whitespaces, parentheses, etc). It's useful
23731for building automated refactoring (codemod) applications and linters.
23732LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23733a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23734naming node types and fields, LibCST creates a lossless CST that looks and
23735feels like an AST.")
23736 (license (list license:expat
23737 ;; Some files unde libcst/_parser/ are under Python Software
23738 ;; Foundation license (see LICENSE file for details)
23739 license:psfl
23740 ;; libcst/_add_slots.py
23741 license:asl2.0))))
23742
23743(define-public python-libcst-minimal
23744 (hidden-package
23745 (package
23746 (inherit python-libcst)
23747 (name "python-libcst-minimal")
23748 (arguments
23749 (substitute-keyword-arguments arguments
23750 ((#:tests? _ #t) #f)))
23751 (native-inputs
23752 (list python-minimal-wrapper
23753 python-setuptools
23754 python-setuptools-rust
23755 python-setuptools-scm
23756 python-wheel)))))
23757
23758(define-public python-lazy-loader
23759 (package
23760 (name "python-lazy-loader")
23761 (version "0.4")
23762 (source (origin
23763 (method url-fetch)
23764 (uri (pypi-uri "lazy_loader" version))
23765 (sha256
23766 (base32
23767 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23768 (build-system pyproject-build-system)
23769 (native-inputs
23770 (list python-numpy python-pytest python-setuptools))
23771 (propagated-inputs
23772 (list python-flit-core
23773 python-setuptools
23774 python-wheel))
23775 (home-page "https://scientific-python.org/specs/spec-0001/")
23776 (synopsis "Load subpackages and functions on demand")
23777 (description "@code{python-lazy-loader} makes it easy to load subpackages
23778and functions on demand. Its main features are:
23779
23780@itemize
23781@item Allow subpackages to be made visible to users without incurring import
23782costs.
23783@item Allow external libraries to be imported only when used, improving import
23784times.
23785@end itemize")
23786 (license license:bsd-3)))
23787
23788(define-public python-lazy-object-proxy
23789 (package
23790 (name "python-lazy-object-proxy")
23791 (version "1.12.0")
23792 (source
23793 (origin
23794 (method git-fetch)
23795 (uri (git-reference
23796 (url "https://github.com/ionelmc/python-lazy-object-proxy")
23797 (commit (string-append "v" version))))
23798 (file-name (git-file-name name version))
23799 (sha256
23800 (base32 "1qig879igkjmj4mir26b0n40w3vn5jqn293172s6npxnb4k90kzk"))))
23801 (build-system pyproject-build-system)
23802 (native-inputs
23803 (list python-pytest
23804 python-pytest-benchmark
23805 python-setuptools
23806 python-setuptools-scm))
23807 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23808 (synopsis "Lazy object proxy for Python")
23809 (description
23810 "Lazy object proxy is an object that wraps a callable but defers the call
23811until the object is actually required, and caches the result of said call.")
23812 (license license:bsd-2)))
23813
23814(define-public python-dnspython
23815 ;; TODO: Move to (gnu packages python-web).
23816 (package
23817 (name "python-dnspython")
23818 (version "2.8.0")
23819 (source
23820 (origin
23821 (method url-fetch)
23822 (uri (pypi-uri "dnspython" version))
23823 (sha256
23824 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23825 (build-system pyproject-build-system)
23826 (arguments
23827 (list
23828 ;; tests: 1216 passed, 198 skipped, 2 deselected
23829 #:test-flags
23830 #~(list
23831 ;; AssertionError: assert False
23832 "--deselect=tests/test_features.py::test_have"
23833 ;; dns.exception.SyntaxError: protocol not found
23834 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23835 #:phases
23836 #~(modify-phases %standard-phases
23837 (add-after 'unpack 'patch-getprotobyname-calls
23838 ;; These calls are problematic in the build environment as there is
23839 ;; no /etc/protocols. This breaks the sanity-check phase of any
23840 ;; package depending on this one.
23841 (lambda _
23842 (substitute* "dns/rdtypes/IN/WKS.py"
23843 (("socket.getprotobyname\\('tcp'\\)")
23844 "6")
23845 (("socket.getprotobyname\\('udp'\\)")
23846 "17")))))))
23847 (native-inputs
23848 (list python-hatchling
23849 python-pytest))
23850 (propagated-inputs
23851 (append
23852 (if (supported-package? python-cryptography)
23853 (list ;; DNSSEC
23854 python-cryptography
23855 ;; DNS over Quic
23856 python-aioquic
23857 ;; DNS over HTTPS
23858 python-h2
23859 python-httpcore
23860 python-httpx)
23861 '())
23862 (list python-idna
23863 python-trio)))
23864 (home-page "https://www.dnspython.org")
23865 (synopsis "DNS toolkit for Python")
23866 (description
23867 "dnspython is a DNS toolkit for Python. It supports almost all record
23868types. It can be used for queries, zone transfers, and dynamic updates.
23869It supports TSIG authenticated messages and EDNS0.")
23870 (license license:expat)))
23871
23872;; A bare minimal package, mainly to use in tests and reduce closure size.
23873;; Tests are left out in the main package to slim down native-inputs and
23874;; propagated-inputs.
23875(define-public python-dnspython-minimal
23876 (package/inherit python-dnspython
23877 (name "python-dnspython-minimal")
23878 (arguments
23879 (substitute-keyword-arguments arguments
23880 ((#:tests? _ #t) #f)))
23881 (native-inputs
23882 (list python-hatchling))
23883 (propagated-inputs '())))
23884
23885(define-public python-py3dns
23886 (package
23887 (name "python-py3dns")
23888 (version "4.0.2")
23889 (source
23890 (origin
23891 (method url-fetch)
23892 (uri (pypi-uri "py3dns" version))
23893 (sha256
23894 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23895 (build-system pyproject-build-system)
23896 (arguments
23897 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23898 ;; removing functionality so we don't run tests.
23899 (list #:tests? #f))
23900 (native-inputs (list python-flit-core))
23901 (home-page "https://launchpad.net/py3dns")
23902 (synopsis "Python 3 DNS library")
23903 (description
23904 "This Python 3 module provides a DNS API for looking up DNS entries from
23905within Python 3 modules and applications. This module is a simple,
23906lightweight implementation.")
23907 (license license:psfl)))
23908
23909(define-public python-email-validator
23910 (package
23911 (name "python-email-validator")
23912 (version "2.2.0")
23913 (source
23914 (origin
23915 (method url-fetch)
23916 (uri (pypi-uri "email_validator" version))
23917 (sha256
23918 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23919 (build-system pyproject-build-system)
23920 (arguments
23921 (list
23922 #:test-flags
23923 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23924 #~(list "-k" "not test_caching_dns_resolver")))
23925 (native-inputs
23926 (list python-pytest
23927 python-setuptools
23928 python-wheel))
23929 (propagated-inputs
23930 (list python-dnspython
23931 python-idna))
23932 (home-page "https://github.com/JoshData/python-email-validator")
23933 (synopsis "Email address validation library for Python")
23934 (description
23935 "This library validates email address syntax and deliverability.")
23936 (license license:cc0)))
23937
23938(define-public python-faker
23939 (package
23940 (name "python-faker")
23941 (version "37.4.2")
23942 (source
23943 (origin
23944 (method url-fetch)
23945 (uri (pypi-uri "faker" version))
23946 (sha256
23947 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23948 (build-system pyproject-build-system)
23949 ;; tests: 2104 passed, 12 skipped, 2 warnings
23950 (native-inputs
23951 (list python-freezegun
23952 python-pytest
23953 python-setuptools
23954 python-validators))
23955 (propagated-inputs
23956 (list python-tzdata))
23957 (home-page "https://github.com/joke2k/faker")
23958 (synopsis "Python package that generates fake data")
23959 (description
23960 "Faker is a Python package that generates fake data such as names,
23961addresses, and phone numbers.")
23962 (license license:expat)))
23963
23964(define-public python-pyaml
23965 (package
23966 (name "python-pyaml")
23967 (version "25.7.0")
23968 (source
23969 (origin
23970 (method url-fetch)
23971 (uri (pypi-uri "pyaml" version))
23972 (sha256
23973 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23974 (build-system pyproject-build-system)
23975 (native-inputs
23976 (list python-pytest
23977 python-setuptools))
23978 (propagated-inputs
23979 (list python-pyyaml))
23980 (home-page "https://github.com/mk-fg/pretty-yaml")
23981 (synopsis "YAML pretty-print library for Python")
23982 (description
23983 "pyaml is a PyYAML based python module to produce pretty and readable
23984YAML-serialized data.")
23985 (license license:wtfpl2)))
23986
23987(define-public python-pyyaml-env-tag
23988 (package
23989 (name "python-pyyaml-env-tag")
23990 (version "1.1")
23991 (source
23992 (origin
23993 (method git-fetch)
23994 (uri (git-reference
23995 (url "https://github.com/waylan/pyyaml-env-tag")
23996 (commit version)))
23997 (file-name (git-file-name name version))
23998 (sha256
23999 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
24000 (build-system pyproject-build-system)
24001 (native-inputs (list python-pytest python-setuptools))
24002 (propagated-inputs (list python-pyyaml))
24003 (home-page "https://github.com/waylan/pyyaml-env-tag")
24004 (synopsis "Custom YAML tag for environment variables")
24005 (description
24006 "This package provides a custom YAML tag for referencing environment
24007variables in YAML files.")
24008 (license license:expat)))
24009
24010(define-public python-prompt-toolkit
24011 (package
24012 (name "python-prompt-toolkit")
24013 (version "3.0.51")
24014 (source
24015 (origin
24016 (method url-fetch)
24017 (uri (pypi-uri "prompt_toolkit" version))
24018 (sha256
24019 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
24020 (build-system pyproject-build-system)
24021 (arguments
24022 (list
24023 #:phases
24024 #~(modify-phases %standard-phases
24025 (add-before 'check 'pre-check
24026 (lambda _
24027 ;; HOME is needed for the test
24028 ;; "test_pathcompleter_can_expanduser".
24029 (setenv "HOME" "/tmp"))))))
24030 (native-inputs
24031 (list python-pytest
24032 python-setuptools))
24033 (propagated-inputs
24034 (list python-wcwidth))
24035 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
24036 (synopsis "Library for building command line interfaces in Python")
24037 (description
24038 "Prompt-Toolkit is a library for building interactive command line
24039interfaces in Python. It's like GNU Readline but it also features syntax
24040highlighting while typing, out-of-the-box multi-line input editing, advanced
24041code completion, incremental search, support for Chinese double-width
24042characters, mouse support, and auto suggestions.")
24043 (license license:bsd-3)))
24044
24045(define-public python-proselint
24046 (package
24047 (name "python-proselint")
24048 (version "0.14.0")
24049 (source
24050 (origin
24051 (method url-fetch)
24052 (uri (pypi-uri "proselint" version))
24053 (sha256
24054 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
24055 (build-system pyproject-build-system)
24056 (arguments
24057 (list
24058 #:phases
24059 #~(modify-phases %standard-phases
24060 (add-after 'unpack 'set-home-directory
24061 (lambda _
24062 (setenv "HOME" "/tmp"))))))
24063 (native-inputs
24064 (list python-poetry-core
24065 python-pytest))
24066 (propagated-inputs
24067 (list python-click))
24068 (home-page "http://proselint.com/")
24069 (synopsis "Linter for prose")
24070 (description "@code{python-proselint} is a linter for English prose, that
24071scans through a file and detects issues.")
24072 (license license:bsd-3)))
24073
24074(define-public python-jedi
24075 (package
24076 (name "python-jedi")
24077 (version "0.19.2")
24078 (source
24079 (origin
24080 (method git-fetch)
24081 (uri (git-reference
24082 (url "https://github.com/davidhalter/jedi")
24083 (commit (string-append "v" version))
24084 (recursive? #true)))
24085 (file-name (git-file-name name version))
24086 (sha256
24087 (base32
24088 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
24089 (build-system pyproject-build-system)
24090 (arguments
24091 (list
24092 #:phases
24093 '(modify-phases %standard-phases
24094 (add-before 'check 'set-HOME
24095 (lambda _ (setenv "HOME" "/tmp"))))))
24096 (native-inputs
24097 (list python-docopt
24098 python-pytest
24099 python-setuptools
24100 python-wheel))
24101 (propagated-inputs
24102 (list python-parso))
24103 (home-page "https://github.com/davidhalter/jedi")
24104 (synopsis "Autocompletion and static analysis library for Python")
24105 (description
24106 "Jedi is a static analysis tool for Python that can be used in Integrated
24107Development Environments (@dfn{IDE}s) and text editors. It understands Python
24108on a deeper level than many other static analysis frameworks for Python.
24109
24110Jedi understands docstrings and you can use Jedi autocompletion in your REPL
24111as well.")
24112 (license license:expat)))
24113
24114(define-public ptpython
24115 (package
24116 (name "ptpython")
24117 (version "3.0.20")
24118 (source
24119 (origin
24120 (method git-fetch)
24121 (uri (git-reference
24122 (url "https://github.com/jonathanslenders/ptpython")
24123 (commit version)))
24124 (file-name (git-file-name name version))
24125 (sha256
24126 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
24127 (build-system pyproject-build-system)
24128 (arguments
24129 (list
24130 ;; XXX: There is a tests/run_tests.py file but all it does is a
24131 ;; sanity check.
24132 #:tests? #f))
24133 (native-inputs (list python-setuptools))
24134 (propagated-inputs
24135 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
24136 (home-page "https://github.com/jonathanslenders/ptpython")
24137 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
24138 (description
24139 "ptpython is a Python read-eval-print loop with IDE-like features.
24140It supports syntax highlighting, multiline editing, autocompletion, mouse,
24141color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
24142etc.")
24143 (license license:bsd-3)))
24144
24145(define-public python-easyprocess
24146 (package
24147 (name "python-easyprocess")
24148 (version "1.1")
24149 (source
24150 (origin
24151 (method git-fetch)
24152 (uri (git-reference
24153 (url "https://github.com/ponty/easyprocess")
24154 (commit version)))
24155 (file-name (git-file-name name version))
24156 (sha256
24157 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
24158 (build-system pyproject-build-system)
24159 (arguments
24160 ;; Tests require pyvirtualdisplay, which requires this package.
24161 (list #:tests? #f))
24162 (native-inputs (list python-setuptools))
24163 (home-page "https://github.com/ponty/easyprocess")
24164 (synopsis "Python subprocess interface")
24165 (description
24166 "@code{easyprocess} is an easy to use Python subprocess interface.")
24167 (license license:bsd-3)))
24168
24169(define-public python-entrypoint2
24170 (package
24171 (name "python-entrypoint2")
24172 (version "0.2.4")
24173 (source
24174 (origin
24175 (method url-fetch)
24176 (uri (pypi-uri "entrypoint2" version))
24177 (sha256
24178 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
24179 (build-system pyproject-build-system)
24180 (native-inputs (list python-easyprocess
24181 python-pytest
24182 python-setuptools
24183 python-wheel))
24184 (home-page "https://github.com/ponty/entrypoint2")
24185 (synopsis "Command-line interface for Python modules")
24186 (description
24187 "@code{entrypoint2} is an easy to use command-line interface for Python
24188 modules based on @code{argparse}. It translates function signature and
24189 documentation to argparse configuration.")
24190 (license license:bsd-3)))
24191
24192(define-public python-pyvirtualdisplay
24193 (package
24194 (name "python-pyvirtualdisplay")
24195 (version "3.0")
24196 (source
24197 (origin
24198 (method url-fetch)
24199 (uri (pypi-uri "PyVirtualDisplay" version))
24200 (sha256
24201 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
24202 (build-system pyproject-build-system)
24203 (arguments
24204 (list
24205 ;; tests: 27 passed, 8 deselected
24206 #:test-flags
24207 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
24208 ;; OSError: Pillow was built without XCB support
24209 #~(list #$@(map (lambda (test) (string-append "--deselect="
24210 "tests/"
24211 test))
24212 (list "test_smart.py::test_slowshot"
24213 "test_smart.py::test_slowshot_with"
24214 "test_smart.py::test_slowshot_nocrop"
24215 "test_smart.py::test_slowshot_timeout"
24216 "test_smart.py::test_slowshot_timeout_nocrop"
24217 "test_smart2.py::test_double"
24218 "test_smart_thread.py::test_smart"
24219 "test_examples.py::test_screenshot")))))
24220 (native-inputs
24221 (list python-easyprocess
24222 python-entrypoint2
24223 python-psutil
24224 python-pytest
24225 python-setuptools
24226 python-vncdotool-bootstrap
24227 xmessage
24228 xorg-server-for-tests))
24229 (home-page "https://github.com/ponty/pyvirtualdisplay")
24230 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
24231 (description
24232 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
24233 (license license:bsd-3)))
24234
24235(define-public python-pyserial
24236 (package
24237 (name "python-pyserial")
24238 ;; 3.5 (2020-11-23), use the latest commit as upstream stopped publishing
24239 ;; releases on PyPI or tagging new versions.
24240 (properties '((commit . "a5c48d445fbc1943d4fabf8d9090a50fda3172fd")
24241 (revision . "0")))
24242 (version (git-version "3.5"
24243 (assoc-ref properties 'revision)
24244 (assoc-ref properties 'commit)))
24245 (source
24246 (origin
24247 (method git-fetch)
24248 (uri (git-reference
24249 (url "https://github.com/pyserial/pyserial")
24250 (commit (assoc-ref properties 'commit))))
24251 (file-name (git-file-name name version))
24252 (sha256
24253 (base32 "1mfqs5g4qgp6lll859hy3i4gz7nn95g057s80k01jn2mza12swjp"))))
24254 (build-system pyproject-build-system)
24255 (native-inputs
24256 (list python-pyfakefs
24257 python-pytest
24258 python-setuptools))
24259 (home-page "https://github.com/pyserial/pyserial")
24260 (synopsis "Python Serial Port Bindings")
24261 (description
24262 "@code{pyserial} provide serial port bindings for Python. It supports
24263different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
24264Xon/Xoff. The port is accessed in RAW mode.")
24265 (license license:bsd-3)))
24266
24267(define-public python-pyserial-asyncio
24268 (package
24269 (name "python-pyserial-asyncio")
24270 (version "0.6")
24271 (source
24272 (origin
24273 (method git-fetch)
24274 (uri (git-reference
24275 (url "https://github.com/pyserial/pyserial-asyncio")
24276 (commit (string-append "v" version))))
24277 (file-name (git-file-name name version))
24278 (sha256
24279 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
24280 (build-system pyproject-build-system)
24281 (arguments (list #:test-backend #~'unittest))
24282 (native-inputs (list python-setuptools))
24283 (propagated-inputs (list python-pyserial))
24284 (home-page "https://github.com/pyserial/pyserial-asyncio")
24285 (synopsis "Pyserial asynchronous I/O extension")
24286 (description
24287 "This package extends Pyserial with asynchronous I/O support.")
24288 (license license:bsd-3)))
24289
24290(define-public python-pymemcache
24291 (package
24292 (name "python-pymemcache")
24293 (version "4.0.0")
24294 (source
24295 (origin
24296 (method url-fetch)
24297 (uri (pypi-uri "pymemcache" version))
24298 (sha256
24299 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
24300 (build-system pyproject-build-system)
24301 (arguments
24302 ;; We don't have the zstd module.
24303 (list
24304 #:test-flags
24305 '(list "--ignore=pymemcache/test/test_compression.py")))
24306 (native-inputs
24307 (list python-faker
24308 python-pytest
24309 python-setuptools
24310 python-wheel))
24311 (home-page "https://github.com/pinterest/pymemcache")
24312 (synopsis "Comprehensive, fast, pure Python memcached client")
24313 (description
24314 "This package provides a comprehensive, fast, pure Python memcached
24315client.")
24316 (license license:asl2.0)))
24317
24318(define-public python-pymodbus
24319 (package
24320 (name "python-pymodbus")
24321 (version "3.8.6")
24322 (source
24323 (origin
24324 (method git-fetch)
24325 (uri (git-reference
24326 (url "https://github.com/riptideio/pymodbus")
24327 (commit (string-append "v" version))))
24328 (file-name (git-file-name name version))
24329 (sha256
24330 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
24331 (build-system pyproject-build-system)
24332 (arguments
24333 (list
24334 #:test-flags
24335 #~(list "--ignore"
24336 "test/server/test_simulator_api.py"
24337 ;; These tests require the presence of a certificate.
24338 "--ignore-glob"
24339 "test/examples/*"
24340 "--ignore"
24341 "test/client/test_client.py")))
24342 (native-inputs (list python-mock
24343 python-pytest
24344 python-pytest-asyncio
24345 python-pytest-xdist
24346 python-redis
24347 python-setuptools
24348 python-sqlalchemy
24349 python-tornado
24350 python-twisted
24351 python-wheel))
24352 (propagated-inputs (list python-pyserial
24353 python-six
24354 ;; For the REPL.
24355 python-aiohttp
24356 python-click
24357 python-prompt-toolkit
24358 python-pygments
24359 python-pyserial-asyncio))
24360 (home-page "https://github.com/riptideio/pymodbus/")
24361 (synopsis "Modbus protocol stack in Python")
24362 (description
24363 "Pymodbus is a full Modbus protocol implementation using
24364 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
24365 communications core. It includes the following @emph{client} features:
24366 @itemize
24367 @item full read/write protocol on discrete and register
24368 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
24369 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24370 @item asynchronous and synchronous versions
24371 @item payload builder/decoder utilities
24372 @item pymodbus read eval print loop (REPL).
24373 @end itemize
24374 It also includes the following @emph{server} features:
24375 @itemize
24376 @item can function as a fully implemented Modbus server
24377 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24378 @item asynchronous and synchronous versions
24379 @item full server control context (device information, counters, etc)
24380 @item a number of backing contexts (database, redis, sqlite, a slave device).
24381 @end itemize")
24382 (license license:bsd-3)))
24383
24384(define-public python-exodriver
24385 (package
24386 (name "python-exodriver")
24387 (version "2.6.0")
24388 (source (origin
24389 (method git-fetch)
24390 (uri (git-reference
24391 (url "https://github.com/labjack/exodriver")
24392 (commit (string-append "v" version))))
24393 (file-name (git-file-name name version))
24394 (sha256
24395 (base32
24396 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
24397 (outputs (list "out"
24398 "doc")) ;544 KiB of examples
24399 (build-system gnu-build-system)
24400 (arguments
24401 (list
24402 #:tests? #f ;no test suite
24403 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
24404 (string-append "PREFIX=" #$output)
24405 "RUN_LDCONFIG=0"
24406 "LINK_SO=1")
24407 #:phases
24408 #~(modify-phases %standard-phases
24409 (delete 'configure)
24410 (replace 'build
24411 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24412 (with-directory-excursion "liblabjackusb"
24413 (apply (assoc-ref %standard-phases 'build)
24414 `(,@args #:make-flags ,make-flags)))))
24415 (replace 'install
24416 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24417 (with-directory-excursion "liblabjackusb"
24418 (apply (assoc-ref %standard-phases 'install)
24419 `(,@args #:make-flags ,make-flags)))
24420 ;; Install udev rules.
24421 (install-file "90-labjack.rules"
24422 (string-append #$output "/lib/udev/rules.d"))
24423 ;; Install examples.
24424 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
24425 (mkdir-p doc)
24426 (copy-recursively "examples"
24427 (string-append doc "/examples"))))))))
24428 (inputs (list libusb))
24429 (home-page "https://github.com/labjack/exodriver")
24430 (synopsis "USB driver for LabJack data acquisition instruments")
24431 (description "This package provides @code{liblabjackusb}, a USB library for low-level
24432communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
24433instruments. A udev rule is also included to allow unprivileged users to
24434communicate with the instruments via USB.")
24435 (license license:expat))) ;see README
24436
24437(define-public python-labjack
24438 (package
24439 (name "python-labjack")
24440 (version "2.1.0")
24441 (source (origin
24442 (method url-fetch)
24443 (uri (pypi-uri "LabJackPython" version))
24444 (sha256
24445 (base32
24446 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24447 (build-system pyproject-build-system)
24448 (arguments
24449 (list
24450 #:tests? #f ;no test suite
24451 #:phases
24452 #~(modify-phases %standard-phases
24453 (add-after 'unpack 'patch-liblabjackusb.so
24454 (lambda* (#:key inputs #:allow-other-keys)
24455 (substitute* (find-files "." "\\.py$")
24456 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24457 (format #f "ctypes.CDLL(~s"
24458 (search-input-file inputs
24459 "lib/liblabjackusb.so")))))))))
24460 (native-inputs (list python-setuptools))
24461 ;; exodriver is provided as a regular input, as only its shared object is
24462 ;; used, not its Python API.
24463 (inputs (list python-exodriver))
24464 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24465 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24466 (description
24467 "This Python library allows communicating with the U3, U6, UE9 and U12
24468LabJack data acquisition (DAQ) modules.")
24469 (license license:expat))) ;see setup.py
24470
24471(define-public python-kivy-garden
24472 (package
24473 (name "python-kivy-garden")
24474 (version "0.1.5")
24475 (source
24476 (origin
24477 (method git-fetch) ; source was removed from PyPI
24478 (uri (git-reference
24479 (url "https://github.com/kivy-garden/garden")
24480 (commit (string-append "v" version))))
24481 (file-name (git-file-name name version))
24482 (sha256
24483 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24484 (build-system pyproject-build-system)
24485 (arguments
24486 (list
24487 #:tests? #f)) ; no tests in PyPI or Git distributions
24488 (native-inputs
24489 (list python-setuptools
24490 python-wheel))
24491 (propagated-inputs
24492 (list python-requests))
24493 (home-page "https://github.com/kivy-garden/garden")
24494 (synopsis "Garden tool for Kivy flowers")
24495 (description
24496 "This package provides the @command{garden} command to install packages
24497for Kivy, the multitouch application platform.")
24498 (license license:expat)))
24499
24500(define-public python-async-lru
24501 (package
24502 (name "python-async-lru")
24503 (version "2.0.4")
24504 (source
24505 (origin
24506 (method url-fetch)
24507 (uri (pypi-uri "async-lru" version))
24508 (sha256
24509 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24510 (build-system pyproject-build-system)
24511 (native-inputs
24512 (list python-pytest
24513 python-pytest-asyncio
24514 python-pytest-timeout
24515 python-setuptools
24516 python-wheel))
24517 (propagated-inputs
24518 (list python-typing-extensions))
24519 (home-page "https://github.com/aio-libs/async-lru")
24520 (synopsis "Simple LRU cache for asyncio")
24521 (description
24522 "This package is a port of Python's built-in @code{functools.lru_cache}
24523function for @code{asyncio}. To better handle async behaviour, it also
24524ensures multiple concurrent calls will only result in 1 call to the wrapped
24525function, with all awaits receiving the result of that call when it
24526completes.")
24527 (license license:expat)))
24528
24529(define-public python-asyncinject
24530 (package
24531 (name "python-asyncinject")
24532 (version "0.6.1")
24533 (source
24534 (origin
24535 (method git-fetch)
24536 (uri (git-reference
24537 (url "https://github.com/simonw/asyncinject")
24538 (commit version)))
24539 (file-name (git-file-name name version))
24540 (sha256
24541 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24542 (build-system pyproject-build-system)
24543 (native-inputs
24544 (list python-pytest
24545 python-pytest-asyncio
24546 python-setuptools))
24547 (home-page "https://github.com/simonw/asyncinject")
24548 (synopsis
24549 "Run async workflows using pytest-fixtures-style dependency injection")
24550 (description
24551 "This package lets you run asynchronous workflows using
24552pytest-fixtures-style dependency injection.")
24553 (license license:asl2.0)))
24554
24555(define-public python-binaryornot
24556 (package
24557 (name "python-binaryornot")
24558 (version "0.6.0")
24559 (source
24560 (origin
24561 (method git-fetch)
24562 (uri (git-reference
24563 (url "https://github.com/audreyr/binaryornot")
24564 (commit (string-append "v" version))))
24565 (file-name (git-file-name name version))
24566 (sha256
24567 (base32 "008r45bbhax8flcc0cp5fm2p9niclf0kg773s2y2p1x1j5qjx1jb"))))
24568 (build-system pyproject-build-system)
24569 (arguments
24570 (list
24571 #:test-flags
24572 ;; FileNotFoundError: [Errno 2] No such file or directory: 'uv'
24573 #~(list (string-append "--deselect=tests/test_sdist.py"
24574 "::TestSdistContents"
24575 "::test_sdist_includes_pyc_fixtures"))))
24576 (native-inputs
24577 (list python-hatchling
24578 python-pytest))
24579 (home-page "https://github.com/audreyr/binaryornot")
24580 (synopsis "Package to check if a file is binary or text")
24581 (description "Ultra-lightweight pure Python package to check if a file is
24582 binary or text.")
24583 (license license:bsd-3)))
24584
24585(define-public python-bson
24586 (package
24587 (name "python-bson")
24588 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24589 (revision . "0")))
24590 (version (git-version "0.5.10"
24591 (assoc-ref properties 'revision)
24592 (assoc-ref properties 'commit)))
24593 (source
24594 (origin
24595 (method git-fetch) ;for tests
24596 (uri (git-reference
24597 (url "https://github.com/py-bson/bson")
24598 (commit (assoc-ref properties 'commit))))
24599 (file-name (git-file-name name version))
24600 (sha256
24601 (base32
24602 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24603 (build-system pyproject-build-system)
24604 (native-inputs
24605 (list python-pytest
24606 python-setuptools))
24607 (propagated-inputs
24608 (list python-dateutil
24609 python-six))
24610 (home-page "https://github.com/py-bson/bson")
24611 (synopsis "BSON (Binary JSON) codec for Python")
24612 (description "@code{bson} is a Python library implementing a BSON (Binary
24613JSON) codec.")
24614 (license license:asl2.0)))
24615
24616(define-public python-nltk
24617 (package
24618 (name "python-nltk")
24619 (version "3.9.1")
24620 (source
24621 (origin
24622 (method url-fetch)
24623 (uri (pypi-uri "nltk" version))
24624 (sha256
24625 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24626 (build-system pyproject-build-system)
24627 (arguments
24628 ;; Tests require some extra resources to be downloaded.
24629 ;; TODO Try packaging these resources.
24630 '(#:tests? #f))
24631 (propagated-inputs (list python-click python-joblib python-regex
24632 python-tqdm))
24633 (native-inputs (list python-setuptools python-wheel))
24634 (home-page "https://www.nltk.org/")
24635 (synopsis "Natural Language Toolkit")
24636 (description
24637 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24638WordNet, along with a suite of text processing libraries for classification,
24639tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24640natural language processing libraries.")
24641 (license license:asl2.0)))
24642
24643(define-public python-pymongo
24644 (package
24645 (name "python-pymongo")
24646 (version "4.17.0")
24647 (source
24648 (origin
24649 (method git-fetch)
24650 (uri (git-reference
24651 (url "https://github.com/mongodb/mongo-python-driver")
24652 (commit version)))
24653 (file-name (git-file-name name version))
24654 (sha256
24655 (base32 "0ybp4klx2advd0aka4d0915vwvydid3cil16x497amc4wiigndhx"))))
24656 (build-system pyproject-build-system)
24657 (arguments
24658 (list
24659 ;; tests: 1354 passed, 6514 skipped, 838 deselected, 38 subtests passed
24660 #:test-flags
24661 #~(list
24662 ;; pytest.PytestDeprecationWarning: Overriding the
24663 ;; "event_loop_policy" fixture is deprecated and will be removed in a
24664 ;; future version of pytest-asyncio. Use the
24665 ;; "pytest_asyncio_loop_factories" hook to customize event loop
24666 ;; creation.
24667 "-W" "ignore::DeprecationWarning"
24668 ;; Run only default unit tests, no benchmark and networking tests.
24669 "-m" "default_async or default"
24670 ;; Tests need access to /etc/resolve.conf.
24671 "--ignore=test/asynchronous/test_srv_polling.py"
24672 "--ignore=test/test_client.py"
24673 "--ignore=test/test_srv_polling.py"
24674 ;; XXX: Tests fail with assertion is not equal.
24675 "-k" "not test_test_uri_options_srv-options_SRV_URI")))
24676 (native-inputs
24677 (list python-hatch-requirements-txt
24678 python-hatchling
24679 python-pytest
24680 python-pytest-asyncio
24681 python-setuptools))
24682 (propagated-inputs
24683 (list python-dnspython))
24684 (home-page "https://github.com/mongodb/mongo-python-driver")
24685 (synopsis "Python driver for MongoDB")
24686 (description
24687 "The PyMongo distribution contains tools for interacting with MongoDB
24688database from Python. The @code{bson} package is an implementation of the
24689@url{http://bsonspec.org/, BSON format} for Python. The @code{pymongo}
24690package is a native Python driver for MongoDB, offering both synchronous and
24691asynchronous APIs. The @code{gridfs} package is a gridfs implementation on
24692top of @code{pymongo}.")
24693 (license license:asl2.0)))
24694
24695(define-public python-py-consul
24696 (package
24697 (name "python-py-consul")
24698 (version "1.6.0")
24699 (source
24700 (origin
24701 (method git-fetch)
24702 (uri (git-reference
24703 ;; Fork from https://github.com/cablehead/python-consul
24704 (url "https://github.com/criteo/py-consul")
24705 (commit (string-append "v" version))))
24706 (file-name (git-file-name name version))
24707 (sha256
24708 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24709 (build-system pyproject-build-system)
24710 (arguments (list #:tests? #f)) ; Tests require docker.
24711 (native-inputs (list python-setuptools))
24712 (propagated-inputs (list python-requests))
24713 (home-page "https://github.com/criteo/py-consul")
24714 (synopsis "Python client for Consul")
24715 (description
24716 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24717discovery, monitoring and configuration.")
24718 (license license:expat)))
24719
24720(define-public python-schematics
24721 (package
24722 (name "python-schematics")
24723 (version "2.1.1")
24724 (source
24725 (origin
24726 (method git-fetch)
24727 (uri (git-reference
24728 (url "https://github.com/schematics/schematics")
24729 (commit (string-append "v" version))))
24730 (file-name (git-file-name name version))
24731 (sha256
24732 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24733 (build-system pyproject-build-system)
24734 (native-inputs
24735 (list python-dateutil python-mock python-pytest python-setuptools))
24736 (home-page "https://github.com/schematics/schematics")
24737 (synopsis "Python Data Structures for Humans")
24738 (description
24739 "Schematics is a Python library to combine types into structures,
24740validate them, and transform the shapes of your data based on simple
24741descriptions.
24742
24743The internals are similar to ORM type systems, but there is no database layer
24744in Schematics. Instead, building a database layer is easily made when
24745Schematics handles everything except for writing the query. Schematics can be
24746used for tasks where having a database involved is unusual.")
24747 (license license:bsd-3)))
24748
24749(define-public python-odfpy
24750 (package
24751 (name "python-odfpy")
24752 (version "1.4.2")
24753 (source
24754 (origin
24755 (method git-fetch)
24756 (uri (git-reference
24757 (url "https://github.com/eea/odfpy")
24758 (commit (string-append "release-" version))))
24759 (file-name (git-file-name name version))
24760 (sha256
24761 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24762 (build-system pyproject-build-system)
24763 (native-inputs (list python-pytest python-setuptools))
24764 (propagated-inputs (list python-defusedxml))
24765 (home-page "https://github.com/eea/odfpy")
24766 (synopsis "Python API and tools to manipulate OpenDocument files")
24767 (description
24768 "Collection of libraries and utility programs written in Python to
24769manipulate OpenDocument 1.2 files.")
24770 (license
24771 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24772 ;; number of files with other licenses.
24773 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24774
24775(define-public python-namex
24776 (package
24777 (name "python-namex")
24778 (version "0.0.7")
24779 (source
24780 (origin
24781 (method url-fetch)
24782 (uri (pypi-uri "namex" version))
24783 (sha256
24784 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24785 (build-system pyproject-build-system)
24786 (arguments (list #:tests? #false)) ;there are none
24787 (native-inputs (list python-setuptools python-wheel))
24788 (home-page "https://github.com/fchollet/namex")
24789 (synopsis
24790 "Separate implementation and public API surface of Python packages")
24791 (description
24792 "This package provides a simple utility to separate the
24793implementation of your Python package and its public API surface.")
24794 (license license:asl2.0)))
24795
24796(define-public python-natsort
24797 (package
24798 (name "python-natsort")
24799 (version "8.4.0")
24800 (source
24801 (origin
24802 (method url-fetch)
24803 (uri (pypi-uri "natsort" version))
24804 (sha256
24805 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24806 (build-system pyproject-build-system)
24807 (native-inputs
24808 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24809 python-pytest
24810 python-pytest-mock
24811 python-setuptools))
24812 (propagated-inputs
24813 (list python-fastnumbers
24814 python-pyicu))
24815 (home-page "https://github.com/SethMMorton/natsort")
24816 (synopsis "Natural sorting for python and shell")
24817 (description
24818 "Natsort lets you apply natural sorting on lists instead of
24819lexicographical. If you use the built-in @code{sorted} method in python on a
24820list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24821it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24822@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24823numbers and sorts them separately from strings. It can also sort version
24824numbers, real numbers, mixed types and more, and comes with a shell command
24825@command{natsort} that exposes this functionality in the command line.")
24826 (license license:expat)))
24827
24828(define-public python-graphql-core
24829 (package
24830 (name "python-graphql-core")
24831 (version "3.2.7")
24832 (source
24833 (origin
24834 (method git-fetch)
24835 (uri (git-reference
24836 (url "https://github.com/graphql-python/graphql-core")
24837 (commit (string-append "v" version))))
24838 (file-name (git-file-name name version))
24839 (sha256
24840 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24841 (build-system pyproject-build-system)
24842 (native-inputs
24843 (list python-gevent
24844 python-mock
24845 python-poetry-core
24846 python-pytest
24847 python-pytest-benchmark
24848 python-pytest-mock))
24849 (propagated-inputs
24850 (list python-promise python-six))
24851 (home-page "https://github.com/graphql-python/graphql-core")
24852 (synopsis "GraphQL implementation for Python")
24853 (description
24854 "GraphQL implementation for Python. GraphQL is a data query language and
24855 runtime designed and used to request and deliver data to mobile and web apps.
24856 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24857 to Python.")
24858 (license license:expat)))
24859
24860(define-public python-graphql-relay
24861 (package
24862 (name "python-graphql-relay")
24863 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24864 (revision . "0")))
24865 (version (git-version "3.1.5"
24866 (assoc-ref properties 'revision)
24867 (assoc-ref properties 'commit)))
24868 (source
24869 (origin
24870 (method git-fetch)
24871 (uri (git-reference
24872 (url "https://github.com/graphql-python/graphql-relay-py")
24873 (commit (assoc-ref properties 'commit))))
24874 (file-name (git-file-name name version))
24875 (sha256
24876 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24877 (build-system pyproject-build-system)
24878 (native-inputs
24879 (list python-pytest
24880 python-pytest-asyncio
24881 python-pytest-describe
24882 python-poetry-core))
24883 (propagated-inputs (list python-graphql-core))
24884 (home-page "https://github.com/graphql-python/graphql-relay-py")
24885 (synopsis "Relay implementation for Python")
24886 (description
24887 "This is a library to allow the easy creation of Relay-compliant servers
24888using the GraphQL Python reference implementation of a GraphQL server. It
24889should be noted that the code is a exact port of the original
24890@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24891implementation} from Facebook.")
24892 (license license:expat)))
24893
24894(define-public python-graphene
24895 (package
24896 (name "python-graphene")
24897 (version "3.4.3")
24898 (source
24899 (origin
24900 (method url-fetch)
24901 (uri (pypi-uri "graphene" version))
24902 (sha256
24903 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24904 (build-system pyproject-build-system)
24905 (arguments
24906 (list #:tests? #f)) ;XXX: tests fail to load
24907 (native-inputs
24908 (list python-setuptools))
24909 (propagated-inputs
24910 (list python-dateutil
24911 python-graphql-core
24912 python-graphql-relay
24913 python-typing-extensions))
24914 (home-page "https://graphene-python.org/")
24915 (synopsis "GraphQL Framework for Python")
24916 (description
24917 "Graphene is a Python library for building GraphQL schemas/types. A
24918GraphQL schema describes your data model, and provides a GraphQL server with
24919an associated set of resolve methods that know how to fetch data.")
24920 (license license:expat)))
24921
24922(define-public python-rodi
24923 (package
24924 (name "python-rodi")
24925 (version "2.0.8")
24926 (source
24927 (origin
24928 (method git-fetch)
24929 (uri (git-reference
24930 (url "https://github.com/Neoteroi/rodi")
24931 (commit (string-append "v" version))))
24932 (file-name (git-file-name name version))
24933 (sha256
24934 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24935 (build-system pyproject-build-system)
24936 (native-inputs
24937 (list python-hatchling
24938 python-pytest
24939 python-pytest-asyncio))
24940 (home-page "https://github.com/Neoteroi/rodi")
24941 (synopsis "Dependency injection framework for Python")
24942 (description
24943 "Rodi is a dependency injection framework for Python applications.
24944
24945Its features include
24946
24947@itemize
24948@item Type resolution by signature types annotations.
24949@item Type resolution by class annotations.
24950@item Type resolution by names and aliases.
24951@item Build graph of objects without the need for source code changes.
24952@item Minimum overhead to obtain services, once the objects graph is built.
24953@item Support for singleton, transient, and scoped services.
24954@end itemize")
24955 (license license:expat)))
24956
24957;; XXX: The last time updated in 2015, consider to remove it when nothing is
24958;; depend on it.
24959(define-public python-snowballstemmer
24960 (package
24961 (name "python-snowballstemmer")
24962 (version "2.2.0")
24963 (source
24964 (origin
24965 (method url-fetch)
24966 (uri (pypi-uri "snowballstemmer" version))
24967 (sha256
24968 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24969 (build-system pyproject-build-system)
24970 (arguments
24971 (list
24972 #:tests? #f)) ; no tests
24973 (native-inputs
24974 (list python-setuptools))
24975 (home-page "https://github.com/shibukawa/snowball_py")
24976 (synopsis "Snowball stemming library collection for Python")
24977 (description
24978 "This package provides 16 word stemmer algorithms generated from Snowball
24979algorithms. It includes the 15 original ones plus the Poerter English
24980stemmer.")
24981 (license license:bsd-3)))
24982
24983(define-public python-setproctitle
24984 (package
24985 (name "python-setproctitle")
24986 (version "1.3.7")
24987 (source
24988 (origin
24989 (method git-fetch)
24990 (uri (git-reference
24991 (url "https://github.com/dvarrazzo/py-setproctitle")
24992 (commit (string-append "version-" version))))
24993 (file-name (git-file-name name version))
24994 (sha256
24995 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24996 (build-system pyproject-build-system)
24997 (arguments
24998 (list
24999 #:phases
25000 #~(modify-phases %standard-phases
25001 (add-before 'check 'configure-tests
25002 (lambda* (#:key tests? #:allow-other-keys)
25003 (when tests?
25004 (setenv "PYTHON"
25005 (or (which "python3")
25006 (which "python")))
25007 (setenv "PYCONFIG"
25008 (if (which "python3-config")
25009 "python3-config --embed"
25010 "python-config"))
25011 (substitute* "tests/conftest.py"
25012 (("cc") "gcc"))))))))
25013 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
25014 (home-page "https://github.com/dvarrazzo/py-setproctitle")
25015 (synopsis
25016 "Setproctitle implementation for Python to customize the process title")
25017 (description
25018 "The library allows a process to change its title (as displayed by system
25019tools such as @code{ps} and @code{top}).
25020
25021Changing the title is mostly useful in multi-process systems, for example when a
25022master process is forked: changing the children's title allows identifying the
25023task each process is busy with. The technique is used by PostgreSQL and the
25024OpenSSH Server for example.")
25025 (license license:bsd-3)))
25026
25027(define-public python-pyelftools
25028 (package
25029 (name "python-pyelftools")
25030 (version "0.32")
25031 (source
25032 (origin
25033 (method git-fetch)
25034 (uri (git-reference
25035 (url "https://github.com/eliben/pyelftools")
25036 (commit (string-append "v" version))))
25037 (file-name (git-file-name name version))
25038 (sha256
25039 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
25040 (snippet
25041 #~(begin
25042 ;; Delete bundled readelf and llvm-dwardump executables. Project
25043 ;; also ships quite a lot binary files mainly for tests, check
25044 ;; with:
25045 ;;
25046 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
25047 ;;
25048 (delete-file "test/external_tools/readelf")
25049 (delete-file "test/external_tools/llvm-dwarfdump")))))
25050 (build-system pyproject-build-system)
25051 (arguments
25052 (list
25053 #:phases
25054 #~(modify-phases %standard-phases
25055 (replace 'check
25056 (lambda* (#:key tests? #:allow-other-keys)
25057 (when tests?
25058 ;; Run just basic unit and example tests, dwarfdump and
25059 ;; readelf tests are not selected as they are fragile and
25060 ;; arch-specific.
25061 (invoke "python" "test/run_all_unittests.py")
25062 (invoke "python" "test/run_examples_test.py")))))))
25063 (home-page "https://github.com/eliben/pyelftools")
25064 (native-inputs
25065 (list python-setuptools
25066 python-wheel))
25067 (synopsis "Analyze binary and library file information")
25068 (description
25069 "This Python library provides interfaces for parsing and analyzing two
25070binary and library file formats ; the Executable and Linking Format (ELF), and
25071debugging information in the Debugging With Attributed Record
25072Format (DWARF).")
25073 (license license:public-domain)))
25074
25075(define-public python-pefile
25076 (package
25077 (name "python-pefile")
25078 (version "2024.8.26")
25079 (source
25080 (origin
25081 (method git-fetch)
25082 (uri (git-reference
25083 (url "https://github.com/erocarrera/pefile")
25084 (commit (string-append "v" version))))
25085 (file-name (git-file-name name version))
25086 (sha256
25087 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
25088 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
25089 (build-system pyproject-build-system)
25090 (arguments
25091 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
25092 ;; It seems clear however that test_data.tar.bz2.enc needs to be
25093 ;; decrypted and unpacked before we can run them.
25094 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
25095 (native-inputs (list python-pytest python-setuptools))
25096 (propagated-inputs (list python-future))
25097 (home-page "https://github.com/erocarrera/pefile")
25098 (synopsis "Portable Executable (PE) file parser")
25099 (description
25100 "This python library provides interfaces for parsing and working with
25101Portable Executable (PE) files. It makes to most information from the header,
25102as well as section details and data available.")
25103 (license license:expat)))
25104
25105(define-public python-pyemd
25106 (package
25107 (name "python-pyemd")
25108 (version "1.0.0")
25109 (source (origin
25110 (method url-fetch)
25111 (uri (pypi-uri "pyemd" version))
25112 (sha256
25113 (base32
25114 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
25115 (build-system pyproject-build-system)
25116 (native-inputs
25117 (list python-cython
25118 python-pytest
25119 python-setuptools
25120 python-setuptools-scm))
25121 (propagated-inputs
25122 (list python-numpy-1))
25123 (home-page "https://github.com/wmayner/pyemd")
25124 (synopsis
25125 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
25126 (description
25127 "This package provides a Python wrapper for Ofir Pele and Michael
25128Werman's implementation of the Earth Mover's Distance.")
25129 (license license:expat)))
25130
25131(define-public python-imagesize
25132 (package
25133 (name "python-imagesize")
25134 (version "2.0.0")
25135 (source
25136 (origin
25137 (method git-fetch)
25138 (uri (git-reference
25139 (url "https://github.com/shibukawa/imagesize_py")
25140 (commit version)))
25141 (file-name (git-file-name name version))
25142 (sha256
25143 (base32 "1r07r80d16hkwhnmz6sfvj8d4s3d6wg82j99dbr3iy78gc48wia0"))))
25144 (build-system pyproject-build-system)
25145 (arguments (list #:test-backend #~'unittest))
25146 (native-inputs
25147 (list python-setuptools))
25148 (home-page "https://github.com/shibukawa/imagesize_py")
25149 (synopsis "Gets image size of files in various formats in Python")
25150 (description
25151 "This package allows determination of image size from PNG, JPEG,
25152JPEG2000 and GIF files in pure Python.")
25153 (license license:expat)))
25154
25155(define-public python-argcomplete
25156 (package
25157 (name "python-argcomplete")
25158 (version "3.7.2")
25159 (source
25160 (origin
25161 (method url-fetch)
25162 (uri (pypi-uri "argcomplete" version))
25163 (sha256
25164 (base32
25165 "1ff6kwdkhn59w80bn30fn4bhgmf0ahipbldh5nvfsscr1fdbdn5a"))))
25166 (build-system pyproject-build-system)
25167 (arguments
25168 (list #:tests? #f)) ;XXX: tests requires tcsh, fish and full bash shells
25169 (native-inputs
25170 (list python-hatch-vcs
25171 python-hatchling
25172 python-pexpect))
25173 (home-page "https://github.com/kislyuk/argcomplete")
25174 (synopsis "Shell tab completion for Python argparse")
25175 (description "argcomplete provides extensible command line tab completion
25176of arguments and options for Python scripts using @code{argparse}. It's
25177particularly useful for programs with many options or sub-parsers that can
25178dynamically suggest completions ; for example, when browsing resources over
25179the network.")
25180 (license license:asl2.0)))
25181
25182(define-public python-csscompressor
25183 (package
25184 (name "python-csscompressor")
25185 (version "0.9.5")
25186 (source
25187 (origin
25188 (method git-fetch)
25189 (uri (git-reference
25190 (url "https://github.com/sprymix/csscompressor")
25191 (commit (string-append "v" version))))
25192 (file-name (git-file-name name version))
25193 (sha256
25194 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
25195 (build-system pyproject-build-system)
25196 (native-inputs (list python-pytest python-setuptools))
25197 (home-page "https://github.com/sprymix/csscompressor")
25198 (synopsis "Python port of YUI CSS Compressor")
25199 (description "This package provides a python port of YUI CSS Compressor.")
25200 (license license:bsd-3)))
25201
25202(define-public python-rcssmin
25203 (package
25204 (name "python-rcssmin")
25205 (version "1.2.0")
25206 (source
25207 (origin
25208 (method url-fetch)
25209 (uri (pypi-uri "rcssmin" version))
25210 (sha256
25211 (base32
25212 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
25213 (build-system pyproject-build-system)
25214 (native-inputs (list python-pytest python-setuptools python-wheel))
25215 (home-page "http://opensource.perlig.de/rcssmin/")
25216 (synopsis "CSS Minifier")
25217 (description "The minifier is based on the semantics of the YUI compressor,
25218 which itself is based on the rule list by Isaac Schlueter.")
25219 (license license:asl2.0)))
25220
25221(define-public python-rjsmin
25222 (package
25223 (name "python-rjsmin")
25224 (version "1.2.3")
25225 (source
25226 (origin
25227 (method url-fetch)
25228 (uri (pypi-uri "rjsmin" version))
25229 (sha256
25230 (base32
25231 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
25232 (modules '((guix build utils)))
25233 (snippet
25234 '(for-each delete-file (find-files "bench" "\\.js$")))))
25235 (build-system pyproject-build-system)
25236 (native-inputs
25237 (list python-pytest python-setuptools python-wheel))
25238 (home-page "http://opensource.perlig.de/rjsmin/")
25239 (synopsis "Javascript Minifier")
25240 (description "@code{rJSmin} is a javascript minifier written in Python.
25241The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
25242module is a re-implementation aiming for speed, so it can be used at
25243runtime (rather than during a preprocessing step).")
25244 (license license:asl2.0)))
25245
25246(define-public python-cheetah
25247 (package
25248 (name "python-cheetah")
25249 (version "3.3.1")
25250 (source
25251 (origin
25252 (method url-fetch)
25253 (uri (pypi-uri "CT3" version))
25254 (sha256
25255 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
25256 (build-system pyproject-build-system)
25257 (arguments
25258 (list
25259 #:test-backend #~'custom
25260 #:test-flags #~(list "Cheetah/Tests/Test.py")
25261 #:phases
25262 #~(modify-phases %standard-phases
25263 (add-after 'unpack 'use-absolute-python
25264 (lambda _
25265 (substitute* "Cheetah/CheetahWrapper.py"
25266 (("#!/usr/bin/env python")
25267 (string-append "#!" (which "python"))))))
25268 (add-before 'check 'configure-tests
25269 (lambda* (#:key tests? #:allow-other-keys)
25270 (substitute* "Cheetah/Tests/ImportHooks.py"
25271 (("os.path.dirname\\(__file__\\)")
25272 (string-append "'" (getcwd) "/Cheetah/Tests'")))
25273 (substitute* "Cheetah/Tests/Test.py"
25274 (("unittest.TextTestRunner\\(\\)")
25275 "unittest.TextTestRunner(verbosity=2)"))
25276 (setenv "TMPDIR" "/tmp"))))))
25277 (native-inputs (list python-setuptools))
25278 (propagated-inputs (list python-markdown)) ;optional
25279 (home-page "https://cheetahtemplate.org/")
25280 (synopsis "Template engine")
25281 (description
25282 "Cheetah is a text-based template engine and Python code generator.
25283
25284 Cheetah can be used as a standalone templating utility or referenced as a
25285library from other Python applications. It has many potential uses, but web
25286developers looking for a viable alternative to ASP, JSP, PHP and PSP are
25287expected to be its principle user group.
25288
25289Features:
25290@enumerate
25291@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
25292other text-based format.
25293@item Cleanly separates content, graphic design, and program code.
25294@item Blends the power and flexibility of Python with a simple template
25295language that non-programmers can understand.
25296@item Gives template writers full access to any Python data structure, module,
25297function, object, or method in their templates.
25298@item Makes code reuse easy by providing an object-orientated interface to
25299templates that is accessible from Python code or other Cheetah templates. One
25300template can subclass another and selectively reimplement sections of it.
25301@item Provides a simple, yet powerful, caching mechanism that can dramatically
25302improve the performance of a dynamic website.
25303@item Compiles templates into optimized, yet readable, Python code.
25304@end enumerate")
25305 (license (license:x11-style "file://LICENSE"))))
25306
25307(define-public python-chevron
25308 (package
25309 (name "python-chevron")
25310 (version "0.14.0")
25311 (source (origin
25312 (method url-fetch)
25313 (uri (pypi-uri "chevron" version))
25314 (sha256
25315 (base32
25316 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
25317 (build-system pyproject-build-system)
25318 (arguments (list #:tests? #false)) ;there are none
25319 (native-inputs (list python-setuptools python-wheel))
25320 (home-page "https://github.com/noahmorrison/chevron")
25321 (synopsis "Mustache templating language renderer")
25322 (description "This package provides a Python implementation of the
25323Mustache templating language renderer.")
25324 (license license:expat)))
25325
25326(define-public python-dulwich
25327 (package
25328 (name "python-dulwich")
25329 (version "1.2.12")
25330 (source
25331 (origin
25332 (method git-fetch)
25333 (uri (git-reference
25334 (url "https://github.com/jelmer/dulwich")
25335 (commit (string-append "dulwich-" version))))
25336 (file-name (git-file-name name version))
25337 (sha256
25338 (base32 "0in5pgqhnnbfqi5alcg85kiaxr8zww9iih7qsyy9g1yzlaxs0dvd"))))
25339 (build-system pyproject-build-system)
25340 (arguments
25341 (list
25342 ;; tests: 3796 passed, 89 skipped, 1 xfailed, 8 warnings, 33 subtests
25343 ;; passed
25344 #:test-flags
25345 ;; Exclude fuzzing from discovery, depends on python-atheris.
25346 #~(list "tests")
25347 #:phases
25348 #~(modify-phases %standard-phases
25349 (add-after 'unpack 'fix-tests
25350 (lambda* (#:key inputs #:allow-other-keys)
25351 (substitute* '("tests/test_hooks.py"
25352 "tests/porcelain/test_filters.py"
25353 "tests/test_repository.py"
25354 "tests/test_worktree.py")
25355 (("/bin/sh")
25356 (search-input-file inputs "/bin/sh")))))
25357 (add-before 'check 'pre-check
25358 (lambda _
25359 (setenv "PYTHONHASHSEED" "random")
25360 (setenv "TMPDIR" "/tmp"))))))
25361 (native-inputs
25362 (list git-minimal/pinned
25363 openssh-sans-x
25364 ;; python-atheris ;not packaged yet in Guix
25365 python-gevent
25366 python-geventhttpclient
25367 python-pytest
25368 python-setuptools
25369 python-setuptools-rust))
25370 (propagated-inputs
25371 (list python-urllib3
25372 ;; [optional]
25373 gnupg
25374 gpgme
25375 python-aiohttp
25376 python-fastimport
25377 python-merge3
25378 python-munkres
25379 python-paramiko
25380 python-patiencediff
25381 python-rich))
25382 (home-page "https://www.dulwich.io/")
25383 (synopsis "Git implementation in Python")
25384 (description "Dulwich is an implementation of the Git file formats and
25385protocols written in pure Python.")
25386 ;; Can be used with either license.
25387 (license (list license:asl2.0 license:gpl2+))))
25388
25389(define-public python-dunamai
25390 (package
25391 (name "python-dunamai")
25392 (version "1.26.0")
25393 (source
25394 (origin
25395 (method url-fetch)
25396 (uri (pypi-uri "dunamai" version))
25397 (sha256
25398 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
25399 (build-system pyproject-build-system)
25400 (arguments
25401 (list
25402 #:test-flags
25403 #~(list "-k" "not test__version__from_git__shallow")
25404 #:phases
25405 #~(modify-phases %standard-phases
25406 ;; These steps are taken from NixOS package definition:
25407 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
25408 (add-before 'check 'pre-check
25409 (lambda _
25410 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
25411 (setenv "HOME" "/tmp")
25412 (invoke "git" "config" "--global" "user.email" "[email protected]")
25413 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
25414 (propagated-inputs
25415 (list python-packaging))
25416 (native-inputs
25417 (list git-minimal/pinned
25418 python-poetry-core
25419 python-pytest))
25420 (home-page "https://github.com/mtkennerly/dunamai")
25421 (synopsis "Dynamic version generation")
25422 (description
25423 "Dunamai is Python library and command line tool for producing dynamic,
25424standards-compliant version strings, derived from tags in your version control
25425system. This facilitates uniquely identifying nightly or per-commit builds in
25426continuous integration and releasing new versions of your software simply by
25427creating a tag.")
25428 (license license:expat)))
25429
25430(define-public python-pbkdf2
25431 (package
25432 (name "python-pbkdf2")
25433 (version "1.3")
25434 (source
25435 (origin
25436 (method url-fetch)
25437 (uri (pypi-uri "pbkdf2" version))
25438 (sha256
25439 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25440 (build-system pyproject-build-system)
25441 (arguments
25442 (list
25443 #:test-backend #~'custom
25444 #:test-flags #~(list "test/test_pbkdf2.py")))
25445 (native-inputs (list python-setuptools))
25446 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25447 (synopsis "Password-based key derivation")
25448 (description
25449 "This module implements the password-based key derivation function,
25450PBKDF2, specified in RSA PKCS#5 v2.0.
25451
25452PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25453is part of the RSA Public Key Cryptography Standards series. The provided
25454implementation takes a password or a passphrase and a salt value (and
25455optionally a iteration count, a digest module, and a MAC module) and provides
25456a file-like object from which an arbitrarily-sized key can be read.")
25457 (license license:expat)))
25458
25459(define-public python-qrcode
25460 (package
25461 (name "python-qrcode")
25462 (version "8.2")
25463 (source
25464 (origin
25465 (method url-fetch)
25466 (uri (pypi-uri "qrcode" version))
25467 (sha256
25468 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25469 (build-system pyproject-build-system)
25470 (native-inputs
25471 (list python-poetry-core
25472 python-pytest))
25473 (home-page "https://github.com/lincolnloop/python-qrcode")
25474 (synopsis "QR Code image generator")
25475 (description
25476 "This package provides a pure Python QR Code generator module. It uses
25477the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25478
25479In addition this package provides a command line tool to generate QR codes and
25480either write these QR codes to a file or do the output as ascii art at the
25481console.")
25482 (license license:bsd-3)))
25483
25484(define-public python-rst2ansi
25485 (package
25486 (name "python-rst2ansi")
25487 (properties '((commit . "3728e16f8b8b1dc338e5df90ba2c4a93ee054b3f")
25488 (revision . "1")))
25489 (version (git-version "0.1.5"
25490 (assoc-ref properties 'revision)
25491 (assoc-ref properties 'commit)))
25492 (source
25493 (origin
25494 (method git-fetch)
25495 (uri (git-reference
25496 (url "https://github.com/Snaipe/python-rst-to-ansi")
25497 (commit (assoc-ref properties 'commit))))
25498 (file-name (git-file-name name version))
25499 (sha256
25500 (base32 "0q8afblqhkrnzxla81ialifcwkh9ga5xzxzi0lhg2gjwhbynbfsp"))))
25501 (build-system pyproject-build-system)
25502 (arguments
25503 (list
25504 #:tests? #f ; 2 tests fail with additional line characters
25505 #:phases
25506 #~(modify-phases %standard-phases
25507 (replace 'check
25508 (lambda* (#:key tests? #:allow-other-keys)
25509 (when tests?
25510 (invoke "cram" "test" "-v")))))))
25511 (native-inputs (list python-cram python-setuptools))
25512 (propagated-inputs (list python-docutils))
25513 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25514 (synopsis "Convert RST to ANSI-decorated console output")
25515 (description
25516 "Python module dedicated to rendering RST (reStructuredText) documents to
25517ansi-escaped strings suitable for display in a terminal.")
25518 (license license:expat)))
25519
25520(define-public python-ansi2html
25521 (package
25522 (name "python-ansi2html")
25523 (version "1.9.2")
25524 (source
25525 (origin
25526 (method url-fetch)
25527 (uri (pypi-uri "ansi2html" version))
25528 (sha256
25529 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25530 (build-system pyproject-build-system)
25531 (native-inputs
25532 (list python-mock
25533 python-pytest
25534 python-setuptools
25535 python-wheel))
25536 (home-page "https://github.com/ralphbean/ansi2html")
25537 (synopsis "Convert ANSI-decorated console output to HTML")
25538 (description
25539 "@command{ansi2html} is a Python library and command line utility for
25540converting text with ANSI color codes to HTML or LaTeX.")
25541 (license license:gpl3+)))
25542
25543(define-public python-easy-ansi
25544 (package
25545 (name "python-easy-ansi")
25546 (version "2.1")
25547 (source
25548 (origin
25549 (method git-fetch)
25550 (uri (git-reference
25551 (url "https://gitlab.com/joeysbytes/easy-ansi")
25552 (commit (string-append "v" version))))
25553 (file-name (git-file-name name version))
25554 (sha256
25555 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25556 (build-system pyproject-build-system)
25557 (arguments
25558 (list
25559 #:phases
25560 #~(modify-phases %standard-phases
25561 (add-after 'install 'remove-extra
25562 (lambda* (#:key inputs outputs #:allow-other-keys)
25563 (with-directory-excursion (site-packages inputs outputs)
25564 (delete-file-recursively "tests")
25565 (delete-file "setup.py")))))))
25566 (native-inputs (list python-pytest python-setuptools))
25567 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25568 (synopsis "Terminal framework API")
25569 (description
25570 "Easy ANSI is a terminal framework API to give you an easy way to use
25571colors, cursor control movements, and line/box drawing. It is not meant as a
25572replacement to more full-featured frameworks (such as curses or urwid), but as
25573a tool to quickly create nice-looking screens in your terminal window. You
25574can even create animations with the cursor controls.")
25575 (license license:expat)))
25576
25577(define-public python-easy-ansi-0.3
25578 (package
25579 (inherit python-easy-ansi)
25580 (name "python-easy-ansi")
25581 (version "0.3")
25582 (source
25583 (origin
25584 (method git-fetch)
25585 (uri (git-reference
25586 (url "https://gitlab.com/joeysbytes/easy-ansi")
25587 (commit (string-append "v" version))))
25588 (file-name (git-file-name name version))
25589 (sha256
25590 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25591 (arguments '())))
25592
25593(define-public python-pycosat
25594 (package
25595 (name "python-pycosat")
25596 (version "0.6.6")
25597 (source
25598 (origin
25599 (method git-fetch)
25600 (uri (git-reference
25601 (url "https://github.com/ContinuumIO/pycosat")
25602 (commit version)))
25603 (file-name (git-file-name name version))
25604 (sha256
25605 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25606 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25607 (build-system pyproject-build-system)
25608 (arguments (list #:test-backend #~'unittest))
25609 (native-inputs (list unzip python-setuptools))
25610 (home-page "https://github.com/ContinuumIO/pycosat")
25611 (synopsis "Bindings to picosat (a SAT solver)")
25612 (description
25613 "This package provides efficient Python bindings to @code{picosat} on the
25614C level. When importing pycosat, the @code{picosat} solver becomes part of
25615the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25616Problem} (SAT) solver.")
25617 (license license:expat)))
25618
25619(define-public python-pypeg2
25620 (package
25621 (name "python-pypeg2")
25622 (version "2.15.2")
25623 (source
25624 (origin
25625 (method url-fetch)
25626 (uri (pypi-uri "pyPEG2" version))
25627 (sha256
25628 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25629 (build-system pyproject-build-system)
25630 (native-inputs (list python-pytest python-setuptools))
25631 (propagated-inputs (list python-lxml))
25632 (home-page "https://fdik.org/pyPEG/")
25633 (synopsis "Parsing Expression Grammars in Python")
25634 (description
25635 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25636based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25637formal languages.")
25638 (license license:gpl2)))
25639
25640(define-public python-pyformlang
25641 (package
25642 (name "python-pyformlang")
25643 (version "1.0.10")
25644 (source
25645 (origin
25646 (method url-fetch)
25647 (uri (pypi-uri "pyformlang" version))
25648 (sha256
25649 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25650 (build-system pyproject-build-system)
25651 (native-inputs
25652 (list python-pytest
25653 python-setuptools
25654 python-wheel))
25655 (propagated-inputs
25656 (list python-networkx
25657 python-numpy
25658 python-pydot))
25659 (home-page "https://github.com/Aunsiels/pyformlang")
25660 (synopsis "Framework for interacting with formal grammars")
25661 (description
25662 "This package provides a framework for working with formal
25663language grammars. The library was originally developed for educational
25664purposes and therefore implements many textbook algorithms regarding the
25665manipulation and interaction with formal grammars.")
25666 (license license:expat)))
25667
25668(define-public python-incremental
25669 (package
25670 (name "python-incremental")
25671 (version "24.7.2")
25672 (source
25673 (origin
25674 (method url-fetch)
25675 (uri (pypi-uri "incremental" version))
25676 (sha256
25677 (base32
25678 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25679 (build-system pyproject-build-system)
25680 (arguments
25681 ;; Tests require twisted, which needs this package.
25682 (list #:tests? #false
25683 #:build-backend "setuptools.build_meta"))
25684 (native-inputs
25685 (list python-setuptools))
25686 (home-page "https://github.com/hawkowl/incremental")
25687 (synopsis "Library for versioning Python projects")
25688 (description "Incremental is a small library that versions your Python
25689 projects.")
25690 (license license:expat)))
25691
25692(define-public python-invoke
25693 (package
25694 (name "python-invoke")
25695 (version "2.2.1")
25696 (source
25697 (origin
25698 (method url-fetch)
25699 (uri (pypi-uri "invoke" version))
25700 (sha256
25701 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25702 ;; TODO: invoke/vendor contains:
25703 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25704 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25705 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25706 (build-system pyproject-build-system)
25707 (arguments
25708 (list
25709 ;; XXX: Requires many dependencies that are not yet in Guix.
25710 #:tests? #f
25711 #:phases
25712 #~(modify-phases %standard-phases
25713 (add-after 'unpack 'fix-bash-path
25714 (lambda _
25715 (let ((bash #$(this-package-input "bash-minimal")))
25716 (substitute* "invoke/config.py"
25717 (("shell = \"/bin/bash\"")
25718 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25719 (native-inputs
25720 (list python-setuptools
25721 python-wheel))
25722 (inputs
25723 (list bash-minimal))
25724 (home-page "https://www.pyinvoke.org/")
25725 (synopsis "Pythonic task execution")
25726 (description
25727 "Invoke is a Python task execution tool and library, drawing inspiration
25728from various sources to arrive at a powerful and clean feature set. It is
25729evolved from the Fabric project, but focuses on local and abstract concerns
25730instead of servers and network commands.")
25731 (license license:bsd-3)))
25732
25733(define-public python-automat
25734 (package
25735 (name "python-automat")
25736 (version "24.8.1")
25737 (source (origin
25738 (method url-fetch)
25739 (uri (pypi-uri "Automat" version))
25740 (sha256
25741 (base32
25742 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25743 (build-system pyproject-build-system)
25744 (arguments
25745 (list
25746 #:phases
25747 #~(modify-phases %standard-phases
25748 (replace 'check
25749 (lambda* (#:key tests? test-flags #:allow-other-keys)
25750 (with-directory-excursion #$output
25751 (apply invoke "pytest" "-vv" test-flags))))
25752 ;; Remove script, because it depends on python-twisted.
25753 (add-after 'unpack 'remove-entrypoint
25754 (lambda _
25755 (substitute* "pyproject.toml"
25756 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25757 (native-inputs
25758 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25759 (propagated-inputs
25760 (list python-graphviz python-typing-extensions))
25761 (home-page "https://github.com/glyph/Automat")
25762 (synopsis "Self-service finite-state machines")
25763 (description "Automat is a library for concise, idiomatic Python
25764 expression of finite-state automata (particularly deterministic finite-state
25765 transducers).")
25766 (license license:expat)))
25767
25768(define-public python-constantly
25769 (package
25770 (name "python-constantly")
25771 (version "23.10.4")
25772 (source
25773 (origin
25774 (method url-fetch)
25775 (uri (pypi-uri "constantly" version))
25776 (sha256
25777 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25778 (build-system pyproject-build-system)
25779 (arguments
25780 (list #:tests? #f)) ;cycles with python-twisted
25781 (native-inputs
25782 (list python-setuptools
25783 python-versioneer))
25784 (home-page "https://github.com/twisted/constantly")
25785 (synopsis "Symbolic constants in Python")
25786 (description "Constantly is a Python library that provides symbolic
25787 constant support. It includes collections and constants with text, numeric,
25788 and bit flag values.")
25789 (license license:expat)))
25790
25791(define-public python-attrs
25792 (package
25793 (name "python-attrs")
25794 (version "26.1.0")
25795 (source
25796 (origin
25797 (method git-fetch)
25798 (uri (git-reference
25799 (url "https://github.com/python-attrs/attrs/")
25800 (commit version)))
25801 (file-name (git-file-name name version))
25802 (sha256
25803 (base32 "17gagrqbg4fg7prpsqx746frfzcml13lnzqjjsah0jqc5qxd8yaf"))))
25804 (build-system pyproject-build-system)
25805 (native-inputs
25806 (list python-hatch-fancy-pypi-readme
25807 python-hatch-vcs
25808 python-hatchling
25809 python-hypothesis
25810 python-pytest))
25811 (home-page "https://github.com/python-attrs/attrs/")
25812 (synopsis "Attributes without boilerplate")
25813 (description "@code{attrs} is a Python package with class decorators that
25814 ease the chores of implementing the most common attribute-related object
25815 protocols.")
25816 (license license:expat)))
25817
25818(define-public python-attrs-bootstrap
25819 (package
25820 (inherit python-attrs)
25821 (name "python-attrs-bootstrap")
25822 (native-inputs (list python-hatchling
25823 python-hatch-fancy-pypi-readme
25824 python-hatch-vcs))
25825 (arguments `(#:tests? #f))))
25826
25827(define-public python-astroid
25828 (package
25829 (name "python-astroid")
25830 (version "4.0.4")
25831 (source
25832 (origin
25833 (method git-fetch)
25834 (uri (git-reference
25835 (url "https://github.com/PyCQA/astroid")
25836 (commit (string-append "v" version))))
25837 (file-name (git-file-name name version))
25838 (sha256
25839 (base32 "0dfvih7drm22dvppjangaxlmrq21wazfyglhm3n32rgh6g6m6qms"))))
25840 (build-system pyproject-build-system)
25841 (native-inputs
25842 (list python-mypy-minimal
25843 python-pytest
25844 python-setuptools))
25845 (home-page "https://github.com/PyCQA/astroid")
25846 (synopsis "Python source code base representation")
25847 (description "@code{python-astroid} provides a common base representation
25848of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25849It provides a compatible representation which comes from the _ast module. It
25850rebuilds the tree generated by the builtin _ast module by recursively walking
25851down the AST and building an extended ast. The new node classes have
25852additional methods and attributes for different usages. They include some
25853support for static inference and local name scopes. Furthermore, astroid
25854builds partial trees by inspecting living objects.")
25855 (license license:lgpl2.1+)))
25856
25857(define-public python-isbnlib
25858 (package
25859 (name "python-isbnlib")
25860 (version "3.10.14")
25861 (source
25862 (origin
25863 (method git-fetch)
25864 (uri (git-reference
25865 (url "https://github.com/xlcnd/isbnlib")
25866 (commit (string-append "v" version))))
25867 (file-name (git-file-name name version))
25868 (sha256
25869 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25870 (build-system pyproject-build-system)
25871 (arguments
25872 (list
25873 #:test-flags #~(list "-m" "not network")))
25874 (native-inputs (list python-pytest python-setuptools))
25875 (home-page "https://github.com/xlcnd/isbnlib")
25876 (synopsis "Python library to work with ISBN strings")
25877 (description
25878 "@code{python-isbnlib} is a (pure) python library that provides several
25879useful methods and functions to validate, clean, transform, hyphenate and get
25880metadata for ISBN strings. Its origin was as the core of isbntools. This
25881short version, is suitable to be include as a dependency in other projects.")
25882 (license license:lgpl3+)))
25883
25884(define-public python-isoduration
25885 ;; XXX: The project might be abandoned, consider to remove when nothing
25886 ;; depends on it.
25887 (package
25888 (name "python-isoduration")
25889 (version "20.11.0")
25890 (source
25891 (origin
25892 (method git-fetch)
25893 (uri (git-reference
25894 (url "https://github.com/bolsote/isoduration")
25895 (commit version)))
25896 (file-name (git-file-name name version))
25897 (sha256
25898 (base32 "1naml13qa1inr6k0j25jgw49r3wnkvwq5xc0v4navz6mxlgsrfp8"))))
25899 (build-system pyproject-build-system)
25900 (arguments
25901 (list
25902 ;; E ModuleNotFoundError: No module named 'isodate'
25903 #:test-flags #~(list "--ignore=tests/test_benchmark.py")))
25904 (native-inputs
25905 (list python-pytest
25906 python-setuptools))
25907 (propagated-inputs
25908 (list python-arrow))
25909 (home-page "https://github.com/bolsote/isoduration")
25910 (synopsis "Operations with ISO 8601 durations")
25911 (description "ISO 8601 is most commonly known as a way to exchange
25912datetimes in textual format. A lesser known aspect of the standard is the
25913representation of durations. The state of the art of ISO 8601 duration
25914handling in Python is more or less limited to what's offered by isodate. This
25915package attempts to address the shortcomings of @code{isodate}.")
25916 (license license:isc)))
25917
25918(define-public python-isort
25919 (package
25920 (name "python-isort")
25921 (version "9.0.1")
25922 (source
25923 (origin
25924 (method git-fetch) ;no tests in PyPI archive
25925 (uri (git-reference
25926 (url "https://github.com/PyCQA/isort")
25927 (commit version)))
25928 (file-name (git-file-name name version))
25929 (modules '((guix build utils)))
25930 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25931 (sha256
25932 (base32 "0xrhrk245v7wqrh6ql1ysnfb1v6sh0mrzbvyaxq36hddvxdx7f45"))))
25933 (build-system pyproject-build-system)
25934 (arguments
25935 (list
25936 #:test-flags
25937 ;; Ignore benchmark and integration to reduce closure size.
25938 #~(list "--ignore=tests/benchmark/"
25939 "--ignore=tests/integration/"
25940 "--ignore=tests/unit/profiles/test_black.py"
25941 "-k" (string-join
25942 (list "not test_gitignore"
25943 "test_isort_supports_shared_profiles_issue_970"
25944 "test_requirements_dir"
25945 "test_requirements_finder"
25946 "test_sort_configurable_sort_issue_1732"
25947 "test_sort_imports_error_handling")
25948 " and not "))))
25949 ;; TODO: Package example plugins separately, available in PyPI:
25950 ;; - example_isort_formatting_plugin
25951 ;; - example_isort_sorting_plugin
25952 ;; - example_shared_isort_profile
25953 (native-inputs
25954 (list python-black
25955 python-colorama
25956 python-hatch-vcs
25957 python-hatchling
25958 python-hypothesis
25959 python-pylama
25960 python-pytest))
25961 (propagated-inputs
25962 ;; XXX: python-mypy-extensions can be dropped when
25963 ;; https://github.com/PyCQA/isort/issues/2629 is fixed.
25964 (list python-mypy-extensions))
25965 (home-page "https://github.com/PyCQA/isort")
25966 (synopsis "Python utility/library to sort python imports")
25967 (description
25968 "@code{python-isort} is a python utility/library to sort imports
25969alphabetically, and automatically separated into sections. It provides a
25970command line utility, a python library and plugins for various editors.")
25971 (license license:expat)))
25972
25973(define-public python-configparser
25974 (package
25975 (name "python-configparser")
25976 (version "7.2.0")
25977 (source
25978 (origin
25979 (method url-fetch)
25980 (uri (pypi-uri "configparser" version))
25981 (sha256
25982 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25983 (build-system pyproject-build-system)
25984 (native-inputs
25985 (list python-pytest
25986 python-setuptools
25987 python-setuptools-scm
25988 python-wheel))
25989 (home-page "https://github.com/jaraco/configparser/")
25990 (synopsis "Backport of configparser from python 3.5")
25991 (description "@code{python-configparser} is a backport of
25992 @code{configparser} from Python 3.5 so that it can be used directly
25993 in other versions.")
25994 (license license:expat)))
25995
25996(define-public python-mando
25997 (package
25998 (name "python-mando")
25999 (version "0.8.2")
26000 (source
26001 (origin
26002 (method url-fetch)
26003 (uri (pypi-uri "mando" version))
26004 (sha256
26005 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
26006 (build-system pyproject-build-system)
26007 (native-inputs
26008 (list python-pytest python-setuptools))
26009 (home-page "https://mando.readthedocs.org/")
26010 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
26011 (description
26012 "This package is a wrapper around argparse, allowing you to write complete CLI
26013applications in seconds while maintaining all the flexibility.")
26014 (license license:expat)))
26015
26016(define-public python-mwclient
26017 (package
26018 (name "python-mwclient")
26019 (version "0.11.0")
26020 (source
26021 (origin
26022 (method git-fetch)
26023 (uri (git-reference
26024 (url "https://github.com/mwclient/mwclient")
26025 (commit (string-append "v" version))))
26026 (file-name (git-file-name name version))
26027 (sha256
26028 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
26029 (build-system pyproject-build-system)
26030 (propagated-inputs
26031 (list python-requests-oauthlib))
26032 (native-inputs
26033 (list python-mock
26034 python-pytest
26035 python-responses
26036 python-setuptools))
26037 (home-page "https://github.com/btongminh/mwclient")
26038 (synopsis "MediaWiki API client")
26039 (description "This package provides a MediaWiki API client.")
26040 (license license:expat)))
26041
26042(define-public python-kneed
26043 (package
26044 (name "python-kneed")
26045 (version "0.8.5")
26046 (source
26047 (origin
26048 (method git-fetch)
26049 (uri (git-reference
26050 (url "https://github.com/arvkevi/kneed")
26051 (commit (string-append "v" version))))
26052 (file-name (git-file-name name version))
26053 (sha256
26054 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
26055 (build-system pyproject-build-system)
26056 (arguments
26057 (list
26058 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
26059 (native-inputs (list python-hatchling python-pytest))
26060 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
26061 (home-page "https://github.com/arvkevi/kneed")
26062 (synopsis "Knee-point detection in Python")
26063 (description
26064 "This package implements the kneedle algorithm. Given a set of x and y
26065values, kneed will return the knee point of the function. The knee point is
26066the point of maximum curvature.")
26067 (license license:bsd-3)))
26068
26069(define-public python-diff-cover
26070 (package
26071 (name "python-diff-cover")
26072 (version "9.7.1")
26073 (source
26074 (origin
26075 (method url-fetch)
26076 (uri (pypi-uri "diff_cover" version))
26077 (sha256
26078 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
26079 (build-system pyproject-build-system)
26080 (arguments
26081 (list
26082 #:test-flags
26083 ;; Dropp check of flake8 in tests.
26084 #~(list "-k" "not test_file_does_not_exist")))
26085 (native-inputs
26086 (list python-pycodestyle
26087 python-poetry-core
26088 python-pyflakes
26089 python-pylint
26090 python-pytest
26091 python-pytest-datadir
26092 python-pytest-mock))
26093 (propagated-inputs
26094 (list python-chardet
26095 python-jinja2
26096 python-pluggy
26097 python-pygments
26098 python-setuptools ; For pkg_resources.
26099 python-tomli))
26100 (home-page "https://github.com/Bachmann1234/diff_cover")
26101 (synopsis "Run coverage and linting reports on diffs")
26102 (description
26103 "Automatically find diff lines that need test coverage. It also finds
26104diff lines that have violations (according to tools such as pycodestyle,
26105pyflakes, flake8, or pylint). This is used as a code quality metric during
26106code reviews.")
26107 (license license:asl2.0)))
26108
26109(define-public python-diff-match-patch
26110 (package
26111 (name "python-diff-match-patch")
26112 (version "20241021")
26113 (source
26114 (origin
26115 (method url-fetch)
26116 (uri (pypi-uri "diff_match_patch" version))
26117 (sha256
26118 (base32
26119 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
26120 (build-system pyproject-build-system)
26121 (native-inputs (list python-flit-core python-pytest))
26122 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
26123 (synopsis "Synchronize plain text")
26124 (description "Diff Match and Patch libraries offer robust algorithms to
26125 perform the operations required for synchronizing plain text.")
26126 (license license:asl2.0)))
26127
26128(define-public python-icdiff
26129 (package
26130 (name "python-icdiff")
26131 (version "2.0.7")
26132 (source (origin
26133 (method git-fetch)
26134 (uri (git-reference
26135 (url "https://github.com/jeffkaufman/icdiff")
26136 (commit (string-append "release-" version))))
26137 (file-name (git-file-name name version))
26138 (sha256
26139 (base32
26140 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
26141 (build-system pyproject-build-system)
26142 (arguments
26143 (list #:tests? #f)) ; there are no test scripts
26144 (native-inputs (list python-setuptools python-wheel))
26145 (home-page "https://www.jefftk.com/icdiff")
26146 (synopsis "Improved colored diff")
26147 (description "This package provides colored diff functions that highlight
26148parts of the lines that were modified.")
26149 (license license:psfl)))
26150
26151(define-public python-dirsync
26152 (package
26153 (name "python-dirsync")
26154 (version "2.2.6")
26155 (source
26156 (origin
26157 (method url-fetch)
26158 (uri (pypi-uri "dirsync" version))
26159 (sha256
26160 (base32
26161 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
26162 (build-system pyproject-build-system)
26163 (arguments
26164 ;; No tests in PyPI release and GitHub repository does not have the
26165 ;; latest release tag.
26166 (list #:tests? #f))
26167 (native-inputs (list python-setuptools python-wheel))
26168 (home-page "https://github.com/tkhyn/dirsync")
26169 (synopsis "Advanced directory tree synchronisation tool")
26170 (description
26171 "Dirsync is an advanced directory tree synchronisation tool.")
26172 (license license:expat)))
26173
26174(define-public python-levenshtein
26175 (package
26176 (name "python-levenshtein")
26177 ;; 0.27.3 (2025-11-01), the latest changes provide compatibility with
26178 ;; Cython 3.2.x, see: <https://github.com/rapidfuzz/Levenshtein/pull/84>.
26179 (properties '((commit . "7c905d9f4e788a95f5f1696517e6ff06d639943f")
26180 (revision . "0")))
26181 (version (git-version "0.27.3"
26182 (assoc-ref properties 'revision)
26183 (assoc-ref properties 'commit)))
26184 (source
26185 (origin
26186 (method git-fetch)
26187 (uri (git-reference
26188 (url "https://github.com/rapidfuzz/Levenshtein")
26189 (commit (assoc-ref properties 'commit))))
26190 (file-name (git-file-name name version))
26191 (sha256
26192 (base32 "14jdpxyc28bqjv3rmj4a5nrg0p6v6hazqilh1hdwjrd71hlxa6s3"))))
26193 (build-system pyproject-build-system)
26194 (propagated-inputs (list python-rapidfuzz))
26195 (native-inputs
26196 (list python-cython
26197 python-pytest
26198 python-scikit-build-core
26199 rapidfuzz-cpp))
26200 (home-page "https://github.com/rapidfuzz/Levenshtein")
26201 (synopsis "Fast computation of Levenshtein distance and string similarity")
26202 (description
26203 "The Levenshtein Python C extension module contains functions for fast computation of
26204@enumerate
26205@item Levenshtein (edit) distance, and edit operations
26206@item string similarity
26207@item approximate median strings, and generally string averaging
26208@item string sequence and set similarity
26209@end enumerate
26210It supports both normal and Unicode strings.")
26211 (license license:gpl2+)))
26212
26213(define-public python-factory-boy
26214 (package
26215 (name "python-factory-boy")
26216 (version "3.3.3")
26217 (source
26218 (origin
26219 (method url-fetch)
26220 (uri (pypi-uri "factory_boy" version))
26221 (sha256
26222 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
26223 (build-system pyproject-build-system)
26224 (arguments
26225 ;; Tests are not included in the tarball.
26226 `(#:tests? #f))
26227 (native-inputs (list python-setuptools))
26228 (propagated-inputs (list python-faker))
26229 (home-page "https://github.com/FactoryBoy/factory_boy")
26230 (synopsis "Versatile test fixtures replacement")
26231 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
26232factory_girl. As a fixtures replacement tool, it aims to replace static, hard
26233to maintain fixtures with easy-to-use factories for complex object. Instead
26234of building an exhaustive test setup with every possible combination of corner
26235cases, factory_boy allows you to use objects customized for the current test,
26236while only declaring the test-specific fields.")
26237 (license license:expat)))
26238
26239(define-public python-gtts
26240 (package
26241 (name "python-gtts")
26242 (version "2.5.4")
26243 (source
26244 (origin
26245 (method git-fetch)
26246 (uri (git-reference
26247 (url "https://github.com/pndurette/gTTS")
26248 (commit (string-append "v" version))))
26249 (file-name (git-file-name name version))
26250 (sha256
26251 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
26252 (build-system pyproject-build-system)
26253 (arguments
26254 ;; Disable tests that require internet.
26255 (list #:test-flags '(list "-k" "not net")))
26256 (native-inputs
26257 (list python-pytest python-setuptools python-testfixtures))
26258 (propagated-inputs
26259 (list python-click-8.1 python-requests))
26260 (home-page "https://github.com/pndurette/gTTS")
26261 (synopsis "Google Translate text-to-speech interface")
26262 (description
26263 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
26264interface with the Google Translate text-to-speech API. It lets you write
26265spoken MP3 data to a file, a file-like object (bytestring) for further audio
26266manipulation, or @code{stdout}.")
26267 (license license:expat)))
26268
26269(define-public python-packaging-legacy
26270 (package
26271 (name "python-packaging-legacy")
26272 (version "23.0.post0")
26273 (source
26274 (origin
26275 (method url-fetch)
26276 (uri (pypi-uri "packaging_legacy" version))
26277 (sha256
26278 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
26279 (build-system pyproject-build-system)
26280 (propagated-inputs (list python-packaging))
26281 (native-inputs
26282 (list python-pretend
26283 python-pytest
26284 python-setuptools
26285 python-wheel))
26286 (home-page "https://pypi.org/project/packaging-legacy/")
26287 (synopsis "Core utilities for legacy Python packages")
26288 (description "This library provides support for legacy Python Packaging
26289functionality removed from @code{packaging}.")
26290 (license license:asl2.0)))
26291
26292(define-public python-relatorio
26293 (package
26294 (name "python-relatorio")
26295 (version "0.11.1")
26296 (source
26297 (origin
26298 (method url-fetch)
26299 (uri (pypi-uri "relatorio" version))
26300 (sha256
26301 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
26302 (build-system pyproject-build-system)
26303 (native-inputs
26304 (list python-pytest
26305 python-setuptools))
26306 (propagated-inputs
26307 (list python-genshi
26308 python-lxml
26309 python-magic))
26310 (home-page "https://relatorio.tryton.org/")
26311 (synopsis "Templating library able to output ODT and PDF files")
26312 (description
26313 "Relatorio is a templating library which provides a way to easily output
26314ODT, ODS, PNG, SVG and several other kinds of files. Support for more
26315filetypes can be easily added by creating plugins for them.")
26316 (license license:gpl3+)))
26317
26318(define-public python-radon
26319 (package
26320 (name "python-radon")
26321 (version "6.0.1")
26322 (source
26323 (origin
26324 (method git-fetch)
26325 (uri (git-reference
26326 (url "https://github.com/rubik/radon")
26327 (commit (string-append "v" version))))
26328 (file-name (git-file-name name version))
26329 (sha256
26330 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
26331 (build-system pyproject-build-system)
26332 (arguments
26333 (list
26334 #:phases
26335 #~(modify-phases %standard-phases
26336 (add-after 'unpack 'relax-requirements
26337 (lambda _
26338 (substitute* (list "pyproject.toml" "requirements.txt")
26339 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
26340 mando-lower-bound)))))))
26341 (propagated-inputs (list python-colorama python-mando))
26342 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
26343 python-setuptools))
26344 (home-page "https://radon.readthedocs.org/")
26345 (synopsis "Code Metrics in Python")
26346 (description
26347 "Radon is a Python tool which computes various code metrics. Supported
26348metrics are:
26349@itemize @bullet
26350@item raw metrics: SLOC, comment lines, blank lines, &c.
26351@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
26352@item Halstead metrics (all of them)
26353@item the Maintainability Index (a Visual Studio metric)
26354@end itemize")
26355 (license license:expat)))
26356
26357(define-public python-rgbxy
26358 (package
26359 (name "python-rgbxy")
26360 (version "0.5")
26361 (source
26362 (origin
26363 (method url-fetch)
26364 (uri (pypi-uri "rgbxy" version))
26365 (sha256
26366 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
26367 (build-system pyproject-build-system)
26368 (arguments
26369 (list #:tests? #f)) ;no tests in PyPI or Git
26370 (native-inputs
26371 (list python-setuptools))
26372 (home-page "https://github.com/benknight/hue-python-rgb-converter")
26373 (synopsis "RGB conversion tool in Python")
26374 (description
26375 "This package implements functionality of RGB/CIE1931 'xy' gammuts
26376conversion: Gamut A, B, and C.")
26377 (license license:expat)))
26378
26379(define-public python-jsonpointer
26380 (package
26381 (name "python-jsonpointer")
26382 (version "3.1.1")
26383 (source
26384 (origin
26385 (method git-fetch)
26386 (uri (git-reference
26387 (url "https://github.com/stefankoegl/python-json-pointer")
26388 (commit (string-append "v" version))))
26389 (file-name (git-file-name name version))
26390 (sha256
26391 (base32 "1k7szx4k2h3zidw01i96fg9x5gnir5fdvlnpgb48xhg0si12ly1y"))))
26392 (build-system pyproject-build-system)
26393 (arguments (list #:test-backend #~'unittest))
26394 (native-inputs
26395 (list python-setuptools))
26396 (home-page "https://github.com/stefankoegl/python-json-pointer")
26397 (synopsis "Identify specific nodes in a JSON document")
26398 (description
26399 "@code{jsonpointer} allows you to access specific nodes by path in a JSON
26400document (see RFC 6901).")
26401 (license license:bsd-3)))
26402
26403(define-public python-jsonpatch
26404 (package
26405 (name "python-jsonpatch")
26406 (version "1.33")
26407 (source
26408 (origin
26409 (method git-fetch)
26410 ;; pypi version lacks tests.js
26411 (uri (git-reference
26412 (url "https://github.com/stefankoegl/python-json-patch")
26413 (commit (string-append "v" version))))
26414 (file-name (git-file-name name version))
26415 (sha256
26416 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
26417 (build-system pyproject-build-system)
26418 (arguments
26419 (list #:test-backend #~'custom
26420 #:test-flags #~(list "tests.py")))
26421 (native-inputs
26422 (list python-setuptools))
26423 (propagated-inputs
26424 (list python-jsonpointer))
26425 (home-page "https://github.com/stefankoegl/python-json-patch")
26426 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
26427 (description "@code{jsonpatch} is a library and program that allows
26428 applying JSON Patches according to RFC 6902.")
26429 (license license:bsd-3)))
26430
26431(define-public python-rfc3987-syntax
26432 (package
26433 (name "python-rfc3987-syntax")
26434 (version "1.1.0")
26435 (source
26436 (origin
26437 (method git-fetch)
26438 (uri (git-reference
26439 (url "https://github.com/willynilly/rfc3987-syntax")
26440 (commit (string-append "v" version))))
26441 (file-name (git-file-name name version))
26442 (sha256
26443 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
26444 (build-system pyproject-build-system)
26445 (native-inputs
26446 (list python-hatchling
26447 python-pytest))
26448 (propagated-inputs
26449 (list python-lark))
26450 (home-page "https://github.com/willynilly/rfc3987-syntax")
26451 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
26452 (description
26453 "This package validates Internationalized Resource Identifiers (IRIs) and
26454their components against the ABNF grammar from RFC 3987. Built on the Lark
26455parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26456package, and provides the @code{format-nongpl} extra required by recent
26457@code{jsonschema} releases.")
26458 (license license:expat)))
26459
26460(define-public python-rfc3986
26461 (package
26462 (name "python-rfc3986")
26463 (version "2.0.0")
26464 (source
26465 (origin
26466 (method url-fetch)
26467 (uri (pypi-uri "rfc3986" version))
26468 (sha256
26469 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26470 (build-system pyproject-build-system)
26471 (native-inputs
26472 (list python-pytest python-setuptools))
26473 (home-page "https://rfc3986.readthedocs.io/")
26474 (synopsis "Parse and validate URI references")
26475 (description
26476 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26477validation and authority parsing. This module also supports RFC@tie{}6874
26478which adds support for zone identifiers to IPv6 addresses.")
26479 (license license:asl2.0)))
26480
26481(define-public python-rfc3986-validator
26482 (package
26483 (name "python-rfc3986-validator")
26484 (version "0.1.1")
26485 (source
26486 (origin
26487 (method url-fetch)
26488 (uri (pypi-uri "rfc3986_validator" version))
26489 (sha256
26490 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26491 (build-system pyproject-build-system)
26492 (native-inputs
26493 (list python-pytest
26494 python-rfc3987
26495 python-setuptools))
26496 (home-page "https://github.com/naimetti/rfc3986-validator")
26497 (synopsis "Pure python rfc3986 validator")
26498 (description "This package implements a URI validator according to RFC3986
26499in pure Python.")
26500 (license license:expat)))
26501
26502(define-public python-rfc3987
26503 (package
26504 (name "python-rfc3987")
26505 (version "1.3.8")
26506 (source
26507 (origin
26508 (method url-fetch)
26509 (uri (pypi-uri "rfc3987" version))
26510 (sha256
26511 (base32
26512 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26513 (build-system pyproject-build-system)
26514 (arguments
26515 (list #:test-backend #~'custom
26516 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26517 (native-inputs
26518 (list python-setuptools))
26519 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26520 (home-page "https://pypi.org/project/rfc3987/")
26521 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26522 (description "@code{rfc3987} provides routines for parsing and
26523 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26524 (license license:gpl3+)))
26525
26526;; The latest commit contains fixes for building with both python3 and python2.
26527(define-public python-rfc6555
26528 (package
26529 (name "python-rfc6555")
26530 (version "0.1.0")
26531 (source
26532 (origin
26533 (method git-fetch)
26534 (uri (git-reference
26535 (url "https://github.com/sethmlarson/rfc6555")
26536 (commit (string-append "v" version))))
26537 (file-name (git-file-name name version))
26538 (sha256
26539 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26540 (build-system pyproject-build-system)
26541 (arguments
26542 (list
26543 ;; Other tests require network access.
26544 #:test-flags #~(list "tests/test_ipv6.py")))
26545 (native-inputs (list python-pytest python-setuptools))
26546 (home-page "https://pypi.org/project/rfc6555/")
26547 (synopsis "Python implementation of RFC 6555")
26548 (description
26549 "Python implementation of the Happy Eyeballs Algorithm described in RFC
265506555. Provided with a single file and dead-simple API to allow easy vendoring
26551and integration into other projects.")
26552 (license license:asl2.0)))
26553
26554(define-public python-sacn
26555 (package
26556 (name "python-sacn")
26557 (version "1.11.0")
26558 (source
26559 (origin
26560 (method url-fetch)
26561 (uri (pypi-uri "sacn" version))
26562 (sha256
26563 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26564 (build-system pyproject-build-system)
26565 (native-inputs (list python-pytest python-setuptools python-wheel))
26566 (home-page "https://github.com/Hundemeier/sacn")
26567 (synopsis "Python library for sending and receiving sACN data")
26568 (description
26569 "This package provides a Python library for sending and receiving
26570 sACN (Streaming Architecture for Control Networks) data, a standard
26571 protocol used for controlling lighting and other devices over
26572 a network.")
26573 (license license:expat)))
26574
26575(define-public python-bagit
26576 (package
26577 (name "python-bagit")
26578 (version "1.9.0")
26579 (source
26580 (origin
26581 (method git-fetch) ; no tests in PyPI
26582 (uri (git-reference
26583 (url "https://github.com/LibraryOfCongress/bagit-python")
26584 (commit (string-append "v" version))))
26585 (file-name (git-file-name name version))
26586 (sha256
26587 (base32
26588 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26589 (build-system pyproject-build-system)
26590 (arguments
26591 (list #:test-flags #~(list "test.py")))
26592 (native-inputs
26593 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26594 (home-page "https://libraryofcongress.github.io/bagit-python/")
26595 (synopsis "Create and validate BagIt packages")
26596 (description "Bagit is a Python library and command line utility for working
26597 with BagIt style packages. BagIt is a minimalist packaging format for digital
26598 preservation.")
26599 (license license:cc0)))
26600
26601(define-public python-prov
26602 (package
26603 (name "python-prov")
26604 (version "2.1.1")
26605 (source
26606 (origin
26607 (method git-fetch)
26608 (uri (git-reference
26609 (url "https://github.com/trungdong/prov")
26610 (commit version)))
26611 (file-name (git-file-name name version))
26612 (sha256
26613 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26614 (build-system pyproject-build-system)
26615 (arguments
26616 (list
26617 #:test-backend #~'unittest
26618 #:test-flags #~(list "discover" "-s" "src")
26619 #:phases
26620 #~(modify-phases %standard-phases
26621 (add-before 'check 'disable-tests
26622 (lambda _
26623 ;; prov.model.ProvException: The provided identifier
26624 ;; "http://www.example.org/bundle" is not valid
26625 (substitute* "src/prov/tests/qnames.py"
26626 (("test_namespace_inheritance")
26627 "disabled_test_namespace_inheritance")
26628 (("test_default_namespace_inheritance")
26629 "disabled_test_default_namespace_inheritance")))))))
26630 (native-inputs
26631 (list python-setuptools))
26632 (propagated-inputs
26633 (list graphviz
26634 python-dateutil
26635 python-networkx
26636 python-pydot
26637 ;; optional dependencies, also needed for tests
26638 python-lxml
26639 python-rdflib))
26640 (home-page "https://github.com/trungdong/prov")
26641 (synopsis
26642 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26643 (description
26644 "This package provides a library for W3C Provenance Data Model supporting
26645 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26646 (license license:expat)))
26647
26648(define-public python-arcp
26649 (package
26650 (name "python-arcp")
26651 (version "0.2.1")
26652 (source
26653 (origin
26654 (method git-fetch)
26655 (uri (git-reference
26656 (url "https://github.com/stain/arcp-py")
26657 (commit version)))
26658 (file-name (git-file-name name version))
26659 (sha256
26660 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26661 (build-system pyproject-build-system)
26662 (arguments
26663 (list
26664 #:phases
26665 #~(modify-phases %standard-phases
26666 (add-after 'unpack 'patch-tests
26667 (lambda _
26668 (substitute* "tests/test_parse.py"
26669 (("ni:///")
26670 "ni:")))))))
26671 (native-inputs (list python-pytest python-setuptools))
26672 (home-page "https://arcp.readthedocs.io/")
26673 (synopsis "Archive and Package URI parser and generator")
26674 (description
26675 "@acronym{arcp, Archive and Package} provides functions for creating
26676@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26677files packaged in an archive or package, like a ZIP file. arcp URIs can be
26678used to consume or reference hypermedia resources bundled inside a file
26679archive or an application package, as well as to resolve URIs for archive
26680resources within a programmatic framework. This URI scheme provides
26681mechanisms to generate a unique base URI to represent the root of the archive,
26682so that relative URI references in a bundled resource can be resolved within
26683the archive without having to extract the archive content on the local file
26684system. An arcp URI can be used for purposes of isolation (e.g. when
26685consuming multiple archives), security constraints (avoiding \"climb out\"
26686from the archive), or for externally identiyfing sub-resources referenced by
26687hypermedia formats.")
26688 (license license:asl2.0)))
26689
26690;; XXX: Project has no updates since 2019, consider to remove when nothing
26691;; depends on it in the next refresh cycle.
26692;; See: <https://github.com/pipermerriam/flex/issues/237>.
26693(define-public python-flex
26694 (package
26695 (name "python-flex")
26696 (version "6.14.1")
26697 (source
26698 (origin
26699 (method url-fetch)
26700 (uri (pypi-uri "flex" version))
26701 (sha256
26702 (base32
26703 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26704 (build-system pyproject-build-system)
26705 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26706 (native-inputs
26707 (list python-setuptools))
26708 (propagated-inputs
26709 (list python-click
26710 python-jsonpointer
26711 python-pyyaml
26712 python-requests
26713 python-rfc3987
26714 python-six
26715 python-strict-rfc3339
26716 python-validate-email))
26717 (home-page "https://github.com/pipermerriam/flex")
26718 (synopsis "Validates Swagger schemata")
26719 (description "@code{flex} can be used to validate Swagger schemata.")
26720 (license license:bsd-3)))
26721
26722(define-public python-marshmallow
26723 (package
26724 (name "python-marshmallow")
26725 (version "4.0.0")
26726 (source
26727 (origin
26728 (method url-fetch)
26729 (uri (pypi-uri "marshmallow" version))
26730 (sha256
26731 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26732 (build-system pyproject-build-system)
26733 (arguments
26734 (list
26735 ;; tests: x86_64 1117 passed
26736 ;; i686-linux 1116 passed, 1 deselected
26737 #:test-flags
26738 #~(list #$@(if (target-64bit?)
26739 '()
26740 ;; OverflowError
26741 '((string-append "--deselect=tests/test_utils.py"
26742 "::test_from_timestamp_with_overflow_value"))))))
26743 (native-inputs
26744 (list python-flit-core
26745 python-pytest
26746 python-simplejson
26747 tzdata-for-tests))
26748 (home-page "https://github.com/marshmallow-code/marshmallow")
26749 (synopsis "Convert complex datatypes to and from native Python datatypes")
26750 (description
26751 "@code{marshmallow} provides a library for converting complex datatypes
26752to and from native Python datatypes.")
26753 (license license:expat)))
26754
26755(define-public python-marshmallow-3
26756 (package
26757 (inherit python-marshmallow)
26758 (version "3.22.0")
26759 (source
26760 (origin
26761 (method url-fetch)
26762 (uri (pypi-uri "marshmallow" version))
26763 (sha256
26764 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26765 (arguments '())
26766 (native-inputs
26767 (list python-pytest
26768 python-pytz
26769 python-simplejson
26770 python-flit-core))
26771 (propagated-inputs
26772 (list python-packaging))))
26773
26774
26775(define-public python-apispec
26776 (package
26777 (name "python-apispec")
26778 (version "6.8.2")
26779 (source
26780 (origin
26781 (method url-fetch)
26782 (uri (pypi-uri "apispec" version))
26783 (sha256
26784 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26785 (build-system pyproject-build-system)
26786 (native-inputs
26787 (list python-flit-core
26788 python-openapi-spec-validator
26789 python-pytest))
26790 (propagated-inputs
26791 (list python-marshmallow
26792 python-packaging
26793 python-pyyaml))
26794 (home-page "https://github.com/marshmallow-code/apispec")
26795 (synopsis "Swagger/OpenAPI specification generator")
26796 (description
26797 "@code{python-apispec} is a pluggable API specification generator. It
26798currently supports the OpenAPI specification, formerly known as Swagger.")
26799 (license license:expat)))
26800
26801(define-public python-apispec-webframeworks
26802 (package
26803 (name "python-apispec-webframeworks")
26804 (version "1.2.0")
26805 (source
26806 (origin
26807 (method url-fetch)
26808 (uri (pypi-uri "apispec_webframeworks" version))
26809 (sha256
26810 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26811 (build-system pyproject-build-system)
26812 (native-inputs
26813 (list python-aiohttp
26814 python-flit-core
26815 python-bottle
26816 python-flask
26817 python-pytest
26818 python-pyyaml
26819 python-tornado
26820 python-wheel))
26821 (propagated-inputs
26822 (list python-apispec))
26823 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26824 (synopsis "Web framework plugins for apispec")
26825 (description "This package provides plugins for using @code{apispec} with
26826web frameworks.")
26827 (license license:expat)))
26828
26829(define-public python-flasgger
26830 (package
26831 (name "python-flasgger")
26832 (version "0.9.7.1")
26833 (source
26834 (origin
26835 (method git-fetch)
26836 (uri (git-reference
26837 (url "https://github.com/rochacbruno/flasgger")
26838 (commit (string-append "v" version))))
26839 (file-name (git-file-name name version))
26840 (sha256
26841 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26842 (patches
26843 (list
26844 (origin
26845 (method url-fetch)
26846 (uri
26847 (string-append "https://github.com/flasgger/flasgger/commit/"
26848 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26849 (sha256
26850 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26851 (build-system pyproject-build-system)
26852 (arguments
26853 (list
26854 #:test-flags
26855 #~(list "--ignore=tests/test_examples.py"
26856 "tests")))
26857 (propagated-inputs
26858 (list python-flask
26859 python-pyyaml
26860 python-jsonschema
26861 python-mistune
26862 python-six))
26863 (native-inputs
26864 (list python-pytest
26865 python-setuptools))
26866 (home-page "https://github.com/rochacbruno/flasgger/")
26867 (synopsis "Extract Swagger specs from your Flask project")
26868 (description "@code{python-flasgger} allows extracting Swagger specs
26869 from your Flask project. It is a fork of Flask-Swagger.")
26870 (license license:expat)))
26871
26872(define-public python-apache-libcloud
26873 (package
26874 (name "python-apache-libcloud")
26875 (version "3.8.0")
26876 (source
26877 (origin
26878 (method url-fetch)
26879 (uri (pypi-uri "apache-libcloud" version))
26880 (sha256
26881 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26882 (build-system pyproject-build-system)
26883 (arguments
26884 (list
26885 #:tests? #f ; XXX: all tests fail requiring additional credentials
26886 #:phases
26887 #~(modify-phases %standard-phases
26888 (add-after 'unpack 'patch-ssh
26889 (lambda* (#:key inputs #:allow-other-keys)
26890 (substitute* "libcloud/compute/ssh.py"
26891 (("'ssh'")
26892 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26893 (add-after 'unpack 'patch-tests
26894 (lambda _
26895 (substitute* "libcloud/test/compute/test_ssh_client.py"
26896 (("^class ShellOutSSHClientTests")
26897 "@unittest.skip(\"Guix container doesn't have ssh service\")
26898class ShellOutSSHClientTests"))))
26899 (add-before 'check 'copy-secret
26900 (lambda _
26901 (copy-file "libcloud/test/secrets.py-dist"
26902 "libcloud/test/secrets.py"))))))
26903 (inputs
26904 (list openssh))
26905 (propagated-inputs
26906 (list python-requests))
26907 (native-inputs
26908 (list python-pytest python-requests-mock python-setuptools))
26909 (home-page "https://libcloud.apache.org/")
26910 (synopsis "Unified Cloud API")
26911 (description
26912 "@code{libcloud} is a Python library for interacting with many of the
26913popular cloud service providers using a unified API.")
26914 (license license:asl2.0)))
26915
26916(define-public python-smmap
26917 (package
26918 (name "python-smmap")
26919 (version "5.0.2")
26920 (source
26921 (origin
26922 (method url-fetch)
26923 (uri (pypi-uri "smmap" version))
26924 (sha256
26925 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26926 (build-system pyproject-build-system)
26927 (native-inputs
26928 (list python-pytest
26929 python-setuptools
26930 python-wheel))
26931 (home-page "https://github.com/Byron/smmap")
26932 (synopsis "Python sliding window memory map manager")
26933 (description "@code{smmap} is a pure Python implementation of a sliding
26934 window memory map manager.")
26935 (license license:bsd-3)))
26936
26937(define-public python-regex
26938 (package
26939 (name "python-regex")
26940 (version "2026.2.28")
26941 (source
26942 (origin
26943 (method git-fetch)
26944 (uri (git-reference
26945 (url "https://github.com/mrabarnett/mrab-regex")
26946 (commit version)))
26947 (file-name (git-file-name name version))
26948 (sha256
26949 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26950 (build-system pyproject-build-system)
26951 (arguments
26952 (list
26953 #:test-backend #~'unittest
26954 #:test-flags #~(list "-v" "regex.tests.test_regex")
26955 #:phases
26956 #~(modify-phases %standard-phases
26957 (add-before 'check 'remove-local-source
26958 (lambda _
26959 (delete-file-recursively "regex"))))))
26960 (native-inputs
26961 (list python-setuptools))
26962 (home-page "https://github.com/mrabarnett/mrab-regex")
26963 (synopsis "Alternative regular expression module")
26964 (description
26965 "This regular expression implementation is backwards-compatible with the
26966standard @code{re} module, but offers additional functionality like full
26967case-folding for case-insensitive matches in Unicode.")
26968 (license license:psfl)))
26969
26970(define-public python-pysocks
26971 (package
26972 (name "python-pysocks")
26973 (version "1.7.1")
26974 (source
26975 (origin
26976 (method url-fetch)
26977 (uri (pypi-uri "PySocks" version))
26978 (sha256
26979 (base32
26980 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26981 (build-system pyproject-build-system)
26982 (arguments `(#:tests? #f))
26983 (native-inputs
26984 (list python-setuptools))
26985 (home-page "https://github.com/Anorov/PySocks")
26986 (synopsis "SOCKS client module")
26987 (description "@code{pysocks} is an updated and semi-actively maintained
26988version of @code{SocksiPy} with bug fixes and extra features.")
26989 (license license:bsd-3)))
26990
26991(define-public python-pydub
26992 ;; TODO: Move to (gnu packages audio)
26993 (package
26994 (name "python-pydub")
26995 (version "0.25.1")
26996 (source
26997 (origin
26998 (method git-fetch)
26999 (uri (git-reference
27000 (url "https://github.com/jiaaro/pydub")
27001 (commit (string-append "v" version))))
27002 (file-name (git-file-name name version))
27003 (sha256
27004 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
27005 (patches
27006 (list
27007 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
27008 (origin
27009 (method url-fetch)
27010 (uri
27011 (string-append "https://github.com/jiaaro/pydub/commit/"
27012 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
27013 (sha256
27014 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
27015 (build-system pyproject-build-system)
27016 (arguments
27017 (list
27018 #:test-backend ''unittest
27019 #:phases
27020 #~(modify-phases %standard-phases
27021 (add-after 'unpack 'fix-ffmpeg-path
27022 (lambda* (#:key inputs #:allow-other-keys)
27023 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
27024 (substitute* "pydub/utils.py"
27025 (("return \"ffmpeg\"")
27026 (string-append "return \"" bin "/ffmpeg\""))
27027 (("return \"ffplay\"")
27028 (string-append "return \"" bin "/ffplay\""))
27029 (("return \"ffprobe\"")
27030 (string-append "return \"" bin "/ffprobe\""))
27031 (("warn\\(\"Couldn't find ff")
27032 "# warn\\(\"Couldn't find ff"))))))))
27033 (native-inputs (list python-setuptools))
27034 (home-page "https://pydub.com")
27035 (inputs (list ffmpeg))
27036 (propagated-inputs (list python-scipy))
27037 (synopsis "Manipulate audio with a high level interface in Python")
27038 (description
27039 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
27040@code{ffmpeg} to open various audio formats.")
27041 (license license:expat))) ; MIT license
27042
27043(define-public python-pkginfo
27044 (package
27045 (name "python-pkginfo")
27046 (version "1.12.1.2")
27047 (source
27048 (origin
27049 (method url-fetch)
27050 (uri (pypi-uri "pkginfo" version))
27051 (sha256
27052 (base32
27053 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
27054 (build-system pyproject-build-system)
27055 (arguments
27056 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
27057 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
27058 (native-inputs
27059 (list python-pytest
27060 python-setuptools
27061 python-wheel))
27062 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
27063 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
27064 (description
27065 "API to query the distutils metadata written in @file{PKG-INFO} inside a
27066source distriubtion (an sdist) or a binary distribution (e.g., created by
27067running bdist_egg). It can also query the EGG-INFO directory of an installed
27068distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
27069created by running @code{python setup.py develop}).")
27070 (license license:expat)))
27071
27072(define-public python-rbfly
27073 (package
27074 (name "python-rbfly")
27075 (version "0.11.0")
27076 (source
27077 (origin
27078 (method url-fetch)
27079 (uri (pypi-uri "rbfly" version))
27080 (sha256
27081 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
27082 (build-system pyproject-build-system)
27083 (arguments
27084 (list
27085 #:test-flags
27086 #~(list "--pyargs" "rbfly"
27087 #$@(if (target-64bit?)
27088 '()
27089 '((string-append "--deselect=tests/amqp/test_message.py"
27090 "::test_encode_amqp_string_too_long"))))
27091 #:phases
27092 #~(modify-phases %standard-phases
27093 (add-before 'check 'remove-local-source
27094 (lambda _
27095 (delete-file-recursively "rbfly"))))))
27096 (native-inputs
27097 (list python-cython
27098 python-pytest
27099 python-pytest-asyncio
27100 python-pytest-timeout
27101 python-setuptools))
27102 (home-page "https://wrobell.dcmod.org/rbfly/")
27103 (synopsis "Work with RabbitMQ Streams in Python")
27104 (description
27105 "This package implements a functionality to deal with
27106@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
27107@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
27108
27109It is designed and implemented with the following qualities in mind:
27110@itemize
27111@item asynchronous Pythonic API with type annotations
27112@item use of
27113@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
271141.0 message format to enable interoperability between RabbitMQ Stream. clients
27115@item auto reconnection to RabbitMQ broker with lazily created connection
27116objects
27117@end itemize
27118
27119Support of many RabbitMQ Streams broker features:
27120@itemize
27121@item publishing single messages, or in batches, with confirmation
27122@item subscribing to a stream at a specific point in time, from a specific
27123offset, or using offset reference
27124@item stream message filtering
27125@item writing stream offset reference
27126@item message deduplication
27127@item integration with AMQP 1.0 ecosystem at message format level
27128@end itemize")
27129 (license license:gpl3+)))
27130
27131(define-public python-jsonrpclib-pelix
27132 (package
27133 (name "python-jsonrpclib-pelix")
27134 (version "0.3.2")
27135 (source
27136 (origin
27137 (method git-fetch)
27138 (uri (git-reference
27139 (url "https://github.com/tcalmant/jsonrpclib")
27140 (commit (string-append "v" version))))
27141 (file-name (git-file-name name version))
27142 (sha256
27143 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
27144 (build-system pyproject-build-system)
27145 (arguments
27146 (list
27147 #:test-flags #~(list "--deselect=\
27148tests/test_internal.py::InternalTests::test_multicall_success")))
27149 (native-inputs (list python-pytest python-setuptools))
27150 (home-page "https://github.com/tcalmant/jsonrpclib")
27151 (synopsis "JSON-RPC 2.0 client library for Python")
27152 (description
27153 "This library implements the JSON-RPC v2.0 specification
27154(backwards-compatible) as a client library for Python. This version is a fork
27155of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
27156 (license license:asl2.0)))
27157
27158(define-public python-setuptools-git
27159 ;; XXX: The project is abandoned since 2018, consider to remove in the next
27160 ;; refresh cycle.
27161 (package
27162 (name "python-setuptools-git")
27163 (version "1.2")
27164 (source
27165 (origin
27166 (method url-fetch)
27167 (uri (pypi-uri "setuptools-git" version))
27168 (sha256
27169 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
27170 (build-system pyproject-build-system)
27171 (arguments
27172 (list
27173 #:tests? #f ;no tests in PyPI
27174 #:phases
27175 #~(modify-phases %standard-phases
27176 ;; This is needed for tests.
27177 (add-after 'unpack 'configure-git
27178 (lambda _
27179 (setenv "HOME" "/tmp")
27180 (invoke "git" "config" "--global" "user.email" "guix")
27181 (invoke "git" "config" "--global" "user.name" "guix"))))))
27182 (native-inputs
27183 (list git-minimal/pinned python-setuptools python-wheel))
27184 (home-page "https://github.com/msabramo/setuptools-git")
27185 (synopsis "Setuptools revision control system plugin for Git")
27186 (description
27187 "This package provides a plugin for Setuptools for revision control with
27188Git.")
27189 (license license:bsd-3)))
27190
27191(define-public python-setuptools-rust
27192 (package
27193 (name "python-setuptools-rust")
27194 (version "1.11.1")
27195 (source
27196 (origin
27197 (method url-fetch)
27198 (uri (pypi-uri "setuptools_rust" version))
27199 (sha256
27200 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
27201 (build-system pyproject-build-system)
27202 (arguments
27203 (list #:tests? #f)) ;tests require Cargo
27204 (propagated-inputs
27205 (list python-semantic-version
27206 python-setuptools))
27207 (home-page "https://github.com/PyO3/setuptools-rust")
27208 (synopsis "Setuptools plugin for Rust extensions")
27209 (description
27210 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
27211Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
27212 (license license:expat)))
27213
27214(define-public python-setuptools-gettext
27215 (package
27216 (name "python-setuptools-gettext")
27217 (version "0.1.14")
27218 (source
27219 (origin
27220 (method git-fetch)
27221 (uri (git-reference
27222 (url "https://github.com/breezy-team/setuptools-gettext")
27223 (commit (string-append "v" version))))
27224 (file-name (git-file-name name version))
27225 (sha256
27226 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
27227 (build-system pyproject-build-system)
27228 (native-inputs (list python-pytest python-tomli python-setuptools))
27229 (home-page "https://github.com/breezy-team/setuptools-gettext")
27230 (synopsis "Setuptools plugin for gettext")
27231 (description "This package provides a plugin for Setuptools for gettext.")
27232 (license license:gpl2+)))
27233
27234(define-public python-pyclibrary
27235 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
27236 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
27237 (revision "0"))
27238 (package
27239 (name "python-pyclibrary")
27240 (version (git-version "0.2.2" revision commit))
27241 (source
27242 (origin
27243 (method git-fetch)
27244 (uri (git-reference
27245 (url "https://github.com/MatthieuDartiailh/pyclibrary")
27246 (commit commit)))
27247 (file-name (git-file-name name version))
27248 (sha256
27249 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
27250 (build-system pyproject-build-system)
27251 (native-inputs
27252 (list python-pytest
27253 python-setuptools
27254 python-setuptools-scm))
27255 (propagated-inputs
27256 (list python-pyparsing))
27257 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
27258 (synopsis "Wrap dynamic libraries in Python")
27259 (description
27260 "This package helps wrapping dynamic libraries in Python. It includes
27261a pure-Python C parser and an automation library that uses C header file
27262definitions to simplify the use of C bindings.")
27263 (license license:expat))))
27264
27265(define-public python-pyclipper
27266 (package
27267 (name "python-pyclipper")
27268 (version "1.3.0.post6")
27269 (source
27270 (origin
27271 (method git-fetch)
27272 (uri (git-reference
27273 (url "https://github.com/greginvm/pyclipper")
27274 (commit version)))
27275 (file-name (git-file-name name version))
27276 (sha256
27277 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
27278 (build-system pyproject-build-system)
27279 (arguments
27280 (list
27281 #:phases
27282 #~(modify-phases %standard-phases
27283 (add-before 'build 'cythonize-sources
27284 (lambda _
27285 (with-directory-excursion "src/pyclipper"
27286 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
27287 (native-inputs
27288 (list python-cython
27289 python-pytest
27290 python-setuptools
27291 python-setuptools-scm))
27292 (home-page "https://github.com/greginvm/pyclipper")
27293 (synopsis "Wrapper for Angus Johnson's Clipper library")
27294 (description
27295 "Pyclipper is a Cython wrapper for the C++ translation of the
27296Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
27297 (license license:expat)))
27298
27299(define-public python-semver
27300 (package
27301 (name "python-semver")
27302 (version "3.0.4")
27303 (source
27304 (origin
27305 (method url-fetch)
27306 (uri (pypi-uri "semver" version))
27307 (sha256
27308 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
27309 (build-system pyproject-build-system)
27310 (native-inputs (list python-pytest python-setuptools))
27311 (home-page "https://github.com/k-bx/python-semver")
27312 (synopsis "Python helper for Semantic Versioning")
27313 (description
27314 "This package provides a Python library for @url{Semantic Versioning,
27315http://semver.org/}.")
27316 (license license:bsd-3)))
27317
27318(define-public python-phonenumbers
27319 (package
27320 (name "python-phonenumbers")
27321 (version "8.13.37")
27322 (source
27323 (origin
27324 (method git-fetch)
27325 (uri (git-reference
27326 (url "https://github.com/daviddrysdale/python-phonenumbers")
27327 (commit (string-append "v" version))))
27328 (file-name (git-file-name name version))
27329 (sha256
27330 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
27331 (build-system pyproject-build-system)
27332 (arguments
27333 (list
27334 #:test-backend #~'custom
27335 #:test-flags #~(list "-m" "testwrapper")
27336 #:phases
27337 #~(modify-phases %standard-phases
27338 (add-after 'unpack 'chdir
27339 (lambda _
27340 (chdir "python"))))))
27341 (propagated-inputs (list python-protobuf))
27342 (native-inputs (list python-setuptools))
27343 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
27344 (synopsis "Python library for dealing with international phone numbers")
27345 (description
27346 "This package provides a Python port of Google's libphonenumber library.")
27347 (license license:asl2.0)))
27348
27349(define-public python-heapdict
27350 (package
27351 (name "python-heapdict")
27352 (version "1.0.1")
27353 (source
27354 (origin
27355 (method url-fetch)
27356 (uri (pypi-uri "HeapDict" version))
27357 (sha256
27358 (base32
27359 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
27360 (build-system pyproject-build-system)
27361 (arguments (list #:test-backend #~'unittest))
27362 (native-inputs (list python-setuptools))
27363 (home-page "http://stutzbachenterprises.com/")
27364 (synopsis "Heap with decrease-key and increase-key operations")
27365 (description
27366 "heapdict implements the MutableMapping ABC, meaning it works pretty much
27367like a regular Python @code{dict}. It’s designed to be used as a priority
27368queue.")
27369 (license license:bsd-3)))
27370
27371(define-public python-send2trash
27372 (package
27373 (name "python-send2trash")
27374 (version "1.8.2")
27375 (source
27376 (origin (method git-fetch)
27377 ;; Source tarball on PyPI doesn't include tests.
27378 (uri (git-reference
27379 (url "https://github.com/arsenetar/send2trash")
27380 (commit version)))
27381 (file-name (git-file-name name version))
27382 (sha256
27383 (base32
27384 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
27385 (build-system pyproject-build-system)
27386 (arguments
27387 (list
27388 #:phases
27389 '(modify-phases %standard-phases
27390 (add-before 'check 'pre-check
27391 (lambda _ (setenv "HOME" "/tmp"))))))
27392 (native-inputs (list python-pytest python-setuptools python-wheel))
27393 (home-page "https://github.com/arsenetar/send2trash")
27394 (synopsis "Send files to the user's @file{~/Trash} directory")
27395 (description "This package provides a Python library to send files to the
27396user's @file{~/Trash} directory.")
27397 (license license:bsd-3)))
27398
27399(define-public python-pyfavicon
27400 (package
27401 (name "python-pyfavicon")
27402 (version "0.1.1")
27403 (source
27404 (origin
27405 (method git-fetch)
27406 (uri (git-reference
27407 (url "https://github.com/bilelmoussaoui/pyfavicon")
27408 (commit version)))
27409 (file-name (git-file-name name version))
27410 (sha256
27411 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
27412 (build-system pyproject-build-system)
27413 (arguments
27414 (list
27415 #:test-flags
27416 #~(list "-k" (string-join (list
27417 ;; Socket name resolution fails.
27418 "not test_url_icon_link_type"
27419 "test_icon_sizes"
27420 ;; Tuples differ.
27421 "test_largest_icon")
27422 " and not "))))
27423 (native-inputs (list python-pytest python-setuptools))
27424 (propagated-inputs
27425 (list python-aiohttp python-beautifulsoup4 python-pillow))
27426 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27427 (synopsis "Async favicon fetcher")
27428 (description
27429 "@code{pyfavicon} is an async favicon fetcher.")
27430 (license license:expat)))
27431
27432(define-public python-funcy
27433 (package
27434 (name "python-funcy")
27435 (version "1.11")
27436 (source
27437 (origin
27438 (method git-fetch)
27439 (uri (git-reference
27440 (url "https://github.com/Suor/funcy")
27441 (commit version)))
27442 (sha256
27443 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27444 (file-name (git-file-name name version))))
27445 (build-system pyproject-build-system)
27446 (native-inputs
27447 (list python-pytest python-whatever python-setuptools python-wheel))
27448 (home-page "https://github.com/Suor/funcy")
27449 (synopsis "Functional tools")
27450 (description "@code{funcy} is a library that provides functional tools.
27451Examples are:
27452@enumerate
27453@item merge - Merges collections of the same type
27454@item walk - Type-preserving map
27455@item select - Selects a part of a collection
27456@item take - Takes the first n items of a collection
27457@item first - Takes the first item of a collection
27458@item remove - Predicated-removes items of a collection
27459@item concat - Concatenates two collections
27460@item flatten - Flattens a collection with subcollections
27461@item distinct - Returns only distinct items
27462@item split - Predicated-splits a collection
27463@item split_at - Splits a collection at a given item
27464@item group_by - Groups items by group
27465@item pairwise - Pairs off adjacent items
27466@item partial - Partially-applies a function
27467@item curry - Curries a function
27468@item compose - Composes functions
27469@item complement - Complements a predicate
27470@item all_fn - \"all\" with predicate
27471@end enumerate")
27472 (license license:bsd-3)))
27473
27474(define-public python-funcy-1.14
27475 (package/inherit python-funcy
27476 (name "python-funcy")
27477 (version "1.14")
27478 (source
27479 (origin
27480 (method git-fetch)
27481 (uri (git-reference
27482 (url "https://github.com/Suor/funcy")
27483 (commit version)))
27484 (sha256
27485 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27486 (file-name (git-file-name name version))))))
27487
27488(define-public python-isoweek
27489 (package
27490 (name "python-isoweek")
27491 (version "1.3.3")
27492 (source
27493 (origin
27494 (method url-fetch)
27495 (uri (pypi-uri "isoweek" version))
27496 (sha256
27497 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27498 (build-system pyproject-build-system)
27499 (arguments (list #:test-backend #~'unittest))
27500 (native-inputs (list python-setuptools))
27501 (home-page "https://github.com/gisle/isoweek")
27502 (synopsis "Objects representing a week")
27503 (description "The @code{isoweek} module provide the class Week that
27504implements the week definition of ISO 8601. This standard also defines
27505a notation for identifying weeks; yyyyWww (where the W is a literal).
27506Week instances stringify to this form.")
27507 (license license:bsd-3)))
27508
27509(define-public bpython
27510 (package
27511 (name "bpython")
27512 (version "0.25")
27513 (source
27514 (origin
27515 (method url-fetch)
27516 (uri (pypi-uri "bpython" version))
27517 (sha256
27518 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27519 (build-system pyproject-build-system)
27520 (arguments
27521 (list
27522 #:test-flags
27523 ;; Tests can't import curtsies, pygments and urwid.
27524 #~(list "-k" (string-join
27525 (list "not test_issue108"
27526 "test_issue133")
27527 " and not " ))
27528 #:phases
27529 #~(modify-phases %standard-phases
27530 (add-after 'wrap 'add-aliases
27531 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27532 (lambda _
27533 (for-each
27534 (lambda (old new)
27535 (symlink old (string-append #$output "/bin/" new)))
27536 '("bpython" "bpython-urwid" "bpdb")
27537 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27538 (native-inputs
27539 (list python-mock
27540 python-pytest
27541 python-setuptools))
27542 (propagated-inputs
27543 (list python-curtsies
27544 python-cwcwidth
27545 python-greenlet
27546 python-pygments
27547 python-pyxdg
27548 python-requests
27549 ;; [optional]
27550 python-pyperclip
27551 python-jedi
27552 python-urwid-2
27553 python-watchdog))
27554 (home-page "https://bpython-interpreter.org/")
27555 (synopsis "Fancy interface to the Python interpreter")
27556 (description "Bpython is a fancy interface to the Python
27557interpreter. bpython's main features are
27558
27559@enumerate
27560@item in-line syntax highlighting,
27561@item readline-like autocomplete with suggestions displayed as you type,
27562@item expected parameter list for any Python function,
27563@item \"rewind\" function to pop the last line of code from memory and
27564 re-evaluate,
27565@item send the code you've entered off to a pastebin,
27566@item save the code you've entered to a file, and
27567@item auto-indentation.
27568@end enumerate")
27569 (license license:expat)))
27570
27571(define-public python-pyinotify
27572 (package
27573 (name "python-pyinotify")
27574 (version "0.9.6")
27575 (source
27576 (origin
27577 (method git-fetch)
27578 (uri (git-reference
27579 (url "https://github.com/seb-m/pyinotify")
27580 (commit version)))
27581 (file-name (git-file-name name version))
27582 (sha256
27583 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27584 (build-system pyproject-build-system)
27585 (arguments
27586 (list
27587 #:tests? #f ;no tests
27588 #:phases
27589 #~(modify-phases %standard-phases
27590 (add-after 'unpack 'drop-shebang
27591 (lambda _
27592 ;; Dropping this shebang prevents the build system from adding
27593 ;; python-wrapper as an input, reducing package closure size from
27594 ;; ~200 MiB to ~0.2 MiB.
27595 (substitute* "python3/pyinotify.py"
27596 (("#!/usr/bin/env python") "")))))))
27597 (native-inputs
27598 (list python-setuptools))
27599 (propagated-inputs
27600 (list python-pyasyncore))
27601 (home-page "https://github.com/seb-m/pyinotify")
27602 (synopsis "Python library for monitoring inotify events")
27603 (description
27604 "@code{pyinotify} provides a Python interface for monitoring file system
27605events on Linux.")
27606 (license license:expat)))
27607
27608(define-public python-pyinotify-cli
27609 (package
27610 (inherit python-pyinotify)
27611 (name "python-pyinotify-cli")
27612 (arguments
27613 (substitute-keyword-arguments arguments
27614 ((#:phases phases #~%standard-phases)
27615 #~(modify-phases #$phases
27616 (delete 'drop-shebang)
27617 (add-after 'install 'install-entrypoint
27618 (lambda _
27619 (let ((entrypoint
27620 (string-append #$output "/lib/python"
27621 (python-version (which "python"))
27622 "/site-packages/pyinotify.py"))
27623 (bin (string-append #$output "/bin")))
27624 (mkdir-p bin)
27625 (invoke "chmod" "+x" entrypoint)
27626 (symlink
27627 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27628 (description
27629 "This package provides, in addition to the @code{pyinotify} Python library,
27630a command line application exposing the same functionality.")))
27631
27632(define-public python-latex2pydata
27633 (package
27634 (name "python-latex2pydata")
27635 (version "0.5.0")
27636 (source
27637 (origin
27638 (method url-fetch)
27639 (uri (pypi-uri "latex2pydata" version))
27640 (sha256
27641 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27642 (build-system pyproject-build-system)
27643 (native-inputs (list python-setuptools python-wheel python-pytest))
27644 (home-page "https://github.com/gpoore/latex2pydata")
27645 (synopsis "Load data from LaTeX in Python literal format")
27646 (description
27647 "This package is designed to load data in Python literal format that was
27648saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27649passed from LaTeX to Python.")
27650 (license license:bsd-3)))
27651
27652(define-public python-latexcodec
27653 (package
27654 (name "python-latexcodec")
27655 (version "3.0.1")
27656 (source
27657 (origin
27658 (method git-fetch)
27659 (uri (git-reference
27660 (url "https://github.com/mcmtroffaes/latexcodec/")
27661 (commit version)))
27662 (file-name (git-file-name name version))
27663 (sha256
27664 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27665 (build-system pyproject-build-system)
27666 (native-inputs (list python-pytest python-setuptools))
27667 (home-page "https://readthedocs.org/projects/latexcodec/")
27668 (synopsis "Work with LaTeX code in Python")
27669 (description "Lexer and codec to work with LaTeX code in Python.")
27670 (license license:expat)))
27671
27672(define-public python-latexminted
27673 (package
27674 (name "python-latexminted")
27675 (version "0.7.1")
27676 (source
27677 (origin
27678 (method url-fetch)
27679 (uri (pypi-uri "latexminted" version))
27680 (sha256
27681 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27682 (build-system pyproject-build-system)
27683 (arguments (list #:tests? #f)) ; No tests upstream.
27684 (propagated-inputs (list python-latex2pydata
27685 python-latexrestricted
27686 python-pygments))
27687 (native-inputs (list texlive-kpathsea python-setuptools))
27688 (home-page "https://github.com/gpoore/minted")
27689 (synopsis "Python library for the LaTeX minted package")
27690 (description "This Python package provides the Python side of the
27691@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27692@code{python-pygments} library. It also provides several code formatting and
27693manipulation features implemented in Python that would be difficult to perform
27694in LaTeX, such as dedenting code and extracting code snippets from source files
27695using regular expressions.")
27696 (license license:lppl1.3c+)))
27697
27698(define-public python-latexrestricted
27699 (package
27700 (name "python-latexrestricted")
27701 (version "0.6.2")
27702 (source
27703 (origin
27704 (method url-fetch)
27705 (uri (pypi-uri "latexrestricted" version))
27706 (sha256
27707 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27708 (build-system pyproject-build-system)
27709 (arguments
27710 (list
27711 #:tests? #f ;no test
27712 #:phases
27713 #~(modify-phases %standard-phases
27714 (add-after 'unpack 'fix-paths
27715 (lambda* (#:key inputs #:allow-other-keys)
27716 (let ((pystr (lambda (s) (string-append "'" s "'")))
27717 (kpse (search-input-file inputs "/bin/kpsewhich")))
27718 (substitute* "latexrestricted/_latex_config.py"
27719 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27720 ;; this variable is bogus in Guix because binaries are scattered
27721 ;; across multiple directories. This phase sets SELFAUTOLOC to
27722 ;; the specific directory containing `kpsewhich'.
27723 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27724 (pystr (dirname kpse)))
27725 ;; Refer to kpse by store path instead of looking it upein $PATH.
27726 (("shutil.which\\('kpse'.*$")
27727 (string-append (pystr kpse) "\n")))))))))
27728 (native-inputs (list python-setuptools python-wheel))
27729 (inputs (list texlive-kpathsea))
27730 (home-page "https://github.com/gpoore/latexrestricted")
27731 (synopsis
27732 "Library for creating executables compatible with LaTeX's shell escape")
27733 (description
27734 "This Python package is designed to simplify the process of creating Python
27735executables compatible with LaTeX restricted shell escape. Restricted shell
27736escape allows LaTeX to run trusted executables as part of compiling documents.
27737These executables have restricted access to the file system and restricted
27738ability to launch subprocesses.")
27739 (license license:lppl1.3+)))
27740
27741(define-public python-pybloom-live
27742 (package
27743 (name "python-pybloom-live")
27744 (version "4.0.0")
27745 (source (origin
27746 (method url-fetch)
27747 (uri (pypi-uri "pybloom_live" version))
27748 (sha256
27749 (base32
27750 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27751 (build-system pyproject-build-system)
27752 (propagated-inputs (list python-bitarray python-xxhash))
27753 (native-inputs (list python-pytest python-setuptools python-wheel))
27754 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27755 (synopsis "Bloom filter")
27756 (description "This package provides a scalable Bloom filter implemented in
27757Python.")
27758 (license license:expat)))
27759
27760;; XXX: Not maintained since 2020.
27761(define-public python-pybktree
27762 (package
27763 (name "python-pybktree")
27764 (version "1.1")
27765 (source
27766 (origin
27767 (method url-fetch)
27768 (uri (pypi-uri "pybktree" version))
27769 (sha256
27770 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27771 (build-system pyproject-build-system)
27772 (arguments
27773 (list #:tests? #f)) ;no tests provided
27774 (native-inputs (list python-setuptools))
27775 (home-page "https://github.com/Jetsetter/pybktree")
27776 (synopsis "Pythonic BK-tree data structure")
27777 (description
27778 "This package provides a BK-tree data structure to allow fast querying of
27779close matches in Python.")
27780 (license license:expat)))
27781
27782(define-public python-pybtex
27783 (package
27784 (name "python-pybtex")
27785 (version "0.25.0")
27786 (source
27787 (origin
27788 (method git-fetch)
27789 (uri (git-reference
27790 (url "https://codeberg.org/pybtex/pybtex")
27791 (commit version)))
27792 (file-name (git-file-name name version))
27793 (sha256
27794 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27795 (build-system pyproject-build-system)
27796 (native-inputs (list python-pytest python-setuptools))
27797 (propagated-inputs (list python-latexcodec python-pyyaml))
27798 (home-page "https://pybtex.org/")
27799 (synopsis "BibTeX-compatible bibliography processor")
27800 (description
27801 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27802You can simply type pybtex instead of bibtex.")
27803 (license license:expat)))
27804
27805(define-public python-pybtex-apa-style
27806 (package
27807 (name "python-pybtex-apa-style")
27808 (version "1.3")
27809 (source
27810 (origin
27811 (method url-fetch)
27812 (uri (pypi-uri "pybtex-apa-style" version))
27813 (sha256
27814 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27815 (build-system pyproject-build-system)
27816 (arguments
27817 (list
27818 #:test-backend #~'custom
27819 #:test-flags
27820 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27821 " sys.exit('apa' not"
27822 " in pybtex.plugin.enumerate_plugin_names"
27823 "('pybtex.style.labels'))"))))
27824 (native-inputs (list python-pybtex python-setuptools))
27825 (home-page "https://github.com/naeka/pybtex-apa-style")
27826 (synopsis "APA style for pybtex")
27827 (description
27828 "This package provides support for the APA style within pybtex.")
27829 (license license:expat)))
27830
27831(define-public python-pybtex-docutils
27832 (package
27833 (name "python-pybtex-docutils")
27834 (version "1.0.3")
27835 (source
27836 (origin
27837 (method git-fetch)
27838 (uri (git-reference
27839 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27840 (commit version)))
27841 (file-name (git-file-name name version))
27842 (sha256
27843 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27844 (build-system pyproject-build-system)
27845 (propagated-inputs (list python-docutils python-pybtex))
27846 (native-inputs (list python-setuptools python-pytest))
27847 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27848 (synopsis "Docutils backend for pybtex")
27849 (description "The pybtex docutils backend allows bibtex citations to be
27850inserted into documentation generated by docutils.")
27851 (license license:expat)))
27852
27853(define-public python-onetimepass
27854 (package
27855 (name "python-onetimepass")
27856 (version "1.0.1")
27857 (source
27858 (origin
27859 (method git-fetch)
27860 (uri (git-reference
27861 (url "https://github.com/tadeck/onetimepass/")
27862 (commit (string-append "v" version))))
27863 (file-name (git-file-name name version))
27864 (sha256
27865 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27866 (build-system pyproject-build-system)
27867 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27868 (native-inputs (list python-setuptools))
27869 (propagated-inputs (list python-six))
27870 (home-page "https://github.com/tadeck/onetimepass/")
27871 (synopsis "One-time password library")
27872 (description
27873 "Python one-time password library for HMAC-based (HOTP) and time-based
27874(TOTP) passwords.")
27875 (license license:expat)))
27876
27877(define-public python-online-judge-api-client
27878 (package
27879 (name "python-online-judge-api-client")
27880 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27881 (revision . "0")))
27882 (version (git-version "10.10.1"
27883 (assoc-ref properties 'revision)
27884 (assoc-ref properties 'commit)))
27885 (source
27886 (origin
27887 (method git-fetch)
27888 (uri (git-reference
27889 (url "https://github.com/online-judge-tools/api-client")
27890 (commit (assoc-ref properties 'commit))))
27891 (file-name (git-file-name name version))
27892 (sha256
27893 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27894 (patches
27895 (search-patches "python-online-judge-api-client-tests.patch"))
27896 ))
27897 (build-system pyproject-build-system)
27898 (arguments
27899 (list
27900 #:test-flags
27901 #~(list "--ignore-glob=tests/get_contest_*.py"
27902 "--ignore-glob=tests/get_problem_*.py")
27903 #:phases
27904 #~(modify-phases %standard-phases
27905 (add-before 'check 'configure-tests
27906 (lambda* (#:key inputs outputs #:allow-other-keys)
27907 (delete-file-recursively
27908 (string-append (site-packages inputs outputs)
27909 "/tests"))
27910 (call-with-output-file "pytest.ini"
27911 (lambda (port)
27912 (format port "\
27913[pytest]
27914python_files = tests/*.py"))))))))
27915 (native-inputs (list python-pytest python-setuptools))
27916 (propagated-inputs
27917 (list python-appdirs
27918 python-beautifulsoup4
27919 python-colorlog
27920 python-lxml
27921 python-requests
27922 python-toml
27923 python-jsonschema))
27924 (home-page "https://github.com/online-judge-tools/api-client")
27925 (synopsis "API client for various online judges")
27926 (description
27927 "This is an API client for various online judges, used as the backend
27928library of @code{oj} command. You can use the Python library
27929(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27930command) which talks JSON compatible with jmerle/competitive-companion.")
27931 (license license:expat)))
27932
27933(define-public online-judge-tools
27934 (package
27935 (name "online-judge-tools")
27936 (version "11.5.1")
27937 ;; Source distributions are not uploaded to PyPI.
27938 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27939 (source
27940 (origin
27941 (method git-fetch)
27942 (uri (git-reference
27943 (url "https://github.com/online-judge-tools/oj")
27944 (commit (string-append "v" version))))
27945 (file-name (git-file-name name version))
27946 (sha256
27947 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27948 (patches (search-patches "online-judge-tools.patch"))))
27949 (build-system pyproject-build-system)
27950 (arguments
27951 (list
27952 #:test-flags
27953 ;; These tests require network connections
27954 #~(list "--ignore=tests/command_version.py")))
27955 (native-inputs (list python-pytest python-setuptools))
27956 (inputs (list time))
27957 (propagated-inputs (list python-online-judge-api-client python-colorama
27958 python-requests))
27959 (home-page "https://github.com/online-judge-tools/oj")
27960 (synopsis "Command to help solving problems on various online judges")
27961 (description
27962 "@command{oj} is a command line tool to help solving problems on
27963various online judges. This command automates downloading sample
27964cases, generating additional test cases, testing for your code, and
27965submitting it.")
27966 (license license:expat)))
27967
27968(define-public python-mpv-jsonipc
27969 (package
27970 (name "python-mpv-jsonipc")
27971 (version "1.2.0")
27972 (source
27973 (origin
27974 (method url-fetch)
27975 (uri (pypi-uri "python-mpv-jsonipc" version))
27976 (sha256
27977 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27978 (build-system pyproject-build-system)
27979 (arguments (list #:tests? #f)) ;No test suite.
27980 (native-inputs (list python-setuptools python-wheel))
27981 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27982 (synopsis "Python API to control MPV using JSON IPC")
27983 (description "Python MPV JSONIPC implements an interface similar to
27984python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27985 (license license:asl2.0)))
27986
27987(define-public python-jellyfin-apiclient
27988 (package
27989 (name "python-jellyfin-apiclient")
27990 (version "1.11.0")
27991 (source
27992 (origin
27993 (method git-fetch)
27994 (uri
27995 (git-reference
27996 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27997 (commit (string-append "v" version))))
27998 (sha256
27999 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
28000 (build-system pyproject-build-system)
28001 (native-inputs (list python-setuptools python-pytest python-wheel))
28002 (propagated-inputs (list python-certifi python-requests python-urllib3
28003 python-websocket-client))
28004 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
28005 (synopsis "Python API client for Jellyfin")
28006 (description "The Jellyfin ApiClient Python package makes it possible
28007to use the Jellyfin API from Python. It was extracted from the Jellyfin
28008Kodi plugin.")
28009 (license license:gpl3+)))
28010
28011(define-public python-parso
28012 (package
28013 (name "python-parso")
28014 (version "0.8.5")
28015 (source
28016 (origin
28017 (method url-fetch)
28018 (uri (pypi-uri "parso" version))
28019 (sha256
28020 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
28021 (build-system pyproject-build-system)
28022 (native-inputs
28023 (list python-pytest
28024 python-setuptools))
28025 (home-page "https://github.com/davidhalter/parso")
28026 (synopsis "Python Parser")
28027 (description "Parso is a Python parser that supports error recovery and
28028round-trip parsing for different Python versions (in multiple Python versions).
28029Parso is also able to list multiple syntax errors in your Python file.")
28030 (license license:expat)))
28031
28032(define-public python-async-generator
28033 (package
28034 (name "python-async-generator")
28035 (version "1.10")
28036 (source
28037 (origin
28038 (method url-fetch)
28039 (uri (pypi-uri "async_generator" version))
28040 (sha256
28041 (base32
28042 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
28043 (build-system pyproject-build-system)
28044 (native-inputs
28045 (list python-pytest python-setuptools))
28046 (home-page "https://github.com/python-trio/async_generator")
28047 (synopsis "Async generators and context managers for Python 3.5+")
28048 (description "@code{async_generator} back-ports Python 3.6's native async
28049generators and Python 3.7's context managers into Python 3.5.")
28050 ;; Dual licensed.
28051 (license (list license:expat license:asl2.0))))
28052
28053(define-public python-async-timeout
28054 (package
28055 (name "python-async-timeout")
28056 (version "5.0.1")
28057 (source
28058 (origin
28059 (method url-fetch)
28060 (uri (pypi-uri "async_timeout" version))
28061 (sha256
28062 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
28063 (build-system pyproject-build-system)
28064 (native-inputs
28065 (list python-pytest
28066 python-pytest-asyncio
28067 python-setuptools
28068 python-wheel))
28069 (home-page "https://github.com/aio-libs/async-timeout")
28070 (synopsis "Timeout context manager for asyncio programs")
28071 (description
28072 "@code{async-timeout} provides a timeout timeout context manager
28073compatible with @code{asyncio}.")
28074 (license license:asl2.0)))
28075
28076(define-public python-async-timeout-4
28077 (package
28078 (inherit python-async-timeout)
28079 (name "python-async-timeout")
28080 (version "4.0.3")
28081 (source
28082 (origin
28083 (method url-fetch)
28084 (uri (pypi-uri "async-timeout" version))
28085 (sha256
28086 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
28087
28088(define-public python-glob2
28089 (package
28090 (name "python-glob2")
28091 (version "0.7")
28092 (source
28093 (origin
28094 (method git-fetch)
28095 (uri (git-reference
28096 (url "https://github.com/miracle2k/python-glob2")
28097 (commit (string-append "v" version))))
28098 (file-name (git-file-name name version))
28099 (sha256
28100 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
28101 (build-system pyproject-build-system)
28102 (arguments
28103 (list
28104 #:phases
28105 #~(modify-phases %standard-phases
28106 (add-after 'unpack 'patch-tests-for-pytest8
28107 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
28108 (lambda _
28109 (substitute* "test.py"
28110 (("setup\\(") "setup_method(")
28111 (("teardown\\(") "teardown_method("))
28112 (rename-file "test.py" "glob2_test.py"))))))
28113 (native-inputs (list python-pytest python-setuptools))
28114 (home-page "https://github.com/miracle2k/python-glob2/")
28115 (synopsis "Extended Version of the python buildin glob module")
28116 (description "This is an extended version of the Python
28117@url{http://docs.python.org/library/glob.html, built-in glob module} which
28118adds:
28119
28120@itemize
28121@item The ability to capture the text matched by glob patterns, and return
28122those matches alongside the file names.
28123@item A recursive @code{**} globbing syntax, akin for example to the
28124@code{globstar} option of Bash.
28125@item The ability to replace the file system functions used, in order to glob
28126on virtual file systems.
28127@item Compatible with Python 2 and Python 3 (tested with 3.3).
28128@end itemize
28129
28130Glob2 currently based on the glob code from Python 3.3.1.")
28131 (license license:bsd-2)))
28132
28133(define-public python-gipc
28134 (package
28135 (name "python-gipc")
28136 (version "1.8.0")
28137 (source
28138 (origin
28139 (method git-fetch)
28140 (uri (git-reference
28141 (url "https://github.com/jgehrcke/gipc")
28142 (commit version)))
28143 (file-name (git-file-name name version))
28144 (sha256
28145 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
28146 (build-system pyproject-build-system)
28147 (arguments
28148 (list
28149 #:phases
28150 #~(modify-phases %standard-phases
28151 (add-after 'unpack 'adjust-for-pytest-8
28152 (lambda _
28153 (substitute* "test/test_gipc.py"
28154 (("def setup") "def setup_method")
28155 (("def teardown") "def teardown_method")))))))
28156 (native-inputs
28157 (list python-pytest
28158 python-setuptools))
28159 (propagated-inputs
28160 (list python-gevent))
28161 (home-page "https://gehrcke.de/gipc/")
28162 (synopsis "Child process management in the context of gevent")
28163 (description
28164 "Usage of Python's multiprocessing package in a gevent-powered
28165application may raise problems. With @code{gipc}, process-based child
28166processes can safely be created anywhere within a gevent-powered
28167application.")
28168 (license license:expat)))
28169
28170(define-public python-beautifultable
28171 (package
28172 (name "python-beautifultable")
28173 (version "1.1.0")
28174 (source
28175 (origin
28176 (method git-fetch)
28177 (uri (git-reference
28178 (url "https://github.com/pri22296/beautifultable")
28179 (commit (string-append "v" version))))
28180 (file-name (git-file-name name version))
28181 (sha256
28182 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
28183 (build-system pyproject-build-system)
28184 (arguments
28185 (list
28186 ;; Fails because a None is converted to nan, probably due to Pandas 3.
28187 #:test-flags
28188 #~(list "-k" "not test_df_export_scenario2" "test.py")))
28189 (native-inputs (list python-pandas
28190 python-pytest
28191 python-setuptools))
28192 (propagated-inputs (list python-wcwidth))
28193 (home-page "https://github.com/pri22296/beautifultable")
28194 (synopsis "Print ASCII tables for terminals")
28195 (description
28196 "@code{python-beautifultable} provides a class for easily printing
28197tabular data in a visually appealing ASCII format to a terminal.
28198
28199Features include, but are not limited to:
28200@itemize
28201@item Full customization of the look and feel of the table
28202@item Row and column accessors.
28203@item Full support for colors using ANSI sequences or any library.
28204@item Plenty of predefined styles and option to create custom ones.
28205@item Support for Unicode characters.
28206@item Supports streaming table when data is slow to retrieve.
28207@end itemize")
28208 (license license:expat)))
28209
28210(define-public python-globber
28211 (package
28212 (name "python-globber")
28213 (version "0.2.1")
28214 (source
28215 (origin
28216 (method git-fetch)
28217 (uri (git-reference
28218 (url "https://github.com/asharov/globber")
28219 (commit version)))
28220 (file-name (git-file-name name version))
28221 (sha256
28222 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
28223 (build-system pyproject-build-system)
28224 (native-inputs (list python-pytest python-setuptools))
28225 (home-page "https://github.com/asharov/globber")
28226 (synopsis "Library for string matching with glob patterns")
28227 (description
28228 "Globber is a Python library for matching file names against glob patterns.
28229In contrast to other glob-matching libraries, it matches arbitrary strings and
28230doesn't require the matched names to be existing files. In addition, it
28231supports the globstar @code{**} operator to match an arbitrary number of
28232path components.")
28233 (license license:asl2.0)))
28234
28235;; XXX: Not maintained since 2021.
28236(define-public python-git-hammer
28237 (package
28238 (name "python-git-hammer")
28239 (version "0.3.2")
28240 (source
28241 (origin
28242 (method git-fetch)
28243 (uri (git-reference
28244 (url "https://github.com/asharov/git-hammer")
28245 (commit version)))
28246 (file-name (git-file-name name version))
28247 (sha256
28248 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
28249 (build-system pyproject-build-system)
28250 (arguments
28251 (list
28252 #:phases
28253 #~(modify-phases %standard-phases
28254 (add-after 'unpack 'relax-requirements
28255 (lambda _
28256 (substitute* "setup.py"
28257 (("matplotlib <3.1") "matplotlib")))))))
28258 (native-inputs
28259 (list python-pytest
28260 python-setuptools))
28261 (propagated-inputs
28262 (list python-beautifultable
28263 python-dateutil
28264 python-gitpython
28265 python-globber
28266 python-matplotlib
28267 python-sqlalchemy
28268 python-sqlalchemy-utils))
28269 (home-page "https://github.com/asharov/git-hammer")
28270 (synopsis "Provide statistics for git repositories")
28271 (description
28272 "Git Hammer is a statistics tool for projects in git repositories. Its major
28273feature is tracking the number of lines authored by each person for every
28274commit, but it also includes some other useful statistics.")
28275 (license license:asl2.0)))
28276
28277(define-public python-gitignore-parser
28278 (package
28279 (name "python-gitignore-parser")
28280 (version "0.1.13")
28281 (source
28282 (origin
28283 (method git-fetch)
28284 (uri (git-reference
28285 (url "https://github.com/mherrmann/gitignore_parser")
28286 (commit (string-append "v" version))))
28287 (file-name (git-file-name name version))
28288 (sha256
28289 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
28290 (build-system pyproject-build-system)
28291 (arguments (list #:test-backend #~'unittest))
28292 (native-inputs (list python-setuptools))
28293 (home-page "https://github.com/mherrmann/gitignore_parser")
28294 (synopsis "Spec-compliant gitignore parser for Python")
28295 (description
28296 "This package provides a spec-compliant gitignore parser for Python.")
28297 (license license:expat)))
28298
28299(define-public python-fusepy
28300 (package
28301 (name "python-fusepy")
28302 (version "2.0.4")
28303 (source
28304 (origin
28305 (method git-fetch)
28306 (uri (git-reference
28307 (url "https://github.com/fusepy/fusepy")
28308 (commit (string-append "v" version))))
28309 (file-name (git-file-name name version))
28310 (sha256
28311 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
28312 (build-system pyproject-build-system)
28313 (arguments
28314 (list
28315 #:tests? #f ; No formalized tests.
28316 #:phases
28317 #~(modify-phases %standard-phases
28318 (add-before 'build 'set-library-file-name
28319 (lambda* (#:key inputs #:allow-other-keys)
28320 (substitute* "fuse.py"
28321 (("find_library\\('fuse'\\)")
28322 (format #f "~s"
28323 (search-input-file inputs "lib/libfuse.so")))))))))
28324 (native-inputs (list python-setuptools))
28325 (propagated-inputs (list fuse-2))
28326 (home-page "https://github.com/fusepy/fusepy")
28327 (synopsis "Simple ctypes bindings for FUSE")
28328 (description
28329 "Python module that provides a simple interface to FUSE and MacFUSE. The
28330binding is created using the standard @code{ctypes} library.")
28331 (license license:isc)))
28332
28333(define-public pybind11
28334 (package
28335 (name "pybind11")
28336 (version "3.0.4")
28337 (source (origin
28338 (method git-fetch)
28339 (uri (git-reference
28340 (url "https://github.com/pybind/pybind11")
28341 (commit (string-append "v" version))))
28342 (sha256
28343 (base32
28344 "1ad9215jz078al84h43f6fhwg80d7sjdc72r8hi3n419x8hag4j1"))
28345 (file-name (git-file-name name version))))
28346 (build-system cmake-build-system)
28347 (arguments
28348 (list
28349 ;; TODO: Rewrite package definition with pyproject, I had issues to
28350 ;; enable tests and install includes, see the discussion in
28351 ;; guix/guix!4696 where it was initially proposed.
28352 #:configure-flags
28353 #~(list "-DPYBIND11_NOPYTHON=OFF"
28354 "-DPYBIND11_PYTEST_ARGS=-v"
28355 "-DPYBIND11_TEST_SMART_HOLDER=ON")
28356 #:phases
28357 #~(modify-phases %standard-phases
28358 (add-after 'install 'build-python-library
28359 (lambda _
28360 (with-directory-excursion "../source"
28361 (setenv "PYBIND11_USE_CMAKE" "yes")
28362 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
28363 "--prefix" #$output "."))))
28364 (replace 'check
28365 (lambda* (#:key tests? #:allow-other-keys)
28366 (when tests?
28367 ;; Steps are taken from <.github/workflows/ci.yml>.
28368 (invoke "cmake" "--build" "."
28369 "--target" "pytest")
28370 (invoke "cmake" "--build" "."
28371 "--target" "cpptest")
28372 (invoke "cmake" "--build" "."
28373 "--target" "test_cmake_build")
28374 (invoke "cmake" "--build" "."
28375 "--target" "test_cross_module_rtti")))))))
28376 (inputs (list boost))
28377 (native-inputs
28378 (list catch2-2
28379 eigen
28380 python-pytest
28381 python-wrapper
28382 python-scikit-build-core-bootstrap))
28383 (home-page "https://github.com/pybind/pybind11/")
28384 (synopsis "Seamless operability between C++11 and Python")
28385 (description
28386 "@code{pybind11} is a lightweight header-only library that exposes C++
28387types in Python and vice versa, mainly to create Python bindings of existing
28388C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28389library: to minimize boilerplate code in traditional extension modules by
28390inferring type information using compile-time introspection.")
28391 (license license:bsd-3)))
28392
28393(define-public pybind11-2
28394 (package
28395 (inherit pybind11)
28396 (name "pybind11")
28397 (version "2.13.6")
28398 (source
28399 (origin
28400 (method git-fetch)
28401 (uri (git-reference
28402 (url "https://github.com/pybind/pybind11")
28403 (commit (string-append "v" version))))
28404 (file-name (git-file-name name version))
28405 (sha256
28406 (base32 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))))
28407 (build-system cmake-build-system)
28408 (arguments
28409 (list
28410 #:configure-flags
28411 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28412 (assoc-ref %build-inputs "catch2")
28413 "/include/catch"))
28414 #:modules '((guix build cmake-build-system)
28415 ((guix build gnu-build-system) #:prefix gnu:)
28416 (guix build utils))
28417 #:phases
28418 #~(modify-phases %standard-phases
28419 (replace 'check
28420 (lambda args
28421 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28422 (add-after 'install 'install-python
28423 (lambda _
28424 (with-directory-excursion "../source"
28425 (setenv "PYBIND11_USE_CMAKE" "yes")
28426 (invoke "python" "setup.py" "install"
28427 "--single-version-externally-managed"
28428 "--root=/"
28429 (string-append "--prefix=" #$output))))))))
28430 (native-inputs
28431 (list catch2-1
28432 eigen
28433 python-pytest
28434 python-setuptools
28435 python-wrapper))
28436 (inputs '())))
28437
28438(define-public python-pooch
28439 (package
28440 (name "python-pooch")
28441 (version "1.9.0")
28442 (source
28443 (origin
28444 (method git-fetch)
28445 (uri (git-reference
28446 (url "https://github.com/fatiando/pooch")
28447 (commit (string-append "v" version))))
28448 (file-name (git-file-name name version))
28449 (sha256
28450 (base32 "0k8s9npjym80wpac77fvf1vnx5qm5c2pr7x39j8hh0cglfxmgii8"))))
28451 (build-system pyproject-build-system)
28452 (arguments
28453 (list
28454 #:test-flags #~(list "-m" "not network")))
28455 (native-inputs
28456 (list python-pytest
28457 python-pytest-httpserver
28458 python-pytest-localftpserver
28459 python-setuptools
28460 python-setuptools-scm))
28461 (propagated-inputs
28462 (list python-packaging
28463 python-platformdirs
28464 python-requests))
28465 (home-page "https://github.com/fatiando/pooch")
28466 (synopsis "Manage your Python library's sample data files")
28467 (description
28468 "Pooch manages your Python library's sample data files: it automatically
28469downloads and stores them in a local directory, with support for versioning
28470and corruption checks.")
28471 (license license:bsd-3)))
28472
28473(define-public python-fasteners
28474 (package
28475 (name "python-fasteners")
28476 (version "0.20")
28477 (source (origin
28478 ;; No tests in the pypi tarball
28479 (method git-fetch)
28480 (uri (git-reference
28481 (url "https://github.com/harlowja/fasteners")
28482 (commit version)))
28483 (file-name (git-file-name name version))
28484 (sha256
28485 (base32
28486 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28487 (build-system pyproject-build-system)
28488 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28489 python-setuptools python-pytest))
28490 (home-page "https://github.com/harlowja/fasteners")
28491 (synopsis "Python package that provides useful locks")
28492 (description
28493 "This package provides a Python program that provides following locks:
28494
28495@itemize
28496@item Locking decorator
28497@item Reader-writer locks
28498@item Inter-process locks
28499@item Generic helpers
28500@end itemize\n")
28501 (license license:asl2.0)))
28502
28503(define-public python-requests-file
28504 (package
28505 (name "python-requests-file")
28506 (version "3.0.1")
28507 (source
28508 (origin
28509 (method git-fetch)
28510 (uri (git-reference
28511 (url "https://codeberg.org/dashea/requests-file")
28512 (commit version)))
28513 (file-name (git-file-name name version))
28514 (sha256
28515 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28516 (build-system pyproject-build-system)
28517 (native-inputs (list python-pytest python-setuptools))
28518 (propagated-inputs (list python-requests))
28519 (home-page "https://codeberg.org/dashea/requests-file")
28520 (synopsis "File transport adapter for Requests")
28521 (description
28522 "Requests-File is a transport adapter for use with the Requests Python
28523library to allow local file system access via @code{file://} URLs.")
28524 (license license:asl2.0)))
28525
28526(define-public python-identify
28527 (package
28528 (name "python-identify")
28529 (version "2.6.14")
28530 (source
28531 (origin
28532 ;; There are no tests in the PyPI tarball.
28533 (method git-fetch)
28534 (uri (git-reference
28535 (url "https://github.com/chriskuehl/identify")
28536 (commit (string-append "v" version))))
28537 (file-name (git-file-name name version))
28538 (sha256
28539 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28540 (build-system pyproject-build-system)
28541 (native-inputs
28542 (list python-pytest
28543 python-setuptools
28544 python-ukkonen))
28545 (home-page "https://github.com/chriskuehl/identify")
28546 (synopsis "File identification library for Python")
28547 (description
28548 "@code{identify} is a file identification library for Python. Given
28549a file (or some information about a file), return a set of standardized tags
28550identifying what the file is.")
28551 (license license:expat)))
28552
28553(define-public python-nodeenv
28554 (package
28555 (name "python-nodeenv")
28556 (version "1.8.0")
28557 (source
28558 (origin
28559 ;; There's no tarball in PyPI.
28560 (method git-fetch)
28561 (uri (git-reference
28562 (url "https://github.com/ekalinin/nodeenv")
28563 (commit version)))
28564 (file-name (git-file-name name version))
28565 (sha256
28566 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28567 (build-system pyproject-build-system)
28568 (arguments
28569 (list #:test-flags
28570 #~(list "-k" (string-append
28571 "not test_smoke"
28572 " and not test_smoke_n_system_special_chars"))))
28573 (native-inputs
28574 (list python-mock
28575 python-pytest
28576 python-setuptools
28577 python-wheel))
28578 (home-page "https://ekalinin.github.io/nodeenv/")
28579 (synopsis "Create isolated node.js environments")
28580 (description
28581 "Nodeenv (node.js virtual environment) is a tool to create isolated
28582node.js environments. It creates an environment that has its own installation
28583directories, that doesn't share libraries with other node.js virtual
28584environments.")
28585 (license license:bsd-3)))
28586
28587(define-public python-pynamecheap
28588 (package
28589 (name "python-pynamecheap")
28590 (version "0.0.3")
28591 (source
28592 (origin
28593 (method url-fetch)
28594 (uri (pypi-uri "PyNamecheap" version))
28595 (sha256
28596 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28597 (build-system pyproject-build-system)
28598 (arguments (list #:tests? #f)) ; No tests.
28599 (native-inputs (list python-setuptools))
28600 (propagated-inputs (list python-requests))
28601 (home-page "https://github.com/Bemmu/PyNamecheap")
28602 (synopsis "Namecheap API client in Python")
28603 (description
28604 "PyNamecheap is a Namecheap API client in Python.")
28605 (license license:expat)))
28606
28607(define-public python-pynput
28608 (package
28609 (name "python-pynput")
28610 (version "1.8.1")
28611 (source
28612 (origin
28613 (method git-fetch)
28614 (uri (git-reference
28615 (url "https://github.com/moses-palmer/pynput")
28616 (commit (string-append "v" version))))
28617 (file-name (git-file-name name version))
28618 (sha256
28619 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28620 (build-system pyproject-build-system)
28621 (arguments
28622 (list
28623 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28624 #:phases
28625 #~(modify-phases %standard-phases
28626 (add-after 'unpack 'relax-requirements
28627 (lambda _
28628 (substitute* "setup.py"
28629 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28630 "RUNTIME_PACKAGES"))))
28631 (add-before 'sanity-check 'start-xserver
28632 (lambda* (#:key inputs #:allow-other-keys)
28633 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28634 (system (format #f "~a :1 -screen 0 640x480x24 &"
28635 Xvfb))
28636 (setenv "DISPLAY" ":1")))))))
28637 (propagated-inputs
28638 (list python-evdev python-xlib))
28639 (native-inputs
28640 (list python-setuptools xorg-server-for-tests))
28641 (home-page "https://github.com/moses-palmer/pynput")
28642 (synopsis "Send virtual input commands")
28643 (description
28644 "This package provides tools to monitor and control user input devices in
28645Python.")
28646 (license license:lgpl3)))
28647
28648(define-public python-pynixutil
28649 (package
28650 (name "python-pynixutil")
28651 (version "0.5.0")
28652 (source
28653 (origin
28654 (method git-fetch)
28655 (uri (git-reference
28656 (url "https://github.com/nix-community/pynixutil")
28657 (commit version)))
28658 (file-name (git-file-name name version))
28659 (sha256
28660 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28661 (build-system pyproject-build-system)
28662 (arguments
28663 (list
28664 #:test-flags
28665 ;; Tests require nix in the PATH.
28666 #~(list "--ignore=tests/test_drv.py")
28667 #:phases
28668 #~(modify-phases %standard-phases
28669 (add-after 'unpack 'use-poetry-core
28670 (lambda _
28671 ;; Patch to use the core poetry API.
28672 (substitute* "pyproject.toml"
28673 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28674 (native-inputs
28675 (list python-poetry-core
28676 python-pytest))
28677 (home-page "https://github.com/nix-community/pynixutil")
28678 (synopsis "Utility functions for working with data from Nix in Python")
28679 (description
28680 "@code{pynixutil} provides functions for base32 encoding/decoding and
28681derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28682@code{drvparse()}.")
28683 (license license:expat)))
28684
28685(define-public python-dns-lexicon
28686 (package
28687 (name "python-dns-lexicon")
28688 (version "3.21.1")
28689 (source
28690 (origin
28691 (method git-fetch)
28692 (uri (git-reference
28693 (url "https://github.com/dns-lexicon/dns-lexicon")
28694 (commit (string-append "v" version))))
28695 (file-name (git-file-name name version))
28696 (sha256
28697 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28698 (build-system pyproject-build-system)
28699 (arguments
28700 (list
28701 ;; Integration tests require network access.
28702 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28703 #:phases
28704 #~(modify-phases %standard-phases
28705 (add-before 'check 'configure-tests
28706 (lambda _
28707 (setenv "HOME" (getcwd)))))))
28708 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28709 (propagated-inputs
28710 (list python-beautifulsoup4
28711 python-cryptography
28712 python-dnspython
28713 python-pyotp
28714 python-pyyaml
28715 python-requests
28716 python-tldextract))
28717 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28718 (synopsis "Manipulate DNS records on various DNS providers")
28719 (description
28720 "Lexicon provides a way to manipulate DNS records on multiple DNS
28721providers in a standardized way. It has a CLI but it can also be used as a
28722Python library. It was designed to be used in automation, specifically with
28723Let's Encrypt.")
28724 (license license:expat)))
28725
28726(define-public python-cfgv
28727 (package
28728 (name "python-cfgv")
28729 (version "3.4.0")
28730 (source
28731 (origin
28732 ;; There are no tests in the PyPI tarball.
28733 (method git-fetch)
28734 (uri (git-reference
28735 (url "https://github.com/asottile/cfgv")
28736 (commit (string-append "v" version))))
28737 (file-name (git-file-name name version))
28738 (sha256
28739 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28740 (build-system pyproject-build-system)
28741 (native-inputs
28742 (list python-pytest python-setuptools python-wheel))
28743 (home-page "https://github.com/asottile/cfgv")
28744 (synopsis "Configuration validation library")
28745 (description
28746 "This library helps to validate configuration files and produce human
28747readable error messages.")
28748 (license license:expat)))
28749
28750(define-public python-commandlines
28751 (package
28752 (name "python-commandlines")
28753 (version "0.4.1")
28754 (source
28755 (origin
28756 (method git-fetch)
28757 (uri (git-reference
28758 (url "https://github.com/chrissimpkins/commandlines")
28759 (commit (string-append "v" version))))
28760 (file-name (git-file-name name version))
28761 (sha256
28762 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28763 (build-system pyproject-build-system)
28764 (native-inputs (list python-pytest python-setuptools))
28765 (home-page "https://github.com/chrissimpkins/commandlines")
28766 (synopsis "Command line argument to object parsing library")
28767 (description
28768 "@code{Commandlines} is a Python library for command line application
28769development that supports command line argument parsing, command string
28770validation testing and application logic.")
28771 (license license:expat)))
28772
28773;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28774;; python-numba. They have a very inflexible relationship.
28775(define-public python-numba
28776 (package
28777 (name "python-numba")
28778 (version "0.66.0")
28779 (source
28780 (origin
28781 (method url-fetch)
28782 (uri (pypi-uri "numba" version))
28783 (sha256
28784 (base32
28785 "0qyk70nfvhxqxm1vz1qq072n9jvpl6hab8ymlslmxh161qxfc05r"))))
28786 (build-system pyproject-build-system)
28787 (arguments
28788 (list
28789 ;; tests: 10743 tests (skipped=699, expected failures=23)
28790 #:test-backend #~'custom
28791 #:test-flags
28792 ;; Check <buildscripts> directory for more build/tests examples.
28793 #~(list "-m" "numba.runtests"
28794 "--exclude-tags='long_running'"
28795 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28796 "-b"
28797 "-v"
28798 "--"
28799 "numba.tests")
28800 #:phases
28801 #~(modify-phases %standard-phases
28802 (add-after 'unpack 'disable-failing-tests
28803 (lambda _
28804 ;; This expects to be able to run pip.
28805 (delete-file "numba/tests/test_sysinfo.py")
28806 ;; This fails nondeterministically, possibly depending on CPU.
28807 ;; https://github.com/numba/numba/issues/8282.
28808 (substitute* "numba/tests/test_function_type.py"
28809 (("def test_wrapper_address_protocol_libm")
28810 "def disabled_test_wrapper_address_protocol_libm"))
28811 (substitute* "numba/tests/test_caching.py"
28812 ;; RuntimeError: cannot cache function 'simple_usecase': no
28813 ;; locator available for file
28814 (("def test_non_creatable_pycache")
28815 "def __off_test_non_creatable_pycache")
28816 (("def test_non_writable_pycache")
28817 "def __off_test_non_writable_pycache")
28818 ;; AssertionError: None is not an instance of <class
28819 ;; 'numba.core.caching.UserWideCacheLocator'>
28820 (("def test_frozen")
28821 "def __off_test_frozen"))))
28822 (add-before 'build 'disable-proprietary-features
28823 (lambda _
28824 (setenv "NUMBA_DISABLE_HSA" "1")
28825 (setenv "NUMBA_DISABLE_CUDA" "1")))
28826 (add-before 'check 'pre-check
28827 (lambda _
28828 (setenv "HOME" "/tmp")
28829 ;; XXX: Something is wrong with the PYTHONPATH when running the
28830 ;; tests from the build directory, as it complains about not
28831 ;; being able to import certain modules.
28832 (delete-file-recursively "numba"))))))
28833 (native-inputs
28834 (list python-setuptools))
28835 (propagated-inputs
28836 (list python-llvmlite
28837 python-numpy))
28838 (home-page "https://numba.pydata.org")
28839 (synopsis "Compile Python code using LLVM")
28840 (description "Numba gives you the power to speed up your applications with
28841high performance functions written directly in Python. With a few
28842annotations, array-oriented and math-heavy Python code can be just-in-time
28843compiled to native machine instructions, similar in performance to C, C++ and
28844Fortran, without having to switch languages or Python interpreters.
28845
28846Numba works by generating optimized machine code using the LLVM compiler
28847infrastructure at import time, runtime, or statically (using the included pycc
28848tool).")
28849 (license license:bsd-3)))
28850
28851(define-public python-numcodecs
28852 (package
28853 (name "python-numcodecs")
28854 (version "0.15.1") ;newer version needs c-blosc 1.26+
28855 (source
28856 (origin
28857 (method git-fetch)
28858 (uri (git-reference
28859 (url "https://github.com/zarr-developers/numcodecs")
28860 (commit (string-append "v" version))))
28861 (file-name (git-file-name name version))
28862 (sha256
28863 (base32 "19i30k4zn6rjqlrfk20yh75r1di3j7mli2mn9n3pyxmwaq7hiasz"))
28864 (modules '((guix build utils)))
28865 (snippet
28866 '(begin
28867 ;; Only add CFLAGS on architectures where they are supported
28868 (substitute* "setup.py"
28869 (("import sys")
28870 "import sys\nimport platform")
28871 (("os\\.name == 'posix'")
28872 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28873 " os.name + platform.machine() == 'posixx86'")))
28874 (delete-file-recursively "c-blosc")))))
28875 (build-system pyproject-build-system)
28876 (arguments
28877 (list
28878 ;; tests: 714 passed, 39 skipped, 36 xfailed, 20 warnings
28879 #:phases
28880 #~(modify-phases %standard-phases
28881 (add-after 'unpack 'disable-avx2
28882 (lambda _
28883 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28884 (add-after 'unpack 'unbundle
28885 (lambda _
28886 (substitute* "setup.py"
28887 (("sources=sources \\+ blosc_sources,")
28888 "sources=sources,")
28889 (("extra_compile_args=extra_compile_args")
28890 "extra_compile_args=list(base_compile_args)")
28891 (("'numcodecs.zstd',")
28892 "'numcodecs.zstd', libraries=['zstd'], ")
28893 (("'numcodecs.lz4',")
28894 "'numcodecs.lz4', libraries=['lz4'], ")
28895 (("'numcodecs.blosc',")
28896 "'numcodecs.blosc', libraries=['blosc'], "))))
28897 (add-before 'build 'substitute-git-submodules
28898 (lambda _
28899 (symlink #$(package-source (this-package-input "c-blosc"))
28900 "c-blosc")))
28901 (replace 'check
28902 (lambda* (#:key tests? test-flags #:allow-other-keys)
28903 (with-directory-excursion #$output
28904 (apply invoke "pytest" "-vv" test-flags)
28905 (delete-file-recursively ".pytest_cache")))))))
28906 (native-inputs
28907 (list python-cython
28908 python-py-cpuinfo
28909 python-pytest
28910 python-setuptools
28911 python-setuptools-scm))
28912 (inputs
28913 (list c-blosc
28914 lz4
28915 zlib
28916 (list zstd "lib")))
28917 (propagated-inputs
28918 (list python-deprecated
28919 python-numpy
28920 ;; [optional]
28921 python-msgpack))
28922 (home-page "https://github.com/zarr-developers/numcodecs")
28923 (synopsis "Buffer compression and transformation codecs")
28924 (description
28925 "This Python package provides buffer compression and transformation
28926codecs for use in data storage and communication applications.")
28927 (license license:expat)))
28928
28929(define-public python-asciitree
28930 (package
28931 (name "python-asciitree")
28932 (version "0.3.3")
28933 (source
28934 (origin
28935 (method git-fetch)
28936 (uri (git-reference
28937 (url "https://github.com/mbr/asciitree")
28938 (commit version)))
28939 (file-name (git-file-name name version))
28940 (sha256
28941 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28942 (build-system pyproject-build-system)
28943 (native-inputs (list python-pytest python-setuptools))
28944 (home-page "https://github.com/mbr/asciitree")
28945 (synopsis "Draws ASCII trees")
28946 (description "This package draws tree structures using characters.")
28947 (license license:expat)))
28948
28949(define-public python-dill
28950 (package
28951 (name "python-dill")
28952 (version "0.4.1")
28953 (source
28954 (origin
28955 (method git-fetch)
28956 (uri (git-reference
28957 (url "https://github.com/uqfoundation/dill")
28958 (commit version)))
28959 (file-name (git-file-name name version))
28960 (sha256
28961 (base32 "09ig6820sd68cjixl5vkwkwvvgdii8qhaikc1rxhabhwxfymc7v2"))))
28962 (build-system pyproject-build-system)
28963 (arguments
28964 (list #:test-backend #~'custom
28965 #:test-flags #~(list "dill/tests/__main__.py")))
28966 (native-inputs
28967 (list python-setuptools))
28968 (home-page "http://dill.rtfd.io/")
28969 (synopsis "Serialize all of Python")
28970 (description "Dill extends Python's @code{pickle} module for serializing
28971and de-serializing Python objects to the majority of the built-in Python
28972types. Dill provides the user the same interface as the @code{pickle} module,
28973and also includes some additional features. In addition to pickling Python
28974objects, @code{dill} provides the ability to save the state of an interpreter
28975session in a single command. Hence, it would be feasible to save a
28976interpreter session, close the interpreter, ship the pickled file to another
28977computer, open a new interpreter, unpickle the session and thus continue from
28978the saved state of the original interpreter session.")
28979 (license license:bsd-3)))
28980
28981(define-public python-multiprocess
28982 (package
28983 (name "python-multiprocess")
28984 (version "0.70.18")
28985 (source
28986 (origin
28987 (method url-fetch)
28988 (uri (pypi-uri "multiprocess" version))
28989 (sha256
28990 (base32
28991 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28992 (build-system pyproject-build-system)
28993 (arguments
28994 (list
28995 #:phases
28996 #~(modify-phases %standard-phases
28997 (add-after 'unpack 'disable-broken-tests
28998 (lambda* (#:key inputs #:allow-other-keys)
28999 ;; The "wait_result" and "shared_memory..." tests are broken as
29000 ;; there is no keyboard interrupt.
29001 ;;
29002 ;; The "preload_resources" test fails as it cannot find
29003 ;; mp_preload.py.
29004 (substitute*
29005 (string-append "py" (python-version
29006 (assoc-ref inputs "python"))
29007 "/multiprocess/tests/__init__.py")
29008 (("^(.*)def test_(\
29009wait_result|\
29010shared_memory_SharedMemoryServer_ignores_sigint|\
29011preload_resources\
29012)" line indent)
29013 (string-append indent
29014 "@unittest.skip(\"Disabled by Guix\")\n"
29015 line)))))
29016 (replace 'check
29017 (lambda* (#:key tests? #:allow-other-keys)
29018 (if tests?
29019 (invoke "python" "-m" "multiprocess.tests")
29020 (format #t "test suite not run~%")))))))
29021 (propagated-inputs
29022 (list python-dill))
29023 (native-inputs (list python-setuptools))
29024 (home-page "https://pypi.org/project/multiprocess/")
29025 (synopsis "Multiprocessing and multithreading in Python")
29026 (description
29027 "This package is a fork of the multiprocessing Python package, a package
29028which supports the spawning of processes using the API of the standard
29029library's @code{threading} module.")
29030 (license license:bsd-3)))
29031
29032(define-public python-multiprocessing-on-dill
29033 (package
29034 (name "python-multiprocessing-on-dill")
29035 (version "3.5.0a4")
29036 (source (origin
29037 (method url-fetch)
29038 (uri (pypi-uri "multiprocessing_on_dill" version))
29039 (sha256
29040 (base32
29041 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
29042 (build-system pyproject-build-system)
29043 (propagated-inputs (list python-dill))
29044 (native-inputs (list python-pytest python-setuptools python-wheel))
29045 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
29046 (synopsis "Multiprocessing using dill instead of pickle")
29047 (description
29048 "This package provides a friendly fork of multiprocessing which uses dill
29049instead of pickle.")
29050 (license license:psfl)))
29051
29052(define-public python-cytoolz
29053 (package
29054 (name "python-cytoolz")
29055 (version "1.0.1")
29056 (source
29057 (origin
29058 (method url-fetch)
29059 (uri (pypi-uri "cytoolz" version))
29060 (sha256
29061 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
29062 (modules '((guix build utils)))
29063 (snippet
29064 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
29065 (build-system pyproject-build-system)
29066 (arguments
29067 (list #:test-flags #~(list "--pyargs" "cytoolz")))
29068 (native-inputs
29069 (list python-cython
29070 python-pytest
29071 python-setuptools
29072 python-wheel))
29073 (propagated-inputs
29074 (list python-toolz))
29075 (home-page "https://github.com/pytoolz/cytoolz")
29076 (synopsis "High performance functional utilities")
29077 (description
29078 "The cytoolz package implements the same API as provided by toolz. The
29079main differences are that @code{cytoolz} is faster and cytoolz offers a C API
29080that is accessible to other projects developed in Cython.")
29081 (license license:bsd-3)))
29082
29083(define-public python-cloudpickle
29084 (package
29085 (name "python-cloudpickle")
29086 (version "3.1.0")
29087 (source
29088 (origin
29089 ;; Archive on pypi does not include test infrastructure.
29090 (method git-fetch)
29091 (uri (git-reference
29092 (url "https://github.com/cloudpipe/cloudpickle")
29093 (commit (string-append "v" version))))
29094 (file-name (git-file-name name version))
29095 (sha256
29096 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
29097 (build-system pyproject-build-system)
29098 (native-inputs
29099 (list python-flit-core
29100 python-psutil
29101 python-pytest))
29102 (home-page "https://github.com/cloudpipe/cloudpickle")
29103 (synopsis "Extended pickling support for Python objects")
29104 (description
29105 "Cloudpickle makes it possible to serialize Python constructs not
29106supported by the default pickle module from the Python standard library. It
29107is especially useful for cluster computing where Python expressions are
29108shipped over the network to execute on remote hosts, possibly close to the
29109data.")
29110 (license license:bsd-3)))
29111
29112(define-public python-locket
29113 (package
29114 (name "python-locket")
29115 (version "1.0.0")
29116 (source
29117 (origin
29118 (method git-fetch)
29119 (uri (git-reference
29120 (url "https://github.com/mwilliamson/locket.py")
29121 (commit version)))
29122 (file-name (git-file-name name version))
29123 (sha256
29124 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
29125 (build-system pyproject-build-system)
29126 ;; XXX: Requires python-spur, which requires another version of
29127 ;; python-paramiko.
29128 (arguments (list #:tests? #f))
29129 (native-inputs (list python-setuptools))
29130 (home-page "https://github.com/mwilliamson/locket.py")
29131 (synopsis "File-based locks for Python")
29132 (description
29133 "Locket implements a lock that can be used by multiple processes provided
29134they use the same path.")
29135 (license license:bsd-2)))
29136
29137(define-public python-loky
29138 (package
29139 (name "python-loky")
29140 (version "3.5.6")
29141 (source
29142 (origin
29143 (method git-fetch)
29144 (uri (git-reference
29145 (url "https://github.com/joblib/loky")
29146 (commit version)))
29147 (file-name (git-file-name name version))
29148 (sha256
29149 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
29150 (build-system pyproject-build-system)
29151 (arguments
29152 (list
29153 #:test-flags
29154 #~(list "-k" (string-join
29155 (list
29156 ;; Requires process control.
29157 "not (test_kill_process_tree"
29158 ;; Hardware dependent tests.
29159 "test_only_physical_cores_error"
29160 ;; Depends on previous results.
29161 "test_wait_result)")
29162 " or "))))
29163 (native-inputs
29164 (list python-packaging
29165 python-psutil
29166 python-pytest
29167 python-setuptools))
29168 (propagated-inputs
29169 (list python-cloudpickle))
29170 (home-page "https://loky.readthedocs.io")
29171 (synopsis "Robust and reusable Executor for joblib")
29172 (description
29173 "This package provides a robust implementation of
29174@code{concurrent.futures.ProcessPoolExecutor}.")
29175 (license license:bsd-3)))
29176
29177(define-public python-partd
29178 (package
29179 (name "python-partd")
29180 (version "1.4.2")
29181 (source
29182 (origin
29183 (method git-fetch)
29184 (uri (git-reference
29185 (url "https://github.com/dask/partd/")
29186 (commit version)))
29187 (file-name (git-file-name name version))
29188 (sha256
29189 (base32 "0mwcr2cy0j5j8c9n2wlrlpc5v4za2cdh8jwhm7vpai53lqyvfjlf"))
29190 (patches
29191 (list
29192 (origin
29193 (method url-fetch)
29194 (uri
29195 ;; Fix PandasColumns compatibility with pandas 3.0 StringDtype,
29196 ;; from: <https://github.com/dask/partd/pull/83>.
29197 (string-append "https://github.com/dask/partd/commit/"
29198 "3efd8ec7e35a7c0aa1ba15ba2cf0766af99d3c21.patch"))
29199 (file-name (string-append name "-PR-83-pandas-3-support.patch"))
29200 (sha256
29201 (base32
29202 "1sc6vmrqgqjl4rnw9gv8ymdfaqdi5razww8b322f7hpwhpdydnhk")))))))
29203 (build-system pyproject-build-system)
29204 (native-inputs
29205 (list python-pytest
29206 python-setuptools
29207 python-versioneer
29208 tzdata-for-tests))
29209 (propagated-inputs
29210 (list python-locket
29211 python-toolz
29212 ;; [complete]
29213 python-blosc
29214 python-numpy
29215 python-pandas
29216 python-pyzmq))
29217 (home-page "https://github.com/dask/partd/")
29218 (synopsis "Appendable key-value storage")
29219 (description
29220 "Partd stores key-value pairs. Values are raw bytes. We append on old
29221values. Partd excels at shuffling operations.")
29222 (license license:bsd-3)))
29223
29224(define-public python-fsspec
29225 (package
29226 (name "python-fsspec")
29227 (version "2026.1.0")
29228 (source
29229 (origin
29230 (method git-fetch)
29231 (uri (git-reference
29232 (url "https://github.com/fsspec/filesystem_spec")
29233 (commit version)))
29234 (file-name (git-file-name name version))
29235 (sha256
29236 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
29237 (build-system pyproject-build-system)
29238 (arguments
29239 (list
29240 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
29241 #:test-flags
29242 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
29243 "-k" (string-join
29244 ;; Test requires nentwork access
29245 (list "not test_async_cat_file_ranges"
29246 "test_gist_public_all_files"
29247 "test_gist_public_missing_file"
29248 "test_gist_public_one_file"
29249 ;; Test hangs
29250 "test_processes")
29251 " and not "))))
29252 ;; The most of the inputs are optional, project does not force to include
29253 ;; any dependencies according to pyproject.toml.
29254 (propagated-inputs
29255 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
29256 (native-inputs
29257 (list nss-certs-for-test
29258 python-hatch-vcs
29259 python-hatchling
29260 python-numpy
29261 python-pytest
29262 python-pytest-asyncio
29263 python-pytest-mock
29264 python-pytest-rerunfailures))
29265 (home-page "https://github.com/fsspec/filesystem_spec")
29266 (synopsis "File-system specification")
29267 (description "The purpose of this package is to produce a template or
29268specification for a file-system interface, that specific implementations
29269should follow, so that applications making use of them can rely on a common
29270behavior and not have to worry about the specific internal implementation
29271decisions with any given backend.")
29272 (license license:bsd-3)))
29273
29274(define-public python-ilinkedlist
29275 (package
29276 (name "python-ilinkedlist")
29277 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
29278 (revision . "0")))
29279 (version (git-version "0.4.0"
29280 (assoc-ref properties 'revision)
29281 (assoc-ref properties 'commit)))
29282 (home-page "https://github.com/luther9/ilinkedlist-py")
29283 (source
29284 (origin
29285 (method git-fetch)
29286 (uri (git-reference
29287 (url home-page)
29288 (commit (assoc-ref properties 'commit))))
29289 (file-name (git-file-name name version))
29290 (sha256
29291 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
29292 (build-system pyproject-build-system)
29293 (native-inputs (list python-pytest python-setuptools))
29294 (synopsis "Immutable linked list library")
29295 (description
29296 "This is a implementation of immutable linked lists for Python. It
29297contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
29298Since a linked list is treated as immutable, it is hashable, and its length
29299can be retrieved in constant time. Some of the terminology is inspired by
29300LISP. It is possible to create an improper list by creating a @code{Pair}
29301with a non-list @code{cdr}.")
29302 (license license:gpl3+)))
29303
29304(define-public python-readlike
29305 (package
29306 (name "python-readlike")
29307 (version "0.1.3")
29308 (source
29309 (origin
29310 (method git-fetch)
29311 (uri (git-reference
29312 (url "https://github.com/jangler/readlike")
29313 (commit version)))
29314 (file-name (git-file-name name version))
29315 (sha256
29316 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
29317 (build-system pyproject-build-system)
29318 (native-inputs (list python-pytest python-setuptools))
29319 (home-page "https://github.com/jangler/readlike")
29320 (synopsis "GNU Readline-like line editing module")
29321 (description
29322 "This Python module provides line editing functions similar to the default
29323Emacs-style ones of GNU Readline. Unlike the Python standard library's
29324@code{readline} package, this one allows access to those capabilities in settings
29325outside of a standard command-line interface. It is especially well-suited to
29326interfacing with Urwid, due to a shared syntax for describing key inputs.
29327
29328Currently, all stateless Readline commands are implemented. Yanking and history
29329are not supported.")
29330 (license license:expat)))
29331
29332(define-public python-reparser
29333 (package
29334 (name "python-reparser")
29335 (version "1.4.3")
29336 (source
29337 (origin
29338 (method git-fetch)
29339 (uri (git-reference
29340 (url "https://github.com/xmikos/reparser")
29341 (commit (string-append "v" version))))
29342 (file-name (git-file-name name version))
29343 (sha256
29344 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
29345 (build-system pyproject-build-system)
29346 (arguments (list #:tests? #f)) ; No tests.
29347 (native-inputs (list python-setuptools))
29348 (home-page "https://github.com/xmikos/reparser")
29349 (synopsis "Lexer/parser for inline markup based on regular expressions")
29350 (description
29351 "This Python library provides a simple lexer/parser for inline markup based
29352on regular expressions.")
29353 (license license:expat)))
29354
29355(define-public python-retrying
29356 (package
29357 (name "python-retrying")
29358 (version "1.4.1")
29359 (source
29360 (origin
29361 (method git-fetch)
29362 (uri (git-reference
29363 (url "https://github.com/groodt/retrying")
29364 (commit (string-append "v" version))))
29365 (file-name (git-file-name name version))
29366 (sha256
29367 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
29368 (build-system pyproject-build-system)
29369 (native-inputs (list python-pytest python-setuptools))
29370 (home-page "https://github.com/groodt/retrying")
29371 (synopsis "Library for adding retry behavior")
29372 (description "Retrying is a general-purpose retrying library to simplify
29373the task of adding retry behavior to just about anything.
29374
29375Features:
29376
29377@itemize
29378@item Generic Decorator API.
29379@item Specify stop condition (i.e. limit by number of attempts).
29380@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
29381@item Customize retrying on Exceptions.
29382@item Customize retrying on expected returned result.
29383@end itemize")
29384 (license license:asl2.0)))
29385
29386(define-public python-precis-i18n
29387 (package
29388 (name "python-precis-i18n")
29389 (version "1.1.1")
29390 (source
29391 (origin
29392 (method url-fetch)
29393 (uri (pypi-uri "precis_i18n" version))
29394 (sha256
29395 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
29396 (build-system pyproject-build-system)
29397 (native-inputs
29398 (list python-pytest
29399 python-setuptools
29400 python-wheel))
29401 (home-page "https://github.com/byllyfish/precis_i18n")
29402 (synopsis "Implementation of the PRECIS framework")
29403 (description
29404 "This module implements the PRECIS Framework as described in RFC 8264,
29405RFC 8265 and RFC 8266.")
29406 (license license:expat)))
29407
29408(define-public python-absl-py
29409 (package
29410 (name "python-absl-py")
29411 (version "2.3.1")
29412 (source
29413 (origin
29414 (method url-fetch)
29415 (uri (pypi-uri "absl_py" version))
29416 (sha256
29417 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29418 (build-system pyproject-build-system)
29419 (arguments
29420 (list #:tests? #f)) ;tests require bazel
29421 (native-inputs
29422 (list python-hatchling))
29423 (home-page "https://github.com/abseil/abseil-py")
29424 (synopsis "Abseil Python common libraries")
29425 (description
29426 "This package provides the Abseil Python Common Libraries, a collection
29427of Python libraries for building Python applications.")
29428 (license license:asl2.0)))
29429
29430(define-public python-astor
29431 (package
29432 (name "python-astor")
29433 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29434 (revision . "0")))
29435 (version (git-version "0.8.1"
29436 (assoc-ref properties 'revision)
29437 (assoc-ref properties 'commit)))
29438 (source
29439 (origin
29440 (method git-fetch)
29441 (uri (git-reference
29442 (url "https://github.com/berkerpeksag/astor")
29443 (commit (assoc-ref properties 'commit))))
29444 (file-name (git-file-name name version))
29445 (sha256
29446 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29447 (build-system pyproject-build-system)
29448 (arguments
29449 (list
29450 ;; FIXME: Unclear why this test fails.
29451 #:test-flags #~(list "--deselect=\
29452tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29453 (native-inputs (list python-pytest python-setuptools))
29454 (home-page "https://github.com/berkerpeksag/astor")
29455 (synopsis "Read and write Python ASTs")
29456 (description
29457 "Astor is designed to allow easy manipulation of Python source via the
29458Abstract Syntax Tree.")
29459 (license license:bsd-3)))
29460
29461(define-public python-astunparse
29462 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29463 ;; updated.
29464 (package
29465 (name "python-astunparse")
29466 (version "1.6.3")
29467 (source
29468 (origin
29469 (method url-fetch)
29470 (uri (pypi-uri "astunparse" version))
29471 (sha256
29472 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29473 (build-system pyproject-build-system)
29474 (arguments '(#:tests? #f)) ; there are none
29475 (native-inputs
29476 (list python-setuptools))
29477 (propagated-inputs
29478 (list python-six))
29479 (home-page "https://github.com/simonpercivall/astunparse")
29480 (synopsis "AST unparser for Python")
29481 (description "This package provides an AST unparser for Python. It is a
29482factored out version of @code{unparse} found in the Python source
29483distribution.")
29484 (license license:bsd-3)))
29485
29486(define-public python-gast
29487 (package
29488 (name "python-gast")
29489 (version "0.7.0")
29490 (source
29491 (origin
29492 (method git-fetch)
29493 (uri (git-reference
29494 (url "https://github.com/serge-sans-paille/gast/")
29495 (commit version)))
29496 (file-name (git-file-name name version))
29497 (sha256
29498 (base32 "05sxx7ixkchxvgrzpkqmklhzvsqydnyzrvzwfd5xkd3cv1arg9m5"))))
29499 (build-system pyproject-build-system)
29500 (native-inputs
29501 (list python-pytest
29502 python-setuptools))
29503 (home-page "https://github.com/serge-sans-paille/gast/")
29504 (synopsis "Generic Python AST that abstracts the underlying Python version")
29505 (description
29506 "GAST provides a compatibility layer between the AST of various Python
29507versions, as produced by @code{ast.parse} from the standard @code{ast}
29508module.")
29509 (license license:bsd-3)))
29510
29511;; XXX: Not maintained since 2022, leaf package.
29512(define-public python-attr
29513 (package
29514 (name "python-attr")
29515 (version "0.3.2")
29516 (source
29517 (origin
29518 (method url-fetch)
29519 (uri (pypi-uri "attr" version))
29520 (sha256
29521 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29522 (build-system pyproject-build-system)
29523 (arguments
29524 (list #:test-backend #~'custom
29525 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29526 (native-inputs
29527 (list python-setuptools))
29528 (home-page "https://github.com/denis-ryzhkov/attr")
29529 (synopsis "Decorator for attributes of target function or class")
29530 (description "Simple decorator to set attributes of target function or
29531class in a @acronym{DRY, Don't Repeat Yourself} way.")
29532 (license license:expat)))
29533
29534(define-public python-construct
29535 ;; Fixes not in a release yet.
29536 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29537 (revision "1"))
29538 (package
29539 (name "python-construct")
29540 (version (git-version "2.10.70" revision commit))
29541 (source
29542 (origin
29543 (method git-fetch)
29544 (uri (git-reference
29545 (url "https://github.com/construct/construct")
29546 (commit commit)))
29547 (file-name (git-file-name name version))
29548 (sha256
29549 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29550 (build-system pyproject-build-system)
29551 (arguments
29552 (list
29553 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29554 (native-inputs
29555 (list python-pytest python-setuptools))
29556 (propagated-inputs
29557 (list python-arrow
29558 python-cloudpickle
29559 python-cryptography
29560 python-lz4
29561 python-numpy
29562 python-ruamel.yaml))
29563 (home-page "https://construct.readthedocs.io")
29564 (synopsis "Declarative and symmetrical parser and builder for binary data")
29565 (description
29566 "This package provides both simple, atomic constructs (such as
29567integers of various sizes), as well as composite ones which allow you
29568form hierarchical and sequential structures of increasing complexity.
29569It features bit and byte granularity, easy debugging and testing, an
29570easy-to-extend subclass system, and lots of primitive constructs to
29571make your work easier.")
29572 (license license:expat))))
29573
29574(define-public python-outcome
29575 (package
29576 (name "python-outcome")
29577 (version "1.3.0.post0")
29578 (source
29579 (origin
29580 (method url-fetch)
29581 (uri (pypi-uri "outcome" version))
29582 (sha256
29583 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29584 (build-system pyproject-build-system)
29585 (native-inputs
29586 (list python-pytest
29587 python-pytest-asyncio
29588 python-setuptools))
29589 (propagated-inputs
29590 (list python-attrs))
29591 (home-page "https://github.com/python-trio/outcome")
29592 (synopsis "Capture the outcome of Python function calls")
29593 (description
29594 "Capture the outcome of Python function calls. Extracted from the Trio
29595project.")
29596 ;; Either license applies.
29597 (license (list license:expat license:asl2.0))))
29598
29599(define-public python-humanize
29600 (package
29601 (name "python-humanize")
29602 (version "4.14.0")
29603 (source
29604 (origin
29605 (method url-fetch)
29606 (uri (pypi-uri "humanize" version))
29607 (sha256
29608 (base32
29609 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29610 (build-system pyproject-build-system)
29611 (native-inputs
29612 (list python-freezegun
29613 python-hatch-vcs
29614 python-hatchling
29615 python-pytest))
29616 (home-page "https://github.com/jmoiron/humanize")
29617 (synopsis "Print numerical information in a human-readable form")
29618 (description "This package provides a Python module that displays numbers
29619and dates in \"human readable\" forms. For example, it would display
29620\"12345591313\" as \"12.3 billion\".")
29621 (license license:expat)))
29622
29623(define-public python-annoy
29624 (package
29625 (name "python-annoy")
29626 (version "1.17.3")
29627 (source
29628 (origin
29629 (method git-fetch)
29630 (uri (git-reference
29631 (url "https://github.com/spotify/annoy")
29632 (commit (string-append "v" version))))
29633 (file-name (git-file-name name version))
29634 (sha256
29635 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29636 (build-system pyproject-build-system)
29637 (arguments
29638 (list
29639 #:test-flags
29640 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29641 ;; name resolution>
29642 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29643 "--deselect=test/accuracy_test.py::test_nytimes_16"
29644 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29645 (native-inputs
29646 (list python-h5py
29647 python-numpy
29648 python-pytest
29649 python-setuptools))
29650 (home-page "https://github.com/spotify/annoy/")
29651 (synopsis "Approximate nearest neighbors library")
29652 (description
29653 "Annoy is a C++ library with Python bindings to search for points in
29654space that are close to a given query point. It also creates large read-only
29655file-based data structures that are @code{mmap}ped into memory so that many
29656processes may share the same data.")
29657 (license license:asl2.0)))
29658
29659(define-public python-croniter
29660 (package
29661 (name "python-croniter")
29662 (version "5.0.1")
29663 (source
29664 (origin
29665 (method git-fetch)
29666 (uri (git-reference
29667 (url "https://github.com/kiorky/croniter")
29668 (commit version)))
29669 (file-name (git-file-name name version))
29670 (sha256
29671 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29672 (build-system pyproject-build-system)
29673 (native-inputs (list python-pytest python-setuptools))
29674 (propagated-inputs (list python-dateutil python-pytz))
29675 (home-page "https://github.com/kiorky/croniter")
29676 (synopsis "Iterate datetime objects with cron-like syntax")
29677 (description
29678 "@code{croniter} provides iteration for datetime object with cron-like
29679format.")
29680 (license license:expat)))
29681
29682(define-public python-crontab
29683 (package
29684 (name "python-crontab")
29685 (version "3.3.0")
29686 (source
29687 (origin
29688 (method url-fetch)
29689 (uri (pypi-uri "python_crontab" version))
29690 (sha256
29691 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29692 (build-system pyproject-build-system)
29693 (arguments
29694 (list #:test-flags
29695 ;; This test is made for Windows.
29696 #~(list "-k" "not test_07_non_posix_shell")
29697 #:phases
29698 #~(modify-phases %standard-phases
29699 (add-after 'unpack 'defaults-to-mcron
29700 (lambda* (#:key inputs #:allow-other-keys)
29701 (substitute* "crontab.py"
29702 (("/usr/bin/crontab")
29703 (search-input-file inputs "bin/crontab"))))))))
29704 (inputs
29705 (list mcron python-dateutil))
29706 (native-inputs
29707 (list python-pytest python-setuptools))
29708 (home-page "https://gitlab.com/doctormo/python-crontab/")
29709 (synopsis "Module for reading and writing crontab files")
29710 (description "This Python module can read, write crontab files, and
29711access the system cron automatically and simply using a direct API.")
29712 (license license:lgpl3+)))
29713
29714(define-public python-apscheduler
29715 (package
29716 (name "python-apscheduler")
29717 (version "3.11.2")
29718 (source (origin
29719 (method url-fetch)
29720 (uri (pypi-uri "apscheduler" version))
29721 (sha256
29722 (base32
29723 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29724 (build-system pyproject-build-system)
29725 (arguments
29726 (list
29727 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29728 #:test-flags
29729 ;; XXX: Some tests hang or fail with verity of errors:
29730 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29731 #~(list #$@(map (lambda (test) (string-append "--deselect="
29732 "tests/test_executors.py::"
29733 test))
29734 (list "test_broken_pool"
29735 "test_max_instances[processpool-pytz]"
29736 "test_max_instances[processpool-zoneinfo]"
29737 "test_run_coroutine_job_tornado"
29738 "test_run_job_error[processpool-pytz]"
29739 "test_run_job_error[processpool-zoneinfo]"
29740 "test_submit_job[processpool-pytz-error]"
29741 "test_submit_job[processpool-pytz-executed]"
29742 "test_submit_job[processpool-pytz-missed]"
29743 "test_submit_job[processpool-zoneinfo-error]"
29744 "test_submit_job[processpool-zoneinfo-executed]"
29745 "test_submit_job[processpool-zoneinfo-missed]")))))
29746 (native-inputs
29747 (list python-anyio
29748 python-gevent
29749 python-pyside-6
29750 python-pytest
29751 python-pytest-asyncio
29752 python-pytz
29753 python-setuptools
29754 python-setuptools-scm
29755 python-sqlalchemy
29756 python-tornado
29757 python-twisted))
29758 (propagated-inputs
29759 (list python-tzlocal))
29760 (home-page "https://github.com/agronholm/apscheduler")
29761 (synopsis "Task scheduling library for Python")
29762 (description "Advanced Python Scheduler (APScheduler) is a Python library
29763that lets you schedule your Python code to be executed later, either just once
29764or periodically.
29765
29766You can add new jobs or remove old ones on the fly as you please. If you store
29767your jobs in a database, they will also survive scheduler restarts and maintain
29768their state. When the scheduler is restarted, it will then run all the jobs it
29769should have run while it was offline.")
29770 (license license:expat)))
29771
29772(define-public python-ifaddr
29773 (package
29774 (name "python-ifaddr")
29775 (version "0.2.0")
29776 (source
29777 (origin
29778 (method url-fetch)
29779 (uri (pypi-uri "ifaddr" version))
29780 (sha256
29781 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29782 (snippet #~(delete-file "ifaddr/_win32.py"))))
29783 (build-system pyproject-build-system)
29784 (native-inputs
29785 (list python-pytest python-setuptools python-wheel))
29786 (home-page "https://github.com/pydron/ifaddr")
29787 (synopsis "Network interface and IP address enumeration library")
29788 (description
29789 "This package provides a network interface and IP address enumeration
29790library in Python.")
29791 (license license:expat)))
29792
29793(define-public python-berkeleydb
29794 (package
29795 (name "python-berkeleydb")
29796 (version "18.1.15")
29797 (source
29798 (origin
29799 (method url-fetch)
29800 (uri (pypi-uri "berkeleydb" version))
29801 (sha256
29802 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29803 (build-system pyproject-build-system)
29804 (arguments
29805 (list
29806 #:test-backend #~'custom
29807 #:test-flags #~(list "test.py" "-v")
29808 #:phases
29809 #~(modify-phases %standard-phases
29810 (add-after 'unpack 'configure-locations
29811 (lambda* (#:key inputs #:allow-other-keys)
29812 (setenv "BERKELEYDB_DIR"
29813 (assoc-ref inputs "bdb"))
29814 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29815 "1")))
29816 (add-after 'unpack 'remove-legacy
29817 (lambda _
29818 (substitute* "pyproject.toml"
29819 ((":__legacy__") "")))))))
29820 (native-inputs (list python-setuptools))
29821 (inputs (list bdb))
29822 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29823 (synopsis "Python bindings for Oracle Berkeley DB")
29824 (description
29825 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29826C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29827Transaction objects, and each of these is exposed as a Python type in the
29828bsddb3.db module. The database objects can use various access methods: btree,
29829hash, recno, and queue. Complete support of Berkeley DB distributed
29830transactions. Complete support for Berkeley DB Replication Manager.
29831Complete support for Berkeley DB Base Replication. Support for RPC.")
29832 (license license:bsd-3)))
29833
29834;; Last version before rename to python-berkeleydb.
29835;; This package is close to deprecation.
29836(define-public python-bsddb3
29837 (package
29838 (inherit python-berkeleydb)
29839 (name "python-bsddb3")
29840 (version "6.2.9")
29841 (source
29842 (origin
29843 (method url-fetch)
29844 (uri (pypi-uri "bsddb3" version))
29845 (sha256
29846 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29847 (arguments
29848 (substitute-keyword-arguments arguments
29849 ;; Tests started failing from [email protected].
29850 ;; The package is in a pre-deprecation phase, so I didn't bother
29851 ;; to try and patch them, but sanity-check passes so the package
29852 ;; itself is likely fine.
29853 ((#:tests? tests? #t)
29854 #f)
29855 ((#:phases phases #~%standard-phases)
29856 #~(modify-phases #$phases
29857 (delete 'remove-legacy)))
29858 ((#:test-flags test-flags #~(list))
29859 #~(list "test3.py" "-v"))))))
29860
29861(define-public python-dbfread
29862 (package
29863 (name "python-dbfread")
29864 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29865 (revision . "0")))
29866 (version (git-version "2.0.7"
29867 (assoc-ref properties 'revision)
29868 (assoc-ref properties 'commit)))
29869 (source
29870 (origin
29871 (method git-fetch)
29872 (uri (git-reference
29873 (url "https://github.com/olemb/dbfread")
29874 (commit (assoc-ref properties 'commit))))
29875 (file-name (git-file-name name version))
29876 (sha256
29877 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29878 (build-system pyproject-build-system)
29879 (arguments
29880 (list
29881 #:phases
29882 #~(modify-phases %standard-phases
29883 (add-after 'unpack 'relax-setup.py
29884 (lambda _
29885 (substitute* "setup.py"
29886 (("python_requires.*")
29887 "")))))))
29888 (native-inputs (list python-pytest python-setuptools))
29889 (home-page "https://dbfread.readthedocs.io")
29890 (synopsis "Read DBF Files with Python")
29891 (description
29892 "This library reads DBF files and returns the data as native Python data
29893types for further processing. It is primarily intended for batch jobs and
29894one-off scripts.")
29895 (license license:expat)))
29896
29897(define-public python-cached-property
29898 (package
29899 (name "python-cached-property")
29900 (version "2.0.1")
29901 (source
29902 (origin
29903 (method url-fetch)
29904 (uri (pypi-uri "cached_property" version))
29905 (sha256
29906 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29907 (build-system pyproject-build-system)
29908 (native-inputs
29909 (list python-freezegun
29910 python-pytest
29911 python-setuptools
29912 python-wheel))
29913 (home-page "https://github.com/pydanny/cached-property")
29914 (synopsis "Decorator for caching properties in classes")
29915 (description
29916 "This package provides a decorator which makes caching
29917time-or-computationally-expensive properties quick and easy and works in
29918Python 2 or 3.")
29919 (license license:bsd-3)))
29920
29921(define-public python-folium
29922 (package
29923 (name "python-folium")
29924 (version "0.19.4")
29925 (source
29926 (origin
29927 ;; PyPI has a ".whl" file but not a proper source release.
29928 ;; Thus, fetch code from Git.
29929 (method git-fetch)
29930 (uri (git-reference
29931 (url "https://github.com/python-visualization/folium")
29932 (commit (string-append "v" version))))
29933 (file-name (git-file-name name version))
29934 (sha256
29935 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29936 (build-system pyproject-build-system)
29937 (arguments
29938 (list #:test-flags
29939 ;; This file requires Selenium.
29940 #~(list "--ignore" "tests/selenium/test_selenium.py"
29941 "-k" (string-append
29942 ;; The tests below also require Selenium.
29943 "not test__repr_png_is_bytes"
29944 " and not test_valid_png"
29945 " and not test_valid_png_size"
29946 " and not test_geojson"
29947 " and not test_heat_map_with_weights"
29948 ;; This performs an online request.
29949 " and not test_json_request"
29950 ;; Requires geodatasets package.
29951 " and not test_timedynamic_geo_json"
29952 ;; AssertionError.
29953 " and not test_minimap"))))
29954 (propagated-inputs
29955 (list python-branca
29956 python-jinja2
29957 python-numpy
29958 python-requests
29959 python-xyzservices))
29960 (native-inputs
29961 (list python-geopandas
29962 python-nbconvert
29963 python-pandas
29964 python-pillow
29965 python-pytest
29966 python-selenium
29967 python-setuptools
29968 python-setuptools-scm
29969 python-wheel))
29970 (home-page "https://github.com/python-visualization/folium")
29971 (synopsis "Make beautiful maps with Leaflet.js & Python")
29972 (description "@code{folium} makes it easy to visualize data that’s been
29973manipulated in Python on an interactive leaflet map. It enables both the
29974binding of data to a map for @code{choropleth} visualizations as well as
29975passing rich vector/raster/HTML visualizations as markers on the map.
29976
29977The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29978Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29979supports Image, Video, GeoJSON and TopoJSON overlays.")
29980 (license license:expat)))
29981
29982(define-public python-mercantile
29983 (package
29984 (name "python-mercantile")
29985 (version "1.2.1")
29986 (source
29987 (origin
29988 (method git-fetch)
29989 (uri (git-reference
29990 (url "https://github.com/mapbox/mercantile")
29991 (commit version)))
29992 (file-name (git-file-name name version))
29993 (sha256
29994 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29995 (build-system pyproject-build-system)
29996 (propagated-inputs (list python-click))
29997 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29998 python-setuptools))
29999 (home-page "https://github.com/mapbox/mercantile")
30000 (synopsis "Web mercator XYZ tile utilities")
30001 (description
30002 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
30003@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
30004left corner and bounding longitudes and latitudes for XYZ tiles, a
30005@code{xy(lng, lat)} function that returns spherical mercator x and y
30006coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
30007containing a given point, and quadkey conversion functions
30008@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
30009translating between quadkey and tile coordinates.")
30010 (license license:bsd-3)))
30011
30012(define-public jube
30013 (package
30014 ;; This is a command-line tool, so no "python-" prefix.
30015 (name "jube")
30016 (version "2.7.1")
30017 (source
30018 (origin
30019 (method url-fetch)
30020 (uri (string-append
30021 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
30022 version))
30023 (sha256
30024 (base32 "1z7cz7z2awwc1mq18whs9p9n7476l4sg2nk6vy2xf97jidd512zy"))
30025 (file-name (string-append "jube-" version ".tar.gz"))))
30026 (build-system pyproject-build-system)
30027 (arguments
30028 (list
30029 #:tests? #f)) ; No tests.
30030 (propagated-inputs (list python-pyyaml))
30031 (native-inputs (list python-setuptools))
30032 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
30033 (synopsis "Benchmarking environment")
30034 (description
30035 "JUBE helps perform and analyze benchmarks in a systematic way. For each
30036benchmarked application, benchmark data is stored in a format that allows JUBE
30037to deduct the desired information. This data can be parsed by automatic pre-
30038and post-processing scripts that draw information and store it more densely
30039for manual interpretation.")
30040 (license license:gpl3+)))
30041
30042(define-public python-pyroutelib3
30043 (package
30044 (name "python-pyroutelib3")
30045 (version "2.0.0")
30046 (source
30047 (origin
30048 (method git-fetch)
30049 (uri (git-reference
30050 (url "https://github.com/MKuranowski/pyroutelib3")
30051 (commit (string-append "v" version))))
30052 (file-name (git-file-name name version))
30053 (sha256
30054 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
30055 (build-system pyproject-build-system)
30056 (propagated-inputs (list python-dateutil python-protobuf-5))
30057 (native-inputs (list python-filelock python-flit-core python-pytest))
30058 (home-page "https://github.com/MKuranowski/pyroutelib3")
30059 (synopsis "Library for simple routing on OSM data")
30060 (description "Library for simple routing on OSM data")
30061 (license license:gpl3+)))
30062
30063(define-public python-bibtexparser
30064 (package
30065 (name "python-bibtexparser")
30066 (version "2.0.1")
30067 (source
30068 (origin
30069 (method git-fetch)
30070 (uri (git-reference
30071 (url "https://github.com/sciunto-org/python-bibtexparser")
30072 (commit (string-append "v" version))))
30073 (file-name (git-file-name name version))
30074 (sha256
30075 (base32 "1ww9vlc9x7svhd6ww62c7bfikyqv5qwgingc2s5rjizl9nai5wlv"))))
30076 (build-system pyproject-build-system)
30077 (propagated-inputs (list python-pylatexenc python-pyparsing))
30078 (native-inputs
30079 (list python-pylatexenc python-pytest python-setuptools))
30080 (home-page "https://github.com/sciunto-org/python-bibtexparser")
30081 (synopsis "Python library to parse BibTeX files")
30082 (description "BibtexParser is a Python library to parse BibTeX files.")
30083 (license (list license:bsd-3 license:lgpl3))))
30084
30085(define-public python-bibtexparser-for-cobib
30086 (hidden-package
30087 (package
30088 (inherit python-bibtexparser)
30089 (name "python-bibtexparser")
30090 (version "1.4.0")
30091 (source
30092 (origin
30093 (method git-fetch)
30094 (uri (git-reference
30095 (url "https://github.com/sciunto-org/python-bibtexparser")
30096 (commit (string-append "v" version))))
30097 (file-name (git-file-name name version))
30098 (sha256
30099 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
30100
30101(define-public python-distro
30102 (package
30103 (name "python-distro")
30104 (version "1.9.0")
30105 (source
30106 (origin
30107 (method url-fetch)
30108 (uri (pypi-uri "distro" version))
30109 (sha256
30110 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
30111 (build-system pyproject-build-system)
30112 (arguments
30113 (list
30114 #:test-flags
30115 #~(list "-k" (string-join
30116 ;; We are not on Ubunto distro:
30117 ;; AssertionError: assert '' == 'ubuntu'.
30118 (list "not test_ubuntu14normal_lsb_release"
30119 "test_trailingblanks_lsb_release"
30120 "test_ubuntu14nomodules_lsb_release")
30121 " and not "))))
30122 (native-inputs
30123 (list python-pytest
30124 python-setuptools))
30125 (home-page "https://github.com/python-distro/distro")
30126 (synopsis "OS platform information API")
30127 (description
30128 "@code{distro} provides information about the OS distribution it runs on,
30129such as a reliable machine-readable ID, or version information.
30130
30131It is the recommended replacement for Python's original
30132`platform.linux_distribution` function (which will be removed in Python 3.8).
30133@code{distro} also provides a command-line interface to output the platform
30134information in various formats.")
30135 (license license:asl2.0)))
30136
30137(define-public python-cairosvg
30138 (package
30139 (name "python-cairosvg")
30140 (version "2.8.2")
30141 (source
30142 (origin
30143 (method url-fetch)
30144 (uri (pypi-uri "cairosvg" version))
30145 (sha256
30146 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
30147 (build-system pyproject-build-system)
30148 (arguments
30149 (list #:test-flags #~(list "cairosvg/test_api.py")))
30150 (native-inputs
30151 (list python-pytest
30152 python-setuptools))
30153 (propagated-inputs
30154 (list python-cairocffi
30155 python-cssselect2
30156 python-defusedxml
30157 python-pillow
30158 python-tinycss2))
30159 (home-page "https://cairosvg.org/")
30160 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
30161 (description "CairoSVG is a SVG converter based on Cairo. It can export
30162SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
30163SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
30164parsed, the result is drawn to a Cairo surface that can be exported to
30165qvarious formats: PDF, PostScript, PNG and even SVG.")
30166 (license license:lgpl3+)))
30167
30168(define-public python-pyphen
30169 (package
30170 (name "python-pyphen")
30171 (version "0.17.2")
30172 (source
30173 (origin
30174 (method git-fetch)
30175 (uri (git-reference
30176 (url "https://github.com/Kozea/Pyphen")
30177 (commit version)))
30178 (file-name (git-file-name name version))
30179 (sha256
30180 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
30181 (build-system pyproject-build-system)
30182 (native-inputs (list python-flit-core python-pytest))
30183 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
30184 ;; embedded set provided by upstream - like Debian does.
30185 (home-page "https://github.com/Kozea/Pyphen")
30186 (synopsis "Pure Python module to hyphenate text")
30187 (description "Pyphen is a pure Python module to hyphenate text using
30188existing Hunspell hyphenation dictionaries.")
30189 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
30190
30191(define-public python-intelhex
30192 (package
30193 (name "python-intelhex")
30194 (version "2.3.0")
30195 (source
30196 (origin
30197 (method git-fetch)
30198 (uri (git-reference
30199 (url "https://github.com/python-intelhex/intelhex")
30200 (commit version)))
30201 (file-name (git-file-name name version))
30202 (sha256
30203 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
30204 (build-system pyproject-build-system)
30205 (arguments (list #:test-backend #~'unittest))
30206 (native-inputs (list python-setuptools))
30207 (home-page "https://github.com/python-intelhex/intelhex")
30208 (synopsis "Python library for Intel HEX files manipulations")
30209 (description
30210 "The Intel HEX file format is widely used in microprocessors and
30211microcontrollers area (embedded systems etc.) as the de facto standard for
30212representation of code to be programmed into microelectronic devices. This
30213package provides an intelhex Python library to read, write, create from
30214scratch and manipulate data from Intel HEX file format. It also includes
30215several convenience Python scripts, including \"classic\" hex2bin and bin2hex
30216converters and more, those based on the library itself.")
30217 (license license:bsd-3)))
30218
30219(define-public python-interlap
30220 (package
30221 (name "python-interlap")
30222 (version "0.2.7")
30223 (source
30224 (origin
30225 (method git-fetch)
30226 (uri (git-reference
30227 (url "https://github.com/brentp/interlap")
30228 (commit (string-append "v" version))))
30229 (file-name (git-file-name name version))
30230 (sha256
30231 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
30232 (build-system pyproject-build-system)
30233 (arguments
30234 (list
30235 #:test-backend #~'custom
30236 #:test-flags #~(list "interlap.py")))
30237 (native-inputs (list python-setuptools))
30238 (home-page "https://brentp.github.io/interlap")
30239 (synopsis "Fast, simple interval overlap testing")
30240 (description
30241 "InterLap does fast interval overlap testing with a simple Python data
30242structure.")
30243 (license license:expat)))
30244
30245(define-public python-pykwalify
30246 (package
30247 (name "python-pykwalify")
30248 (version "1.8.0")
30249 (source
30250 (origin
30251 (method git-fetch)
30252 (uri (git-reference
30253 (url "https://github.com/grokzen/pykwalify")
30254 (commit version)))
30255 (file-name (git-file-name name version))
30256 (sha256
30257 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
30258 (build-system pyproject-build-system)
30259 (arguments
30260 (list
30261 #:test-flags
30262 ;; XXX: yaml safe_dump() has been removed.
30263 #~(list "--ignore=tests/test_unicode.py"
30264 "--deselect=tests/test_core.py::TestCore::test_core_files")))
30265 (native-inputs
30266 (list python-pytest python-setuptools python-testfixtures))
30267 (propagated-inputs
30268 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
30269 (home-page "https://github.com/grokzen/pykwalify")
30270 (synopsis "Python lib/cli for JSON/YAML schema validation")
30271 (description
30272 "This package provides a parser, schema validator, and data binding tool
30273for YAML and JSON.")
30274 (license license:expat)))
30275
30276(define-public python-pykakasi
30277 (package
30278 (name "python-pykakasi")
30279 (version "2.3.0")
30280 (source
30281 (origin
30282 (method url-fetch)
30283 (uri (pypi-uri "pykakasi" version))
30284 (sha256
30285 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
30286 (build-system pyproject-build-system)
30287 (arguments (list #:test-flags ''("-k" "not test_aozora")))
30288 (propagated-inputs (list python-deprecated python-importlib-resources
30289 python-jaconv))
30290 (native-inputs (list python-coverage
30291 python-py-cpuinfo
30292 python-pytest
30293 python-pytest-benchmark
30294 python-setuptools
30295 python-setuptools-scm
30296 python-wheel))
30297 (home-page "https://codeberg.org/miurahr/pykakasi")
30298 (synopsis "Kana kanji simple inversion library")
30299 (description
30300 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
30301Language Processing} library to transliterate hiragana, katakana and
30302kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
30303characters in NFC form.
30304
30305Its algorithms are based on the kakasi library, which is written in C.")
30306 (license license:gpl3+)))
30307
30308(define-public python-dbus
30309 (package
30310 (name "python-dbus")
30311 (version "1.3.2")
30312 (source
30313 (origin
30314 (method url-fetch)
30315 (uri (pypi-uri "dbus-python" version))
30316 (sha256
30317 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
30318 (build-system pyproject-build-system)
30319 (arguments
30320 (list
30321 #:tests? #f ;XXX: Tests require setup
30322 #:phases
30323 #~(modify-phases %standard-phases
30324 (add-after 'unpack 'patch-requirements
30325 (lambda _
30326 (substitute* (list "pyproject.toml" "setup.py")
30327 (("'(ninja|patchelf)',?") ""))
30328 (substitute* "setup.cfg"
30329 (("(ninja|patchelf)") "")))))))
30330 (native-inputs
30331 (list pkg-config
30332 meson
30333 ninja/pinned
30334 patchelf
30335 python-meson
30336 python-setuptools
30337 python-tappy))
30338 (inputs
30339 (list dbus glib))
30340 (propagated-inputs
30341 (list python-pygobject))
30342 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
30343 (synopsis "Python bindings for libdbus")
30344 (description
30345 "This package provides Python bindings to libdbus, the reference
30346implementation of the D-Bus protocol.")
30347 (license license:expat)))
30348
30349;; Added on 2026-01-05
30350(define-deprecated-package python-dbus-python python-dbus)
30351
30352(define python-dbusmock-patch-paths-phase
30353 #~(lambda* (#:key inputs #:allow-other-keys)
30354 (substitute* "tests/test_api.py"
30355 (("/usr/bin/python3")
30356 (which "python3")))
30357 (substitute* "dbusmock/testcase.py"
30358 (("\"dbus-daemon\"")
30359 (object->string
30360 (search-input-file inputs "/bin/dbus-daemon"))))))
30361
30362(define-public python-dbusmock
30363 (package
30364 (name "python-dbusmock")
30365 (version "0.37.2")
30366 (source
30367 (origin
30368 (method git-fetch)
30369 (uri (git-reference
30370 (url "https://github.com/martinpitt/python-dbusmock")
30371 (commit version)))
30372 (file-name (git-file-name name version))
30373 (sha256
30374 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30375 (build-system pyproject-build-system)
30376 (arguments
30377 (list
30378 #:modules `((guix build pyproject-build-system)
30379 (guix build utils)
30380 (ice-9 match))
30381 #:phases
30382 #~(modify-phases %standard-phases
30383 (add-after 'unpack 'patch-paths
30384 #$python-dbusmock-patch-paths-phase)
30385 (replace 'check
30386 (lambda* (#:key tests? #:allow-other-keys)
30387 (when tests?
30388 (match (primitive-fork)
30389 (0 ;child process
30390 (execlp "pytest" "pytest" "-vv"))
30391 (pytest-pid
30392 (let loop ()
30393 ;; Reap child processes; otherwise, python-dbusmock
30394 ;; would waste time polling for the dbus processes
30395 ;; it spawns to be reaped, in vain.
30396 (match (waitpid WAIT_ANY)
30397 ((pid . status)
30398 (if (= pid pytest-pid)
30399 (unless (zero? status)
30400 (error "`pytest' exited with status"
30401 status))
30402 (loop)))))))))))))
30403 (native-inputs (list python-pytest python-setuptools upower which))
30404 (inputs (list dbus))
30405 (propagated-inputs (list python-dbus python-pygobject))
30406 (home-page "https://github.com/martinpitt/python-dbusmock")
30407 (synopsis "Python library for mock D-Bus objects")
30408 (description
30409 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
30410This is useful for writing tests for software which talks to D-Bus services
30411such as upower, systemd, logind, gnome-session or others, and it is hard (or
30412impossible without root privileges) to set the state of the real services to
30413what you expect in your tests.")
30414 (license license:lgpl3+)))
30415
30416(define-public python-dbusmock-for-tests
30417 (package
30418 (inherit python-dbusmock)
30419 (name "python-dbusmock-for-tests")
30420 (version "0.37.2")
30421 (source
30422 (origin
30423 (method git-fetch)
30424 (uri (git-reference
30425 (url "https://github.com/martinpitt/python-dbusmock")
30426 (commit version)))
30427 (file-name (git-file-name name version))
30428 (sha256
30429 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30430 (arguments
30431 (list
30432 #:tests? #f
30433 #:phases
30434 #~(modify-phases %standard-phases
30435 (add-after 'unpack 'patch-paths
30436 #$python-dbusmock-patch-paths-phase))))
30437 (native-inputs (list python-setuptools which))
30438 (properties '((hidden? . #t)))))
30439
30440(define-public python-jsonplus
30441 (package
30442 (name "python-jsonplus")
30443 (home-page "https://github.com/randomir/jsonplus")
30444 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30445 (revision . "0")))
30446 (version (git-version "0.8.0"
30447 (assoc-ref properties 'revision)
30448 (assoc-ref properties 'commit)))
30449 (source
30450 (origin
30451 (method git-fetch)
30452 (uri (git-reference
30453 (url home-page)
30454 (commit (assoc-ref properties 'commit))))
30455 (file-name (git-file-name name version))
30456 (sha256
30457 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30458 (build-system pyproject-build-system)
30459 (arguments
30460 (list
30461 ;; XXX: Tests require the additional package moneyed.
30462 #:tests? #f
30463 #:phases
30464 #~(modify-phases %standard-phases
30465 (add-after 'unpack 'chdir
30466 (lambda _
30467 (chdir "python"))))))
30468 (native-inputs (list python-setuptools))
30469 (propagated-inputs
30470 (list python-dateutil python-simplejson python-sortedcontainers))
30471 (synopsis "Serialize Python types to/from JSON")
30472 (description
30473 "This package provides functionality to serialize arbitrary data types
30474to and from JSON. Common data types are implemented and it is easy to
30475register custom encoders and decoders.")
30476 (license license:expat)))
30477
30478(define-public python-ioctl-opt
30479 (package
30480 (name "python-ioctl-opt")
30481 (version "1.3")
30482 (source
30483 (origin
30484 (method url-fetch)
30485 (uri (pypi-uri "ioctl-opt" version))
30486 (sha256
30487 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30488 (build-system pyproject-build-system)
30489 (arguments
30490 (list #:tests? #f)) ;no tests
30491 (native-inputs (list python-setuptools))
30492 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30493 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30494 (description
30495 "This package provides functions to compute fnctl.ioctl's opt argument.")
30496 (license license:gpl2+)))
30497
30498(define-public python-anyio
30499 (package
30500 (name "python-anyio")
30501 (version "4.12.1")
30502 (source
30503 (origin
30504 (method url-fetch)
30505 (uri (pypi-uri "anyio" version))
30506 (sha256
30507 (base32
30508 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30509 (patches
30510 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30511 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30512 (build-system pyproject-build-system)
30513 (arguments
30514 (list
30515 ;; tests:
30516 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30517 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30518 #:test-flags
30519 #~(list "-m" "not network"
30520 ;; Tests are shaky with a lot of DNS lookups.
30521 "--ignore=tests/test_sockets.py"
30522 #$@(map (lambda (ls)
30523 (string-append "--deselect=" (string-join ls "::")))
30524 (append
30525 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30526 ;; timeout expired running: <...>
30527 '(("tests/test_pytest_plugin.py"
30528 "test_keyboardinterrupt_during_test"))
30529 (if (target-aarch64?)
30530 ;; Assertions are not equal on ARM.
30531 '(("tests/streams/test_tls.py"
30532 "TestTLSListener"
30533 "test_handshake_fail")
30534 ("tests/test_taskgroups.py"
30535 "test_shielded_cancel_sleep_time")
30536 ("tests/test_to_thread.py"
30537 "test_run_in_custom_limiter")
30538 ("tests/test_to_thread.py"
30539 "TestBlockingPortalProvider"
30540 "test_single_thread"))
30541 '()))))))
30542 (propagated-inputs
30543 (list python-idna
30544 python-sniffio
30545 python-typing-extensions))
30546 (native-inputs
30547 (list python-blockbuster
30548 python-psutil
30549 python-pytest
30550 python-pytest-mock
30551 python-setuptools
30552 python-setuptools-scm
30553 python-trio
30554 python-trustme
30555 python-truststore
30556 python-uvloop))
30557 (home-page "https://anyio.readthedocs.io")
30558 (synopsis "Compatibility layer for multiple asynchronous event loops")
30559 (description
30560 "AnyIO is an asynchronous networking and concurrency library that works
30561on top of either asyncio or trio. It implements trio-like structured
30562concurrency on top of asyncio, and works in harmony with the native SC of trio
30563itself.")
30564 (license license:expat)))
30565
30566(define-public python-argh
30567 (package
30568 (name "python-argh")
30569 (version "0.31.3")
30570 (source
30571 (origin
30572 (method url-fetch)
30573 (uri (pypi-uri "argh" version))
30574 (sha256
30575 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30576 (build-system pyproject-build-system)
30577 (native-inputs (list python-flit-core python-pytest))
30578 (home-page "https://github.com/neithere/argh/")
30579 (synopsis "Argparse wrapper with natural syntax")
30580 (description
30581 "Argh is a small library that provides several layers of abstraction
30582on top of @code{python-argparse}. The layers can be mixed. It is always
30583possible to declare a command with the highest possible (and least flexible)
30584layer and then tune the behaviour with any of the lower layers including the
30585native API of @code{python-argparse}.")
30586 (license license:lgpl3+)))
30587
30588(define-public python-pox
30589 (package
30590 (name "python-pox")
30591 (version "0.3.6")
30592 (source
30593 (origin
30594 (method url-fetch)
30595 (uri (pypi-uri "pox" version))
30596 (sha256
30597 (base32
30598 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30599 (build-system pyproject-build-system)
30600 (arguments
30601 (list
30602 #:phases
30603 #~(modify-phases %standard-phases
30604 (replace 'check
30605 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30606 (when tests?
30607 (mkdir-p "/tmp/guix")
30608 (setenv "SHELL" "bash")
30609 (setenv "USERNAME" "guix")
30610 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30611 (invoke "python" "./pox/tests/__main__.py")))))))
30612 (native-inputs
30613 (list python-setuptools
30614 which)) ;pox/tests/test_shutils.py
30615 (home-page "https://pypi.org/project/pox/")
30616 (synopsis "Python utilities for file system exploration and automated builds")
30617 (description
30618 "Pox provides a collection of utilities for navigating and manipulating
30619file systems. This module is designed to facilitate some of the low-level
30620operating system interactions that are useful when exploring a file system on a
30621remote host. Pox provides Python equivalents of several shell commands such
30622as @command{which} and @command{find}. These commands allow automated
30623discovery of what has been installed on an operating system, and where the
30624essential tools are located.")
30625 (license license:bsd-3)))
30626
30627(define-public python-flit
30628 (package
30629 (name "python-flit")
30630 (version "3.12.0") ;same as python-flit-core
30631 (source
30632 (origin
30633 (method url-fetch)
30634 (uri (pypi-uri "flit" version))
30635 (sha256
30636 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30637 (build-system pyproject-build-system)
30638 (arguments
30639 (list
30640 #:test-flags
30641 ;; These tests fail when FLIT_NO_NETWORK is set
30642 '(list "-k" "not test_invalid_classifier \
30643and not test_install_requires \
30644and not test_install_requires_extra \
30645and not test_validate_classifiers_private")
30646 #:phases
30647 #~(modify-phases %standard-phases
30648 (add-after 'unpack 'relax-pip-requirement
30649 ;; python -m pip is available by default, no need to
30650 ;; propagate pip.
30651 (lambda _
30652 (substitute* "pyproject.toml"
30653 (("\"pip\",")
30654 ""))))
30655 (add-before 'check 'pre-check
30656 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30657 (when tests?
30658 (setenv "HOME" "/tmp")
30659 (setenv "FLIT_NO_NETWORK" "1")))))))
30660 (propagated-inputs
30661 (list python-tomli-w
30662 python-flit-core
30663 python-docutils
30664 python-requests))
30665 (native-inputs
30666 (list python-responses
30667 python-pytest
30668 python-testpath))
30669 (home-page "https://flit.readthedocs.io/")
30670 (synopsis "Simple packaging tool for simple packages")
30671 (description "Flit is a simple way to put Python packages and modules on
30672PyPI. Flit packages a single importable module or package at a time, using
30673the import name as the name on PyPI. All subpackages and data files within a
30674package are included automatically.")
30675 (license license:bsd-3)))
30676
30677(define-public python-fastentrypoints
30678 (package
30679 (name "python-fastentrypoints")
30680 (home-page "https://github.com/ninjaaron/fast-entry_points")
30681 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30682 (revision . "0")))
30683 (version (git-version "0.12"
30684 (assoc-ref properties 'revision)
30685 (assoc-ref properties 'commit)))
30686 (source
30687 (origin
30688 (method git-fetch)
30689 (uri (git-reference
30690 (url home-page)
30691 (commit (assoc-ref properties 'commit))))
30692 (file-name (git-file-name name version))
30693 (sha256
30694 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30695 (build-system pyproject-build-system)
30696 (arguments
30697 (list
30698 ;; XXX: Testing is non-standard and hardly configurable.
30699 #:tests? #f
30700 #:test-backend #~'custom
30701 #:test-flags #~(list "test/runtest.py")))
30702 (native-inputs (list python-setuptools))
30703 (synopsis "Makes entry_points specified in setup.py load more quickly")
30704 (description
30705 "Using entry_points in your setup.py makes scripts that start really
30706slowly because it imports pkg_resources. This package allows such setup
30707scripts to load entry points more quickly.")
30708 (license license:bsd-3)))
30709
30710(define-public python-funcparserlib
30711 (package
30712 (name "python-funcparserlib")
30713 (version "1.0.1")
30714 (source
30715 (origin
30716 ;; Source tarball on PyPi lacks tests.
30717 (method git-fetch)
30718 (uri (git-reference
30719 (url "https://github.com/vlasovskikh/funcparserlib")
30720 (commit version)))
30721 (file-name (git-file-name name version))
30722 (sha256
30723 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30724 (build-system pyproject-build-system)
30725 (arguments
30726 '(#:phases
30727 (modify-phases %standard-phases
30728 (replace 'check
30729 (lambda* (#:key tests? #:allow-other-keys)
30730 (when tests?
30731 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30732 ;; ModuleNotFoundError: No module named 'poetry'
30733 (native-inputs (list python-poetry-core python-six))
30734 (home-page "https://github.com/vlasovskikh/funcparserlib")
30735 (synopsis
30736 "Recursive descent parsing library based on functional combinators")
30737 (description
30738 "This package is a recursive descent parsing library for Python based on
30739functional combinators. Parser combinators are just higher-order functions
30740that take parsers as their arguments and return them as result values.")
30741 (license license:expat)))
30742
30743(define-public python-cson
30744 (package
30745 (name "python-cson")
30746 (version "0.8")
30747 (source
30748 (origin
30749 (method git-fetch)
30750 (uri (git-reference
30751 (url "https://github.com/avakar/pycson")
30752 (commit version)))
30753 (file-name (git-file-name name version))
30754 (sha256
30755 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30756 (build-system pyproject-build-system)
30757 (native-inputs (list python-pytest python-setuptools python-wheel))
30758 (propagated-inputs (list python-speg))
30759 (home-page "https://github.com/avakar/pycson")
30760 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30761 (description
30762 "This package is a parser for Coffeescript Object Notation (CSON).")
30763 (license license:expat)))
30764
30765(define-public python-aionotify
30766 (package
30767 (name "python-aionotify")
30768 (version "0.3.1")
30769 (source
30770 (origin
30771 ;; Source tarball on PyPi lacks tests
30772 (method git-fetch)
30773 (uri (git-reference
30774 (url "https://github.com/rbarrois/aionotify")
30775 (commit version)))
30776 (file-name (git-file-name name version))
30777 (sha256
30778 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30779 (build-system pyproject-build-system)
30780 (native-inputs
30781 (list python-pytest
30782 python-setuptools
30783 python-wheel))
30784 (home-page "https://github.com/rbarrois/aionotify")
30785 (synopsis "inotify library for Python")
30786 (description
30787 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30788 (license license:bsd-3)))
30789
30790(define-public python-forbiddenfruit
30791 (package
30792 (name "python-forbiddenfruit")
30793 (version "0.1.4")
30794 (source
30795 (origin
30796 (method git-fetch)
30797 (uri (git-reference
30798 (url "https://github.com/clarete/forbiddenfruit")
30799 (commit version)))
30800 (file-name (git-file-name name version))
30801 (sha256
30802 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30803 (build-system pyproject-build-system)
30804 (arguments
30805 (list
30806 #:phases
30807 #~(modify-phases %standard-phases
30808 (replace 'check
30809 (lambda* (#:key tests? #:allow-other-keys)
30810 (when tests?
30811 (invoke "make" "prepare" "SKIP_DEPS=1")
30812 (invoke "nosetests")))))))
30813 (native-inputs (list python-pynose python-setuptools))
30814 (home-page "https://github.com/clarete/forbiddenfruit")
30815 (synopsis "Patch python built-in objects")
30816 (description "This project allows Python code to extend built-in types.")
30817 (license (list license:gpl3+ license:expat))))
30818
30819(define-public python-k5test
30820 (package
30821 (name "python-k5test")
30822 (version "0.10.4")
30823 (source
30824 (origin
30825 (method url-fetch)
30826 (uri (pypi-uri "k5test" version))
30827 (sha256
30828 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30829 (build-system pyproject-build-system)
30830 (arguments
30831 (list #:tests? #f)) ;no tests
30832 (native-inputs
30833 (list python-setuptools))
30834 (inputs
30835 (list mit-krb5))
30836 (home-page "https://github.com/pythongssapi/k5test")
30837 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30838 (description
30839 "@code{k5test} is a library for setting up self-contained Kerberos 5
30840environments, and running Python unit tests inside those environments. It is
30841based on the file of the same name found alongside the MIT Kerberos 5 unit
30842tests.")
30843 (license license:isc)))
30844
30845(define-public python-gssapi
30846 (package
30847 (name "python-gssapi")
30848 (version "1.10.0")
30849 (source
30850 (origin
30851 (method url-fetch)
30852 (uri (pypi-uri "gssapi" version))
30853 (sha256
30854 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30855 (build-system pyproject-build-system)
30856 (arguments
30857 (list #:test-flags #~(list "--pyargs" "gssapi")))
30858 (native-inputs
30859 (list python-cython
30860 python-k5test
30861 python-parameterized
30862 python-pytest
30863 python-setuptools))
30864 (inputs
30865 (list mit-krb5))
30866 (propagated-inputs
30867 (list python-decorator))
30868 (home-page "https://github.com/pythongssapi/python-gssapi")
30869 (synopsis "Python GSSAPI Wrapper")
30870 (description
30871 "Python-GSSAPI provides both low-level and high level wrappers around the
30872GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30873also be usable with other GSSAPI mechanisms.")
30874 (license license:isc)))
30875
30876(define-public python-check-manifest
30877 (package
30878 (name "python-check-manifest")
30879 (version "0.51")
30880 (source
30881 (origin
30882 (method url-fetch)
30883 (uri (pypi-uri "check_manifest" version))
30884 (sha256
30885 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30886 (build-system pyproject-build-system)
30887 (arguments
30888 (list
30889 ;; tests: 127 passed, 20 skipped, 2 deselected
30890 #:test-flags
30891 ;; This tests requires setting up a venv which does not work
30892 ;; properly in the build environment.
30893 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30894 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30895 (native-inputs
30896 (list git-minimal/pinned python-pytest))
30897 (propagated-inputs
30898 (list python-pypa-build python-setuptools))
30899 (home-page "https://github.com/mgedmin/check-manifest")
30900 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30901 (description "Python package can include a MANIFEST.in file to help with
30902sending package files to the Python Package Index. This package checks that
30903file to ensure it completely and accurately describes your project.")
30904 (license license:expat)))
30905
30906(define-public python-android-stringslib
30907 (package
30908 (name "python-android-stringslib")
30909 (version "0.1.2")
30910 (source
30911 (origin
30912 (method git-fetch)
30913 (uri (git-reference
30914 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30915 (commit (string-append "v" version))))
30916 (file-name (git-file-name name version))
30917 (sha256
30918 (base32
30919 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30920 (build-system pyproject-build-system)
30921 (arguments (list #:tests? #f)) ; No tests.
30922 (native-inputs (list python-setuptools))
30923 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30924 (synopsis "Android strings.xml support")
30925 (description
30926 "Android Strings Lib provides support for android's strings.xml files.
30927These files are used to translate strings in android apps.")
30928 (license license:expat)))
30929
30930(define-public python-pypng
30931 (package
30932 (name "python-pypng")
30933 (version "0.20220715.0")
30934 (source
30935 (origin
30936 (method url-fetch)
30937 (uri (pypi-uri "pypng" version))
30938 (sha256
30939 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30940 (build-system pyproject-build-system)
30941 (arguments
30942 (list
30943 #:phases
30944 '(modify-phases %standard-phases
30945 (add-before 'check 'pre-check
30946 (lambda _
30947 (setenv "PYTHONPATH"
30948 (string-append (getcwd) "/code:"
30949 (getenv "GUIX_PYTHONPATH"))))))))
30950 (native-inputs (list python-pytest python-setuptools python-wheel))
30951 (home-page "https://github.com/drj11/pypng")
30952 (synopsis "Pure Python PNG image encoder/decoder")
30953 (description
30954 "The PyPNG module implements support for PNG images. It reads and writes
30955PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30956pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30957LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30958images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30959A number of optional chunks can be specified (when writing) and
30960understood (when reading): tRNS, bKGD, gAMA.
30961
30962PyPNG is not a high level toolkit for image processing (like PIL) and does not
30963aim at being a replacement or competitor. Its strength lies in fine-grained
30964extensive support of PNG features. It can also read and write Netpbm PAM
30965files, with a focus on its use as an intermediate format for implementing
30966custom PNG processing.")
30967 (license license:expat)))
30968
30969(define-public python-fuzzywuzzy
30970 (package
30971 (name "python-fuzzywuzzy")
30972 (version "0.18.0")
30973 (source
30974 (origin
30975 (method git-fetch)
30976 (uri (git-reference
30977 (url "https://github.com/seatgeek/fuzzywuzzy")
30978 (commit version)))
30979 (file-name (git-file-name name version))
30980 (sha256
30981 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30982 (build-system pyproject-build-system)
30983 (arguments
30984 (list
30985 #:test-flags
30986 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30987 (native-inputs
30988 (list python-hypothesis
30989 python-pycodestyle
30990 python-pytest
30991 python-setuptools))
30992 (propagated-inputs (list python-levenshtein))
30993 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30994 (synopsis "Fuzzy string matching in Python")
30995 (description
30996 "Approximate string matching using @emph{Levenshtein Distance} to
30997calculate the differences between sequences.")
30998 (license license:gpl2)))
30999
31000(define-public python-block-tracing
31001 (package
31002 (name "python-block-tracing")
31003 (version "1.0.1")
31004 (source
31005 (origin
31006 (method url-fetch)
31007 (uri (pypi-uri "block_tracing" version))
31008 (sha256
31009 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
31010 (build-system pyproject-build-system)
31011 (arguments (list #:tests? #f)) ; No tests.
31012 (native-inputs (list python-setuptools))
31013 (home-page "https://github.com/rianhunter/block_tracing")
31014 (synopsis "Protect process memory")
31015 (description
31016 "@code{block_tracing} is a tiny Python library that can be used to
31017prevent debuggers and other applications from inspecting the memory within
31018your process.")
31019 (license license:expat)))
31020
31021(define-public python-json-e
31022 (package
31023 (name "python-json-e")
31024 (version "4.8.0")
31025 (source
31026 (origin
31027 (method git-fetch) ; no tests in PyPI release
31028 (uri (git-reference
31029 (url "https://github.com/json-e/json-e")
31030 (commit (string-append "v" version))))
31031 (file-name (git-file-name name version))
31032 (sha256
31033 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
31034 (build-system pyproject-build-system)
31035 (arguments
31036 (list
31037 #:phases
31038 #~(modify-phases %standard-phases
31039 ;; Git repository provides implementations for JavaScript, Golang,
31040 ;; Python and Rust, pick "py".
31041 (add-before 'build 'chdir-to-py
31042 (lambda _
31043 (chdir "py"))))))
31044 (native-inputs
31045 (list python-freezegun
31046 python-pytest
31047 python-pyyaml
31048 python-setuptools
31049 python-wheel))
31050 (home-page "https://json-e.js.org")
31051 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
31052 (description
31053 "This package provides a data-structure parameterization system written
31054for embedding context in JSON objects.")
31055 (license license:mpl2.0)))
31056
31057(define-public python-json-logger
31058 (package
31059 (name "python-json-logger")
31060 (version "4.0.0")
31061 (source
31062 (origin
31063 (method git-fetch)
31064 (uri (git-reference
31065 (url "https://github.com/nhairs/python-json-logger")
31066 (commit (string-append "v" version))))
31067 (file-name (git-file-name name version))
31068 (sha256
31069 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
31070 (build-system pyproject-build-system)
31071 (native-inputs
31072 (list python-freezegun
31073 python-mike
31074 python-msgspec
31075 python-orjson
31076 python-pypa-build
31077 python-pytest
31078 python-setuptools
31079 python-tzdata
31080 python-validate-pyproject
31081 python-typing-extensions))
31082 (home-page "https://github.com/nhairs/python-json-logger")
31083 (synopsis "JSON log formatter in Python")
31084 (description "This library allows standard Python logging to output log data
31085as JSON objects. With JSON we can make our logs more readable by machines and
31086we can stop writing custom parsers for syslog-type records.")
31087 (license license:bsd-3)))
31088
31089(define-public python-daiquiri
31090 (package
31091 (name "python-daiquiri")
31092 (version "3.0.1")
31093 (source
31094 (origin
31095 (method git-fetch)
31096 (uri (git-reference
31097 (url "https://github.com/jd/daiquiri")
31098 (commit version)))
31099 (file-name (git-file-name name version))
31100 (sha256
31101 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
31102 (build-system pyproject-build-system)
31103 (propagated-inputs (list python-json-logger))
31104 (native-inputs (list python-mock python-pytest python-setuptools
31105 python-setuptools-scm))
31106 (home-page "https://github.com/jd/daiquiri")
31107 (synopsis "Library to configure Python logging easily")
31108 (description
31109 "The daiquiri library provides an easy way to configure logging in
31110Python. It also provides some custom formatters and handlers.")
31111 (license license:asl2.0)))
31112
31113(define-public python-pifpaf
31114 (package
31115 (name "python-pifpaf")
31116 (version "3.4.0")
31117 (source
31118 (origin
31119 (method git-fetch)
31120 (uri (git-reference
31121 (url "https://github.com/jd/pifpaf")
31122 (commit version)))
31123 (file-name (git-file-name name version))
31124 (sha256
31125 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
31126 (build-system pyproject-build-system)
31127 (arguments
31128 (list
31129 #:phases
31130 #~(modify-phases %standard-phases
31131 (add-after 'install 'install-drivers
31132 (lambda* (#:key inputs outputs #:allow-other-keys)
31133 (let ((site (site-packages inputs outputs)))
31134 (copy-recursively "pifpaf/drivers"
31135 (string-append site "/pifpaf/drivers/"))))))))
31136 (propagated-inputs
31137 (list python-click
31138 python-daiquiri
31139 python-fixtures
31140 python-jinja2
31141 python-pbr
31142 python-psutil
31143 python-xattr))
31144 (native-inputs
31145 (list python-mock
31146 python-stestr
31147 python-packaging
31148 python-requests
31149 python-testrepository
31150 python-testtools
31151 python-setuptools))
31152 (home-page "https://github.com/jd/pifpaf")
31153 (synopsis "Tools and fixtures to manage daemons for testing in Python")
31154 (description
31155 "Pifpaf is a suite of fixtures and a command-line tool that starts and
31156stops daemons for a quick throw-away usage. This is typically useful when
31157needing these daemons to run integration testing. It originally evolved from
31158its precursor @code{overtest}.")
31159 (license license:asl2.0)))
31160
31161(define-public python-pytest-check-links
31162 (package
31163 (name "python-pytest-check-links")
31164 (version "0.10.1")
31165 (source
31166 (origin
31167 (method url-fetch)
31168 (uri (pypi-uri "pytest_check_links" version))
31169 (sha256
31170 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
31171 (build-system pyproject-build-system)
31172 (arguments
31173 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
31174 (native-inputs
31175 (list python-hatchling))
31176 (propagated-inputs
31177 (list python-docutils
31178 python-html5lib
31179 python-nbconvert
31180 python-nbformat
31181 python-requests))
31182 (home-page "https://github.com/jupyterlab/pytest-check-links")
31183 (synopsis "Check links in files")
31184 (description "This package provides a pytest plugin that checks URLs for
31185HTML-containing files.")
31186 (license license:bsd-3)))
31187
31188(define-public python-json5
31189 (package
31190 (name "python-json5")
31191 (version "0.9.25")
31192 (source
31193 (origin
31194 ;; sample.json5 is missing from PyPi source tarball
31195 (method git-fetch)
31196 (uri (git-reference
31197 (url "https://github.com/dpranke/pyjson5")
31198 (commit (string-append "v" version))))
31199 (file-name (git-file-name name version))
31200 (sha256
31201 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
31202 (build-system pyproject-build-system)
31203 (native-inputs (list python-pytest python-setuptools python-wheel))
31204 (home-page "https://github.com/dpranke/pyjson5")
31205 (synopsis "Python implementation of the JSON5 data format")
31206 (description
31207 "JSON5 extends the JSON data interchange format to make it slightly more
31208usable as a configuration language. This Python package implements parsing and
31209dumping of JSON5 data structures.")
31210 (license license:asl2.0)))
31211
31212(define-public python-farama-notifications
31213 (package
31214 (name "python-farama-notifications")
31215 (version "0.0.4")
31216 (source
31217 ;; The version on pypi does not include tests.
31218 (origin
31219 (method git-fetch)
31220 (uri (git-reference
31221 (url "https://github.com/Farama-Foundation/Farama-Notifications")
31222 (commit version)))
31223 (file-name (git-file-name name version))
31224 (sha256
31225 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
31226 (build-system pyproject-build-system)
31227 (arguments
31228 (list
31229 #:phases
31230 '(modify-phases %standard-phases
31231 (replace 'check
31232 (lambda* (#:key tests? #:allow-other-keys)
31233 (when tests?
31234 (invoke "python3" "tests/ci-test.py")))))))
31235 (native-inputs (list python-pytest python-setuptools python-wheel))
31236 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
31237 (synopsis "Notifications for all Farama Foundation maintained libraries")
31238 (description
31239 "This package allows for providing notifications for all Farama
31240Foundation maintained libraries.")
31241 (license license:expat)))
31242
31243(define-public python-frontmatter
31244 (package
31245 (name "python-frontmatter")
31246 (version "1.3.0")
31247 (source
31248 (origin
31249 (method git-fetch)
31250 (uri (git-reference
31251 (url "https://github.com/eyeseast/python-frontmatter")
31252 (commit (string-append "v" version))))
31253 (file-name (git-file-name name version))
31254 (sha256
31255 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
31256 (build-system pyproject-build-system)
31257 (native-inputs
31258 (list python-hatchling
31259 python-pyaml
31260 python-pytest
31261 python-toml
31262 python-types-pyyaml
31263 python-types-toml
31264 python-uv-build))
31265 (propagated-inputs (list python-pyyaml))
31266 (home-page "https://github.com/eyeseast/python-frontmatter")
31267 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
31268 (description
31269 "This package offers a useful way to add arbitrary, structured metadata
31270to text documents, regardless of type. This is a small package to load and
31271parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
31272 (license license:expat)))
31273
31274(define-public python-frozendict
31275 (package
31276 (name "python-frozendict")
31277 (version "2.4.6")
31278 (source
31279 (origin
31280 (method url-fetch)
31281 (uri (pypi-uri "frozendict" version))
31282 (sha256
31283 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
31284 (build-system pyproject-build-system)
31285 (native-inputs
31286 (list python-pytest
31287 python-setuptools
31288 python-wheel))
31289 (home-page "https://github.com/Marco-Sulla/python-frozendict")
31290 (synopsis "Simple immutable mapping for Python")
31291 (description
31292 "@dfn{frozendict} is an immutable wrapper around dictionaries that
31293implements the complete mapping interface. It can be used as a drop-in
31294replacement for dictionaries where immutability is desired.")
31295 (license license:expat)))
31296
31297(define-public python-py-cpuinfo
31298 (package
31299 (name "python-py-cpuinfo")
31300 (version "9.0.0")
31301 (source
31302 (origin
31303 (method git-fetch)
31304 (uri (git-reference
31305 (url "https://github.com/workhorsy/py-cpuinfo")
31306 (commit (string-append "v" version))))
31307 (file-name (git-file-name name version))
31308 (sha256
31309 (base32
31310 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
31311 (build-system pyproject-build-system)
31312 (arguments
31313 (list #:test-backend #~'custom
31314 #:test-flags #~(list "test_suite.py")))
31315 (native-inputs
31316 (list python-setuptools))
31317 (home-page "https://github.com/workhorsy/py-cpuinfo")
31318 (synopsis "Get CPU info with Python")
31319 (description
31320 "This Python module returns the CPU info by using the best sources of
31321information for your operating system.")
31322 (license license:expat)))
31323
31324(define-public python-canonicaljson
31325 (package
31326 (name "python-canonicaljson")
31327 (version "2.0.0")
31328 (source
31329 (origin
31330 (method url-fetch)
31331 (uri (pypi-uri "canonicaljson" version))
31332 (sha256
31333 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
31334 (build-system pyproject-build-system)
31335 (arguments
31336 (list #:test-backend #~'unittest))
31337 (native-inputs
31338 (list python-setuptools))
31339 (home-page "https://github.com/matrix-org/python-canonicaljson")
31340 (synopsis "Canonical JSON")
31341 (description
31342 "Deterministically encode JSON.
31343
31344@itemize
31345@item Encodes objects and arrays as RFC 7159 JSON.
31346@item Sorts object keys so that you get the same result each time.
31347@item Has no insignificant whitespace to make the output as small as possible.
31348@item Escapes only the characters that must be escaped, U+0000 to
31349 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
31350@item Uses the shortest escape sequence for each escaped character.
31351@item Encodes the JSON as UTF-8.
31352@item Can encode frozendict immutable dictionaries.
31353@end itemize")
31354 (license license:asl2.0)))
31355
31356(define-public python-signedjson
31357 (package
31358 (name "python-signedjson")
31359 (version "1.1.4")
31360 (source
31361 (origin
31362 (method git-fetch)
31363 (uri (git-reference
31364 (url "https://github.com/matrix-org/python-signedjson")
31365 (commit (string-append "v" version))))
31366 (file-name (git-file-name name version))
31367 (sha256
31368 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31369 (build-system pyproject-build-system)
31370 (propagated-inputs
31371 (list python-canonicaljson
31372 python-pynacl
31373 python-typing-extensions
31374 python-unpaddedbase64))
31375 (native-inputs
31376 (list python-pytest python-setuptools-scm python-setuptools))
31377 (home-page "https://github.com/matrix-org/python-signedjson")
31378 (synopsis "Sign JSON objects with ED25519 signatures")
31379 (description
31380 "Sign JSON objects with ED25519 signatures.
31381
31382@itemize
31383@item More than one entity can sign the same object.
31384@item Each entity can sign the object with more than one key making it easier to
31385rotate keys
31386@item ED25519 can be replaced with a different algorithm.
31387@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31388key.
31389@end itemize")
31390 (license license:asl2.0)))
31391
31392(define-public python-daemonize
31393 (package
31394 (name "python-daemonize")
31395 (version "2.5.0")
31396 (source
31397 (origin
31398 (method git-fetch)
31399 (uri (git-reference
31400 (url "https://github.com/thesharp/daemonize")
31401 (commit (string-append "v" version))))
31402 (file-name (git-file-name name version))
31403 (sha256
31404 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31405 (build-system pyproject-build-system)
31406 (arguments
31407 (list
31408 #:test-backend #~'custom
31409 #:test-flags #~(list "tests/test.py")
31410 #:phases
31411 #~(modify-phases %standard-phases
31412 (add-before 'check 'fix-tests
31413 (lambda _
31414 ;; XXX: nobody has group nogroup on Guix.
31415 (substitute* "tests/test.py"
31416 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31417 (number->string (passwd:gid (getpw "nobody"))))))))))
31418 (native-inputs (list coreutils-minimal procps python-setuptools))
31419 (home-page "https://github.com/thesharp/daemonize")
31420 (synopsis "Library for writing system daemons in Python")
31421 (description
31422 "Daemonize is a library for writing system daemons in Python.")
31423 (license license:expat)))
31424
31425(define-public python-pymacaroons
31426 (package
31427 (name "python-pymacaroons")
31428 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31429 (revision . "0")))
31430 (version (git-version "0.13.0"
31431 (assoc-ref properties 'revision)
31432 (assoc-ref properties 'commit)))
31433 (source
31434 (origin
31435 (method git-fetch)
31436 (uri (git-reference
31437 (url "https://github.com/ecordell/pymacaroons")
31438 (commit (assoc-ref properties 'commit))))
31439 (file-name (git-file-name name version))
31440 (sha256
31441 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31442 (build-system pyproject-build-system)
31443 (arguments
31444 (list
31445 #:test-flags
31446 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31447 ;; No module named 'hypothesis.specifiers'
31448 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31449 (native-inputs
31450 (list python-hypothesis
31451 python-mock
31452 python-pytest
31453 python-setuptools))
31454 (propagated-inputs (list python-pynacl))
31455 (home-page "https://github.com/ecordell/pymacaroons")
31456 (synopsis "Python Macaroon Library")
31457 (description
31458 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31459tokens, macaroons embed caveats that define specific authorization
31460requirements for the target service, the service that issued the root macaroon
31461and which is capable of verifying the integrity of macaroons it receives.
31462
31463Macaroons allow for delegation and attenuation of authorization. They are
31464simple and fast to verify, and decouple authorization policy from the
31465enforcement of that policy.")
31466 (license license:expat)))
31467
31468(define-public python-ldap3
31469 (package
31470 (name "python-ldap3")
31471 (version "2.9.1")
31472 (home-page "https://github.com/cannatag/ldap3")
31473 (source
31474 (origin
31475 (method git-fetch)
31476 (uri (git-reference (url home-page)
31477 (commit (string-append "v" version))))
31478 (file-name (git-file-name name version))
31479 (sha256
31480 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31481 (build-system pyproject-build-system)
31482 (arguments
31483 (list
31484 #:tests? #f ;TODO: Tests need a real LDAP server to run
31485 #:test-backend #~'nose))
31486 (native-inputs
31487 (list python-pynose python-setuptools))
31488 (propagated-inputs
31489 (list python-gssapi python-pyasn1))
31490 (synopsis "Python LDAP client")
31491 (description
31492 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31493library.")
31494 (license license:lgpl3+)))
31495
31496(define-public python-boltons
31497 (package
31498 (name "python-boltons")
31499 (version "25.0.0")
31500 (source
31501 (origin
31502 (method git-fetch)
31503 (uri (git-reference
31504 (url "https://github.com/mahmoud/boltons")
31505 (commit version)))
31506 (file-name (git-file-name name version))
31507 (sha256
31508 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31509 (build-system pyproject-build-system)
31510 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31511 (home-page "https://github.com/mahmoud/boltons")
31512 (synopsis "Extensions to the Python standard library")
31513 (description
31514 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31515as — and yet conspicuously missing from — the standard library, including:
31516
31517@itemize
31518@item Atomic file saving, bolted on with fileutils
31519@item A highly-optimized OrderedMultiDict, in dictutils
31520@item Two types of PriorityQueue, in queueutils
31521@item Chunked and windowed iteration, in iterutils
31522@item Recursive data structure iteration and merging, with iterutils.remap
31523@item Exponential backoff functionality, including jitter, through
31524iterutils.backoff
31525@item A full-featured TracebackInfo type, for representing stack traces, in
31526tbutils
31527@end itemize")
31528 (license license:bsd-3)))
31529
31530(define-public python-eliot
31531 (package
31532 (name "python-eliot")
31533 (version "1.17.5")
31534 (source
31535 (origin
31536 (method url-fetch)
31537 (uri (pypi-uri "eliot" version))
31538 (sha256
31539 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31540 (build-system pyproject-build-system)
31541 (arguments
31542 (list
31543 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31544 ;; Two tests fail with error: TypeError: Unsupported type.
31545 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31546 #:phases
31547 #~(modify-phases %standard-phases
31548 (add-after 'unpack 'remove-journald-support
31549 (lambda _
31550 (for-each delete-file
31551 '("eliot/tests/test_journald.py"
31552 "eliot/journald.py")))))))
31553 (native-inputs
31554 (list python-pytest
31555 python-setuptools
31556 python-testtools))
31557 (propagated-inputs
31558 (list python-boltons
31559 python-orjson
31560 python-pyrsistent
31561 python-zope-interface))
31562 (home-page "https://github.com/itamarst/eliot/")
31563 (synopsis "Eliot: the logging system that tells you why it happened")
31564 (description
31565 "@dfn{eliot} is a Python logging system that outputs causal chains of
31566actions: actions can spawn other actions, and eventually they either succeed
31567or fail. The resulting logs tell you the story of what your software did: what
31568happened, and what caused it.")
31569 (license license:asl2.0)))
31570
31571(define-public python-pem
31572 (package
31573 (name "python-pem")
31574 (version "23.1.0")
31575 (source
31576 (origin
31577 (method git-fetch)
31578 (uri (git-reference
31579 (url "https://github.com/hynek/pem")
31580 (commit version)))
31581 (file-name (git-file-name name version))
31582 (sha256
31583 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31584 (build-system pyproject-build-system)
31585 (native-inputs
31586 (list nss-certs-for-test
31587 python-certifi
31588 python-hatch-fancy-pypi-readme
31589 python-hatch-vcs
31590 python-hatchling
31591 python-pretend
31592 python-pyopenssl
31593 python-pytest
31594 python-twisted))
31595 (home-page "https://pem.readthedocs.io/")
31596 (synopsis "Easy PEM file parsing in Python")
31597 (description
31598 "This package provides a Python module for parsing and splitting PEM files.")
31599 (license license:expat)))
31600
31601(define-public python-pysaml2
31602 (package
31603 (name "python-pysaml2")
31604 (version "7.5.4")
31605 (source
31606 (origin
31607 (method git-fetch)
31608 (uri (git-reference
31609 (url "https://github.com/IdentityPython/pysaml2")
31610 (commit (string-append "v" version))))
31611 (file-name (git-file-name name version))
31612 (sha256
31613 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31614 (build-system pyproject-build-system)
31615 (arguments
31616 (list
31617 #:test-flags
31618 #~(list "-k"
31619 (string-join
31620 ;; XXX: encryption failures
31621 (list "not test_encrypted_response_6"
31622 "test_validate_cert_chains"
31623 "test_validate_with_root_cert"
31624 ;; XXX: xml parsing error
31625 "test_namespace_processing") " and not "))
31626 #:phases
31627 #~(modify-phases %standard-phases
31628 (add-after 'unpack 'relax-requirements
31629 (lambda _
31630 (substitute* "pyproject.toml"
31631 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31632 (format #f "~s" dep))))))))
31633 (native-inputs (list python-poetry-core python-pytest))
31634 (propagated-inputs
31635 (list python-cryptography
31636 python-dateutil
31637 python-defusedxml
31638 python-pymongo
31639 python-pyopenssl
31640 python-responses
31641 python-requests
31642 python-xmlschema
31643 python-xmlsec))
31644 (home-page "https://idpy.org")
31645 (synopsis "Python implementation of SAML Version 2 Standard")
31646 (description
31647 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31648It contains all necessary pieces for building a SAML2 service provider or
31649an identity provider. The distribution contains examples of both.
31650
31651This package was originally written to work in a WSGI environment, but
31652there are extensions that allow you to use it with other frameworks.")
31653 (license license:asl2.0)))
31654
31655;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31656;; This PyPI package is no longer actively maintained, but the underlying
31657;; library can be vendored.
31658;;
31659;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31660;; pyproject.toml) and can't be used as a common input, do not update this
31661;; package.
31662(define-public python-click-plugins
31663 (package
31664 (name "python-click-plugins")
31665 (version "1.1.1.2")
31666 (source
31667 (origin
31668 (method git-fetch)
31669 (uri (git-reference
31670 (url "https://github.com/click-contrib/click-plugins")
31671 (commit version)))
31672 (file-name (git-file-name name version))
31673 (sha256
31674 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31675 (build-system pyproject-build-system)
31676 (arguments
31677 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31678 (native-inputs
31679 (list python-setuptools))
31680 (propagated-inputs
31681 (list python-click))
31682 (synopsis "Extension for Click to register external CLI commands")
31683 (description
31684 "This package provides n extension module for Click to register external
31685CLI commands via setuptools entry-points.")
31686 (home-page "https://github.com/click-contrib/click-plugins")
31687 (license license:bsd-3)))
31688
31689;; XXX: Deprecated on <2026-03-23>.
31690(define-deprecated-package python-click-plugins-1 python-click-plugins)
31691
31692(define-public python-diceware
31693 (package
31694 (name "python-diceware")
31695 (version "1.0.1")
31696 (source
31697 (origin
31698 (method url-fetch)
31699 (uri (pypi-uri "diceware" version))
31700 (sha256
31701 (base32
31702 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31703 (build-system pyproject-build-system)
31704 (native-inputs
31705 (list python-pytest python-setuptools python-wheel))
31706 (home-page "https://github.com/ulif/diceware/")
31707 (synopsis "Generates memorable passphrases")
31708 (description "This package generates passphrases by concatenating words
31709randomly picked from wordlists. It supports several sources of
31710randomness (including real life dice) and different wordlists (including
31711cryptographically signed ones).")
31712 (license license:gpl3+)))
31713
31714(define-public python-dictdiffer
31715 (package
31716 (name "python-dictdiffer")
31717 (version "0.9.0")
31718 (source
31719 (origin
31720 (method git-fetch)
31721 (uri (git-reference
31722 (url "https://github.com/inveniosoftware/dictdiffer")
31723 (commit (string-append "v" version))))
31724 (file-name (git-file-name name version))
31725 (sha256
31726 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31727 (build-system pyproject-build-system)
31728 (arguments
31729 (list
31730 #:phases
31731 #~(modify-phases %standard-phases
31732 (add-after 'unpack 'relax-requirements
31733 (lambda _
31734 (delete-file "pytest.ini")
31735 (substitute* "setup.py"
31736 (("'pytest-runner.*',")
31737 "'pytest',")))))))
31738 (native-inputs
31739 (list python-pytest python-setuptools python-setuptools-scm))
31740 (home-page "https://github.com/inveniosoftware/dictdiffer")
31741 (synopsis "Diff and patch Python dictionary objects")
31742 (description
31743 "Dictdiffer is a Python module that helps you to diff and patch
31744dictionaries.")
31745 (license license:expat)))
31746
31747(define-public python-osc
31748 (package
31749 (name "python-osc")
31750 (version "1.9.3")
31751 (source
31752 (origin
31753 (method git-fetch)
31754 (uri (git-reference
31755 (url "https://github.com/attwad/python-osc")
31756 (commit (string-append "v" version))))
31757 (file-name (git-file-name name version))
31758 (sha256
31759 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31760 (build-system pyproject-build-system)
31761 (native-inputs (list python-setuptools))
31762 (home-page "https://github.com/attwad/python-osc")
31763 (synopsis "Open Sound Control server and client implementations")
31764 (description
31765 "@code{python-osc} is a pure Python library with no external
31766dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31767Open Sound Control 1.0} specification.")
31768 (license license:unlicense)))
31769
31770(define-public python-cmd2
31771 (package
31772 (name "python-cmd2")
31773 (version "2.5.11")
31774 (source
31775 (origin
31776 (method url-fetch)
31777 (uri (pypi-uri "cmd2" version))
31778 (sha256
31779 (base32
31780 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31781 (build-system pyproject-build-system)
31782 (arguments
31783 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31784and not test_transcript")))
31785 (propagated-inputs
31786 (list python-pyperclip python-wcwidth))
31787 (native-inputs
31788 (list python-pytest
31789 python-pytest-mock
31790 python-setuptools
31791 python-setuptools-scm
31792 python-wheel))
31793 (home-page "https://github.com/python-cmd2/cmd2")
31794 (synopsis "Tool for building interactive command line applications")
31795 (description
31796 "Cmd2 is a tool for building interactive command line applications in
31797Python. Its goal is to make it quick and easy for developers to build
31798feature-rich and user-friendly interactive command line applications. It
31799provides a simple API which is an extension of Python's built-in @code{cmd}
31800module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31801make your life easier and eliminates much of the boilerplate code which would
31802be necessary when using @code{cmd}.")
31803 (license license:expat)))
31804
31805(define-public python-pytidylib
31806 (package
31807 (name "python-pytidylib")
31808 (version "0.3.2")
31809 (source
31810 (origin
31811 (method git-fetch)
31812 (uri (git-reference
31813 (url "https://github.com/countergram/pytidylib")
31814 (commit version)))
31815 (file-name (git-file-name name version))
31816 (sha256
31817 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31818 (build-system pyproject-build-system)
31819 (arguments
31820 (list
31821 #:phases
31822 #~(modify-phases %standard-phases
31823 (add-after 'unpack 'fix-queue-import
31824 (lambda _
31825 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31826 (substitute* "tests/threadsafety.py"
31827 (("from Queue import Queue")
31828 "from queue import Queue"))))
31829 (add-before 'build 'qualify-libtidy
31830 (lambda* (#:key inputs #:allow-other-keys)
31831 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31832 (substitute* "tidylib/tidy.py"
31833 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31834 (format #f "'~a'" libtidy)))))))))
31835 (native-inputs (list python-pytest python-setuptools))
31836 (inputs (list tidy-html))
31837 (home-page "https://github.com/countergram/pytidylib")
31838 (synopsis "Python wrapper for HTML Tidy library")
31839 (description
31840 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31841allows you, from Python code, to “fix” invalid (X)HTML markup.")
31842 (license license:expat)))
31843
31844(define-public python-mujson
31845 (package
31846 (name "python-mujson")
31847 (version "1.4")
31848 (source
31849 (origin
31850 (method git-fetch)
31851 (uri (git-reference
31852 (url "https://github.com/mattgiles/mujson")
31853 (commit version)))
31854 (file-name (git-file-name name version))
31855 (sha256
31856 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31857 (build-system pyproject-build-system)
31858 (arguments (list #:tests? #f)) ;No tests.
31859 (native-inputs (list python-setuptools))
31860 (home-page "https://github.com/mattgiles/mujson")
31861 (synopsis "Use the fastest JSON functions available at import time")
31862 (description
31863 "This module selects the fastest JSON functions available at import time
31864in Python.")
31865 (license license:expat)))
31866
31867(define-public python-bashlex
31868 (package
31869 (name "python-bashlex")
31870 (version "0.18")
31871 (source
31872 (origin
31873 (method git-fetch)
31874 (uri (git-reference
31875 (url "https://github.com/idank/bashlex")
31876 (commit version)))
31877 (file-name (git-file-name name version))
31878 (sha256
31879 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31880 (build-system pyproject-build-system)
31881 (arguments
31882 (list
31883 #:phases
31884 #~(modify-phases %standard-phases
31885 (add-before 'build 'pregenerate-yacc-tables
31886 (lambda _
31887 ;; parser.py caches tables, which attempts to write to site lib
31888 ;; see https://github.com/idank/bashlex/issues/51
31889 (invoke "python" "-c" "import bashlex"))))))
31890 (native-inputs (list python-pytest python-setuptools))
31891 (home-page "https://github.com/idank/bashlex")
31892 (synopsis "Python parser for bash")
31893 (description
31894 "@code{bashlex} is a Python port of the parser used internally by GNU
31895bash.
31896
31897For the most part it's transliterated from C, the major differences are:
31898
31899@itemize
31900@item it does not execute anything
31901@item it is reentrant
31902@item it generates a complete AST
31903@end itemize
31904")
31905 (license license:gpl3+)))
31906
31907(define-public python-jinxed
31908 (package
31909 (name "python-jinxed")
31910 (version "1.3.0")
31911 (source
31912 (origin
31913 (method git-fetch)
31914 (uri (git-reference
31915 (url "https://github.com/Rockhopper-Technologies/jinxed")
31916 (commit version)))
31917 (file-name (git-file-name name version))
31918 (sha256
31919 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31920 (build-system pyproject-build-system)
31921 (arguments
31922 (list
31923 #:tests? #f ;_curses.error: setupterm: could not find terminal
31924 #:phases
31925 #~(modify-phases %standard-phases
31926 (add-before 'check 'set-environment-variables
31927 (lambda* (#:key inputs #:allow-other-keys)
31928 (setenv "TERM" "LINUX")
31929 (setenv "TERMINFO"
31930 (search-input-directory inputs "share/terminfo")))))))
31931 (native-inputs (list ncurses python-setuptools))
31932 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31933 (synopsis "Jinxed Terminal Library")
31934 (description
31935 "Jinxed is an implementation of a subset of the Python curses library.")
31936 (license license:mpl2.0)))
31937
31938(define-public python-blessed
31939 (package
31940 (name "python-blessed")
31941 (version "1.20.0")
31942 (source
31943 (origin
31944 (method url-fetch)
31945 (uri (pypi-uri "blessed" version))
31946 (sha256
31947 (base32
31948 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31949 (snippet
31950 ;; Don't get hung up on Windows test failures.
31951 '(delete-file "blessed/win_terminal.py"))))
31952 (build-system pyproject-build-system)
31953 (propagated-inputs (list python-six python-wcwidth))
31954 (native-inputs (list python-pytest python-setuptools python-wheel))
31955 (home-page "https://github.com/jquast/blessed")
31956 (synopsis "Wrapper around terminal capabilities")
31957 (description
31958 "Blessed is a thin, practical wrapper around terminal styling, screen
31959positioning, and keyboard input.")
31960 (license license:expat)))
31961
31962(define-public python-readme-renderer
31963 (package
31964 (name "python-readme-renderer")
31965 (version "45.0")
31966 (source
31967 (origin
31968 (method git-fetch)
31969 (uri (git-reference
31970 (url "https://github.com/pypa/readme_renderer")
31971 (commit version)))
31972 (file-name (git-file-name name version))
31973 (sha256
31974 (base32 "15ald40v4vv7sb2as8z7jggcwdy0nbx5m0icqv4ii9wriqrzf7kx"))))
31975 (build-system pyproject-build-system)
31976 (arguments
31977 (list
31978 ;; tests: 99 passed, 2 skipped, 1 deselected, 1 warning
31979 #:test-flags
31980 ;; Assertion error in one test.
31981 #~(list (string-append "--deselect=tests/test_markdown.py"
31982 "::test_md_fixtures[test_GFM_headings.md]"))))
31983 (propagated-inputs
31984 (list python-docutils
31985 python-nh3
31986 python-pygments
31987 ;; [optional]
31988 python-comrak))
31989 (native-inputs
31990 (list python-pytest
31991 python-setuptools))
31992 (home-page "https://github.com/pypa/readme_renderer")
31993 (synopsis "Render README files in Warehouse")
31994 (description
31995 "Readme Renderer is a library that will safely render arbitrary README
31996files into HTML. It is designed to be used in Warehouse to render the
31997@code{long_description} for packages. It can handle Markdown,
31998reStructuredText, and plain text.")
31999 (license license:asl2.0)))
32000
32001(define-public python-lazr-delegates
32002 (package
32003 (name "python-lazr-delegates")
32004 (version "2.1.1")
32005 (source
32006 (origin
32007 (method url-fetch)
32008 (uri (pypi-uri "lazr_delegates" version))
32009 (sha256
32010 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
32011 (build-system pyproject-build-system)
32012 (arguments
32013 (list
32014 #:test-flags #~(list "-v" #$output)
32015 #:phases
32016 #~(modify-phases %standard-phases
32017 (add-after 'check 'check-cleanup
32018 (lambda* (#:key tests? #:allow-other-keys)
32019 (when tests?
32020 (for-each
32021 delete-file-recursively
32022 (find-files #$output
32023 (lambda (file stat)
32024 (or (member (basename file)
32025 '("tests" ".pytest_cache"))))
32026 #:directories? #t))))))))
32027 (native-inputs
32028 (list python-pytest python-setuptools python-wheel))
32029 (propagated-inputs
32030 (list python-zope-interface))
32031 (home-page "https://launchpad.net/lazr.delegates")
32032 (synopsis "Easily write objects that delegate behavior")
32033 (description
32034 "The @code{lazr.delegates} package makes it easy to write objects that
32035delegate behavior to another object. The new object adds some property or
32036behavior on to the other object, while still providing the underlying interface,
32037and delegating behavior.")
32038 (license license:lgpl3)))
32039
32040(define-public python-lazr-config
32041 (package
32042 (name "python-lazr-config")
32043 (version "3.1")
32044 (source
32045 (origin
32046 (method url-fetch)
32047 (uri (pypi-uri "lazr_config" version))
32048 (sha256
32049 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
32050 (build-system pyproject-build-system)
32051 (arguments
32052 (list
32053 #:test-flags #~(list "-v" #$output)
32054 #:phases
32055 #~(modify-phases %standard-phases
32056 (add-after 'check 'check-cleanup
32057 (lambda* (#:key tests? #:allow-other-keys)
32058 (when tests?
32059 (for-each
32060 delete-file-recursively
32061 (find-files #$output
32062 (lambda (file stat)
32063 (or (member (basename file)
32064 '("tests" ".pytest_cache"))))
32065 #:directories? #t))))))))
32066 (native-inputs
32067 (list python-pytest python-setuptools python-wheel))
32068 (propagated-inputs
32069 (list python-lazr-delegates python-zope-interface))
32070 (home-page "https://launchpad.net/lazr.config")
32071 (synopsis "Create configuration schemas and process and validate configurations")
32072 (description
32073 "The LAZR config system is typically used to manage process configuration.
32074Process configuration is for saying how things change when we run systems on
32075different machines, or under different circumstances. This system uses ini-like
32076file format of section, keys, and values. The config file supports inheritance
32077to minimize duplication of information across files. The format supports schema
32078validation.")
32079 (license license:lgpl3)))
32080
32081(define-public python-flufl-bounce
32082 (package
32083 (name "python-flufl-bounce")
32084 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
32085 (revision . "0")))
32086 (version (git-version "4.0"
32087 (assoc-ref properties 'revision)
32088 (assoc-ref properties 'commit)))
32089 (source
32090 (origin
32091 (method git-fetch)
32092 (uri (git-reference
32093 (url "https://gitlab.com/flufl/flufl.bounce")
32094 (commit (assoc-ref properties 'commit))))
32095 (file-name (git-file-name name version))
32096 (sha256
32097 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
32098 (build-system pyproject-build-system)
32099 (arguments
32100 (list
32101 #:phases
32102 #~(modify-phases %standard-phases
32103 (replace 'check
32104 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
32105 (when tests?
32106 (with-directory-excursion
32107 (string-append (site-packages inputs outputs) "/flufl")
32108 (invoke "python" "-m" "nose2" "-v"))))))))
32109 (propagated-inputs
32110 (list python-atpublic python-zope-interface))
32111 (native-inputs
32112 (list python-flufl-testing python-nose2 python-setuptools))
32113 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
32114 (synopsis "Email bounce detectors")
32115 (description "The @code{flufl.bounce} library provides a set of heuristics
32116and an API for detecting the original bouncing email addresses from a bounce
32117message. Many formats found in the wild are supported, as are VERP and
32118RFC 3464.")
32119 (license (list license:asl2.0
32120 license:lgpl3)))) ; only for setup_headers.py
32121
32122(define-public python-flufl-i18n
32123 (package
32124 (name "python-flufl-i18n")
32125 (version "5.1.0")
32126 (source
32127 (origin
32128 (method url-fetch)
32129 (uri (pypi-uri "flufl_i18n" version))
32130 (sha256
32131 (base32
32132 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
32133 (build-system pyproject-build-system)
32134 (arguments
32135 (list #:test-flags
32136 #~(list "--no-cov" "--ignore-glob=docs/*")
32137 #:phases
32138 #~(modify-phases %standard-phases
32139 ;; This phase add a symlink of dist-info dir for packages
32140 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
32141 (add-after 'install 'add-custom-dist-info
32142 (lambda _
32143 (for-each
32144 (lambda (dir)
32145 (with-directory-excursion (dirname dir)
32146 (let ((base (basename dir)))
32147 (symlink base
32148 (string-join (string-split base #\_) ".")))))
32149 (find-files #$output
32150 (lambda (file stat)
32151 (string-suffix? ".dist-info" file))
32152 #:directories? #t)))))))
32153 (propagated-inputs
32154 (list python-atpublic))
32155 (native-inputs
32156 (list python-hatchling python-pytest python-sybil))
32157 (home-page "https://flufli18n.readthedocs.io")
32158 (synopsis "API for Python internationalization")
32159 (description
32160 "This package provides a high-level, convenient API for managing
32161internationalization/translation contexts in Python applications. There is a
32162simple API for single-context applications, such as command line scripts which
32163only need to translate into one language during the entire course of their
32164execution. There is a more flexible, but still convenient API for multi-context
32165applications, such as servers, which may need to switch language contexts for
32166different tasks.")
32167 (license license:asl2.0)))
32168
32169(define-public python-flufl-lock
32170 (package
32171 (name "python-flufl-lock")
32172 (version "8.1.0")
32173 (source
32174 (origin
32175 (method url-fetch)
32176 (uri (pypi-uri "flufl.lock" version))
32177 (sha256
32178 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
32179 (build-system pyproject-build-system)
32180 (arguments
32181 (list #:test-flags
32182 #~(list "--no-cov" "--ignore-glob=docs/*")
32183 #:phases
32184 #~(modify-phases %standard-phases
32185 ;; This phase add a symlink of dist-info dir for packages
32186 ;; expecting flufl.lock rather than flufl_lock (mailman).
32187 (add-after 'install 'add-custom-dist-info
32188 (lambda _
32189 (for-each
32190 (lambda (dir)
32191 (with-directory-excursion (dirname dir)
32192 (let ((base (basename dir)))
32193 (symlink base
32194 (string-join (string-split base #\_) ".")))))
32195 (find-files #$output
32196 (lambda (file stat)
32197 (string-suffix? ".dist-info" file))
32198 #:directories? #t)))))))
32199 (native-inputs
32200 (list python-hatchling python-pytest python-sybil))
32201 (propagated-inputs
32202 (list python-atpublic python-psutil))
32203 (home-page "https://flufllock.readthedocs.io")
32204 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
32205 (description
32206 "The @dfn{flufl.lock} package provides NFS-safe file locking with
32207timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
32208@code{open} system call but uses a lockfile. Lock objects support lock-breaking
32209and have a maximum lifetime built-in.")
32210 (license (list license:asl2.0
32211 license:lgpl3)))) ; only for setup_helpers.py
32212
32213(define-public python-flufl-testing
32214 (package
32215 (name "python-flufl-testing")
32216 (version "0.8")
32217 (source
32218 (origin
32219 (method git-fetch)
32220 (uri (git-reference
32221 (url "https://gitlab.com/warsaw/flufl.testing")
32222 (commit version)))
32223 (file-name (git-file-name name version))
32224 (sha256
32225 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
32226 (build-system pyproject-build-system)
32227 (arguments (list #:tests? #f)) ;no tests
32228 (native-inputs (list python-setuptools))
32229 (home-page "https://gitlab.com/warsaw/flufl.testing")
32230 (synopsis "Collection of test tool plugins")
32231 (description
32232 "This package contains a small collection of test tool plugins for
32233@code{nose2} and @code{flake8}.")
32234 (license license:asl2.0)))
32235
32236(define-public python-devtools
32237 (package
32238 (name "python-devtools")
32239 (version "0.12.2")
32240 (source
32241 (origin
32242 (method git-fetch)
32243 (uri (git-reference
32244 (url "https://github.com/samuelcolvin/python-devtools")
32245 (commit (string-append "v" version))))
32246 (file-name (git-file-name name version))
32247 (sha256
32248 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
32249 (build-system pyproject-build-system)
32250 (arguments
32251 (list
32252 #:test-flags
32253 ;; Disable some failing tests.
32254 ;;
32255 ;; test_print_subprocess seems to inherit wrong environment, fails with
32256 ;; E + ModuleNotFoundError: No module named 'executing'
32257 ;; Test runs fine from local clone.
32258 ;;
32259 ;; test_executing_failure fails with
32260 ;; E - [1, 2] (list) len=2
32261 ;; E + [x, y]: [1, 2] (list) len=2
32262 ;; unclear why, probably due to a dependency.
32263 '(list "-k" "not test_print_subprocess and not test_executing_failure"
32264 ;; test_insert_assert.py also seems to inherit a bad environment:
32265 ;; E fixture 'pytester_pretty' not found
32266 ;; Test runs fine from local clone.
32267 "--ignore=tests/test_insert_assert.py")))
32268 (native-inputs
32269 (list python-hatchling python-pytest python-pytest-mock))
32270 (propagated-inputs
32271 (list python-asttokens python-executing python-pygments))
32272 (home-page "https://github.com/samuelcolvin/python-devtools")
32273 (synopsis "Debug command and development tools")
32274 (description
32275 "This package provides a debug print command and other development tools.
32276It adds a simple and readable way to print stuff during development.")
32277 (license license:expat)))
32278
32279(define-public python-dateparser
32280 (package
32281 (name "python-dateparser")
32282 (version "1.2.2")
32283 (source
32284 (origin
32285 (method url-fetch)
32286 (uri (pypi-uri "dateparser" version))
32287 (sha256
32288 (base32
32289 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
32290 (build-system pyproject-build-system)
32291 (arguments
32292 (list
32293 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
32294 #:test-flags
32295 #~(list (string-join '("--deselect=tests/test_search.py"
32296 "TestTranslateSearch"
32297 "test_search_dates_with_prepositions")
32298 "::"))))
32299 (propagated-inputs
32300 (list python-dateutil
32301 python-pytz
32302 python-regex
32303 python-tzlocal))
32304 (native-inputs
32305 (list python-parameterized
32306 python-pytest
32307 python-setuptools
32308 tzdata-for-tests))
32309 (home-page "https://github.com/scrapinghub/dateparser")
32310 (synopsis
32311 "Date parsing library designed to parse dates from HTML pages")
32312 (description
32313 "@code{python-dateparser} provides modules to easily parse localized
32314dates in almost any string formats commonly found on web pages.")
32315 (license license:bsd-3)))
32316
32317(define-public python-dparse
32318 (package
32319 (name "python-dparse")
32320 (version "0.6.4")
32321 (source
32322 (origin
32323 (method url-fetch)
32324 (uri (pypi-uri "dparse" version))
32325 (sha256
32326 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
32327 (build-system pyproject-build-system)
32328 (native-inputs (list python-hatchling python-pytest))
32329 (propagated-inputs (list python-packaging python-toml))
32330 (home-page "https://github.com/pyupio/dparse")
32331 (synopsis "Parser for Python dependency files")
32332 (description "This package provides a parser for Python dependency files.")
32333 (license license:expat)))
32334
32335(define-public python-dpath
32336 (package
32337 (name "python-dpath")
32338 (version "2.2.0")
32339 (source
32340 (origin
32341 (method url-fetch)
32342 (uri (pypi-uri "dpath" version))
32343 (sha256
32344 (base32
32345 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
32346 (build-system pyproject-build-system)
32347 (native-inputs
32348 (list python-hypothesis python-nose2 python-setuptools python-wheel))
32349 (home-page "https://github.com/akesterson/dpath-python")
32350 (synopsis "File-system-like pathing and searching for dictionaries")
32351 (description
32352 "@code{python-dpath} is a library for accessing and searching
32353dictionaries via /slashed/paths ala xpath.
32354
32355Basically it lets you glob over a dictionary as if it were a file system. It
32356allows you to specify globs (ala the bash eglob syntax, through some advanced
32357fnmatch.fnmatch magic) to access dictionary elements, and provides some
32358facility for filtering those results.")
32359 (license license:expat)))
32360
32361(define-public python-safety
32362 (package
32363 (name "python-safety")
32364 (version "3.8.1")
32365 (source
32366 (origin
32367 (method git-fetch)
32368 (uri (git-reference
32369 (url "https://github.com/pyupio/safety")
32370 (commit version)))
32371 (file-name (git-file-name name version))
32372 (sha256
32373 (base32 "00i0jgv89kwbp130ykrfp2754k06agqs9sflsjpafcrf3jx7r9n4"))
32374 (patches
32375 (list
32376 (origin
32377 (method url-fetch)
32378 (uri (string-append
32379 "https://github.com/pyupio/safety/commit/"
32380 "145a3956007a01e57a8e05d111633c2309ad3374.patch"))
32381 (sha256
32382 (base32
32383 "00bsqhbvvpiycdz01vvxkp02i10rn3h5xaffib20h8yxnvx2xjbj")))))))
32384 (build-system pyproject-build-system)
32385 (arguments
32386 (list
32387 #:phases
32388 #~(modify-phases %standard-phases
32389 (add-after 'unpack 'disable-telemetry
32390 (lambda _
32391 (substitute* (find-files "." "\\.py$")
32392 (("telemetry: bool = True")
32393 "telemetry: bool = False")
32394 (("telemetry=True")
32395 "telemetry=False"))))
32396 (add-before 'check 'set-home ; some tests run mkdir
32397 (lambda _
32398 (setenv "HOME" "/tmp"))))))
32399 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32400 (propagated-inputs (list python-authlib
32401 python-certifi
32402 python-click
32403 python-dparse
32404 python-filelock
32405 python-httpx
32406 python-jinja2
32407 python-marshmallow
32408 python-nltk
32409 python-packaging
32410 python-pydantic
32411 python-safety-schemas
32412 python-tenacity
32413 python-tomli
32414 python-tomlkit
32415 python-truststore
32416 ;; XXX: python-safety subclasses click.Context
32417 ;; in a way that assumes Typer still delegates
32418 ;; to the standalone python-click package.
32419 python-typer-without-click
32420 python-typing-extensions))
32421 (home-page "https://github.com/pyupio/safety")
32422 (synopsis "Check installed dependencies for known vulnerabilities")
32423 (description
32424 "Safety checks installed dependencies for known vulnerabilities.
32425By default it uses the open Python vulnerability database Safety DB.")
32426 (license license:expat)))
32427
32428(define-public python-pypandoc
32429 (package
32430 (name "python-pypandoc")
32431 (version "1.15")
32432 (source
32433 (origin
32434 (method git-fetch)
32435 (uri (git-reference
32436 (url "https://github.com/JessicaTegner/pypandoc")
32437 (commit (string-append "v" version))))
32438 (file-name (git-file-name name version))
32439 (sha256
32440 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32441 (build-system pyproject-build-system)
32442 (arguments
32443 (list
32444 #:test-backend #~'unittest
32445 #:phases
32446 #~(modify-phases %standard-phases
32447 (add-before 'check 'disable-tests
32448 (lambda _
32449 (substitute* "tests.py"
32450 ;; Disable test requiring network access
32451 (("test_basic_conversion_from_http_url")
32452 "skip_test_basic_conversion_from_http_url")
32453 ;; Disable tests with missing files
32454 (("test_basic_conversion_from_file_pattern")
32455 "skip_test_basic_conversion_from_file_pattern")
32456 (("test_conversion_with_data_files")
32457 "skip_test_conversion_with_data_files")))))))
32458 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32459 ;; the missing etoolbox.sty file is added
32460 (native-inputs
32461 (list (texlive-local-tree
32462 (list texlive-etoolbox
32463 texlive-lm
32464 texlive-regexpatch
32465 texlive-xcolor))
32466 python-poetry-core
32467 python-setuptools))
32468 (inputs (list pandoc python-pandocfilters))
32469 (propagated-inputs (list python-wheel))
32470 (home-page "https://github.com/JessicaTegner/pypandoc")
32471 (synopsis "Python wrapper for pandoc")
32472 (description
32473 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32474 (license license:expat)))
32475
32476(define-public python-rnc2rng
32477 (package
32478 (name "python-rnc2rng")
32479 (version "2.7.0")
32480 (source
32481 (origin
32482 (method git-fetch)
32483 (uri (git-reference
32484 (url "https://github.com/djc/rnc2rng")
32485 (commit version)))
32486 (file-name (git-file-name name version))
32487 (sha256
32488 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32489 (build-system pyproject-build-system)
32490 (arguments
32491 (list
32492 #:test-backend #~'custom
32493 #:test-flags #~(list "test.py")))
32494 (native-inputs (list python-setuptools))
32495 (propagated-inputs (list python-rply))
32496 (home-page "https://github.com/djc/rnc2rng")
32497 (synopsis "Convert RELAX NG Compact to regular syntax")
32498 (description
32499 "This package provides the @command{rnc2rng} command-line tool as well as
32500a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32501equivalent schemata in the XML-based default RELAX NG syntax.")
32502 (license license:expat)))
32503
32504(define-public python-citeproc-py
32505 (package
32506 (name "python-citeproc-py")
32507 (version "0.9.0")
32508 (source
32509 (origin
32510 (method git-fetch)
32511 (uri (git-reference
32512 (url "https://github.com/brechtm/citeproc-py")
32513 (commit (string-append "v" version))
32514 (recursive? #t))) ; TODO Unbundle.
32515 (file-name (git-file-name name version))
32516 (sha256
32517 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32518 (build-system pyproject-build-system)
32519 (arguments
32520 (list
32521 #:phases
32522 #~(modify-phases %standard-phases
32523 (add-after 'unpack 'set-version
32524 (lambda _
32525 (delete-file "citeproc/_version.py")
32526 (substitute* "citeproc/__init__.py"
32527 (("from \\. import version")
32528 "")
32529 (("__version__ =.*")
32530 (format #f "__version__ = ~s" #$version))))))))
32531 (native-inputs (list python-pytest python-setuptools))
32532 (propagated-inputs (list python-lxml python-rnc2rng))
32533 (home-page "https://github.com/brechtm/citeproc-py")
32534 (synopsis "Citations and bibliography formatter")
32535 (description
32536 "Citeproc-py is a CSL processor for Python. It aims to implement the
32537CSL 1.0.1 specification. citeproc-py can output styled citations and
32538bibliographies in a number of different output formats. Currently supported
32539are plain text, reStructuredText and HTML.")
32540 (license license:bsd-2)))
32541
32542(define-public python-inform
32543 (package
32544 (name "python-inform")
32545 (version "1.34")
32546 (source
32547 (origin
32548 (method git-fetch) ; no tests in PyPI release
32549 (uri (git-reference
32550 (url "https://github.com/kenkundert/inform")
32551 (commit (string-append "v" version))))
32552 (file-name (git-file-name name version))
32553 (sha256
32554 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32555 (build-system pyproject-build-system)
32556 (arguments
32557 (list
32558 #:test-flags #~(list "-k" (string-append
32559 ;; Test below needs the num2words package
32560 "not test_plural_words"
32561 ;; These last two failed with AssertionError
32562 " and not test_inform"
32563 " and not test_manual"))))
32564 (native-inputs
32565 (list python-flit-core python-pytest))
32566 (propagated-inputs
32567 (list python-arrow))
32568 (home-page "https://inform.readthedocs.io")
32569 (synopsis "Print & logging utilities for communicating with user")
32570 (description
32571 "Inform is designed to display messages from programs that are typically run from
32572a console. It provides a collection of ‘print’ functions that allow you to simply and
32573cleanly print different types of messages.")
32574 (license license:gpl3+)))
32575
32576(define-public python-nestedtext
32577 (package
32578 (name "python-nestedtext")
32579 (version "3.7")
32580 (source
32581 (origin
32582 (method git-fetch) ; no tests in PyPI release
32583 (uri (git-reference
32584 (url "https://github.com/KenKundert/nestedtext")
32585 (commit (string-append "v" version))))
32586 (file-name (git-file-name name version))
32587 (sha256
32588 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32589 (build-system pyproject-build-system)
32590 (arguments
32591 (list
32592 ;; XXX: Tests below need some not yet packaged Python libraries.
32593 #:test-flags #~(list "--ignore" "examples/"
32594 "--ignore" "tests/test_nestedtext.py"
32595 "-k" (string-append
32596 "not techniques.rst"
32597 " and not nestedtext.nestedtext.dumps"))))
32598 (native-inputs (list python-flit-core python-pytest))
32599 (propagated-inputs
32600 (list python-inform))
32601 (home-page "https://nestedtext.org")
32602 (synopsis "Human readable and writable data interchange format")
32603 (description
32604 "NestedText is a file format for holding data that is to be entered, edited, or
32605viewed by people. It allows data to be organized into a nested collection of
32606dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32607without the complexity and risk of YAML and without the syntactic clutter of JSON.
32608NestedText is both simple and natural. Only a small number of concepts and rules must
32609be kept in mind when creating it. It is easily created, modified, or viewed with
32610a text editor and easily understood and used by both programmers and non-programmers.")
32611 (license license:expat))) ; MIT license
32612
32613(define-public python-nest-asyncio
32614 (package
32615 (name "python-nest-asyncio")
32616 (version "1.6.0")
32617 (source
32618 (origin
32619 (method url-fetch)
32620 (uri (pypi-uri "nest_asyncio" version))
32621 (sha256
32622 (base32
32623 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32624 (build-system pyproject-build-system)
32625 (native-inputs
32626 (list python-pytest python-setuptools))
32627 (home-page "https://github.com/erdewit/nest_asyncio")
32628 (synopsis "Patch asyncio to allow nested event loops")
32629 (description
32630 "By design @code{asyncio} does not allow its event loop to be nested.
32631This presents a practical problem: when in an environment where the event loop
32632is already running it's impossible to run tasks and wait for the result. This
32633module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32634@code{loop.run_until_complete}.")
32635 (license license:bsd-3)))
32636
32637(define-public python-simpervisor
32638 (package
32639 (name "python-simpervisor")
32640 (version "1.0.0")
32641 (source
32642 (origin
32643 ;; Tests not included in release.
32644 (method git-fetch)
32645 (uri (git-reference
32646 (url "https://github.com/yuvipanda/simpervisor")
32647 (commit (string-append "v" version))))
32648 (file-name (git-file-name name version))
32649 (sha256
32650 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32651 (build-system pyproject-build-system)
32652 (arguments
32653 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32654 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32655 (native-inputs
32656 (list python-aiohttp
32657 python-hatchling
32658 python-psutil
32659 python-pytest
32660 python-pytest-asyncio))
32661 (home-page "https://github.com/yuvipanda/simpervisor")
32662 (synopsis "Simple async process supervisor")
32663 (description
32664 "This package provides a simple async process supervisor in Python.")
32665 (license license:bsd-3)))
32666
32667(define-public python-parallel
32668 (package
32669 (name "python-parallel")
32670 (version "1.6.4.4")
32671 (source
32672 (origin
32673 (method url-fetch)
32674 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32675 version ".zip"))
32676 (sha256
32677 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32678 (build-system pyproject-build-system)
32679 (arguments (list #:tests? #f)) ;No test suite.
32680 (native-inputs (list python-setuptools unzip))
32681 (propagated-inputs (list python-six))
32682 (home-page "https://www.parallelpython.com")
32683 (synopsis "Parallel and distributed programming for Python")
32684 (description
32685 "Parallel Python module (PP) provides an easy and efficient way to create
32686parallel-enabled applications for SMP computers and clusters. PP module
32687features cross-platform portability and dynamic load balancing. Thus
32688applications written with PP will parallelize efficiently even on
32689heterogeneous and multi-platform clusters (including clusters running other
32690applications with variable CPU loads).")
32691 (license license:bsd-3)))
32692
32693(define-public python-param
32694 (package
32695 (name "python-param")
32696 (version "2.3.3")
32697 (source
32698 (origin
32699 (method git-fetch)
32700 (uri (git-reference
32701 (url "https://github.com/holoviz/param")
32702 (commit (string-append "v" version))))
32703 (file-name (git-file-name name version))
32704 (sha256
32705 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32706 (build-system pyproject-build-system)
32707 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32708 (native-inputs
32709 ;; Project does not require any dependencies, all of the listed
32710 ;; native-inputs are for build/test only.
32711 (list python-cloudpickle
32712 python-hatch-vcs
32713 python-hatchling
32714 python-ipython-minimal
32715 python-jsonschema
32716 python-nbval
32717 python-nest-asyncio
32718 python-numpy
32719 python-odfpy
32720 python-openpyxl
32721 python-pandas
32722 python-pyarrow
32723 python-pytest
32724 python-pytest-asyncio
32725 python-tables
32726 python-xlrd))
32727 (home-page "https://param.holoviz.org/")
32728 (synopsis
32729 "Make your Python code clearer and more reliable by declaring Parameters")
32730 (description
32731 "Param is a library for handling all the user-modifiable parameters,
32732arguments, and attributes that control your code. It provides automatic,
32733robust error-checking while dramatically reducing boilerplate code, letting
32734you focus on what you want your code to do rather than on checking for all the
32735possible ways users could supply inappropriate values to a function or
32736class.")
32737 (license license:bsd-3)))
32738
32739(define-public python-djitellopy
32740 (package
32741 (name "python-djitellopy")
32742 (version "2.5.0")
32743 (source
32744 (origin
32745 (method url-fetch)
32746 (uri (pypi-uri "djitellopy" version))
32747 (sha256
32748 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32749 (build-system pyproject-build-system)
32750 (arguments
32751 (list
32752 #:tests? #f ;no test suite
32753 #:phases
32754 #~(modify-phases %standard-phases
32755 ;; OpenCV does not ship metadata files for its Python library, which
32756 ;; makes it invisible to the sanity_check script (see:
32757 ;; https://github.com/opencv/opencv/issues/24810).
32758 (delete 'sanity-check))))
32759 (propagated-inputs
32760 (list opencv ;for opencv-python
32761 python-av
32762 python-numpy
32763 python-pillow))
32764 (native-inputs (list python-setuptools python-wheel))
32765 (home-page "https://github.com/damiafuentes/DJITelloPy")
32766 (synopsis
32767 "DJI Tello drone video streaming, swarms and state packets library")
32768 (description
32769 "DJI Tello drone Python interface using the official Tello SDK and Tello
32770EDU SDK. This library has the following features:
32771@itemize
32772@item Implementation of all tello commands
32773@item Retrieve a video stream easily
32774@item Receive and parse state packets
32775@item Control a swarm of drones.
32776@end itemize")
32777 (license license:expat)))
32778
32779(define-public python-djvulibre
32780 ;; The original git repository of python-djvulibre is hosted at
32781 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32782 ;; has been archived by its owner in 2022. The most active fork is
32783 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32784 ;; version packaged here (its "python3" branch, the default).
32785 ;;
32786 ;; However, the python-djvulibre PyPI project still refers to the old
32787 ;; repository. The new repository is published as djvulibre-python on PyPI;
32788 ;; that is, with the name in reversed order.The original package name is
32789 ;; used in Guix because it best adheres to the Guix naming scheme.
32790 (package
32791 (name "python-djvulibre")
32792 (version "0.9.3")
32793 (source
32794 (origin
32795 (method git-fetch)
32796 (uri (git-reference
32797 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32798 (commit version)))
32799 (file-name (git-file-name name version))
32800 (sha256
32801 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32802 (build-system pyproject-build-system)
32803 (arguments
32804 (list
32805 #:phases
32806 #~(modify-phases %standard-phases
32807 (replace 'check
32808 (lambda* (#:key tests? #:allow-other-keys)
32809 (when tests?
32810 ;; The tests get confused by the djvu directory.
32811 (delete-file-recursively "djvu")
32812 ;; Tests can't find tools.py otherwise.
32813 (with-directory-excursion "tests"
32814 (invoke "python" "-m" "pytest"))))))))
32815 (native-inputs
32816 (list ghostscript
32817 pkg-config
32818 python-cython
32819 python-pytest
32820 python-setuptools))
32821 (inputs
32822 (list djvulibre))
32823 (synopsis "Python bindings for DjVuLibre")
32824 (description "This is a set of Python bindings for the DjVuLibre library.")
32825 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32826 (license license:gpl2)))
32827
32828(define-public python-gamera
32829 (package
32830 (name "python-gamera")
32831 (version "4.1.0")
32832 (source
32833 (origin
32834 (method git-fetch)
32835 (uri (git-reference
32836 (url "https://github.com/hsnr-gamera/gamera-4")
32837 (commit (string-append "v" version))))
32838 (file-name (git-file-name name version))
32839 (sha256
32840 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32841 (build-system pyproject-build-system)
32842 (arguments
32843 (list
32844 #:phases
32845 #~(modify-phases %standard-phases
32846 (add-after 'unpack 'fix-build
32847 (lambda _
32848 ;; The script to make daily build artifacts fails to compile,
32849 ;; but users don't need that, so ignore it.
32850 (delete-file "misc/daily_build.py")
32851 ;; Prepare tests
32852 (mkdir-p "tmp")
32853 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32854 (native-inputs (list python-docutils python-pytest python-setuptools))
32855 (inputs (list libpng libtiff zlib))
32856 (synopsis "Framework for building document analysis applications")
32857 (description
32858 "Gamera is a toolkit for building document image recognition systems.")
32859 (home-page "https://gamera.informatik.hsnr.de/")
32860 (license license:gpl2+)))
32861
32862(define-public python-aiofiles
32863 (package
32864 (name "python-aiofiles")
32865 (version "24.1.0")
32866 (source
32867 (origin
32868 (method url-fetch)
32869 (uri (pypi-uri "aiofiles" version))
32870 (sha256
32871 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32872 (build-system pyproject-build-system)
32873 (native-inputs
32874 (list python-hatch-vcs
32875 python-hatchling
32876 python-pytest
32877 python-pytest-asyncio))
32878 (home-page "https://github.com/Tinche/aiofiles")
32879 (synopsis "File support for @code{asyncio}")
32880 (description
32881 "@code{python-aiofiles} is a library for handling local disk files in
32882asyncio applications.")
32883 (license license:asl2.0)))
32884
32885(define-public python-pyre-extensions
32886 (package
32887 (name "python-pyre-extensions")
32888 (version "0.0.32")
32889 (source
32890 (origin
32891 (method url-fetch)
32892 (uri (pypi-uri "pyre_extensions" version))
32893 (sha256
32894 (base32
32895 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32896 (build-system pyproject-build-system)
32897 (native-inputs (list python-pytest python-setuptools python-wheel))
32898 (propagated-inputs
32899 (list python-typing-extensions python-typing-inspect))
32900 (home-page "https://pyre-check.org")
32901 (synopsis
32902 "Type system extensions for use with @code{python-pyre}")
32903 (description
32904 "@code{python-pyre-extensions} defines extensions to the standard
32905@code{typing} module that are supported by the Pyre typechecker.")
32906 (license license:expat)))
32907
32908(define-public python-pywatchman
32909 (package
32910 (name "python-pywatchman")
32911 (version "3.0.0")
32912 (source
32913 (origin
32914 (method url-fetch)
32915 (uri (pypi-uri "pywatchman" version))
32916 (sha256
32917 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32918 (build-system pyproject-build-system)
32919 (arguments
32920 (list
32921 #:test-backend #~'custom
32922 #:test-flags #~(list "tests/tests.py")))
32923 (native-inputs (list python-setuptools))
32924 (home-page "https://facebook.github.io/watchman/")
32925 (synopsis "Watchman client for python")
32926 (description
32927 "@code{python-pywatchman} is a library to connect and query Watchman to
32928discover file changes.")
32929 (license license:bsd-3)))
32930
32931(define-public python-roundrobin
32932 (package
32933 (name "python-roundrobin")
32934 (version "0.0.4")
32935 (source
32936 (origin
32937 (method git-fetch)
32938 (uri (git-reference
32939 (url "https://github.com/linnik/roundrobin")
32940 (commit version)))
32941 (file-name (git-file-name name version))
32942 (sha256
32943 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32944 (build-system pyproject-build-system)
32945 (arguments
32946 (list #:test-backend #~'unittest))
32947 (native-inputs (list python-setuptools))
32948 (home-page "https://github.com/linnik/roundrobin")
32949 (synopsis "Collection of roundrobin utilities")
32950 (description
32951 "This package provides a collection of utilities for round-robin
32952distribution in Python.")
32953 (license license:expat)))
32954
32955(define-public python-helpdev
32956 (package
32957 (name "python-helpdev")
32958 (version "0.7.1")
32959 (source
32960 (origin
32961 (method git-fetch)
32962 (uri (git-reference
32963 (url "https://gitlab.com/dpizetta/helpdev")
32964 (commit (string-append "v" version))))
32965 (file-name (git-file-name name version))
32966 (sha256
32967 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32968 (build-system pyproject-build-system)
32969 (native-inputs (list python-pip python-pytest python-setuptools))
32970 (home-page "https://gitlab.com/dpizetta/helpdev")
32971 (synopsis "Extract information about the Python environment easily")
32972 (description
32973 "Helpdev is a library to easily extract information about the Python
32974environment.")
32975 (license license:expat)))
32976
32977(define-public python-loguru
32978 (package
32979 (name "python-loguru")
32980 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32981 ;; covert to git tag when released.
32982 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32983 (revision . "0")))
32984 (version (git-version "0.7.3"
32985 (assoc-ref properties 'revision)
32986 (assoc-ref properties 'commit)))
32987 (source
32988 (origin
32989 (method git-fetch)
32990 (uri (git-reference
32991 (url "https://github.com/Delgan/loguru")
32992 (commit (assoc-ref properties 'commit))))
32993 (file-name (git-file-name name version))
32994 (sha256
32995 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32996 (build-system pyproject-build-system)
32997 ;; tests: x86_64-linux 1598 passed, 28 skipped
32998 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32999 (arguments
33000 (list
33001 #:test-flags
33002 #~(list #$@(if (target-64bit?)
33003 '()
33004 ;; OverflowError
33005 '("--deselect=tests/test_datetime.py::test_formatting"
33006 (string-append "--deselect=tests/test_datetime.py"
33007 "::test_value_of_gmtoff_is_invalid"))))))
33008 (native-inputs
33009 (list python-flit-core
33010 python-freezegun
33011 python-mypy-for-tests
33012 python-pytest
33013 python-setuptools
33014 tzdata-for-tests))
33015 (propagated-inputs
33016 (list python-colorama))
33017 (home-page "https://github.com/Delgan/loguru")
33018 (synopsis "Python logging made (stupidly) simple")
33019 (description "Python logging made (stupidly) simple.")
33020 (license license:expat)))
33021
33022(define-public python-qtsass
33023 (package
33024 (name "python-qtsass")
33025 (version "0.4.0")
33026 (source
33027 (origin
33028 ;; There are no tests in the PyPI tarball.
33029 (method git-fetch)
33030 (uri (git-reference
33031 (url "https://github.com/spyder-ide/qtsass/")
33032 (commit (string-append "v" version))))
33033 (file-name (git-file-name name version))
33034 (sha256
33035 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
33036 (build-system pyproject-build-system)
33037 (native-inputs
33038 (list python-flaky python-pytest python-setuptools python-wheel))
33039 (propagated-inputs
33040 (list python-libsass))
33041 (home-page "https://github.com/spyder-ide/qtsass")
33042 (synopsis "Compile SCSS files to valid Qt stylesheets")
33043 (description
33044 "Besides being used in web development, CSS is also the way to stylize
33045Qt-based desktop applications. However, Qt's CSS has a few variations that
33046prevent the direct use of SASS compiler.
33047
33048The purpose of this tool is to fill the gap between SASS and Qt-CSS by
33049handling those variations.")
33050 (license license:expat)))
33051
33052(define-public python-qdarkstyle
33053 (package
33054 (name "python-qdarkstyle")
33055 (version "3.2.3")
33056 (source
33057 (origin
33058 (method url-fetch)
33059 (uri (pypi-uri "QDarkStyle" version))
33060 (sha256
33061 (base32
33062 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
33063 (build-system pyproject-build-system)
33064 (native-inputs (list python-pytest
33065 python-qtsass
33066 python-setuptools
33067 python-watchdog
33068 python-wheel))
33069 (propagated-inputs
33070 (list python-qtpy python-pyqt-6))
33071 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
33072 (synopsis
33073 "Complete dark stylesheet for Python and Qt applications")
33074 (description "QDarkStyle is the most complete dark stylesheet for Python and
33075Qt applications.")
33076 (license license:expat)))
33077
33078(define-public python-pystray
33079 (package
33080 (name "python-pystray")
33081 (version "0.19.5")
33082 (source
33083 (origin
33084 (method git-fetch)
33085 (uri (git-reference
33086 (url "https://github.com/moses-palmer/pystray")
33087 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
33088 (file-name (git-file-name name version))
33089 (sha256
33090 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
33091 (build-system pyproject-build-system)
33092 (arguments
33093 (list
33094 ;; The test suite requires user interaction, there are no automated
33095 ;; tests.
33096 #:tests? #false
33097 #:phases #~(modify-phases %standard-phases
33098 (add-before 'sanity-check 'use-dummy-backend
33099 (lambda _
33100 ;; Without setting this, pystray tries to connect to
33101 ;; X11 on import.
33102 (setenv "PYSTRAY_BACKEND" "dummy"))))))
33103 (native-inputs (list python-sphinx python-setuptools))
33104 (propagated-inputs (list python-pillow python-six python-xlib))
33105 (home-page "https://github.com/moses-palmer/pystray")
33106 (synopsis "Create a system tray icon")
33107 (description "This library allows you to create a system tray icon.
33108It makes it possible to specify an icon, a title and a callback for when
33109the icon is activated. The icon and title can be changed after the icon
33110has been created, and the visibility of the icon can be toggled.")
33111 (license license:lgpl3+)))
33112
33113(define-public python-bitstring
33114 (package
33115 (name "python-bitstring")
33116 (version "4.3.1")
33117 (source
33118 (origin
33119 (method url-fetch)
33120 (uri (pypi-uri "bitstring" version))
33121 (sha256
33122 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
33123 (build-system pyproject-build-system)
33124 (arguments
33125 (list
33126 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
33127 "--ignore=tests/test_fp8.py"
33128 "--ignore=tests/test_mxfp.py")))
33129 (native-inputs
33130 (list python-gfloat python-pytest python-setuptools python-wheel))
33131 (propagated-inputs
33132 (list python-bitarray))
33133 (home-page "https://github.com/scott-griffiths/bitstring")
33134 (synopsis
33135 "Simple construction, analysis and modification of binary data")
33136 (description
33137 "Bitstring is a library for simple construction, analysis and modification
33138 of binary data.")
33139 (license license:expat)))
33140
33141(define-public python-confuse
33142 (package
33143 (name "python-confuse")
33144 (version "2.3.0")
33145 (source
33146 (origin
33147 (method url-fetch)
33148 (uri (pypi-uri "confuse" version))
33149 (sha256
33150 (base32
33151 "03ljar8a1qv8dacamjqpsxgj8r6p1w4plh6rdpirmv4dnga3n4k6"))))
33152 (build-system pyproject-build-system)
33153 (native-inputs (list python-poetry-core python-pytest))
33154 (propagated-inputs
33155 (list python-pyyaml
33156 ;; Required on Python versions before 3.13.
33157 python-typing-extensions))
33158 (home-page "https://github.com/beetbox/confuse")
33159 (synopsis "Painless YAML configuration")
33160 (description "Confuse is a configuration library for Python that uses
33161YAML. It takes care of defaults, overrides, type checking, command-line
33162integration, human-readable errors, and standard OS-specific locations.")
33163 (license license:expat)))
33164
33165(define-public python-referencing
33166 (package
33167 (name "python-referencing")
33168 (version "0.37.0")
33169 (source
33170 (origin
33171 (method git-fetch)
33172 (uri (git-reference
33173 (url "https://github.com/python-jsonschema/referencing")
33174 (commit (string-append "v" version))))
33175 (file-name (git-file-name name version))
33176 (sha256
33177 (base32 "1h9mlzpgqy3grby4f57qxhlmxy25qvz84g9w5r4g1d8g5qsvvv3j"))))
33178 (build-system pyproject-build-system)
33179 (arguments
33180 (list
33181 #:phases
33182 #~(modify-phases %standard-phases
33183 (add-before 'check 'pre-check
33184 (lambda _
33185 (setenv "REFERENCING_SUITE"
33186 (string-append #$(this-package-native-input
33187 "specification-referencing-suite")
33188 "/share")))))))
33189 (native-inputs
33190 (list python-hatchling
33191 python-hatch-vcs
33192 python-pytest
33193 specification-referencing-suite))
33194 (propagated-inputs
33195 (list python-attrs
33196 python-rpds-py
33197 python-typing-extensions)) ;Python version < 3.13
33198 (home-page "https://github.com/python-jsonschema/referencing")
33199 (synopsis "JSON Referencing + Python")
33200 (description "This package provides an implementation-agnostic
33201implementation of JSON reference resolution.")
33202 (license license:expat)))
33203
33204(define-public python-referencing-bootstrap
33205 (package
33206 (inherit python-referencing)
33207 (name "python-referencing-bootstrap")
33208 (arguments
33209 (list
33210 #:tests? #false
33211 #:phases
33212 '(modify-phases %standard-phases
33213 (add-after 'unpack 'patch-pyproject
33214 (lambda _
33215 ;; The build system does not like this.
33216 (substitute* "pyproject.toml"
33217 ((" \"Topic :: File Formats.*") "")))))))
33218 (native-inputs (list python-hatchling python-hatch-vcs))))
33219
33220(define-public python-reflink
33221 (package
33222 (name "python-reflink")
33223 (version "0.2.2")
33224 (source
33225 (origin
33226 (method git-fetch)
33227 (uri (git-reference
33228 (url "https://gitlab.com/rubdos/pyreflink")
33229 (commit version)))
33230 (file-name (git-file-name name version))
33231 (sha256
33232 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
33233 (build-system pyproject-build-system)
33234 (arguments
33235 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
33236 (propagated-inputs (list python-cffi))
33237 (native-inputs (list python-pytest python-setuptools))
33238 (home-page "https://gitlab.com/rubdos/pyreflink")
33239 (synopsis "Python wrapper around reflink system call")
33240 (description
33241 "Python reflink wraps around platform specific @code{reflink}
33242implementations.")
33243 (license license:expat)))
33244
33245(define-public python-retry
33246 ;; XXX: The project is abandoned upstream for 11y, remove when python-locust
33247 ;; drops it or we can find a way to avoid it.
33248 (package
33249 (name "python-retry")
33250 (version "0.9.2")
33251 (source
33252 (origin
33253 (method git-fetch)
33254 (uri (git-reference
33255 (url "https://github.com/invl/retry")
33256 (commit version)))
33257 (file-name (git-file-name name version))
33258 (sha256
33259 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
33260 (build-system pyproject-build-system)
33261 (arguments
33262 (list
33263 #:phases
33264 #~(modify-phases %standard-phases
33265 (add-after 'unpack 'relax-requirements
33266 (lambda _
33267 (substitute* "requirements.txt"
33268 (("py>=1.4.26,<2.0.0")
33269 "")))))))
33270 (native-inputs (list python-pbr python-pytest))
33271 (propagated-inputs (list python-decorator))
33272 (home-page "https://github.com/invl/retry")
33273 (synopsis "Retry decorator")
33274 (description
33275 "@code{retry} is an easy to use retry decorator for Python. It can be
33276used to retry a function a given number of times.")
33277 (license license:asl2.0)))
33278
33279(define-public python-crayons
33280 (package
33281 (name "python-crayons")
33282 (version "0.4.0")
33283 (source
33284 (origin
33285 (method git-fetch)
33286 (uri (git-reference
33287 (url "https://github.com/MasterOdin/crayons")
33288 (commit (string-append "v" version))))
33289 (file-name (git-file-name name version))
33290 (sha256
33291 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
33292 (build-system pyproject-build-system)
33293 (arguments
33294 (list
33295 #:test-backend #~'custom
33296 #:test-flags #~(list "test_crayons.py")))
33297 (native-inputs (list python-setuptools))
33298 (propagated-inputs (list python-colorama))
33299 (home-page "https://github.com/MasterOdin/crayons")
33300 (synopsis "TextUI colors for Python")
33301 (description
33302 "This package gives you colored strings for the terminal. Crayons
33303automatically wraps a given string in the foreground color and restores the
33304original state after the string is printed.")
33305 (license license:expat)))
33306
33307(define-public python-sane
33308 (package
33309 (name "python-sane")
33310 (version "2.9.2")
33311 (source
33312 (origin
33313 (method git-fetch)
33314 (uri (git-reference
33315 (url "https://github.com/python-pillow/Sane")
33316 (commit (string-append "v" version))))
33317 (file-name (git-file-name name version))
33318 (sha256
33319 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
33320 (build-system pyproject-build-system)
33321 (arguments (list #:tests? #f)) ; No tests.
33322 (native-inputs (list python-setuptools))
33323 (inputs (list sane))
33324 (home-page "https://github.com/python-pillow/Sane")
33325 (synopsis "Python interface to the SANE scanner")
33326 (description
33327 "This package provides Python interface to the SANE scanner and frame
33328grabber interface.")
33329 (license (license:non-copyleft
33330 ;; Yet another variant of the X/MIT license.
33331 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
33332
33333(define-public python-scikit-build
33334 (package
33335 (name "python-scikit-build")
33336 (version "0.18.1")
33337 (source
33338 (origin
33339 (method url-fetch)
33340 (uri (pypi-uri "scikit_build" version))
33341 (sha256
33342 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
33343 (patches
33344 (search-patches "python-scikit-build-setuptools-compat.patch"))))
33345 (build-system pyproject-build-system)
33346 (arguments
33347 (list
33348 #:phases
33349 #~(modify-phases %standard-phases
33350 (add-after 'unpack 'patch-cmake-executable
33351 (lambda* (#:key inputs #:allow-other-keys)
33352 (substitute* "skbuild/constants.py"
33353 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
33354 (format #f "~a ~s~%" head
33355 (search-input-file inputs "bin/cmake"))))))
33356 (add-before 'check 'pre-check
33357 (lambda _
33358 ;; Some tests try to access the network before being skipped.
33359 ;; Skip them by default.
33360 (substitute* "tests/test_setup.py"
33361 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
33362 "pytest.mark.isolated()\n"))))
33363 (replace 'check
33364 (lambda* (#:key tests? #:allow-other-keys)
33365 (when tests?
33366 ;; These tests attempt to pull dependencies from the Internet.
33367 (delete-file "tests/test_distribution.py")
33368 (delete-file "tests/test_pep518.py")
33369 ;; The tests marked as "isolate" are tests that require access
33370 ;; to the network.
33371 (invoke "pytest" "-vv" "-m" "not isolated"
33372 "-n" (number->string (parallel-job-count))
33373 "-k" (string-append
33374 ;; These tests attempt to write to read-only
33375 ;; Python install directory.
33376 "not test_install_command "
33377 "and not test_test_command "
33378 "and not test_hello_develop "
33379 ;; These sdist-related tests fail for unknown
33380 ;; reasons (see:
33381 ;; https://github.com/scikit-build/scikit-build/issues/689).
33382 "and not test_hello_sdist_with_base "
33383 "and not test_manifest_in_sdist "
33384 "and not test_hello_sdist "
33385 "and not test_sdist_with_symlinks "
33386 ;; These are not parallel safe and fail
33387 ;; nondeterministically (see:
33388 ;; https://github.com/scikit-build/scikit-build/issues/711).
33389 "and not test_generator_cleanup "
33390 "and not test_generator_selection "
33391 ;; … and there's more of them
33392 "and not test_cxx_compiler "
33393 "and not test_fortran_compiler ")))))
33394 (add-after 'install 'install-cmake
33395 (lambda* (#:key outputs #:allow-other-keys)
33396 (let ((lib (string-append (assoc-ref outputs "out")
33397 "/lib/cmake/modules")))
33398 (mkdir-p lib)
33399 (with-directory-excursion "skbuild/resources/cmake"
33400 (for-each (lambda (file) (install-file file lib))
33401 (find-files "." "\\.cmake")))))))))
33402 (native-inputs
33403 (list cmake-minimal
33404 gfortran
33405 git-minimal/pinned ;for tests
33406 ninja/pinned
33407 python-cython
33408 python-hatch-fancy-pypi-readme
33409 python-hatch-vcs
33410 python-hatchling
33411 python-pytest
33412 python-pytest-mock
33413 python-pytest-xdist
33414 python-requests
33415 python-virtualenv))
33416 (propagated-inputs
33417 (list python-distro
33418 python-packaging
33419 python-wheel))
33420 (home-page "https://github.com/scikit-build/scikit-build")
33421 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33422 (description "Scikit-build is an improved build system generator for
33423CPython C/C++/Fortran/Cython extensions. It has support for additional
33424compilers, build systems, cross compilation, and locating dependencies and
33425determining their build requirements. The scikit-build package is
33426fundamentally just glue between the @code{setuptools} Python module and
33427CMake.")
33428 (license license:expat)))
33429
33430(define-public python-screeninfo
33431 (package
33432 (name "python-screeninfo")
33433 (version "0.8.1")
33434 (source
33435 (origin
33436 (method git-fetch)
33437 (uri (git-reference
33438 (url "https://github.com/rr-/screeninfo")
33439 (commit version)))
33440 (file-name (git-file-name name version))
33441 (sha256
33442 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33443 (build-system pyproject-build-system)
33444 (native-inputs
33445 (list libdrm
33446 python-poetry-core
33447 python-pytest))
33448 (home-page "https://github.com/rr-/screeninfo")
33449 (synopsis "Fetch location and size of physical screens")
33450 (description
33451 "Fetch location and size of physical screens. GNU/Linux has support on
33452following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33453 (license license:expat)))
33454
33455;; Deprecated on <2026-07-23>.
33456(define-deprecated/public-alias python-screenkey
33457 (@ (gnu packages video) python-screenkey))
33458
33459(define-public python-jinja2-cli
33460 (package
33461 (name "python-jinja2-cli")
33462 (version "0.8.2")
33463 (source
33464 (origin
33465 (method git-fetch)
33466 (uri (git-reference
33467 (url "https://github.com/mattrobenolt/jinja2-cli")
33468 (commit version)))
33469 (file-name (git-file-name name version))
33470 (sha256
33471 (base32
33472 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33473 (build-system pyproject-build-system)
33474 (propagated-inputs
33475 (list python-jinja2))
33476 (native-inputs
33477 (list python-jinja2
33478 python-pytest
33479 python-setuptools
33480 python-wheel))
33481 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33482 (synopsis "Command-line interface to Jinja2")
33483 (description
33484 "This package provides a command-line interface (CLI) to the Jinja2
33485template engine.")
33486 (license license:bsd-3)))
33487
33488(define-public python-readability
33489 (package
33490 (name "python-readability")
33491 (version "0.3.1")
33492 (source
33493 (origin
33494 (method git-fetch)
33495 (uri (git-reference
33496 (url "https://github.com/andreasvc/readability/")
33497 (commit (string-append "v" version))))
33498 (file-name (git-file-name name version))
33499 (sha256
33500 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33501 (build-system pyproject-build-system)
33502 (arguments (list #:tests? #f)) ; No tests.
33503 (native-inputs (list python-setuptools))
33504 (home-page "https://github.com/andreasvc/readability/")
33505 (synopsis "Measure text readability using surface characteristics")
33506 (description
33507 "This package provides a Python library that is an implementation of
33508traditional readability measures based on simple surface characteristics.
33509These measures are basically linear regressions based on the number of words,
33510syllables, and sentences.")
33511 (license license:asl2.0)))
33512
33513(define-public python-readability-lxml
33514 (package
33515 (name "python-readability-lxml")
33516 (version "0.9")
33517 (source
33518 (origin
33519 (method git-fetch)
33520 (uri (git-reference
33521 (url "http://github.com/buriy/python-readability")
33522 (commit version)))
33523 (file-name (git-file-name name version))
33524 (sha256
33525 (base32 "05alz7i33m4n7097jl5slxy5k2lnnxwwadqw956gwk1fihyzidrp"))))
33526 (build-system pyproject-build-system)
33527 (native-inputs
33528 (list python-poetry-core
33529 python-pytest))
33530 (propagated-inputs
33531 (list python-chardet
33532 python-cssselect
33533 python-lxml
33534 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33535 (home-page "http://github.com/buriy/python-readability")
33536 (synopsis "HTML to text parser")
33537 (description
33538 "This package provides classes and function that strip gratuitous markup
33539from web pages to make them easier to read.")
33540 (license license:asl2.0)))
33541
33542(define-public python-listparser
33543 (package
33544 (name "python-listparser")
33545 (version "0.20")
33546 (source
33547 (origin
33548 (method git-fetch)
33549 (uri (git-reference
33550 (url "https://github.com/kurtmckee/listparser")
33551 (commit (string-append "v" version))))
33552 (file-name (git-file-name name version))
33553 (sha256
33554 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33555 (build-system pyproject-build-system)
33556 (native-inputs (list python-pytest python-poetry-core))
33557 (home-page "https://github.com/kurtmckee/listparser")
33558 (synopsis "Parse subscription lists in Python")
33559 (description
33560 "This package provides a Python library that can parse OPML, FOAF, and
33561iGoogle subscription lists.")
33562 (license license:expat)))
33563
33564(define-public python-smartypants
33565 (package
33566 (name "python-smartypants")
33567 (version "2.0.2")
33568 (source
33569 (origin
33570 (method url-fetch)
33571 (uri (pypi-uri "smartypants" version))
33572 (sha256
33573 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33574 (build-system pyproject-build-system)
33575 (native-inputs
33576 (list python-docutils python-pygments python-setuptools))
33577 (home-page "https://github.com/justinmayer/smartypants.py")
33578 (synopsis "Translate punctuation characters into smart quotes")
33579 (description
33580 "@command{smartpants} can perform the following transformations:
33581@enumerate
33582@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33583@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33584entities
33585@item Dashes (-- and ---) into en- and em-dash entities
33586@item Three consecutive dots (... or . . .) into an ellipsis entity
33587@end enumerate")
33588 (license license:bsd-3)))
33589
33590(define-public python-ld
33591 (package
33592 (name "python-ld")
33593 (version "1.9.0")
33594 (source
33595 (origin
33596 (method git-fetch)
33597 (uri (git-reference
33598 (url "https://github.com/nir0s/ld")
33599 (commit (string-append "v" version))))
33600 (file-name (git-file-name name version))
33601 (sha256
33602 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33603 (build-system pyproject-build-system)
33604 (arguments
33605 (list
33606 ;; XXX: These tests expect ubuntu distro.
33607 #:test-flags
33608 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33609 "test_ubuntu14nomodules_lsb_release"
33610 "test_trailingblanks_lsb_release")
33611 " and not "))))
33612 (native-inputs (list python-pytest python-setuptools))
33613 (home-page "https://github.com/nir0s/ld")
33614 (synopsis "OS platform information API")
33615 (description
33616 "The ld package provides information about the GNU/Linux distribution it
33617runs on, such as a reliable machine-readable ID, or version information.")
33618 (license license:asl2.0)))
33619
33620(define-public python-quicktions
33621 (package
33622 (name "python-quicktions")
33623 (version "1.22")
33624 (source
33625 (origin
33626 (method git-fetch)
33627 (uri (git-reference
33628 (url "https://github.com/scoder/quicktions")
33629 (commit version)))
33630 (file-name (git-file-name name version))
33631 (sha256
33632 (base32
33633 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33634 (build-system pyproject-build-system)
33635 (native-inputs
33636 (list python-cython python-pytest python-setuptools))
33637 (home-page "https://github.com/scoder/quicktions")
33638 (synopsis "Fast fractions data type for rational numbers")
33639 (description
33640 "This package provides fast fractions data type for rational numbers. It
33641is the cythonized version of @code{fractions.Fraction}.")
33642 (license license:psfl)))
33643
33644(define-public python-pathvalidate
33645 (package
33646 (name "python-pathvalidate")
33647 (version "3.3.1")
33648 (source
33649 (origin
33650 (method git-fetch)
33651 (uri (git-reference
33652 (url "https://github.com/thombashi/pathvalidate")
33653 (commit (string-append "v" version))))
33654 (file-name (git-file-name name version))
33655 (sha256
33656 (base32 "14ymgd52v5r0g6yc2l7krg3n4x9bkv1ndvdaahiq503n1zhhs3iv"))))
33657 (build-system pyproject-build-system)
33658 (native-inputs (list python-allpairspy
33659 python-click
33660 python-faker
33661 python-pytest
33662 python-setuptools
33663 python-setuptools-scm
33664 python-tcolorpy))
33665 (home-page "https://github.com/thombashi/pathvalidate")
33666 (synopsis "Sanitize strings representing paths")
33667 (description
33668 "@code{pathvalidate} is a Python library to sanitize/validate strings
33669representing paths or filenames.")
33670 (license license:expat)))
33671
33672(define-public python-escapism
33673 (package
33674 (name "python-escapism")
33675 (version "1.0.1")
33676 (source
33677 (origin
33678 (method git-fetch)
33679 (uri (git-reference
33680 (url "https://github.com/jupyterhub/escapism")
33681 (commit version)))
33682 (file-name (git-file-name name version))
33683 (sha256
33684 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33685 (build-system pyproject-build-system)
33686 (native-inputs (list python-pytest python-setuptools))
33687 (home-page "https://github.com/jupyterhub/escapism")
33688 (synopsis "Simple, generic library for escaping strings")
33689 (description
33690 "This Python library provides a programming interface to, given a set of
33691safe characters and an escape character, escape safe strings and unescape the
33692result.")
33693 (license license:expat)))
33694
33695(define-public python-recommonmark
33696 (package
33697 (name "python-recommonmark")
33698 (version "0.7.1")
33699 (source
33700 (origin
33701 (method url-fetch)
33702 (uri (pypi-uri "recommonmark" version))
33703 (sha256
33704 (base32
33705 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33706 (build-system pyproject-build-system)
33707 (arguments
33708 (list
33709 ;; XXX: Some of those fail for no good reason.
33710 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33711 (native-inputs (list python-pytest python-setuptools python-wheel))
33712 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33713 (home-page "https://github.com/readthedocs/recommonmark")
33714 (synopsis "Docutils-compatibility bridge to CommonMark")
33715 (description
33716 "This package provides a docutils-compatibility bridge to CommonMark that
33717lets you write CommonMark inside of Docutils & Sphinx projects.")
33718 (license license:expat)))
33719
33720(define-public python-rectangle-packer
33721 (package
33722 (name "python-rectangle-packer")
33723 (version "2.1.0")
33724 (source
33725 (origin
33726 (method git-fetch)
33727 (uri (git-reference
33728 (url "https://github.com/Penlect/rectangle-packer")
33729 (commit version)))
33730 (file-name (git-file-name name version))
33731 (sha256
33732 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33733 (build-system pyproject-build-system)
33734 (arguments
33735 (list
33736 #:phases
33737 #~(modify-phases %standard-phases
33738 ;; Cython extensions have to be built before running the tests.
33739 (add-before 'check 'build-ext
33740 (lambda _
33741 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33742 (native-inputs
33743 (list python-cython python-pytest python-setuptools))
33744 (home-page "https://github.com/Penlect/rectangle-packer")
33745 (synopsis "Pack rectangles into a bounding box")
33746 (description
33747 "Rectangle-packer is a Python library for packing rectangles
33748into a bounding box with minimal wasted space. It is useful for texture
33749atlases, sprite sheets, and bin packing problems.")
33750 (license license:expat)))
33751
33752(define-public python-redo
33753 (package
33754 (name "python-redo")
33755 (version "3.0.0")
33756 (source
33757 (origin
33758 (method git-fetch)
33759 (uri (git-reference
33760 (url "https://github.com/mozilla-releng/redo")
33761 (commit version)))
33762 (file-name (git-file-name name version))
33763 (sha256
33764 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33765 (build-system pyproject-build-system)
33766 (native-inputs
33767 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33768 (home-page "https://github.com/mozilla-releng/redo")
33769 (synopsis "Utilities to retry Python callables")
33770 (description "Redo provides various means to add seamless ability to
33771retry to any Python callable.")
33772 (license license:mpl2.0)))
33773
33774(define-public python-opcodes
33775 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33776 ;; version number, which is what we use here.
33777 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33778 (package
33779 (name "python-opcodes")
33780 (version "0.3.14") ;from 'opcodes/__init__.py'
33781 (home-page "https://github.com/Maratyszcza/Opcodes")
33782 (source
33783 (origin
33784 (method git-fetch)
33785 (uri (git-reference (url home-page) (commit commit)))
33786 (file-name (git-file-name name version))
33787 (sha256
33788 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33789 (build-system pyproject-build-system)
33790 (native-inputs (list python-pytest python-setuptools))
33791 (synopsis "Database of processor instructions and opcodes")
33792 (description
33793 "This project documents instruction sets in a format convenient for
33794tools development. An instruction set is represented by three files:
33795
33796@itemize
33797@item an XML file that describes instructions;
33798@item an XSD file that describes the structure of the XML file;
33799@item a Python module that reads the XML file and represents it as a set of
33800Python objects;
33801@end itemize
33802
33803It currently provides descriptions for most user-mode x86, x86_64, and k1om
33804instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33805and BMI2).")
33806 (license license:bsd-2))))
33807
33808(define-public python-cart
33809 (package
33810 (name "python-cart")
33811 (version "1.2.3")
33812 (source
33813 (origin
33814 (method git-fetch)
33815 (uri (git-reference
33816 (url "https://github.com/CybercentreCanada/cart")
33817 (commit (string-append "v" version))))
33818 (file-name (git-file-name name version))
33819 (sha256
33820 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33821 (build-system pyproject-build-system)
33822 (arguments
33823 (list
33824 #:test-backend #~'unittest))
33825 (native-inputs
33826 (list python-setuptools))
33827 (propagated-inputs
33828 (list python-pycryptodome))
33829 (home-page "https://github.com/CybercentreCanada/cart")
33830 (synopsis "Library for interacting with the CaRT file format")
33831 (description
33832 "This Python library implements the CaRT file format which is commonly
33833used to store and transmit information about computer malware and associated
33834metadata.")
33835 (license license:bsd-2)))
33836
33837(define-public python-cle
33838 (package
33839 (name "python-cle")
33840 ;; Must be the same version as python-angr.
33841 (version "9.2.186")
33842 (source
33843 (origin
33844 (method git-fetch)
33845 (uri (git-reference
33846 (url "https://github.com/angr/cle")
33847 (commit (string-append "v" version))))
33848 (file-name (git-file-name name version))
33849 (sha256
33850 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33851 (build-system pyproject-build-system)
33852 (arguments
33853 (list
33854 ;; tests: 112 passed, 12 skipped, 1 warning
33855 #:phases
33856 #~(modify-phases %standard-phases
33857 (add-before 'check 'check-setup
33858 (lambda _
33859 (copy-recursively
33860 (string-append #$(this-package-native-input "angr-binaries") "/share")
33861 "../binaries"))))))
33862 (native-inputs
33863 (list angr-binaries
33864 python-cffi
33865 python-pytest
33866 python-setuptools))
33867 (propagated-inputs
33868 (list python-archinfo
33869 python-cart
33870 python-pefile
33871 python-pyelftools
33872 python-pyvex
33873 python-sortedcontainers))
33874 (home-page "https://github.com/angr/cle")
33875 (synopsis "Python loader for binaries and their associated libraries")
33876 (description
33877 "CLE loads binaries and their associated libraries, resolves
33878imports and provides an abstraction of process memory the same way as if
33879it was loader by the operating system's loader.")
33880 (license license:bsd-2)))
33881
33882(define-public python-pyvex
33883 (package
33884 (name "python-pyvex")
33885 ;; Must be the same version as python-angr.
33886 (version "9.2.186")
33887 (source
33888 (origin
33889 (method git-fetch)
33890 (uri (git-reference
33891 (url "https://github.com/angr/pyvex")
33892 (commit (string-append "v" version))))
33893 (file-name (git-file-name name version))
33894 (sha256
33895 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33896 (build-system pyproject-build-system)
33897 (arguments
33898 (list
33899 ;; tests: 57 passed
33900 #:phases
33901 #~(modify-phases %standard-phases
33902 (add-after 'unpack 'copy-submodule-package
33903 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33904 ;; symlink: "Read-only file system".
33905 (lambda _
33906 (copy-recursively
33907 #+(package-source (this-package-native-input "vex"))
33908 (string-append (getcwd) "/vex"))))
33909 (add-before 'build 'set-cc
33910 (lambda _
33911 (setenv "AR" #$(ar-for-target))
33912 (setenv "CC" #$(cc-for-target))
33913 (setenv "CC_NATIVE" "gcc"))))))
33914 (native-inputs
33915 (list cmake-minimal
33916 python-pytest
33917 python-scikit-build-core
33918 vex))
33919 (propagated-inputs
33920 (list python-bitstring
33921 python-cffi))
33922 (home-page "https://github.com/angr/pyvex")
33923 (synopsis "Python interface to libVEX and VEX IR")
33924 (description
33925 "This package provides a Python interface the libVEX and VEX IR.
33926VEX is the intermediate representation (also known as intermediate
33927language) used by the Valgrind analysis tool. As such, VEX is designed
33928to enable all kinds of binary analysis tasks.")
33929 (license (list license:bsd-2
33930 license:gpl2))))
33931
33932(define-public python-claripy
33933 (package
33934 (name "python-claripy")
33935 ;; Must be the same version as python-angr.
33936 (version "9.2.186")
33937 (source
33938 (origin
33939 (method git-fetch)
33940 (uri (git-reference
33941 (url "https://github.com/angr/claripy")
33942 (commit (string-append "v" version))))
33943 (file-name (git-file-name name version))
33944 (sha256
33945 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33946 (build-system pyproject-build-system)
33947 (arguments
33948 (list
33949 ;; tests: 329 passed, 1 skipped
33950 #:phases
33951 #~(modify-phases %standard-phases
33952 (add-after 'unpack 'relax-requirements
33953 (lambda _
33954 (substitute* "pyproject.toml"
33955 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33956 ;; failes to detect it (similar like OpenCV), relax the
33957 ;; version constraint, see:
33958 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33959 ((", \"z3-solver==4.13.0.0\"")
33960 "")))))))
33961 (native-inputs
33962 (list python-pytest
33963 python-setuptools))
33964 (propagated-inputs
33965 (list python-cachetools
33966 python-decorator
33967 python-pysmt
33968 z3))
33969 (home-page "https://github.com/angr/claripy")
33970 (synopsis "Abstraction layer for constraint solvers")
33971 (description
33972 "This Python module provides an abstraction layer for interacting
33973with constraint solvers. Specifically, it is intended to be used with
33974SMT solvers and is built on top of the Z3 solver.")
33975 (license license:bsd-2)))
33976
33977(define-public python-pysmt
33978 (package
33979 (name "python-pysmt")
33980 (version "0.9.6")
33981 (source
33982 (origin
33983 ;; Fetching from Git as pypi release doesn't include all test files.
33984 (method git-fetch)
33985 (uri (git-reference
33986 (url "https://github.com/pysmt/pysmt")
33987 (commit (string-append "v" version))))
33988 (file-name (git-file-name name version))
33989 (sha256
33990 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33991 (build-system pyproject-build-system)
33992 (arguments
33993 `(#:phases (modify-phases %standard-phases
33994 (add-before 'check 'set-pysmt-solver
33995 (lambda _
33996 (setenv "PYSMT_SOLVER" "z3"))))))
33997 (native-inputs (list python-pytest python-setuptools python-wheel))
33998 (propagated-inputs (list z3))
33999 (home-page "https://github.com/pysmt/pysmt")
34000 (synopsis
34001 "Solver-agnostic library for SMT formula manipulation and solving")
34002 (description
34003 "This Python module provides a solver-agnostic abstraction for
34004working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
34005it allows manipulation and solving such formulas.")
34006 (license license:asl2.0)))
34007
34008(define-public python-rpyc
34009 (package
34010 (name "python-rpyc")
34011 (version "5.3.1")
34012 (source
34013 (origin
34014 ;; Fetching from Git as pypi release doesn't include all test files.
34015 (method git-fetch)
34016 (uri (git-reference
34017 (url "https://github.com/tomerfiliba-org/rpyc")
34018 (commit version)))
34019 (file-name (git-file-name name version))
34020 (sha256
34021 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
34022 (snippet '(begin
34023 ;; Disable deploy tests, these rely on OpenSSH and require
34024 ;; configuring the SSH client manually to accept the host key.
34025 (delete-file "tests/test_deploy.py")
34026 ;; Disable tests requiring network access. These tests
34027 ;; presently fail with the error "Network is unreachable".
34028 (delete-file "tests/test_registry.py")))))
34029 (build-system pyproject-build-system)
34030 (arguments
34031 `(#:phases (modify-phases %standard-phases
34032 (replace 'check
34033 (lambda* (#:key tests? #:allow-other-keys)
34034 (when tests?
34035 (with-directory-excursion "tests"
34036 (invoke "python" "-m" "unittest"))))))))
34037 (propagated-inputs (list python-hatchling python-plumbum))
34038 (home-page "https://github.com/tomerfiliba-org/rpyc")
34039 (synopsis
34040 "Remote Python Call (RPyC) is a symmetric distributed computing library")
34041 (description
34042 "This Python module enables remote procedure calls, clustering, and
34043distributed-computing. For this purpose, it makes use of object-proxying, a technique
34044that employs python's dynamic nature, to overcome the physical boundaries between
34045processes and computers, so that remote objects can be manipulated as if they
34046were local.")
34047 (license license:expat)))
34048
34049(define-public python-nampa
34050 (package
34051 (name "python-nampa")
34052 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
34053 ;; has 0.1.1 as version. Latest commit is from 2024.
34054 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
34055 (revision . "0")))
34056 (version (git-version "1.0.0"
34057 (assoc-ref properties 'revision)
34058 (assoc-ref properties 'commit)))
34059 (source
34060 (origin
34061 (method git-fetch)
34062 (uri (git-reference
34063 (url "https://github.com/thebabush/nampa")
34064 (commit (assoc-ref properties 'commit))))
34065 (file-name (git-file-name name version))
34066 (sha256
34067 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
34068 (build-system pyproject-build-system)
34069 (arguments
34070 (list
34071 #:test-flags
34072 #~(list "-k test_random_values")
34073 #:phases
34074 #~(modify-phases %standard-phases
34075 (add-after 'unpack 'patch-tests
34076 (lambda _
34077 ;; Unclear why this top-level __init__.py is here. It seems to
34078 ;; setup a plugin for binaryninja, which Guix does not package.
34079 (delete-file "__init__.py")
34080 ;; Yields tests, which is not allowed anymore.
34081 (substitute* "tests/test_crc.py"
34082 (("yield") "#yield")))))))
34083 (propagated-inputs (list python-future))
34084 (native-inputs (list python-pytest python-setuptools))
34085 (home-page "https://github.com/thebabush/nampa")
34086 (synopsis "Python implementation of IDA Pro's FLIRT technology")
34087 (description
34088 "This Python module implements the @acronym{FLIRT, Fast Library Identification
34089and Recognition Technology}. This technology is useful for identifying
34090common library subroutines in disassembled binaries.")
34091 (license license:lgpl3)))
34092
34093(define-public python-mulpyplexer
34094 (package
34095 (name "python-mulpyplexer")
34096 (version "0.09")
34097 (source
34098 (origin
34099 (method url-fetch)
34100 (uri (pypi-uri "mulpyplexer" version))
34101 (sha256
34102 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
34103 (build-system pyproject-build-system)
34104 (arguments
34105 (list
34106 #:phases
34107 '(modify-phases %standard-phases
34108 (replace 'check
34109 (lambda* (#:key tests? #:allow-other-keys)
34110 (when tests?
34111 (invoke "python" "mulpyplexer.py")))))))
34112 (native-inputs (list python-setuptools python-wheel))
34113 (home-page "https://github.com/zardus/mulpyplexer/")
34114 (synopsis "Multiplexes interactions with lists of Python objects")
34115 (description "This module provides utilities for multiplexing
34116interactions with lists of Python objects.")
34117 (license license:bsd-2)))
34118
34119(define-public python-itanium-demangler
34120 (package
34121 (name "python-itanium-demangler")
34122 (version "1.1")
34123 (source
34124 (origin
34125 (method git-fetch)
34126 (uri (git-reference
34127 ;; PyPI only provides wheels and no source code.
34128 (url "https://github.com/whitequark/python-itanium_demangler")
34129 (commit (string-append "v" version))))
34130 (file-name (git-file-name name version))
34131 (sha256
34132 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
34133 (build-system pyproject-build-system)
34134 (arguments
34135 (list
34136 #:phases
34137 #~(modify-phases %standard-phases
34138 (replace 'check
34139 (lambda* (#:key tests? #:allow-other-keys)
34140 (when tests?
34141 (with-directory-excursion "tests"
34142 (invoke "python" "-m" "unittest"))))))))
34143 (native-inputs (list python-setuptools python-wheel))
34144 (home-page "https://github.com/whitequark/python-itanium_demangler/")
34145 (synopsis "Pure Python Itanium C++ ABI demangler")
34146 (description
34147"This Python module provides an implementation of the Itanium C++ ABI symbol
34148mangling language. The demangler generates an abstract syntax tree from
34149mangled symbols, which can be used for directly extracting type information.")
34150 (license license:bsd-0)))
34151
34152(define-public python-angr
34153 (package
34154 (name "python-angr")
34155 (version "9.2.186")
34156 (source
34157 (origin
34158 (method git-fetch)
34159 (uri (git-reference
34160 (url "https://github.com/angr/angr")
34161 (commit (string-append "v" version))))
34162 (file-name (git-file-name name version))
34163 (sha256
34164 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
34165 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
34166 "python-angr-check-exec-deps.patch"))))
34167 (build-system pyproject-build-system)
34168 (arguments
34169 (list
34170 #:imported-modules `(,@%cargo-build-system-modules
34171 ,@%pyproject-build-system-modules)
34172 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
34173 (guix build pyproject-build-system)
34174 (guix build utils))
34175 #:test-flags
34176 #~(list "-x"
34177 "--dist" "load"
34178 "--numprocesses" (number->string (parallel-job-count))
34179 "-k"
34180 ;; test_mips32_missing_offset_in_instructions fails
34181 ;; with capstone 5 and passes with capstone 4. Might
34182 ;; be a capstone regressions, needs investigation.
34183 ;;
34184 ;; TODO: test_unsat_core needs investigation.
34185 ;;
34186 ;; test_decompiling_abnormal_switch_case_case3 is broken
34187 ;; when tests modifying global counters are run before it.
34188 ;; See <https://github.com/angr/angr/issues/5715>.
34189 ;;
34190 ;; test_concrete_memset is a non-deterministic benchmark.
34191 ;; test_similarity_fauxware is flaky.
34192 (string-append
34193 "not test_mips32_missing_offset_in_instructions"
34194 " and not test_unsat_core"
34195 " and not test_decompiling_abnormal_switch_case_case3"
34196 " and not test_concrete_memset"
34197 " and not test_similarity_fauxware"))
34198 #:phases
34199 #~(modify-phases %standard-phases
34200 (add-after 'unpack 'use-guix-vendored-dependencies
34201 (lambda _
34202 (substitute* "native/angr/Cargo.toml"
34203 (("^icicle-fuzzing.*$")
34204 "icicle-fuzzing = { version = \"*\" }\n")
34205 (("^icicle-vm.*$")
34206 "icicle-vm = { version = \"*\" }\n")
34207 (("^pcode.*$")
34208 "pcode = { version = \"*\" }\n"))))
34209 (add-after 'unpack 'fix-tests
34210 (lambda _
34211 (substitute* "tests/common.py"
34212 (("\\[\"cc\"\\]")
34213 "[\"gcc\"]"))))
34214 (add-after 'unpack 'relax-protobuf
34215 (lambda _
34216 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
34217 (substitute* "pyproject.toml"
34218 (("protobuf>=6.33.0") "protobuf"))))
34219 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
34220 (lambda args
34221 (for-each (lambda (phase)
34222 (format #t "Running cargo phase: ~a~%" phase)
34223 (apply (assoc-ref cargo:%standard-phases phase)
34224 #:cargo-target #$(cargo-triplet)
34225 args))
34226 '(prepare-rust-crates
34227 unpack-rust-crates
34228 configure
34229 check-for-pregenerated-files
34230 patch-cargo-checksums))))
34231 (add-before 'check 'check-setup
34232 (lambda _
34233 (copy-recursively
34234 (string-append #$(this-package-native-input "angr-binaries") "/share")
34235 "../binaries")))
34236 (add-before 'build 'generate-protobuf-files
34237 ;; Regenerate protobuf files using our utilized protobuf version.
34238 ;; This allows us to relax the version constraint on python-protobuf.
34239 (lambda _
34240 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
34241 (add-before 'build 'set-cc
34242 (lambda _
34243 (setenv "CC" #$(cc-for-target)))))))
34244 (propagated-inputs (list python-archinfo ;sync version with python-angr
34245 python-cachetools
34246 python-cffi
34247 python-claripy ;sync version with python-angr
34248 python-cle ;sync version with python-angr
34249 python-cxxheaderparser
34250 python-gitpython
34251 python-msgspec
34252 python-mulpyplexer
34253 python-networkx
34254 python-protobuf
34255 python-psutil
34256 python-pycparser
34257 python-pydemumble
34258 python-pyformlang
34259 python-pypcode
34260 python-pyvex ;sync version with python-angr
34261 python-rich
34262 python-sortedcontainers
34263 python-sympy
34264 python-sqlalchemy
34265 python-keystone-engine
34266 python-typing-extensions
34267 python-unique-log-filter
34268 unicorn-2.0))
34269 (native-inputs
34270 (append
34271 (list angr-binaries
34272 protobuf
34273 python-pytest
34274 python-pytest-xdist
34275 python-setuptools
34276 python-setuptools-rust
34277 rust
34278 `(,rust "cargo"))
34279 (or (and=> (%current-target-system)
34280 (compose list make-rust-sysroot))
34281 '())))
34282 (inputs
34283 (cons* (cargo-inputs 'python-angr)))
34284 (home-page "https://github.com/angr/angr")
34285 (synopsis "Multi-architecture binary analysis toolkit")
34286 (description
34287 "This package provides a versatile binary analysis platform with the
34288ability to perform dynamic symbolic execution as well as various
34289static analyses directly on binaries. As such, it can be used for all
34290kinds of reverse engineering, vulnerability discovery, exploit
34291generation, and software testing purposes.")
34292 (license license:bsd-2)))
34293
34294(define-public python-peachpy
34295 ;; There is no tag in this repo.
34296 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
34297 (version "0.2.0") ;from 'peachpy/__init__.py'
34298 (revision "3"))
34299 (package
34300 (name "python-peachpy")
34301 (version (git-version version revision commit))
34302 (home-page "https://github.com/Maratyszcza/PeachPy")
34303 (source (origin
34304 (method git-fetch)
34305 (uri (git-reference (url home-page) (commit commit)))
34306 (file-name (git-file-name name version))
34307 (sha256
34308 (base32
34309 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
34310 (patches (search-patches "python-peachpy-determinism.patch"))))
34311 (build-system pyproject-build-system)
34312 (arguments
34313 ;; The issue is known and the test will probably never be fixed.
34314 ;; https://github.com/Maratyszcza/PeachPy/issues/131
34315 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
34316 (native-inputs
34317 (list python-pytest python-setuptools python-wheel))
34318 (propagated-inputs
34319 (list python-six python-opcodes))
34320 (synopsis "Efficient assembly code generation in Python")
34321 (description
34322 "PeachPy is a Python framework for writing high-performance assembly kernels.
34323PeachPy aims to simplify writing optimized assembly kernels while preserving
34324all optimization opportunities of traditional assembly.
34325
34326PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
34327for the Go language tool chain; it adapts to different calling conventions and
34328application binary interfaces (ABIs); it takes care of register allocation; it
34329supports x86_64 instructions up to AVX-512 and SHA.")
34330 (supported-systems '("x86_64-linux"))
34331 (license license:bsd-2))))
34332
34333(define-public python-sgmllib3k
34334 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34335 (revision "1"))
34336 (package
34337 (name "python-sgmllib3k")
34338 (version
34339 (git-version "1.0.0" revision commit))
34340 (source
34341 (origin
34342 (method git-fetch)
34343 (uri (git-reference
34344 (url "https://github.com/hsoft/sgmllib")
34345 (commit commit)))
34346 (file-name (git-file-name name version))
34347 (sha256
34348 (base32
34349 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34350 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34351 (build-system pyproject-build-system)
34352 (native-inputs (list python-pytest python-setuptools))
34353 (home-page "https://github.com/hsoft/sgmllib")
34354 (synopsis "Python 3 port of sgmllib")
34355 (description "This package provides an unmaintained port of sgmllib to
34356Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34357Generalized Mark-up Language}.")
34358 (license license:bsd-3))))
34359
34360(define-public python-cwcwidth
34361 (package
34362 (name "python-cwcwidth")
34363 (version "0.1.10")
34364 (source
34365 (origin
34366 (method url-fetch)
34367 (uri (pypi-uri "cwcwidth" version))
34368 (sha256
34369 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34370 (build-system pyproject-build-system)
34371 (arguments
34372 (list
34373 #:phases
34374 #~(modify-phases %standard-phases
34375 (add-before 'check 'remove-local-cwcwidth
34376 (lambda _
34377 ;; This would otherwise interfere with finding the installed
34378 ;; cwcwidth when running tests.
34379 (delete-file-recursively "cwcwidth"))))))
34380 (native-inputs
34381 (list python-cython
34382 python-pytest
34383 python-setuptools
34384 python-setuptools-scm))
34385 (home-page "https://github.com/sebastinas/cwcwidth")
34386 (synopsis "Python bindings for wc(s)width")
34387 (description
34388 "This package provides bindings for wcwidth and wcswidth functions
34389defined in POSIX.1-2001 and POSIX.1-2008.")
34390 (license license:expat)))
34391
34392(define-public python-pyan3
34393 (package
34394 (name "python-pyan3")
34395 (version "1.2.0")
34396 (source
34397 (origin
34398 ;; Source tarball on PyPI lacks tests.
34399 (method git-fetch)
34400 (uri (git-reference
34401 (url "https://github.com/Technologicat/pyan")
34402 (commit (string-append "v" version))))
34403 (file-name (git-file-name name version))
34404 (sha256
34405 (base32
34406 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34407 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34408 "python-pyan3-fix-absolute-path-bug.patch"))))
34409 (build-system pyproject-build-system)
34410 (native-inputs
34411 (list python-pytest python-setuptools python-wheel))
34412 (propagated-inputs
34413 (list python-jinja2))
34414 (home-page "https://github.com/Technologicat/pyan")
34415 (synopsis "Offline call graph generator for Python 3")
34416 (description "Pyan takes one or more Python source files, performs
34417a (rather superficial) static analysis, and constructs a directed graph of the
34418objects in the combined source, and how they define or use each other. The
34419graph can be output for rendering by GraphViz or yEd.")
34420 (license license:gpl2)))
34421
34422(define-public python-multipledispatch
34423 (package
34424 (name "python-multipledispatch")
34425 (version "1.0.0")
34426 (source
34427 (origin
34428 (method git-fetch) ;no tests in PyPI archive
34429 (uri (git-reference
34430 (url "https://github.com/mrocklin/multipledispatch")
34431 (commit version)))
34432 (file-name (git-file-name name version))
34433 (sha256
34434 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34435 (build-system pyproject-build-system)
34436 (native-inputs
34437 (list python-pytest
34438 python-pytest-benchmark
34439 python-setuptools))
34440 (home-page "https://github.com/mrocklin/multipledispatch/")
34441 (synopsis "Multiple dispatch for Python based on pattern matching")
34442 (description
34443 "This library provides an efficient mechanism for overloading function
34444implementations based on the types of the arguments.")
34445 (license license:bsd-3)))
34446
34447(define-public python-multimethod
34448 (package
34449 (name "python-multimethod")
34450 (version "1.10")
34451 (source
34452 (origin
34453 ;; No tests in the PyPI tarball.
34454 (method git-fetch)
34455 (uri (git-reference
34456 (url "https://github.com/coady/multimethod")
34457 (commit (string-append "v" version))))
34458 (file-name (git-file-name name version))
34459 (sha256
34460 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34461 (build-system pyproject-build-system)
34462 (native-inputs (list python-pytest python-setuptools python-wheel))
34463 (home-page "https://github.com/coady/multimethod")
34464 (synopsis "Python support for multiple argument dispatching")
34465 (description
34466 "This package provides a decorator for adding multiple argument
34467dispatching to functions. The decorator creates a multimethod object as
34468needed and registers the function with its annotations.")
34469 (license license:asl2.0)))
34470
34471(define-public python-logical-unification
34472 (package
34473 (name "python-logical-unification")
34474 (version "0.4.7")
34475 (source
34476 (origin
34477 (method git-fetch)
34478 (uri (git-reference
34479 (url "https://github.com/pythological/unification")
34480 (commit (string-append "v" version))))
34481 (file-name (git-file-name name version))
34482 (sha256
34483 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34484 (build-system pyproject-build-system)
34485 (native-inputs
34486 (list python-pytest
34487 python-pytest-benchmark
34488 python-setuptools
34489 python-setuptools-scm))
34490 (propagated-inputs
34491 (list python-multipledispatch
34492 python-toolz))
34493 (home-page "https://github.com/pythological/unification/")
34494 (synopsis "Logical unification in Python for solving symbolic expressions")
34495 (description "This library provides algorithms and data types for solving
34496symbolic expressions in pure Python using the technique of logical unification.")
34497 (license license:bsd-3)))
34498
34499(define-public python-looseversion
34500 (package
34501 (name "python-looseversion")
34502 (version "1.3.0")
34503 (source
34504 (origin
34505 (method url-fetch)
34506 (uri (pypi-uri "looseversion" version))
34507 (sha256
34508 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34509 (build-system pyproject-build-system)
34510 (arguments
34511 (list
34512 ;; No tests provided.
34513 #:tests? #f))
34514 (native-inputs
34515 (list python-hatchling))
34516 (home-page "https://github.com/effigies/looseversion")
34517 (synopsis "Version numbering for anarchists and software realists")
34518 (description
34519 "This package provides a drop-in replacement for the original
34520@code{LooseVersion}. It implements an identical interface and comparison
34521logic to @code{LooseVersion}. The only major change is that a
34522@code{looseversion.LooseVersion} is comparable to a
34523@code{distutils.version.LooseVersion}, which means tools should not need to
34524worry whether all dependencies that use LooseVersion have migrated.")
34525 (license license:psfl)))
34526
34527(define-public python-cons
34528 (package
34529 (name "python-cons")
34530 (version "0.4.7")
34531 (source
34532 (origin
34533 (method git-fetch) ;no tests in PyPI archive
34534 (uri (git-reference
34535 (url "https://github.com/pythological/python-cons")
34536 (commit (string-append "v" version))))
34537 (file-name (git-file-name name version))
34538 (sha256
34539 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34540 (build-system pyproject-build-system)
34541 (native-inputs
34542 (list python-pytest
34543 python-setuptools
34544 python-setuptools-scm
34545 python-wheel))
34546 (propagated-inputs
34547 (list python-logical-unification))
34548 (home-page "https://github.com/pythological/python-cons")
34549 (synopsis "Cons cell data structures and related algorithms for Python")
34550 (description
34551 "This library implements algorithms and data structures for Lisp-style
34552cons cells in Python.")
34553 (license license:lgpl3+)))
34554
34555(define-public python-etuples
34556 (package
34557 (name "python-etuples")
34558 (version "0.3.10")
34559 (source
34560 (origin
34561 (method url-fetch)
34562 (uri (pypi-uri "etuples" version))
34563 (sha256
34564 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34565 (build-system pyproject-build-system)
34566 (arguments
34567 (list
34568 #:test-flags
34569 ;; assert False == {~_1: <built-in function add>}
34570 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34571 (native-inputs
34572 (list python-pytest
34573 python-setuptools
34574 python-setuptools-scm))
34575 (propagated-inputs
34576 (list python-cons
34577 python-multipledispatch))
34578 (home-page "https://github.com/pythological/etuples")
34579 (synopsis "S-expressions in Python")
34580 (description
34581 "This library implements eval'able S-expression in Python using tuple-like objects.")
34582 (license license:asl2.0)))
34583
34584(define-public python-minikanren
34585 (package
34586 (name "python-minikanren")
34587 (version "1.0.5")
34588 (source
34589 (origin
34590 (method git-fetch)
34591 (uri (git-reference
34592 (url "https://github.com/pythological/kanren")
34593 (commit (string-append "v" version))))
34594 (file-name (git-file-name name version))
34595 (sha256
34596 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34597 (build-system pyproject-build-system)
34598 (arguments
34599 (list
34600 ;; 60 passed, 3 skipped, 23 deselected
34601 #:test-flags
34602 #~(list "-k" (string-join
34603 ;; XXX: 16 tests fail with assertion not equal, check why.
34604 (list "not test_basics"
34605 "test_eq_assoc"
34606 "test_eq_assoccomm"
34607 "test_eq_comm"
34608 "test_map_anyo"
34609 "test_map_anyo_misc"
34610 "test_map_anyo_reverse"
34611 "test_reduceo"
34612 "test_walko"
34613 "test_walko_reverse")
34614 " and not "))))
34615 (native-inputs
34616 (list python-pytest
34617 python-setuptools))
34618 (propagated-inputs
34619 (list python-cons
34620 python-etuples
34621 python-logical-unification
34622 python-multipledispatch
34623 python-toolz
34624 python-typing-extensions))
34625 (home-page "https://github.com/pythological/kanren")
34626 (synopsis "Relational logic programming in pure Python")
34627 (description
34628 "The minikanren library provides an algorithmic core for computer algebra
34629systems in Python.")
34630 (license license:bsd-3)))
34631
34632(define-public python-dotenv
34633 (package
34634 (name "python-dotenv")
34635 (version "1.2.2")
34636 (source
34637 (origin
34638 (method url-fetch)
34639 (uri (pypi-uri "python_dotenv" version))
34640 (sha256
34641 (base32 "1wwwg7gasqmnv5y2hb3w1155c8nai6zzih8x5hn0ifnpzf8ildrc"))))
34642 (build-system pyproject-build-system)
34643 (arguments
34644 (list
34645 #:test-flags
34646 ;; .dotenv-real instead of dotenv
34647 #~(list "-k not test_run_with_dotenv_and_command_flags")))
34648 (native-inputs
34649 (list python-pytest
34650 python-setuptools))
34651 (propagated-inputs
34652 (list python-click))
34653 (home-page "https://saurabh-kumar.com/python-dotenv/")
34654 (synopsis "Setup environment variables according to .env files")
34655 (description
34656 "This package provides the @code{python-dotenv} Python module to read
34657key-value pairs from a @code{.env} file and set them as environment variables.")
34658 (license license:bsd-3)))
34659
34660;; Old version just for docker-compose; remove once that is updated.
34661(define-public python-dotenv-0.13.0
34662 (package (inherit python-dotenv)
34663 (name "python-dotenv")
34664 (version "0.13.0")
34665 (source
34666 (origin
34667 (method url-fetch)
34668 (uri (pypi-uri "python-dotenv" version))
34669 (sha256
34670 (base32
34671 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34672 (arguments
34673 `(#:phases
34674 (modify-phases %standard-phases
34675 (replace 'check
34676 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34677 (when tests?
34678 (add-installed-pythonpath inputs outputs)
34679 (setenv "PATH" (string-append (getenv "PATH") ":"
34680 (assoc-ref outputs "out") "/bin"))
34681 ;; Skip the ipython tests.
34682 (delete-file "tests/test_ipython.py")
34683 (invoke "python" "-m" "pytest")))))))
34684 (native-inputs
34685 (modify-inputs native-inputs
34686 (append python-mock
34687 python-sh-1)))))
34688
34689(define-public python-braintree
34690 (package
34691 (name "python-braintree")
34692 (version "4.40.0")
34693 (source
34694 (origin
34695 (method url-fetch)
34696 (uri (pypi-uri "braintree" version))
34697 (sha256
34698 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34699 (build-system pyproject-build-system)
34700 (arguments (list #:tests? #f)) ; No tests.
34701 (native-inputs (list python-setuptools))
34702 (propagated-inputs (list python-requests))
34703 (home-page
34704 "https://developers.braintreepayments.com/python/sdk/server/overview")
34705 (synopsis "Braintree Python Library")
34706 (description
34707 "The Braintree Python SDK provides integration access to the Braintree
34708Gateway. Braintree is a US-based payments service provider.")
34709 (license license:expat)))
34710
34711(define-public python-markuppy
34712 (package
34713 (name "python-markuppy")
34714 (version "1.18")
34715 (source
34716 (origin
34717 (method git-fetch)
34718 (uri (git-reference
34719 (url "https://github.com/tylerbakke/MarkupPy")
34720 (commit (string-append "v" version))))
34721 (file-name (git-file-name name version))
34722 (sha256
34723 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34724 (build-system pyproject-build-system)
34725 (native-inputs (list python-pytest python-setuptools))
34726 (home-page "https://github.com/tylerbakke/MarkupPy")
34727 (synopsis "Pythonic HTML/XML generator")
34728 (description
34729 "This Python module attempts to make it easier to generate HTML/XML from
34730a Python program in an customizable and pythonic way.")
34731 (license license:expat)))
34732
34733(define-public python-csb43
34734 (package
34735 (name "python-csb43")
34736 (version "1.0.0")
34737 (source
34738 (origin
34739 (method git-fetch)
34740 (uri (git-reference
34741 (url "https://bitbucket.org/wmj/csb43")
34742 (commit version)))
34743 (file-name (git-file-name name version))
34744 (sha256
34745 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34746 (build-system pyproject-build-system)
34747 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34748 (arguments
34749 (list
34750 #:phases
34751 #~(modify-phases %standard-phases
34752 (add-after 'unpack 'relax-requirements
34753 (lambda _
34754 (substitute* "pyproject.toml"
34755 (("\"deprecated ~=.*\",")
34756 "\"deprecated\",")))))))
34757 (native-inputs
34758 (list python-lxml
34759 python-pytest
34760 python-setuptools
34761 python-setuptools-scm))
34762 (propagated-inputs
34763 (list python-deprecated
34764 python-pycountry
34765 python-pyyaml
34766 python-tablib))
34767 (home-page "https://bitbucket.org/wmj/csb43")
34768 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3476943 (CSB43)")
34770 (description
34771 "This package provides tools to convert files in the format used by
34772multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34773Spanish Banking Association [AEB43]) to other formats.
34774
34775Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34776spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34777 (license license:lgpl3)))
34778
34779(define-public python-csb43-0.10
34780 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34781 ;; homebank, i18n, ofx, and utils.
34782 (package
34783 (inherit python-csb43)
34784 (name "python-csb43")
34785 (version "0.10.1")
34786 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34787 (source
34788 (origin
34789 (method git-fetch)
34790 (uri (git-reference
34791 (url "https://bitbucket.org/wmj/csb43")
34792 (commit version)))
34793 (file-name (git-file-name name version))
34794 (sha256
34795 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34796
34797(define-public python-febelfin-coda
34798 (package
34799 (name "python-febelfin-coda")
34800 (version "0.3.0")
34801 (source
34802 (origin
34803 (method hg-fetch)
34804 (uri (hg-reference
34805 (url "https://foss.heptapod.net/tryton/coda")
34806 (changeset version)))
34807 (file-name (string-append name "-" version "-checkout"))
34808 (sha256
34809 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34810 (build-system pyproject-build-system)
34811 (arguments
34812 (list
34813 #:test-backend #~'unittest
34814 #:phases
34815 #~(modify-phases %standard-phases
34816 (add-after 'install 'remove-installed-tests
34817 (lambda* (#:key inputs outputs #:allow-other-keys)
34818 (with-directory-excursion (site-packages inputs outputs)
34819 (for-each delete-file
34820 (list "coda/test.py"
34821 "coda/test_readme.py"))))))))
34822 (native-inputs (list python-setuptools))
34823 (home-page "https://coda.b2ck.com/")
34824 (synopsis "Module to parse Belgian CODA files")
34825 (description
34826 "This package provides a module to parse Coded statement of account
34827(CODA) files as defined be the Belgian Febelfin bank standard.")
34828 (license license:bsd-3)))
34829
34830(define-public python-ofxparse
34831 (package
34832 (name "python-ofxparse")
34833 (version "0.21")
34834 (source
34835 (origin
34836 (method url-fetch)
34837 (uri (pypi-uri "ofxparse" version))
34838 (sha256
34839 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34840 (build-system pyproject-build-system)
34841 (native-inputs (list python-pynose python-setuptools))
34842 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34843 (home-page "http://sites.google.com/site/ofxparse")
34844 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34845format")
34846 (description "@code{ofxparse} is a parser for Open Financial
34847Exchange (.ofx) format files. OFX files are available from almost any online
34848banking site, so they work well if you want to pull together your finances
34849from multiple sources. Online trading accounts also often provide account
34850statements in OFX files.")
34851 (license license:expat)))
34852
34853(define-public python-rfc3339-validator
34854 (package
34855 (name "python-rfc3339-validator")
34856 (version "0.1.4")
34857 (source
34858 (origin
34859 (method url-fetch)
34860 (uri (pypi-uri "rfc3339_validator" version))
34861 (sha256
34862 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34863 (build-system pyproject-build-system)
34864 (native-inputs
34865 (list python-pytest
34866 python-setuptools
34867 python-strict-rfc3339))
34868 (propagated-inputs
34869 (list python-six))
34870 (home-page "https://github.com/naimetti/rfc3339-validator")
34871 (synopsis "Python RFC3339 validator")
34872 (description "This package provides a pure Python RFC3339 validator.")
34873 (license license:expat)))
34874
34875(define-public python-platformdirs
34876 ;; Try to update simultaneously with the bootstrap version in
34877 ;; (gnu packages python-build).
34878 (package
34879 (name "python-platformdirs")
34880 (version "4.3.6")
34881 (source
34882 (origin
34883 (method url-fetch)
34884 (uri (pypi-uri "platformdirs" version))
34885 (sha256
34886 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34887 (build-system pyproject-build-system)
34888 (native-inputs
34889 (list python-appdirs
34890 python-hatchling
34891 python-hatch-vcs
34892 python-pytest
34893 python-pytest-mock))
34894 (home-page "https://github.com/platformdirs/platformdirs")
34895 (synopsis "Determine the appropriate platform-specific directories")
34896 (description "When writing applications, finding the right location to
34897store user data and configuration varies per platform. Even for
34898single-platform apps, there may by plenty of nuances in figuring out the right
34899location. This small Python module determines the appropriate
34900platform-specific directories, e.g. the ``user data dir''.")
34901 (license license:expat)))
34902
34903(define-public python-json2html
34904 (package
34905 (name "python-json2html")
34906 (version "1.3.0")
34907 (source
34908 (origin
34909 (method git-fetch)
34910 (uri (git-reference
34911 (url "https://github.com/softvar/json2html")
34912 (commit (string-append "v" version))))
34913 (file-name (git-file-name name version))
34914 (sha256
34915 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34916 (build-system pyproject-build-system)
34917 (arguments
34918 (list
34919 #:test-backend #~'custom
34920 #:test-flags #~(list "test/run_tests.py")))
34921 (native-inputs (list python-setuptools))
34922 (home-page "https://github.com/softvar/json2html")
34923 (synopsis "Convert JSON to HTML table")
34924 (description
34925 "@code{python-json2html} is a python module to convert JSON into a human
34926readable HTML table representation.")
34927 (license license:expat)))
34928
34929(define-public python-face
34930 (package
34931 (name "python-face")
34932 (version "24.0.0")
34933 (source
34934 (origin
34935 (method git-fetch)
34936 (uri (git-reference
34937 (url "https://github.com/mahmoud/face")
34938 (commit (string-append "v" version))))
34939 (file-name (git-file-name name version))
34940 (sha256
34941 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34942 (build-system pyproject-build-system)
34943 (native-inputs (list python-pytest python-setuptools))
34944 (propagated-inputs (list python-boltons))
34945 (home-page "https://github.com/mahmoud/face")
34946 (synopsis "CLI parsing and dispatching microframework")
34947 (description "@code{python-face} is a Pythonic microframework for building
34948command-line applications.
34949
34950@itemize
34951@item First-class subcommand support
34952@item Powerful middleware architecture
34953@item Separate parser layer
34954@item Built-in flagfile support
34955@item Handy testing utilities
34956@item Themeable help display
34957@end itemize")
34958 (license license:bsd-3)))
34959
34960(define-public python-glom
34961 (package
34962 (name "python-glom")
34963 (version "24.11.0")
34964 (source
34965 (origin
34966 (method git-fetch)
34967 (uri (git-reference
34968 (url "https://github.com/mahmoud/glom")
34969 (commit (string-append "v" version))))
34970 (file-name (git-file-name name version))
34971 (sha256
34972 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34973 (build-system pyproject-build-system)
34974 (native-inputs
34975 (list python-pytest
34976 python-pyyaml
34977 python-setuptools))
34978 (propagated-inputs
34979 (list python-attrs
34980 python-boltons
34981 python-face))
34982 (home-page "https://github.com/mahmoud/glom")
34983 (synopsis "Declaratively restructure data")
34984 (description "Real applications have real data, and real data
34985nests---objects inside of objects inside of lists of objects. glom is a new
34986and powerful way to handle real-world data, featuring:
34987
34988@itemize
34989@item Path-based access to nested data structures
34990@item Readable, meaningful error messages
34991@item Declarative data transformation, using lightweight, Pythonic specifications
34992@item Built-in data exploration and debugging features
34993@end itemize")
34994 (license license:bsd-3)))
34995
34996(define-public python-box
34997 (package
34998 (name "python-box")
34999 (version "7.3.2")
35000 (source
35001 (origin
35002 (method git-fetch)
35003 (uri
35004 (git-reference
35005 (url "https://github.com/cdgriffith/Box")
35006 (commit version)))
35007 (file-name (git-file-name name version))
35008 (sha256
35009 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
35010 (build-system pyproject-build-system)
35011 (arguments
35012 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
35013 (native-inputs
35014 (list python-pytest
35015 python-setuptools))
35016 (propagated-inputs
35017 (list python-msgpack
35018 python-ruamel.yaml
35019 python-tomli-w))
35020 (home-page "https://github.com/cdgriffith/Box")
35021 (synopsis "Advanced Python dictionaries with dot notation access")
35022 (description
35023 "This package provides the @code{python-box} Python module.
35024It implements advanced Python dictionaries with dot notation access.")
35025 (license license:expat)))
35026
35027(define-public python-fields
35028 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
35029 (revision "0"))
35030 (package
35031 (name "python-fields")
35032 (version (git-version "5.0.0" revision commit))
35033 (source
35034 (origin
35035 (method git-fetch)
35036 (uri (git-reference
35037 (url "https://github.com/ionelmc/python-fields")
35038 (commit commit)))
35039 (file-name (git-file-name name version))
35040 (sha256
35041 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
35042 (build-system pyproject-build-system)
35043 (arguments
35044 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
35045 (native-inputs (list python-pytest-8
35046 python-pytest-benchmark
35047 python-setuptools
35048 python-wheel))
35049 (home-page "https://python-fields.readthedocs.io/")
35050 (synopsis "Python container class boilerplate killer")
35051 (description "Avoid repetitive boilerplate code in Python classes.")
35052 (license license:bsd-3))))
35053
35054(define-public python-aspectlib
35055 (package
35056 (name "python-aspectlib")
35057 (version "2.0.0")
35058 (source
35059 (origin
35060 (method git-fetch)
35061 (uri (git-reference
35062 (url "https://github.com/ionelmc/python-aspectlib")
35063 (commit (string-append "v" version))))
35064 (file-name (git-file-name name version))
35065 (sha256
35066 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
35067 (build-system pyproject-build-system)
35068 (arguments
35069 (list
35070 #:test-flags
35071 #~(list ;; XXX: Require more dependencies.
35072 "--ignore=tests/test_integrations.py"
35073 "--ignore=tests/test_integrations_py3.py")
35074 #:phases
35075 #~(modify-phases %standard-phases
35076 (add-after 'unpack 'fix-pytest-config
35077 (lambda _
35078 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
35079 ;; The (path: py.path.local) argument is deprecated, please
35080 ;; use (collection_path: pathlib.Path).
35081 (delete-file "pytest.ini"))))))
35082 (native-inputs
35083 (list python-pytest-8
35084 python-setuptools
35085 python-tornado))
35086 (propagated-inputs
35087 (list python-fields))
35088 (home-page "https://github.com/ionelmc/python-aspectlib")
35089 (synopsis "Python monkey-patching and decorators")
35090 (description
35091 "This package provides an aspect-oriented programming, monkey-patch
35092and decorators library. It is useful when changing behavior in existing
35093code is desired. It includes tools for debugging and testing:
35094simple mock/record and a complete capture/replay framework.")
35095 (license license:bsd-2)))
35096
35097(define-public python-ijson
35098 (package
35099 (name "python-ijson")
35100 (version "3.5.0")
35101 (source
35102 (origin
35103 (method url-fetch)
35104 (uri (pypi-uri "ijson" version))
35105 (sha256
35106 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
35107 (inputs
35108 ;; yajl is optional, but compiling with it makes faster
35109 ;; backends available to ijson:
35110 (list yajl))
35111 (native-inputs
35112 (list python-pytest
35113 python-setuptools))
35114 (build-system pyproject-build-system)
35115 (home-page "https://github.com/ICRAR/ijson")
35116 (synopsis "Iterative JSON parser with Python iterator interfaces")
35117 (description
35118 "Ijson is an iterative JSON parser with standard Python iterator
35119interfaces.")
35120 (license license:bsd-3)))
35121
35122(define-public python-ordered-set
35123 (package
35124 (name "python-ordered-set")
35125 (version "4.1.0")
35126 (source
35127 (origin
35128 (method url-fetch)
35129 (uri (pypi-uri "ordered-set" version))
35130 (sha256
35131 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
35132 (build-system pyproject-build-system)
35133 (native-inputs (list python-cython python-flit-core python-pytest))
35134 (home-page "https://github.com/simonpercivall/orderedset")
35135 (synopsis "Ordered Set implementation in Cython")
35136 (description "This library provides an @code{OrderedSet} data type that
35137works like a regular set, but remembers insertion order. It supports the full
35138Python @code{set} interface.")
35139 (license license:asl2.0)))
35140
35141(define-public python-orgparse
35142 (package
35143 (name "python-orgparse")
35144 (version "0.4.20251020")
35145 (source
35146 (origin
35147 (method git-fetch)
35148 (uri (git-reference
35149 (url "https://github.com/karlicoss/orgparse")
35150 (commit (string-append "v" version))))
35151 (file-name (git-file-name name version))
35152 (sha256
35153 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
35154 (build-system pyproject-build-system)
35155 (arguments
35156 (list
35157 #:test-flags
35158 #~(list "--ignore-glob=doc/*"
35159 ;; XXX: Unclear why those tests fail.
35160 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
35161 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
35162 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
35163 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
35164 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
35165 (home-page "https://github.com/karlicoss/orgparse")
35166 (synopsis "Emacs Org mode parser in Python")
35167 (description
35168 "This package is a Python module for reading Emacs Org mode files.")
35169 (license license:bsd-3)))
35170
35171(define-public dynaconf
35172 (package
35173 (name "dynaconf")
35174 (version "3.2.11")
35175 (source
35176 (origin
35177 (method git-fetch)
35178 (uri
35179 (git-reference
35180 (url "https://github.com/dynaconf/dynaconf")
35181 (commit version)))
35182 (file-name (git-file-name name version))
35183 (sha256
35184 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
35185 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
35186 (modules '((guix build utils)))
35187 ;; Remove vendored dependencies
35188 (snippet
35189 #~(let ((unvendor '("click" "ruamel" "toml")))
35190 (with-directory-excursion "dynaconf/vendor"
35191 (for-each delete-file-recursively unvendor))
35192 (substitute* (find-files "." "\\.py$")
35193 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
35194 _ target rest)
35195 (string-append "import " target rest))
35196 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
35197 target))))))
35198 (build-system pyproject-build-system)
35199 (arguments
35200 (list
35201 #:test-flags
35202 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
35203 "-k" #$(let ((click-tests '("test_negative_get"
35204 "test_not_found_key_exit_error[get]"
35205 "test_inspect_invalid_format")))
35206 ;; Disable integration tests
35207 (string-append "not integration and not "
35208 ;; These tests fail because we use
35209 ;; Click 8.* instead of Click 7
35210 (string-join click-tests " and not ")))
35211 "tests")
35212 #:phases
35213 #~(modify-phases %standard-phases
35214 (add-after 'unpack 'patch-for-click-8
35215 (lambda _
35216 (substitute* "dynaconf/cli.py"
35217 (("click.get_os_args\\()") ;deprecated from Click 8.1+
35218 "sys.argv[1:]")))))))
35219 (propagated-inputs
35220 (list python-click python-configobj python-ruamel.yaml-0.16
35221 python-toml python-tomli))
35222 (native-inputs
35223 (list python-django
35224 python-flask
35225 python-pytest
35226 python-pytest-mock
35227 python-setuptools))
35228 (home-page "https://www.dynaconf.com/")
35229 (synopsis "The dynamic configurator for your Python project")
35230 (description
35231 "This package provides @code{dynaconf} the dynamic configurator manager for
35232your Python project. It provides features such as:
35233
35234@itemize
35235@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
35236@item Settings management (default values, validation, parsing, templating);
35237@item Protection of sensitive information (passwords/tokens);
35238@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
35239loaders;
35240@item Full support for environment variables to override existing settings
35241(dotenv support included);
35242@item Optional layered system for multiple environments @code{[default,
35243development, testing, production]};
35244@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
35245@item Built-in extensions for Django and Flask web frameworks;
35246@item CLI for common operations such as @code{init, list, write, validate, export}.
35247@end itemize")
35248 (license license:expat)))
35249
35250(define-public python-pudb
35251 ;; TODO: Rename to pudb as it's a final program.
35252 (package
35253 (name "python-pudb")
35254 (version "2025.1.3")
35255 (source
35256 (origin
35257 (method url-fetch)
35258 (uri (pypi-uri "pudb" version))
35259 (sha256
35260 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
35261 (build-system pyproject-build-system)
35262 (arguments
35263 (list
35264 #:phases
35265 #~(modify-phases %standard-phases
35266 (add-before 'check 'pre-check
35267 (lambda _
35268 (setenv "HOME" "/tmp"))))))
35269 (native-inputs
35270 (list python-hatchling
35271 python-pytest
35272 python-pytest-mock
35273 python-numpy))
35274 (propagated-inputs
35275 (list python-jedi
35276 python-packaging
35277 python-pygments
35278 python-typing-extensions
35279 python-urwid
35280 python-urwid-readline))
35281 (home-page "https://documen.tician.de/pudb/")
35282 (synopsis "Console-based Python debugger")
35283 (description
35284 "@command{pudb} is a full-screen, console-based Python debugger providing
35285all the niceties of modern GUI-based debuggers in a more lightweight and
35286keyboard-friendly package.")
35287 (license license:expat)))
35288
35289(define-public python-iwlib
35290 (package
35291 (name "python-iwlib")
35292 (version "1.7.0")
35293 (source
35294 (origin
35295 (method git-fetch)
35296 (uri (git-reference
35297 (url "https://github.com/nhoad/python-iwlib")
35298 (commit version)))
35299 (file-name (git-file-name name version))
35300 (sha256
35301 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
35302 (build-system pyproject-build-system)
35303 (arguments
35304 (list
35305 #:phases
35306 #~(modify-phases %standard-phases
35307 (add-before 'check 'cleanup
35308 (lambda _
35309 (delete-file-recursively "iwlib"))))))
35310 (native-inputs (list python-pytest python-setuptools))
35311 (inputs (list wireless-tools))
35312 (propagated-inputs (list python-cffi))
35313 (home-page "https://github.com/nhoad/python-iwlib")
35314 (synopsis "Python module to interface with iwlib")
35315 (description
35316 "This package provides a Python interface to iw wireless tools.")
35317 (license license:gpl2)))
35318
35319(define-public python-pdoc3
35320 (package
35321 (name "python-pdoc3")
35322 (version "0.11.6")
35323 (source
35324 (origin
35325 (method url-fetch)
35326 (uri (pypi-uri "pdoc3" version))
35327 (sha256
35328 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
35329 (build-system pyproject-build-system)
35330 (arguments
35331 (list #:test-backend #~'unittest
35332 #:test-flags #~(list "-v" "pdoc.test")))
35333 (native-inputs
35334 (list python-setuptools-git
35335 python-setuptools
35336 python-setuptools-scm))
35337 (propagated-inputs
35338 (list python-mako
35339 python-markdown))
35340 (home-page "https://pdoc3.github.io/pdoc/")
35341 (synopsis "Auto-generate API documentation for Python projects")
35342 (description
35343 "This package auto-generates API documentation from Python projects
35344already existing modules and objects docstrings.")
35345 (license license:agpl3+)))
35346
35347(define-public python-piexif
35348 (package
35349 (name "python-piexif")
35350 (version "1.1.3")
35351 (source
35352 (origin
35353 (method git-fetch)
35354 (uri (git-reference
35355 (url "https://github.com/hMatoba/Piexif")
35356 (commit version)))
35357 (file-name (git-file-name name version))
35358 (sha256
35359 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35360 (patches
35361 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35362 (build-system pyproject-build-system)
35363 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35364 (home-page "https://github.com/hMatoba/Piexif")
35365 (synopsis "Simplify exif manipulations with Python")
35366 (description
35367 "Piexif simplifies interacting with EXIF data in Python. It includes the
35368tools necessary for extracting, creating, manipulating, converting and writing
35369EXIF data to JPEG, WebP and TIFF files.")
35370 (license license:expat)))
35371
35372(define-public python-pyrss2gen
35373 (package
35374 (name "python-pyrss2gen")
35375 (version "1.1")
35376 (source
35377 (origin
35378 (method url-fetch)
35379 (uri (pypi-uri "PyRSS2Gen" version))
35380 (sha256
35381 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35382 (build-system pyproject-build-system)
35383 (arguments (list #:tests? #f)) ; No tests.
35384 (native-inputs (list python-setuptools))
35385 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35386 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35387 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35388PyRSS2Gen builds the feed up by using a XML generator.")
35389 (license license:bsd-3)))
35390
35391(define-public python-doit
35392 (package
35393 (name "python-doit")
35394 (version "0.36.0")
35395 (source
35396 (origin
35397 (method url-fetch)
35398 (uri (pypi-uri "doit" version))
35399 (sha256
35400 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35401 (build-system pyproject-build-system)
35402 ;; This is not a serious test failure. It's probably due to the load path
35403 ;; at test time.
35404 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35405 (propagated-inputs
35406 (list python-cloudpickle python-importlib-metadata))
35407 (native-inputs (list python-pytest python-setuptools python-wheel))
35408 (home-page "https://pydoit.org")
35409 (synopsis "Automation tool to execute any kind of task in a build-tools
35410fashion")
35411 (description "doit is an automation tool that brings the power of
35412build-tools to execute any kind of task.
35413
35414A task describes some computation to be done (actions), and contains some
35415extra meta-data. The actions can be external programs or Python functions. A
35416single task may define more than one action. doit uses the task’s meta-data
35417to:
35418
35419@itemize
35420@item cache task results
35421@item correct execution order
35422@item parallel execution
35423@item powerful dependency system
35424@end itemize")
35425 (license license:expat)))
35426
35427(define-public python-phpserialize
35428 (package
35429 (name "python-phpserialize")
35430 (version "1.3")
35431 (source
35432 (origin
35433 (method git-fetch)
35434 (uri (git-reference
35435 (url "https://github.com/mitsuhiko/phpserialize")
35436 (commit version)))
35437 (file-name (git-file-name name version))
35438 (sha256
35439 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35440 (build-system pyproject-build-system)
35441 (arguments
35442 (list
35443 ;; XXX: Unclear why this test fails.
35444 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35445 #:phases
35446 #~(modify-phases %standard-phases
35447 (add-after 'unpack 'patch-tests
35448 (lambda _
35449 (substitute* "tests.py"
35450 (("assert_\\(b'WP_User' in x\\)")
35451 "assertIn(b'WP_User', x)")))))))
35452 (native-inputs (list python-pytest python-setuptools))
35453 (home-page "https://github.com/mitsuhiko/phpserialize")
35454 (synopsis "Python port of the serialize and unserialize functions of PHP")
35455 (description
35456 "This package provides a port of the @code{serialize} and
35457@code{unserialize} functions of PHP for Python.")
35458 (license license:bsd-3)))
35459
35460(define-public python-pycapnp
35461 (package
35462 (name "python-pycapnp")
35463 (version "2.2.4")
35464 (source
35465 (origin
35466 (method git-fetch)
35467 (uri (git-reference
35468 (url "https://github.com/capnproto/pycapnp")
35469 (commit (string-append "v" version))))
35470 (file-name (git-file-name name version))
35471 (sha256
35472 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35473 (build-system pyproject-build-system)
35474 (arguments
35475 (list
35476 #:phases
35477 #~(modify-phases %standard-phases
35478 (add-before 'build 'set-force-system-capnp
35479 (lambda _
35480 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35481 (add-after 'install 'copy-missing-schemas
35482 (lambda _
35483 (let* ((out #$output)
35484 (capnp-clang #$(this-package-input "capnproto-clang"))
35485 (site-pkgs (car (find-files (string-append out "/lib")
35486 "^site-packages$"
35487 #:directories? #t)))
35488 (target-dir (string-append site-pkgs "/capnp"))
35489 (schema-files (find-files
35490 (string-append capnp-clang
35491 "/include/capnp")
35492 "\\.capnp$")))
35493 (for-each (lambda (file)
35494 (install-file file target-dir)) schema-files))))
35495 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35496 ;; module named 'schema_capnp'". This module is generated
35497 ;; dynamically via import hooks at runtime
35498 (delete 'sanity-check))))
35499 (native-inputs (list pkg-config
35500 python-cython
35501 python-jinja2
35502 python-pkgconfig
35503 python-pytest
35504 python-pytest-asyncio
35505 python-setuptools))
35506 (inputs (list capnproto-clang))
35507 (home-page "https://github.com/capnproto/pycapnp")
35508 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35509 (description
35510 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35511 (license license:bsd-2)))
35512
35513(define-public python-pydevtool
35514 (package
35515 (name "python-pydevtool")
35516 (version "0.3.0")
35517 (source
35518 (origin
35519 (method url-fetch)
35520 (uri (pypi-uri "pydevtool" version))
35521 (sha256
35522 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35523 (build-system pyproject-build-system)
35524 (arguments (list #:tests? #false)) ;no tests
35525 (propagated-inputs (list python-doit python-rich-click))
35526 (native-inputs (list python-setuptools python-wheel))
35527 (home-page "https://github.com/pydoit/pydevtool")
35528 (synopsis "CLI dev tools powered by pydoit")
35529 (description "This package provides command line tools, powered by pydoit.
35530It offers integration with @code{click} and @code{rich} for custom CLI and
35531these linters: @code{pycodestlye}, @code{pyflakes}")
35532 (license license:expat)))
35533
35534(define-public nikola
35535 (package
35536 (name "nikola")
35537 (version "8.3.3")
35538 (source
35539 (origin
35540 (method url-fetch)
35541 (uri (pypi-uri "nikola" version))
35542 (sha256
35543 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35544 (build-system pyproject-build-system)
35545 (arguments
35546 (list
35547 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35548 #:test-flags
35549 #~(list "--durations=10"
35550 "--ignore=tests/integration/test_dev_server.py"
35551 "-k" (string-join
35552 ;; Some time difference in example tests.
35553 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35554 "test_serves_root_dir[https://example.org:1234/blog]"
35555 "test_serves_root_dir[https://example.org:3456/blog/]"
35556 "test_serves_root_dir[https://example.org]"
35557 ;; AssertionError: Calls not found.
35558 "test_write_content_does_not_detroy_text"
35559 ;; AssertionError: assert 'January 10, 2006,
35560 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35561 ;; 12:34:56\u202fPM EST'
35562 "test_format_date_timezone")
35563 " and not "))))
35564 (native-inputs
35565 (list nss-certs-for-test
35566 python-feedparser
35567 python-freezegun
35568 python-pytest
35569 python-setuptools))
35570 (inputs
35571 (list python-babel
35572 python-blinker
35573 python-dateutil
35574 python-docutils
35575 python-doit
35576 python-jinja2 ;; for themes
35577 python-lxml
35578 python-mako
35579 python-markdown
35580 python-natsort
35581 python-notebook ;; for ipynb
35582 python-phpserialize ;; for wordpress import
35583 python-piexif
35584 python-pillow
35585 python-pygments
35586 python-pyrss2gen
35587 python-requests
35588 python-ruamel.yaml ;; for YAML metadata
35589 python-toml
35590 python-unidecode
35591 python-yapsy))
35592 (home-page "https://getnikola.com/")
35593 (synopsis "Modular, fast and simple static website and blog generator")
35594 (description "Nikola generates static websites and blogs. Out of the box,
35595it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35596and has plugins for many other formats.")
35597 (license license:expat)))
35598
35599(define-public nbss-upload
35600 (package
35601 (name "nbss-upload")
35602 (version "0.1")
35603 (source
35604 (origin
35605 (method git-fetch)
35606 (uri (git-reference
35607 (url "https://github.com/notebook-sharing-space/nbss-upload")
35608 (commit (string-append "v" version))))
35609 (file-name (git-file-name name version))
35610 (sha256
35611 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35612 (build-system pyproject-build-system)
35613 (arguments (list #:tests? #f)) ;no tests
35614 (native-inputs (list python-setuptools))
35615 (propagated-inputs (list python-requests))
35616 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35617 (synopsis "Upload notebooks to a notebooksharing.space instance")
35618 (description
35619 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35620notebooksharing.space instance.")
35621 (license license:bsd-3)))
35622
35623(define-public python-reedsolo
35624 (package
35625 (name "python-reedsolo")
35626 (version "1.7.0")
35627 (source
35628 (origin
35629 (method git-fetch)
35630 (uri (git-reference
35631 (url "https://github.com/tomerfiliba/reedsolomon")
35632 (commit (string-append "v" version))))
35633 (file-name (git-file-name name version))
35634 (sha256
35635 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35636 (build-system pyproject-build-system)
35637 (native-inputs (list python-pytest python-setuptools))
35638 (home-page "https://github.com/tomerfiliba/reedsolomon")
35639 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35640 (description
35641 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35642the tutorial at Wikiversity. This is a burst-type implementation, so that it
35643supports any Galois field higher than 2^3, but not binary streams.")
35644 (license license:public-domain)))
35645
35646(define-public python-esprima
35647 (package
35648 (name "python-esprima")
35649 (version "4.0.1")
35650 (source
35651 (origin
35652 (method git-fetch)
35653 (uri (git-reference
35654 (url "https://github.com/Kronuz/esprima-python")
35655 (commit (string-append "v" version))))
35656 (file-name (git-file-name name version))
35657 (sha256
35658 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35659 (build-system pyproject-build-system)
35660 (arguments
35661 (list
35662 ;; XXX: pytest fails to collect tests, and a few tests are failing
35663 ;; using unittest backend. In particular, offsets with math characters
35664 ;; and uncompiled regexps.
35665 #:tests? #f
35666 #:test-backend #~'unittest
35667 #:test-flags
35668 #~(list "-k"
35669 (string-join (list
35670 ;; XXX: Character offsets with maths.
35671 "not test_math_alef"
35672 "test_math_dal_part"
35673 "test_math_kaf_lam"
35674 "test_math_zain_start"
35675 ;; XXX: Uncompiled regexps.
35676 "test_yield_arg_regexp1"
35677 "test_yield_arg_regexp2"
35678 "test_migrated_0005_source"
35679 "test_u_flag_valid_range"
35680 "test_migrated_0049"
35681 "test_migrated_0050_source")
35682 " and not "))))
35683 (native-inputs (list python-setuptools))
35684 (home-page "https://github.com/Kronuz/esprima-python")
35685 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35686 (description
35687 "This package provides ECMAScript parsing infrastructure for
35688multipurpose analysis in Python.")
35689 (license license:bsd-3)))
35690
35691(define-public python-psycopg2-binary
35692 (package
35693 (name "python-psycopg2-binary")
35694 (version "2.9.10")
35695 (source
35696 (origin
35697 (method url-fetch)
35698 (uri (pypi-uri "psycopg2-binary" version))
35699 (sha256
35700 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35701 (build-system pyproject-build-system)
35702 (arguments
35703 ;; Tests are disable because they need a live instance of PostgreSQL.
35704 '(#:tests? #f))
35705 (native-inputs (list python-setuptools python-wheel))
35706 (inputs (list postgresql))
35707 (home-page "https://psycopg.org/")
35708 (synopsis "PostgreSQL database adapter for Python")
35709 (description
35710 "Psycopg is a PostgreSQL database adapter for the Python programming
35711language. Its main features are the complete implementation of the Python DB
35712API 2.0 specification and the thread safety (several threads can share the
35713same connection). It was designed for heavily multi-threaded applications
35714that create and destroy lots of cursors and make a large number of concurrent
35715@code{INSERT}s or @code{UPDATE}s.
35716
35717Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35718being both efficient and secure. It features client-side and
35719server-side cursors, asynchronous communication and notifications,
35720@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35721out-of-the-box and adapted to matching PostgreSQL data types;
35722adaptation can be extended and customized thanks to a flexible objects
35723adaptation system.
35724
35725Psycopg 2 is both Unicode and Python 3 friendly.")
35726 (license license:lgpl3+)))
35727
35728(define-public python-pyfuse3
35729 (package
35730 (name "python-pyfuse3")
35731 (version "3.4.2")
35732 (source
35733 (origin
35734 (method git-fetch)
35735 (uri (git-reference
35736 (url "https://github.com/libfuse/pyfuse3")
35737 (commit (string-append "v" version))))
35738 (file-name (git-file-name name version))
35739 (sha256
35740 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35741 (build-system pyproject-build-system)
35742 (arguments
35743 (list
35744 #:test-flags
35745 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35746 #~(list "--deselect=test/test_api.py::test_listdir")))
35747 (native-inputs
35748 (list pkg-config
35749 python-cython
35750 python-pytest
35751 python-setuptools
35752 python-setuptools-scm))
35753 (inputs
35754 (list fuse))
35755 (propagated-inputs
35756 (list python-trio))
35757 (home-page "https://github.com/libfuse/pyfuse3")
35758 (synopsis "Python bindings to FUSE 3")
35759 (description "This package provides Python 3 bindings for libfuse 3 with
35760async I/O support.")
35761 (license license:gpl2+)))
35762
35763(define-public python-ansi-styles
35764 ;; Releases are not tagged in Git:
35765 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35766 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35767 (revision "0"))
35768 (package
35769 (name "python-ansi-styles")
35770 (version (git-version "0.2.2" revision commit))
35771 (source
35772 (origin
35773 (method git-fetch)
35774 (uri (git-reference
35775 (url "https://github.com/shawwn/ansi-styles-python")
35776 (commit commit)))
35777 (file-name (git-file-name name version))
35778 (sha256
35779 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35780 (build-system pyproject-build-system)
35781 (native-inputs (list python-poetry-core python-pytest))
35782 (home-page "https://github.com/shawwn/ansi-styles-python")
35783 (synopsis "ANSI escape codes for styling strings in the terminal")
35784 (description
35785 "This Python package provide ANSI escape codes
35786for styling strings in the terminal.")
35787 (license license:expat))))
35788
35789(define-public python-multipart
35790 (package
35791 (name "python-multipart")
35792 (version "0.0.32")
35793 (source
35794 (origin
35795 (method git-fetch)
35796 (uri (git-reference
35797 (url "https://github.com/Kludex/python-multipart")
35798 (commit version)))
35799 (file-name (git-file-name name version))
35800 (sha256
35801 (base32 "0p547qsxpgqbciyng0n0ck10mv4bchbpf9gm351293yv6qgr43ng"))))
35802 (build-system pyproject-build-system)
35803 (native-inputs
35804 (list python-hatchling
35805 python-pytest
35806 python-pyyaml))
35807 (home-page "https://github.com/Kludex/python-multipart")
35808 (synopsis "Streaming multipart parser for Python")
35809 (description
35810 "This package provides a streaming multipart parser for Python.
35811
35812It is hosted in PyPI as @url{https://pypi.org/project/python-multipart/,
35813python_multipart}.")
35814 (license license:asl2.0)))
35815
35816(define-public python-aiopg
35817 (package
35818 (name "python-aiopg")
35819 (version "1.4.0")
35820 (source
35821 (origin
35822 (method git-fetch)
35823 (uri (git-reference
35824 (url "https://github.com/aio-libs/aiopg")
35825 (commit (string-append "v" version))))
35826 (file-name (git-file-name name version))
35827 (sha256
35828 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35829 (build-system pyproject-build-system)
35830 (arguments
35831 (list
35832 #:tests? #f ;they need Docker
35833 #:phases
35834 #~(modify-phases %standard-phases
35835 (add-after 'unpack 'use-default-asyncio
35836 ;; async_timeout is deprecated, upstream recommends to use
35837 ;; asyncio, available since Python 3.11.
35838 (lambda _
35839 (substitute* "aiopg/pool.py"
35840 (("async_timeout") "asyncio"))))
35841 (add-after 'unpack 'relax-requirements
35842 (lambda _
35843 (substitute* "setup.py"
35844 (("psycopg2-binary") "psycopg2")
35845 ;; It's a part of Python 3.11+.
35846 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35847 (native-inputs
35848 (list python-setuptools))
35849 (propagated-inputs
35850 (list python-psycopg2))
35851 (home-page "https://aiopg.readthedocs.io")
35852 (synopsis "Postgres integration with asyncio")
35853 (description
35854 "aiopg is a library for accessing a PostgreSQL database from the
35855asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35856Psycopg database driver.")
35857 (license license:bsd-3)))
35858
35859(define-public python-shtab
35860 (package
35861 (name "python-shtab")
35862 (version "1.7.1")
35863 (source
35864 (origin
35865 (method url-fetch)
35866 (uri (pypi-uri "shtab" version))
35867 (sha256
35868 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35869 (build-system pyproject-build-system)
35870 (native-inputs
35871 (list bash
35872 python-pytest
35873 python-pytest-timeout
35874 python-setuptools
35875 python-setuptools-scm
35876 python-wheel))
35877 (home-page "https://github.com/iterative/shtab")
35878 (synopsis "Automagic shell tab completion for Python CLI applications")
35879 (description
35880 "This package automatically generates shell tab completion scripts for
35881Python CLI apps.")
35882 (license license:asl2.0)))
35883
35884(define-public python-pyperf
35885 (package
35886 (name "python-pyperf")
35887 (version "2.10.0")
35888 (source
35889 (origin
35890 (method git-fetch)
35891 (uri (git-reference
35892 (url "https://github.com/psf/pyperf")
35893 (commit version)))
35894 (file-name (git-file-name name version))
35895 (sha256
35896 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35897 (build-system pyproject-build-system)
35898 (arguments
35899 (list
35900 #:test-flags
35901 #~(list "--ignore=pyperf/tests/test_examples.py")))
35902 (native-inputs
35903 (list python-psutil-bootstrap
35904 python-pytest
35905 python-setuptools))
35906 (home-page "https://github.com/psf/pyperf")
35907 (synopsis "Toolkit for running Python benchmarks")
35908 (description
35909 "The Python @code{pyperf} module is a toolkit for writing, running and
35910analyzing benchmarks. It features a simple API that can:
35911
35912@itemize
35913@item automatically calibrate a benchmark for a time budget;
35914@item spawn multiple worker processes;
35915@item compute the mean and standard deviation;
35916@item detect if a benchmark result seems unstable;
35917@item store benchmark results in JSON format;
35918@item support multiple units: seconds, bytes and integer.
35919@end itemize")
35920 (license license:expat)))
35921
35922(define-public python-pydispatcher
35923 (package
35924 (name "python-pydispatcher")
35925 (version "2.0.7")
35926 (source
35927 (origin
35928 (method url-fetch)
35929 (uri (pypi-uri "PyDispatcher" version))
35930 (sha256
35931 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35932 (build-system pyproject-build-system)
35933 (native-inputs (list python-pytest python-setuptools))
35934 (home-page "https://pydispatcher.sourceforge.net")
35935 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35936 (description
35937 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35938@code{dispatcher.py} module. It provides the Python programmer with a robust
35939mechanism for event routing within various application contexts.
35940
35941Included in the package are the robustapply and saferef modules, which
35942provide the ability to selectively apply arguments to callable objects
35943and to reference instance methods using weak-references.")
35944 (license license:bsd-3)))
35945
35946(define-public python-pyee
35947 (package
35948 (name "python-pyee")
35949 (version "13.0.1")
35950 (source
35951 (origin
35952 (method git-fetch)
35953 (uri (git-reference
35954 (url "https://github.com/jfhbrook/pyee")
35955 (commit (string-append "v" version))))
35956 (file-name (git-file-name name version))
35957 (sha256
35958 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35959 (build-system pyproject-build-system)
35960 (propagated-inputs (list python-typing-extensions))
35961 (native-inputs
35962 (list python-mock
35963 python-pytest
35964 python-pytest-asyncio
35965 python-pytest-trio
35966 python-setuptools
35967 python-trio
35968 python-twisted))
35969 (home-page "https://github.com/jfhbrook/pyee")
35970 (synopsis "Emit events with Python")
35971 (description
35972 "This package provides a port of node.js's EventEmitter to
35973python. Additionally, it includes a number of subclasses useful for
35974implementing async and threaded programming in python, such as async/await.")
35975 (license license:expat)))
35976
35977(define-public python-pypubsub
35978 (package
35979 (name "python-pypubsub")
35980 (version "4.0.3")
35981 (source
35982 (origin
35983 (method git-fetch)
35984 (uri (git-reference
35985 (url "https://github.com/schollii/pypubsub")
35986 (commit (string-append "v" version))))
35987 (file-name (git-file-name name version))
35988 (sha256
35989 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35990 (build-system pyproject-build-system)
35991 (arguments
35992 (list
35993 #:phases
35994 #~(modify-phases %standard-phases
35995 (replace 'check
35996 (lambda* (#:key tests? #:allow-other-keys)
35997 (when tests?
35998 (with-directory-excursion "tests/suite"
35999 (invoke "py.test"))))))))
36000 (native-inputs
36001 (list python-pytest
36002 python-setuptools
36003 python-wheel))
36004 (home-page "https://github.com/schollii/pypubsub")
36005 (synopsis "Python publish-subcribe library")
36006 (description
36007 "This library provides a publish-subscribe API to facilitate event-based
36008or message-based architecture in a single-process application. It is centered
36009on the notion of a topic - senders publish messages of a given topic, and
36010listeners subscribe to messages of a given topic, all inside the same
36011process.")
36012 (license license:bsd-2)))
36013
36014(define-public python-queuelib
36015 (package
36016 (name "python-queuelib")
36017 (version "1.8.0")
36018 (source
36019 (origin
36020 (method git-fetch)
36021 (uri (git-reference
36022 (url "https://github.com/scrapy/queuelib")
36023 (commit (string-append "v" version))))
36024 (file-name (git-file-name name version))
36025 (sha256
36026 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
36027 (build-system pyproject-build-system)
36028 (native-inputs (list python-hatchling python-pytest))
36029 (home-page "https://github.com/scrapy/queuelib")
36030 (synopsis "Collection of queues for Python")
36031 (description
36032 "Queuelib is a Python library that implements object collections which
36033are stored in memory or persisted to disk, provide a simple API, and run fast.
36034
36035Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
36036by priority and queues that are emptied in a round-robin fashion.")
36037 (license license:bsd-3)))
36038
36039(define-public python-posix-ipc
36040 (package
36041 (name "python-posix-ipc")
36042 (version "1.3.2")
36043 (source
36044 (origin
36045 (method git-fetch)
36046 (uri (git-reference
36047 (url "https://github.com/osvenskan/posix_ipc")
36048 (commit (string-append "rel" version))))
36049 (file-name (git-file-name name version))
36050 (sha256
36051 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
36052 (build-system pyproject-build-system)
36053 (arguments
36054 (list
36055 #:test-flags
36056 ;; XXX: Collection fails due to stdin configuration.
36057 #~(list "--ignore=tests/test_memory.py")
36058 #:phases
36059 #~(modify-phases %standard-phases
36060 (add-after 'unpack 'set-cc-path
36061 (lambda _
36062 (setenv "CC" #$(cc-for-target)))))))
36063 (native-inputs (list python-pytest python-setuptools))
36064 (home-page "https://semanchuk.com/philip/posix_ipc/")
36065 (synopsis "POSIX IPC primitives for Python")
36066 (description
36067 "This package provides POSIX IPC primitives - semaphores, shared memory and
36068message queues for Python.")
36069 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
36070
36071(define-public python-itemadapter
36072 (package
36073 (name "python-itemadapter")
36074 (version "0.12.0")
36075 (source
36076 (origin
36077 (method git-fetch)
36078 (uri (git-reference
36079 (url "https://github.com/scrapy/itemadapter")
36080 (commit (string-append "v" version))))
36081 (file-name (git-file-name name version))
36082 (sha256
36083 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
36084 (build-system pyproject-build-system)
36085 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
36086 (native-inputs (list python-hatchling))
36087 (home-page "https://github.com/scrapy/itemadapter")
36088 (synopsis "Common interface for data container classes")
36089 (description
36090 "The ItemAdapter class is a wrapper for data container objects, providing
36091a common interface to handle objects of different types in an uniform manner,
36092regardless of their underlying implementation.
36093
36094Currently supported types are:
36095@itemize
36096@item scrapy.item.Item
36097@item dict
36098@item dataclass-based classes
36099@item attrs-based classes
36100@item pydantic-based classes
36101@end itemize
36102
36103Additionally, interaction with arbitrary types is supported by
36104implementing a pre-defined interface.")
36105 (license license:bsd-3)))
36106
36107(define-public python-itemloaders
36108 (package
36109 (name "python-itemloaders")
36110 (version "1.3.2")
36111 (source
36112 (origin
36113 (method url-fetch)
36114 (uri (pypi-uri "itemloaders" version))
36115 (sha256
36116 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
36117 (build-system pyproject-build-system)
36118 (native-inputs
36119 (list python-packaging
36120 python-pytest
36121 python-setuptools
36122 python-wheel))
36123 (propagated-inputs
36124 (list python-itemadapter python-jmespath python-parsel))
36125 (home-page "https://github.com/scrapy/itemloaders")
36126 (synopsis "Base library for scrapy's ItemLoader")
36127 (description "Itemloaders is a library that helps you collect data
36128from HTML and XML sources. It comes in handy to extract data from web
36129pages, as it supports data extraction using CSS and XPath Selectors.
36130
36131It’s specially useful when you need to standardize the data from many
36132sources. For example, it allows you to have all your casting and
36133parsing rules in a single place.")
36134 (license license:bsd-3)))
36135
36136(define-public python-iterable-io
36137 (package
36138 (name "python-iterable-io")
36139 (version "1.0.0")
36140 (source
36141 (origin
36142 (method url-fetch)
36143 (uri (pypi-uri "iterable-io" version))
36144 (sha256
36145 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
36146 (build-system pyproject-build-system)
36147 (native-inputs (list python-setuptools python-pytest))
36148 (home-page "https://github.com/pR0Ps/iterable-io")
36149 (synopsis "Adapt generators and other iterables to a file-like interface")
36150 (description
36151 "@code{iterable-io} is a small Python library that provides an adapter so
36152that it's possible to read from
36153@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
36154in the same way as
36155@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
36156objects.")
36157 (license license:lgpl3)))
36158
36159(define-public python-iteround
36160 (package
36161 (name "python-iteround")
36162 (version "1.0.4")
36163 ;; PyPI only has wheels.
36164 (source (origin
36165 (method git-fetch)
36166 (uri (git-reference
36167 (url "https://github.com/cgdeboer/iteround")
36168 (commit (string-append "v" version))))
36169 (file-name (git-file-name name version))
36170 (sha256
36171 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
36172 (build-system pyproject-build-system)
36173 (native-inputs
36174 (list python-pytest python-setuptools python-wheel))
36175 (home-page "https://github.com/cgdeboer/iteround")
36176 (synopsis "Sum-safe rounding for Iterables")
36177 (description "Iteround is a standard library sum-safe rounding library for
36178Python iterables (lists, tuples, dicts).")
36179 (license license:expat)))
36180
36181(define-public python-hypy-utils
36182 (package
36183 (name "python-hypy-utils")
36184 (version "1.0.29")
36185 (source
36186 (origin
36187 (method url-fetch)
36188 (uri (pypi-uri "hypy_utils" version))
36189 (sha256
36190 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
36191 (build-system pyproject-build-system)
36192 (arguments (list #:tests? #f)) ; No tests upstream.
36193 (native-inputs (list python-setuptools))
36194 (home-page "https://github.com/hykilpikonna/HyPyUtils")
36195 (synopsis "Python utility functions for HyDEV")
36196 (description "This module provides Python utility functions for modifying
36197and setting the color of terminal output, via HyDEV.")
36198 (license license:expat)))
36199
36200(define-public python-mike
36201 (package
36202 (name "python-mike")
36203 (version "2.1.3")
36204 (source
36205 (origin
36206 (method git-fetch) ; no tests data in PyPi package
36207 (uri (git-reference
36208 (url "https://github.com/jimporter/mike")
36209 (commit (string-append "v" version))))
36210 (file-name (git-file-name name version))
36211 (sha256
36212 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
36213 (build-system pyproject-build-system)
36214 (arguments
36215 (list
36216 #:test-flags
36217 ;; Most of integration tests hang or fail.
36218 #~(list "--ignore=test/integration/"
36219 ;; AttributeError: 'NoneType' object has no attribute 'group'
36220 "--ignore=test/unit/test_commands.py"
36221 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
36222 (native-inputs
36223 (list git-minimal/pinned
36224 python-pytest
36225 python-setuptools
36226 python-shtab
36227 python-wheel))
36228 (propagated-inputs
36229 (list python-importlib-metadata
36230 python-importlib-resources
36231 python-jinja2
36232 python-mkdocs
36233 python-pyparsing
36234 python-pyyaml
36235 python-pyyaml-env-tag
36236 python-verspec))
36237 (home-page "https://github.com/jimporter/mike")
36238 (synopsis "Manage multiple versions of MkDocs-powered documentation")
36239 (description
36240 "This package provides a Python utility to easily deploy multiple
36241versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
36242to Github via gh-pages.")
36243 (license license:bsd-3)))
36244
36245(define-public python-arpeggio
36246 (package
36247 (name "python-arpeggio")
36248 (version "2.0.2")
36249 (source
36250 (origin
36251 (method url-fetch)
36252 (uri (pypi-uri "Arpeggio" version))
36253 (sha256
36254 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
36255 (build-system pyproject-build-system)
36256 (native-inputs
36257 (list python-pytest
36258 python-setuptools
36259 python-wheel))
36260 (home-page "https://github.com/textX/Arpeggio")
36261 (synopsis "Packrat parser interpreter for Python")
36262 (description
36263 "This Python library provides a recursive descent parser with
36264backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
36265based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
36266for DSL development but it can be used for all sorts of general purpose
36267parsing.")
36268 (license license:expat)))
36269
36270(define-public python-flatten-json
36271 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
36272 ;; the commit associated with 0.1.14 version.
36273 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
36274 (revision "0"))
36275 (package
36276 (name "python-flatten-json")
36277 (version (git-version "0.1.14" revision commit))
36278 (source
36279 (origin
36280 (method git-fetch) ; no tests in PyPI release
36281 (uri (git-reference
36282 (url "https://github.com/amirziai/flatten")
36283 (commit commit)))
36284 (file-name (git-file-name name version))
36285 (sha256
36286 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
36287 (build-system pyproject-build-system)
36288 (native-inputs
36289 (list python-pytest
36290 python-setuptools
36291 python-wheel))
36292 (propagated-inputs
36293 (list python-six))
36294 (home-page "https://github.com/amirziai/flatten")
36295 (synopsis "Flatten JSON objects")
36296 (description
36297 "The @code{flatten_json} Python library flattens the hierarchy in your
36298object, which can be useful if you want to force your objects into a table.")
36299 (license license:expat))))
36300
36301(define-public python-deepdiff
36302 (package
36303 (name "python-deepdiff")
36304 (version "8.6.1")
36305 (source (origin
36306 (method url-fetch)
36307 (uri (pypi-uri "deepdiff" version))
36308 (sha256
36309 (base32
36310 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
36311 (build-system pyproject-build-system)
36312 (arguments
36313 ;; tests: 1028 passed, 10 skipped, 1 deselected
36314 ;; Ignore Polars test (not packaged).
36315 (list #:test-flags #~(list "-k" "not test_polars")))
36316 (propagated-inputs (list python-click ; for CLI
36317 python-pyyaml ; for CLI
36318 python-orderly-set
36319 python-orjson)) ; for optimization
36320 (native-inputs
36321 (list python-flit-core
36322 python-jsonpickle
36323 python-numpy
36324 python-pandas
36325 python-pydantic
36326 python-pytest
36327 python-pytest-benchmark
36328 python-pytz
36329 python-uuid6
36330 python-tomli-w))
36331 (home-page "https://github.com/seperman/deepdiff")
36332 (synopsis "Deep difference and search of any Python object/data")
36333 (description
36334 "This package provides tools for computing deep differences and searching
36335of any Python object/data. Recreate objects by adding adding deltas to each
36336other.")
36337 (license license:expat)))
36338
36339(define-public python-deepmerge
36340 (package
36341 (name "python-deepmerge")
36342 (version "1.0.1")
36343 (source
36344 (origin
36345 (method url-fetch)
36346 (uri (pypi-uri "deepmerge" version))
36347 (sha256
36348 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36349 (build-system pyproject-build-system)
36350 (native-inputs
36351 (list python-setuptools-scm
36352 python-pytest
36353 python-setuptools
36354 python-wheel))
36355 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36356 (synopsis "Merge nested data structures")
36357 (description
36358 "The @code{deep-merge} Python library provides a toolset to deeply merge
36359nested data structures in Python like lists and dictionaries.")
36360 (license license:expat)))
36361
36362(define-public python-durationpy
36363 (package
36364 (name "python-durationpy")
36365 (version "0.10")
36366 (source
36367 (origin
36368 (method git-fetch)
36369 (uri (git-reference
36370 (url "https://github.com/icholy/durationpy")
36371 (commit version)))
36372 (file-name (git-file-name name version))
36373 (sha256
36374 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36375 (build-system pyproject-build-system)
36376 (arguments
36377 (list #:test-backend #~'custom
36378 #:test-flags #~(list "test.py")))
36379 (native-inputs (list python-setuptools))
36380 (home-page "https://github.com/icholy/durationpy")
36381 (synopsis "Python <-> Golang time duration formats converter")
36382 (description
36383 "This package implements a functionality to convert between
36384Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36385 (license license:expat)))
36386
36387(define-public python-murmurhash3
36388 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36389 (revision "0"))
36390 (package
36391 (name "python-murmurhash3")
36392 (version (git-version "2.3.5" revision commit))
36393 (source
36394 (origin
36395 (method git-fetch)
36396 (uri (git-reference
36397 (url "https://github.com/veegee/mmh3")
36398 (commit commit)))
36399 (file-name (git-file-name name version))
36400 (sha256
36401 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36402 (build-system pyproject-build-system)
36403 (arguments
36404 (list
36405 #:phases
36406 #~(modify-phases %standard-phases
36407 (add-after 'unpack 'fix-package
36408 (lambda _
36409 (substitute* "mmh3module.cpp"
36410 (("#include <stdio\\.h>")
36411 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36412 (native-inputs
36413 (list python-cython python-pytest python-setuptools python-wheel))
36414 (home-page "https://github.com/veegee/mmh3")
36415 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36416 (description
36417 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36418of fast and robust hash functions. This library is a Python extension module
36419written in C.")
36420 (license license:public-domain))))
36421
36422(define-public python-scooby
36423 (package
36424 (name "python-scooby")
36425 (version "0.11.0")
36426 (source
36427 (origin
36428 (method git-fetch)
36429 (uri (git-reference
36430 (url "https://github.com/banesullivan/scooby")
36431 (commit (string-append "v" version))))
36432 (file-name (git-file-name name version))
36433 (sha256
36434 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36435 (build-system pyproject-build-system)
36436 (arguments
36437 (list
36438 ;; tests: 19 passed, 5 deselected, 1 warning
36439 #:test-flags
36440 ;; AssertionError: assert 'Module not found' == '0.1.0'
36441 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36442 ;; ModuleNotFoundError: No module named 'no_version'
36443 "--deselect=tests/test_scooby.py::test_tracking"
36444 ;; Failed: DID NOT RAISE <class 'OSError'>
36445 "--deselect=tests/test_scooby.py::test_import_os_error"
36446 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36447 "--deselect=tests/test_scooby.py::test_import_time"
36448 ;; Errored
36449 "--deselect=tests/test_scooby.py::test_cli")))
36450 (native-inputs
36451 (list python-beautifulsoup4
36452 python-numpy
36453 python-pytest
36454 python-pyvips
36455 python-scipy
36456 python-setuptools
36457 python-setuptools-scm))
36458 (propagated-inputs
36459 (list python-psutil))
36460 (home-page "https://github.com/banesullivan/scooby")
36461 (synopsis "Report hardware information and Python package versions")
36462 (description
36463 "The Scooby package reports the following information about the currently
36464running system:
36465
36466@itemize
36467@item operating system name;
36468@item hardware information including machine type (e.g., @samp{i386},
36469@samp{x86_64}, etc.), CPU count and total RAM;
36470@item Python environment (e.g., Python, IPython, etc.);
36471@item file system name;
36472@item Python version;
36473@item versions of specified Python packages.
36474@end itemize
36475
36476It can generate reports as HTML tables or plain text lists.
36477
36478Scooby has no required dependencies, and only few optional dependencies.")
36479 (license license:expat)))
36480
36481(define-public python-cymem
36482 (package
36483 (name "python-cymem")
36484 (version "2.0.6")
36485 (source
36486 (origin
36487 (method git-fetch)
36488 (uri (git-reference
36489 (url "https://github.com/explosion/cymem")
36490 (commit (string-append "v" version))))
36491 (file-name (git-file-name name version))
36492 (sha256
36493 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36494 (build-system pyproject-build-system)
36495 (native-inputs (list python-cython python-pytest python-setuptools))
36496 (inputs (list python))
36497 (home-page "https://github.com/explosion/cymem")
36498 (synopsis "Cython memory pool for RAII-style memory management")
36499 (description
36500 "Cymem provides two small memory-management helpers for Cython. They make it
36501easy to tie memory to a Python object's life-cycle, so that the memory is freed
36502when the object is garbage collected.")
36503 (license license:expat)))
36504
36505(define-public python-preshed
36506 (package
36507 (name "python-preshed")
36508 (version "3.0.6")
36509 (source
36510 (origin
36511 (method git-fetch)
36512 (uri (git-reference
36513 (url "https://github.com/explosion/preshed")
36514 (commit (string-append "v" version))))
36515 (file-name (git-file-name name version))
36516 (sha256
36517 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36518 (build-system pyproject-build-system)
36519 (arguments
36520 (list
36521 #:phases
36522 #~(modify-phases %standard-phases
36523 (add-after 'unpack 'patch-msvccompiler
36524 (lambda _
36525 (substitute* "setup.py"
36526 (("from distutils import ccompiler, msvccompiler")
36527 "from distutils import ccompiler")
36528 (("and msvccompiler.*")
36529 ""))))
36530 (replace 'check
36531 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36532 (with-directory-excursion (site-packages inputs outputs)
36533 (for-each delete-file (find-files "." "\\.pyx$"))
36534 (apply (assoc-ref %standard-phases 'check) args)
36535 (delete-file-recursively "preshed/tests")))))))
36536 (native-inputs
36537 (list python-cython python-cymem python-pytest python-setuptools))
36538 (inputs (list python python-cymem python-murmurhash))
36539 (home-page "https://github.com/explosion/preshed")
36540 (synopsis "Cython hash tables that assume keys are pre-hashed")
36541 (description
36542 "Simple but high performance Cython hash table mapping pre-randomized keys
36543to void* values.")
36544 (license license:expat)))
36545
36546(define-public python-catalogue
36547 (package
36548 (name "python-catalogue")
36549 (version "2.0.10")
36550 (source
36551 (origin
36552 (method git-fetch)
36553 (uri (git-reference
36554 (url "https://github.com/explosion/catalogue")
36555 (commit (string-append "v" version))))
36556 (file-name (git-file-name name version))
36557 (sha256
36558 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36559 (build-system pyproject-build-system)
36560 (native-inputs (list python-pytest python-setuptools))
36561 (home-page "https://github.com/explosion/catalogue")
36562 (synopsis "Lightweight function registries for your library")
36563 (description
36564 "This package is a tiny, zero-dependencies library that makes it easy to
36565add function (or object) registries to your code. Function registries are
36566helpful when you have objects that need to be both easily serializable and
36567fully customizable. Instead of passing a function into your object, you pass
36568in an identifier name, which the object can use to lookup the function from
36569the registry. This makes the object easy to serialize, because the name is a
36570simple string. If you instead saved the function, you'd have to use Pickle
36571for serialization, which has many drawbacks.")
36572 (license license:expat)))
36573
36574(define-public python-gatt
36575 (package
36576 (name "python-gatt")
36577 (version "0.2.7")
36578 (source (origin
36579 (method url-fetch)
36580 (uri (pypi-uri "gatt" version))
36581 (sha256
36582 (base32
36583 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36584 (build-system pyproject-build-system)
36585 (arguments (list #:tests? #f)) ; No tests upstream.
36586 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36587 (native-inputs (list python-setuptools))
36588 (home-page "https://github.com/getsenic/gatt-python")
36589 (synopsis "Bluetooth GATT SDK for Python")
36590 (description
36591 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36592Software Development Kit} for Python helps you implement and communicate with
36593any Bluetooth Low Energy device that has a GATT profile. It supports:
36594
36595@itemize @bullet
36596@item Discovering nearby Bluetooth Low Energy devices
36597@item Connecting and disconnecting devices
36598@item Implementing your custom GATT profile
36599@item Accessing all GATT services
36600@item Accessing all GATT characteristics
36601@item Reading characteristic values
36602@item Writing characteristic values
36603@item Subscribing for characteristic value change notifications
36604@end itemize
36605
36606Currently, Linux is the only platform supported by this library.")
36607 (license license:expat)))
36608
36609(define-public python-dbus-fast
36610 (package
36611 (name "python-dbus-fast")
36612 (version "2.44.3")
36613 (source
36614 (origin
36615 (method git-fetch) ;No tests in PyPI package.
36616 (uri (git-reference
36617 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36618 (commit (string-append "v" version))))
36619 (file-name (git-file-name name version))
36620 (sha256
36621 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36622 (build-system pyproject-build-system)
36623 (arguments
36624 (list
36625 #:test-flags
36626 '(list
36627 ;; These tests need pytest_codspeed.
36628 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36629 ;; These tests all fail with:
36630 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36631 ;; set and could not get DISPLAY environment variable to get bus address
36632 "-m" "not asyncio")))
36633 (native-inputs (list python-cython
36634 python-poetry-core
36635 python-setuptools
36636 python-pytest
36637 python-pytest-asyncio
36638 python-covdefaults))
36639 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36640 (synopsis "Faster version of dbus-next")
36641 (description "This package provides a faster version of dbus-next.")
36642 (license license:expat)))
36643
36644(define-public python-bleak
36645 (package
36646 (name "python-bleak")
36647 (version "3.0.2")
36648 (source
36649 (origin
36650 (method git-fetch)
36651 (uri (git-reference
36652 (url "https://github.com/hbldh/bleak")
36653 (commit (string-append "v" version))))
36654 (file-name (git-file-name name version))
36655 (sha256
36656 (base32 "1dlryjgi0pzmjjnssq9498chwnjzsx14kg1kyp1465waybgwvs93"))))
36657 (build-system pyproject-build-system)
36658 (arguments
36659 (list
36660 #:test-flags #~(list "--ignore=tests/integration")))
36661 (native-inputs
36662 (list python-coverage ;hard dependency
36663 python-pytest
36664 python-pytest-asyncio
36665 python-uv-build))
36666 (propagated-inputs
36667 (list python-dbus-fast))
36668 (home-page "https://github.com/hbldh/bleak")
36669 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36670 (description "This package provides a Bluetooth Low Energy platform-agnostic
36671client library.")
36672 (license license:expat)))
36673
36674(define-public python-ndeflib
36675 (package
36676 (name "python-ndeflib")
36677 (version "0.3.3")
36678 (source
36679 (origin
36680 (method url-fetch)
36681 (uri (pypi-uri "ndeflib" version))
36682 (sha256
36683 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36684 (build-system pyproject-build-system)
36685 (arguments
36686 (list
36687 ;; tests: 1571 passed, 37 deselected, 1 warning
36688 ;;
36689 ;; Three test fail with assertion not equal:
36690 ;;
36691 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36692 ;; bytes] - AssertionError
36693 ;;
36694 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36695 ;; 1 bytes] - AssertionError
36696 ;;
36697 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36698 ;; AssertionError
36699 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36700 "test_encode_error"))))
36701 (native-inputs (list python-pytest-8 python-setuptools))
36702 (home-page "https://ndeflib.readthedocs.io/")
36703 (synopsis "NFC Data Exchange Format decoder and encoder.")
36704 (description "This package provides a NFC (Near-Field Communication)
36705Data Exchange Format decoder and encoder.")
36706 (license license:isc)))
36707
36708(define-public python-nfcpy
36709 (package
36710 (name "python-nfcpy")
36711 (version "1.0.4")
36712 (source
36713 (origin
36714 (method url-fetch)
36715 (uri (pypi-uri "nfcpy" version))
36716 (sha256
36717 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36718 (build-system pyproject-build-system)
36719 (arguments
36720 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36721 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36722 python-pyserial))
36723 (native-inputs (list python-setuptools python-wheel))
36724 (home-page "https://github.com/nfcpy/nfcpy")
36725 (synopsis "Python module for Near-Field Communication.")
36726 (description "This package provides a Python module for Near-Field
36727Communication.")
36728 (license license:eupl1.1)))
36729
36730(define-public python-clrprint
36731 (package
36732 (name "python-clrprint")
36733 (version "2.0.1")
36734 (source (origin
36735 (method url-fetch)
36736 (uri (pypi-uri "clrprint" version))
36737 (sha256
36738 (base32
36739 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36740 (build-system pyproject-build-system)
36741 (arguments '(#:tests? #f)) ;there are no tests
36742 (native-inputs
36743 (list python-setuptools))
36744 (propagated-inputs (list python-colorama python-termcolor))
36745 (home-page "https://github.com/AbhijithAJ/clrprint")
36746 (synopsis "Print colorful output in the terminal")
36747 (description "@code{clrprint} is developed to print colorful output in the
36748terminal. It has red, blue, green, yellow, purple and black/white (default)
36749colors.")
36750 (license license:expat)))
36751
36752(define-public python-mido
36753 (package
36754 (name "python-mido")
36755 (version "1.3.3")
36756 (source
36757 (origin
36758 (method git-fetch)
36759 (uri (git-reference
36760 (url "https://github.com/mido/mido")
36761 (commit version)))
36762 (file-name (git-file-name name version))
36763 (sha256
36764 (base32 "0skj6586aprr20ymn70drgbps1x3z5y0xj67crxgf4rinj5dw7kd"))))
36765 (build-system pyproject-build-system)
36766 (propagated-inputs (list python-packaging))
36767 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
36768 (home-page "https://mido.readthedocs.io/en/stable/")
36769 (synopsis "MIDI Objects for Python")
36770 (description
36771 "Mido is a Python library for working with MIDI 1.0 ports, messages and
36772files.")
36773 (license license:expat)))
36774
36775(define-public python-pretty-midi
36776 (package
36777 (name "python-pretty-midi")
36778 (version "0.2.11")
36779 (source
36780 (origin
36781 (method git-fetch)
36782 (uri (git-reference
36783 (url "https://github.com/craffel/pretty-midi")
36784 (commit version)))
36785 (file-name (git-file-name name version))
36786 (sha256
36787 (base32 "1ksxf4pvqn0qdhq56zbsjqwl1a47xfnqnmj83i65anfb6j36sj46"))))
36788 (build-system pyproject-build-system)
36789 (arguments
36790 (list
36791 #:phases
36792 #~(modify-phases %standard-phases
36793 (add-after 'unpack 'remove-six
36794 (lambda _
36795 (substitute* "pretty_midi/pretty_midi.py"
36796 ((".*import six.*")
36797 "")
36798 (("six\\.string_types")
36799 "str"))
36800 (substitute* "setup.py"
36801 (("'six.*',")
36802 "")))))))
36803 (propagated-inputs
36804 (list python-importlib-resources python-mido python-numpy))
36805 (native-inputs
36806 (list python-pytest python-setuptools))
36807 (home-page "https://github.com/craffel/pretty-midi")
36808 (synopsis "Functions and classes for handling MIDI data conveniently")
36809 (description
36810 "@code{pretty_midi} contains utility function/classes for handling MIDI
36811data, so that it's in a format which is easy to modify and extract information
36812from.")
36813 (license license:expat)))
36814
36815(define-public python-musical-scales
36816 (package
36817 (name "python-musical-scales")
36818 ;; PyPI has no tests, git has no tags, use the latest commit corresponding
36819 ;; to v2.0.0.
36820 (properties '((commit . "bdc35b360edda7583806fd6037bef2716f08fc85")
36821 (revision . "0")))
36822 (version (git-version "2.0.0"
36823 (assoc-ref properties 'revision)
36824 (assoc-ref properties 'commit)))
36825 (source
36826 (origin
36827 (method git-fetch)
36828 (uri (git-reference
36829 (url "https://github.com/hmillerbakewell/musical-scales")
36830 (commit (assoc-ref properties 'commit))))
36831 (file-name (git-file-name name version))
36832 (sha256
36833 (base32 "0znkiq6r61h1sj5r24kah6h94c5agfpq4ypadn4i73hry0fkl9fd"))))
36834 (build-system pyproject-build-system)
36835 (native-inputs (list python-pytest python-setuptools))
36836 (home-page "https://github.com/hmillerbakewell/musical-scales")
36837 (synopsis "Retrieve a scale based on a given mode and starting note")
36838 (description
36839 "Retrieve a scale based on a given mode and starting note.
36840Information about these scales can be
36841@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36842Wikipedia}.")
36843 (license license:expat)))
36844
36845(define-public python-langcodes
36846 (package
36847 (name "python-langcodes")
36848 (version "3.5.0")
36849 (source (origin
36850 (method url-fetch)
36851 (uri (pypi-uri "langcodes" version))
36852 (sha256
36853 (base32
36854 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36855 (build-system pyproject-build-system)
36856 (native-inputs
36857 (list python-pytest
36858 python-setuptools
36859 python-setuptools-scm))
36860 (propagated-inputs
36861 ;; [optional:data]
36862 (list python-language-data))
36863 (home-page "https://github.com/rspeer/langcodes")
36864 (synopsis "Python library for working with language codes")
36865 (description
36866 "This package provides a Python library for working with and comparing
36867language codes.
36868
36869@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3687047}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3687147 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36872with it, and it also implements recommendations from the
36873@url{http://cldr.unicode.org/, Unicode CLDR}.
36874
36875@code{python-langcodes} can also refer to a database of language properties
36876and names, built from Unicode CLDR and the IANA subtag registry, if you
36877install @code{python-language-data}.")
36878 (license license:expat)))
36879
36880(define-public python-anyascii
36881 (package
36882 (name "python-anyascii")
36883 (version "0.3.3")
36884 (source (origin
36885 (method url-fetch)
36886 (uri (pypi-uri "anyascii" version))
36887 (sha256
36888 (base32
36889 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36890 (build-system pyproject-build-system)
36891 (native-inputs (list python-pytest python-flit-core))
36892 (home-page "https://anyascii.com")
36893 (synopsis "Unicode to ASCII transliteration")
36894 (description "@code{anyascii} converts Unicode characters to their best
36895ASCII representation.")
36896 (license license:isc)))
36897
36898(define-public python-geomet
36899 (package
36900 (name "python-geomet")
36901 (version "1.1.0")
36902 (source
36903 (origin
36904 (method git-fetch)
36905 (uri (git-reference
36906 (url "https://github.com/geomet/geomet")
36907 (commit version)))
36908 (file-name (git-file-name name version))
36909 (sha256
36910 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36911 (build-system pyproject-build-system)
36912 (native-inputs (list python-pytest python-setuptools))
36913 (propagated-inputs (list python-click python-six))
36914 (home-page "https://github.com/geomet/geomet")
36915 (synopsis
36916 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36917 (description
36918 "This package provides utilities and functions for converting
36919GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36920versa. Extended WKB/WKT are also supported.")
36921 (license license:asl2.0)))
36922
36923(define-public python-cogapp
36924 (package
36925 (name "python-cogapp")
36926 (version "3.3.0")
36927 (source (origin
36928 (method url-fetch)
36929 (uri (pypi-uri "cogapp" version))
36930 (sha256
36931 (base32
36932 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36933 (build-system pyproject-build-system)
36934 (native-inputs (list python-pytest python-setuptools python-wheel))
36935 (home-page "https://nedbatchelder.com/code/cog")
36936 (synopsis "Content generation tool that leverages Python")
36937 (description "Cog is a file generation tool. It allows using pieces of
36938Python code as generators in your source files to generate arbitrary text.")
36939 (license license:expat)))
36940
36941(define-public python-cxxheaderparser
36942 (package
36943 (name "python-cxxheaderparser")
36944 (version "1.7.0")
36945 (source
36946 (origin
36947 (method git-fetch)
36948 (uri (git-reference
36949 (url "https://github.com/robotpy/cxxheaderparser")
36950 (commit version)))
36951 (file-name (git-file-name name version))
36952 (sha256
36953 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36954 (build-system pyproject-build-system)
36955 (native-inputs
36956 (list python-hatch-vcs python-pytest))
36957 (home-page "https://github.com/robotpy/cxxheaderparser/")
36958 (synopsis "Python C++ header parser")
36959 (description "Pure python C++ header parser that parses C++ headers in a
36960mildly naive manner that allows it to handle many C constructs, including
36961many (C++11 and beyond) features.")
36962 (license license:bsd-3)))
36963
36964(define-public python-bsdiff4
36965 (package
36966 (name "python-bsdiff4")
36967 (version "1.2.6")
36968 (source
36969 (origin
36970 (method git-fetch)
36971 (uri (git-reference
36972 (url "https://github.com/ilanschnell/bsdiff4")
36973 (commit version)))
36974 (file-name (git-file-name name version))
36975 (sha256
36976 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36977 (build-system pyproject-build-system)
36978 (arguments
36979 (list
36980 #:test-flags #~(list "--pyargs" "bsdiff4")))
36981 (native-inputs
36982 (list python-pytest
36983 python-setuptools
36984 python-wheel))
36985 (home-page "https://github.com/ilanschnell/bsdiff4")
36986 (synopsis "Binary diff and patch using the BSDIFF4 format")
36987 (description
36988 "This package provides a Python library for the @code{bsdiff} binary diff
36989utility. It also provides two command-line tools, @code{bsdiff4} and
36990@code{bspatch4}.")
36991 (license license:bsd-2)))
36992
36993(define-public python-mpv
36994 (package
36995 (name "python-mpv")
36996 (version "1.0.8")
36997 (source
36998 (origin
36999 (method git-fetch)
37000 (uri (git-reference
37001 (url "https://github.com/jaseg/python-mpv")
37002 (commit (string-append "v" version))))
37003 (file-name (git-file-name name version))
37004 (sha256
37005 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
37006 (build-system pyproject-build-system)
37007 (arguments
37008 (list #:phases
37009 #~(modify-phases %standard-phases
37010 (add-before 'build 'patch-reference-to-mpv
37011 (lambda* (#:key inputs #:allow-other-keys)
37012 ;; Without an absolute path it is not able find and load libmpv.
37013 (substitute* "mpv.py"
37014 (("sofile = .*")
37015 (format #f "sofile = '~a/lib/libmpv.so'~%"
37016 #$(this-package-input "mpv"))))))
37017 (add-before 'check 'prepare-for-tests
37018 (lambda _
37019 ;; Fontconfig throws errors when it has no cache dir to use.
37020 (setenv "XDG_CACHE_HOME" (getcwd))
37021 ;; Some tests fail without a writable and readable HOME.
37022 (setenv "HOME" (getcwd))
37023 (setenv "PY_MPV_SKIP_TESTS"
37024 "test_wait_for_property_event_overflow"))))))
37025 (native-inputs
37026 (list python-pytest
37027 python-pyvirtualdisplay
37028 python-setuptools
37029 xorg-server-for-tests))
37030 (inputs (list mpv))
37031 (propagated-inputs (list python-pillow)) ;for raw screenshots
37032 (home-page "https://github.com/jaseg/python-mpv")
37033 (synopsis "Python interface to the mpv media player")
37034 (description
37035 "python-mpv is a ctypes-based python interface to the mpv media player.
37036It gives you more or less full control of all features of the player, just
37037as the lua interface does.")
37038 ;; From the project's README:
37039 ;; python-mpv inherits the underlying libmpv's license, which can be either
37040 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
37041 ;; copyright page.
37042 (license license:gpl2+)))
37043
37044(define-public python-biblib
37045 (let ((upstream-version "0.1.0")
37046 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
37047 (revision "1"))
37048 (package
37049 (name "python-biblib")
37050 (version (git-version upstream-version revision commit))
37051 (source
37052 (origin
37053 (method git-fetch)
37054 (uri (git-reference
37055 (url "https://github.com/aclements/biblib")
37056 (commit commit)))
37057 (sha256
37058 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
37059 (file-name (git-file-name name version))))
37060 (build-system pyproject-build-system)
37061 (arguments (list #:tests? #f)) ; No tests upstream.
37062 (native-inputs (list python-setuptools))
37063 (home-page "https://github.com/aclements/biblib")
37064 (synopsis "BibTeX parsing and transformation library")
37065 (description
37066 "Biblib provides a simple, standalone Python 3 package for parsing
37067BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
37068entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
37069source code for BibTeX and hence (barring bugs in translation) should be fully
37070compatible with BibTeX's own parser.")
37071 ;; N.B. It seems the parser was translated from WEB by hand: this
37072 ;; package does not contain any generated files.
37073 (license license:expat))))
37074
37075(define-public python-cyclic
37076 (package
37077 (name "python-cyclic")
37078 (version "1.0.0")
37079 (source
37080 (origin
37081 (method git-fetch)
37082 (uri (git-reference
37083 (url "https://github.com/neurobin/cyclic")
37084 ;; Release is not tagged on github, see
37085 ;; https://github.com/neurobin/cyclic/issues/2
37086 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
37087 (file-name (git-file-name name version))
37088 (sha256
37089 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
37090 (build-system pyproject-build-system)
37091 (arguments (list #:test-backend #~'unittest))
37092 (native-inputs (list python-setuptools))
37093 (home-page "https://github.com/neurobin/cyclic")
37094 (synopsis "Handle cyclic relations")
37095 (description "This package handles cyclic relations compared by value.")
37096 (license license:bsd-3)))
37097
37098(define-public python-rcslice
37099 (package
37100 (name "python-rcslice")
37101 (version "1.1.0")
37102 (source
37103 (origin
37104 (method git-fetch)
37105 (uri (git-reference
37106 (url "https://github.com/neurobin/rcslice")
37107 ;; Releases are not tagged on github, see
37108 ;; https://github.com/neurobin/rcslice/issues/2
37109 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
37110 (file-name (git-file-name name version))
37111 (sha256
37112 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
37113 (build-system pyproject-build-system)
37114 (arguments (list #:test-backend #~'unittest))
37115 (native-inputs (list python-setuptools))
37116 (home-page "https://github.com/neurobin/rcslice")
37117 (synopsis "Slice a list of sliceables")
37118 (description
37119 "This package provides Python module to slice a list of sliceables (1
37120indexed, both start and end index are inclusive). Helps to slice file content
37121line by line or column by column or a combination of both.")
37122 (license license:bsd-3)))
37123
37124(define-public python-rpds-py
37125 (package
37126 (name "python-rpds-py")
37127 (version "0.30.0")
37128 (source (origin
37129 (method url-fetch)
37130 (uri (pypi-uri "rpds_py" version))
37131 (sha256
37132 (base32
37133 "110y8k62b9xb3slny7gf89943xpbji3s7vl7yz0g0jh1j37zg3yx"))))
37134 (build-system cargo-build-system)
37135 (arguments
37136 (list
37137 #:imported-modules `(,@%cargo-build-system-modules
37138 ,@%pyproject-build-system-modules)
37139 #:modules '((guix build cargo-build-system)
37140 ((guix build pyproject-build-system) #:prefix py:)
37141 (guix build utils))
37142 #:phases
37143 #~(modify-phases %standard-phases
37144 (add-after 'build 'build-python-module
37145 (assoc-ref py:%standard-phases 'build))
37146 (add-after 'build-python-module 'install-python-module
37147 (assoc-ref py:%standard-phases 'install)))
37148 #:install-source? #false))
37149 (inputs
37150 (cons maturin (cargo-inputs 'python-rpds-py)))
37151 (native-inputs
37152 (list python-wrapper))
37153 (home-page "https://github.com/crate-py/rpds")
37154 (synopsis "Bindings to Rust rpds for persistent data structures")
37155 (description "This package provides Python bindings to the Rust rpds crate
37156for persistent data structures. It was written initially to support replacing
37157@code{python-pyrsistent}.")
37158 (license license:expat)))
37159
37160(define-public python-nanoid
37161 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
37162 (revision "0"))
37163 (package
37164 (name "python-nanoid")
37165 (version "2.0.0")
37166 (source
37167 (origin
37168 (method git-fetch)
37169 (uri
37170 (git-reference
37171 (url "https://github.com/puyuan/py-nanoid")
37172 (commit commit)))
37173 (file-name (git-file-name name commit))
37174 (sha256
37175 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
37176 (build-system pyproject-build-system)
37177 (native-inputs (list python-pytest python-setuptools))
37178 (home-page "https://github.com/puyuan/py-nanoid")
37179 (synopsis "Unique string ID generator")
37180 (description
37181 "This package provides a tiny, secure, URL-friendly, unique string ID
37182generator for Python.")
37183 (license license:expat))))
37184
37185(define-public python-misc-utils
37186 (package
37187 (name "python-misc-utils")
37188 (version "0.28")
37189 (source
37190 (origin
37191 (method git-fetch)
37192 (uri (git-reference
37193 (url "https://github.com/davidel/py_misc_utils")
37194 (commit version)))
37195 (file-name (git-file-name name version))
37196 (sha256
37197 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
37198 (build-system pyproject-build-system)
37199 (arguments
37200 (list
37201 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
37202 #:test-backend #~'custom
37203 #:test-flags #~(list "test/test_runner.py")))
37204 (propagated-inputs
37205 (list python-numpy python-pandas python-psutil python-pyyaml))
37206 (native-inputs (list python-setuptools))
37207 (home-page "https://github.com/davidel/py_misc_utils")
37208 (synopsis "Collection of Python utilities")
37209 (description "This package provides a collection of Python miscellaneous
37210utility tools mainly used by other projects of the same author.")
37211 (license license:asl2.0)))
37212
37213(define-public python-misskey
37214 (package
37215 (name "python-misskey")
37216 (version "4.1.0")
37217 (source (origin
37218 (method git-fetch)
37219 (uri (git-reference
37220 (url "https://github.com/YuzuRyo61/Misskey.py")
37221 (commit (string-append "v" version))))
37222 (file-name (git-file-name name version))
37223 (sha256
37224 (base32
37225 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
37226 (build-system pyproject-build-system)
37227 (arguments (list #:tests? #f)) ;needs network
37228 (native-inputs (list python-setuptools))
37229 (propagated-inputs (list python-requests))
37230 (home-page "https://misskeypy.readthedocs.io")
37231 (synopsis "Python bindings for Misskey's API")
37232 (description
37233 "This package provides access to Misskey's API. Misskey is a SNS
37234platform using the ActivityPub protocol.")
37235 (license license:expat)))
37236
37237(define-public python-lief
37238 (package
37239 (name "python-lief")
37240 (version "1.0.0")
37241 (source
37242 (origin
37243 (method git-fetch)
37244 (uri (git-reference
37245 (url "https://github.com/lief-project/LIEF")
37246 (commit version)))
37247 (file-name (git-file-name name version))
37248 (sha256
37249 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
37250 (build-system pyproject-build-system)
37251 (arguments
37252 (list
37253 ;; TODO: Tests neeed some setup, see:
37254 ;; <.github/workflows/linux-x86-64.yml>.
37255 #:tests? #f
37256 #:phases
37257 #~(modify-phases %standard-phases
37258 (add-before 'build 'change-directory
37259 (lambda _
37260 (chdir "api/python"))))))
37261 (native-inputs
37262 (list ninja
37263 python-pydantic
37264 python-scikit-build-core
37265 python-tomli))
37266 (home-page "https://github.com/lief-project/LIEF")
37267 (synopsis "Library to instrument executable formats")
37268 (description
37269 "@code{python-lief} is a cross platform library which can parse, modify
37270and abstract ELF, PE and MachO formats.")
37271 (license license:asl2.0)))
37272
37273(define-public python-eris
37274 (package
37275 (name "python-eris")
37276 (version "1.0.0")
37277 (source
37278 (origin
37279 (method url-fetch)
37280 (uri (pypi-uri "eris" version))
37281 (sha256
37282 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
37283 (build-system pyproject-build-system)
37284 (arguments
37285 ;; No tests in PyPI, tests miss data files in Git:
37286 ;; - tests/test-vectors/test_encode
37287 ;; - tests/test-vectors/test_decode
37288 (list #:tests? #f))
37289 (native-inputs
37290 (list python-setuptools
37291 python-wheel))
37292 (propagated-inputs
37293 (list python-aiocoap
37294 python-pycryptodome))
37295 (home-page "https://codeberg.org/eris/python-eris")
37296 (synopsis "Python implementation of ERIS")
37297 (description
37298 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
37299Storage}.")
37300 (license license:lgpl3+)))
37301
37302(define-public python-pymonad
37303 (package
37304 (name "python-pymonad")
37305 (version "2.4.0")
37306 (source
37307 (origin
37308 (method git-fetch)
37309 (uri (git-reference
37310 (url "https://github.com/jasondelaat/pymonad")
37311 (commit (string-append "v" version))))
37312 (file-name (git-file-name name version))
37313 (sha256
37314 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
37315 (build-system pyproject-build-system)
37316 (arguments
37317 (list
37318 #:phases
37319 #~(modify-phases %standard-phases
37320 (replace 'check
37321 (lambda* (#:key tests? #:allow-other-keys)
37322 (when tests?
37323 (invoke "./run_tests.sh")))))))
37324 (native-inputs (list python-setuptools))
37325 (home-page "https://github.com/jasondelaat/pymonad")
37326 (synopsis "Monadic style functional programming for Python")
37327 (description "@code{python-pymonad} implements data structures typically
37328available in purely functional or functional first programming languages such
37329as Haskell and F#. Included are
37330
37331@itemize
37332@item Monad and Monoid data types with several common monads such as Maybe and
37333State
37334@item Useful tools such as the @code{@@curry} decorator for defining curried
37335functions
37336@item Type annotations to help ensure correct usage
37337@end itemize")
37338 (license license:bsd-3)))
37339
37340(define-public python-markdown-strings
37341 (package
37342 (name "python-markdown-strings")
37343 (version "3.3.0")
37344 (source
37345 (origin
37346 (method git-fetch)
37347 (uri (git-reference
37348 (url "https://github.com/awesmubarak/markdown_strings.git")
37349 (commit (string-append "v" version))))
37350 (file-name (git-file-name name version))
37351 (sha256
37352 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
37353 (build-system pyproject-build-system)
37354 (arguments
37355 (list
37356 #:test-backend #~'custom
37357 #:test-flags #~(list "test.py")))
37358 (native-inputs (list python-setuptools))
37359 (propagated-inputs (list python-lxml python-six))
37360 (home-page "https://github.com/awesmubarak/markdown_strings")
37361 (synopsis "Python library to create markdown-formatted text")
37362 (description "This package allows the programmatic creation of
37363markdown-compliant strings.")
37364 (license license:expat)))
37365
37366(define-public python-icecream
37367 (package
37368 (name "python-icecream")
37369 (version "2.1.9")
37370 (source
37371 (origin
37372 (method git-fetch)
37373 (uri (git-reference
37374 (url "https://github.com/gruns/icecream")
37375 (commit (string-append "v" version))))
37376 (file-name (git-file-name name version))
37377 (sha256
37378 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
37379 (build-system pyproject-build-system)
37380 (native-inputs
37381 (list python-hypothesis
37382 python-pytest
37383 python-setuptools))
37384 (propagated-inputs
37385 (list python-asttokens
37386 python-colorama
37387 python-executing
37388 python-pygments))
37389 (home-page "https://github.com/gruns/icecream")
37390 (synopsis
37391 "Single function call to debug variables, expressions, and program execution")
37392 (description
37393 "This tool lets you debug variables, expressions, and program execution
37394with one function call. IceCream makes print debugging a little sweeter.")
37395 (license license:expat)))
37396
37397;; XXX: Deprecated on <2026-07-12>.
37398(define-deprecated/public-alias python-icegrams
37399 (@ (gnu packages language) python-icegrams))
37400
37401(define-public python-sbsv
37402 (package
37403 (name "python-sbsv")
37404 (version "0.3.1")
37405 (source
37406 (origin
37407 (method git-fetch)
37408 (uri (git-reference
37409 (url "https://github.com/hsh814/sbsv")
37410 (commit (string-append "v" version))))
37411 (file-name (git-file-name name version))
37412 (sha256
37413 (base32 "0wgqb7j2slp05zm6s2qqsb5821vzz1w3jdcwsn2k3jfj7mylnryq"))
37414 (modules '((guix build utils)))
37415 (snippet
37416 #~(begin ;unbundle c-sbsv
37417 (delete-file-recursively "libsbsv")
37418 (substitute* "setup.py"
37419 ((" *\"libsbsv/src/.*") "")
37420 ((" *include_dirs=.*,") "libraries=['sbsv'],")
37421 ((" *optional=True,.*") ""))))))
37422 (build-system pyproject-build-system)
37423 (arguments
37424 (list #:phases #~(modify-phases %standard-phases
37425 (add-after 'unpack 'remove-setuptools-legacy
37426 (lambda _
37427 (substitute* "pyproject.toml"
37428 ((":__legacy__") "")))))))
37429 (native-inputs (list python-setuptools python-pytest))
37430 (inputs (list c-sbsv))
37431 (home-page "https://github.com/hsh814/sbsv")
37432 (synopsis "Square bracket separated values")
37433 (description
37434 "This Python package provides a schema-driven structured log data format
37435for the ease of writing and parsing.")
37436 (license license:expat)))
37437
37438(define-public python-sqlglot
37439 (package
37440 (name "python-sqlglot")
37441 (version "26.33.0")
37442 (source
37443 (origin
37444 (method url-fetch)
37445 (uri (pypi-uri "sqlglot" version))
37446 (sha256
37447 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37448 (build-system pyproject-build-system)
37449 (arguments
37450 (list
37451 #:test-backend #~'unittest
37452 #:phases
37453 #~(modify-phases %standard-phases
37454 (add-before 'check 'pre-check
37455 (lambda _
37456 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37457 (native-inputs
37458 (list python-duckdb
37459 python-pytz
37460 python-pandas
37461 python-setuptools
37462 python-setuptools-scm
37463 python-tzdata))
37464 (home-page "https://sqlglot.com/")
37465 (synopsis "Python SQL Parser and Transpiler")
37466 (description
37467 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37468engine. It can be used to format SQL or translate between 31 different
37469dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37470BigQuery. It aims to read a wide variety of SQL inputs and output
37471syntactically and semantically correct SQL in the targeted dialects.")
37472 (license license:expat)))
37473
37474(define-public python-sqlglotrs
37475 (package
37476 (inherit python-sqlglot)
37477 (name "python-sqlglotrs")
37478 (version "0.6.1")
37479 (source
37480 (origin
37481 (method url-fetch)
37482 (uri (pypi-uri "sqlglotrs" version))
37483 (sha256
37484 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37485 (build-system cargo-build-system)
37486 (arguments
37487 (list
37488 #:install-source? #false
37489 #:tests? #f ;no tests
37490 #:imported-modules `(,@%cargo-build-system-modules
37491 ,@%pyproject-build-system-modules)
37492 #:modules '((guix build cargo-build-system)
37493 ((guix build pyproject-build-system) #:prefix py:)
37494 (guix build utils))
37495 #:phases
37496 #~(modify-phases %standard-phases
37497 (add-after 'build 'build-python-module
37498 (assoc-ref py:%standard-phases 'build))
37499 (add-after 'build-python-module 'install-python-module
37500 (assoc-ref py:%standard-phases 'install))
37501 (add-after 'install-python-module 'add-install-to-pythonpath
37502 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37503 (native-inputs
37504 (list maturin
37505 python-wrapper))
37506 (inputs
37507 (cargo-inputs 'python-sqlglotrs))))
37508
37509(define-public python-sqltrie
37510 (package
37511 (name "python-sqltrie")
37512 (version "0.11.2")
37513 (home-page "https://github.com/iterative/sqltrie/")
37514 (source
37515 (origin
37516 (method url-fetch)
37517 (uri (pypi-uri "sqltrie" version))
37518 (sha256
37519 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37520 (build-system pyproject-build-system)
37521 (arguments
37522 (list
37523 #:test-flags
37524 #~(list "--ignore=tests/benchmarks/"
37525 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37526 ;; yet in Guix.
37527 "--ignore=src/sqltrie/__pyinstaller")))
37528 (native-inputs
37529 (list python-pytest
37530 python-pytest-mock
37531 python-pytest-sugar
37532 python-setuptools
37533 python-setuptools-scm))
37534 (propagated-inputs
37535 (list python-attrs
37536 python-orjson
37537 python-pygtrie))
37538 (synopsis "SQL-based prefix tree for Python")
37539 (description
37540 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37541python-diskcache.")
37542 (license license:asl2.0)))
37543
37544(define-public python-socksipy-branch
37545 (package
37546 (name "python-socksipy-branch")
37547 (version "1.01")
37548 (source
37549 (origin
37550 (method url-fetch)
37551 (uri (pypi-uri "SocksiPy-branch" version))
37552 (sha256
37553 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37554 (build-system pyproject-build-system)
37555 (arguments (list #:tests? #f)) ; There are no tests
37556 (native-inputs (list python-setuptools))
37557 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37558 (synopsis "Python SOCKS module")
37559 (description
37560 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37561interface that supports connections to any TCP service through the use of a
37562SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37563this is a branch created by Mario Vilas to address some open issues,as the
37564original project seems to have been abandoned circa 2007.")
37565 (license license:bsd-3)))
37566
37567(define-public python-socksipychain
37568 (package
37569 (name "python-socksipychain")
37570 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37571 (revision . "0")))
37572 (version (git-version "2.1.3"
37573 (assoc-ref properties 'revision)
37574 (assoc-ref properties 'commit)))
37575 (source
37576 (origin
37577 (method git-fetch)
37578 (uri (git-reference
37579 (url "https://github.com/pagekite/PySocksipyChain")
37580 (commit (assoc-ref properties 'commit))))
37581 (file-name (git-file-name name version))
37582 (sha256
37583 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37584 (build-system pyproject-build-system)
37585 (arguments (list #:tests? #f)) ; Tests try to access the network.
37586 (native-inputs (list python-setuptools))
37587 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37588 (synopsis "Python SOCKS module with chained proxies support")
37589 (description
37590 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37591adds support for arbitrary chaining of proxy servers and various modes of
37592TLS/SSL encryption. It was developed for use in PageKite, and also includes
37593a simple netcat replacement with chaining support.")
37594 (license license:bsd-3)))
37595
37596(define-public python-sortedcollections
37597 (package
37598 (name "python-sortedcollections")
37599 (version "2.1.0")
37600 (source
37601 (origin
37602 (method git-fetch)
37603 (uri (git-reference
37604 (url "https://github.com/grantjenks/python-sortedcollections")
37605 (commit (string-append "v" version))))
37606 (file-name (git-file-name name version))
37607 (sha256
37608 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37609 (build-system pyproject-build-system)
37610 (native-inputs (list python-setuptools python-pytest python-wheel))
37611 (propagated-inputs (list python-sortedcontainers))
37612 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37613 (synopsis "Python Sorted Collections")
37614 (description "Sorted Collections is a Python sorted collections library.")
37615 (license license:asl2.0)))
37616
37617(define-public python-sortedcontainers
37618 (package
37619 (name "python-sortedcontainers")
37620 (version "2.4.0")
37621 (source
37622 (origin
37623 (method git-fetch) ;no tests in PyPI archive
37624 (uri (git-reference
37625 (url "https://github.com/grantjenks/python-sortedcontainers")
37626 (commit (string-append "v" version))))
37627 (file-name (git-file-name name version))
37628 (sha256
37629 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37630 (build-system pyproject-build-system)
37631 (arguments
37632 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37633 (native-inputs
37634 (list python-pytest-bootstrap python-setuptools))
37635 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37636 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37637 (description
37638 "This package provides a sorted collections library, written in
37639pure-Python.")
37640 (license license:asl2.0)))
37641
37642(define-public python-soupsieve
37643 (package
37644 (name "python-soupsieve")
37645 (version "2.7")
37646 (source
37647 (origin
37648 (method url-fetch)
37649 (uri (pypi-uri "soupsieve" version))
37650 (sha256
37651 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37652 (build-system pyproject-build-system)
37653 (native-inputs
37654 (list python-beautifulsoup4-bootstrap
37655 python-hatchling
37656 python-pytest))
37657 (home-page "https://github.com/facelessuser/soupsieve")
37658 (synopsis "CSS selector library")
37659 (description
37660 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37661Soup 4. It aims to provide selecting, matching, and filtering using modern
37662CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37663specifications up through the latest CSS level 4 drafts and beyond (though
37664some are not yet implemented).")
37665 (license license:expat)))
37666
37667(define-public python-spectra
37668 (package
37669 (name "python-spectra")
37670 (version "0.1.0")
37671 (source
37672 (origin
37673 (method url-fetch)
37674 (uri (pypi-uri "spectra" version))
37675 (sha256
37676 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37677 (build-system pyproject-build-system)
37678 (propagated-inputs
37679 (list python-colormath2))
37680 (native-inputs
37681 (list python-pytest python-setuptools python-wheel))
37682 (home-page "https://github.com/jsvine/spectra")
37683 (synopsis "Color scales and color conversion")
37684 (description
37685 "This package provides a Python library intended to make color math,
37686color scales, and color space conversion easy. It has support for:
37687
37688@enumerate
37689@item Color scales
37690@item Color ranges
37691@item Color blending
37692@item Brightening/darkening colors
37693@item Saturating/desaturating colors
37694@item Conversion to/from multiple color spaces.
37695@end enumerate\n")
37696 (license license:expat)))
37697
37698(define-public python-speedy-antlr-tool
37699 (package
37700 (name "python-speedy-antlr-tool")
37701 (version "1.4.3")
37702 (source
37703 (origin
37704 (method git-fetch)
37705 (uri (git-reference
37706 (url "https://github.com/amykyta3/speedy-antlr-tool")
37707 (commit (string-append "v" version))))
37708 (file-name (git-file-name name version))
37709 (sha256
37710 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37711 (build-system pyproject-build-system)
37712 (arguments '(#:tests? #f)) ;no test
37713 (native-inputs (list python-setuptools python-setuptools-scm))
37714 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37715 (home-page "https://speedy-antlr-tool.readthedocs.io")
37716 (synopsis "Generate ANTLR parser as Python extension module")
37717 (description
37718 "This tool generates a Python extension that runs your parser
37719using ANTLR's C++ target, and then translates the parsed tree
37720back into Python.")
37721 (license license:bsd-3)))
37722
37723(define-public python-speg
37724 (package
37725 (name "python-speg")
37726 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37727 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37728 (revision . "0")))
37729 (version (git-version "0.3"
37730 (assoc-ref properties 'revision)
37731 (assoc-ref properties 'commit)))
37732 (source
37733 (origin
37734 (method git-fetch)
37735 (uri (git-reference
37736 (url "https://github.com/avakar/speg")
37737 (commit (assoc-ref properties 'commit))))
37738 (file-name (git-file-name name version))
37739 (sha256
37740 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37741 (build-system pyproject-build-system)
37742 (native-inputs
37743 (list python-pytest
37744 python-setuptools))
37745 (propagated-inputs
37746 (list python-six))
37747 (home-page "https://github.com/avakar/speg")
37748 (synopsis "PEG-based parser interpreter with memoization")
37749 (description "This package is a PEG-based parser and interpreter with
37750memoization.")
37751 (license license:expat)))
37752
37753(define-public python-spinners
37754 (package
37755 (name "python-spinners")
37756 (version "0.0.24")
37757 (source
37758 (origin
37759 (method url-fetch)
37760 (uri (pypi-uri "spinners" version))
37761 (sha256
37762 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37763 (build-system pyproject-build-system)
37764 (arguments
37765 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37766 (native-inputs
37767 (list python-setuptools))
37768 (home-page "https://github.com/manrajgrover/py-spinners")
37769 (synopsis "Python library with graphical spinners for the terminal")
37770 (description
37771 "Spinners is a Python library that contains graphical spinners that can
37772be displayed terminal.")
37773 (license license:expat)))
37774
37775(define-public python-sre-yield
37776 (package
37777 (name "python-sre-yield")
37778 (version "1.2")
37779 (source
37780 (origin
37781 (method url-fetch)
37782 (uri (pypi-uri "sre_yield" version))
37783 (sha256
37784 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37785 (build-system pyproject-build-system)
37786 (arguments
37787 (list #:test-backend #~'unittest))
37788 (native-inputs
37789 (list python-setuptools))
37790 (home-page "https://github.com/google/sre_yield")
37791 (synopsis "Expands a regular expression to its possible matches")
37792 (description
37793 "The goal of sre_yield is to efficiently generate all values that can
37794match a given regular expression, or count possible matches efficiently. It
37795uses the parsed regular expression, so you get a much more accurate result
37796than trying to just split strings.")
37797 (license license:asl2.0)))
37798
37799(define-public python-srsly
37800 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37801 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37802 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37803 (package
37804 (name "python-srsly")
37805 (version "2.5.4")
37806 (source
37807 (origin
37808 (method git-fetch)
37809 (uri (git-reference
37810 (url "https://github.com/explosion/srsly")
37811 (commit (string-append "release-v" version))))
37812 (file-name (git-file-name name version))
37813 (sha256
37814 (base32 "1w3h37d907rl2khysq70dk7b7m43hng3pisr0val0f1mp3w03cf2"))))
37815 (build-system pyproject-build-system)
37816 (arguments
37817 (list
37818 #:test-flags
37819 #~(list "--pyargs" "srsly")
37820 #:phases
37821 #~(modify-phases %standard-phases
37822 (add-before 'check 'remove-local-source
37823 (lambda _
37824 (delete-file-recursively "srsly"))))))
37825 (native-inputs
37826 (list python-cython
37827 python-mock
37828 python-numpy
37829 python-psutil
37830 python-pytest
37831 python-pytest-timeout
37832 python-setuptools))
37833 (propagated-inputs
37834 (list python-catalogue))
37835 (home-page "https://github.com/explosion/srsly")
37836 (synopsis "Serialization utilities for Python")
37837 (description "This package bundles some of the best Python serialization
37838libraries into one standalone package, with a high-level API that makes it
37839easy to write code that's correct across platforms and Pythons.")
37840 (license license:expat)))
37841
37842(define-public python-srt
37843 (package
37844 (name "python-srt")
37845 (version "3.5.3")
37846 (source
37847 (origin
37848 (method url-fetch)
37849 (uri (pypi-uri "srt" version))
37850 (sha256
37851 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37852 (build-system pyproject-build-system)
37853 (native-inputs
37854 (list python-pytest
37855 python-setuptools
37856 python-wheel))
37857 (home-page "https://github.com/cdown/srt")
37858 (synopsis "SRT parsing library")
37859 (description
37860 "This package provides a Python library for parsing, modifying, and
37861composing subtitles in the SRT file format.")
37862 (license license:expat)))
37863
37864(define-public python-sshpubkeys
37865 (package
37866 (name "python-sshpubkeys")
37867 (version "3.2.0")
37868 (source
37869 (origin
37870 (method git-fetch)
37871 (uri (git-reference
37872 (url "https://github.com/ojarva/python-sshpubkeys")
37873 (commit (string-append "v" version))))
37874 (file-name (git-file-name name version))
37875 (sha256
37876 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37877 (build-system pyproject-build-system)
37878 (arguments
37879 (list #:tests? #f)) ; XXX: All tests fail
37880 (native-inputs
37881 (list python-setuptools
37882 python-wheel))
37883 (propagated-inputs
37884 (list python-cryptography
37885 python-ecdsa))
37886 (home-page "https://github.com/ojarva/python-sshpubkeys")
37887 (synopsis "OpenSSH public key parser")
37888 (description
37889 "This package provides a library for parsing and validating OpenSSH
37890public key files.")
37891 (license license:bsd-3)))
37892
37893(define-public python-sshtunnel
37894 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37895 (revision "0"))
37896 (package
37897 (name "python-sshtunnel")
37898 (version (git-version "0.4.0" revision commit))
37899 (source
37900 (origin
37901 (method git-fetch)
37902 (uri (git-reference
37903 (url "https://github.com/pahaz/sshtunnel")
37904 (commit commit)))
37905 (file-name (git-file-name name version))
37906 (sha256
37907 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37908 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37909 (build-system pyproject-build-system)
37910 (arguments
37911 (list
37912 #:phases
37913 #~(modify-phases %standard-phases
37914 (add-after 'unpack 'remove-deprecated-dsskey
37915 (lambda _
37916 (substitute* "sshtunnel.py"
37917 (("'dsa': paramiko\\.DSSKey,")
37918 "")
37919 (("paramiko\\.DSSKey, ")
37920 "")))))))
37921 (propagated-inputs (list python-paramiko))
37922 (native-inputs
37923 (list openssh python-mock python-pytest python-setuptools))
37924 (home-page "https://github.com/pahaz/sshtunnel")
37925 (synopsis "Python SSH tunnels library")
37926 (description
37927 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37928in the background, using Python.")
37929 (license license:expat))))
37930
37931(define-public python-stack-data
37932 (package
37933 (name "python-stack-data")
37934 (version "0.6.3")
37935 (source
37936 (origin
37937 (method url-fetch)
37938 (uri (pypi-uri "stack_data" version))
37939 (sha256
37940 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37941 (build-system pyproject-build-system)
37942 (arguments
37943 (list
37944 #:test-flags
37945 #~(list "-k" (string-join
37946 ;; XXX: Tests fail with HTML diff.
37947 (list "not test_executing_style_defs"
37948 "test_pygments_example"
37949 "test_example")
37950 " and not "))
37951 #:phases
37952 #~(modify-phases %standard-phases
37953 (add-after 'unpack 'set-home-env
37954 (lambda _
37955 (setenv "HOME" "/tmp"))))))
37956 (native-inputs
37957 (list python-cython
37958 python-littleutils
37959 python-pygments
37960 python-pytest
37961 python-setuptools
37962 python-setuptools-scm
37963 python-typeguard
37964 python-wheel))
37965 (propagated-inputs
37966 (list python-asttokens
37967 python-executing
37968 python-pure-eval))
37969 (home-page "https://github.com/alexmojaki/stack_data")
37970 (synopsis "Python stack frame and traceback manipulation library")
37971 (description
37972 "The @code{stack_data} Python library extracts data from stack frames and
37973tracebacks. Is can be used to display more useful tracebacks
37974than the default.")
37975 (license license:expat)))
37976
37977;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37978;; from the standard library, <https://peps.python.org/pep-0594/>.
37979(define %python-standard-pep-594-version "3.13.0")
37980(define %python-standard-pep-594-source
37981 (origin
37982 (method git-fetch)
37983 (uri (git-reference
37984 (url "https://github.com/youknowone/python-deadlib")
37985 (commit (string-append "v" %python-standard-pep-594-version))))
37986 (file-name (git-file-name "python-standard-pep-594"
37987 %python-standard-pep-594-version))
37988 (sha256
37989 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37990
37991(define-public python-standard-asynchat
37992 (package
37993 (name "python-standard-asynchat")
37994 (version %python-standard-pep-594-version)
37995 (source %python-standard-pep-594-source)
37996 (build-system pyproject-build-system)
37997 (arguments
37998 (list
37999 #:phases
38000 #~(modify-phases %standard-phases
38001 (add-after 'unpack 'chdir
38002 (lambda _
38003 (chdir "asynchat"))))))
38004 (native-inputs
38005 (list python-setuptools))
38006 (propagated-inputs
38007 (list python-standard-asyncore))
38008 (home-page "https://github.com/youknowone/python-deadlib")
38009 (synopsis "Backport of asynchat from Python 3.11")
38010 (description
38011 "Standard library @code{asynchat} redistribution. Deprecated since
38012version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
38013@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
38014standard library}.")
38015 (license license:psfl)))
38016
38017(define-public python-standard-asyncore
38018 (package
38019 (name "python-standard-asyncore")
38020 (version %python-standard-pep-594-version)
38021 (source %python-standard-pep-594-source)
38022 (build-system pyproject-build-system)
38023 (arguments
38024 (list
38025 #:phases
38026 #~(modify-phases %standard-phases
38027 (add-after 'unpack 'chdir
38028 (lambda _
38029 (chdir "asyncore"))))))
38030 (native-inputs
38031 (list python-setuptools))
38032 (home-page "https://github.com/youknowone/python-deadlib")
38033 (synopsis "Backport of asyncore from Python 3.11")
38034 (description
38035 "Standard library @code{asyncore} redistribution. Deprecated since
38036version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
38037@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
38038standard library}.")
38039 (license license:psfl)))
38040
38041(define-public python-standard-smtpd
38042 (package
38043 (name "python-standard-smtpd")
38044 (version %python-standard-pep-594-version)
38045 (source %python-standard-pep-594-source)
38046 (build-system pyproject-build-system)
38047 (arguments
38048 (list
38049 ;; ImportError: cannot import name 'mock_socket' from 'test'
38050 #:tests? #f
38051 #:phases
38052 #~(modify-phases %standard-phases
38053 (add-after 'unpack 'chdir
38054 (lambda _
38055 (chdir "smtpd"))))))
38056 (native-inputs
38057 (list python-setuptools))
38058 (propagated-inputs
38059 (list
38060 python-standard-asynchat
38061 python-standard-asyncore))
38062 (home-page "https://github.com/youknowone/python-deadlib")
38063 (synopsis "Backport of smtpd from Python 3.11")
38064 (description
38065 "Standard library @code{smtpd} redistribution. Deprecated since version
380663.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
38067replacement for this module, based on @code{asyncio}. See:
38068@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
38069standard library}.")
38070 (license license:psfl)))
38071
38072(define-public python-stdio-mgr
38073 (package
38074 (name "python-stdio-mgr")
38075 (version "1.0.1")
38076 (source
38077 (origin
38078 (method git-fetch)
38079 (uri (git-reference
38080 (url "https://github.com/bskinn/stdio-mgr")
38081 (commit (string-append "v" version))))
38082 (file-name (git-file-name name version))
38083 (sha256
38084 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
38085 (build-system pyproject-build-system)
38086 (arguments
38087 (list
38088 ;; Do not run doctests requiring sphinx.
38089 #:test-flags #~(list "--ignore=README.rst")))
38090 (native-inputs
38091 (list python-pytest
38092 python-setuptools
38093 python-wheel))
38094 (propagated-inputs
38095 (list python-attrs))
38096 (home-page "https://github.com/bskinn/stdio-mgr")
38097 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
38098 (description
38099 "This package contains a context manager for mocking/wrapping
38100stdin/stdout/stderr.")
38101 (license license:expat)))
38102
38103;; TODO: This package is not necessary in Guix. It should be replaced by a
38104;; trivial python package providing the same functionality.
38105(define-public python-stdlib-list
38106 (package
38107 (name "python-stdlib-list")
38108 (version "0.11.1")
38109 (source
38110 (origin
38111 (method git-fetch)
38112 (uri (git-reference
38113 (url "https://github.com/jackmaney/python-stdlib-list")
38114 (commit (string-append "v" version))))
38115 (file-name (git-file-name name version))
38116 (sha256
38117 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
38118 (build-system pyproject-build-system)
38119 (native-inputs
38120 (list python-flit-core
38121 python-pytest
38122 python-sphinx))
38123 (home-page "https://github.com/jackmaney/python-stdlib-list")
38124 (synopsis "Python Standard Libraries")
38125 (description
38126 "This package contains a list of Python Standard Libraries.")
38127 (license license:expat)))
38128
38129(define-public python-stem
38130 ;; python-stem is mostly unmaintained, but still has occasional commits
38131 ;; added.
38132 (package
38133 (name "python-stem")
38134 (version "1.8.3")
38135 (source
38136 (origin
38137 (method git-fetch)
38138 (uri (git-reference
38139 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
38140 (commit version)))
38141 (file-name (git-file-name name version))
38142 (sha256
38143 (base32
38144 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
38145 (build-system pyproject-build-system)
38146 (arguments
38147 (list
38148 #:test-backend #~'custom
38149 #:test-flags #~(list "run_tests.py" "--unit")
38150 #:phases
38151 #~(modify-phases %standard-phases
38152 (add-after 'unpack 'fix-python-312
38153 (lambda _
38154 (substitute* (find-files "." "\\.py$")
38155 (("assertRaisesRegexp") "assertRaisesRegex")))))))
38156 (native-inputs
38157 (list python-setuptools
38158 python-wheel))
38159 (home-page "https://stem.torproject.org/")
38160 (synopsis
38161 "Python controller library that allows applications to interact with Tor")
38162 (description
38163 "Stem is a Python controller library for Tor. With it you can use Tor's
38164 control protocol to script against the Tor process and read descriptor data
38165 relays publish about themselves.")
38166 (license license:lgpl3)))
38167
38168(define-public python-stltools
38169 (package
38170 (name "python-stltools")
38171 (version "2022.01.20")
38172 (source
38173 (origin
38174 (method git-fetch)
38175 (uri (git-reference
38176 (url "https://github.com/rsmith-nl/stltools")
38177 (commit version)))
38178 (file-name (git-file-name name version))
38179 (sha256
38180 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
38181 (build-system pyproject-build-system)
38182 (arguments
38183 (list
38184 #:phases
38185 #~(modify-phases %standard-phases
38186 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
38187 (delete 'build)
38188 (replace 'install
38189 (lambda* (#:key inputs outputs #:allow-other-keys)
38190 (let ((moddir (string-append (site-packages inputs outputs)
38191 "/stltools"))
38192 (bindir (string-append #$output "/bin")))
38193 (copy-recursively "stltools" moddir)
38194 (mkdir-p bindir)
38195 (for-each
38196 (lambda (script)
38197 (let ((source (string-append script ".py"))
38198 (target (string-append bindir "/" script)))
38199 (copy-file source target)
38200 (chmod target #o555)))
38201 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
38202 (native-inputs
38203 (list python-pytest
38204 python-setuptools))
38205 (propagated-inputs
38206 (list python-pycairo))
38207 (home-page "https://github.com/rsmith-nl/stltools")
38208 (synopsis "Python modules and scripts for handling STL files")
38209 (description
38210 "This package consists of Python modules and scripts for manipulating
38211stereolithography (STL) files. It can convert STL files into POV-ray meshes,
38212PDF and PostScript. The Python modules allow for reading and writing STL
38213files. It supports both the text and binary forms of STL.")
38214 (license license:expat)))
38215
38216(define-public python-stone
38217 (package
38218 (name "python-stone")
38219 (version "3.3.9")
38220 (source
38221 (origin
38222 (method git-fetch)
38223 (uri (git-reference
38224 (url "https://github.com/dropbox/stone")
38225 (commit (string-append "v" version))))
38226 (file-name (git-file-name name version))
38227 (sha256
38228 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
38229 (build-system pyproject-build-system)
38230 (native-inputs
38231 (list python-pytest
38232 python-setuptools))
38233 (propagated-inputs
38234 (list python-jinja2
38235 python-packaging
38236 python-ply
38237 python-six)) ;hard requirement, still
38238 (home-page "https://github.com/dropbox/stone")
38239 (synopsis "Official Api Spec Language for Dropbox")
38240 (description
38241 "Stone is an interface description language (IDL) for APIs.")
38242 (license license:expat)))
38243
38244(define-public python-stopit
38245 (package
38246 (name "python-stopit")
38247 (version "1.1.2")
38248 (source
38249 (origin
38250 (method git-fetch)
38251 (uri (git-reference
38252 (url "https://github.com/glenfant/stopit")
38253 (commit version)))
38254 (file-name (git-file-name name version))
38255 (sha256
38256 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
38257 (build-system pyproject-build-system)
38258 (arguments
38259 (list #:test-backend #~'custom
38260 #:test-flags #~(list "tests.py")))
38261 (native-inputs (list python-setuptools))
38262 (home-page "https://pypi.python.org/pypi/stopit")
38263 (synopsis "Timeout control decorator and context managers")
38264 (description
38265 "Raise asynchronous exceptions in other threads, control the timeout of
38266blocks or callables with two context managers and two decorators.")
38267 (license license:expat)))
38268
38269(define-public python-straight-plugin
38270 (package
38271 (name "python-straight-plugin")
38272 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
38273 (revision . "0")))
38274 (version (git-version "1.4.1"
38275 (assoc-ref properties 'revision)
38276 (assoc-ref properties 'commit)))
38277 (source
38278 (origin
38279 (method git-fetch)
38280 (uri (git-reference
38281 (url "https://github.com/ironfroggy/straight.plugin")
38282 (commit (assoc-ref properties 'commit))))
38283 (file-name (git-file-name name version))
38284 (sha256
38285 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
38286 (build-system pyproject-build-system)
38287 (arguments
38288 (list
38289 ;; XXX: Some tests started failing with the move to [email protected].
38290 ;; Consider removing this leaf unmaintained package.
38291 #:tests? #f
38292 #:test-backend #~'custom
38293 #:test-flags #~(list "tests.py")
38294 #:phases
38295 #~(modify-phases %standard-phases
38296 (add-after 'unpack 'fix-python-3.12-incompatibility
38297 (lambda _
38298 (substitute* "straight/plugin/loaders.py"
38299 (("from imp import find_module")
38300 "")))))))
38301 (native-inputs (list python-mock python-setuptools))
38302 (home-page "https://github.com/ironfroggy/straight.plugin")
38303 (synopsis "Simple namespaced plugin facility")
38304 (description
38305 "Straight Plugin provides a type of plugin you can create from almost any
38306existing Python modules, and an easy way for outside developers to add
38307functionality and customization to your projects with their own plugins.")
38308 (license license:expat)))
38309
38310(define-public python-streamtracer
38311 (package
38312 (name "python-streamtracer")
38313 (version "2.4.0")
38314 (source
38315 (origin
38316 (method url-fetch)
38317 (uri (pypi-uri "streamtracer" version))
38318 (sha256
38319 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
38320 (build-system pyproject-build-system)
38321 (arguments
38322 (list
38323 #:imported-modules `(,@%cargo-build-system-modules
38324 ,@%pyproject-build-system-modules)
38325 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
38326 (guix build pyproject-build-system)
38327 (guix build utils))
38328 #:test-flags
38329 #~(list "--pyargs" "streamtracer")
38330 #:phases
38331 #~(modify-phases %standard-phases
38332 (add-after 'unpack 'prepare-cargo-build-system
38333 (lambda args
38334 (for-each (lambda (phase)
38335 (format #t "Running cargo phase: ~a~%" phase)
38336 (apply (assoc-ref cargo:%standard-phases phase)
38337 #:cargo-target #$(cargo-triplet)
38338 args))
38339 '(unpack-rust-crates
38340 configure
38341 check-for-pregenerated-files
38342 patch-cargo-checksums)))))))
38343 (native-inputs
38344 (append
38345 (list maturin
38346 python-pytest
38347 python-pytest-doctestplus
38348 rust
38349 `(,rust "cargo"))
38350 (or (and=> (%current-target-system)
38351 (compose list make-rust-sysroot))
38352 '())))
38353 (propagated-inputs
38354 (list python-numpy
38355 python-packaging))
38356 (inputs (cargo-inputs 'python-streamtracer))
38357 (home-page "https://github.com/sunpy/streamtracer")
38358 (synopsis "Rapid streamline tracing in Python")
38359 (description
38360 "streamtracer is a Python package for rapid streamline tracing on
38361regularly spaced grids. The actual streamline tracing is done at a low level
38362in Rust, with a nice Python API provided on top.")
38363 (license license:gpl3+)))
38364
38365(define-public python-strenum
38366 (package
38367 (name "python-strenum")
38368 (version "0.4.15")
38369 (source
38370 (origin
38371 (method git-fetch)
38372 (uri (git-reference
38373 (url "https://github.com/irgeek/StrEnum")
38374 (commit (string-append "v" version))))
38375 (file-name (git-file-name name version))
38376 (sha256
38377 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
38378 (snippet #~(delete-file "versioneer.py"))))
38379 (build-system pyproject-build-system)
38380 (arguments
38381 (list #:test-flags #~(list "tests")))
38382 (native-inputs
38383 (list python-pytest
38384 python-pytest-pylint
38385 python-setuptools
38386 python-versioneer))
38387 (home-page "https://github.com/irgeek/StrEnum")
38388 (synopsis "Enum that inherits from str")
38389 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38390@code{str} to complement @code{enum.IntEnum} in the standard library.")
38391 (license license:expat)))
38392
38393(define-public python-structlog
38394 (package
38395 (name "python-structlog")
38396 (version "25.5.0")
38397 (source
38398 (origin
38399 (method url-fetch)
38400 (uri (pypi-uri "structlog" version))
38401 (sha256
38402 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38403 (build-system pyproject-build-system)
38404 (native-inputs
38405 (list python-hatch-fancy-pypi-readme
38406 python-hatch-vcs
38407 python-hatchling
38408 python-pytest
38409 python-pytest-asyncio
38410 python-time-machine))
38411 (home-page "https://www.structlog.org/")
38412 (synopsis "Structured Logging for Python")
38413 (description "@code{structlog} changes logging in Python by adding structure
38414to your log entries.")
38415 (license (list license:asl2.0 license:expat))))
38416
38417(define-public python-style
38418 (package
38419 (name "python-style")
38420 (version "1.1.6")
38421 (source
38422 (origin
38423 (method url-fetch)
38424 (uri (pypi-uri "style" version))
38425 (sha256
38426 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38427 (build-system pyproject-build-system)
38428 (arguments
38429 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38430 (native-inputs
38431 (list python-setuptools))
38432 (home-page "https://github.com/lmittmann/style")
38433 (synopsis "Terminal string styling")
38434 (description
38435"@code{python-style} is a simple terminal string styling package. Its API is
38436a port of the chalk package for javascript.")
38437 (license license:expat)))
38438
38439(define-public python-svgelements
38440 (package
38441 (name "python-svgelements")
38442 (version "1.9.6")
38443 (source
38444 (origin
38445 (method git-fetch)
38446 (uri (git-reference
38447 (url "https://github.com/meerk40t/svgelements")
38448 (commit version)))
38449 (file-name (git-file-name name version))
38450 (sha256
38451 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38452 (build-system pyproject-build-system)
38453 (arguments
38454 (list
38455 #:phases
38456 #~(modify-phases %standard-phases
38457 (add-after 'unpack 'fix-python-incompatibilities
38458 (lambda _
38459 (substitute* (find-files "test" "\\.py$")
38460 (("(assert(|NotAlmost)Equal)s" all out in)
38461 out)))))))
38462 (native-inputs
38463 (list python-anyio
38464 python-pytest
38465 python-numpy
38466 python-pillow
38467 python-scipy
38468 python-setuptools))
38469 (home-page "https://github.com/meerk40t/svgelements")
38470 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38471 (description
38472 "This module does high fidelity SVG parsing and geometric rendering.
38473The goal is to successfully and correctly process SVG for use with any scripts
38474that may need or want to use SVG files as geometric data.")
38475 (license license:expat)))
38476
38477(define-public python-svgutils
38478 (package
38479 (name "python-svgutils")
38480 (version "0.3.4")
38481 (source
38482 (origin
38483 (method url-fetch)
38484 (uri (pypi-uri "svgutils" version))
38485 (sha256
38486 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38487 (build-system pyproject-build-system)
38488 (arguments
38489 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38490 (native-inputs
38491 (list python-setuptools))
38492 (propagated-inputs
38493 (list python-lxml))
38494 (home-page "https://svgutils.readthedocs.io")
38495 (synopsis "Python SVG editor")
38496 (description "This is an utility package that helps with editing and
38497concatenating SVG files. It is especially directed at scientists preparing
38498final figures for submission to journals. So far it supports arbitrary
38499placement and scaling of SVG figures and adding markers, such as labels.")
38500 (license license:expat)))
38501
38502(define-public python-svgwrite
38503 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38504 (package
38505 (name "python-svgwrite")
38506 (version "1.4.3")
38507 (source
38508 (origin
38509 (method git-fetch)
38510 (uri (git-reference
38511 (url "https://github.com/mozman/svgwrite")
38512 (commit (string-append "v" version))))
38513 (file-name (git-file-name name version))
38514 (sha256
38515 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38516 (build-system pyproject-build-system)
38517 (arguments
38518 (list
38519 ;; Disable test which wants internet.
38520 #:test-flags
38521 #~(list "-k" "not test_embed_google_web_font")))
38522 (native-inputs (list python-pytest python-setuptools))
38523 (home-page "https://github.com/mozman/svgwrite")
38524 (synopsis "Python library to create SVG drawings")
38525 (description
38526 "This package provides a Python library to create SVG drawings.")
38527 (license license:expat)))
38528
38529(define-public python-swagger-spec-validator
38530 (package
38531 (name "python-swagger-spec-validator")
38532 (version "3.0.4")
38533 (source
38534 (origin
38535 (method git-fetch)
38536 (uri (git-reference
38537 (url "https://github.com/Yelp/swagger_spec_validator")
38538 (commit (string-append "v" version))))
38539 (file-name (git-file-name name version))
38540 (sha256
38541 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38542 (build-system pyproject-build-system)
38543 (native-inputs
38544 (list python-pytest
38545 python-setuptools))
38546 (propagated-inputs
38547 (list python-importlib-resources
38548 python-jsonschema
38549 python-pyyaml
38550 python-typing-extensions))
38551 (home-page "https://github.com/Yelp/swagger_spec_validator")
38552 (synopsis "Validation of Swagger specifications")
38553 (description
38554 "@code{swagger_spec_validator} provides a library for validating Swagger
38555API specifications.")
38556 (license license:asl2.0)))
38557
38558(define-public python-syllables
38559 (package
38560 (name "python-syllables")
38561 (version "1.0.3")
38562 (source
38563 (origin
38564 (method git-fetch)
38565 (uri (git-reference
38566 (url "https://github.com/prosegrinder/python-syllables")
38567 (commit (string-append "v" version))))
38568 (file-name (git-file-name name version))
38569 (sha256
38570 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38571 (build-system pyproject-build-system)
38572 (native-inputs
38573 (list python-cmudict
38574 python-pytest
38575 python-setuptools))
38576 (home-page "https://github.com/prosegrinder/python-syllables")
38577 (synopsis "Package for estimating the number of syllables in a word")
38578 (description
38579 "This package provides a Python package for estimating the number of
38580syllables in a word.")
38581 (license license:gpl3)))
38582
38583(define-public python-sympy
38584 (package
38585 (name "python-sympy")
38586 (version "1.13.3")
38587 (source
38588 (origin
38589 (method url-fetch)
38590 (uri (pypi-uri "sympy" version))
38591 (sha256
38592 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38593 (build-system pyproject-build-system)
38594 (arguments
38595 '(#:phases
38596 (modify-phases %standard-phases
38597 (replace 'check
38598 (lambda* (#:key tests? #:allow-other-keys)
38599 (if tests?
38600 (invoke "python3" "-c"
38601 "import sympy; sympy.test(\"/core\")")))))))
38602 (propagated-inputs (list python-mpmath))
38603 (native-inputs
38604 (list python-hypothesis
38605 python-pytest
38606 python-setuptools
38607 python-wheel))
38608 (home-page "https://www.sympy.org/")
38609 (synopsis "Python library for symbolic mathematics")
38610 (description
38611 "SymPy is a Python library for symbolic mathematics. It aims to become a
38612full-featured computer algebra system (CAS) while keeping the code as simple
38613as possible in order to be comprehensible and easily extensible.")
38614 (license license:bsd-3)))
38615
38616(define-public python-tables
38617 (package
38618 (name "python-tables")
38619 (version "3.11.1")
38620 (source
38621 (origin
38622 (method git-fetch)
38623 (uri (git-reference
38624 (url "https://github.com/PyTables/PyTables")
38625 (commit (string-append "v" version))))
38626 (file-name (git-file-name name version))
38627 (sha256
38628 (base32 "03ifagvxzvgfdpjw508l1lq1j3ki9nbhxkls4zf1bchfdprv89fv"))
38629 (snippet '(begin
38630 (use-modules (guix build utils))
38631 (delete-file-recursively "hdf5-blosc")
38632 (delete-file-recursively "c-blosc")))))
38633 (build-system pyproject-build-system)
38634 (arguments
38635 (list
38636 #:test-flags
38637 ;; Performing only a light (yet comprehensive) subset of the test suite.
38638 ;; If you want a more complete test, try passing the --heavy flag to
38639 ;; this script (or set the 'heavy' parameter in case you are using
38640 ;; tables.test() call). The whole suite will take more than 4 hours to
38641 ;; complete on a relatively modern CPU and around 512 MB of main memory.
38642 #~(list "--pyargs" "tables.tests.test_all")
38643 #:phases
38644 #~(modify-phases %standard-phases
38645 (add-after 'unpack 'disable-tuning
38646 (lambda _
38647 (substitute* "setup.py"
38648 (("cpu_flags = .*")
38649 "cpu_flags = ['sse2']\n"))))
38650 (add-after 'unpack 'fix-reference-to-blosc2
38651 (lambda* (#:key inputs #:allow-other-keys)
38652 (substitute* "tables/__init__.py"
38653 (("\"\",") ;default
38654 (string-append "'"
38655 (dirname
38656 (search-input-file inputs "/lib/libblosc2.so"))
38657 "',\n")))))
38658 (add-before 'build 'pre-build
38659 (lambda _
38660 (substitute* "setup.py"
38661 (("hdf5-blosc/src")
38662 (format #f "~a/src"
38663 #$(package-source
38664 (this-package-input "hdf5-blosc-parallel-openmpi")))))
38665 (invoke "make" "distclean") ;Regenerate C code with Cython
38666 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38667 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38668 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38669 (setenv "HDF5_DIR" #$(this-package-input "hdf5-parallel-openmpi"))
38670 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38671 (add-before 'check 'pre-check
38672 (lambda _
38673 (setenv "HOME" "/tmp"))))))
38674 (native-inputs
38675 (list pkg-config
38676 python-cython
38677 python-pytest
38678 python-setuptools
38679 python-sphinx))
38680 (inputs
38681 (list bzip2
38682 c-blosc
38683 c-blosc2
38684 hdf5-parallel-openmpi
38685 hdf5-blosc-parallel-openmpi
38686 lzo))
38687 (propagated-inputs
38688 (list python-blosc2
38689 python-numexpr
38690 python-numpy
38691 python-packaging
38692 python-py-cpuinfo
38693 python-typing-extensions))
38694 (home-page "https://www.pytables.org/")
38695 (synopsis "Hierarchical datasets for Python")
38696 (description "PyTables is a package for managing hierarchical datasets and
38697designed to efficiently cope with extremely large amounts of data.")
38698 (license license:bsd-3)))
38699
38700(define-public python-tablib
38701 (package
38702 (name "python-tablib")
38703 (version "3.9.0")
38704 (source
38705 (origin
38706 (method url-fetch)
38707 (uri (pypi-uri "tablib" version))
38708 (sha256
38709 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38710 (build-system pyproject-build-system)
38711 (native-inputs
38712 (list python-pytest python-setuptools python-setuptools-scm))
38713 (inputs ;; [cli]
38714 (list python-tabulate))
38715 (propagated-inputs
38716 (list python-markuppy
38717 python-odfpy
38718 python-openpyxl
38719 python-pyyaml
38720 python-xlrd
38721 python-xlwt))
38722 (home-page "https://tablib.readthedocs.io")
38723 (synopsis "Format agnostic tabular data library")
38724 (description
38725 "@code{tablib} is a format-agnostic tabular dataset library,
38726written in Python. Supported output formats are Excel (Sets + Books),
38727JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38728TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38729
38730@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38731quite huge, this Guix package doesn't depend on pandas. In case, just also
38732install @code{python-pandas}.")
38733 (license license:expat)))
38734
38735(define-public python-tabulate
38736 (package
38737 (name "python-tabulate")
38738 (version "0.9.0")
38739 (source
38740 (origin
38741 (method url-fetch)
38742 (uri (pypi-uri "tabulate" version))
38743 (sha256
38744 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38745 (build-system pyproject-build-system)
38746 (native-inputs
38747 (list python-pytest
38748 python-setuptools-scm
38749 python-setuptools))
38750 (propagated-inputs
38751 (list python-wcwidth))
38752 (home-page "https://github.com/astanin/python-tabulate")
38753 (synopsis "Pretty-print tabular data")
38754 (description
38755 "Tabulate is a library and command-line utility to pretty-print tabular
38756data in Python.")
38757 (license license:expat)))
38758
38759(define-public python-takethetime
38760 (package
38761 (name "python-takethetime")
38762 (version "0.3.1")
38763 (source
38764 (origin
38765 (method url-fetch)
38766 (uri (pypi-uri "TakeTheTime" version))
38767 (sha256
38768 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38769 (build-system pyproject-build-system)
38770 (arguments
38771 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38772 (native-inputs
38773 (list python-setuptools
38774 python-wheel))
38775 (home-page "https://github.com/ErikBjare/TakeTheTime")
38776 (synopsis "Timing chunks of code")
38777 (description
38778 "This package implements a functionality for time taking using context
38779managers.")
38780 (license license:expat)))
38781
38782(define-public python-targ
38783 (package
38784 (name "python-targ")
38785 (version "0.6.0")
38786 (source
38787 (origin
38788 (method git-fetch)
38789 (uri (git-reference
38790 (url "https://github.com/piccolo-orm/targ/")
38791 (commit version)))
38792 (file-name (git-file-name name version))
38793 (sha256
38794 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38795 (build-system pyproject-build-system)
38796 (native-inputs
38797 (list python-pytest
38798 python-setuptools))
38799 (propagated-inputs
38800 (list python-colorama
38801 python-docstring-parser))
38802 (home-page "https://github.com/piccolo-orm/targ/")
38803 (synopsis "Python CLI builder using type hints and docstrings")
38804 (description
38805 "Targ is a package to build a Python @acronym{Command Line Interface,
38806CLI} for applications by using type hints and docstrings.")
38807 (license license:expat)))
38808
38809(define-public python-tasklib
38810 (package
38811 (name "python-tasklib")
38812 (version "2.5.1")
38813 (source
38814 (origin
38815 (method git-fetch)
38816 (uri (git-reference
38817 (url "https://github.com/GothenburgBitFactory/tasklib")
38818 (commit version)))
38819 (file-name (git-file-name name version))
38820 (sha256
38821 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38822 (build-system pyproject-build-system)
38823 (arguments
38824 (list
38825 #:test-backend
38826 #~'unittest))
38827 (inputs (list taskwarrior))
38828 (native-inputs (list python-setuptools tzdata-for-tests))
38829 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38830 (synopsis "Official Taskwarrior library for Python")
38831 (description "@code{tasklib} is a Python library for interacting with
38832Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38833 (license license:bsd-3)))
38834
38835(define-public python-tasklogger
38836 (package
38837 (name "python-tasklogger")
38838 (version "1.2.0")
38839 (source
38840 (origin
38841 (method url-fetch)
38842 (uri (pypi-uri "tasklogger" version))
38843 (sha256
38844 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38845 (build-system pyproject-build-system)
38846 (native-inputs
38847 (list python-pytest
38848 python-numpy
38849 python-setuptools))
38850 (propagated-inputs
38851 (list python-deprecated))
38852 (home-page "https://github.com/scottgigante/tasklogger")
38853 (synopsis "Extension to the core Python logging library")
38854 (description "This package provides an extension to the core Python
38855logging library for logging the beginning and completion of tasks and
38856subtasks.")
38857 (license license:gpl2)))
38858
38859(define-public python-tatsu
38860 (package
38861 (name "python-tatsu")
38862 (version "5.13.2")
38863 (source
38864 (origin
38865 (method git-fetch)
38866 (uri (git-reference
38867 (url "https://github.com/neogeny/TatSu")
38868 (commit (string-append "v" version))))
38869 (file-name (git-file-name name version))
38870 (sha256
38871 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38872 (build-system pyproject-build-system)
38873 (native-inputs
38874 (list python-pytest
38875 python-setuptools))
38876 (home-page "https://tatsu.readthedocs.io/en/stable/")
38877 (synopsis "PEG/Packrat Parser generator for Python")
38878 (description
38879 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38880Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38881or Packrat parser in Python.")
38882 (license license:bsd-2)))
38883
38884(define-public python-tblib
38885 (package
38886 (name "python-tblib")
38887 (version "3.1.0")
38888 (source
38889 (origin
38890 (method url-fetch)
38891 (uri (pypi-uri "tblib" version))
38892 (sha256
38893 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38894 (build-system pyproject-build-system)
38895 (arguments
38896 (list
38897 ;; Don't run benchmark tests.
38898 #:test-flags #~(list "--ignore=tests/test_perf.py")
38899 #:phases
38900 #~(modify-phases %standard-phases
38901 (add-after 'unpack 'fix-pytest-config
38902 (lambda _
38903 (substitute* "pytest.ini"
38904 (("--benchmark-disable") "")))))))
38905 (native-inputs
38906 (list python-pytest
38907 python-setuptools))
38908 (home-page "https://github.com/ionelmc/python-tblib")
38909 (synopsis "Traceback serialization library")
38910 (description
38911 "Traceback serialization allows you to:
38912
38913@enumerate
38914@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38915different processes. This allows better error handling when running code over
38916multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38917
38918@item Parse traceback strings and raise with the parsed tracebacks.
38919@end enumerate\n")
38920 (license license:bsd-3)))
38921
38922(define-public python-tcolorpy
38923 (package
38924 (name "python-tcolorpy")
38925 (version "0.1.7")
38926 (source
38927 (origin
38928 (method git-fetch)
38929 (uri (git-reference
38930 (url "https://github.com/thombashi/tcolorpy")
38931 (commit (string-append "v" version))))
38932 (file-name (git-file-name name version))
38933 (sha256
38934 (base32 "18cck1s0w9i5llaaw9s37g61dqg3vpjjgd3ywc72n1i02k0yj1fh"))))
38935 (build-system pyproject-build-system)
38936 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
38937 (home-page "https://github.com/thombashi/tcolorpy")
38938 (synopsis "Apply true color for terminal text")
38939 (description
38940 "@code{tcolorpy} is a Python library to apply true color for terminal
38941text.
38942You can set the following @code{tcolor} arguments:
38943
38944@itemize
38945@item color
38946@item bgcolor
38947@item styles
38948@end itemize")
38949 (license license:expat)))
38950
38951(define-public python-tdir
38952 (package
38953 (name "python-tdir")
38954 (version "1.10.0")
38955 (source
38956 (origin
38957 (method git-fetch)
38958 (uri (git-reference
38959 (url "https://github.com/rec/tdir")
38960 (commit (string-append "v" version))))
38961 (file-name (git-file-name name version))
38962 (sha256
38963 (base32 "10kl0w40n53ynhxlvkv56gywswnrb2drmrw972k0p66sihlw9y2p"))))
38964 (build-system pyproject-build-system)
38965 (native-inputs (list python-hatchling python-pytest))
38966 (propagated-inputs (list python-dek python-xmod))
38967 (home-page "https://rec.github.io/tdir/")
38968 (synopsis "Create, fill a temporary directory")
38969 (description
38970 "This is Python helper module to run code inside a temporary directory
38971filled with zero or more files. @code{tdir()} runs code in a temporary
38972directory pre-filled with files: it can either be used as a context manager,
38973or a decorator for functions or classes. @code{tdir.fill()} is a tiny
38974function that recursively fills a directory.")
38975 (license license:expat)))
38976
38977(define-public python-telethon
38978 (package
38979 (name "python-telethon")
38980 (version "1.44.0")
38981 (source
38982 (origin
38983 (method git-fetch)
38984 (uri (git-reference
38985 (url "https://codeberg.org/Lonami/Telethon")
38986 (commit (string-append "v" version))))
38987 (file-name (git-file-name name version))
38988 (sha256
38989 (base32 "1y1bzna7gqs6ck4jmh2spm7s8frw0qs6p52v9ar6qbbk1h7yacip"))))
38990 (build-system pyproject-build-system)
38991 (arguments
38992 (list
38993 #:phases
38994 #~(modify-phases %standard-phases
38995 (add-after 'build 'generate-tl-code
38996 (lambda _
38997 ;; The custom hatchling build hook (hatch_build.py) generates
38998 ;; telethon/tl/{types,functions}.py only inside hatchling's
38999 ;; isolated build directory, but deletes them again.
39000 ;; Regenerate the same code here too for tests; see
39001 ;; readthedocs/developing/project-structure.rst.
39002 (invoke "python3" "setup.py" "gen"))))))
39003 (native-inputs
39004 (list python-hatchling
39005 python-pytest
39006 python-pytest-asyncio
39007 python-pytest-trio
39008 python-setuptools))
39009 (propagated-inputs
39010 (list python-rsa python-pyaes))
39011 (home-page "https://docs.telethon.dev")
39012 (synopsis "Full-featured Telegram client library for Python 3")
39013 (description "This library is designed to make it easy to write Python
39014programs that can interact with Telegram.")
39015 (license license:expat)))
39016
39017(define-public python-tempora
39018 (package
39019 (name "python-tempora")
39020 (version "5.8.1")
39021 (source
39022 (origin
39023 (method url-fetch)
39024 (uri (pypi-uri "tempora" version))
39025 (sha256
39026 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
39027 (build-system pyproject-build-system)
39028 (arguments
39029 (list
39030 ;; Do not test the myproject.toml build as it tries to pull dependencies
39031 ;; from the Internet.
39032 #:test-flags #~(list "-k" "not project"
39033 "tests")))
39034 (native-inputs
39035 (list python-freezegun
39036 python-pytest
39037 python-setuptools
39038 python-setuptools-scm
39039 python-tzdata))
39040 (propagated-inputs (list python-dateutil python-jaraco-functools))
39041 (home-page "https://github.com/jaraco/tempora")
39042 (synopsis "Python date and time objects and routines")
39043 (description
39044 "The @code{tempora} Python library contains miscellaneous date and time
39045related utilities and constants, routines for measuring, profiling, and
39046getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
39047well as an event scheduler.")
39048 (license license:expat)))
39049
39050(define-public python-tenacity
39051 (package
39052 (name "python-tenacity")
39053 (version "9.1.4")
39054 (source
39055 (origin
39056 (method url-fetch)
39057 (uri (pypi-uri "tenacity" version))
39058 (sha256
39059 (base32 "0fprkhbrh26zm9jxpwmcz5vpr989hd4kpcqs110x0arz4r61vcxd"))))
39060 (build-system pyproject-build-system)
39061 (native-inputs
39062 (list python-pytest
39063 python-setuptools
39064 python-setuptools-scm
39065 python-tornado
39066 python-typeguard))
39067 (home-page "https://github.com/jd/tenacity")
39068 (synopsis "Retrying library for python")
39069 (description
39070 "Tenacity is a general-purpose python library to simplify the task of
39071adding retry behavior to just about anything.")
39072 (license license:asl2.0)))
39073
39074(define-public python-term-background
39075 (package
39076 (name "python-term-background")
39077 (version "1.0.5")
39078 (source
39079 (origin
39080 (method url-fetch)
39081 (uri (pypi-uri "term_background" version))
39082 (sha256
39083 (base32 "1gcr4aidgsl9kv2m0jw01svcbi3zlx18m2fpdh3yacvapzgjir2h"))))
39084 (build-system pyproject-build-system)
39085 (native-inputs
39086 (list python-pytest
39087 python-setuptools
39088 python-setuptools-scm))
39089 (home-page "http://github.com/rocky/shell-term-background")
39090 (synopsis "Determine if shell has a light or dark background")
39091 (description "This package determines if shell has a light or dark
39092background.")
39093 (license license:gpl2+)))
39094
39095(define-public python-term-image
39096 (package
39097 (name "python-term-image")
39098 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
39099 (revision . "0")))
39100 (version (git-version "0.7.2"
39101 (assoc-ref properties 'revision)
39102 (assoc-ref properties 'commit)))
39103 (source
39104 (origin
39105 (method git-fetch)
39106 (uri (git-reference
39107 (url "https://github.com/AnonymouX47/term-image")
39108 (commit (assoc-ref properties 'commit))))
39109 (file-name (git-file-name name version))
39110 (sha256
39111 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
39112 (build-system pyproject-build-system)
39113 (arguments
39114 (list
39115 #:test-flags
39116 #~(list "tests"
39117 ;; These tests require network access.
39118 "-k" (string-append "not test_from_url"
39119 " and not test_source"
39120 " and not test_close"))
39121 #:phases
39122 #~(modify-phases %standard-phases
39123 (add-after 'unpack 'bump-pillow-requirement
39124 (lambda _
39125 (substitute* "src/term_image/image/common.py"
39126 (("\\.getdata")
39127 ".get_flattened_data"))
39128 (let* ((major #$(version-major
39129 (package-version
39130 (this-package-input "python-pillow"))))
39131 (next (number->string (+ 1 (string->number major)))))
39132 (substitute* "pyproject.toml"
39133 (("pillow>=9.1,<12")
39134 (string-append "pillow>=9.1,<" next)))))))))
39135 (propagated-inputs (list python-pillow python-requests))
39136 (native-inputs
39137 (list python-pytest
39138 python-setuptools
39139 python-urwid))
39140 (home-page "https://github.com/AnonymouX47/term-image")
39141 (synopsis "Display images in the terminal")
39142 (description "term-image is a library and program to display images on
39143compatible terminals.
39144
39145Features:
39146@enumerate
39147@item Multiple image formats (basically all formats supported by
39148@code{PIL.Image.open()})
39149@item Multiple image source types: PIL image instance, local file, URL
39150@item Multiple image render styles (with automatic support detection)
39151@item Support for multiple terminal graphics protocols, including Kitty
39152@item Transparency support (with multiple options)
39153@item Animated image support (including transparent ones)
39154@item Integration into various TUI / terminal-based output libraries
39155@item Terminal size awareness
39156@item Automatic and manual image sizing
39157@item Horizontal and vertical alignment
39158@item Automatic and manual font ratio adjustment (to preserve image aspect
39159ratio)
39160@end enumerate")
39161 (license license:expat)))
39162
39163(define-public python-termcolor
39164 (package
39165 (name "python-termcolor")
39166 (version "2.5.0")
39167 (source
39168 (origin
39169 (method url-fetch)
39170 (uri (pypi-uri "termcolor" version))
39171 (sha256
39172 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
39173 (build-system pyproject-build-system)
39174 (arguments
39175 (list
39176 #:phases
39177 #~(modify-phases %standard-phases
39178 (add-after 'unpack 'relax-coverage-requirements
39179 (lambda _
39180 (substitute* "pyproject.toml"
39181 ((".*coverage.*") "")))))))
39182 (native-inputs
39183 (list python-hatch-vcs python-hatchling python-pytest))
39184 (home-page "https://pypi.org/project/termcolor/")
39185 (synopsis "ANSII Color formatting for terminal output")
39186 (description
39187 "This package provides ANSII Color formatting for output in terminals.")
39188 (license license:expat)))
39189
39190(define-public python-termcolor-1
39191 (package
39192 (inherit python-termcolor)
39193 (version "1.1.0")
39194 (source
39195 (origin
39196 (method url-fetch)
39197 (uri (pypi-uri "termcolor" version))
39198 (sha256
39199 (base32
39200 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
39201 ;; There are no tests
39202 (arguments (list #:tests? #false))
39203 (native-inputs
39204 (list python-setuptools
39205 python-wheel))))
39206
39207(define-public python-termcolor-next
39208 (package
39209 (inherit python-termcolor)
39210 (name "python-termcolor-next")
39211 (version "3.1.0")
39212 (source
39213 (origin
39214 (method url-fetch)
39215 (uri (pypi-uri "termcolor" version))
39216 (sha256
39217 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
39218 (arguments '())))
39219
39220(define-public python-terminaltables
39221 (package
39222 (name "python-terminaltables")
39223 (version "3.1.0")
39224 (source
39225 (origin
39226 (method git-fetch)
39227 (uri (git-reference
39228 (url "https://github.com/Robpol86/terminaltables")
39229 (commit (string-append "v" version))))
39230 (file-name (git-file-name name version))
39231 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
39232 (build-system pyproject-build-system)
39233 ;; XXX: A lot of test fail with flaky behavior.
39234 (arguments (list #:tests? #f))
39235 (native-inputs
39236 (list python-colorclass
39237 python-colorama
39238 python-pytest
39239 python-setuptools
39240 python-termcolor))
39241 (home-page "https://github.com/Robpol86/terminaltables")
39242 (synopsis
39243 "Generate simple tables in terminals from a nested list of strings")
39244 (description
39245 "This package makes it easy to draw tables in terminal/console
39246applications from a list of lists of strings. It supports multi-line rows.")
39247 (license license:expat)))
39248
39249(define-public python-termstyle
39250 (package
39251 (name "python-termstyle")
39252 (version "0.1.11")
39253 (source
39254 (origin
39255 (method url-fetch)
39256 (uri (pypi-uri "termstyle" version))
39257 (sha256
39258 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
39259 (build-system pyproject-build-system)
39260 (arguments
39261 (list #:test-backend #~'custom
39262 #:test-flags #~(list "test3.py")))
39263 (native-inputs
39264 (list python-setuptools))
39265 (home-page "https://github.com/gfxmonk/termstyle")
39266 (synopsis "Console text coloring for Python")
39267 (description "This package provides console text coloring for Python.")
39268 (license license:bsd-3)))
39269
39270(define-public python-text-unidecode
39271 (package
39272 (name "python-text-unidecode")
39273 (version "1.3")
39274 (source
39275 (origin
39276 (method url-fetch)
39277 (uri (pypi-uri "text-unidecode" version))
39278 (sha256
39279 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
39280 (build-system pyproject-build-system)
39281 (native-inputs
39282 (list python-pytest
39283 python-setuptools))
39284 (home-page "https://github.com/kmike/text-unidecode/")
39285 (synopsis "Decode Unicode data")
39286 (description
39287 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
39288Perl library. It can create ASCII representations of Unicode data. In general
39289users should prefer the @code{python-unidecode} package which offers better
39290memory usage and transliteration quality.")
39291 ;; The user can choose either license.
39292 (license (list license:clarified-artistic license:gpl2+))))
39293
39294(define-public python-textdistance
39295 (package
39296 (name "python-textdistance")
39297 (version "4.6.3")
39298 (source
39299 (origin
39300 (method git-fetch)
39301 (uri (git-reference
39302 (url "https://github.com/life4/textdistance")
39303 (commit version)))
39304 (file-name (git-file-name name version))
39305 (sha256
39306 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
39307 (build-system pyproject-build-system)
39308 ;; tests: 430 passed, 1446 warnings
39309 (native-inputs
39310 (list python-numpy
39311 python-pytest
39312 python-setuptools))
39313 (propagated-inputs
39314 (list python-jellyfish
39315 python-distance
39316 python-levenshtein
39317 python-pylev
39318 python-pyxdameraulevenshtein
39319 python-rapidfuzz))
39320 (home-page "https://github.com/life4/textdistance")
39321 (synopsis "Compute distance between the two texts")
39322 (description "@code{textdistance} is a pure Python library for comparing
39323distance between two or more sequences by many algorithms.")
39324 (license license:expat)))
39325
39326(define-public python-textparser
39327 (package
39328 (name "python-textparser")
39329 (version "0.24.0")
39330 (source
39331 (origin
39332 (method url-fetch)
39333 (uri (pypi-uri "textparser" version))
39334 (sha256
39335 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
39336 (build-system pyproject-build-system)
39337 (arguments
39338 (list #:test-backend #~'unittest))
39339 (native-inputs (list python-setuptools))
39340 (home-page "https://github.com/eerimoq/textparser")
39341 (synopsis "Fast text parser for Python")
39342 (description "This library provides a text parser written in the Python
39343language. It aims to be fast.")
39344 (license license:expat)))
39345
39346(define-public python-texttable
39347 (package
39348 (name "python-texttable")
39349 (version "1.7.0")
39350 (source
39351 (origin
39352 (method git-fetch)
39353 (uri (git-reference
39354 (url "https://github.com/foutaise/texttable/")
39355 (commit (string-append "v" version))))
39356 (file-name (git-file-name name version))
39357 (sha256
39358 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
39359 (build-system pyproject-build-system)
39360 (arguments (list #:test-flags #~(list "tests.py")))
39361 (native-inputs (list python-pytest python-setuptools))
39362 (home-page "https://github.com/foutaise/texttable/")
39363 (synopsis "Create simple ASCII tables in Python")
39364 (description
39365 "This package provides a Python module for creating simple ASCII
39366tables.")
39367 (license license:expat)))
39368
39369(define-public python-textual
39370 (package
39371 (name "python-textual")
39372 (version "7.4.0")
39373 (source
39374 (origin
39375 (method git-fetch)
39376 (uri (git-reference
39377 (url "https://github.com/Textualize/textual")
39378 (commit (string-append "v" version))))
39379 (file-name (git-file-name name version))
39380 (sha256
39381 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
39382 (build-system pyproject-build-system)
39383 (arguments
39384 (list
39385 #:test-flags
39386 ;; Snapshot tests require python-pytest-textual-snapshot which
39387 ;; in turn depends on python-textual.
39388 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
39389 "-k" (string-append
39390 ;; Broken for unknown reason.
39391 "not test_textual_env_var"
39392 ;; Tests that require python-treesitter-languages.
39393 " and not test_widget_construct"
39394 " and not test_setting_builtin_language_via_constructor"
39395 " and not test_setting_builtin_language_via_attribute"
39396 " and not test_setting_language_to_none"
39397 " and not test_setting_unknown_language"
39398 " and not test_register_language"
39399 " and not test_update_highlight_query"
39400 " and not test_default_theme"
39401 " and not test_setting_builtin_themes"
39402 " and not test_setting_unknown_theme_raises_exception"
39403 " and not test_registering_and_setting_theme"
39404 " and not test_progress_bar_width_1fr"))
39405 #:phases
39406 #~(modify-phases %standard-phases
39407 (add-after 'unpack 'relax-requirements
39408 (lambda _
39409 (substitute* "pyproject.toml"
39410 (("pygments =.*")
39411 "pygments = \"*\"\n")))))))
39412 (propagated-inputs
39413 (list python-markdown-it-py
39414 python-mdit-py-plugins
39415 python-platformdirs
39416 python-rich
39417 python-tree-sitter
39418 ;; python-tree-sitter-languages ; optional, not packed yet
39419 python-typing-extensions))
39420 (native-inputs
39421 (list python-poetry-core
39422 python-pytest
39423 python-pytest-asyncio
39424 python-pytest-xdist))
39425 (home-page "https://github.com/Textualize/textual")
39426 (synopsis "Build text user interfaces in Python")
39427 (description "Textual is a @acronym{TUI, Text User Interface} framework
39428for Python inspired by modern web development.")
39429 (license license:expat)))
39430
39431(define-public python-tftpy
39432 (package
39433 (name "python-tftpy")
39434 (version "0.8.6")
39435 (source
39436 (origin
39437 (method git-fetch)
39438 (uri (git-reference
39439 (url "https://github.com/msoulier/tftpy")
39440 (commit version)))
39441 (file-name (git-file-name name version))
39442 (sha256
39443 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39444 (build-system pyproject-build-system)
39445 (arguments
39446 (list
39447 #:test-backend #~'unittest
39448 #:test-flags #~(list "tests/test.py")
39449 #:phases
39450 #~(modify-phases %standard-phases
39451 (add-before 'check 'configure-tests
39452 (lambda* (#:key tests? #:allow-other-keys)
39453 (when tests?
39454 ;; The default DEBUG logging level is way too verbose.
39455 (substitute* "tests/test.py"
39456 (("logging\\.DEBUG")
39457 "logging.INFO"))))))))
39458 (native-inputs (list python-setuptools))
39459 (home-page "https://tftpy.sourceforge.net/")
39460 (synopsis "Python trivial file transfer protocol (TFTP) library")
39461 (description
39462 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39463be used to act both as a TFTP client or TFTP server.")
39464 (license license:expat)))
39465
39466(define-public python-thefuzz
39467 (package
39468 (name "python-thefuzz")
39469 (version "0.22.1")
39470 (source
39471 (origin
39472 (method git-fetch)
39473 (uri (git-reference
39474 (url "https://github.com/seatgeek/thefuzz")
39475 (commit version)))
39476 (file-name (git-file-name name version))
39477 (sha256
39478 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39479 (build-system pyproject-build-system)
39480 (arguments
39481 (list #:test-flags #~'("-k" "not TestCodeFormat")
39482 #:phases #~(modify-phases %standard-phases
39483 ;; pycodestyle is only used in TestCodeFormat.
39484 (add-after 'unpack 'unrequire-pycodestyle
39485 (lambda _
39486 (substitute* "test_thefuzz.py"
39487 (("import pycodestyle.*") "")))))))
39488 (propagated-inputs (list python-rapidfuzz))
39489 (native-inputs (list python-hypothesis
39490 python-pytest
39491 python-setuptools))
39492 (home-page "https://github.com/seatgeek/thefuzz")
39493 (synopsis "Fuzzy string matching in Python")
39494 (description
39495 "This Python package implements fuzzing string matching
39496using Levenshtein distance.")
39497 (license license:expat)))
39498
39499(define-public python-thumbhash
39500 (let ((commit "3ef0480cc1a3a8230b54ebc4873b1007fcfcc329")
39501 (revision "0"))
39502 (package
39503 (name "python-thumbhash")
39504 (version (git-version "0.1.2" revision commit))
39505 (source
39506 (origin
39507 (method git-fetch)
39508 (uri (git-reference
39509 (url "https://github.com/justinforlenza/thumbhash-py")
39510 (commit commit)))
39511 (file-name (git-file-name name version))
39512 (sha256
39513 (base32 "0nb3v6437gdaf4wrinzmkdjsvrlzihp3pyan05vnd97zsz41zs0z"))))
39514 (arguments (list #:tests? #f))
39515 (build-system pyproject-build-system)
39516 (native-inputs (list python-hatchling))
39517 (home-page "https://github.com/justinforlenza/thumbhash-py")
39518 (synopsis "Compact representation of an image placeholder")
39519 (description
39520 "This is a Python port of the
39521@url{https://github.com/evanw/thumbhash,thumbhash} encoder by
39522@url{https://github.com/evanw,Evan Wallace}.")
39523 (license license:expat))))
39524
39525(define-public python-three-merge
39526 (package
39527 (name "python-three-merge")
39528 (version "0.1.1")
39529 (source
39530 (origin
39531 ;; There are no tests in the PyPI tarball.
39532 (method git-fetch)
39533 (uri (git-reference
39534 (url "https://github.com/spyder-ide/three-merge")
39535 (commit (string-append "v" version))))
39536 (file-name (git-file-name name version))
39537 (sha256
39538 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39539 (build-system pyproject-build-system)
39540 (propagated-inputs
39541 (list python-diff-match-patch))
39542 (native-inputs
39543 (list python-pytest python-setuptools python-wheel))
39544 (home-page "https://github.com/spyder-ide/three-merge")
39545 (synopsis "Library for merging two strings with respect to a base one")
39546 (description
39547 "This package provides a Python library to perform a 3-way merge between
39548strings, based on @code{diff-match-patch}. This library performs merges at a
39549character level, as opposed to most VCS systems, which opt for a line-based
39550approach.")
39551 (license license:expat)))
39552
39553(define-public python-throttler
39554 (package
39555 (name "python-throttler")
39556 (version "1.2.3")
39557 (source
39558 (origin
39559 (method git-fetch)
39560 (uri (git-reference
39561 (url "https://github.com/uburuntu/throttler")
39562 (commit (string-append "v" version))))
39563 (file-name (git-file-name name version))
39564 (sha256
39565 (base32 "1k0a3hxih2qk3fxljcwbbpa723bshrvcqgz2lxgll32g1lfa3hnd"))))
39566 (build-system pyproject-build-system)
39567 (native-inputs
39568 (list python-aiohttp
39569 python-pytest
39570 python-pytest-asyncio
39571 python-setuptools))
39572 (home-page "https://github.com/uburuntu/throttler")
39573 (synopsis "Throttling with asyncio support")
39574 (description
39575 "This is a Python package for easy throttling with asyncio support.")
39576 (license license:expat)))
39577
39578(define-public python-tifffile
39579 (package
39580 (name "python-tifffile")
39581 (version "2025.10.4")
39582 (source
39583 (origin
39584 (method url-fetch)
39585 (uri (pypi-uri "tifffile" version))
39586 (sha256
39587 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39588 (build-system pyproject-build-system)
39589 ;; Tests require lfdfiles, which depends on tifffile
39590 (arguments (list #:tests? #f))
39591 (propagated-inputs
39592 (list python-numpy))
39593 (native-inputs
39594 (list python-setuptools))
39595 (home-page "https://www.lfd.uci.edu/~gohlke/")
39596 (synopsis "Read and write TIFF(r) files")
39597 (description
39598 "This package lets you read image and metadata from many bio-scientific
39599formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39600MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39601to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39602 (license license:bsd-3)))
39603
39604(define-public python-tiktoken
39605 (package
39606 (name "python-tiktoken")
39607 (version "0.9.0")
39608 (source
39609 (origin
39610 (method url-fetch)
39611 (uri (pypi-uri "tiktoken" version))
39612 (sha256
39613 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39614 (build-system cargo-build-system)
39615 (arguments
39616 (list
39617 #:install-source? #false
39618 #:imported-modules
39619 (append %pyproject-build-system-modules
39620 %cargo-build-system-modules)
39621 #:modules
39622 '((guix build cargo-build-system)
39623 ((guix build pyproject-build-system) #:prefix py:)
39624 (guix build utils))
39625 #:phases
39626 #~(modify-phases %standard-phases
39627 (replace 'build
39628 (assoc-ref py:%standard-phases 'build))
39629 (add-after 'install 'wrap
39630 (lambda _
39631 ;; Collection of python- and pyproject-build-system phases
39632 ;; between 'install and 'check.
39633 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39634 (assoc-ref py:%standard-phases 'add-install-to-path)
39635 (assoc-ref py:%standard-phases 'wrap)
39636 (assoc-ref py:%standard-phases 'create-entrypoints)
39637 (assoc-ref py:%standard-phases 'compile-bytecode)))
39638 (replace 'install
39639 (assoc-ref py:%standard-phases 'install)))))
39640 (propagated-inputs (list python-regex python-requests))
39641 (inputs (cargo-inputs 'python-tiktoken))
39642 (native-inputs
39643 (list python-setuptools
39644 python-setuptools-rust
39645 python-wheel
39646 python-wrapper))
39647 (home-page "https://github.com/openai/tiktoken/")
39648 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39649 (description
39650 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39651@code{OpenAI's} models.")
39652 (license license:expat)))
39653
39654(define-public python-timed-threads
39655 (package
39656 (name "python-timed-threads")
39657 (version "2.0.0")
39658 (source
39659 (origin
39660 (method git-fetch)
39661 (uri (git-reference
39662 (url "https://github.com/Mathics3/python-timed-threads/")
39663 (commit version)))
39664 (file-name (git-file-name name version))
39665 (sha256
39666 (base32 "062lml0dg13pi7b871q8fql5rff7g7gs6ljbb8rmm0vp98vqc5fp"))))
39667 (build-system pyproject-build-system)
39668 (native-inputs
39669 (list python-pytest python-setuptools))
39670 (home-page "https://github.com/Mathics3/python-timed-threads/")
39671 (synopsis "Ability to set absolute time deadlines on asynchronous threads")
39672 (description
39673 "This package adds the ability to set relative elapsed time deadlines on
39674asynchronous threads, and allows one thread to stop another by means of
39675raising an exception.")
39676 (license license:expat)))
39677
39678(define-public python-timeout-decorator
39679 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39680 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39681 (package
39682 (name "python-timeout-decorator")
39683 (version "0.5.0")
39684 (source
39685 (origin
39686 (method url-fetch)
39687 (uri (pypi-uri "timeout-decorator" version))
39688 (sha256
39689 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39690 (build-system pyproject-build-system)
39691 (arguments (list #:tests? #f))
39692 (native-inputs (list python-setuptools python-wheel))
39693 (home-page "https://github.com/pnpnpn/timeout-decorator")
39694 (synopsis "Timeout decorator")
39695 (description "This package provides a decorator that raises an error
39696when an operation takes longer than expected.")
39697 (license license:expat)))
39698
39699(define-public python-titlecase
39700 (package
39701 (name "python-titlecase")
39702 (version "2.4.1")
39703 (source
39704 (origin
39705 (method url-fetch)
39706 (uri (pypi-uri "titlecase" version))
39707 (sha256
39708 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39709 (build-system pyproject-build-system)
39710 (arguments
39711 (list
39712 #:test-backend #~'unittest))
39713 (native-inputs
39714 (list python-setuptools))
39715 (home-page "https://github.com/ppannuto/python-titlecase")
39716 (synopsis "Capitalize strings similar to book titles")
39717 (description
39718 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39719It capitalizes (predominantly English) strings in a way that is similar to
39720book titles, using the New York Times Manual of Style to leave certain words
39721lowercase.")
39722 (license license:expat)))
39723
39724(define-public python-tlsh
39725 (package
39726 (name "python-tlsh")
39727 (version "4.11.2")
39728 (home-page "https://github.com/trendmicro/tlsh")
39729 (source
39730 (origin
39731 (method git-fetch)
39732 (uri (git-reference (url home-page) (commit version)))
39733 (file-name (git-file-name name version))
39734 (sha256
39735 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39736 (build-system pyproject-build-system)
39737 (arguments
39738 (list
39739 #:phases
39740 #~(modify-phases %standard-phases
39741 (add-before 'build 'configure
39742 (lambda _
39743 (invoke "cmake" "."))) ;to generate tlsh_version.h
39744 (add-after 'configure 'chdir
39745 (lambda _
39746 (chdir "py_ext")))
39747 (replace 'check
39748 (lambda* (#:key tests? #:allow-other-keys)
39749 (when tests?
39750 (with-directory-excursion "../Testing"
39751 (invoke "./python_test.sh"))))))))
39752 (native-inputs (list cmake-minimal python-setuptools))
39753 (synopsis "Fuzzy matching library for Python")
39754 (description
39755 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39756Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39757value which can be used for similarity comparisons. Similar objects have
39758similar hash values, which allows for the detection of similar objects by
39759comparing their hash values. The byte stream should have a sufficient amount
39760of complexity; for example, a byte stream of identical bytes will not generate
39761a hash value.")
39762 (license license:asl2.0)))
39763
39764(define-public python-tlv8
39765 (package
39766 (name "python-tlv8")
39767 (version "0.10.0")
39768 (source
39769 (origin
39770 (method git-fetch)
39771 (uri (git-reference
39772 (url "https://github.com/jlusiardi/tlv8_python")
39773 (commit (string-append "v" version))))
39774 (file-name (git-file-name name version))
39775 (sha256
39776 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39777 (build-system pyproject-build-system)
39778 (native-inputs (list python-setuptools python-pytest))
39779 (home-page "https://github.com/jlusiardi/tlv8_python")
39780 (synopsis
39781 "Python library for @acronym{TLV, type-length-value} encoded data")
39782 (description
39783 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39784Represents type and length by one byte each, hence the name @code{tlv8}.")
39785 (license license:asl2.0)))
39786
39787(define-public python-tokenize-rt
39788 (package
39789 (name "python-tokenize-rt")
39790 (version "6.2.0")
39791 (source
39792 (origin
39793 (method git-fetch)
39794 (uri (git-reference
39795 (url "https://github.com/asottile/tokenize-rt")
39796 (commit (string-append "v" version))))
39797 (file-name (git-file-name name version))
39798 (sha256
39799 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39800 (build-system pyproject-build-system)
39801 (native-inputs (list python-pytest python-setuptools))
39802 (home-page "https://github.com/asottile/tokenize-rt")
39803 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39804 (description
39805 "This Python library is a wrapper around @code{tokenize} from the Python
39806standard library. It provides two additional tokens @code{ESCAPED_NL} and
39807@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39808and @code{tokens_to_src} to roundtrip.")
39809 (license license:expat)))
39810
39811(define-public python-tomlkit
39812 (package
39813 (name "python-tomlkit")
39814 (version "0.15.0")
39815 (source
39816 (origin
39817 (method git-fetch)
39818 (uri (git-reference
39819 (url "https://github.com/sdispater/tomlkit")
39820 (commit version)))
39821 (file-name (git-file-name name version))
39822 (sha256
39823 (base32 "00sv5x8j78zkirzh9rl89lkpwfwhkhrq4mql2p4rqws1j37zx88g"))))
39824 (build-system pyproject-build-system)
39825 (arguments
39826 (list
39827 #:phases
39828 #~(modify-phases %standard-phases
39829 ;; toml-test is submodule to
39830 ;; <https://github.com/toml-lang/toml-test>.
39831 (add-after 'unpack 'copy-toml-test-source
39832 (lambda _
39833 (copy-recursively
39834 #$(package-source (this-package-native-input "toml-test"))
39835 "tests/toml-test"))))))
39836 (native-inputs
39837 (list python-poetry-core
39838 python-pytest
39839 toml-test))
39840 (home-page "https://github.com/sdispater/tomlkit")
39841 (synopsis "Style-preserving TOML library")
39842 (description
39843 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39844preserves all comments, indentations, whitespace and internal element ordering,
39845and makes them accessible and editable via an intuitive API. It can also
39846create new TOML documents from scratch using the provided helpers. Part of the
39847implementation has been adapted, improved, and fixed from Molten.")
39848 (license license:expat)))
39849
39850(define-public python-toolrack
39851 (package
39852 (name "python-toolrack")
39853 (version "4.0.3")
39854 (source
39855 (origin
39856 (method git-fetch)
39857 (uri (git-reference
39858 (url "https://github.com/albertodonato/toolrack")
39859 (commit (string-append "v" version))))
39860 (file-name (git-file-name name version))
39861 (sha256
39862 (base32
39863 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39864 (build-system pyproject-build-system)
39865 (arguments
39866 (list
39867 #:phases
39868 #~(modify-phases %standard-phases
39869 (add-after 'unpack 'patch-/bin/sh
39870 (lambda _
39871 (substitute* "tests/aio/process_test.py"
39872 (("/bin/sh")
39873 (which "sh"))))))))
39874 (native-inputs
39875 (list python-pytest
39876 python-pytest-asyncio
39877 python-pytest-mock
39878 python-setuptools))
39879 (home-page "https://github.com/albertodonato/toolrack")
39880 (synopsis "Collection of Python utility functions and classes")
39881 (description "This package provides a collection of miscellaneous utility
39882functions and classes.")
39883 (license license:lgpl3+)))
39884
39885(define-public python-toolshed
39886 (package
39887 (name "python-toolshed")
39888 (version "0.4.8")
39889 (source
39890 (origin
39891 (method git-fetch)
39892 (uri (git-reference
39893 (url "https://github.com/brentp/toolshed")
39894 (commit (string-append "v" version))))
39895 (file-name (git-file-name name version))
39896 (sha256
39897 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39898 (build-system pyproject-build-system)
39899 (native-inputs
39900 (list python-pytest
39901 python-setuptools))
39902 (home-page "https://github.com/brentp/toolshed/")
39903 (synopsis "Collection of modules and functions for working with data")
39904 (description "This is a collection of well-tested, simple modules and
39905functions that aim to reduce boilerplate when working with data.")
39906 (license license:bsd-2)))
39907
39908(define-public python-toolz
39909 (package
39910 (name "python-toolz")
39911 (version "1.1.0")
39912 (source
39913 (origin
39914 (method git-fetch)
39915 (uri (git-reference
39916 (url "https://github.com/pytoolz/toolz")
39917 (commit version)))
39918 (file-name (git-file-name name version))
39919 (sha256
39920 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39921 (build-system pyproject-build-system)
39922 (arguments
39923 (list
39924 #:phases
39925 #~(modify-phases %standard-phases
39926 (add-after 'unpack 'set-version
39927 (lambda _
39928 (substitute* "pyproject.toml"
39929 (("\\[tool.setuptools-git-versioning\\]" all)
39930 (string-append "[tool.setuptools_scm]\n"
39931 "write_to = \"toolz/_version.py\"\n"
39932 all))))))))
39933 (native-inputs
39934 (list python-pytest
39935 python-setuptools
39936 ;; Project expects setuptools-git-versioning to build version, but
39937 ;; it does not support envar override as seuptools-scm.
39938 python-setuptools-scm))
39939 (home-page "https://github.com/pytoolz/toolz/")
39940 (synopsis "List processing tools and functional utilities")
39941 (description
39942 "This package provides a set of utility functions for iterators,
39943functions, and dictionaries.")
39944 (license license:bsd-3)))
39945
39946(define-public python-toposort
39947 (package
39948 (name "python-toposort")
39949 (version "1.10")
39950 (source
39951 (origin
39952 (method url-fetch)
39953 (uri (pypi-uri "toposort" version))
39954 (sha256
39955 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39956 (build-system pyproject-build-system)
39957 (arguments
39958 (list #:test-backend #~'custom
39959 #:test-flags #~(list "-m" "test.test_toposort")))
39960 (native-inputs (list python-setuptools))
39961 (home-page "https://gitlab.com/ericvsmith/toposort")
39962 (synopsis "Topological sort algorithm")
39963 (description
39964 "This package provides an implementation of a topological sort
39965algorithm.")
39966 (license license:asl2.0)))
39967
39968(define-public python-towncrier
39969 (package
39970 (name "python-towncrier")
39971 (version "25.8.0")
39972 (source
39973 (origin
39974 (method url-fetch)
39975 (uri (pypi-uri "towncrier" version))
39976 (sha256
39977 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39978 (build-system pyproject-build-system)
39979 (native-inputs
39980 (list git-minimal/pinned ;tests create git repositories
39981 python-hatchling
39982 python-pytest
39983 python-twisted))
39984 (propagated-inputs
39985 (list python-click
39986 python-jinja2))
39987 (home-page "https://towncrier.readthedocs.io/en/stable/")
39988 (synopsis "Manage release notes")
39989 (description
39990 "@code{towncrier} is a utility to produce useful, summarized news files
39991 (also known as changelogs) for a project.")
39992 (license license:expat)))
39993
39994(define-public python-tqdm
39995 (package
39996 (name "python-tqdm")
39997 (version "4.67.1")
39998 (source
39999 (origin
40000 (method url-fetch)
40001 (uri (pypi-uri "tqdm" version))
40002 (sha256
40003 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
40004 (build-system pyproject-build-system)
40005 (arguments
40006 (list #:test-flags
40007 '(list "-o" "asyncio_mode=auto"
40008 "-k" "not perf and not test_rlock_creation")))
40009 (native-inputs
40010 (list python-pytest
40011 python-pytest-asyncio
40012 python-pytest-timeout
40013 python-setuptools
40014 python-setuptools-scm
40015 python-toml
40016 python-wheel))
40017 (home-page "https://github.com/tqdm/tqdm")
40018 (synopsis "Fast, extensible progress meter")
40019 (description
40020 "Make loops show a progress bar on the console by just wrapping any
40021iterable with @code{|tqdm(iterable)|}. Offers many options to define
40022design and layout.")
40023 (license (list license:mpl2.0 license:expat))))
40024
40025(define-public python-traitlets
40026 (package
40027 (name "python-traitlets")
40028 (version "5.14.3")
40029 (source
40030 (origin
40031 (method url-fetch)
40032 (uri (pypi-uri "traitlets" version))
40033 (sha256
40034 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
40035 (build-system pyproject-build-system)
40036 ;; tests: 566 passed, 3 skipped, 1 warning
40037 (native-inputs
40038 (list python-hatchling
40039 python-pytest))
40040 (home-page "https://ipython.org")
40041 (synopsis "Configuration system for Python applications")
40042 (description
40043 "Traitlets is a framework that lets Python classes have attributes with
40044type checking, dynamically calculated default values, and ‘on change’
40045callbacks. The package also includes a mechanism to use traitlets for
40046configuration, loading values from files or from command line arguments. This
40047is a distinct layer on top of traitlets, so you can use traitlets in your code
40048without using the configuration machinery.")
40049 (license license:bsd-3)))
40050
40051(define-public python-translate-toolkit
40052 (package
40053 (name "python-translate-toolkit")
40054 (version "3.15.6")
40055 (source
40056 (origin
40057 (method url-fetch)
40058 (uri (pypi-uri "translate_toolkit" version))
40059 (sha256
40060 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
40061 (build-system pyproject-build-system)
40062 (arguments
40063 (list
40064 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
40065 #:test-flags
40066 ;; TODO: Some of the optional inputs are not packaged yet.
40067 #~(list #$@(map (lambda (file) (string-append "--ignore="
40068 "tests/translate/"
40069 file))
40070 (list "convert/test_ini2po.py"
40071 "convert/test_php2po.py"
40072 "convert/test_po2ini.py"
40073 "convert/test_po2php.py"
40074 "storage/test_cpo.py"
40075 "storage/test_fluent.py"
40076 "storage/test_ini.py"
40077 "storage/test_php.py"
40078 "storage/test_po.py"
40079 "storage/test_pypo.py"
40080 "storage/test_subtitles.py"))
40081 #$@(map (lambda (test) (string-append "--deselect="
40082 "tests/translate/storage/"
40083 test))
40084 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
40085 ;; 0xff in position 0: invalid start byte
40086 (list "test_csvl10n.py::TestCSV::test_encoding_save"
40087 ;; FileNotFoundError: [Errno 2] No such file or
40088 ;; directory: 'msgfmt'
40089 "test_mo.py::TestMOFile::test_output"
40090 ;; assert 0 == -16200
40091 "test_poheader.py::test_timezones"))
40092 #$@(map (lambda (test) (string-append "--deselect="
40093 "tests/translate/tools/"
40094 test))
40095 ;; XXX: Some issues with XML parsing.
40096 (list "test_junitmsgfmt.py::test_output"
40097 "test_pocount.py::test_output"
40098 "test_pocount.py::test_cases"))
40099 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
40100 (native-inputs
40101 (list python-pytest
40102 python-setuptools
40103 python-setuptools-scm))
40104 (propagated-inputs
40105 (list python-cwcwidth
40106 python-cheroot
40107 ;; python-aeidon
40108 ;; python-fluent
40109 python-iniparse
40110 python-lxml
40111 python-mistletoe
40112 python-phply
40113 python-pyparsing
40114 python-ruamel.yaml
40115 python-vobject))
40116 (home-page "https://toolkit.translatehouse.org")
40117 (synopsis "Tools and API for translation and localization engineering")
40118 (description
40119 "Tools and API for translation and localization engineering. It contains
40120several utilities, as well as an API for building localization tools.")
40121 (license license:gpl2+)))
40122
40123(define-public python-translitcodec
40124 (package
40125 (name "python-translitcodec")
40126 (version "0.7.0")
40127 (source
40128 (origin
40129 (method git-fetch)
40130 (uri (git-reference
40131 (url "https://github.com/claudep/translitcodec")
40132 (commit (string-append "version-" version))))
40133 (file-name (git-file-name name version))
40134 (sha256
40135 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
40136 (build-system pyproject-build-system)
40137 (native-inputs (list python-pytest python-setuptools))
40138 (home-page "https://github.com/claudep/translitcodec")
40139 (synopsis "Unicode to 8-bit charset transliteration codec")
40140 (description
40141 "This package contains codecs for transliterating ISO 10646 texts into
40142best-effort representations using smaller coded character sets (ASCII,
40143ISO 8859, etc.).")
40144 (license license:expat)))
40145
40146(define-public python-treelib
40147 (package
40148 (name "python-treelib")
40149 (version "1.8.0")
40150 (source
40151 (origin
40152 (method git-fetch)
40153 (uri (git-reference
40154 (url "https://github.com/caesar0301/treelib")
40155 (commit (string-append "v" version))))
40156 (file-name (git-file-name name version))
40157 (sha256
40158 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
40159 (patches
40160 (search-patches "python-treelib-remove-python2-compat.patch"))))
40161 (build-system pyproject-build-system)
40162 (native-inputs (list python-poetry-core python-pytest))
40163 (home-page "https://github.com/caesar0301/treelib")
40164 (synopsis "Implementation of a tree structure in Python")
40165 (description
40166 "This package provides a Python implementation of a tree structure.")
40167 (license license:asl2.0)))
40168
40169(define-public python-trio
40170 (package
40171 (name "python-trio")
40172 (version "0.33.0")
40173 (source
40174 (origin
40175 (method git-fetch)
40176 (uri (git-reference
40177 (url "https://github.com/python-trio/trio")
40178 (commit (string-append "v" version))))
40179 (file-name (git-file-name name version))
40180 (sha256
40181 (base32 "1ibkp7bgdv0k099szk8181rfn7jm60kh8kpfrkfr4pnwjd6abslf"))))
40182 (build-system pyproject-build-system)
40183 (arguments
40184 (list
40185 ;; tests: 507 passed, 45 skipped, 37 deselected
40186 #:test-flags
40187 #~(list
40188 #$@(if (package? (this-package-native-input "python-trustme"))
40189 #~()
40190 #~("--ignore=src/trio/_tests/test_dtls.py"
40191 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
40192 "--ignore=src/trio/_tests/test_ssl.py"))
40193 ;; Skip tests for the upstream repository's tooling.
40194 "--ignore=src/trio/_tests/tools"
40195 "-k" (string-join
40196 (list
40197 ;; Keyboard interrupts misbehave in the build sandbox.
40198 "not test_ki_in_repl"
40199 "test_KI_interrupts"
40200 "test_run_in_trio_thread_ki"
40201 ;; Somehow f'{check_errno_is_5!r}' evaluates
40202 ;; to "'check_errno_is_5'" instead of "<function ...>",
40203 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
40204 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
40205 ;; will probably be removed in version 0.35.
40206 "test_Matcher_check"
40207 "test_matcher_tostring"
40208 "test_raisesgroup_tostring"
40209 ;; Failure in name resolution.
40210 "test_SocketType_resolve"
40211 ;; OSError: protocol not found.
40212 "test_getprotobyname"
40213 ;; Drop pylint and jedi.
40214 "test_static_tool_sees_all_symbols")
40215 " and not ")
40216 "src/trio/_tests")
40217 #:phases
40218 #~(modify-phases %standard-phases
40219 (add-after 'unpack 'patch-pthread-path
40220 (lambda* (#:key inputs #:allow-other-keys)
40221 (substitute* '("src/trio/_core/_thread_cache.py"
40222 "src/trio/_tests/test_threads.py")
40223 (("ctypes.util.find_library\\(\"pthread\"\\)")
40224 (simple-format #f "~s"
40225 (search-input-file inputs "lib/libpthread.so.0"))))))
40226 (add-before 'check 'set-env
40227 (lambda _
40228 ;; Tests require a writable home.
40229 (setenv "HOME" "/tmp"))))))
40230 (native-inputs
40231 (append
40232 (if (supported-package? python-pyopenssl)
40233 (list python-pyopenssl)
40234 '())
40235 (if (supported-package? python-trustme)
40236 (list python-trustme)
40237 '())
40238 (list python-async-generator)
40239 (if (supported-package? python-cryptography)
40240 (list python-cryptography)
40241 '())
40242 (list python-pytest
40243 python-setuptools)))
40244 (propagated-inputs
40245 (list python-attrs
40246 python-idna
40247 python-outcome
40248 python-sniffio
40249 python-sortedcontainers))
40250 (home-page "https://github.com/python-trio/trio")
40251 ;; (home-page "https://trio.readthedocs.io")
40252 (synopsis "Friendly Python library for async concurrency and I/O")
40253 (description
40254 "Trio strives to be a production-quality, async/await-native I/O library
40255for Python. Like all async libraries, its main purpose is to help you write
40256programs that do multiple things at the same time with parallelized I/O.")
40257 ;; Either license applies.
40258 (license (list license:expat license:asl2.0))))
40259
40260(define-public python-trio-typing
40261 (package
40262 (name "python-trio-typing")
40263 (version "0.10.0")
40264 (source
40265 (origin
40266 (method git-fetch)
40267 (uri (git-reference
40268 (url "https://github.com/python-trio/trio-typing")
40269 (commit (string-append "v" version))))
40270 (file-name (git-file-name name version))
40271 (sha256
40272 (base32 "127zpngp6r87kapvx5bwcl5awhyrsykwmvnxrb67qv7yz1s4z278"))))
40273 (build-system pyproject-build-system)
40274 (arguments
40275 (list #:tests? #f )) ;no proper tests
40276 (native-inputs
40277 (list python-setuptools))
40278 (propagated-inputs
40279 (list python-async-generator
40280 python-importlib-metadata
40281 python-mypy-extensions
40282 python-packaging
40283 python-trio
40284 python-typing-extensions))
40285 (home-page "https://github.com/python-trio/trio-typing")
40286 (synopsis "Static type checking support for Trio and related projects")
40287 (description
40288 "This package provides:
40289
40290@itemize
40291@item PEP 561 typing stubs packages for the Trio project packages:
40292
40293@itemize
40294@item trio (@code{trio-stubs})
40295@item outcome (@code{outcome-stubs})
40296@item async_generator (@code{async_generator-stubs})
40297@end itemize
40298
40299@item A package @code{trio_typing} containing types that Trio programs often
40300want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
40301a mypy plugin that smooths over some limitations in the basic type hints.
40302@end itemize")
40303 ;; Either license applies.
40304 (license (list license:expat license:asl2.0))))
40305
40306(define-public python-trubar
40307 (package
40308 (name "python-trubar")
40309 (version "0.3.4")
40310 (source
40311 (origin
40312 (method url-fetch)
40313 (uri (pypi-uri "trubar" version))
40314 (sha256
40315 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
40316 (build-system pyproject-build-system)
40317 (arguments
40318 (list
40319 #:test-flags
40320 #~(list "-k" (string-join
40321 ;; AttributeError: module 'libcst' has no attribute
40322 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
40323 (list "not test_import_from_future"
40324 "test_inport_after_docstring"
40325 ;; AssertionError: Items in the second set but not
40326 ;; the first
40327 "test_walk_files")
40328 " and not "))))
40329 (native-inputs
40330 (list python-pytest
40331 python-setuptools
40332 python-wheel))
40333 (propagated-inputs
40334 (list python-libcst
40335 python-pyyaml))
40336 (home-page "https://github.com/janezd/trubar")
40337 (synopsis "Utility for translation of Python sources")
40338 (description
40339 "This package provides a tool for translation and localization of Python
40340programs via modification of source files. Trubar supports f-strings and does
40341not require any changes to the original source code, such as marking strings
40342for translation.")
40343 (license license:expat)))
40344
40345(define-public python-twine
40346 (package
40347 (name "python-twine")
40348 (version "6.2.0")
40349 (source
40350 (origin
40351 (method url-fetch)
40352 (uri (pypi-uri "twine" version))
40353 (sha256
40354 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
40355 (build-system pyproject-build-system)
40356 (arguments
40357 (list
40358 ;; tests: 228 passed, 1 deselected
40359 #:test-flags
40360 ;; Assertion is not equal for one tests.
40361 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
40362 (native-inputs
40363 (list python-pretend
40364 python-pytest
40365 python-pytest-socket
40366 python-setuptools
40367 python-setuptools-scm))
40368 (propagated-inputs
40369 (list python-id
40370 python-keyring
40371 python-packaging
40372 python-readme-renderer
40373 python-requests
40374 python-requests-toolbelt
40375 python-rfc3986
40376 python-rich
40377 python-urllib3))
40378 (home-page "https://github.com/pypa/twine")
40379 (synopsis "Collection of utilities for interacting with PyPI")
40380 (description
40381 "@code{twine} currently supports registering projects and uploading
40382distributions. It authenticates the user over HTTPS, allows them to pre-sign
40383their files and supports any packaging format (including wheels).")
40384 (license license:asl2.0)))
40385
40386(define-public python-twisted
40387 (package
40388 (name "python-twisted")
40389 (version "25.5.0")
40390 (source
40391 (origin
40392 (method git-fetch)
40393 (uri (git-reference
40394 (url "https://github.com/twisted/twisted")
40395 (commit (string-append "twisted-" version))))
40396 (file-name (git-file-name name version))
40397 (sha256
40398 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
40399 (build-system pyproject-build-system)
40400 (arguments
40401 (list
40402 ;; tests: skips=638, successes=9759
40403 #:test-backend #~'custom
40404 #:test-flags
40405 #~(list "-m" "twisted.trial"
40406 "--temp-directory=/tmp/_trial_temp"
40407 (string-append "-j" (number->string (min 8 (parallel-job-count))))
40408 "twisted")
40409 #:phases
40410 #~(modify-phases %standard-phases
40411 (add-after 'unpack 'disable-broken-tests
40412 (lambda _
40413 (for-each delete-file
40414 (list
40415 ;; No idea why they fail
40416 "src/twisted/test/test_log.py"
40417 ;; Network tests
40418 "src/twisted/conch/test/test_cftp.py"
40419 "src/twisted/internet/test/test_endpoints.py"
40420 "src/twisted/protocols/test/test_tls.py"
40421 "src/twisted/test/test_sslverify.py"
40422 "src/twisted/web/test/test_agent.py"
40423 "src/twisted/web/test/test_tap.py"
40424 ;; These need a git executable
40425 "src/twisted/python/test/test_release.py"
40426 ;; These leave behind a socket file, which breaks the
40427 ;; build with "...has an unsupported type"
40428 "src/twisted/internet/test/test_unix.py"
40429 "src/twisted/test/test_unix.py"
40430 ;; These complain about missing test modules.
40431 "src/twisted/test/test_failure.py"
40432 "src/twisted/web/test/test_http2.py"
40433 "src/twisted/conch/test/test_forwarding.py")))))))
40434 (propagated-inputs
40435 (list python-attrs
40436 python-automat
40437 python-bcrypt
40438 python-constantly
40439 python-hyperlink
40440 python-incremental
40441 python-typing-extensions
40442 python-zope-interface
40443 ;; [conch]
40444 (list python "tk")
40445 python-appdirs
40446 python-bcrypt
40447 python-cryptography
40448 ;; [http2]
40449 python-h2
40450 python-priority
40451 ;; [tls]
40452 python-idna
40453 python-pyopenssl
40454 python-service-identity
40455 ;; [serial]
40456 python-pyserial))
40457 (native-inputs
40458 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
40459 python-hatch-fancy-pypi-readme
40460 python-hatchling
40461 python-httpx
40462 python-hypothesis
40463 python-incremental
40464 python-pyhamcrest
40465 python-pytest))
40466 (home-page "https://twistedmatrix.com/")
40467 (synopsis "Asynchronous networking framework written in Python")
40468 (description
40469 "Twisted is an extensible framework for Python programming, with special
40470focus on event-based network programming and multiprotocol integration.")
40471 (license license:expat)))
40472
40473(define-public python-txredisapi
40474 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40475 ;; The latest version is 1.4.11, but it contains a bug:
40476 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40477 ;; patched in commit d2259a3.
40478 (revision "0"))
40479 (package
40480 (name "python-txredisapi")
40481 (version (git-version "1.4.11" revision commit))
40482 (source
40483 (origin
40484 (method git-fetch)
40485 ;; The source distribution on PyPi is missing test files:
40486 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40487 (uri (git-reference
40488 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40489 (commit commit)))
40490 (file-name (git-file-name name version))
40491 (sha256
40492 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40493 (build-system pyproject-build-system)
40494 (arguments
40495 (list #:test-backend #~'custom
40496 #:test-flags #~(list "-m" "twisted.trial" "tests")
40497 #:phases
40498 #~(modify-phases %standard-phases
40499 ;; The tests require a running Redis server.
40500 (add-before 'check 'start-redis
40501 (lambda _
40502 (invoke "redis-server" "--daemonize" "yes"))))))
40503 (propagated-inputs (list python-twisted))
40504 (native-inputs (list python-mock python-setuptools redis))
40505 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40506 (synopsis "Non-blocking Redis client for Python")
40507 (description "txredisapi is a non-blocking client driver for the Redis
40508database, written in Python. It uses Twisted for asynchronous communication
40509with Redis.")
40510 (license license:asl2.0))))
40511
40512(define-public python-typeapi
40513 (package
40514 (name "python-typeapi")
40515 (version "2.2.4")
40516 (source
40517 (origin
40518 (method url-fetch)
40519 (uri (pypi-uri "typeapi" version))
40520 (sha256
40521 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40522 (build-system pyproject-build-system)
40523 (arguments
40524 (list
40525 #:tests? #false)) ;there are none
40526 (propagated-inputs (list python-typing-extensions))
40527 (native-inputs (list python-hatchling))
40528 (home-page "https://pypi.org/project/typeapi/")
40529 (synopsis "Type hints")
40530 (description "The typeapi package provides an object-oriented interface
40531for introspecting PEP484 type hints at runtime, including forward references
40532that make use of the more recent PEP585 and PEP604 type hint features in
40533Python versions that don't natively support them.")
40534 (license license:expat)))
40535
40536(define-public python-typer
40537 (package
40538 (name "python-typer")
40539 ;; XXX: starting from 0.26.0, Typer vendors Click.
40540 (version "0.26.4")
40541 (source
40542 (origin
40543 (method git-fetch)
40544 (uri (git-reference
40545 (url "https://github.com/fastapi/typer")
40546 (commit version)))
40547 (file-name (git-file-name name version))
40548 (sha256
40549 (base32 "0cmk9wsnml1yykzs5sxfdww3bchh9f2f63cj6nirw39zilp1jjw0"))))
40550 (build-system pyproject-build-system)
40551 (arguments
40552 (list
40553 #:phases
40554 #~(modify-phases %standard-phases
40555 (add-before 'check 'pre-check
40556 (lambda _
40557 (setenv "HOME" "/tmp"))))
40558 #:test-flags
40559 #~(list "-k" "not test_cli"
40560 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40561 (native-inputs
40562 (list python-coverage ;this is required in tests
40563 python-pdm-backend
40564 python-pytest
40565 python-pytest-xdist))
40566 (propagated-inputs
40567 (list python-annotated-doc
40568 python-rich
40569 python-shellingham))
40570 (home-page "https://github.com/fastapi/typer")
40571 (synopsis "Typer builds CLI based on Python type hints")
40572 (description
40573 "Typer is a library for building CLI applications. It's based on Python
405743.6+ type hints.")
40575 (license license:expat)))
40576
40577;; Starting from 0.26.0, Typer vendors its own fork of Click (typer._click) and no longer
40578;; recognises subclasses of the real click.Context as the injected CLI
40579;; context, breaking some packages at import time. Keep until all dependents migrated.
40580(define-public python-typer-without-click
40581 (hidden-package
40582 (package
40583 (inherit python-typer)
40584 (version "0.25.1")
40585 (source
40586 (origin
40587 (method git-fetch)
40588 (uri (git-reference
40589 (url "https://github.com/fastapi/typer")
40590 (commit version)))
40591 (file-name (git-file-name "python-typer" version))
40592 (sha256
40593 (base32 "0z6k7qpd49wqvxl3q5jwq2kl0y3w8dxwxmp42qbkbvwixfqxg2qw"))))
40594 (propagated-inputs
40595 (list python-click
40596 python-typing-extensions
40597 python-annotated-doc
40598 python-rich
40599 python-shellingham))
40600 (arguments
40601 (substitute-keyword-arguments arguments
40602 ((#:test-flags flags #~'())
40603 ;; Ignore tests that fail due to Click error-message wording.
40604 ;; These happen because Click version is more recent than expected.
40605 #~(cons*
40606 (string-append "--deselect=tests/test_suggest_commands.py"
40607 "::test_typo_suggestion_disabled")
40608 (string-append "--ignore=tests/test_tutorial/test_commands/"
40609 "test_callback/test_tutorial001.py")
40610 (string-append "--ignore-glob=tests/test_tutorial/"
40611 "test_parameter_types/test_bool/test_tutorial0*.py")
40612 #$flags)))))))
40613
40614(define-public python-types-aiofiles
40615 (package
40616 (name "python-types-aiofiles")
40617 (version "25.1.0.20251011")
40618 (source
40619 (origin
40620 (method url-fetch)
40621 (uri (pypi-uri "types_aiofiles" version))
40622 (sha256
40623 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40624 (build-system pyproject-build-system)
40625 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40626 (native-inputs (list python-setuptools))
40627 (home-page "https://github.com/python/typeshed")
40628 (synopsis "Typing stubs for python-aiofiles")
40629 (description "This package providis typing stubs for python-aiofiles.")
40630 (license license:asl2.0)))
40631
40632(define-public python-types-colorama
40633 (package
40634 (name "python-types-colorama")
40635 (version "0.4.15.20250801")
40636 (source
40637 (origin
40638 (method url-fetch)
40639 (uri (pypi-uri "types_colorama" version))
40640 (sha256
40641 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40642 (build-system pyproject-build-system)
40643 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40644 (native-inputs
40645 (list python-setuptools))
40646 (home-page "https://github.com/python/typeshed")
40647 (synopsis "Typing stubs for colorama")
40648 (description "This package provides typing stubs for colorama.")
40649 (license license:asl2.0)))
40650
40651(define-public python-types-dataclasses
40652 (package
40653 (name "python-types-dataclasses")
40654 (version "0.6.6")
40655 (source
40656 (origin
40657 (method url-fetch)
40658 (uri (pypi-uri "types-dataclasses" version))
40659 (sha256
40660 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40661 (build-system pyproject-build-system)
40662 (arguments (list #:tests? #f)) ;no tests
40663 (native-inputs (list python-setuptools))
40664 (home-page "https://github.com/python/typeshed")
40665 (synopsis "Typing stubs for dataclasses")
40666 (description
40667 "This package provides a collection of library stubs for Python, with
40668static types.")
40669 (license license:asl2.0)))
40670
40671(define-public python-types-dateutil
40672 (package
40673 (name "python-types-dateutil")
40674 (version "2.9.0.20240316")
40675 (source
40676 (origin
40677 (method url-fetch)
40678 (uri (pypi-uri "types-python-dateutil" version))
40679 (sha256
40680 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40681 (build-system pyproject-build-system)
40682 (arguments (list #:tests? #f)) ; no tests
40683 (native-inputs
40684 (list python-pytest python-setuptools python-wheel))
40685 (home-page "https://github.com/python/typeshed")
40686 (synopsis "Typing stubs for python-dateutil")
40687 (description
40688 "This is a PEP 561 type stub package for the @code{python-dateutil}
40689package.")
40690 (license license:asl2.0)))
40691
40692(define-public python-types-docutils
40693 (package
40694 (name "python-types-docutils")
40695 (version "0.22.2.20251006")
40696 (source
40697 (origin
40698 (method url-fetch)
40699 (uri (pypi-uri "types_docutils" version))
40700 (sha256
40701 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40702 (build-system pyproject-build-system)
40703 (arguments (list #:tests? #f)) ;no tests
40704 (native-inputs (list python-setuptools))
40705 (home-page "https://github.com/python/typeshed")
40706 (synopsis "Typing stubs for docutils")
40707 (description "This package provides a collection of library stubs for
40708Python, with static types.")
40709 (license license:asl2.0)))
40710
40711(define-public python-types-freezegun
40712 (package
40713 (name "python-types-freezegun")
40714 (version "1.1.8")
40715 (source
40716 (origin
40717 (method url-fetch)
40718 (uri (pypi-uri "types-freezegun" version))
40719 (sha256
40720 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40721 (build-system pyproject-build-system)
40722 (arguments
40723 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40724 ;; right files from source, so ignore them for now.
40725 (list #:tests? #f))
40726 (native-inputs (list python-setuptools python-wheel))
40727 (home-page "https://github.com/python/typeshed")
40728 (synopsis "Typing stubs for @code{freezegun}")
40729 (description "This package contains typing stubs for for @code{freezegun}, a
40730very small subset the Python stubs contained in the complete @code{typeshed}
40731collection.")
40732 (license license:asl2.0)))
40733
40734(define-public python-types-orjson
40735 (package
40736 (name "python-types-orjson")
40737 (version "3.6.2")
40738 (source
40739 (origin
40740 (method url-fetch)
40741 (uri (pypi-uri "types-orjson" version))
40742 (sha256
40743 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40744 (build-system pyproject-build-system)
40745 (arguments (list #:tests? #f)) ;no tests
40746 (native-inputs (list python-setuptools))
40747 (home-page "https://github.com/python/typeshed")
40748 (synopsis "Typing stubs for orjson")
40749 (description "This is a PEP 561 type stub package for the @code{orjson}
40750package. It can be used by type-checking tools like mypy, PyCharm, pytype
40751etc. to check code that uses @code{orjson}.")
40752 (license license:asl2.0)))
40753
40754(define-public python-types-protobuf
40755 (package
40756 (name "python-types-protobuf")
40757 (version "3.20.1")
40758 (source (origin
40759 (method url-fetch)
40760 (uri (pypi-uri "types-protobuf" version))
40761 (sha256
40762 (base32
40763 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40764 (build-system pyproject-build-system)
40765 (arguments
40766 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40767 ;; right files from source, so ignore them for now.
40768 (list #:tests? #f))
40769 (native-inputs (list python-setuptools python-wheel))
40770 (home-page "https://github.com/python/typeshed")
40771 (synopsis "Typing stubs for @code{protobuf}")
40772 (description "This package contains typing stubs for @code{protobuf}, a
40773very small subset the Python stubs contained in the complete @code{typeshed}
40774collection.")
40775 (license license:asl2.0)))
40776
40777(define-public python-types-pyside6
40778 (package
40779 (name "python-types-pyside6")
40780 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40781 ;; variant.
40782 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40783 (revision . "0")))
40784 (version (git-version "6.10.1.1"
40785 (assoc-ref properties 'revision)
40786 (assoc-ref properties 'commit)))
40787 (source
40788 (origin
40789 (method git-fetch)
40790 (uri (git-reference
40791 (url "https://github.com/LumaPictures/cg-stubs")
40792 (commit (assoc-ref properties 'commit))))
40793 (file-name (git-file-name name version))
40794 (sha256
40795 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40796 (build-system pyproject-build-system)
40797 (arguments
40798 (list
40799 #:tests? #f ;XXX: all tests failed
40800 #:phases
40801 #~(modify-phases %standard-phases
40802 (add-after 'unpack 'select-pyside6
40803 (lambda _
40804 (chdir "pyside6"))))))
40805 (native-inputs
40806 (list python-hatchling))
40807 (home-page "https://github.com/LumaPictures/cg-stubs")
40808 (synopsis "Accurate stubs for PySide6")
40809 (description
40810 "This package provides PySide6 stubs produced with @code{mypy}'s official
40811stubgen tool to directly generate stubs, with a set of corrections applied.")
40812 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40813 ;; v2.1 . See file LICENSE for more details.
40814 ;;
40815 ;; MIT in pyproject.toml
40816 (license (list license:lgpl2.1+
40817 license:expat))))
40818
40819(define-public python-types-python-dateutil
40820 (package
40821 (name "python-types-python-dateutil")
40822 (version "2.9.0.20250708")
40823 (source
40824 (origin
40825 (method url-fetch)
40826 (uri (pypi-uri "types_python_dateutil" version))
40827 (sha256
40828 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40829 (build-system pyproject-build-system)
40830 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40831 (native-inputs (list python-setuptools))
40832 (home-page "https://github.com/python/typeshed")
40833 (synopsis "Typing stubs for python-dateutil")
40834 (description "This package providis typing stubs for python-dateutil.")
40835 (license license:asl2.0)))
40836
40837(define-public python-types-pytz
40838 (package
40839 (name "python-types-pytz")
40840 (version "2025.2.0.20250809")
40841 (source
40842 (origin
40843 (method url-fetch)
40844 (uri (pypi-uri "types_pytz" version))
40845 (sha256
40846 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40847 (build-system pyproject-build-system)
40848 (arguments
40849 (list #:tests? #f)) ;no tests provided
40850 (native-inputs (list python-setuptools))
40851 (home-page "https://github.com/python/typeshed")
40852 (synopsis "Typing stubs for pytz")
40853 (description "This package contains typing stubs for @code{pytz}, a very
40854small subset the Python stubs contained in the complete @code{typeshed}
40855collection.")
40856 (license license:asl2.0)))
40857
40858(define-public python-types-pyyaml
40859 (package
40860 (name "python-types-pyyaml")
40861 (version "6.0.12.20250915")
40862 (source
40863 (origin
40864 (method url-fetch)
40865 (uri (pypi-uri "types_pyyaml" version))
40866 (sha256
40867 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40868 (build-system pyproject-build-system)
40869 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40870 (native-inputs
40871 (list python-setuptools))
40872 (home-page " https://github.com/python/typeshed")
40873 (synopsis "Typing stubs for PyYAML")
40874 (description "This package provides typing stubs for @code{PyYAML}.")
40875 (license license:asl2.0)))
40876
40877(define-public python-types-regex
40878 (package
40879 (name "python-types-regex")
40880 (version "2025.9.18.20250921")
40881 (source
40882 (origin
40883 (method url-fetch)
40884 (uri (pypi-uri "types_regex" version))
40885 (sha256
40886 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40887 (build-system pyproject-build-system)
40888 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40889 (native-inputs (list python-setuptools))
40890 (home-page "https://github.com/python/typeshed")
40891 (synopsis "Typing stubs for regex")
40892 (description "This package provides typing stubs for regex.")
40893 (license license:asl2.0)))
40894
40895(define-public python-types-requests
40896 (package
40897 (name "python-types-requests")
40898 (version "2.32.4.20250611")
40899 (source
40900 (origin
40901 (method url-fetch)
40902 (uri (pypi-uri "types_requests" version))
40903 (sha256
40904 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40905 (build-system pyproject-build-system)
40906 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40907 (native-inputs
40908 (list python-setuptools))
40909 (propagated-inputs
40910 (list python-urllib3))
40911 (home-page "https://github.com/python/typeshed")
40912 (synopsis "Typing stubs for requests")
40913 (description "This package provides typing stubs for requests.")
40914 (license license:asl2.0)))
40915
40916(define-public python-types-setuptools
40917 (package
40918 (name "python-types-setuptools")
40919 (version "80.9.0.20250529")
40920 (source
40921 (origin
40922 (method url-fetch)
40923 (uri (pypi-uri "types_setuptools" version))
40924 (sha256
40925 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40926 (build-system pyproject-build-system)
40927 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40928 (native-inputs
40929 (list python-setuptools))
40930 (home-page "https://github.com/python/typeshed")
40931 (synopsis "Typing stubs for setuptools")
40932 (description "This package provides typing stubs for setuptools.")
40933 (license license:asl2.0)))
40934
40935(define-public python-types-simplejson
40936 (package
40937 (name "python-types-simplejson")
40938 (version "3.19.0.20241221")
40939 (source
40940 (origin
40941 (method url-fetch)
40942 (uri (pypi-uri "types_simplejson" version))
40943 (sha256
40944 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40945 (build-system pyproject-build-system)
40946 (arguments
40947 (list
40948 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40949 (native-inputs
40950 (list python-setuptools python-wheel))
40951 (home-page "https://github.com/python/typeshed")
40952 (synopsis "Typing stubs for simplejson")
40953 (description "Typing stubs for simplejson.")
40954 (license license:asl2.0)))
40955
40956(define-public python-types-toml
40957 (package
40958 (name "python-types-toml")
40959 (version "0.10.8.20240310")
40960 (source
40961 (origin
40962 (method url-fetch)
40963 (uri (pypi-uri "types-toml" version))
40964 (sha256
40965 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40966 (build-system pyproject-build-system)
40967 (arguments
40968 (list #:tests? #f)) ;no tests provided
40969 (native-inputs (list python-setuptools))
40970 (home-page "https://github.com/python/typeshed")
40971 (synopsis "Typing stubs for TOML")
40972 (description
40973 "This package contains typing stubs for TOML, a very small subset the
40974Python stubs contained in the complete @code{typeshed} collection.")
40975 (license license:asl2.0)))
40976
40977(define-public python-types-tqdm
40978 (package
40979 (name "python-types-tqdm")
40980 (version "4.67.0.20250809")
40981 (source
40982 (origin
40983 (method url-fetch)
40984 (uri (pypi-uri "types_tqdm" version))
40985 (sha256
40986 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40987 (build-system pyproject-build-system)
40988 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40989 (native-inputs (list python-setuptools))
40990 (propagated-inputs (list python-types-requests))
40991 (home-page "https://github.com/python/typeshed")
40992 (synopsis "Typing stubs for python-tqdm")
40993 (description "This package providis typing stubs for python-tqdm.")
40994 (license license:asl2.0)))
40995
40996(define-public python-types-ujson
40997 (package
40998 (name "python-types-ujson")
40999 (version "5.10.0.20250822")
41000 (source
41001 (origin
41002 (method url-fetch)
41003 (uri (pypi-uri "types_ujson" version))
41004 (sha256
41005 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
41006 (build-system pyproject-build-system)
41007 (arguments
41008 (list #:tests? #f)) ;no tests provided
41009 (native-inputs (list python-setuptools))
41010 (home-page "https://github.com/python/typeshed")
41011 (synopsis "Typing stubs for ujson")
41012 (description
41013 "This is a PEP 561 type stub package for the ujson package. It can be
41014used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
41015uses ujson.")
41016 (license license:asl2.0)))
41017
41018(define-public python-types-urllib3
41019 (package
41020 (name "python-types-urllib3")
41021 (version "1.26.25.14")
41022 (source
41023 (origin
41024 (method url-fetch)
41025 (uri (pypi-uri "types-urllib3" version))
41026 (sha256
41027 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
41028 (build-system pyproject-build-system)
41029 (arguments (list #:tests? #f)) ;no tests in PyPI archive
41030 (native-inputs
41031 (list python-setuptools))
41032 (home-page "https://github.com/python/typeshed")
41033 (synopsis "Typing stubs for urllib3")
41034 (description "This package provides typing stubs for urllib3.")
41035 (license license:asl2.0)))
41036
41037(define-public python-typeshed-client
41038 (package
41039 (name "python-typeshed-client")
41040 (version "2.8.2")
41041 (source
41042 (origin
41043 (method git-fetch)
41044 (uri (git-reference
41045 (url "https://github.com/JelleZijlstra/typeshed_client")
41046 (commit (string-append "v" version))))
41047 (file-name (git-file-name name version))
41048 (sha256
41049 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
41050 (build-system pyproject-build-system)
41051 (arguments
41052 (list #:test-backend #~'custom
41053 #:test-flags #~(list "tests/test.py")))
41054 (native-inputs
41055 (list python-setuptools))
41056 (propagated-inputs
41057 (list python-importlib-resources
41058 python-typing-extensions))
41059 (home-page "https://github.com/JelleZijlstra/typeshed_client")
41060 (synopsis "Library for accessing stubs in typeshed")
41061 (description
41062 "This package provides a library for accessing stubs in typeshed.")
41063 (license license:expat)))
41064
41065(define-public python-typing-inspect
41066 (package
41067 (name "python-typing-inspect")
41068 (version "0.9.0")
41069 (source
41070 (origin
41071 (method url-fetch)
41072 (uri (pypi-uri "typing_inspect" version))
41073 (sha256
41074 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
41075 (build-system pyproject-build-system)
41076 (native-inputs
41077 (list python-pytest
41078 python-setuptools
41079 python-wheel))
41080 (propagated-inputs
41081 (list python-mypy-extensions
41082 python-typing-extensions))
41083 (home-page "https://github.com/ilevkivskyi/typing_inspect")
41084 (synopsis "API for inspection of types in the Python @code{typing} module")
41085 (description
41086 "The @code{typing_inspect} module defines experimental API for runtime
41087inspection of types defined in the Python standard typing module.")
41088 (license license:expat)))
41089
41090(define-public python-typing-inspection
41091 (package
41092 (name "python-typing-inspection")
41093 (version "0.4.2")
41094 (source
41095 (origin
41096 (method git-fetch)
41097 (uri (git-reference
41098 (url "https://github.com/pydantic/typing-inspection")
41099 (commit (string-append "v" version))))
41100 (file-name (git-file-name name version))
41101 (sha256
41102 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
41103 (build-system pyproject-build-system)
41104 ;; tests: 89 passed, 3 skipped
41105 (native-inputs
41106 (list python-pytest
41107 python-hatchling))
41108 (propagated-inputs
41109 (list python-typing-extensions))
41110 (home-page "https://github.com/pydantic/typing-inspection")
41111 (synopsis "Runtime typing introspection tools")
41112 (description
41113 "@code{typing-inspection} provides tools to inspect type annotations at
41114runtime.")
41115 (license license:expat)))
41116
41117(define-public python-typogrify
41118 (package
41119 (name "python-typogrify")
41120 (version "2.1.0")
41121 (source
41122 (origin
41123 (method url-fetch)
41124 (uri (pypi-uri "typogrify" version))
41125 (sha256
41126 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
41127 (build-system pyproject-build-system)
41128 (arguments
41129 (list
41130 #:test-flags
41131 #~(list "--doctest-modules"
41132 "typogrify/filters.py"
41133 "typogrify/packages/titlecase/tests.py")))
41134 (native-inputs
41135 (list python-pytest
41136 python-hatchling))
41137 (propagated-inputs
41138 (list python-smartypants))
41139 (home-page "https://github.com/justinmayer/typogrify")
41140 (synopsis "Filters to transform text into typographically-improved HTML")
41141 (description
41142 "@code{typogrify} provides a set of custom filters that automatically
41143apply various transformations to plain text in order to yield
41144typographically-improved HTML. While often used in conjunction with Jinja and
41145Django template systems, the filters can be used in any environment.")
41146 (license license:bsd-3)))
41147
41148(define-public python-ua-parser
41149 (package
41150 (name "python-ua-parser")
41151 (version "0.10.0")
41152 (source
41153 (origin
41154 (method url-fetch)
41155 (uri (pypi-uri "ua-parser" version))
41156 (sha256
41157 (base32
41158 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
41159 (build-system pyproject-build-system)
41160 (arguments
41161 `(#:tests? #f)) ;no test suite in release
41162 (native-inputs
41163 (list python-pyyaml
41164 python-setuptools))
41165 (home-page "https://github.com/ua-parser/uap-python")
41166 (synopsis "User agent parser")
41167 (description
41168 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
41169 (license license:asl2.0)))
41170
41171(define-public python-ubelt
41172 (package
41173 (name "python-ubelt")
41174 (version "1.3.6")
41175 (source
41176 (origin
41177 (method git-fetch)
41178 (uri (git-reference
41179 (url "https://github.com/Erotemic/ubelt")
41180 (commit (string-append "v" version))))
41181 (file-name (git-file-name name version))
41182 (sha256
41183 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
41184 (build-system pyproject-build-system)
41185 (arguments
41186 (list
41187 ;; The builder user home doesn't match HOME, which causes this test to
41188 ;; fail.
41189 #:test-flags #~(list "-k" "not userhome")
41190 #:phases
41191 #~(modify-phases %standard-phases
41192 (add-before 'check 'pre-check
41193 (lambda _
41194 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
41195 (native-inputs
41196 (list python-pytest
41197 python-requests
41198 python-setuptools
41199 python-wheel
41200 python-xdoctest))
41201 (propagated-inputs
41202 (list python-ordered-set))
41203 (home-page "https://github.com/Erotemic/ubelt")
41204 (synopsis "Python library for hashing, caching, timing and more")
41205 (description
41206 "Ubelt is a small library of simple functions that extend the Python
41207standard library. It includes an @acronym{API, Application Programming
41208Interface} to simplify common problems such as caching, timing, computing
41209progress, among other things.")
41210 (license license:asl2.0)))
41211
41212(define-public python-uc-micro-py
41213 (package
41214 (name "python-uc-micro-py")
41215 (version "2.0.0")
41216 (source (origin
41217 (method git-fetch)
41218 (uri (git-reference
41219 (url "https://github.com/tsutsu3/uc.micro-py")
41220 (commit (string-append "v" version))))
41221 (file-name (git-file-name name version))
41222 (sha256
41223 (base32
41224 "06dx8zh0fa13aldqxhzghdnbbaqbb1dklbyqzdxy14dcbqmx92m3"))))
41225 (build-system pyproject-build-system)
41226 (native-inputs (list python-pytest python-setuptools))
41227 (home-page "https://github.com/tsutsu3/uc.micro-py")
41228 (synopsis "Unicode data files for linkify-it-py projects")
41229 (description "This package contains a micro subset of Unicode data files
41230for linkify-it-py projects.")
41231 (license license:expat)))
41232
41233(define-public python-udapi
41234 (package
41235 (name "python-udapi")
41236 (version "0.5.2")
41237 (source
41238 (origin
41239 (method git-fetch)
41240 (uri (git-reference
41241 (url "https://github.com/udapi/udapi-python")
41242 (commit version)))
41243 (file-name (git-file-name name version))
41244 (sha256
41245 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
41246 (build-system pyproject-build-system)
41247 (native-inputs
41248 (list python-pytest python-setuptools))
41249 (propagated-inputs
41250 (list python-colorama python-termcolor))
41251 (home-page "http://udapi.readthedocs.io")
41252 (synopsis "Framework for processing Universal Dependencies data")
41253 (description
41254 "This package is a Python library providing an API for processing
41255Universal Dependencies data.")
41256 (license license:gpl3+)))
41257
41258(define-public python-ujson
41259 (package
41260 (name "python-ujson")
41261 (version "5.10.0")
41262 (source
41263 (origin
41264 (method url-fetch)
41265 (uri (pypi-uri "ujson" version))
41266 (sha256
41267 (base32
41268 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
41269 (modules '((guix build utils)))
41270 (snippet
41271 #~(begin (delete-file-recursively "deps")))))
41272 (build-system pyproject-build-system)
41273 (arguments
41274 (list
41275 #:phases
41276 #~(modify-phases %standard-phases
41277 (add-after 'unpack 'link-to-system-double-conversion
41278 (lambda* (#:key inputs #:allow-other-keys)
41279 (let ((d-c (assoc-ref inputs "double-conversion")))
41280 (substitute* "setup.py"
41281 (("./deps/double-conversion/double-conversion\"")
41282 (string-append d-c "/include/double-conversion\""))
41283 (("-lstdc++" stdc)
41284 (string-append "-L" d-c "/lib\","
41285 " \"-ldouble-conversion\","
41286 " \"" stdc)))))))))
41287 (native-inputs
41288 (list double-conversion
41289 python-pytest
41290 python-setuptools
41291 python-setuptools-scm
41292 python-wheel))
41293 (home-page "https://github.com/ultrajson/ultrajson")
41294 (synopsis "Ultra fast JSON encoder and decoder for Python")
41295 (description
41296 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
41297bindings for Python 3.")
41298 (license license:bsd-3)))
41299
41300(define-public python-ukkonen
41301 (package
41302 (name "python-ukkonen")
41303 (version "1.0.1")
41304 (source
41305 (origin
41306 ;; There are no tests in the PyPI tarball.
41307 (method git-fetch)
41308 (uri (git-reference
41309 (url "https://github.com/asottile/ukkonen")
41310 (commit (string-append "v" version))))
41311 (file-name (git-file-name name version))
41312 (sha256
41313 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
41314 (build-system pyproject-build-system)
41315 (native-inputs (list python-pytest python-setuptools python-wheel))
41316 (propagated-inputs (list python-cffi))
41317 (home-page "https://github.com/asottile/ukkonen")
41318 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
41319 (description "This package is an implementation of of bounded Levenshtein
41320distance (Ukkonen).")
41321 (license license:expat)))
41322
41323(define-public python-ulid
41324 (package
41325 (name "python-ulid")
41326 (version "3.1.0")
41327 (source
41328 (origin
41329 (method git-fetch)
41330 (uri (git-reference
41331 (url "https://github.com/mdomke/python-ulid")
41332 (commit version)))
41333 (file-name (git-file-name name version))
41334 (sha256
41335 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
41336 (build-system pyproject-build-system)
41337 (arguments
41338 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
41339 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
41340 ;; 68 passed, 1 deselected in 2.55s
41341 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
41342 (native-inputs
41343 (list python-freezegun
41344 python-hatch-fancy-pypi-readme
41345 python-hatch-vcs
41346 python-hatchling
41347 python-pytest))
41348 (propagated-inputs
41349 (list python-pydantic))
41350 (home-page "https://github.com/mdomke/python-ulid")
41351 (synopsis "Universally unique lexicographically sortable identifier")
41352 (description
41353 "ULID is a universally unique lexicographically sortable identifier.
41354It is:
41355@itemize
41356@item 128-bit compatible with UUID
41357@item 1.21e+24 unique ULIDs per millisecond
41358@item lexicographically sortable!
41359@item canonically encoded as a 26 character string, as opposed to the 36
41360character UUID
41361@item uses Crockford's base32 for better efficiency and readability (5 bits
41362per character)
41363@item case insensitive
41364@item no special characters (URL safe)
41365@item monotonic sort order (correctly detects and handles the same
41366millisecond)
41367@end itemize")
41368 (license license:expat)))
41369
41370(define-public python-uncertainties
41371 (package
41372 (name "python-uncertainties")
41373 (version "3.2.3")
41374 (source
41375 (origin
41376 (method url-fetch)
41377 (uri (pypi-uri "uncertainties" version))
41378 (sha256
41379 (base32
41380 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
41381 (build-system pyproject-build-system)
41382 (native-inputs
41383 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
41384 (propagated-inputs (list python-numpy))
41385 (home-page "https://uncertainties.readthedocs.io/en/latest/")
41386 (synopsis "Calculations with uncertainties")
41387 (description
41388 "The uncertainties package transparently handles calculations with
41389numbers with uncertainties. It can also yield the derivatives of any
41390expression.")
41391 (license license:bsd-3)))
41392
41393(define-public python-unicode-linebreak
41394 (package
41395 (name "python-unicode-linebreak")
41396 (version "0.0.2")
41397 (source
41398 (origin
41399 (method git-fetch)
41400 (uri (git-reference
41401 (url "https://github.com/mondeja/py-unicode-linebreak")
41402 (commit (string-append "v" version))))
41403 (file-name (git-file-name name version))
41404 (sha256
41405 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
41406 (build-system pyproject-build-system)
41407 (arguments
41408 (list
41409 #:imported-modules `(,@%cargo-build-system-modules
41410 ,@%pyproject-build-system-modules)
41411 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41412 (guix build pyproject-build-system)
41413 (guix build utils))
41414 #:test-backend #~'unittest
41415 #:phases
41416 #~(modify-phases %standard-phases
41417 (add-after 'unpack 'prepare-cargo-build-system
41418 (lambda args
41419 (for-each
41420 (lambda (phase)
41421 (format #t "Running cargo phase: ~a~%" phase)
41422 (apply (assoc-ref cargo:%standard-phases phase)
41423 #:cargo-target #$(cargo-triplet)
41424 args))
41425 '(unpack-rust-crates
41426 configure
41427 check-for-pregenerated-files
41428 patch-cargo-checksums)))))))
41429 (native-inputs
41430 (append
41431 (list maturin
41432 rust
41433 `(,rust "cargo"))
41434 (or (and=> (%current-target-system)
41435 (compose list make-rust-sysroot))
41436 '())))
41437 (inputs (cargo-inputs 'unicode_linebreak))
41438 (home-page "https://github.com/mondeja/py-unicode-linebreak")
41439 (synopsis "Markdown paragraph wrapper")
41440 (description
41441 "This package provides a Markdown paragraph wrapper using Unicode Line
41442Breaking Algorithm written in Rust with Python bindings.")
41443 (license license:expat)))
41444
41445(define-public python-unicodedata2
41446 (package
41447 (name "python-unicodedata2")
41448 (version "16.0.0")
41449 (source
41450 (origin
41451 (method url-fetch)
41452 (uri (pypi-uri "unicodedata2" version))
41453 (sha256
41454 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
41455 (build-system pyproject-build-system)
41456 (native-inputs
41457 (list python-pytest
41458 python-setuptools))
41459 (home-page "https://github.com/fonttools/unicodedata2")
41460 (synopsis "Python unicodedata backport")
41461 (description "This package corresponds to the latest @code{unicodedata}
41462standard Python module.")
41463 (license license:asl2.0)))
41464
41465(define-public python-unicodeitplus
41466 (package
41467 (name "python-unicodeitplus")
41468 (version "0.3.1")
41469 (source
41470 (origin
41471 (method url-fetch)
41472 (uri (pypi-uri "unicodeitplus" version))
41473 (sha256
41474 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
41475 (build-system pyproject-build-system)
41476 (native-inputs
41477 (list python-pytest
41478 python-setuptools
41479 python-setuptools-scm))
41480 (propagated-inputs
41481 (list python-lark))
41482 (home-page "https://github.com/HDembinski/unicodeitplus")
41483 (synopsis "Convert simple LaTeX to an Unicode approximation")
41484 (description
41485 "This package provides a more complete LaTeX to Unicode converter than
41486@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
41487Backus-Naur Form} with the Lark library.")
41488 (license license:bsd-3)))
41489
41490(define-public python-unidecode
41491 (package
41492 (name "python-unidecode")
41493 (version "1.4.0")
41494 (source
41495 (origin
41496 (method url-fetch)
41497 (uri (pypi-uri "Unidecode" version))
41498 (sha256
41499 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
41500 (build-system pyproject-build-system)
41501 (native-inputs
41502 (list python-pytest python-setuptools))
41503 (home-page "https://pypi.org/project/Unidecode/")
41504 (synopsis "ASCII transliterations of Unicode text")
41505 (description
41506 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
41507useful when integrating with legacy code that doesn't support Unicode, or for
41508ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41509machine identifiers from human-readable Unicode strings that should still be
41510somewhat intelligible.")
41511 (license license:gpl2+)))
41512
41513(define-public python-unique-log-filter
41514 (package
41515 (name "python-unique-log-filter")
41516 (version "0.1.0")
41517 (source
41518 (origin
41519 (method git-fetch)
41520 (uri (git-reference
41521 (url "https://github.com/twizmwazin/unique_log_filter")
41522 (commit (string-append "v" version))))
41523 (file-name (git-file-name name version))
41524 (sha256
41525 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41526 (build-system pyproject-build-system)
41527 (arguments
41528 (list #:test-backend #~'custom
41529 #:test-flags #~(list "test_unique_log_filter.py")))
41530 (native-inputs (list python-flit-core))
41531 (home-page "https://github.com/twizmwazin/unique_log_filter")
41532 (synopsis "Log filter that removes duplicate log messages")
41533 (description
41534 "This library provides a filter for the @code{logging} module
41535from the Python standard library which allows removing duplicate log
41536messages.")
41537 (license license:bsd-2)))
41538
41539(define-public python-uniseg
41540 (package
41541 (name "python-uniseg")
41542 (version "0.10.0")
41543 (source
41544 (origin
41545 (method url-fetch)
41546 (uri (pypi-uri "uniseg" version))
41547 (sha256
41548 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41549 (build-system pyproject-build-system)
41550 (native-inputs
41551 (list python-pytest
41552 python-setuptools
41553 python-setuptools-scm))
41554 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41555 (synopsis "Python library to determine Unicode text segmentations")
41556 (description
41557 "Uniseg is a Python package used to determine Unicode text segmentations.
41558Supported segmentations include:
41559@enumerate
41560@item @dfn{Code point} (any value in the Unicode codespace)
41561@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41562multiple Unicode code points, e.g. \"G\" + acute-accent)
41563@item Word break
41564@item Sentence break
41565@item Line break
41566@end enumerate")
41567 (license license:expat)))
41568
41569(define-public python-universal-pathlib
41570 (package
41571 (name "python-universal-pathlib")
41572 (version "0.2.6")
41573 (source
41574 (origin
41575 (method git-fetch)
41576 (uri (git-reference
41577 (url "https://github.com/fsspec/universal_pathlib")
41578 (commit (string-append "v" version))))
41579 (file-name (git-file-name name version))
41580 (sha256
41581 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41582 (build-system pyproject-build-system)
41583 (arguments
41584 (list
41585 #:tests? #f)) ;requires network
41586 (native-inputs
41587 (list python-setuptools
41588 python-setuptools-scm))
41589 (propagated-inputs
41590 (list python-fsspec
41591 python-pathlib-abc))
41592 (home-page "https://github.com/fsspec/universal_pathlib")
41593 (synopsis
41594 "@code{pathlib} API extended to use @code{fsspec} backends")
41595 (description
41596 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41597API to support a variety of backend filesystems via filesystem_spec.")
41598 (license license:expat)))
41599
41600(define-public python-unpaddedbase64
41601 (package
41602 (name "python-unpaddedbase64")
41603 (version "2.1.0")
41604 (source
41605 (origin
41606 (method git-fetch)
41607 (uri (git-reference
41608 (url "https://github.com/matrix-org/python-unpaddedbase64")
41609 (commit (string-append "v" version))))
41610 (file-name (git-file-name name version))
41611 (sha256
41612 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41613 (build-system pyproject-build-system)
41614 (native-inputs (list python-poetry-core
41615 python-pytest
41616 python-setuptools
41617 python-wheel))
41618 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41619 (synopsis "Encode and decode Base64 without “=” padding")
41620 (description
41621 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41622using “=” characters. However this conveys no benefit so many protocols
41623choose to use Base64 without the “=” padding.")
41624 (license license:asl2.0)))
41625
41626(define-public python-update-checker
41627 (package
41628 (name "python-update-checker")
41629 (version "0.18.0")
41630 (source
41631 (origin
41632 (method url-fetch)
41633 (uri (pypi-uri "update-checker" version))
41634 (sha256
41635 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41636 (build-system pyproject-build-system)
41637 (native-inputs
41638 (list python-pytest
41639 python-setuptools))
41640 (propagated-inputs
41641 (list python-requests))
41642 (home-page "https://github.com/bboe/update_checker")
41643 (synopsis "Python module that will check for package updates")
41644 (description "This package provides a Python module that will check for
41645package updates.")
41646 (license license:bsd-2)))
41647
41648(define-public python-uri-template
41649 (package
41650 (name "python-uri-template")
41651 (version "1.3.0")
41652 (source
41653 (origin
41654 (method git-fetch)
41655 (uri (git-reference
41656 (url "https://gitlab.linss.com/open-source/python/uri-template")
41657 (commit (string-append "v" version))))
41658 (file-name (git-file-name name version))
41659 (sha256
41660 (base32 "0z1g5hpxzi5rh4xsra6bsvyg5qzmnx7a8j5q7rngmj9slcbcbhfz"))))
41661 (build-system pyproject-build-system)
41662 (arguments
41663 (list
41664 #:test-backend #~'custom
41665 #:test-flags #~(list "test.py")))
41666 (native-inputs
41667 (list python-setuptools
41668 python-setuptools-scm))
41669 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41670 (synopsis "RFC 6570 URI Template Processor")
41671 (description "This package implements URI Template expansion in strict
41672adherence to RFC 6570, but adds a few extensions.")
41673 (license license:expat)))
41674
41675(define-public python-uritools
41676 (package
41677 (name "python-uritools")
41678 (version "6.0.1")
41679 (source
41680 (origin
41681 (method git-fetch)
41682 (uri (git-reference
41683 (url "https://github.com/tkem/uritools/")
41684 (commit (string-append "v" version))))
41685 (file-name (git-file-name name version))
41686 (sha256
41687 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41688 (build-system pyproject-build-system)
41689 (native-inputs
41690 (list python-pytest
41691 python-setuptools))
41692 (home-page "https://github.com/tkem/uritools/")
41693 (synopsis "URI parsing, classification and composition")
41694 (description
41695 "This package provides RFC 3986 compliant functions for parsing,
41696classifying and composing URIs and URI references, largely replacing the
41697Python Standard Library's urllib.parse module.")
41698 (license license:expat)))
41699
41700(define-public python-urwid
41701 (package
41702 (name "python-urwid")
41703 (version "3.0.3")
41704 (source
41705 (origin
41706 (method url-fetch)
41707 (uri (pypi-uri "urwid" version))
41708 (sha256
41709 (base32
41710 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41711 (build-system pyproject-build-system)
41712 (arguments
41713 (list
41714 #:test-flags
41715 #~(list "tests"
41716 ;; According to Debian these tests are cursed.
41717 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41718 "--ignore=tests/test_vterm.py")))
41719 (native-inputs
41720 (list python-pytest python-setuptools python-setuptools-scm))
41721 (propagated-inputs
41722 (list python-wcwidth
41723 ;; [optional]
41724 python-pygobject
41725 python-pyzmq
41726 python-tornado
41727 python-pyserial
41728 python-twisted))
41729 (home-page "https://urwid.org")
41730 (synopsis "Console user interface library for Python")
41731 (description
41732 "Urwid is a curses-based UI/widget library for Python. It includes many
41733features useful for text console applications.")
41734 (license license:lgpl2.1+)))
41735
41736(define-public python-urwid-2
41737 (package
41738 (inherit python-urwid)
41739 (name "python-urwid")
41740 (version "2.6.16")
41741 (source
41742 (origin
41743 (method url-fetch)
41744 (uri (pypi-uri "urwid" version))
41745 (sha256
41746 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41747
41748(define-deprecated/public-alias python-urwid-3
41749 python-urwid) ;may be removed after 2025-11-12
41750
41751(define-public python-urwid-for-zulip-term
41752 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41753 ;; to pass, remove when no longer required.
41754 (hidden-package
41755 (package
41756 (inherit python-urwid)
41757 (version "2.1.2")
41758 (source
41759 (origin
41760 (method url-fetch)
41761 (uri (pypi-uri "urwid" version))
41762 (sha256
41763 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41764 (arguments
41765 (list #:tests? #f)))))
41766
41767(define-public python-urwid-readline
41768 (package
41769 (name "python-urwid-readline")
41770 (version "0.15.1")
41771 (source
41772 (origin
41773 (method git-fetch)
41774 (uri (git-reference
41775 (url "https://github.com/rr-/urwid_readline")
41776 (commit version)))
41777 (file-name (git-file-name name version))
41778 (sha256
41779 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41780 (build-system pyproject-build-system)
41781 (native-inputs
41782 (list python-pytest
41783 python-setuptools))
41784 (propagated-inputs
41785 (list python-urwid))
41786 (home-page "https://github.com/rr-/urwid_readline")
41787 (synopsis "Text input widget for urwid that supports readline shortcuts")
41788 (description
41789 "This package provides a textbox edit widget for @code{python-urwid} that
41790supports @code{readline} shortcuts.")
41791 (license license:expat)))
41792
41793(define-public python-urwidgets
41794 (package
41795 (name "python-urwidgets")
41796 (version "0.2.1")
41797 (source
41798 (origin
41799 (method url-fetch)
41800 (uri (pypi-uri "urwidgets" version))
41801 (sha256
41802 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41803 (build-system pyproject-build-system)
41804 (arguments
41805 (list #:tests? #f)) ;no tests
41806 (native-inputs
41807 (list python-setuptools))
41808 (propagated-inputs
41809 (list python-urwid-2))
41810 (home-page "https://github.com/AnonymouX47/urwidgets")
41811 (synopsis "Collection of widgets for urwid")
41812 (description
41813 "This package provides a collection of widgets for urwid.")
41814 (license license:expat)))
41815
41816(define-public python-urwidtrees
41817 (package
41818 (name "python-urwidtrees")
41819 (version "1.0.4")
41820 (source
41821 (origin
41822 (method git-fetch)
41823 ;; package author intends on distributing via github rather than pypi:
41824 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41825 (uri (git-reference
41826 (url "https://github.com/pazz/urwidtrees")
41827 (commit version)))
41828 (file-name (git-file-name name version))
41829 (sha256
41830 (base32
41831 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41832 (build-system pyproject-build-system)
41833 (arguments
41834 '(#:tests? #f)) ; no tests
41835 (propagated-inputs (list python-urwid))
41836 (native-inputs (list python-mock python-setuptools python-wheel))
41837 (home-page "https://github.com/pazz/urwidtrees")
41838 (synopsis "Tree widgets for urwid")
41839 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41840toolkit. Use it to build trees of widgets.")
41841 (license license:gpl3+)))
41842
41843(define-public python-user-agents
41844 (package
41845 (name "python-user-agents")
41846 (version "2.2.0")
41847 (source
41848 (origin
41849 (method git-fetch)
41850 (uri (git-reference
41851 (url "https://github.com/selwin/python-user-agents")
41852 (commit (string-append "v" version))))
41853 (file-name (git-file-name name version))
41854 (sha256
41855 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41856 (build-system pyproject-build-system)
41857 (arguments
41858 (list #:test-backend #~'unittest))
41859 (native-inputs
41860 (list python-setuptools))
41861 (propagated-inputs
41862 (list python-ua-parser))
41863 (home-page "https://github.com/selwin/python-user-agents")
41864 (synopsis "User Agent strings parsing library")
41865 (description
41866 "A library to identify devices (phones, tablets) and their capabilities by
41867parsing (browser/HTTP) user agent strings.")
41868 (license license:expat)))
41869
41870(define-public python-userpath
41871 (package
41872 (name "python-userpath")
41873 (version "1.9.2")
41874 (source
41875 (origin
41876 (method url-fetch)
41877 (uri (pypi-uri "userpath" version))
41878 (sha256
41879 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41880 (build-system pyproject-build-system)
41881 (arguments
41882 ;; See https://github.com/ofek/userpath/issues/43.
41883 ;; In Guix, tests try to find the temporary build directory in PATH, but
41884 ;; only the store output is present.
41885 (list #:tests? #f))
41886 (native-inputs (list python-hatchling python-pytest))
41887 (propagated-inputs (list python-click))
41888 (home-page "https://github.com/ofek/userpath")
41889 (synopsis "Add locations to the user's PATH")
41890 (description "This package provides a tool for modifying a user's PATH.")
41891 (license license:expat)))
41892
41893(define-public python-userspacefs
41894 (package
41895 (name "python-userspacefs")
41896 (version "3.2.1")
41897 (source
41898 (origin
41899 (method url-fetch)
41900 (uri (pypi-uri "userspacefs" version))
41901 (sha256
41902 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41903 (build-system pyproject-build-system)
41904 (arguments
41905 (list #:tests? #f ;no tests
41906 #:phases
41907 #~(modify-phases %standard-phases
41908 (add-after 'unpack 'hardcode-libfuse
41909 (lambda* (#:key inputs #:allow-other-keys)
41910 (substitute* "userspacefs/fusepy.py"
41911 (("^_libfuse_path.*")
41912 (string-append "_libfuse_path = '"
41913 (search-input-file inputs "lib/libfuse3.so")
41914 "'\n"))))))))
41915 (inputs (list fuse))
41916 (native-inputs (list python-setuptools))
41917 (propagated-inputs (list python-aiohttp python-typing-extensions))
41918 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41919 (synopsis "User-space file systems for Python")
41920 (description
41921 "@code{userspacefs} is a library that allows you to easily write
41922user-space file systems in Python.")
41923 (license license:gpl3+)))
41924
41925(define-public python-utils
41926 (package
41927 (name "python-utils")
41928 (version "3.9.1")
41929 (source
41930 (origin
41931 (method url-fetch)
41932 (uri (pypi-uri "python_utils" version))
41933 (sha256
41934 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41935 (build-system pyproject-build-system)
41936 (native-inputs
41937 (list python-pytest
41938 python-pytest-asyncio
41939 python-setuptools))
41940 (propagated-inputs
41941 (list python-loguru
41942 python-typing-extensions))
41943 (home-page "https://github.com/WoLpH/python-utils")
41944 (synopsis "Convenient utilities not included with the standard Python install")
41945 (description
41946 "Python Utils is a collection of small Python functions and classes
41947which make common patterns shorter and easier.")
41948 (license license:bsd-2)))
41949
41950(define-public python-uuid6
41951 (package
41952 (name "python-uuid6")
41953 (version "2025.0.1")
41954 (source
41955 (origin
41956 (method git-fetch)
41957 (uri (git-reference
41958 (url "https://github.com/oittaa/uuid6-python")
41959 (commit version)))
41960 (file-name (git-file-name name version))
41961 (sha256
41962 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41963 (build-system pyproject-build-system)
41964 (arguments
41965 (list
41966 #:test-flags
41967 ;; Test is time based: AssertionError: 13987034766.015247 !=
41968 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41969 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41970 (native-inputs
41971 (list python-pytest
41972 python-setuptools
41973 python-setuptools-scm))
41974 (home-page "https://github.com/oittaa/uuid6-python")
41975 (synopsis "Time-based UUID formats which are suited for use as a database key")
41976 (description
41977 "This module extends immutable UUID objects (the UUID class) with the
41978functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41979@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41980 (license license:expat)))
41981
41982(define-public python-validate-email
41983 (package
41984 (name "python-validate-email")
41985 (version "1.3")
41986 (source
41987 (origin
41988 (method url-fetch)
41989 (uri (pypi-uri "validate_email" version))
41990 (sha256
41991 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41992 (build-system pyproject-build-system)
41993 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41994 (native-inputs
41995 (list python-setuptools))
41996 (home-page "https://github.com/syrusakbary/validate_email")
41997 (synopsis "Verifies if an email address is valid and really exists")
41998 (description
41999 "@code{validate_email} can be used to verify if an email address is
42000valid and really exists.")
42001 (license license:lgpl3+)))
42002
42003(define-public python-validators
42004 ;; TODO: Move to (gnu packages python-web) or (gnu packages python-crypto).
42005 (package
42006 (name "python-validators")
42007 (version "0.35.0")
42008 (source
42009 (origin
42010 (method git-fetch)
42011 (uri (git-reference
42012 (url "https://github.com/kvesteri/validators")
42013 (commit version)))
42014 (file-name (git-file-name name version))
42015 (sha256
42016 (base32 "1q4mhcr10f22f8lwbsplhjyy0m3axddawd3mcax7qzm6p8lj6ybg"))))
42017 (build-system pyproject-build-system)
42018 (native-inputs
42019 (list python-pytest
42020 python-setuptools))
42021 (propagated-inputs
42022 (list python-eth-hash))
42023 (home-page "https://github.com/kvesteri/validators")
42024 (synopsis "Data validation library")
42025 (description
42026 "This package contains validators for different things such as email
42027addresses, IP addresses, URLs, hashes and more. It has been designed to be
42028easy to use and not require defining a schema or form just to validate some
42029input.")
42030 (license license:expat)))
42031
42032(define-public python-valkey
42033 (package
42034 (name "python-valkey")
42035 (version "6.1.1")
42036 (source
42037 (origin
42038 (method git-fetch)
42039 (uri (git-reference
42040 (url "https://github.com/valkey-io/valkey-py")
42041 (commit (string-append "v" version))))
42042 (file-name (git-file-name name version))
42043 (sha256
42044 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
42045 (build-system pyproject-build-system)
42046 (arguments
42047 ;; XXX: A lot of tests fail with ConnectionError
42048 ;; Maybe we need to spawn a valkey server?
42049 (list #:tests? #f))
42050 (native-inputs
42051 (list python-setuptools))
42052 (home-page "https://github.com/valkey-io/valkey-py")
42053 (synopsis "Python client for Valkey")
42054 (description
42055 "This package provides a python client for the @code{Valkey} key-value
42056store, forked from redis-py.")
42057 (license license:expat)))
42058
42059;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
42060;; package.
42061(define-public python-vcversioner
42062 (package
42063 (name "python-vcversioner")
42064 (version "2.16.0.0")
42065 (source
42066 (origin
42067 (method url-fetch)
42068 (uri (pypi-uri "vcversioner" version))
42069 (sha256
42070 (base32
42071 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
42072 (build-system pyproject-build-system)
42073 (arguments
42074 (list #:tests? #f)) ;no tests in PyPI archive
42075 (native-inputs
42076 (list python-setuptools))
42077 (home-page "https://github.com/habnabit/vcversioner")
42078 (synopsis "Python library for version number discovery")
42079 (description
42080 "Vcversioner is a Python library that inspects tagging information in a
42081variety of version control systems in order to discover version numbers.")
42082 (license license:isc)))
42083
42084(define-public python-vdf
42085 (package
42086 (name "python-vdf")
42087 (version "3.4")
42088 (source
42089 (origin
42090 (method git-fetch) ; no tests in PyPI release
42091 (uri (git-reference
42092 (url "https://github.com/ValvePython/vdf")
42093 (commit (string-append "v" version))))
42094 (file-name (git-file-name name version))
42095 (sha256
42096 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
42097 (build-system pyproject-build-system)
42098 (native-inputs
42099 (list python-pytest python-setuptools))
42100 (home-page "https://github.com/ValvePython/vdf")
42101 (synopsis "Work with Valve's VDF text format")
42102 (description
42103 "This package provides @code{python-vdf}, a library for working with
42104 Valve's VDF text format.")
42105 (license license:expat)))
42106
42107(define-public python-vendetect
42108 (package
42109 (name "python-vendetect")
42110 (version "0.0.3")
42111 (source
42112 (origin
42113 (method url-fetch)
42114 (uri (pypi-uri "vendetect" version))
42115 (sha256
42116 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
42117 (build-system pyproject-build-system)
42118 (propagated-inputs (list python-copydetect python-rich))
42119 (native-inputs (list python-hatchling python-pytest))
42120 (home-page "https://github.com/trailofbits/vendetect")
42121 (synopsis "Detect vendored and copy-pasted code")
42122 (description
42123 "Vendetect helps identify copied or vendored code between repositories,
42124making it easier to detect when code has been copied with or without
42125attribution. It uses similarity detection algorithms to compare code files
42126and highlight matching sections.")
42127 (license license:agpl3+)))
42128
42129;; XXX: No updates since 2017.
42130(define-public python-verboselogs
42131 (package
42132 (name "python-verboselogs")
42133 (version "1.7")
42134 (source
42135 (origin
42136 (method url-fetch)
42137 (uri (pypi-uri "verboselogs" version))
42138 (sha256
42139 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
42140 (build-system pyproject-build-system)
42141 (arguments
42142 (list
42143 #:test-flags
42144 ;; Do not run pylint plugin test, as astroid is an old unsupported
42145 ;; version.
42146 #~(list "-k" "not test_pylint_plugin"
42147 "verboselogs/tests.py")))
42148 (native-inputs
42149 (list python-mock
42150 python-pytest
42151 python-setuptools))
42152 (home-page "https://verboselogs.readthedocs.io")
42153 (synopsis "Verbose logging level for Python's logging module")
42154 (description
42155 "The @code{verboselogs} package extends Python's @code{logging} module to
42156add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
42157 (license license:expat)))
42158
42159(define-public python-verlib2
42160 (package
42161 (name "python-verlib2")
42162 (version "0.3.1")
42163 (source
42164 (origin
42165 (method git-fetch)
42166 (uri (git-reference
42167 (url "https://github.com/pyveci/verlib2")
42168 (commit (string-append "v" version))))
42169 (file-name (git-file-name name version))
42170 (sha256
42171 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
42172 (build-system pyproject-build-system)
42173 (native-inputs
42174 (list python-pretend python-pytest python-setuptools))
42175 (home-page "https://github.com/pyveci/verlib2")
42176 (synopsis "Python versioning utilities")
42177 (description
42178 "This package provides a standalone variant of @code{distutils.version} and
42179@code{packaging.version}, without anything else.")
42180 (license license:bsd-2)))
42181
42182;; XXX: No updates since 2018, consider to remove when fails to build, it's a
42183;; leaf package.
42184(define-public python-version
42185 ;; No version tags available in the git repo; just using bare commit instead.
42186 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
42187 (revision "1"))
42188 (package
42189 (name "python-version")
42190 (version (git-version "0.0.2" revision commit))
42191 (source
42192 (origin
42193 (method git-fetch)
42194 (uri (git-reference
42195 (url "https://gitlab.com/halfak/python_version")
42196 (commit commit)))
42197 (file-name (git-file-name name version))
42198 (sha256
42199 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
42200 (build-system pyproject-build-system)
42201 (arguments
42202 (list #:tests? #f)) ;no tests
42203 (native-inputs
42204 (list python-setuptools))
42205 (home-page "https://gitlab.com/halfak/python_version")
42206 (synopsis "Python version checking utility")
42207 (description
42208 "This package provides a simple utility for checking the python version.")
42209 (license license:expat))))
42210
42211(define-public python-versioneer
42212 (package
42213 (name "python-versioneer")
42214 (version "0.29")
42215 (source
42216 (origin
42217 (method url-fetch)
42218 (uri (pypi-uri "versioneer" version))
42219 (sha256
42220 (base32
42221 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
42222 (patches (search-patches "python-versioneer-guix-support.patch"))))
42223 (build-system pyproject-build-system)
42224 (arguments
42225 (list
42226 ;; Minimize test requirements.
42227 #:test-flags
42228 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
42229 "--ignore=test/git/test_invocations.py"
42230 "--ignore=test/test_render.py")
42231 #:phases
42232 #~(modify-phases %standard-phases
42233 (add-before 'check 'pre-check
42234 (lambda _
42235 (invoke "python" "setup.py" "make_versioneer"
42236 "make_long_version_py_git"))))))
42237 (native-inputs
42238 (list git-minimal/pinned
42239 python-pytest
42240 python-setuptools))
42241 (propagated-inputs
42242 (list python-tomli))
42243 (home-page "https://github.com/python-versioneer/python-versioneer")
42244 (synopsis "Version-string management for VCS-controlled trees")
42245 (description
42246 "@code{versioneer} is a tool for managing a recorded version number in
42247distutils-based python projects. The goal is to remove the tedious and
42248error-prone \"update the embedded version string\" step from your release
42249process.")
42250 (license license:unlicense)))
42251
42252(define-public python-verspec
42253 (package
42254 (name "python-verspec")
42255 (version "0.1.0")
42256 (source
42257 (origin
42258 (method url-fetch)
42259 (uri (pypi-uri "verspec" version))
42260 (sha256
42261 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
42262 (build-system pyproject-build-system)
42263 (arguments
42264 (list
42265 #:phases
42266 #~(modify-phases %standard-phases
42267 (add-before 'check 'pre-check
42268 (lambda _
42269 (invoke "touch" "test/__init__.py"))))))
42270 (native-inputs
42271 (list python-pretend
42272 python-pytest
42273 python-setuptools))
42274 (home-page "https://github.com/jimporter/verspec")
42275 (synopsis "Flexible version handling for Python")
42276 (description
42277 "This Python library handles software versions and specifiers. It is
42278adapted from the @code{packaging} package.")
42279 (license (list license:bsd-2 license:asl2.0))))
42280
42281(define-public python-vine
42282 (package
42283 (name "python-vine")
42284 (version "5.1.0")
42285 (source
42286 (origin
42287 (method url-fetch)
42288 (uri (pypi-uri "vine" version))
42289 (sha256
42290 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
42291 (build-system pyproject-build-system)
42292 (arguments
42293 (list
42294 #:test-flags
42295 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
42296 #~(list "-k" (string-join
42297 (list "not test_evaluate"
42298 "test_reverse"
42299 "test_cancel"
42300 "test_throw")
42301 " and not "))))
42302 (native-inputs
42303 (list python-pytest python-setuptools python-wheel))
42304 (home-page "https://github.com/celery/vine")
42305 (synopsis "Promises for Python")
42306 (description
42307 "@code{vine} provides a special implementation of promises in that it can
42308be used both for \"promise of a value\" and lazy evaluation. The biggest
42309upside for this is that everything in a promise can also be a promise,
42310e.g. filters, callbacks and errbacks can all be promises.")
42311 (license license:bsd-3)))
42312
42313(define-public python-virtualenv
42314 (package
42315 (name "python-virtualenv")
42316 (version "20.35.4")
42317 (source
42318 (origin
42319 (method git-fetch)
42320 (uri (git-reference
42321 (url "https://github.com/pypa/virtualenv")
42322 (commit version)))
42323 (file-name (git-file-name name version))
42324 (sha256
42325 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
42326 (build-system pyproject-build-system)
42327 (arguments
42328 (list
42329 ;; tests: 347 passed, 43 skipped, 8 deselected
42330 #:test-flags
42331 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
42332 (string-join ls "::")))
42333 '(("discovery/py_info/test_py_info.py"
42334 "test_fallback_existent_system_executable")
42335 ("discovery/test_discovery.py"
42336 "test_get_paths_no_path_env")
42337 ("create/via_global_ref/test_build_c_ext.py"
42338 "test_can_build_c_extensions[cpython3-posix]")
42339 ("create/via_global_ref/test_build_c_ext.py"
42340 "test_can_build_c_extensions[venv]")
42341 ("create/test_creator.py"
42342 "test_create_distutils_cfg[cpython3-posix]")
42343 ("create/test_creator.py"
42344 "test_create_distutils_cfg[venv]")
42345 ("seed/embed/test_bootstrap_link_via_app_data.py"
42346 "test_seed_link_via_app_data[True]")
42347 ("seed/embed/test_bootstrap_link_via_app_data.py"
42348 "test_seed_link_via_app_data[False]"))))))
42349 (native-inputs
42350 (list python-flaky
42351 python-hatch-vcs
42352 python-hatchling
42353 python-packaging
42354 python-pytest
42355 python-pytest-env
42356 python-pytest-freezer
42357 python-pytest-mock
42358 python-pytest-timeout
42359 python-setuptools
42360 python-time-machine))
42361 (propagated-inputs
42362 (list python-distlib
42363 python-filelock
42364 python-platformdirs))
42365 (home-page "https://virtualenv.pypa.io/")
42366 (synopsis "Virtual Python environment builder")
42367 (description
42368 "Virtualenv is a tool to create isolated Python environments.")
42369 (license license:expat)))
42370
42371(define-public python-vncdotool
42372 (package
42373 (name "python-vncdotool")
42374 (version "1.2.0")
42375 (source
42376 (origin
42377 (method git-fetch)
42378 (uri (git-reference
42379 (url "http://github.com/sibson/vncdotool")
42380 (commit (string-append "v" version))))
42381 (file-name (git-file-name name version))
42382 (sha256
42383 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
42384 (build-system pyproject-build-system)
42385 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
42386 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
42387 python-setuptools python-wheel))
42388 (home-page "http://github.com/sibson/vncdotool")
42389 (synopsis "Command line VNC client")
42390 (description
42391 "This package provides a Python command line VNC client. It can be
42392useful to automating interactions with virtual machines or hardware devices
42393that are otherwise difficult to control.")
42394 (license license:expat)))
42395
42396(define-public python-vncdotool-bootstrap
42397 (hidden-package
42398 (package/inherit python-vncdotool
42399 (arguments (list #:tests? #f))
42400 (native-inputs (list python-pexpect python-pytest python-setuptools
42401 python-wheel)))))
42402
42403(define-public python-vobject
42404 (package
42405 (name "python-vobject")
42406 (version "0.9.9")
42407 (source (origin
42408 (method url-fetch)
42409 (uri (pypi-uri "vobject" version))
42410 (sha256
42411 (base32
42412 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
42413 (build-system pyproject-build-system)
42414 (arguments
42415 '(;; The test suite relies on some non-portable Windows interfaces. Tests
42416 ;; are rewokred on master's HEAD.
42417 #:tests? #f))
42418 (native-inputs
42419 (list python-setuptools))
42420 (propagated-inputs
42421 (list python-dateutil
42422 python-pytz
42423 python-six)) ;it's dropped on master's HEAD
42424 (home-page "https://py-vobject.github.io/")
42425 (synopsis "Parse and generate vCard and vCalendar files")
42426 (description
42427 "Vobject is intended to be a full featured Python package for parsing
42428and generating vCard and vCalendar files. Currently, iCalendar files are
42429supported and well tested. vCard 3.0 files are supported, and all data should
42430be imported, but only a few components are understood in a sophisticated way.")
42431 (license license:asl2.0)))
42432
42433(define-public python-voluptuous
42434 (package
42435 (name "python-voluptuous")
42436 (version "0.15.2")
42437 (source
42438 (origin
42439 (method url-fetch)
42440 (uri (pypi-uri "voluptuous" version))
42441 (sha256
42442 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
42443 (build-system pyproject-build-system)
42444 (native-inputs
42445 (list python-pytest
42446 python-setuptools))
42447 (home-page "https://github.com/alecthomas/voluptuous")
42448 (synopsis "Python data validation library")
42449 (description
42450 "Voluptuous is a Python data validation library. It is primarily
42451intended for validating data coming into Python as JSON, YAML, etc.")
42452 (license license:bsd-3)))
42453
42454(define-public python-wadler-lindig
42455 (package
42456 (name "python-wadler-lindig")
42457 (version "0.1.7")
42458 (source
42459 (origin
42460 ;; GitHub includes the tests, unlike the PyPI tarball
42461 (method git-fetch)
42462 (uri (git-reference
42463 (url "https://github.com/patrick-kidger/wadler_lindig")
42464 (commit (string-append "v" version))))
42465 (file-name (git-file-name name version))
42466 (sha256
42467 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
42468 (build-system pyproject-build-system)
42469 (native-inputs (list python-hatchling python-pytest python-numpy))
42470 (home-page "https://docs.kidger.site/wadler_lindig")
42471 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
42472 (description
42473 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
42474library for Python that implements a simplified version of the Wadler-Lindig
42475algorithm. Designed to consume less horizontal space than Python's
42476built-in pprint.pprint, it produces compact, well-formatted representations
42477even for complex custom types.")
42478 (license license:asl2.0)))
42479
42480(define-public python-wand
42481 (package
42482 (name "python-wand")
42483 (version "0.7.2")
42484 (source
42485 (origin
42486 (method git-fetch)
42487 (uri (git-reference
42488 (url "https://github.com/emcconville/wand")
42489 (commit version)))
42490 (file-name (git-file-name name version))
42491 (sha256
42492 (base32 "0h6r9mk66w5wk8g2rfx6rlh26dvkix2rr08kv38bmqvg34kjz6fm"))))
42493 (build-system pyproject-build-system)
42494 (arguments
42495 (list
42496 #:phases
42497 #~(modify-phases %standard-phases
42498 (add-after 'unpack 'hardcode-lib-path
42499 (lambda _
42500 (substitute* "wand/api.py"
42501 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42502 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42503 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42504 "\".Q16\"")))))))
42505 (native-inputs
42506 (list python-setuptools python-pytest))
42507 (inputs
42508 (list imagemagick))
42509 (home-page "https://docs.wand-py.org/")
42510 (synopsis "MagickWand API binding for Python")
42511 (description
42512 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42513 (license license:expat)))
42514
42515(define-public python-wasabi
42516 (package
42517 (name "python-wasabi")
42518 (version "1.1.3")
42519 (source
42520 (origin
42521 (method url-fetch)
42522 (uri (pypi-uri "wasabi" version))
42523 (sha256
42524 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42525 (build-system pyproject-build-system)
42526 (arguments
42527 (list
42528 #:test-flags
42529 ;; Test requires nbconvert which is huge.
42530 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42531 (native-inputs
42532 (list python-pytest
42533 python-setuptools))
42534 (propagated-inputs
42535 (list python-colorama))
42536 (home-page "https://github.com/ines/wasabi")
42537 (synopsis "Console printing and formatting toolkit")
42538 (description
42539 "This package provides a lightweight console printing and formatting
42540toolkit for Python.")
42541 (license license:expat)))
42542
42543(define-public python-watchdog
42544 (package
42545 (name "python-watchdog")
42546 (version "6.0.0")
42547 (source
42548 (origin
42549 (method url-fetch)
42550 (uri (pypi-uri "watchdog" version))
42551 (sha256
42552 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42553 (build-system pyproject-build-system)
42554 (arguments
42555 (list
42556 #:test-flags
42557 #~(list "-k" (string-join
42558 (list "not test_kill_auto_restart"
42559 "test_auto_restart_on_file_change_debounce"
42560 ;; Fails with too many open files.
42561 "test_select_fd")
42562 " and not "))))
42563 (native-inputs
42564 (list python-pytest python-setuptools))
42565 (propagated-inputs
42566 (list python-pyyaml))
42567 (home-page "https://github.com/gorakhargosh/watchdog")
42568 (synopsis "File system events monitoring")
42569 (description
42570 "This package provides a way to monitor file system events such as a file
42571modification and trigger an action. This is similar to inotify, but
42572portable.")
42573 (license license:asl2.0)))
42574
42575(define-public python-watchfiles
42576 (package
42577 (name "python-watchfiles")
42578 (version "1.1.1")
42579 (source
42580 (origin
42581 (method git-fetch)
42582 (uri (git-reference
42583 (url "https://github.com/samuelcolvin/watchfiles")
42584 (commit (string-append "v" version))))
42585 (file-name (git-file-name name version))
42586 (sha256
42587 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42588 (build-system pyproject-build-system)
42589 (arguments
42590 (list
42591 ;; Missing file in source.
42592 #:test-flags ''("-k" "not test_docs_examples")
42593 #:imported-modules `(,@%cargo-build-system-modules
42594 ,@%pyproject-build-system-modules)
42595 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42596 (guix build pyproject-build-system)
42597 (guix build utils))
42598 #:phases
42599 #~(modify-phases %standard-phases
42600 (add-after 'unpack 'prepare-cargo-build-system
42601 (lambda args
42602 (for-each
42603 (lambda (phase)
42604 (format #t "Running cargo phase: ~a~%" phase)
42605 (apply (assoc-ref cargo:%standard-phases phase)
42606 #:cargo-target #$(cargo-triplet)
42607 args))
42608 '(unpack-rust-crates
42609 configure
42610 check-for-pregenerated-files
42611 patch-cargo-checksums))))
42612 (add-after 'build 'install-rust-library
42613 (lambda _
42614 (copy-file "target/release/lib_rust_notify.so"
42615 "watchfiles/_rust_notify.so"))))))
42616 (native-inputs
42617 (append
42618 (list maturin
42619 python-anyio
42620 python-dirty-equals
42621 python-pytest
42622 python-pytest-mock
42623 python-pytest-timeout
42624 rust
42625 `(,rust "cargo"))
42626 (or (and=> (%current-target-system)
42627 (compose list make-rust-sysroot))
42628 '())))
42629 (inputs
42630 (cargo-inputs 'python-watchfiles))
42631 (propagated-inputs
42632 (list python-anyio))
42633 (home-page "https://github.com/samuelcolvin/watchfiles")
42634 (synopsis "Simple, modern file watching and code reload in Python")
42635 (description
42636 "Simple, modern file watching and code reload in Python inspired by
42637@code{watchdog}. Among the differences are a unified approach for each
42638operating systems and an elegant approach to concurrency using threading.")
42639 (license license:expat)))
42640
42641(define-public python-wcmatch
42642 (package
42643 (name "python-wcmatch")
42644 (version "10.1")
42645 (source
42646 (origin
42647 (method git-fetch)
42648 (uri (git-reference
42649 (url "https://github.com/facelessuser/wcmatch")
42650 (commit version)))
42651 (file-name (git-file-name name version))
42652 (sha256
42653 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42654 (build-system pyproject-build-system)
42655 (arguments
42656 (list #:test-flags
42657 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42658 ;; the build directory which the sandbox does not permit.
42659 #~(list "-k" "not test_glob_match_real_outside_curdir")
42660 #:phases
42661 #~(modify-phases %standard-phases
42662 (add-before 'check 'set-home
42663 (lambda _
42664 (setenv "HOME" (getcwd)))))))
42665 (native-inputs
42666 (list python-hatchling
42667 python-pytest))
42668 (propagated-inputs
42669 (list python-bracex))
42670 (home-page "https://facelessuser.github.io/wcmatch/")
42671 (synopsis "Wildcard and glob file name matcher")
42672 (description
42673 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42674@code{pathlib} library. It adds features such as brace expansion,extended
42675glob patterns, and recursive globbing with configurable behavior.")
42676 (license license:expat)))
42677
42678(define-public python-wcwidth
42679 (package
42680 (name "python-wcwidth")
42681 (version "0.2.13")
42682 (source (origin
42683 (method url-fetch)
42684 (uri (pypi-uri "wcwidth" version))
42685 (sha256
42686 (base32
42687 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42688 (build-system pyproject-build-system)
42689 (native-inputs (list python-pytest python-setuptools))
42690 (home-page "https://github.com/jquast/wcwidth")
42691 (synopsis "Measure number of terminal column cells of wide-character codes")
42692 (description
42693 "Wcwidth measures the number of terminal column cells of wide-character
42694codes. It is useful for those implementing a terminal emulator, or programs
42695that carefully produce output to be interpreted by one. It is a Python
42696implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42697in POSIX.1-2001 and POSIX.1-2008.")
42698 (license license:expat)))
42699
42700(define-public python-whatever
42701 (package
42702 (name "python-whatever")
42703 (version "0.7")
42704 (source
42705 (origin
42706 (method git-fetch)
42707 (uri (git-reference
42708 (url "https://github.com/Suor/whatever")
42709 (commit version)))
42710 (file-name (git-file-name name version))
42711 (sha256
42712 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42713 (build-system pyproject-build-system)
42714 (native-inputs
42715 (list python-pytest python-setuptools python-wheel))
42716 (home-page "https://github.com/Suor/whatever")
42717 (synopsis "Make anonymous functions by partial application of operators")
42718 (description "@code{whatever} provides an easy way to make anonymous
42719functions by partial application of operators.")
42720 (license license:bsd-3)))
42721
42722(define-public python-whatthepatch
42723 (package
42724 (name "python-whatthepatch")
42725 (version "1.0.7")
42726 (source
42727 (origin
42728 (method url-fetch)
42729 (uri (pypi-uri "whatthepatch" version))
42730 (sha256
42731 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42732 (build-system pyproject-build-system)
42733 (native-inputs (list python-pytest python-setuptools))
42734 (home-page "https://github.com/cscorley/whatthepatch")
42735 (synopsis "Patch parsing and application library")
42736 (description
42737 "This package provides a patch parsing and application library.")
42738 (license license:expat)))
42739
42740(define-public python-wheel-filename
42741 (package
42742 (name "python-wheel-filename")
42743 (version "1.4.2")
42744 (source
42745 (origin
42746 (method url-fetch)
42747 (uri (pypi-uri "wheel_filename" version))
42748 (sha256
42749 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42750 (build-system pyproject-build-system)
42751 (native-inputs (list python-hatchling python-pytest))
42752 (home-page "https://github.com/wheelodex/wheel-filename")
42753 (synopsis "Parse wheel filenames")
42754 (description
42755 "This software allows you to verify
42756@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42757filenames and parse them into their component fields.
42758
42759This package adheres strictly to the standard, with the following
42760exceptions:
42761
42762@itemize @bullet
42763@item
42764Version components may be any sequence of the relevant set of
42765characters; they are not verified for PEP 440 compliance.
42766@item
42767The @file{.whl} file extension is matched case-insensitively.
42768@end itemize")
42769 (license license:expat)))
42770
42771(define-public python-wheezy-template
42772 (package
42773 (name "python-wheezy-template")
42774 (version "3.2.5")
42775 (source
42776 (origin
42777 (method git-fetch)
42778 (uri (git-reference
42779 (url "https://github.com/akornatskyy/wheezy.template")
42780 (commit version)))
42781 (file-name (git-file-name name version))
42782 (sha256
42783 (base32 "1ky0j2d5znsx4pxb2szbpmxg6qw71134n4x5y22fiiicbbw8bm49"))))
42784 (build-system pyproject-build-system)
42785 (native-inputs (list python-setuptools python-pytest))
42786 (home-page "https://github.com/akornatskyy/wheezy.template")
42787 (synopsis "Lightweight template library")
42788 (description "This package provides a lightweight template library which
42789aims to be compact, expressive, intuitive and fast.")
42790 (license license:expat)))
42791
42792(define-public python-whenever
42793 (package
42794 (name "python-whenever")
42795 (version "0.9.2")
42796 (source
42797 (origin
42798 (method url-fetch)
42799 (uri (pypi-uri "whenever" version))
42800 (sha256
42801 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42802 (build-system pyproject-build-system)
42803 (arguments
42804 (list
42805 ;; tests: 2170 passed, 3 skipped, 2 warnings
42806 #:phases
42807 #~(modify-phases %standard-phases
42808 ;; Use the pure python version
42809 (add-before 'build 'setenv
42810 (lambda _
42811 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42812 (add-before 'check 'set-check-environment
42813 (lambda* (#:key inputs #:allow-other-keys)
42814 (setenv "TZ" "UTC")
42815 (setenv "TZDIR"
42816 (search-input-directory inputs
42817 "share/zoneinfo")))))))
42818 (propagated-inputs
42819 (list python-time-machine python-tzdata python-tzlocal))
42820 (native-inputs
42821 (list python-pytest
42822 python-setuptools
42823 tzdata-for-tests))
42824 (home-page "https://whenever.readthedocs.io/")
42825 (synopsis "Modern datetime library for Python")
42826 (description "Modern datetime library for Python. Supports:
42827@itemize
42828@item DST-safe arithmetic
42829@item Nanosecond precision
42830@item Date arithmetic
42831@end itemize")
42832 (license license:expat)))
42833
42834;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42835(define-public python-whichcraft
42836 (package
42837 (name "python-whichcraft")
42838 (version "0.6.1")
42839 (source
42840 (origin
42841 (method url-fetch)
42842 (uri (pypi-uri "whichcraft" version))
42843 (sha256
42844 (base32
42845 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42846 (build-system pyproject-build-system)
42847 (native-inputs
42848 (list python-pytest python-setuptools))
42849 (home-page "https://github.com/pydanny/whichcraft")
42850 (synopsis "Cross-platform cross-python shutil.which functionality")
42851 (description
42852 "This package provides a shim of the shutil.which function that's
42853designed to work across multiple versions of Python.")
42854 (license license:bsd-3)))
42855
42856(define-public python-widgetsnbextension
42857 (package
42858 (name "python-widgetsnbextension")
42859 (version "4.0.14")
42860 (source
42861 (origin
42862 (method url-fetch)
42863 (uri (pypi-uri "widgetsnbextension" version))
42864 (sha256
42865 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42866 (build-system pyproject-build-system)
42867 (arguments
42868 (list #:tests? #f)) ;no tests in PyPI or git
42869 (native-inputs
42870 (list python-jupyter-packaging
42871 python-setuptools))
42872 (home-page "https://ipython.org")
42873 (synopsis "IPython HTML widgets for Jupyter")
42874 (description "This package provides interactive HTML widgets for Jupyter
42875notebooks.")
42876 (license license:bsd-3)))
42877
42878(define-public python-wrapt
42879 (package
42880 (name "python-wrapt")
42881 (version "2.0.1")
42882 (source
42883 (origin
42884 (method url-fetch)
42885 (uri (pypi-uri "wrapt" version))
42886 (sha256
42887 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42888 (build-system pyproject-build-system)
42889 (arguments
42890 (list
42891 ;; tests: 562 passed, 1 deselected
42892 #:test-flags
42893 ;; AssertionError: Output did not match expected for
42894 ;; mypy_function_wrapper_fn_t6.py
42895 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42896 (native-inputs
42897 (list python-mypy-for-tests ;hard dependencies in tests
42898 python-pytest
42899 python-setuptools))
42900 (home-page "https://github.com/GrahamDumpleton/wrapt")
42901 (synopsis "Module for decorators, wrappers and monkey patching")
42902 (description
42903 "The aim of the wrapt module is to provide a transparent object proxy for
42904 Python, which can be used as the basis for the construction of function
42905 wrappers and decorator functions.")
42906 (license license:bsd-2)))
42907
42908(define-public python-wurlitzer
42909 (package
42910 (name "python-wurlitzer")
42911 (version "3.1.1")
42912 (source
42913 (origin
42914 (method url-fetch)
42915 (uri (pypi-uri "wurlitzer" version))
42916 (sha256
42917 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42918 (build-system pyproject-build-system)
42919 (arguments
42920 (list #:test-flags #~(list "test.py")))
42921 (native-inputs
42922 (list python-pytest
42923 python-setuptools))
42924 (home-page "https://github.com/minrk/wurlitzer")
42925 (synopsis "Capture C-level output in context managers")
42926 (description
42927 "This library helps to redirect @code{sys.stdout} to a stream or a file
42928while executing some piece of code, including C code running within a Python
42929process.")
42930 (license license:expat)))
42931
42932(define-public python-xattr
42933 (package
42934 (name "python-xattr")
42935 (version "1.2.0")
42936 (source
42937 (origin
42938 (method url-fetch)
42939 (uri (pypi-uri "xattr" version))
42940 (sha256
42941 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42942 (build-system pyproject-build-system)
42943 (native-inputs
42944 (list python-pytest
42945 python-setuptools))
42946 (propagated-inputs
42947 (list python-cffi))
42948 (home-page "https://github.com/xattr/xattr")
42949 (synopsis "Python wrapper for extended file system attributes")
42950 (description "This package provides a Python wrapper for using extended
42951file system attributes. Extended attributes extend the basic attributes of files
42952and directories in the file system. They are stored as name:data pairs
42953associated with file system objects (files, directories, symlinks, etc).")
42954 (license license:expat)))
42955
42956(define-public python-xdg-base-dirs
42957 (package
42958 (name "python-xdg-base-dirs")
42959 (version "6.0.2")
42960 (source
42961 (origin
42962 (method git-fetch)
42963 (uri (git-reference
42964 (url "https://github.com/srstevenson/xdg-base-dirs")
42965 (commit version)))
42966 (file-name (git-file-name name version))
42967 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42968 (modules '((guix build utils)))
42969 ;; All pytest options are for coverage; remove snippet in next release:
42970 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42971 (snippet #~(substitute* "pyproject.toml"
42972 (("^addopts = .*") "")))))
42973 (build-system pyproject-build-system)
42974 (native-inputs
42975 (list python-poetry-core python-pytest))
42976 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42977 (synopsis "Variables defined by the XDG Base Directory Specification")
42978 (description "xdg-base-dirs is a Python module that provides functions to
42979return paths to the directories defined by the XDG Base Directory
42980Specification, to save you from duplicating the same snippet of logic in every
42981Python utility you write that deals with user cache, configuration, or data
42982files.")
42983 (license license:isc)))
42984
42985(define-public python-xkbcommon
42986 (package
42987 (name "python-xkbcommon")
42988 (version "1.0.1")
42989 (source
42990 (origin
42991 (method git-fetch)
42992 (uri (git-reference
42993 (url "https://github.com/sde1000/python-xkbcommon")
42994 (commit (string-append "v" version))))
42995 (file-name (git-file-name name version))
42996 (sha256
42997 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42998 (build-system pyproject-build-system)
42999 (propagated-inputs (list python-cffi))
43000 (native-inputs (list libxkbcommon python-setuptools))
43001 (arguments
43002 (list
43003 #:test-backend
43004 #~'unittest
43005 #:phases
43006 #~(modify-phases %standard-phases
43007 (add-before 'check 'cleanup
43008 (lambda _
43009 (delete-file-recursively "xkbcommon"))))))
43010 (home-page "https://github.com/sde1000/python-xkbcommon")
43011 (synopsis "Bindings for libxkbcommon using cffi")
43012 (description "Bindings for libxkbcommon using cffi.")
43013 (license license:expat)))
43014
43015(define-public python-xlib
43016 (package
43017 (name "python-xlib")
43018 (version "0.33")
43019 (source
43020 (origin
43021 (method git-fetch)
43022 (uri (git-reference
43023 (url "https://github.com/python-xlib/python-xlib")
43024 (commit version)))
43025 (file-name (git-file-name name version))
43026 (sha256
43027 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
43028 (build-system pyproject-build-system)
43029 (arguments
43030 `(#:phases
43031 (modify-phases %standard-phases
43032 (add-before 'check 'start-xserver
43033 (lambda* (#:key inputs #:allow-other-keys)
43034 (let ((xorg-server (assoc-ref inputs "xorg-server")))
43035 ;; There must be a running X server and make check doesn't
43036 ;; start one. Therefore we must do it.
43037 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
43038 (setenv "DISPLAY" ":1")))))))
43039 (native-inputs
43040 (list python-mock
43041 python-pytest
43042 python-setuptools
43043 xorg-server))
43044 (propagated-inputs
43045 (list python-six))
43046 (home-page "https://github.com/python-xlib/python-xlib")
43047 (synopsis "Python X11 client library")
43048 (description
43049 "The Python X Library is intended to be a fully functional
43050X client library for Python programs. It is useful to implement
43051low-level X clients. It is written entirely in Python.")
43052 (license license:gpl2+)))
43053
43054(define-public python-xlrd
43055 (package
43056 (name "python-xlrd")
43057 (version "2.0.2")
43058 (source
43059 (origin
43060 (method git-fetch) ;no tests in PyPI archive
43061 (uri (git-reference
43062 (url "https://github.com/python-excel/xlrd")
43063 (commit version)))
43064 (file-name (git-file-name name version))
43065 (sha256
43066 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
43067 (build-system pyproject-build-system)
43068 (native-inputs
43069 (list python-pytest
43070 python-setuptools))
43071 (home-page "https://www.python-excel.org/")
43072 (synopsis "Library for extracting data from Excel files")
43073 (description "This package provides a library to extract data from
43074spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
43075@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
43076Unicode-aware. It is not intended as an end-user tool.")
43077 (license license:bsd-3)))
43078
43079(define-public python-xlsxwriter
43080 (package
43081 (name "python-xlsxwriter")
43082 (version "3.2.0")
43083 (source
43084 (origin
43085 ;; There are no tests in the PyPI tarball.
43086 (method git-fetch)
43087 (uri (git-reference
43088 (url "https://github.com/jmcnamara/XlsxWriter")
43089 (commit (string-append "RELEASE_" version))))
43090 (file-name (git-file-name name version))
43091 (sha256
43092 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
43093 (build-system pyproject-build-system)
43094 (native-inputs
43095 (list python-setuptools
43096 python-wheel))
43097 (home-page "https://github.com/jmcnamara/XlsxWriter")
43098 (synopsis "Python module for creating Excel XLSX files")
43099 (description
43100 "XlsxWriter is a Python module that can be used to write text, numbers,
43101formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
43102 (license license:bsd-2)))
43103
43104;;; Note: this package is unmaintained since 2018 (archived on GitHub).
43105(define-public python-xlwt
43106 (package
43107 (name "python-xlwt")
43108 (version "1.3.0")
43109 (source
43110 (origin
43111 (method url-fetch)
43112 (uri (pypi-uri "xlwt" version))
43113 (sha256
43114 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
43115 (build-system pyproject-build-system)
43116 (native-inputs (list python-pytest python-setuptools python-wheel))
43117 (home-page "https://www.python-excel.org/")
43118 (synopsis "Library for creating spreadsheet Excel files")
43119 (description
43120 "@code{xlwt} is a library for writing data and formatting information to
43121older Excel files (i.e. .xls). The package itself is pure Python with no
43122dependencies on modules or packages outside the standard Python distribution.
43123It is not intended as an end-user tool.")
43124 (license license:bsd-3)))
43125
43126(define-public python-xmldiff
43127 (package
43128 (name "python-xmldiff")
43129 (version "3.0b1")
43130 (source
43131 (origin
43132 (method git-fetch)
43133 (uri (git-reference
43134 (url "https://github.com/Shoobx/xmldiff")
43135 (commit version)))
43136 (file-name (git-file-name name version))
43137 (sha256
43138 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
43139 (build-system pyproject-build-system)
43140 (native-inputs (list python-pytest python-setuptools))
43141 (propagated-inputs (list python-lxml))
43142 (home-page "https://github.com/Shoobx/xmldiff")
43143 (synopsis "Creates diffs of XML files")
43144 (description "This Python tool figures out the differences between two
43145similar XML files, in the same way the @command{diff} utility does it.")
43146 (license license:expat)))
43147
43148(define-public python-xmlsec
43149 (package
43150 (name "python-xmlsec")
43151 (version "1.3.17")
43152 (source
43153 (origin
43154 (method git-fetch)
43155 (uri (git-reference
43156 (url "https://github.com/xmlsec/python-xmlsec")
43157 (commit version)))
43158 (file-name (git-file-name name version))
43159 (sha256
43160 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
43161 (build-system pyproject-build-system)
43162 (arguments
43163 (list
43164 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
43165 #:test-flags #~(list "-n" "1")))
43166 (inputs (list openssl libltdl libxslt libxml2))
43167 (propagated-inputs (list python-lxml xmlsec-openssl))
43168 (native-inputs (list pkg-config
43169 python-lxml
43170 python-pkgconfig
43171 python-pytest
43172 python-pytest-xdist
43173 python-setuptools
43174 python-setuptools-scm
43175 python-wheel))
43176 (home-page "https://github.com/xmlsec/python-xmlsec")
43177 (synopsis "Python bindings for the XML Security Library")
43178 (description "This package provides Python bindings for the XML Security
43179Library.")
43180 (license license:expat)))
43181
43182(define-public python-xmod
43183 (package
43184 (name "python-xmod")
43185 (version "1.10.0")
43186 (source
43187 (origin
43188 (method git-fetch)
43189 (uri (git-reference
43190 (url "https://github.com/rec/xmod")
43191 (commit (string-append "v" version))))
43192 (file-name (git-file-name name version))
43193 (sha256
43194 (base32 "0a2ywlfa0s4aqs1yag9xirv69029xmw307mbfqz7vhy8dadc2z30"))))
43195 (build-system pyproject-build-system)
43196 (native-inputs (list python-hatchling python-pytest))
43197 (home-page "https://rec.github.io/xmod/")
43198 (synopsis "Turn any object into a module")
43199 (description
43200 "@code{xmod} is a tiny library that lets a module to do things that
43201normally only a class could do.")
43202 (license license:expat)))
43203
43204(define-public python-xmp-toolkit
43205 (package
43206 (name "python-xmp-toolkit")
43207 (version "2.1.0")
43208 (source
43209 (origin
43210 (method url-fetch)
43211 (uri (pypi-uri "python_xmp_toolkit" version))
43212 (sha256
43213 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
43214 (build-system pyproject-build-system)
43215 (arguments
43216 (list
43217 #:phases
43218 #~(modify-phases %standard-phases
43219 (add-after 'unpack 'patch-source
43220 (lambda* (#:key inputs #:allow-other-keys)
43221 (substitute* "libxmp/exempi.py"
43222 (("ctypes.util.find_library\\('exempi'\\)")
43223 (format #f "~s" (search-input-file
43224 inputs "lib/libexempi.so")))))))))
43225 (native-inputs
43226 (list python-pytest
43227 python-flit-core))
43228 (inputs
43229 (list exempi))
43230 (propagated-inputs
43231 (list python-pytz))
43232 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
43233 (synopsis "Python XMP Toolkit for working with metadata")
43234 (description "Python XMP Toolkit is a library for working with XMP
43235metadata, as well as reading/writing XMP metadata stored in many different
43236file formats.
43237
43238Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
43239based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
43240are easily incorporated into the library with a minimum amount of work.")
43241 (license license:bsd-3)))
43242
43243(define-public python-yamlcore
43244 (package
43245 (name "python-yamlcore")
43246 (version "0.0.4")
43247 (source
43248 (origin
43249 (method git-fetch)
43250 (uri (git-reference
43251 (url "https://github.com/perlpunk/pyyaml-core")
43252 (commit (string-append "v" version))))
43253 (file-name (git-file-name name version))
43254 (sha256
43255 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
43256 (build-system pyproject-build-system)
43257 (arguments
43258 (list
43259 #:phases
43260 #~(modify-phases %standard-phases
43261 (add-after 'unpack 'fix-test-file-names
43262 (lambda _
43263 (rename-file "tests/test-schema.py" "tests/test_schema.py")
43264 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
43265 (native-inputs (list python-pytest python-setuptools))
43266 (inputs (list python-pyyaml))
43267 (home-page "https://github.com/perlpunk/pyyaml-core")
43268 (synopsis "YAML 1.2 support for PyYAML")
43269 (description "This module can be used on top of PyYAML to load YAML 1.2
43270files.")
43271 (license license:expat)))
43272
43273(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
43274
43275(define-public python-yamllint
43276 (package
43277 (name "python-yamllint")
43278 (version "1.38.0")
43279 (source
43280 (origin
43281 (method git-fetch)
43282 (uri (git-reference
43283 (url "https://github.com/adrienverge/yamllint")
43284 (commit (string-append "v" version))))
43285 (file-name (git-file-name name version))
43286 (sha256
43287 (base32 "18wqyj600jhzwm01wnpc48cyppbkwrwz93vr47338iwkgmp2szz0"))))
43288 (build-system pyproject-build-system)
43289 (arguments
43290 (list #:test-backend #~'unittest))
43291 (native-inputs
43292 (list python-setuptools))
43293 (propagated-inputs
43294 (list python-pathspec python-pyyaml))
43295 (home-page "https://github.com/adrienverge/yamllint")
43296 (synopsis "Linter for YAML files")
43297 (description
43298 "Yamllint is a linter for YAML files. yamllint does not only check for
43299syntax validity, but for weirdnesses like key repetition and cosmetic problems
43300such as lines length, trailing spaces, indentation, etc.")
43301 (license license:gpl3+)))
43302
43303(define-public python-yamlloader
43304 (package
43305 (name "python-yamlloader")
43306 (version "1.6.0")
43307 (source
43308 (origin
43309 (method url-fetch)
43310 (uri (pypi-uri "yamlloader" version))
43311 (sha256
43312 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
43313 (build-system pyproject-build-system)
43314 (arguments
43315 (list #:test-backend #~'unittest
43316 #:test-flags #~(list "discover" "-v")))
43317 (native-inputs
43318 (list python-hatch-vcs
43319 python-hatchling
43320 python-hypothesis
43321 python-pytest))
43322 (propagated-inputs
43323 (list python-pyyaml))
43324 (home-page "https://github.com/Phynix/yamlloader")
43325 (synopsis "Ordered YAML loader and dumper for PyYAML")
43326 (description
43327 "This package provides loaders and dumpers for PyYAML. Currently, an
43328OrderedDict loader/dumper is implemented, allowing to keep items order when
43329loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
43330dicts are supported and are the default items to be loaded to. As of Python
433313.7 preservation of insertion order is a language feature of regular dicts.)
43332It was originally mirrored from
43333@url{https://github.com/fmenabe/python-yamlordereddictloader,
43334yamlordereddict}.")
43335 (license license:expat)))
43336
43337;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
43338;; an improved version of this library with unit tests, performance
43339;; improvements (by providing access to the C implementation of PyYAML) and is
43340;; more actively developed.
43341(define-public python-yamlordereddictloader
43342 (package
43343 (name "python-yamlordereddictloader")
43344 (version "0.4.2")
43345 (source
43346 (origin
43347 (method git-fetch)
43348 (uri (git-reference
43349 (url "https://github.com/fmenabe/python-yamlordereddictloader")
43350 (commit version)))
43351 (file-name (git-file-name name version))
43352 (sha256
43353 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
43354 (build-system pyproject-build-system)
43355 (arguments
43356 (list #:tests? #f)) ;no tests
43357 (native-inputs
43358 (list python-setuptools))
43359 (propagated-inputs
43360 (list python-pyyaml))
43361 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
43362 (synopsis "Loader and a dumper for PyYAML")
43363 (description
43364 "yamlordereddictloader is a Python package that provides a loader and a
43365dumper for PyYAML allowing to keep items order when loading a file (by putting
43366them in OrderedDict objects) and to manage OrderedDict objects when dumping to
43367a file.")
43368 (license license:expat)))
43369
43370(define-public python-yapf
43371 (package
43372 (name "python-yapf")
43373 (version "0.43.0")
43374 (source
43375 (origin
43376 (method url-fetch)
43377 (uri (pypi-uri "yapf" version))
43378 (sha256
43379 (base32
43380 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
43381 (build-system pyproject-build-system)
43382 (propagated-inputs
43383 (list python-platformdirs python-tomli))
43384 (native-inputs
43385 (list python-pytest python-setuptools python-wheel))
43386 (home-page "https://github.com/google/yapf")
43387 (synopsis "Formatter for Python code")
43388 (description "YAPF is a formatter for Python code. It's based off of
43389@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
43390takes the code and reformats it to the best formatting that conforms to the
43391style guide, even if the original code didn't violate the style guide.")
43392 (license license:asl2.0)))
43393
43394(define-public python-yappi
43395 (package
43396 (name "python-yappi")
43397 (version "1.7.6")
43398 (source
43399 (origin
43400 (method git-fetch)
43401 (uri (git-reference
43402 (url "https://github.com/sumerc/yappi")
43403 (commit (string-append "v" version))))
43404 (file-name (git-file-name name version))
43405 (sha256
43406 (base32 "08jhsflxyj3vf1m06vngsw9d6qyblykcx1j2mq4qn0ray0s7v8qj"))))
43407 (build-system pyproject-build-system)
43408 (arguments
43409 (list #:test-backend #~'unittest
43410 #:test-flags #~'("discover" "tests")))
43411 (native-inputs (list python-gevent python-setuptools))
43412 (home-page "https://github.com/sumerc/yappi")
43413 (synopsis "Python Profiler")
43414 (description "@acronym{YAPPI, Yet Another Python Profiler} is a robust and
43415intuitive, standard compliant Python profiler.")
43416 (license license:expat)))
43417
43418(define-public python-yapsy
43419 (package
43420 (name "python-yapsy")
43421 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
43422 ;; 3.12+; move back to git tag when released.
43423 (properties '((base-version . "1.12.2")
43424 (commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
43425 (revision . "0")))
43426 (version (git-version (assoc-ref properties 'base-version)
43427 (assoc-ref properties 'revision)
43428 (assoc-ref properties 'commit)))
43429 (source
43430 (origin
43431 (method git-fetch)
43432 (uri (git-reference
43433 (url "https://github.com/tibonihoo/yapsy")
43434 (commit (assoc-ref properties 'commit))))
43435 (file-name (git-file-name name version))
43436 (sha256
43437 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
43438 (build-system pyproject-build-system)
43439 (arguments
43440 (list
43441 #:phases
43442 #~(modify-phases %standard-phases
43443 (add-after 'unpack 'change-source-dir
43444 (lambda _
43445 (chdir "package")))
43446 (add-after 'change-source-dir 'patch-version
43447 (lambda _
43448 (substitute* "yapsy/__init__.py"
43449 (("__version__=\"2.0.0\"")
43450 (format #nil "__version__=\"~a\"" #$(assoc-ref properties 'base-version)))))))))
43451 (native-inputs
43452 (list python-pytest python-setuptools))
43453 (home-page "https://yapsy.sourceforge.net")
43454 (synopsis "Simple plugin system for Python applications")
43455 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
43456implementing the core mechanisms needed to build a plugin system into a wider
43457application.
43458
43459The main purpose is to depend only on Python's standard libraries and to
43460implement only the basic functionalities needed to detect, load and keep track
43461of several plugins.")
43462 (license license:bsd-3)))
43463
43464(define-public python-yaspin
43465 (package
43466 (name "python-yaspin")
43467 (version "3.2.0")
43468 (source
43469 (origin
43470 (method url-fetch)
43471 (uri
43472 (pypi-uri "yaspin" version))
43473 (sha256
43474 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
43475 (build-system pyproject-build-system)
43476 ;; tests: 3007 passed, 1758 skipped
43477 (native-inputs
43478 (list python-poetry-core
43479 python-pytest
43480 python-pytest-mock))
43481 (propagated-inputs
43482 (list python-termcolor-next))
43483 (home-page "https://github.com/pavdmyt/yaspin")
43484 (synopsis "Yet Another Terminal Spinner")
43485 (description "Yaspin provides a terminal spinner to indicate the progress
43486during long operations.")
43487 (license license:expat)))
43488
43489(define-public python-yattag
43490 (package
43491 (name "python-yattag")
43492 (version "1.16.1")
43493 (source
43494 (origin
43495 (method url-fetch)
43496 (uri (pypi-uri "yattag" version))
43497 (sha256
43498 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
43499 (build-system pyproject-build-system)
43500 (native-inputs
43501 (list python-pytest
43502 python-setuptools
43503 python-wheel))
43504 (home-page "https://www.yattag.org/")
43505 (synopsis "HTML or XML generator for Python")
43506 (description
43507 "Yattag is a Python library for generating HTML or XML in a pythonic
43508way.")
43509 (license license:lgpl2.1)))
43510
43511(define-public python-yq
43512 (package
43513 (name "python-yq")
43514 (version "3.4.3")
43515 (source
43516 (origin
43517 (method url-fetch)
43518 (uri (pypi-uri "yq" version))
43519 (sha256
43520 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
43521 (build-system pyproject-build-system)
43522 (arguments
43523 (list
43524 #:test-backend #~'custom
43525 #:test-flags #~(list "test/test.py" "-v")
43526 #:phases
43527 #~(modify-phases %standard-phases
43528 (add-after 'unpack 'patch
43529 (lambda _
43530 (substitute* "yq/__init__.py"
43531 (("Popen\\(\\[\"jq")
43532 (string-append
43533 "Popen([\""
43534 #$(this-package-input "jq") "/bin/jq"))))))))
43535 (native-inputs
43536 (list python-hatchling
43537 python-hatch-vcs))
43538 (inputs
43539 (list jq))
43540 (propagated-inputs
43541 (list python-argcomplete
43542 python-pyyaml
43543 python-tomlkit
43544 python-xmltodict))
43545 (home-page "https://github.com/kislyuk/yq")
43546 (synopsis "Command-line YAML/XML processor")
43547 (description
43548 "This package provides @command{yq} and @command{xq} for processing YAML
43549and XML respectively. The processing is done through @command{jq},
43550@command{jq} filters can be used to process the data as it passes through.")
43551 (license license:asl2.0)))
43552
43553(define-public python-yte
43554 (package
43555 (name "python-yte")
43556 (version "1.8.1") ;TODO higher versions depend on uv_build
43557 (source
43558 (origin
43559 (method git-fetch)
43560 (uri (git-reference
43561 (url "https://github.com/koesterlab/yte")
43562 (commit (string-append "v" version))))
43563 (sha256
43564 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43565 (build-system pyproject-build-system)
43566 (arguments
43567 (list
43568 #:test-flags #~(list "tests.py")
43569 #:phases
43570 '(modify-phases %standard-phases
43571 (add-after 'unpack 'set-HOME
43572 (lambda _ (setenv "HOME" "/tmp"))))))
43573 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43574 (native-inputs (list python-numpy python-poetry-core python-pytest))
43575 (home-page "https://github.com/koesterlab/yte")
43576 (synopsis "YAML template engine with Python expressions")
43577 (description
43578 "This package provides a YAML template engine with Python expressions.")
43579 (license license:expat)))
43580
43581(define-public python-zarr
43582 (package
43583 (name "python-zarr")
43584 (version "3.2.1")
43585 (source
43586 (origin
43587 (method git-fetch)
43588 (uri (git-reference
43589 (url "https://github.com/zarr-developers/zarr-python")
43590 (commit (string-append "v" version))))
43591 (file-name (git-file-name name version))
43592 (sha256
43593 (base32 "1qzbpy6j8mgpr6wb69j8yyjyr95rmagn64v8pcdljjl3969rmjf6"))))
43594 (build-system pyproject-build-system)
43595 (arguments
43596 (list
43597 ;; tests: 5339 passed, 384 skipped, 1 deselected, 7 xfailed
43598 #:test-flags
43599 #~(list "--ignore=tests/benchmarks/"
43600 ;; This test wants uv.
43601 (string-append "--deselect=tests/test_examples.py"
43602 "::test_scripts_can_run[script_path0]"))
43603 #:phases
43604 #~(modify-phases %standard-phases
43605 (add-after 'unpack 'disable-service-tests
43606 (lambda _
43607 (setenv "ZARR_TEST_ABS" "0")
43608 (setenv "ZARR_TEST_MONGO" "0")
43609 (setenv "ZARR_TEST_REDIS" "0"))))))
43610 (native-inputs
43611 (list python-hatch-vcs
43612 python-hatchling
43613 python-numpydoc ;tests/test_api/test_synchronous.py
43614 python-pytest
43615 python-pytest-asyncio
43616 python-pytest-benchmark
43617 python-tomlkit))
43618 (propagated-inputs
43619 (list python-donfig
43620 python-google-crc32c
43621 python-numcodecs
43622 python-numpy
43623 python-packaging
43624 python-typing-extensions))
43625 (home-page "https://github.com/zarr-developers/zarr-python")
43626 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43627 (description
43628 "This package provides an implementation of chunked, compressed,
43629N-dimensional arrays for Python.")
43630 (license license:expat)))
43631
43632(define-public python-zeroc-ice
43633 (package
43634 (name "python-zeroc-ice")
43635 (version "3.7.10.1")
43636 (source (origin
43637 (method url-fetch)
43638 (uri (pypi-uri "zeroc-ice" version))
43639 (sha256
43640 (base32
43641 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43642 (build-system pyproject-build-system)
43643 (arguments
43644 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43645 ;; tag.
43646 ;;
43647 ;; See:
43648 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43649 ;; - File: <ice/refs/heads/main/python/allTests.py>
43650 (list #:tests? #f))
43651 (inputs (list openssl))
43652 (native-inputs (list python-setuptools))
43653 (home-page "https://zeroc.com")
43654 (synopsis "RPC framework")
43655 (description
43656 "Ice is a comprehensive RPC framework. Ice helps you network your
43657software by taking care of all interactions with low-level network programming
43658interfaces.")
43659 (license license:gpl2)))
43660
43661;; Package variant to build [email protected]
43662(define-public python-zeroc-ice-3.6
43663 (package
43664 (inherit python-zeroc-ice)
43665 (version "3.6.5")
43666 (source (origin
43667 (method url-fetch)
43668 (uri (pypi-uri "zeroc-ice" version))
43669 (sha256
43670 (base32
43671 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43672 (patches
43673 (search-patches
43674 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43675 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43676 (arguments
43677 (substitute-keyword-arguments arguments
43678 ((#:phases phases #~%standard-phases)
43679 #~(modify-phases #$phases
43680 (add-before 'build 'relax-gcc-14-strictness
43681 (lambda _
43682 (setenv "CFLAGS"
43683 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43684
43685(define-public python-zeroconf
43686 (package
43687 (name "python-zeroconf")
43688 (version "0.38.1")
43689 (source
43690 (origin
43691 (method git-fetch)
43692 (uri (git-reference
43693 (url "https://github.com/jstasiak/python-zeroconf")
43694 (commit version)))
43695 (file-name (git-file-name name version))
43696 (sha256
43697 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43698 (build-system pyproject-build-system)
43699 (arguments
43700 (list
43701 #:test-flags
43702 #~(list
43703 "-k" (string-append
43704 ;; XXX: Despite asyncio, this test fails.
43705 "not test_run_coro_with_timeout and not "
43706 ;; XXX: Networking isn't available.
43707 (string-join
43708 (list "test_integration_with_listener_ipv6"
43709 "test_launch_and_close_v4_v6"
43710 "test_launch_and_close_context_manager"
43711 "test_launch_and_close"
43712 "test_close_multiple_times")
43713 " and not ")))))
43714 (native-inputs
43715 (list python-pytest python-pytest-asyncio python-setuptools))
43716 (propagated-inputs
43717 (list python-ifaddr))
43718 (home-page "https://github.com/jstasiak/python-zeroconf")
43719 (synopsis "Pure Python mDNS service discovery")
43720 (description "Pure Python multicast DNS (mDNS) service discovery library
43721(Bonjour/Avahi compatible).")
43722 (license license:lgpl2.1+)))
43723
43724(define-public python-zict
43725 (package
43726 (name "python-zict")
43727 (version "3.0.0")
43728 (source
43729 (origin
43730 (method url-fetch)
43731 (uri (pypi-uri "zict" version))
43732 (sha256
43733 (base32
43734 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43735 (build-system pyproject-build-system)
43736 (arguments
43737 (list
43738 #:test-flags
43739 ;; This uses "importorskip", but it won't skip.
43740 '(list "--ignore=tests/test_lmdb.py")))
43741 (propagated-inputs
43742 (list python-heapdict))
43743 (native-inputs
43744 (list python-pytest
43745 python-pytest-asyncio
43746 python-pytest-repeat
43747 python-pytest-timeout
43748 python-setuptools
43749 python-wheel))
43750 (home-page "https://zict.readthedocs.io/en/latest/")
43751 (synopsis "Composable mutable mapping tools")
43752 (description "This package provides abstract @code{MutableMapping} classes
43753that consume and build on other @code{MutableMappings}. Several of these can
43754be composed with one another to form intuitive interfaces over complex storage
43755systems policies.")
43756 (license license:bsd-3)))
43757
43758(define-public python-zipfly
43759 (package
43760 (name "python-zipfly")
43761 (version "6.0.5")
43762 (source
43763 (origin
43764 (method url-fetch)
43765 (uri (pypi-uri "zipfly" version))
43766 (sha256
43767 (base32
43768 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43769 (build-system pyproject-build-system)
43770 (arguments
43771 (list #:test-backend #~'unittest))
43772 (native-inputs (list python-setuptools))
43773 (home-page "https://github.com/sandes/zipfly")
43774 (synopsis "Zip archive generator")
43775 (description "ZipFly is a zip archive generator. It was created to
43776generate very large zip archives for immediate sending out to clients, or
43777for writing large zip archives without memory inflation.")
43778 (license license:expat)))
43779
43780(define-public python-zipstream-new
43781 (package
43782 (name "python-zipstream-new")
43783 (version "1.1.8")
43784 (source
43785 (origin
43786 (method git-fetch) ; no tests in PyPI release
43787 (uri (git-reference
43788 (url "https://github.com/arjan-s/python-zipstream")
43789 (commit (string-append "v" version))))
43790 (file-name (git-file-name name version))
43791 (sha256
43792 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43793 (build-system pyproject-build-system)
43794 (arguments
43795 (list #:test-backend #~'unittest))
43796 (native-inputs (list python-setuptools))
43797 (home-page "https://github.com/arjan-s/python-zipstream")
43798 (synopsis "Zipfile generator that takes input files as well as streams")
43799 (description "@code{zipstream.py} is a zip archive generator based on
43800@code{zipfile.py}. It was created to generate a zip file generator for
43801streaming. This is beneficial for when you want to provide a downloadable
43802archive of a large collection of regular files, which would be infeasible
43803to generate the archive prior to downloading or of a very large file that
43804you do not want to store entirely on disk or on memory.")
43805 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43806 (license license:gpl3)))
43807
43808(define-public shrinkwrap
43809 (package
43810 (name "shrinkwrap")
43811 (version "0.1.0")
43812 (source
43813 (origin
43814 (method git-fetch)
43815 (uri (git-reference
43816 (url "https://github.com/fzakaria/shrinkwrap")
43817 (commit (string-append "v" version))))
43818 (file-name (git-file-name name version))
43819 (sha256
43820 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43821 (build-system pyproject-build-system)
43822 (native-inputs
43823 (list python-click
43824 python-poetry-core
43825 python-pypa-build
43826 python-pytest))
43827 (inputs (list python-lief python-sh))
43828 (home-page "https://github.com/fzakaria/shrinkwrap")
43829 (synopsis "Emboss needed dependencies on the top level executable")
43830 (description
43831 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43832shared objects, and lift them up to the executable referenced by absolute
43833path.")
43834 (license license:expat)))
43835
43836(define-public staticsite
43837 (package
43838 (name "staticsite")
43839 (version "2.5")
43840 (source
43841 (origin
43842 (method git-fetch)
43843 (uri (git-reference
43844 (url "https://github.com/spanezz/staticsite")
43845 (commit (string-append "v" version))))
43846 (file-name (git-file-name name version))
43847 (sha256
43848 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43849 (build-system pyproject-build-system)
43850 (arguments
43851 (list
43852 #:phases
43853 #~(modify-phases %standard-phases
43854 (add-after 'unpack 'use-themes-in-output
43855 (lambda _
43856 (substitute* "staticsite/global_settings.py"
43857 (("/usr/share/staticsite") #$output))))
43858 (add-after 'install 'install-themes
43859 (lambda _
43860 (let ((themedir (string-append #$output "/themes")))
43861 (copy-recursively "themes" themedir)))))))
43862 (native-inputs
43863 (list python-hatchling
43864 python-pytest))
43865 (inputs
43866 (list perl-image-exiftool
43867 python-dateutil
43868 python-docutils
43869 python-jinja2
43870 python-markdown
43871 python-pillow
43872 python-pytz
43873 python-pyyaml
43874 python-ruamel.yaml
43875 python-slugify
43876 python-toml
43877 tzdata-for-tests))
43878 (home-page "https://github.com/spanezz/staticsite")
43879 (synopsis "Static site generator")
43880 (description
43881 "Statistic is a static site generator based on Markdown and Jinja2.")
43882 (license (list license:gpl3+ license:expat))))
43883
43884;;;
43885;;; Avoid adding new packages to the end of this file. To reduce the chances
43886;;; of a merge conflict, place them above in alphabetic order:
43887;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43888;;;