projects/guix·blob science-team · refs

43334 lines · 1.5 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2025 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2023 Andreas Enge <[email protected]>
5;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
6;;; Copyright © 2014, 2017, 2021, 2022, 2024 Eric Bavier <[email protected]>
7;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
8;;; Copyright © 2015 Omar Radwan <[email protected]>
9;;; Copyright © 2015 Pierre-Antoine Rault <[email protected]>
10;;; Copyright © 2015-2026 Ricardo Wurmus <[email protected]>
11;;; Copyright © 2015, 2016, 2020 Christine Lemmer-Webber <[email protected]>
12;;; Copyright © 2015 Eric Dvorsak <[email protected]>
13;;; Copyright © 2015, 2016 David Thompson <[email protected]>
14;;; Copyright © 2015, 2016, 2017, 2019, 2022 Leo Famulari <[email protected]>
15;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
16;;; Copyright © 2015, 2016 Erik Edrosa <[email protected]>
17;;; Copyright © 2015-2026 Efraim Flashner <[email protected]>
18;;; Copyright © 2015, 2017, 2020 Kyle Meyer <[email protected]>
19;;; Copyright © 2015, 2016 Chris Marusich <[email protected]>
20;;; Copyright © 2016 Danny Milosavljevic <[email protected]>
21;;; Copyright © 2016 Lukas Gradl <[email protected]>
22;;; Copyright © 2016, 2018, 2019, 2021 Hartmut Goebel <[email protected]>
23;;; Copyright © 2016 Daniel Pimentel <[email protected]>
24;;; Copyright © 2016 Sou Bunnbu <[email protected]>
25;;; Copyright © 2016, 2017 Troy Sankey <[email protected]>
26;;; Copyright © 2016, 2017 Nikita <[email protected]>
27;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
28;;; Copyright © 2016 David Craven <[email protected]>
29;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
30;;; Copyright © 2016, 2017, 2021, 2022 Stefan Reichör <[email protected]>
31;;; Copyright © 2016, 2017, 2019 Alex Vong <[email protected]>
32;;; Copyright © 2016–2018, 2021–2024, 2026 Arun Isaac <[email protected]>
33;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <[email protected]>
34;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
35;;; Copyright © 2016, 2017 Thomas Danckaert <[email protected]>
36;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
37;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
38;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]>
39;;; Copyright © 2017 Ben Sturmfels <[email protected]>
40;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <[email protected]>
41;;; Copyright © 2017 José Miguel Sánchez García <[email protected]>
42;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]>
43;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]>
44;;; Copyright © 2017 Rutger Helling <[email protected]>
45;;; Copyright © 2017, 2019, 2021, 2025 Brendan Tildesley <[email protected]>
46;;; Copyright © 2018 Ethan R. Jones <[email protected]
47;;; Copyright © 2018 Fis Trivial <[email protected]>
48;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
49;;; Copyright © 2018 Mathieu Lirzin <[email protected]>
50;;; Copyright © 2018 Adam Massmann <[email protected]>
51;;; Copyright © 2016, 2018 Tomáš Čech <[email protected]>
52;;; Copyright © 2018-2025 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021, 2023 Clément Lassieur <[email protected]>
55;;; Copyright © 2018-2025 Maxim Cournoyer <[email protected]>
56;;; Copyright © 2018 Luther Thompson <[email protected]>
57;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
58;;; Copyright © 2015, 2018 Pjotr Prins <[email protected]>
59;;; Copyright © 2019 [email protected] <[email protected]>
60;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
61;;; Copyright © 2019 Sam <[email protected]>
62;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
63;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
64;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
65;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
66;;; Copyright © 2019 Jacob MacDonald <[email protected]>
67;;; Copyright © 2019-2021, 2023, 2024, 2026 Giacomo Leidi <[email protected]>
68;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
69;;; Copyright © 2019, 2020, 2021, 2022, 2026 Tanguy Le Carrour <[email protected]>
70;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
71;;; Copyright © 2020 Riku Viitanen <[email protected]>
72;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
73;;; Copyright © 2020 sirgazil <[email protected]>
74;;; Copyright © 2020 Sebastian Schott <[email protected]>
75;;; Copyright © 2020, 2021 Alexandros Theodotou <[email protected]>
76;;; Copyright © 2020 Josh Marshall <[email protected]>
77;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
78;;; Copyright © 2020 Alex ter Weele <[email protected]>
79;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
80;;; Copyright © 2020 Ryan Prior <[email protected]>
81;;; Copyright © 2020 Josh Holland <[email protected]>
82;;; Copyright © 2020 Yuval Kogman <[email protected]>
83;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
84;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email protected]>
85;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
86;;; Copyright © 2020 Hendursaga <[email protected]>
87;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
88;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
89;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
90;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
91;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
92;;; Copyright © 2020 Diego N. Barbato <[email protected]>
93;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
94;;; Copyright © 2019 Kristian Trandem <[email protected]>
95;;; Copyright © 2020, 2021, 2024, 2025 Zheng Junjie <[email protected]>
96;;; Copyright © 2020 EuAndreh <[email protected]>
97;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
98;;; Copyright © 2021-2026 Sharlatan Hellseher <[email protected]>
99;;; Copyright © 2021 Ellis Kenyő <[email protected]>
100;;; Copyright © 2021 LibreMiami <[email protected]>
101;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
102;;; Copyright © 2021 Xinglu Chen <[email protected]>
103;;; Copyright © 2021 Raghav Gururajan <[email protected]>
104;;; Copyright © 2021, 2023-2025 jgart <[email protected]>
105;;; Copyright © 2021 Danial Behzadi <[email protected]>
106;;; Copyright © 2021 Maxime Devos <[email protected]>
107;;; Copyright © 2021 Hugo Lecomte <[email protected]>
108;;; Copyright © 2021 Franck Pérignon <[email protected]>
109;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
110;;; Copyright © 2021 Simon Streit <[email protected]>
111;;; Copyright © 2021 Stefan Reichör <[email protected]>
112;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
113;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
114;;; Copyright © 2021–2024, 2026 Felix Gruber <[email protected]>
115;;; Copyright © 2021 Sébastien Lerique <[email protected]>
116;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
117;;; Copyright © 2021 ZmnSCPxj <[email protected]>
118;;; Copyright © 2021 Filip Lajszczak <[email protected]>
119;;; Copyright © 2021 Greg Hogan <[email protected]>
120;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
121;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
122;;; Copyright © 2022, 2024-2026 Evgeny Pisemsky <[email protected]>
123;;; Copyright © 2022 drozdov <[email protected]>
124;;; Copyright © 2022 Peter Polidoro <[email protected]>
125;;; Copyright © 2022, 2023 Wamm K. D. <[email protected]>
126;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
127;;; Copyright © 2022-2025 Artyom V. Poptsov <[email protected]>
128;;; Copyright © 2022, 2023 Paul A. Patience <[email protected]>
129;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <[email protected]>
130;;; Copyright © 2022 Philip McGrath <[email protected]>
131;;; Copyright © 2022 Marek Felšöci <[email protected]>
132;;; Copyright © 2022 Hilton Chain <[email protected]>
133;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
134;;; Copyright © 2022 Mathieu Laparie <[email protected]>
135;;; Copyright © 2022 Garek Dyszel <[email protected]>
136;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
137;;; Copyright © 2022-2025 Nicolas Graves <[email protected]>
138;;; Copyright © 2023 Gabriel Wicki <[email protected]>
139;;; Copyright © 2023 Amade Nemes <[email protected]>
140;;; Copyright © 2023 Bruno Victal <[email protected]>
141;;; Copyright © 2023 Lu Hui <[email protected]>
142;;; Copyright © 2023 Jean-Pierre De Jesus DIAZ <[email protected]>
143;;; Copyright © 2023 Kaelyn Takata <[email protected]>
144;;; Copyright © 2023 dan <[email protected]>
145;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
146;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
147;;; Copyright © 2023 Ontje Lünsdorf <[email protected]>
148;;; Copyright © 2023, 2025 gemmaro <[email protected]>
149;;; Copyright © 2023 Parnikkapore <[email protected]>
150;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
151;;; Copyright © c4droid <[email protected]>
152;;; Copyright © 2023, 2024, 2025 Janneke Nieuwenhuizen <[email protected]>
153;;; Copyright © 2023 Attila Lendvai <[email protected]>
154;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
155;;; Copyright © 2023 Adam Faiz <[email protected]>
156;;; Copyright © 2023 Wiktor Żelazny <[email protected]>
157;;; Copyright © 2023-2026 Spencer King <[email protected]>
158;;; Copyright © 2024 Timothee Mathieu <[email protected]>
159;;; Copyright © 2024 Ian Eure <[email protected]>
160;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
161;;; Copyright © 2024 Navid Afkhami <[email protected]>
162;;; Copyright © 2024 TakeV <[email protected]>
163;;; Copyright © 2024, 2025 David Elsing <[email protected]>
164;;; Copyright © 2024 Rick Huijzer <[email protected]>
165;;; Copyright © 2024 Peter Kannewitz <[email protected]>
166;;; Copyright © 2024 Aaron Covrig <[email protected]>
167;;; Copyright © 2024 Markku Korkeala <[email protected]>
168;;; Copyright © 2025 Jordan Moore <[email protected]>
169;;; Copyright © 2025 Dariqq <[email protected]>
170;;; Copyright © 2025-2026 Nguyễn Gia Phong <[email protected]>
171;;; Copyright © 2025, 2026 Cayetano Santos <[email protected]>
172;;; Copyright © 2025 Jake Forster <[email protected]>
173;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
174;;; Copyright © 2025 Josep Bigorra <[email protected]>
175;;; Copyright © 2025 Matthias Riße <[email protected]>
176;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
177;;; Copyright © 2025 Allan Adair <[email protected]>
178;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
179;;; Copyright © 2025 Luca Kredel <[email protected]>
180;;; Copyright © 2025 Isidor Zeuner <[email protected]>
181;;; Copyright © 2025 Andy Tai <[email protected]>
182;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
183;;; Copyright © 2026 Akiyoshi Suda <[email protected]>
184;;; Copyright © 2026 Sughosha <[email protected]>
185;;; Copyright © 2026 orahcio <[email protected]>
186;;; Copyright © 2026 John Dawson <[email protected]>
187;;; Copyright © 2026 Kevin Deldycke <[email protected]>
188;;; Copyright © 2026 Ryan Desfosses <[email protected]>
189;;; Copyright © 2026 nick <[email protected]>
190;;;
191;;; This file is part of GNU Guix.
192;;;
193;;; GNU Guix is free software; you can redistribute it and/or modify it
194;;; under the terms of the GNU General Public License as published by
195;;; the Free Software Foundation; either version 3 of the License, or (at
196;;; your option) any later version.
197;;;
198;;; GNU Guix is distributed in the hope that it will be useful, but
199;;; WITHOUT ANY WARRANTY; without even the implied warranty of
200;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
201;;; GNU General Public License for more details.
202;;;
203;;; You should have received a copy of the GNU General Public License
204;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
205
206(define-module (gnu packages python-xyz)
207 #:use-module (gnu packages algebra)
208 #:use-module (gnu packages attr)
209 #:use-module (gnu packages autotools)
210 #:use-module (gnu packages backup)
211 #:use-module (gnu packages base)
212 #:use-module (gnu packages bash)
213 #:use-module (gnu packages bdw-gc)
214 #:use-module (gnu packages bioinformatics)
215 #:use-module (gnu packages boost)
216 #:use-module (gnu packages build-tools)
217 #:use-module (gnu packages c)
218 #:use-module (gnu packages check)
219 #:use-module (gnu packages cmake)
220 #:use-module (gnu packages compression)
221 #:use-module (gnu packages cpp)
222 #:use-module (gnu packages crypto)
223 #:use-module (gnu packages databases)
224 #:use-module (gnu packages dbm)
225 #:use-module (gnu packages dictionaries)
226 #:use-module (gnu packages digest)
227 #:use-module (gnu packages django)
228 #:use-module (gnu packages djvu)
229 #:use-module (gnu packages dns)
230 #:use-module (gnu packages documentation)
231 #:use-module (gnu packages duckdb)
232 #:use-module (gnu packages elf)
233 #:use-module (gnu packages emulators)
234 #:use-module (gnu packages enchant)
235 #:use-module (gnu packages file)
236 #:use-module (gnu packages fonts)
237 #:use-module (gnu packages fontutils)
238 #:use-module (gnu packages freedesktop)
239 #:use-module (gnu packages gcc)
240 #:use-module (gnu packages gdb)
241 #:use-module (gnu packages geo)
242 #:use-module (gnu packages ghostscript)
243 #:use-module (gnu packages glib)
244 #:use-module (gnu packages gnome)
245 #:use-module (gnu packages gnupg)
246 #:use-module (gnu packages graphviz)
247 #:use-module (gnu packages gsasl)
248 #:use-module (gnu packages gtk)
249 #:use-module (gnu packages guile-xyz)
250 #:use-module (gnu packages haskell-xyz)
251 #:use-module (gnu packages icu4c)
252 #:use-module (gnu packages image)
253 #:use-module (gnu packages image-processing)
254 #:use-module (gnu packages imagemagick)
255 #:use-module (gnu packages inkscape)
256 #:use-module (gnu packages iso-codes)
257 #:use-module (gnu packages java)
258 #:use-module (gnu packages javascript)
259 #:use-module (gnu packages jupyter)
260 #:use-module (gnu packages kerberos)
261 #:use-module (gnu packages less)
262 #:use-module (gnu packages libevent)
263 #:use-module (gnu packages libffi)
264 #:use-module (gnu packages libusb)
265 #:use-module (gnu packages linux)
266 #:use-module (gnu packages llvm)
267 #:use-module (gnu packages machine-learning)
268 #:use-module (gnu packages man)
269 #:use-module (gnu packages markup)
270 #:use-module (gnu packages maths)
271 #:use-module (gnu packages messaging)
272 #:use-module (gnu packages monitoring)
273 #:use-module (gnu packages multiprecision)
274 #:use-module (gnu packages ncurses)
275 #:use-module (gnu packages networking)
276 #:use-module (gnu packages node)
277 #:use-module (gnu packages nss)
278 #:use-module (gnu packages openstack)
279 #:use-module (gnu packages pcre)
280 #:use-module (gnu packages pdf)
281 #:use-module (gnu packages perl)
282 #:use-module (gnu packages photo)
283 #:use-module (gnu packages pkg-config)
284 #:use-module (gnu packages protobuf)
285 #:use-module (gnu packages python)
286 #:use-module (gnu packages python-build)
287 #:use-module (gnu packages python-check)
288 #:use-module (gnu packages python-compression)
289 #:use-module (gnu packages python-crypto)
290 #:use-module (gnu packages python-science)
291 #:use-module (gnu packages python-web)
292 #:use-module (gnu packages qt)
293 #:use-module (gnu packages rdf)
294 #:use-module (gnu packages readline)
295 #:use-module (gnu packages regex)
296 #:use-module (gnu packages rpc)
297 #:use-module (gnu packages rust)
298 #:use-module (gnu packages rust-apps)
299 #:use-module (gnu packages scanner)
300 #:use-module (gnu packages search)
301 #:use-module (gnu packages serialization)
302 #:use-module (gnu packages shells)
303 #:use-module (gnu packages sphinx)
304 #:use-module (gnu packages ssh)
305 #:use-module (gnu packages statistics)
306 #:use-module (gnu packages task-management)
307 #:use-module (gnu packages tcl)
308 #:use-module (gnu packages tex)
309 #:use-module (gnu packages texinfo)
310 #:use-module (gnu packages time)
311 #:use-module (gnu packages tls)
312 #:use-module (gnu packages tree-sitter)
313 #:use-module (gnu packages valgrind)
314 #:use-module (gnu packages version-control)
315 #:use-module (gnu packages video)
316 #:use-module (gnu packages web)
317 #:use-module (gnu packages wxwidgets)
318 #:use-module (gnu packages xdisorg)
319 #:use-module (gnu packages xml)
320 #:use-module (gnu packages xorg)
321 #:use-module (gnu packages)
322 #:use-module (guix build-system cargo)
323 #:use-module (guix build-system cmake)
324 #:use-module (guix build-system copy)
325 #:use-module (guix build-system gnu)
326 #:use-module (guix build-system meson)
327 #:use-module (guix build-system pyproject)
328 #:use-module (guix deprecation)
329 #:use-module (guix download)
330 #:use-module (guix gexp)
331 #:use-module (guix git-download)
332 #:use-module (guix hg-download)
333 #:use-module ((guix licenses) #:prefix license:)
334 #:use-module (guix packages)
335 #:use-module (guix utils)
336 #:use-module (ice-9 match)
337 #:use-module (srfi srfi-1)
338 #:use-module (srfi srfi-26))
339
340(define-public python-aenum
341 (package
342 (name "python-aenum")
343 (version "3.1.17")
344 (source
345 (origin
346 (method git-fetch)
347 (uri (git-reference
348 (url "https://github.com/ethanfurman/aenum")
349 (commit version)))
350 (file-name (git-file-name name version))
351 (sha256
352 (base32 "0nygn64ydkvlpz9hw1f26z8w1dk7bws8qsirwkxyfw99vpbzlz3v"))))
353 (build-system pyproject-build-system)
354 (arguments
355 (list
356 #:phases
357 #~(modify-phases %standard-phases
358 (add-after 'unpack 'fix
359 (lambda _
360 (substitute* "aenum/_py2.py"
361 (("raise exc.*")
362 "raise exc.with_traceback(tb)")))))
363 #:tests? #f)) ;no tests
364 (native-inputs (list python-setuptools))
365 (home-page "https://github.com/ethanfurman/aenum")
366 (synopsis
367 "Support for advanced enumerations, namedtuples and namedconstants")
368 (description
369 "AEnum is a set of symbolic names (members) bound to unique, constant
370values. Within an enumeration, the members can be compared by identity, and
371the enumeration itself can be iterated over. There is built-in support for
372unique values, multiple values, auto-numbering, and suspension of aliasing
373(members with the same value are not identical), plus the ability to have
374values automatically bound to attributes.")
375 (license license:bsd-3)))
376
377(define-public python-accumulation-tree
378 ;; Only minor releases (0.x) are tagged, not patch versions.
379 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
380 (revision "0"))
381 (package
382 (name "python-accumulation-tree")
383 (version (git-version "0.6.4" revision commit))
384 (source
385 (origin
386 (method git-fetch)
387 (uri (git-reference
388 (url "https://github.com/tkluck/accumulation_tree")
389 (commit commit)))
390 (file-name (git-file-name name version))
391 (sha256
392 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
393 (modules '((guix build utils)))
394 (snippet ;use src layout for isolated tests
395 #~(let* ((src "src/")
396 (old "accumulation_tree/")
397 (new (string-append src old)))
398 (mkdir src)
399 (rename-file old new)
400 (substitute* "setup.py"
401 (("packages=" all)
402 (string-append "package_dir={'': '" src "'}, " all))
403 ((old)
404 new))))))
405 (build-system pyproject-build-system)
406 (arguments
407 (list #:test-backend #~'custom
408 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
409 (native-inputs (list python-cloudpickle python-cython python-setuptools))
410 (home-page "https://github.com/tkluck/accumulation_tree")
411 (synopsis "Red-black tree with fast value accumulation in a key range")
412 (description
413 "This Python package implements a red-black tree which also stores
414partial aggregations at each node, making getting aggregations
415of key range slices an O(log(N)) operation.
416
417This data structure is very similar to a binary indexed tree,
418with heap allocation instead of a flat array to represent a tree.")
419 (license license:expat))))
420
421(define-public python-anaconda-cli-base
422 (package
423 (name "python-anaconda-cli-base")
424 (version "0.8.1")
425 (source
426 (origin
427 (method url-fetch)
428 (uri (pypi-uri "anaconda_cli_base" version))
429 (sha256
430 (base32 "0r2cvz99vrvcm399qsfxiak5qb3mbr0kbvdrkbnm20l9lq2g18zr"))))
431 (build-system pyproject-build-system)
432 (native-inputs
433 (list python-hatch-vcs
434 python-hatchling
435 python-pytest
436 python-pytest-mock
437 python-setuptools-scm
438 python-types-requests))
439 (propagated-inputs
440 (list python-click
441 python-packaging
442 python-pydantic-settings
443 python-readchar
444 python-rich
445 python-tomli
446 python-tomlkit
447 python-typer))
448 (home-page "https://anaconda.github.io/anaconda-cli-base/")
449 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
450 (description
451 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
452 (license license:bsd-3)))
453
454(define-public python-annexremote
455 (package
456 (name "python-annexremote")
457 (version "1.6.6")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://github.com/Lykos153/AnnexRemote")
463 (commit (string-append "v" version))))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
467 (build-system pyproject-build-system)
468 (native-inputs
469 (list python-pytest
470 python-setuptools
471 python-setuptools-scm))
472 (home-page "https://github.com/Lykos153/AnnexRemote")
473 (synopsis "Helper module to easily develop git-annex special remotes")
474 (description
475 "This package provides a helper module to develop special remotes for
476git-annex. AnnexRemote implements the line-based external special remote
477protocol of git-annex, while leaving the behavior of the remote up to the
478user.")
479 (license license:gpl3)))
480
481(define-public python-annotated-doc
482 (package
483 (name "python-annotated-doc")
484 (version "0.0.4")
485 (source
486 (origin
487 (method git-fetch)
488 (uri (git-reference
489 (url "https://github.com/fastapi/annotated-doc")
490 (commit version)))
491 (file-name (git-file-name name version))
492 (sha256
493 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
494 (build-system pyproject-build-system)
495 (native-inputs
496 (list python-pytest
497 python-pdm-backend))
498 (home-page "https://github.com/fastapi/annotated-doc")
499 (synopsis "Annotated for some Python objects")
500 (description
501 "This package implements a functionality for document parameters, class
502attributes, return types, and variables inline, with
503Annotated.")
504 (license license:expat)))
505
506(define-public python-archspec
507 (package
508 (name "python-archspec")
509 (version "0.2.5")
510 (source
511 (origin
512 (method git-fetch)
513 (uri (git-reference
514 (url "https://github.com/archspec/archspec")
515 (commit (string-append "v" version))
516 (recursive? #t)))
517 (file-name (git-file-name name version))
518 (sha256
519 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
520 (build-system pyproject-build-system)
521 (native-inputs
522 (list python-jsonschema
523 python-poetry-core
524 python-pytest))
525 (home-page "https://github.com/archspec/archspec")
526 (synopsis "Library to query system architecture")
527 (description
528 "Archspec offers human-readable labels for system architecture aspects.
529These aspects include CPU, network fabrics, etc. In addition, it offers
530APIs to detect, query, and compare them.")
531 (license license:expat)))
532
533(define-public python-astar
534 ;; The Git repository has no tag.
535 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
536 (revision "0"))
537 (package
538 (name "python-astar")
539 (version (git-version "0.99" revision commit))
540 (source
541 (origin
542 (method git-fetch)
543 (uri (git-reference
544 (url "https://github.com/jrialland/python-astar")
545 (commit commit)))
546 (file-name (git-file-name name version))
547 (sha256
548 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
549 (build-system pyproject-build-system)
550 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
551 ;; the test suite has been written for unittest.
552 (native-inputs (list python-poetry-core))
553 (home-page "https://github.com/jrialland/python-astar")
554 (synopsis "Implementation of the A* search algorithm")
555 (description
556 "The @code{astar} Python package provide a generic implementation
557of the A* graph traversal and pathfinding algorithm.")
558 (license license:bsd-3))))
559
560(define-public python-asyncclick
561 (package
562 (name "python-asyncclick")
563 (version "8.3.0.3")
564 (source
565 (origin
566 (method url-fetch)
567 (uri (pypi-uri "asyncclick" version))
568 (sha256
569 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
570 (build-system pyproject-build-system)
571 ;; tests: 1418 passed, 21 skipped, 1 xfailed
572 (native-inputs
573 (list less
574 python-flit-core
575 python-pytest
576 python-trio))
577 (propagated-inputs
578 (list python-anyio))
579 (home-page "https://github.com/python-trio/asyncclick")
580 (synopsis "Python composable command line utility, trio-compatible version ")
581 (description
582 "AsyncClick is a fork of Click that works well with anyio, Trio, or
583asyncio.")
584 (license license:bsd-3)))
585
586(define-public python-asyncstdlib
587 (package
588 (name "python-asyncstdlib")
589 (version "3.13.0")
590 (source
591 (origin
592 (method url-fetch)
593 (uri (pypi-uri "asyncstdlib" version))
594 (sha256
595 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
596 (build-system pyproject-build-system)
597 (native-inputs (list python-flit-core python-pytest))
598 (home-page "https://asyncstdlib.readthedocs.io")
599 (synopsis "Compatibility layer between the Python stdlib and @code{async}
600callables")
601 (description
602 "The @code{asyncstdlib} library re-implements functions and classes of
603the Python standard library to make them compatible with @code{async}
604callables, iterables and context managers. It is fully agnostic to
605@code{async} event loops and seamlessly works with @code{asyncio}, third-party
606libraries such as @code{trio}, as well as any custom @code{async} event
607loop.")
608 (license license:expat)))
609
610(define-public python-awesomeversion
611 (package
612 (name "python-awesomeversion")
613 (version "24.6.0")
614 (source
615 (origin
616 (method git-fetch)
617 (uri (git-reference
618 (url "https://github.com/ludeeus/awesomeversion")
619 (commit version)))
620 (file-name (git-file-name name version))
621 (sha256
622 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
623 (modules '((guix build utils)))
624 (snippet #~(substitute* "pyproject.toml"
625 (("version = \"0\"")
626 (format #f "version = \"~a\"" #$version))))))
627 (build-system pyproject-build-system)
628 (native-inputs
629 (list python-poetry-core
630 python-pytest
631 python-pytest-snapshot))
632 (home-page "https://github.com/ludeeus/awesomeversion")
633 (synopsis "Create and compare version objects")
634 (description
635 "This package provides a way to make anything a version object, and
636compare against a vast section of other version formats.")
637 (license license:expat)))
638
639(define-public python-awkward-cpp
640 (package
641 (name "python-awkward-cpp")
642 ;; TODO: any higher versions need pybind11 >= 3, see:
643 ;; <https://codeberg.org/guix/guix/pulls/4696>.
644 (version "47")
645 (source
646 (origin
647 (method url-fetch)
648 (uri (pypi-uri "awkward_cpp" version))
649 (sha256
650 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
651 (build-system pyproject-build-system)
652 ;; tests: 22304 passed, 524 skipped
653 (native-inputs
654 (list cmake-minimal
655 pybind11-2
656 python-pytest
657 python-scikit-build-core))
658 (propagated-inputs
659 (list python-numpy))
660 (home-page "https://awkward-array.org/")
661 (synopsis "CPU kernels and compiled extensions for Awkward Array")
662 (description "Awkward CPP provides precompiled routines for the awkward
663package. It is not useful on its own, only as a dependency for awkward.")
664 (license license:bsd-3)))
665
666(define-public python-awkward
667 (package
668 (name "python-awkward")
669 (version "2.8.5")
670 (source
671 (origin
672 (method url-fetch)
673 (uri (pypi-uri "awkward" version))
674 (sha256
675 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
676 (build-system pyproject-build-system)
677 (arguments
678 (list
679 ;; tests: 2798 passed, 156 skipped
680 #:test-flags
681 ;; CUDA is and requires proprietary software.
682 #~(list "--ignore=tests-cuda-kernels/"
683 "--ignore=tests-cuda/")))
684 (native-inputs
685 (list python-hatch-fancy-pypi-readme
686 python-hatchling
687 python-pytest))
688 (propagated-inputs
689 (list python-awkward-cpp
690 python-fsspec
691 python-importlib-metadata
692 python-numpy
693 python-packaging))
694 (home-page "https://awkward-array.org/")
695 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
696 (description "Awkward Array is a library for nested, variable-sized data,
697including arbitrary-length lists, records, mixed types, and missing data,
698using NumPy-like idioms.")
699 (license license:bsd-3)))
700
701(define-public python-bracex
702 (package
703 (name "python-bracex")
704 (version "2.6")
705 (source
706 (origin
707 (method git-fetch)
708 (uri (git-reference
709 (url "https://github.com/facelessuser/bracex")
710 (commit version)))
711 (file-name (git-file-name name version))
712 (sha256
713 (base32 "1j717bsjr3ms4snzrbv4izbblcwgdk1lzxzi2cjhr9365zgz4kdk"))))
714 (build-system pyproject-build-system)
715 (native-inputs
716 (list python-hatchling
717 python-pytest))
718 (home-page "https://facelessuser.github.io/bracex/")
719 (synopsis "Bash-style brace expansion for Python")
720 (description
721 "Bracex is a brace expansion library for Python that implements
722Bash-style brace expansion. It can generate strings from patterns like
723@code{@{a,b,c@}} or @code{@{1..10@}}.")
724 (license license:expat)))
725
726(define-public python-bresenham
727 (package
728 (name "python-bresenham")
729 (version "0.2.1")
730 (source
731 (origin
732 (method git-fetch)
733 (uri (git-reference
734 (url "https://github.com/encukou/bresenham")
735 (commit (string-append "v" version))))
736 (file-name (git-file-name name version))
737 (sha256
738 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
739 (build-system pyproject-build-system)
740 (native-inputs
741 (list python-pytest
742 python-setuptools
743 python-wheel))
744 (home-page "https://github.com/encukou/bresenham")
745 (synopsis "Implementation of Bresenham's line drawing algorithm")
746 (description
747 "This package provides a Python implementation of
748@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
749line drawing algorithm}.")
750 (license license:expat)))
751
752(define-public python-catppuccin
753 (package
754 (name "python-catppuccin")
755 (version "2.5.0")
756 (source
757 (origin
758 (method url-fetch)
759 (uri (pypi-uri "catppuccin" version))
760 (sha256
761 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
762 (build-system pyproject-build-system)
763 (native-inputs
764 (list python-hatchling python-pytest
765 ;; These are optional dependencies but required for tests.
766 python-matplotlib python-pygments python-rich))
767 (home-page "https://github.com/catppuccin/python")
768 (synopsis "Pastel palette for Python libraries")
769 (description "Catppuccin for Python is a soothing pastel palette for Python
770libraries. It aims to be the middle ground between low and high contrast
771themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
772 (license license:expat)))
773
774(define-public python-calmjs-parse
775 (package
776 (name "python-calmjs-parse")
777 (version "1.3.3")
778 (source
779 (origin
780 (method git-fetch)
781 (uri (git-reference
782 (url "https://github.com/calmjs/calmjs.parse/")
783 (commit version)))
784 (file-name (git-file-name name version))
785 (sha256
786 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
787 (build-system pyproject-build-system)
788 ;; tests: 797 passed, 1 warning
789 (native-inputs (list python-pytest python-setuptools))
790 (propagated-inputs (list python-ply))
791 (home-page "https://github.com/calmjs/calmjs.parse/")
792 (synopsis "Parsers for ECMA standards")
793 (description
794 "@code{Calmjs-parse} is a collection of helper libraries for
795understanding ECMA script.")
796 (license license:expat)))
797
798(define-public python-chameleon
799 (package
800 (name "python-chameleon")
801 (version "4.6.0")
802 (source
803 (origin
804 (method url-fetch)
805 (uri (pypi-uri "Chameleon" version))
806 (sha256
807 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
808 (build-system pyproject-build-system)
809 (native-inputs
810 (list python-pytest
811 python-setuptools))
812 (home-page "https://chameleon.readthedocs.io")
813 (synopsis "Fast HTML/XML Template Compiler")
814 (description
815 "Chameleon is an HTML/XML template engine for Python. It uses the page
816templates language.")
817 ;; Project is duo licensed, see: LICENSE.txt.
818 (license (list license:zpl2.1
819 license:psfl))))
820
821(define-public python-click-extra
822 (package
823 (name "python-click-extra")
824 (version "8.1.4")
825 (source
826 (origin
827 (method git-fetch)
828 (uri (git-reference
829 (url "https://github.com/kdeldycke/click-extra")
830 (commit (string-append "v" version))))
831 (file-name (git-file-name name version))
832 (sha256
833 (base32 "1mglhfrmwq616irga69vv206bf3d20kp1jm8fvhgcidj53cxygj7"))))
834 (build-system pyproject-build-system)
835 ;; Upstream uses uv-build which is not yet available in Guix.
836 (arguments
837 (list
838 #:build-backend "setuptools.build_meta"
839 #:test-flags
840 ;; Skip the network tests.
841 #~(list "-m" "not network")
842 #:phases
843 ;; The setuptools backend used here (in place of upstream's
844 ;; uv-build) installs only ``*.py``; declare the data files loaded
845 ;; at import time as package data.
846 #~(modify-phases %standard-phases
847 (add-after 'unpack 'declare-package-data
848 (lambda _
849 (substitute* "pyproject.toml"
850 (("^\\[build-system\\]")
851 (string-append
852 "[tool.setuptools.package-data]\n"
853 "click_extra = [\"*.toml\", \"py.typed\"]\n"
854 "\n[build-system]"))))))))
855
856 (native-inputs
857 ;; Optional libraries imported at module level by the test suite.
858 (list python-hjson
859 python-jsonschema
860 python-pygments
861 python-pytest
862 python-pytest-httpserver
863 python-pyyaml
864 python-requests
865 python-setuptools
866 python-tomlkit
867 python-xmltodict))
868 (propagated-inputs
869 (list python-boltons
870 python-click
871 python-cloup
872 python-deepmerge
873 python-extra-platforms
874 python-tabulate
875 python-wcmatch
876 python-wcwidth))
877 (home-page "https://kdeldycke.github.io/click-extra/")
878 (synopsis "Drop-in replacement for Click to build colorful CLIs")
879 (description
880 "Click Extra extends the Click framework with colored help screens,
881configuration file support, table rendering, and platform detection. It
882serves as a drop-in replacement adding features for user-friendly command-line
883interfaces.")
884 (license license:gpl2+)))
885
886(define-public python-conda-content-trust
887 (package
888 (name "python-conda-content-trust")
889 (version "0.2.0")
890 (source
891 (origin
892 (method git-fetch)
893 (uri (git-reference
894 (url "https://github.com/conda/conda-content-trust")
895 (commit version)))
896 (file-name (git-file-name name version))
897 (sha256
898 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
899 (build-system pyproject-build-system)
900 (arguments
901 (list
902 #:test-flags
903 ;; XXX: Not packaged yet:
904 ;; <https://github.com/secure-systems-lab/securesystemslib>.
905 ;;
906 ;; ImportError: The securesystemslib library is required, which appears
907 ;; to be unavailable.
908 #~(list #$@(map (lambda (test) (string-append "--deselect="
909 "tests/test_root.py::"
910 test))
911 (list "test_sign_root_metadata_dict_via_gpg"
912 "test_sign_root_metadata_via_gpg"
913 "test_gpg_pubkey_in_ssl_format")))))
914 (native-inputs
915 (list python-hatch-vcs
916 python-hatchling
917 python-pytest))
918 (propagated-inputs
919 (list python-cryptography))
920 (home-page "https://github.com/conda/conda-content-trust")
921 (synopsis "Signing and verification tools for Conda")
922 (description
923 "This package implements a functionalit of signing and verification tools
924for Conda. @url{https://theupdateframework.io/, Based on The Update
925Framework (TUF)}, conda-content-trust is intended to ensure that when users in
926the conda ecosystem obtain a package or data about that package, they can know
927whether or not it is trustworthy (e.g. originally comes from a reliable source
928and has not been tampered with). A basic library and basic CLI are included
929to provide signing, verification, and trust delegation functionality.")
930 (license license:bsd-3)))
931
932(define-public python-conda-inject
933 (package
934 (name "python-conda-inject")
935 (version "1.3.2")
936 (source
937 (origin
938 (method git-fetch)
939 (uri (git-reference
940 (url "https://github.com/koesterlab/conda-inject")
941 (commit (string-append "v" version))))
942 (file-name (git-file-name name version))
943 (sha256
944 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
945 (build-system pyproject-build-system)
946 (arguments
947 (list #:tests? #f)) ; tests require setting up Conda
948 (native-inputs
949 (list python-poetry-core))
950 (propagated-inputs
951 (list python-pyyaml))
952 (home-page "https://github.com/koesterlab/conda-inject")
953 (synopsis "Inject a conda environment into the current python environment")
954 (description
955 "This package provides helper functions for injecting a conda
956environment into the current python environment (by modifying @code{sys.path},
957without actually changing the current python environment).")
958 (license license:expat)))
959
960(define-public python-copydetect
961 (package
962 (name "python-copydetect")
963 (version "0.5.0")
964 (source
965 (origin
966 (method git-fetch)
967 (uri (git-reference
968 (url "https://github.com/blingenf/copydetect")
969 (commit version)))
970 (sha256
971 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
972 (build-system pyproject-build-system)
973 (propagated-inputs (list python-jinja2
974 python-matplotlib
975 python-numpy
976 python-pygments
977 python-tqdm))
978 (native-inputs (list python-setuptools
979 python-pytest
980 python-wheel))
981 (home-page "https://github.com/blingenf/copydetect")
982 (synopsis "Code plagiarism detection tool")
983 (description "Copydetect is a tool to detect likely instances of plagiarism
984based on the winnowing algorithm. It takes a list of directories as input and
985generates an HTML report displaying copied slices as output.")
986 (license license:expat)))
987
988(define-public python-couleur
989 (package
990 (name "python-couleur")
991 (version "0.7.4")
992 (source
993 (origin
994 (method url-fetch)
995 (uri (pypi-uri "couleur" version))
996 (sha256
997 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
998 (build-system pyproject-build-system)
999 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1000 (native-inputs
1001 (list python-setuptools
1002 python-wheel))
1003 (home-page "https://github.com/gabrielfalcao/couleur")
1004 (synopsis "ANSI terminal tool for Python")
1005 (description
1006 "This package provides an ANSI terminal tool for Python, colored shell
1007and other handy fancy features.")
1008 (license license:lgpl3+)))
1009
1010(define-public python-crc
1011 (package
1012 (name "python-crc")
1013 (version "7.1.0")
1014 (source
1015 (origin
1016 (method git-fetch)
1017 (uri (git-reference
1018 (url "https://github.com/Nicoretti/crc/")
1019 (commit version)))
1020 (file-name (git-file-name name version))
1021 (sha256
1022 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1023 (build-system pyproject-build-system)
1024 (native-inputs
1025 (list python-poetry-core
1026 python-pytest
1027 python-wheel))
1028 (home-page "https://nicoretti.github.io/crc/")
1029 (synopsis "Pure Python CRC library")
1030 (description
1031 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1032CRC} checksums, using predefined and custom CRC configurations.
1033
1034Configurations:
1035@table @asis
1036@item CRC8
1037 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1038@item CRC16
1039 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1040@item CRC32
1041 CRC32 AUTOSAR BZIP2 POSIX
1042@item CRC64
1043 CRC64
1044@end table")
1045 (license license:bsd-2)))
1046
1047(define-public python-cron-converter
1048 (package
1049 (name "python-cron-converter")
1050 (version "1.3.1")
1051 (source
1052 (origin
1053 (method git-fetch)
1054 (uri (git-reference
1055 (url "https://github.com/Sonic0/cron-converter")
1056 (commit (string-append "v" version))))
1057 (file-name (git-file-name name version))
1058 (sha256
1059 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1060 (build-system pyproject-build-system)
1061 (arguments
1062 (list #:test-backend #~'unittest
1063 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1064 (native-inputs
1065 (list python-dateutil
1066 python-setuptools))
1067 (propagated-inputs
1068 (list python-dateutil))
1069 (home-page "https://github.com/Sonic0/cron-converter")
1070 (synopsis "Cron string parser and scheduler for Python")
1071 (description
1072 "Cron-converter provides a Cron string parser (from string/lists to
1073string/lists) and iteration for the datetime object with a cron like format.")
1074 (license license:expat)))
1075
1076(define-public python-curtsies
1077 (package
1078 (name "python-curtsies")
1079 (version "0.4.3")
1080 (source
1081 (origin
1082 (method url-fetch)
1083 (uri (pypi-uri "curtsies" version))
1084 (sha256
1085 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1086 (build-system pyproject-build-system)
1087 (native-inputs
1088 (list python-pyte
1089 python-pytest
1090 python-setuptools
1091 python-wheel))
1092 (propagated-inputs
1093 (list python-blessed
1094 python-cwcwidth))
1095 (home-page "https://github.com/bpython/curtsies")
1096 (synopsis "Library for curses-like terminal interaction with colored strings")
1097 (description
1098 "Curtsies is a Python library for interacting with the terminal. It
1099features string-like objects which carry formatting information, per-line
1100fullscreen terminal rendering, and keyboard input event reporting.")
1101 (license license:expat)))
1102
1103(define-public python-customtkinter
1104 (package
1105 (name "python-customtkinter")
1106 (version "5.2.2")
1107 (source
1108 (origin
1109 (method git-fetch)
1110 (uri (git-reference
1111 (url "https://github.com/TomSchimansky/CustomTkinter")
1112 (commit (string-append "v" version))))
1113 (file-name (git-file-name name version))
1114 (sha256
1115 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1116 (build-system pyproject-build-system)
1117 (arguments
1118 (list
1119 #:phases
1120 #~(modify-phases %standard-phases
1121 (add-before 'check 'start-xorg-server
1122 (lambda _
1123 (setenv "HOME" "/tmp")
1124 ;; The test suite requires a running X server.
1125 (system "Xvfb :99 -screen 0 1024x768x24 &")
1126 (setenv "DISPLAY" ":99.0")))
1127 (replace 'check
1128 (lambda* (#:key tests? #:allow-other-keys)
1129 (when tests?
1130 (with-directory-excursion "test"
1131 (invoke "python" "unit_tests/test_all.py"))))))))
1132 (propagated-inputs
1133 (list (list python "tk")
1134 python-darkdetect
1135 python-packaging))
1136 (native-inputs
1137 (list python-setuptools
1138 xorg-server-for-tests))
1139 (home-page "https://customtkinter.tomschimansky.com")
1140 (synopsis
1141 "Python @acronym{User Interface, UI} library based on Tkinter")
1142 (description
1143 "CustomTkinter provides fully customizable widgets, created and used
1144like normal Tkinter widgets, which can also be used in combination with normal
1145Tkinter elements.")
1146 (license license:expat)))
1147
1148(define-public python-cyclopts
1149 (package
1150 (name "python-cyclopts")
1151 (version "4.14.0")
1152 (source
1153 (origin
1154 (method git-fetch)
1155 (uri (git-reference
1156 (url "https://github.com/BrianPugh/cyclopts")
1157 (commit (string-append "v" version))))
1158 (file-name (git-file-name name version))
1159 (sha256
1160 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1161 (build-system pyproject-build-system)
1162 (arguments
1163 (list
1164 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1165 #:test-flags
1166 #~(list #$@(map (lambda (test) (string-append "--deselect="
1167 "tests/completion/"
1168 "test_bash.py::"
1169 test))
1170 (list "test_list_path_multi_positional_default_case"
1171 "test_eq_form_path_completion"
1172 "test_bash_path_completion_reflects_caller_cwd"))
1173 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1174 (native-inputs
1175 (list python-docutils
1176 python-hatch-vcs
1177 python-hatchling
1178 python-mkdocs
1179 python-pexpect
1180 python-pydantic
1181 python-pytest
1182 python-pytest-mock
1183 python-pyyaml
1184 python-sphinx
1185 python-syrupy
1186 python-toml
1187 python-trio))
1188 (propagated-inputs
1189 (list python-attrs
1190 python-docstring-parser
1191 python-rich
1192 python-rich-rst
1193 python-tomli
1194 python-typing-extensions))
1195 (home-page "https://github.com/BrianPugh/cyclopts")
1196 (synopsis "Intuitive, easy CLIs based on type hints")
1197 (description
1198 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1199that aims to provide an intuitive & efficient developer experience.")
1200 (license license:asl2.0)))
1201
1202(define-public python-darkdetect
1203 (package
1204 (name "python-darkdetect")
1205 (version "0.8.0")
1206 (source
1207 (origin
1208 (method url-fetch)
1209 (uri (pypi-uri "darkdetect" version))
1210 (sha256
1211 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1212 (build-system pyproject-build-system)
1213 (arguments
1214 (list
1215 #:tests? #f)) ;no tests in PyPI or Git.
1216 (native-inputs (list python-setuptools))
1217 (home-page "https://github.com/albertosottile/darkdetect")
1218 (synopsis "Detect OS dark mode from Python")
1219 (description
1220 "This package allows to detect if the user is using Dark Mode.")
1221 (license license:bsd-3)))
1222
1223(define-public python-decopatch
1224 (package
1225 (name "python-decopatch")
1226 (version "1.4.10")
1227 (source
1228 (origin
1229 (method url-fetch)
1230 (uri (pypi-uri "decopatch" version))
1231 (sha256
1232 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1233 (build-system pyproject-build-system)
1234 (arguments
1235 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1236 (native-inputs
1237 (list python-setuptools
1238 python-setuptools-scm))
1239 (propagated-inputs
1240 (list python-makefun))
1241 (home-page "https://github.com/smarie/python-decopatch")
1242 (synopsis "Create decorators easily in Python")
1243 (description
1244 "This package provide implements a functionality to simplify writing
1245decorators in Python.")
1246 (license license:bsd-3)))
1247
1248(define-public python-discovery
1249 (package
1250 (name "python-discovery")
1251 (version "1.2.1")
1252 (source
1253 (origin
1254 (method git-fetch)
1255 (uri (git-reference
1256 (url "https://github.com/tox-dev/python-discovery")
1257 (commit version)))
1258 (file-name (git-file-name name version))
1259 (sha256
1260 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1261 (build-system pyproject-build-system)
1262 (arguments
1263 (list
1264 #:test-flags
1265 ;; assert []
1266 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1267 (native-inputs
1268 (list python-pytest
1269 python-pytest-mock
1270 python-hatchling
1271 python-hatch-vcs))
1272 (propagated-inputs
1273 (list python-filelock
1274 python-platformdirs))
1275 (home-page "https://github.com/tox-dev/python-discovery")
1276 (synopsis "Python interpreter discovery")
1277 (description
1278 "@code{python-discovery} is a library for discovering Python interpreters
1279installed on the current machine which may have multiple Python versions from
1280system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1281Windows registry (PEP 514). This library finds the right one.")
1282 (license license:expat)))
1283
1284(define-public python-distance
1285 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1286 (revision "0"))
1287 (package
1288 (name "python-distance")
1289 (version (git-version "0.1.3" revision commit))
1290 (source
1291 (origin
1292 (method git-fetch)
1293 (uri (git-reference
1294 (url "https://github.com/doukremt/distance")
1295 (commit commit)))
1296 (file-name (git-file-name name version))
1297 (sha256
1298 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1299 (build-system pyproject-build-system)
1300 (arguments
1301 (list #:test-backend #~'custom
1302 #:test-flags #~(list "tests/tests.py")))
1303 (native-inputs (list python-setuptools))
1304 (home-page "https://github.com/doukremt/distance")
1305 (synopsis "Utilities for comparing sequences")
1306 (description
1307 "This package provides helpers for computing similarities between
1308arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1309Sorensen distance, plus some bonuses. All distance computations are
1310implemented in pure Python, and most of them are also implemented in C.")
1311 (license license:gpl2+))))
1312
1313(define-public python-docopt-ng
1314 (package
1315 (name "python-docopt-ng")
1316 (version "0.9.0")
1317 (source
1318 (origin
1319 (method git-fetch)
1320 (uri (git-reference
1321 (url "https://github.com/jazzband/docopt-ng")
1322 (commit version)))
1323 (file-name (git-file-name name version))
1324 (sha256
1325 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1326 (build-system pyproject-build-system)
1327 (native-inputs
1328 (list python-pdm-backend
1329 python-pytest-8))
1330 (home-page "https://github.com/jazzband/docopt-ng")
1331 (synopsis "Humane command line arguments parser")
1332 (description
1333 "This package provides Jazzband-maintained fork of docopt, the humane
1334command line arguments parser.")
1335 (license license:expat)))
1336
1337(define-public python-doi
1338 (package
1339 (name "python-doi")
1340 (version "0.2.0")
1341 (source
1342 (origin
1343 (method url-fetch)
1344 (uri (pypi-uri "python-doi" version))
1345 (sha256
1346 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1347 (build-system pyproject-build-system)
1348 (arguments
1349 (list #:test-flags
1350 #~(list "-vv"
1351 (string-append "-k not (test_validate_doi "
1352 "or test_get_real_url_from_doi)"))))
1353 (native-inputs
1354 (list python-pytest
1355 python-pytest-xdist
1356 python-setuptools
1357 python-sphinx
1358 python-sphinx-autobuild
1359 python-sphinx-rtd-theme))
1360 (home-page "https://github.com/papis/python-doi")
1361 (synopsis "Python package to work with Document Object Identifier (doi)")
1362 (description
1363 "Python package to work with Document Object Identifier (doi).")
1364 (license license:gpl3)))
1365
1366(define-public python-domdf-python-tools
1367 (package
1368 (name "python-domdf-python-tools")
1369 (version "3.10.0")
1370 (source
1371 (origin
1372 (method url-fetch)
1373 (uri (pypi-uri "domdf_python_tools" version))
1374 (sha256
1375 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1376 (build-system pyproject-build-system)
1377 (native-inputs (list python-hatch-requirements-txt))
1378 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1379 (propagated-inputs
1380 (list python-natsort
1381 python-typing-extensions))
1382 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1383 (synopsis "Helpful functions for Python")
1384 (description
1385 "This package provide helpful functions for Python's testing and
1386packaging tasks.")
1387 (license license:expat)))
1388
1389(define-public python-donfig
1390 (package
1391 (name "python-donfig")
1392 (version "0.8.1.post1")
1393 (source
1394 (origin
1395 (method git-fetch)
1396 (uri (git-reference
1397 (url "https://github.com/pytroll/donfig")
1398 (commit (string-append "v" version))))
1399 (file-name (git-file-name name version))
1400 (sha256
1401 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1402 (build-system pyproject-build-system)
1403 (native-inputs
1404 (list python-cloudpickle
1405 python-pytest
1406 python-setuptools
1407 python-versioneer))
1408 (propagated-inputs
1409 (list python-pyyaml))
1410 (home-page "https://github.com/pytroll/donfig")
1411 (synopsis "Python package for configuring a python package")
1412 (description
1413 "Donfig is a Python library meant to make configuration easier for other
1414python packages. Donfig can be configured programmatically, by environment
1415variables, or from YAML files in standard locations. The below examples show
1416the basics of using donfig.")
1417 (license license:expat)))
1418
1419(define-public python-duet
1420 (package
1421 (name "python-duet")
1422 (version "0.2.9")
1423 (source
1424 (origin
1425 (method git-fetch)
1426 (uri (git-reference
1427 (url "https://github.com/google/duet")
1428 (commit (string-append "v" version))))
1429 (file-name (git-file-name name version))
1430 (sha256
1431 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1432 (build-system pyproject-build-system)
1433 (native-inputs (list python-pytest python-setuptools))
1434 (home-page "https://github.com/google/duet")
1435 (synopsis "Simple future-based async library for Python")
1436 (description
1437 "This package provides a simple @code{Future}-based async library for
1438Python. Duet uses a structured concurrency approach to async programming,
1439relying on the @code{Future} interface for parallelism. Duet also provides
1440a way to run async/await coroutines around those @code{Future}s. Unlike most
1441async libraries, duet is re-entrant.")
1442 (license license:asl2.0)))
1443
1444(define-public python-envs
1445 (package
1446 (name "python-envs")
1447 (version "1.4")
1448 (source
1449 (origin
1450 (method url-fetch)
1451 (uri (pypi-uri "envs" version))
1452 (sha256
1453 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1454 (build-system pyproject-build-system)
1455 (arguments
1456 (list #:test-backend #~'unittest))
1457 (native-inputs
1458 (list python-packaging python-poetry-core))
1459 (propagated-inputs
1460 (list python-click python-jinja2 python-terminaltables))
1461 (home-page "https://github.com/capless/envs")
1462 (synopsis "Easy access of environment variables from Python")
1463 (description
1464 "This package implements a functionality to access of environment
1465variables from Python with support for strings, booleans, list, tuples, and
1466dicts.")
1467 (license license:asl2.0)))
1468
1469(define-public python-exitcode
1470 (package
1471 (name "python-exitcode")
1472 (version "0.1.0")
1473 (source
1474 (origin
1475 (method url-fetch)
1476 (uri (pypi-uri "exitcode" version))
1477 (sha256
1478 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1479 (build-system pyproject-build-system)
1480 (arguments
1481 (list #:tests? #f)) ; no tests in PyPI or Git
1482 (native-inputs
1483 (list python-poetry-core
1484 python-setuptools))
1485 (home-page "https://github.com/rumpelsepp/exitcode")
1486 (synopsis "Preferred system exit codes as defined by sysexits.h")
1487 (description
1488 "This package implements a preferred system exit codes as defined by
1489@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1490Rust's @url{https://docs.rs/exitcode, exitcode}.")
1491 (license license:expat)))
1492
1493(define-public python-exrex
1494 (package
1495 (name "python-exrex")
1496 (version "0.12.0")
1497 (source
1498 (origin
1499 (method git-fetch)
1500 (uri (git-reference
1501 (url "https://github.com/asciimoo/exrex")
1502 (commit (string-append "v" version))))
1503 (file-name (git-file-name name version))
1504 (sha256
1505 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1506 (build-system pyproject-build-system)
1507 (arguments (list #:test-backend #~'custom
1508 #:test-flags #~'("tests.py")))
1509 (native-inputs (list python-setuptools))
1510 (home-page "https://github.com/asciimoo/exrex")
1511 (synopsis "Irregular methods for regular expressions")
1512 (description
1513 "Exrex is a command line tool and Python module that generates all,
1514or random, matching strings to a given regular expression.")
1515 (license license:agpl3+)))
1516
1517(define-public python-extra-platforms
1518 (package
1519 (name "python-extra-platforms")
1520 (version "13.0.1")
1521 (source
1522 (origin
1523 (method git-fetch)
1524 (uri (git-reference
1525 (url "https://github.com/kdeldycke/extra-platforms")
1526 (commit (string-append "v" version))))
1527 (file-name (git-file-name name version))
1528 (sha256
1529 (base32 "0mqyz6m1sdy6y7iz9yf63hljpbjvzcw16vda394b0w2pb41s5sv1"))))
1530 (build-system pyproject-build-system)
1531 (arguments
1532 (list
1533 #:build-backend "setuptools.build_meta"
1534 ;; Skip network tests and one that shells out to ``uv``.
1535 #:test-flags #~(list "-m" "not network"
1536 "--ignore=tests/test_sphinx_crossrefs.py")))
1537 (native-inputs
1538 (list python-pytest
1539 python-requests
1540 python-setuptools))
1541 (home-page "https://kdeldycke.github.io/extra-platforms/")
1542 (synopsis "Detection of architectures, platforms, and OS families")
1543 (description
1544 "Extra Platforms detects and identifies operating systems, platforms,
1545architectures, and OS families. It groups them by family for conditional
1546logic in cross-platform applications.")
1547 (license license:asl2.0)))
1548
1549(define-public python-ezdxf
1550 (package
1551 (name "python-ezdxf")
1552 (version "1.3.5")
1553 (source
1554 (origin
1555 (method git-fetch)
1556 (uri (git-reference
1557 (url "https://github.com/mozman/ezdxf")
1558 (commit (string-append "v" version))))
1559 (sha256
1560 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1561 (build-system pyproject-build-system)
1562 (native-inputs (list python-cython python-pillow python-pytest
1563 python-setuptools unzip))
1564 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1565 python-typing-extensions))
1566 (home-page "https://ezdxf.mozman.at/")
1567 (synopsis "Python library to read and write DXF drawings")
1568 (description "ezdxf is a Python package to create new DXF files and
1569read/modify/write existing DXF files.")
1570 (license license:expat)))
1571
1572(define-public python-fastnumbers
1573 (package
1574 (name "python-fastnumbers")
1575 (version "5.1.1")
1576 (source
1577 (origin
1578 (method url-fetch)
1579 (uri (pypi-uri "fastnumbers" version))
1580 (sha256
1581 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1582 (build-system pyproject-build-system)
1583 (native-inputs
1584 (list python-numpy
1585 python-pytest
1586 python-setuptools
1587 python-setuptools-scm))
1588 (home-page "https://github.com/SethMMorton/fastnumbers")
1589 (synopsis "Super-fast and clean conversions to numbers")
1590 (description
1591 "This package provides provides drop-in replacements for the Python
1592built-in @code{int} and @code{float} that are on par or faster with the Python
1593equivalents.")
1594 (license license:expat)))
1595
1596(define-public python-findpython
1597 (package
1598 (name "python-findpython")
1599 (version "0.7.0")
1600 (source
1601 (origin
1602 (method url-fetch)
1603 (uri (pypi-uri "findpython" version))
1604 (sha256
1605 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1606 (build-system pyproject-build-system)
1607 (native-inputs
1608 (list python-pdm-backend
1609 python-pytest))
1610 (propagated-inputs
1611 (list python-packaging
1612 python-platformdirs))
1613 (home-page "https://github.com/frostming/findpython")
1614 (synopsis "Find Python versions the system")
1615 (description
1616 "This package provides a utility to find Python versions on the current
1617system.")
1618 (license license:expat)))
1619
1620(define-public python-flexcache
1621 (package
1622 (name "python-flexcache")
1623 (version "0.3")
1624 (source
1625 (origin
1626 (method url-fetch)
1627 (uri (pypi-uri "flexcache" version))
1628 (sha256
1629 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1630 (build-system pyproject-build-system)
1631 (native-inputs
1632 (list python-pytest
1633 python-pytest-mpl
1634 python-pytest-subtests
1635 python-setuptools
1636 python-setuptools-scm
1637 python-wheel))
1638 (propagated-inputs
1639 (list python-typing-extensions))
1640 (home-page "https://github.com/hgrecco/flexcache")
1641 (synopsis "Caching transformed versions of a source object")
1642 (description
1643 "This package implements a functionality to cache on disk the result of
1644expensive calculations. It was started as part of
1645@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1646 (license license:bsd-3)))
1647
1648(define-public python-flexparser
1649 (package
1650 (name "python-flexparser")
1651 (version "0.4")
1652 (source
1653 (origin
1654 (method url-fetch)
1655 (uri (pypi-uri "flexparser" version))
1656 (sha256
1657 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1658 (build-system pyproject-build-system)
1659 (native-inputs
1660 (list python-pytest
1661 python-pytest-mpl
1662 python-pytest-subtests
1663 python-setuptools
1664 python-setuptools-scm
1665 python-wheel))
1666 (propagated-inputs
1667 (list python-typing-extensions))
1668 (home-page "https://github.com/hgrecco/flexparser")
1669 (synopsis "Parsing made fun ... using typing")
1670 (description "This project provides a typed parser. It was started as
1671part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1672package. ")
1673 (license license:bsd-3)))
1674
1675(define-public python-fortranformat
1676 (package
1677 (name "python-fortranformat")
1678 (version "2.0.3")
1679 (source
1680 (origin
1681 (method git-fetch)
1682 (uri (git-reference
1683 (url "https://github.com/brendanarnold/py-fortranformat")
1684 (commit (string-append "v" version))))
1685 (file-name (git-file-name name version))
1686 (sha256
1687 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1688 (build-system pyproject-build-system)
1689 (native-inputs
1690 (list python-poetry-core
1691 python-pytest))
1692 (home-page "https://github.com/brendanarnold/py-fortranformat")
1693 (synopsis "FORTRAN format interpreter for Python")
1694 (description
1695 "This package mimics FORTRAN textual IO in Python - generates text from a
1696Python list of variables or will read a line of text into Python variables
1697according to the FORTRAN format statement passed.")
1698 (license license:expat)))
1699
1700(define-public python-gest-api
1701 (package
1702 (name "python-gest-api")
1703 (version "0.1")
1704 (source
1705 (origin
1706 (method url-fetch)
1707 (uri (pypi-uri "gest_api" version))
1708 (sha256
1709 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1710 (build-system pyproject-build-system)
1711 (native-inputs
1712 (list python-pytest
1713 python-setuptools))
1714 (propagated-inputs
1715 (list python-pydantic))
1716 (home-page "https://github.com/campa-consortium/gest-api")
1717 (synopsis "Standardization for generators")
1718 (description
1719 "This package provides a standard for generating test points and
1720exchanging variables, objectives, and constraints in optimization problems.
1721
1722It is an effort to standardize the interface of the generators in optimization
1723libraries such as:
1724@itemize
1725@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1726high-level optimization in Python
1727@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1728scale, powered by @code{libEnsemble}
1729@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1730toolkit for coordinating asynchronous and dynamic ensembles of calculations
1731@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1732and execution of large, black-box optimization problems
1733@end itemize")
1734 (license license:bsd-3)))
1735
1736(define-public python-grapheme
1737 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1738 ;; branch.
1739 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1740 (revision "0"))
1741 (package
1742 (name "python-grapheme")
1743 (version (git-version "0.6.0" revision commit))
1744 (source
1745 (origin
1746 (method git-fetch)
1747 (uri (git-reference
1748 (url "https://github.com/alvinlindstam/grapheme")
1749 (commit commit)))
1750 (file-name (git-file-name name version))
1751 (sha256
1752 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1753 (build-system pyproject-build-system)
1754 (native-inputs
1755 (list python-pytest
1756 python-setuptools))
1757 (home-page "https://github.com/alvinlindstam/grapheme")
1758 (synopsis "Unicode grapheme helpers")
1759 (description
1760 "This package provides a functionality for working with user perceived
1761characters. More specifically, string manipulation and calculation functions
1762for working with grapheme cluster groups (graphemes) as defined by the
1763@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1764 (license license:expat))))
1765
1766(define-public python-halo
1767 (package
1768 (name "python-halo")
1769 (version "0.0.31")
1770 (source
1771 (origin
1772 (method url-fetch)
1773 (uri (pypi-uri "halo" version))
1774 (sha256
1775 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1776 (build-system pyproject-build-system)
1777 (arguments
1778 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1779 (native-inputs
1780 (list python-setuptools))
1781 (propagated-inputs
1782 (list python-colorama
1783 python-log-symbols
1784 python-six
1785 python-spinners
1786 python-termcolor))
1787 (home-page "https://github.com/manrajgrover/halo")
1788 (synopsis "Python library to display graphical spinners in the terminal")
1789 (description
1790 "Halo is a Python library to display graphical spinners in the terminal.
1791It also supports IPython/Jupyter.")
1792 (license license:expat)))
1793
1794(define-public python-hatch-argparse-manpage
1795 (package
1796 (name "python-hatch-argparse-manpage")
1797 (version "1.0.0")
1798 (source
1799 (origin
1800 (method git-fetch)
1801 (uri (git-reference
1802 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1803 (commit (string-append "v" version))))
1804 (file-name (git-file-name name version))
1805 (sha256
1806 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
1807 (build-system pyproject-build-system)
1808 (arguments (list #:tests? #f)) ; No tests upstream.
1809 (native-inputs (list python-hatchling))
1810 (propagated-inputs (list python-argparse-manpage python-rich))
1811 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1812 (synopsis "Hatch build hook plugin to generate manual pages")
1813 (description
1814 "This package provides a build hook plugin for Hatch to automatically
1815 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1816by Pavel Raiskup.")
1817 (license license:gpl3+)))
1818
1819(define-public python-hatch-gettext
1820 (package
1821 (name "python-hatch-gettext")
1822 (version "1.1.0")
1823 (source
1824 (origin
1825 (method git-fetch)
1826 (uri (git-reference
1827 (url "https://github.com/damonlynch/hatch-gettext")
1828 (commit (string-append "v" version))))
1829 (file-name (git-file-name name version))
1830 (sha256
1831 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1832 (build-system pyproject-build-system)
1833 (arguments (list #:tests? #f)) ; No tests upstream.
1834 (native-inputs (list python-hatchling))
1835 (propagated-inputs (list python-rich))
1836 (home-page "https://github.com/damonlynch/hatch-gettext")
1837 (synopsis "Hatch build hook plugin for GNU gettext")
1838 (description
1839 "This package provides a build hook plugin for Hatch that compiles
1840 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1841 (license license:gpl3+)))
1842
1843(define-public python-hatch-nodejs-version
1844 (package
1845 (name "python-hatch-nodejs-version")
1846 (version "0.4.0")
1847 (source
1848 (origin
1849 (method git-fetch)
1850 (uri (git-reference
1851 (url "https://github.com/agoose77/hatch-nodejs-version")
1852 (commit (string-append "v" version))))
1853 (file-name (git-file-name name version))
1854 (sha256
1855 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
1856 (build-system pyproject-build-system)
1857 (propagated-inputs (list python-hatchling))
1858 (native-inputs (list python-hatchling python-pytest))
1859 (home-page "https://github.com/agoose77/hatch-nodejs-version")
1860 (synopsis "Hatch plugin for versioning from a package.json file")
1861 (description "This package provides a hatch plugin for fetching a version
1862from a @code{package.json} file.")
1863 (license license:expat)))
1864
1865(define-public python-hatch-regex-commit
1866 (package
1867 (name "python-hatch-regex-commit")
1868 (version "0.0.4")
1869 (source
1870 (origin
1871 (method git-fetch)
1872 (uri (git-reference
1873 (url "https://github.com/frankie567/hatch-regex-commit")
1874 (commit (string-append "v" version))))
1875 (file-name (git-file-name name version))
1876 (sha256
1877 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
1878 (build-system pyproject-build-system)
1879 (arguments (list #:tests? #f)) ;test directory is empty
1880 (propagated-inputs (list python-hatchling))
1881 (native-inputs (list python-hatchling))
1882 (home-page "https://github.com/frankie567/hatch-regex-commit")
1883 (synopsis "Hatch plugin to create a commit and tag when bumping version")
1884 (description
1885 "This provides a plugin for Hatch that automatically creates a Git commit
1886and tag after version bumping.")
1887 (license license:expat)))
1888
1889;; TODO: Move to ci or task-runners, see:
1890;; <https://codeberg.org/guix/guix/issues/3096>.
1891(define-public python-huey
1892 (package
1893 (name "python-huey")
1894 (version "2.5.3")
1895 (source
1896 (origin
1897 (method git-fetch)
1898 (uri (git-reference
1899 (url "https://github.com/coleifer/huey")
1900 (commit version)))
1901 (file-name (git-file-name name version))
1902 (sha256
1903 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1904 (build-system pyproject-build-system)
1905 (arguments
1906 (list
1907 #:phases
1908 #~(modify-phases %standard-phases
1909 (add-after 'unpack 'remove-which
1910 (lambda _
1911 (substitute* "huey/tests/test_kt_huey.py"
1912 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1913 "has_ktserver = False"))))
1914 (replace 'check
1915 (lambda* (#:key tests? #:allow-other-keys)
1916 (when tests?
1917 (spawn "redis-server" '("redis-server"))
1918 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1919 (native-inputs (list python-setuptools redis tzdata-for-tests))
1920 (propagated-inputs (list python-redis))
1921 (home-page "https://huey.readthedocs.io")
1922 (synopsis "Lightweight task queue for Python")
1923 (description
1924 "Huey is a lightweight task queue for Python applications. Huey
1925supports:
1926@itemize
1927@item Redis, SQLite, file-system, or in-memory storage
1928@item multi-process, multi-thread or greenlet task execution models
1929@item scheduling tasks to execute at a given time, or after a given delay
1930@item scheduling recurring tasks, like a crontab
1931@item automatically retrying tasks that fail
1932@item task prioritization
1933@item task result storage
1934@item task expiration
1935@item task locking
1936@item task pipelines and chains
1937@end itemize")
1938 (license license:expat)))
1939
1940(define-public python-id
1941 (package
1942 (name "python-id")
1943 (version "1.5.0")
1944 (source
1945 (origin
1946 (method url-fetch)
1947 (uri (pypi-uri "id" version))
1948 (sha256
1949 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1950 (build-system pyproject-build-system)
1951 (native-inputs
1952 (list python-flit-core
1953 python-pretend
1954 python-pytest))
1955 (propagated-inputs
1956 (list python-requests))
1957 (home-page "https://github.com/di/id")
1958 (synopsis "Tool for generating OIDC identities")
1959 (description
1960 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1961identities.")
1962 (license license:asl2.0)))
1963
1964(define-public python-iniparse
1965 (package
1966 (name "python-iniparse")
1967 (version "0.5.1")
1968 (source
1969 (origin
1970 (method git-fetch)
1971 (uri (git-reference
1972 (url "https://github.com/candlepin/python-iniparse")
1973 (commit version)))
1974 (file-name (git-file-name name version))
1975 (sha256
1976 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1977 (build-system pyproject-build-system)
1978 (arguments
1979 (list
1980 #:test-backend #~'custom
1981 #:test-flags #~(list "runtests.py")
1982 #:phases
1983 #~(modify-phases %standard-phases
1984 (add-before 'check 'disable-tests
1985 (lambda _
1986 ;; XXX: Three tests failed to compare lists.
1987 (substitute* "tests/test_compat.py"
1988 (("test_read_returns_file_list")
1989 "disabled_test_read_returns_file_list")))))))
1990 (native-inputs
1991 (list python-setuptools))
1992 (home-page "https://github.com/candlepin/python-iniparse")
1993 (synopsis "Accessing and Modifying INI files")
1994 (description
1995 "iniparse is a INI parser for Python which is:
1996@itemize
1997@item Compatible with ConfigParser: Backward compatible implementations of
1998ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1999API-compatible with the Python standard library.
2000@item Preserves structure of INI files: Order of sections & options,
2001indentation, comments, and blank lines are preserved as far as possible when
2002data is updated.
2003@item More convenient: Values can be accessed using dotted notation
2004(@code{cfg.user.name}), or using container syntax
2005(@code{cfg['user']['name']}).
2006@end itemize")
2007 (license license:expat)))
2008
2009(define-public python-inotify
2010 (package
2011 (name "python-inotify")
2012 (version "0.2.12")
2013 (source
2014 (origin
2015 (method git-fetch)
2016 (uri (git-reference
2017 (url "https://github.com/dsoprea/PyInotify")
2018 (commit version)))
2019 (file-name (git-file-name name version))
2020 (sha256
2021 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2022 (build-system pyproject-build-system)
2023 (arguments
2024 (list
2025 #:phases
2026 #~(modify-phases %standard-phases
2027 (add-after 'unpack 'fix-requirements
2028 (lambda _
2029 (substitute* "inotify/resources/requirements.txt"
2030 (("build")
2031 "")))))))
2032 (native-inputs (list python-pytest python-setuptools))
2033 (propagated-inputs (list python-pyasyncore))
2034 (home-page "https://github.com/dsoprea/PyInotify")
2035 (synopsis "Linux filesystem activity monitor library for Python")
2036 (description
2037 "This package provides an efficient and elegant inotify (Linux filesystem
2038activity monitor) library for Python.")
2039 (license license:gpl2)))
2040
2041(define-public python-intervaltree
2042 (package
2043 (name "python-intervaltree")
2044 (version "3.1.0")
2045 (source
2046 (origin
2047 (method url-fetch)
2048 (uri (pypi-uri "intervaltree" version))
2049 (sha256
2050 (base32
2051 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2052 (build-system pyproject-build-system)
2053 (arguments
2054 `(#:phases
2055 (modify-phases %standard-phases
2056 ;; pytest seems to have a check to make sure the user is testing
2057 ;; their checked-out code and not an installed, potentially
2058 ;; out-of-date copy. This is harmless here, since we just installed
2059 ;; the package, so we disable the check to avoid skipping tests
2060 ;; entirely.
2061 (add-before 'check 'import-mismatch-error-workaround
2062 (lambda _
2063 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2064 #t)))))
2065 (propagated-inputs
2066 (list python-sortedcontainers))
2067 (native-inputs
2068 (list python-setuptools python-pytest))
2069 (home-page "https://github.com/chaimleib/intervaltree")
2070 (synopsis "Editable interval tree data structure")
2071 (description
2072 "This package provides a mutable, self-balancing interval tree
2073implementation for Python. Queries may be by point, by range overlap, or by
2074range envelopment. This library was designed to allow tagging text and time
2075intervals, where the intervals include the lower bound but not the upper
2076bound.")
2077 (license license:asl2.0)))
2078
2079(define-public python-jschon
2080 (package
2081 (name "python-jschon")
2082 (version "0.11.1")
2083 (source
2084 (origin
2085 (method git-fetch)
2086 (uri (git-reference
2087 (url "https://github.com/marksparkza/jschon/")
2088 (commit (string-append "v" version))
2089 (recursive? #t))) ;required for tests
2090 (sha256
2091 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2092 (file-name (git-file-name name version))))
2093 (build-system pyproject-build-system)
2094 (propagated-inputs
2095 (list python-rfc3986))
2096 (native-inputs
2097 (list python-coverage
2098 python-hypothesis
2099 python-pytest
2100 python-pytest-benchmark
2101 python-pytest-httpserver
2102 python-requests
2103 python-setuptools))
2104 (home-page "https://jschon.readthedocs.io/")
2105 (synopsis "Object-oriented JSON Schema implementation for Python")
2106 (description
2107 "This package provides a JSON toolkit for Python developers.")
2108 (license license:expat)))
2109
2110(define-public python-jsonpath-ng
2111 (package
2112 (name "python-jsonpath-ng")
2113 (version "1.7.0" )
2114 (source
2115 (origin
2116 (method url-fetch)
2117 (uri (pypi-uri "jsonpath-ng" version))
2118 (sha256
2119 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
2120 (build-system pyproject-build-system)
2121 (native-inputs
2122 (list python-pytest
2123 python-setuptools
2124 python-wheel))
2125 (propagated-inputs
2126 (list python-ply))
2127 (home-page "https://github.com/h2non/jsonpath-ng")
2128 (synopsis "JSONPath Next-Generation")
2129 (description
2130 "This package provides a final implementation of @code{JSONPath} for
2131Python that aims to be standard compliant, including arithmetic and binary
2132comparison operators, as defined in the original
2133@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2134 (license license:asl2.0)))
2135
2136(define-public python-json-log-formatter
2137 (package
2138 (name "python-json-log-formatter")
2139 (version "1.1.1")
2140 (source
2141 (origin
2142 (method git-fetch)
2143 (uri (git-reference
2144 (url "https://github.com/marselester/json-log-formatter")
2145 (commit (string-append "v" version))))
2146 (file-name (git-file-name name version))
2147 (sha256
2148 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2149 (build-system pyproject-build-system)
2150 (arguments
2151 (list
2152 #:phases
2153 #~(modify-phases %standard-phases
2154 (replace 'check
2155 (lambda* (#:key tests? #:allow-other-keys)
2156 (when tests?
2157 (invoke "pytest" "-s" "tests.py")))))))
2158 (native-inputs (list python-django
2159 python-pytest
2160 python-setuptools
2161 python-simplejson
2162 python-ujson
2163 python-wheel))
2164 (home-page "https://github.com/marselester/json-log-formatter")
2165 (synopsis "JSON log formatter")
2166 (description "The library helps you to store logs in JSON format.")
2167 (license license:expat)))
2168
2169(define-public python-keeper-secrets-manager-core
2170 ;; released from a monorepo with other packages following various versioning
2171 ;; schemes. This commit was selected because some failing tests were fixed
2172 ;; since the most recent release of the Python SDK packages.
2173 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2174 (revision "0"))
2175 (package
2176 (name "python-keeper-secrets-manager-core")
2177 (version (git-version "17.0.0" revision commit))
2178 (source
2179 (origin
2180 (method git-fetch)
2181 (uri (git-reference
2182 (url "https://github.com/Keeper-Security/secrets-manager")
2183 (commit commit)))
2184 (file-name (git-file-name name version))
2185 (sha256
2186 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2187 (build-system pyproject-build-system)
2188 (arguments
2189 (list
2190 #:phases
2191 #~(modify-phases %standard-phases
2192 (add-after 'unpack 'chdir
2193 (lambda _
2194 (chdir "sdk/python/core"))))))
2195 (propagated-inputs
2196 (list python-cryptography
2197 python-importlib-metadata
2198 python-requests))
2199 (native-inputs
2200 (list python-pytest
2201 python-setuptools))
2202 (home-page "https://github.com/Keeper-Security/secrets-manager")
2203 (synopsis "Keeper Secrets Manager for Python SDK")
2204 (description
2205 "The Keeper Secrets Manager Python SDK provides access to
2206@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2207Management} services.")
2208 (license license:expat))))
2209
2210(define-public python-keeper-secrets-manager-helper
2211 ;; released alongside keeper-secrets-manager-core, but with a different
2212 ;; versioning scheme.
2213 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2214 (revision "0"))
2215 (package
2216 (name "python-keeper-secrets-manager-helper")
2217 (version (git-version "1.0.6" revision commit))
2218 (source
2219 (origin
2220 (method git-fetch)
2221 (uri (git-reference
2222 (url "https://github.com/Keeper-Security/secrets-manager")
2223 (commit commit)))
2224 (file-name (git-file-name name version))
2225 (sha256
2226 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2227 (build-system pyproject-build-system)
2228 (arguments
2229 (list
2230 #:phases
2231 #~(modify-phases %standard-phases
2232 (add-after 'unpack 'chdir
2233 (lambda _
2234 (chdir "sdk/python/helper"))))))
2235 (propagated-inputs
2236 (list python-iso8601
2237 python-keeper-secrets-manager-core
2238 python-pyyaml))
2239 (native-inputs
2240 (list python-pytest
2241 python-setuptools))
2242 (home-page "https://github.com/Keeper-Security/secrets-manager")
2243 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2244 (description
2245 "Keeper Secrets Manager SDK helper is for creating and managing secret
2246records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2247 (license license:expat))))
2248
2249(define-public python-language-data
2250 (package
2251 (name "python-language-data")
2252 (version "1.3.0")
2253 (source
2254 (origin
2255 (method url-fetch)
2256 (uri (pypi-uri "language_data" version))
2257 (sha256
2258 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2259 (build-system pyproject-build-system)
2260 (native-inputs
2261 (list python-pytest
2262 python-setuptools
2263 python-setuptools-scm))
2264 (propagated-inputs
2265 (list python-marisa-trie))
2266 (home-page "https://github.com/georgkrause/language_data")
2267 (synopsis "Supplementary data about languages used by the langcodes module")
2268 (description
2269 "language_data is a supplement to the langcodes module, for working with
2270standardized codes for human languages. It stores the more bulky and
2271hard-to-index data about languages, particularly what they are named in
2272various languages.")
2273 (license license:expat)))
2274
2275(define-public python-log-symbols
2276 (package
2277 (name "python-log-symbols")
2278 (version "0.0.14")
2279 (source
2280 (origin
2281 (method url-fetch)
2282 (uri (pypi-uri "log_symbols" version))
2283 (sha256
2284 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2285 (build-system pyproject-build-system)
2286 (arguments
2287 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2288 (native-inputs
2289 (list python-setuptools))
2290 (propagated-inputs
2291 (list python-colorama))
2292 (home-page "https://github.com/manrajgrover/py-log-symbols")
2293 (synopsis "Python library with graphical symbols for logging on the terminal")
2294 (description
2295 "This package provides a Python library with graphical symbols that can
2296be displayed on the terminal, with color if possible, for logging purposes.")
2297 (license license:expat)))
2298
2299(define-public python-lsprotocol
2300 (package
2301 (name "python-lsprotocol")
2302 (version "2025.0.0")
2303 (source
2304 (origin
2305 (method git-fetch)
2306 (uri (git-reference
2307 (url "https://github.com/microsoft/lsprotocol")
2308 (commit version)))
2309 (file-name (git-file-name name version))
2310 (sha256
2311 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2312 (build-system pyproject-build-system)
2313 (arguments
2314 (list
2315 #:tests? #f ;no tests for Python package
2316 #:phases
2317 #~(modify-phases %standard-phases
2318 (add-after 'unpack 'cd-packages-python
2319 (lambda _
2320 (chdir "packages/python"))))))
2321 (native-inputs
2322 (list python-flit-core))
2323 (propagated-inputs
2324 (list python-attrs
2325 python-cattrs))
2326 (home-page "https://github.com/microsoft/lsprotocol")
2327 (synopsis "Python types for Language Server Protocol.")
2328 (description
2329 "@code{lsprotocol} is a Python implementation of object types used in
2330the Language Server Protocol (LSP). This repository contains the code
2331generator and the generated types for LSP.")
2332 (license license:expat)))
2333
2334(define-public python-marisa-trie
2335 (package
2336 (name "python-marisa-trie")
2337 (version "1.3.1")
2338 (source
2339 (origin
2340 (method url-fetch)
2341 (uri (pypi-uri "marisa_trie" version))
2342 (sha256
2343 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2344 (build-system pyproject-build-system)
2345 (native-inputs
2346 (list python-cython
2347 python-hypothesis
2348 python-pytest
2349 python-readme-renderer
2350 python-setuptools))
2351 (home-page "https://github.com/pytries/marisa-trie")
2352 (synopsis "Static memory-efficient Trie-like structures for Python")
2353 (description
2354 "This package provides static memory-efficient and fast Trie-like structures
2355for Python.")
2356 (license license:expat)))
2357
2358(define-public python-materialyoucolor
2359 (package
2360 (name "python-materialyoucolor")
2361 (version "3.0.2")
2362 (source
2363 (origin
2364 (method git-fetch)
2365 (uri (git-reference
2366 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2367 (commit (string-append "v" version))))
2368 (file-name (git-file-name name version))
2369 (sha256
2370 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2371 (build-system pyproject-build-system)
2372 (arguments
2373 (list #:test-backend #~'custom
2374 #:test-flags #~(list "tests/test_all.py")))
2375 (propagated-inputs (list python-pillow))
2376 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2377 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2378 (synopsis "Material You color generation algorithms")
2379 (description
2380 "@code{python-materialyoucolor} provides a tool that generates harmonious
2381color palettes from the dominant colors of an image, based on the
2382@uref{https://m3.material.io/styles/color/system/overview, Material color
2383system}.")
2384 (license license:expat)))
2385
2386(define-public python-menuinst
2387 (package
2388 (name "python-menuinst")
2389 (version "2.4.1")
2390 (source
2391 (origin
2392 (method git-fetch)
2393 (uri (git-reference
2394 (url "https://github.com/conda/menuinst")
2395 (commit version)))
2396 (file-name (git-file-name name version))
2397 (sha256
2398 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2399 (build-system pyproject-build-system)
2400 (arguments
2401 (list
2402 #:tests? #f)) ;tests need conda
2403 (native-inputs
2404 (list python-setuptools
2405 python-setuptools-scm))
2406 (home-page "https://conda.github.io/menuinst/")
2407 (synopsis "Cross platform menu item installation")
2408 (description
2409 "This package provides cross platform menu item installation for conda
2410packages.")
2411 (license license:bsd-3)))
2412
2413(define-public python-multiplex
2414 (package
2415 (name "python-multiplex")
2416 (version "0.6.1")
2417 (source
2418 (origin
2419 (method git-fetch) ;no tests in PyPI archive
2420 (uri (git-reference
2421 (url "https://github.com/dankilman/multiplex")
2422 (commit version)))
2423 (file-name (git-file-name name version))
2424 (sha256
2425 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2426 (build-system pyproject-build-system)
2427 (native-inputs
2428 (list python-poetry-core
2429 python-pytest
2430 python-pytest-asyncio))
2431 (propagated-inputs
2432 (list python-aiofiles
2433 python-aiostream
2434 python-click
2435 python-easy-ansi-0.3
2436 python-pyte))
2437 (home-page "https://github.com/dankilman/multiplex")
2438 (synopsis "Parallel stream of outputs from multiple processes")
2439 (description
2440 "This package provides a functionality to view output of multiple
2441processes, in parallel, in the console, with an interactive TUI.")
2442 (license license:expat)))
2443
2444(define-public python-nrepl
2445 (package
2446 (name "python-nrepl")
2447 (version "0.3.1")
2448 (source
2449 (origin
2450 (method git-fetch)
2451 (uri (git-reference
2452 (url "https://git.sr.ht/~ngraves/nrepl-python")
2453 (commit version)))
2454 (file-name (git-file-name name version))
2455 (sha256
2456 (base32 "1ns8c5d29vi11qma1nnazsja5nibknp97ig0lg45wfpjbb5ngl2b"))))
2457 (build-system pyproject-build-system)
2458 (arguments
2459 (list
2460 #:test-flags
2461 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2462 (native-inputs
2463 (list python-flit-core
2464 python-pytest
2465 python-pytest-asyncio
2466 python-pytest-xdist))
2467 (propagated-inputs
2468 (list python-fastbencode
2469 python-gevent
2470 python-ipython))
2471 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2472 (synopsis "NREPL server for Python")
2473 (description
2474 "This package provides an implementation of the @url{https://nrepl.org,
2475NREPL} protocol for Python.")
2476 (license license:gpl3+)))
2477
2478(define-public python-num2words
2479 (package
2480 (name "python-num2words")
2481 (version "0.5.14")
2482 (source
2483 (origin
2484 (method git-fetch)
2485 (uri (git-reference
2486 (url "https://github.com/savoirfairelinux/num2words")
2487 (commit (string-append "v" version))))
2488 (file-name (git-file-name name version))
2489 (sha256
2490 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2491 (build-system pyproject-build-system)
2492 (arguments
2493 (list
2494 #:test-flags
2495 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2496 (native-inputs (list python-pytest python-setuptools))
2497 (propagated-inputs (list python-docopt))
2498 (home-page "https://github.com/savoirfairelinux/num2words")
2499 (synopsis "Convert numbers to words in multiple languages")
2500 (description
2501 "@code{num2words} is a library that converts numbers like 42 to words like
2502forty-two. It supports multiple languages, and can even generate ordinal
2503numbers like forty-second.")
2504 (license license:lgpl2.1)))
2505
2506(define-public python-orderly-set
2507 (package
2508 (name "python-orderly-set")
2509 (version "5.5.0")
2510 (source
2511 (origin
2512 (method url-fetch)
2513 (uri (pypi-uri "orderly_set" version))
2514 (sha256
2515 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2516 (build-system pyproject-build-system)
2517 (native-inputs (list python-flit-core python-pytest))
2518 (home-page "https://github.com/seperman/orderly-set")
2519 (synopsis "Multiple implementations of Ordered Set")
2520 (description "Orderly Set is a package containing multiple implementations
2521of Ordered Set.")
2522 (license license:expat)))
2523
2524(define-public python-packageurl
2525 (package
2526 (name "python-packageurl")
2527 (version "0.17.6")
2528 (source
2529 (origin
2530 (method git-fetch)
2531 (uri (git-reference
2532 (url "https://github.com/package-url/packageurl-python")
2533 (commit (string-append "v" version))))
2534 (file-name (git-file-name name version))
2535 (sha256
2536 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2537 (modules '((guix build utils)))
2538 ;; Remove bundled virtualenv and license files used only for
2539 ;; development; not needed at build or runtime.
2540 (snippet '(delete-file-recursively "thirdparty"))))
2541 (build-system pyproject-build-system)
2542 (arguments
2543 (list #:test-flags
2544 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2545 ;; submodule at import time; skip it when the submodule is absent.
2546 #~(list "--ignore=tests/test_purl_spec.py")))
2547 (native-inputs
2548 (list python-pytest
2549 python-setuptools))
2550 (home-page "https://www.packageurl.org")
2551 (synopsis "Package URL parser and builder")
2552 (description
2553 "This library parses and builds Package URLs (purls) as defined in the
2554purl specification. It provides a @code{PackageURL} class for creating,
2555parsing, and normalizing package URL strings across different package
2556management ecosystems.")
2557 (license license:expat)))
2558
2559(define-public python-pandocfilters
2560 (package
2561 (name "python-pandocfilters")
2562 (version "1.5.1")
2563 (source
2564 (origin
2565 (method url-fetch)
2566 (uri (pypi-uri "pandocfilters" version))
2567 (sha256
2568 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2569 (build-system pyproject-build-system)
2570 (arguments
2571 (list #:tests? #f)) ;require pandoc to run tests
2572 (native-inputs
2573 (list python-setuptools))
2574 (home-page "https://github.com/jgm/pandocfilters")
2575 (synopsis "Python module for writing Pandoc filters")
2576 (description "Pandoc is a powerful utility to transform various
2577input formats into a wide range of output formats. To alter the
2578exported output document, Pandoc allows the usage of filters, which
2579are pipes that read a JSON serialization of the Pandoc AST from stdin,
2580transform it in some way, and write it to stdout. It allows therefore
2581to alter the processing of Pandoc's supported input formats, for
2582instance one can add new syntax elements to markdown, etc.
2583
2584This package provides Python bindings.")
2585 (license license:bsd-3)))
2586
2587(define-public python-panflute
2588 (package
2589 (name "python-panflute")
2590 (version "2.3.1")
2591 (source
2592 (origin
2593 (method url-fetch)
2594 (uri (pypi-uri "panflute" version))
2595 (sha256
2596 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2597 (build-system pyproject-build-system)
2598 (arguments
2599 (list #:tests? #f)) ;require pandoc to run tests
2600 (native-inputs
2601 (list python-setuptools))
2602 (propagated-inputs
2603 (list python-click
2604 python-pyyaml))
2605 (home-page "http://scorreia.com/software/panflute/")
2606 (synopsis "Pythonic Pandoc filters")
2607 (description
2608 "Panflute is a Python package that makes Pandoc filters fun to write.
2609It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2610is heavily inspired.")
2611 (license license:bsd-3)))
2612
2613(define-public python-pastel
2614 (package
2615 (name "python-pastel")
2616 (version "0.2.1")
2617 (source
2618 (origin
2619 (method git-fetch)
2620 (uri (git-reference
2621 (url "https://github.com/sdispater/pastel")
2622 (commit version)))
2623 (file-name (git-file-name name version))
2624 (sha256
2625 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2626 (build-system pyproject-build-system)
2627 (arguments
2628 (list
2629 #:test-flags
2630 #~(list "pastel" "tests/")
2631 #:phases
2632 #~(modify-phases %standard-phases
2633 (add-after 'unpack 'use-poetry-core
2634 (lambda _
2635 ;; Patch to use the core poetry API.
2636 (substitute* "pyproject.toml"
2637 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2638 (native-inputs (list python-poetry-core python-pytest))
2639 (home-page "https://github.com/sdispater/pastel")
2640 (synopsis "Library to colorize strings in your terminal")
2641 (description
2642 "Pastel is a simple library to help you colorize strings in your
2643terminal.")
2644 (license license:expat)))
2645
2646(define-public python-pathlib-abc
2647 (package
2648 (name "python-pathlib-abc")
2649 (version "0.5.0")
2650 (source
2651 (origin
2652 (method url-fetch)
2653 (uri (pypi-uri "pathlib_abc" version))
2654 (sha256
2655 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2656 (build-system pyproject-build-system)
2657 (native-inputs (list python-pytest python-hatchling))
2658 (home-page "https://github.com/barneygale/pathlib-abc")
2659 (synopsis "Python base classes for rich path objects")
2660 (description
2661 "This package is a preview of pathlib functionality planned for a future
2662release of Python; specifically, it provides three ABCs that can be used to
2663implement path classes for non-local filesystems")
2664 (license license:psfl)))
2665
2666;; XXX: It's for [email protected], remove when no longer required.
2667(define-public python-pathlib-abc-for-python-pathy
2668 (hidden-package
2669 (package
2670 (inherit python-pathlib-abc)
2671 (version "0.1.1")
2672 (source
2673 (origin
2674 (method url-fetch)
2675 (uri (pypi-uri "pathlib_abc" version))
2676 (sha256
2677 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2678
2679(define-public python-pbs-installer
2680 (package
2681 (name "python-pbs-installer")
2682 (version "2025.09.18")
2683 (source
2684 (origin
2685 (method git-fetch)
2686 (uri (git-reference
2687 (url "https://github.com/frostming/pbs-installer")
2688 (commit version)))
2689 (file-name (git-file-name name version))
2690 (sha256
2691 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2692 (build-system pyproject-build-system)
2693 (arguments
2694 (list
2695 #:tests? #f ;no tests provided
2696 #:phases
2697 #~(modify-phases %standard-phases
2698 (add-before 'build 'set-version
2699 (lambda _
2700 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2701 (native-inputs
2702 (list python-pdm-backend
2703 python-pytest))
2704 (propagated-inputs
2705 (list python-httpx
2706 python-zstandard))
2707 (home-page "https://github.com/frostming/pbs-installer")
2708 (synopsis "Installer for Python Build Standalone")
2709 (description
2710 "This package implements an installer for
2711@url{https://github.com/astral-sh/python-build-standalone, Python Build
2712Standalone}.")
2713 (license license:expat)))
2714
2715(define-public python-phply
2716 (package
2717 (name "python-phply")
2718 (version "1.2.6")
2719 (source
2720 (origin
2721 (method url-fetch)
2722 (uri (pypi-uri "phply" version))
2723 (sha256
2724 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2725 (build-system pyproject-build-system)
2726 (native-inputs
2727 (list python-pytest
2728 python-setuptools))
2729 (propagated-inputs
2730 (list python-ply))
2731 (home-page "https://github.com/viraptor/phply")
2732 (synopsis "PHP parser written in Python using PLY")
2733 (description
2734 "@code{phply} is a parser for the PHP programming language written using
2735PLY,a Lex/YACC-style parser generator toolkit for Python.")
2736 (license license:bsd-3)))
2737
2738(define-public python-puccinialin
2739 (package
2740 (name "python-puccinialin")
2741 (version "0.1.5")
2742 (source
2743 (origin
2744 (method url-fetch)
2745 (uri (pypi-uri "puccinialin" version))
2746 (sha256
2747 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2748 (build-system pyproject-build-system)
2749 (arguments
2750 (list #:tests? #f)) ;no tests in PyPI or Git
2751 (native-inputs
2752 (list python-hatchling))
2753 (propagated-inputs
2754 (list python-httpx
2755 python-platformdirs
2756 python-tqdm))
2757 (home-page "https://github.com/konstin/puccinialin")
2758 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2759 (description
2760 "This tool helps to install Rust into a temporary directory, allowing
2761support of Rust-based Python builds. Cargo and rustc are installed into a
2762cache directory, to avoid modifying the host's environment, and further
2763activated using a set of environment variables.")
2764 (license (list license:expat license:asl2.0))))
2765
2766(define-public python-py010parser
2767 (package
2768 (name "python-py010parser")
2769 (version "0.1.18")
2770 (source
2771 (origin
2772 (method git-fetch)
2773 (uri (git-reference
2774 (url "https://github.com/d0c-s4vage/py010parser")
2775 (commit (string-append "v" version))))
2776 (file-name (git-file-name name version))
2777 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2778 (modules '((guix build utils)))
2779 (snippet #~(begin
2780 ;; Unbundle ply.
2781 (substitute* "requirements.txt"
2782 (("^six\\>.*") ""))
2783 (substitute* "setup.py"
2784 (("(packages += \\['py010parser').*\\]" all first)
2785 (string-append first "]")))
2786 (delete-file-recursively "py010parser/ply")
2787 (substitute* (find-files "py010parser" "\\.py$")
2788 ((" .*\\.ply\\>") " ply"))
2789 ;; Avoid regenerating the lex table.
2790 (substitute* '("py010parser/__init__.py"
2791 "py010parser/c_parser.py")
2792 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2793 (string-append open "False" close)))
2794 (substitute* '("py010parser/__init__.py"
2795 "setup.py")
2796 (("\\{\\{VERSION\\}\\}") #$version))
2797 (substitute* "setup.cfg"
2798 (("description-file") "description_file"))))))
2799 (build-system pyproject-build-system)
2800 (arguments (list #:test-backend #~'unittest
2801 #:test-flags #~'("discover" "tests")))
2802 (propagated-inputs (list python-regex python-ply))
2803 (native-inputs (list python-setuptools))
2804 (home-page "https://github.com/d0c-s4vage/py010parser")
2805 (synopsis "Parser of 010 editor's template")
2806 (description
2807 "@code{py010parser} is a Python library for parsing templates
2808for the Sweetscape 010 binary-format editor.")
2809 (license license:bsd-3)))
2810
2811(define-public python-pyasynchat
2812 (package
2813 (name "python-pyasynchat")
2814 (version "1.0.5")
2815 (source
2816 (origin
2817 (method git-fetch)
2818 (uri (git-reference
2819 (url "https://github.com/simonrob/pyasynchat")
2820 (commit (string-append "v" version))))
2821 (file-name (git-file-name name version))
2822 (sha256
2823 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2824 (build-system pyproject-build-system)
2825 (native-inputs
2826 (list python-pytest
2827 python-setuptools))
2828 (propagated-inputs
2829 (list python-pyasyncore))
2830 (home-page "https://github.com/simonrob/pyasynchat")
2831 (synopsis "Make asynchat available for Python 3.12 onwards")
2832 (description
2833 "This package contains the
2834@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2835found in Python versions prior to 3.12. It is provided so that existing code
2836relying on @code{import asynchat} is able to continue being used without
2837significant refactoring.")
2838 (license license:psfl)))
2839
2840(define-public python-pyasyncore
2841 (package
2842 (name "python-pyasyncore")
2843 (version "1.0.5")
2844 (source
2845 (origin
2846 (method git-fetch)
2847 (uri (git-reference
2848 (url "https://github.com/simonrob/pyasyncore")
2849 (commit (string-append "v" version))))
2850 (file-name (git-file-name name version))
2851 (sha256
2852 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
2853 (build-system pyproject-build-system)
2854 (native-inputs (list python-pytest python-setuptools))
2855 (home-page "https://github.com/simonrob/pyasyncore")
2856 (synopsis "Make asyncore available for Python 3.12 onwards")
2857 (description
2858 "This package contains the
2859@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
2860found in Python versions prior to 3.12. It is provided so that existing code
2861relying on @code{import asyncore} is able to continue being used without
2862significant refactoring.")
2863 (license license:psfl)))
2864
2865(define-public python-pyconify
2866 (package
2867 (name "python-pyconify")
2868 (version "0.2.1")
2869 (source
2870 (origin
2871 (method git-fetch)
2872 (uri (git-reference
2873 (url "https://github.com/pyapp-kit/pyconify")
2874 (commit (string-append "v" version))))
2875 (file-name (git-file-name name version))
2876 (sha256
2877 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
2878 (build-system pyproject-build-system)
2879 (arguments
2880 (list #:tests? #f)) ;require netwok access
2881 (native-inputs
2882 (list python-hatch-vcs
2883 python-hatchling))
2884 (propagated-inputs
2885 (list python-requests))
2886 (home-page "https://github.com/pyapp-kit/pyconify")
2887 (synopsis "Python wrapper for the Iconify API")
2888 (description
2889 "This packge provides a Python wrapper for the
2890@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
2891framework that includes 100+ icon sets with more than 100,000 icons from
2892FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
2893Emoji and many other open source icon sets.")
2894 (license license:bsd-3)))
2895
2896(define-public python-pygls
2897 (package
2898 (name "python-pygls")
2899 (version "2.0.0")
2900 (source
2901 (origin
2902 (method git-fetch)
2903 (uri (git-reference
2904 (url "https://github.com/openlawlibrary/pygls")
2905 (commit (string-append "v" version))))
2906 (file-name (git-file-name name version))
2907 (sha256
2908 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2909 (build-system pyproject-build-system)
2910 ;; tests: 265 passed, 8 skipped
2911 (native-inputs
2912 (list python-pytest
2913 python-pytest-asyncio
2914 python-poetry-core))
2915 (propagated-inputs
2916 (list python-attrs
2917 python-cattrs
2918 python-lsprotocol))
2919 (home-page "https://github.com/openlawlibrary/pygls")
2920 (synopsis "Pythonic generic language server")
2921 (description
2922 "This package provides a pythonic generic language server (pronounced
2923like pie glass').")
2924 (license license:asl2.0)))
2925
2926(define-public python-pyls-spyder
2927 (package
2928 (name "python-pyls-spyder")
2929 (version "0.4.0")
2930 (source
2931 (origin
2932 (method git-fetch)
2933 (uri (git-reference
2934 (url "https://github.com/spyder-ide/pyls-spyder")
2935 (commit (string-append "v" version))))
2936 (file-name (git-file-name name version))
2937 (sha256
2938 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
2939 (build-system pyproject-build-system)
2940 (propagated-inputs (list python-lsp-server))
2941 (native-inputs (list python-pytest python-setuptools))
2942 (home-page "https://github.com/spyder-ide/pyls-spyder")
2943 (synopsis "Spyder extensions for @code{python-lsp-server}")
2944 (description "This package provides Spyder-specific extras for the
2945Language Server Protocol (LSP) on Python, such as document symbol searching
2946and others.")
2947 (license license:expat)))
2948
2949(define-public python-pylsp-rope
2950 (package
2951 (name "python-pylsp-rope")
2952 (version "0.1.17")
2953 (source
2954 (origin
2955 (method git-fetch)
2956 (uri (git-reference
2957 (url "https://github.com/python-rope/pylsp-rope")
2958 (commit version)))
2959 (file-name (git-file-name name version))
2960 (sha256
2961 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
2962 (build-system pyproject-build-system)
2963 (native-inputs
2964 (list python-pytest
2965 python-setuptools))
2966 (propagated-inputs
2967 (list python-lsp-server
2968 python-rope))
2969 (home-page "https://github.com/python-rope/pylsp-rope")
2970 (synopsis
2971 "Extended refactoring capabilities for Python LSP Server using Rope")
2972 (description
2973 "This plugs in to Python LSP Server, adding code actions that refactor
2974using Rope.")
2975 (license license:expat)))
2976
2977(define-public python-pypydispatcher
2978 (package
2979 (name "python-pypydispatcher")
2980 (version "2.1.2")
2981 (source
2982 (origin
2983 (method url-fetch)
2984 (uri (pypi-uri "PyPyDispatcher" version))
2985 (sha256
2986 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2987 (build-system pyproject-build-system)
2988 (native-inputs
2989 (list python-pytest
2990 python-setuptools
2991 python-setuptools-scm))
2992 (home-page "https://github.com/scrapy/pypydispatcher")
2993 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2994 (description
2995 "This package implements a functionality of pulti-producer-multi-consumer
2996signal dispatching mechanism. It's a fork of
2997http://pydispatcher.sourceforge.net/ with PyPy support.")
2998 (license license:bsd-3)))
2999
3000(define-public python-pyread-eagle
3001 (package
3002 (name "python-pyread-eagle")
3003 (version "1.0.3")
3004 (source
3005 (origin
3006 (method git-fetch)
3007 (uri (git-reference
3008 (url "https://github.com/kyleaoman/pyread_eagle")
3009 (commit version)))
3010 (file-name (git-file-name name version))
3011 (sha256
3012 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3013 (build-system pyproject-build-system)
3014 (arguments
3015 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3016 (list #:tests? #f))
3017 (native-inputs
3018 (list python-setuptools))
3019 (propagated-inputs
3020 (list python-h5py
3021 python-numpy))
3022 (home-page "https://github.com/kyleaoman/pyread_eagle")
3023 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3024 (description
3025 "This package provides a pure-python port of
3026@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3027 (license license:gpl3)))
3028
3029(define-public python-pyte
3030 (package
3031 (name "python-pyte")
3032 (version "0.8.2")
3033 (source
3034 (origin
3035 (method git-fetch)
3036 (uri (git-reference
3037 (url "https://github.com/selectel/pyte")
3038 (commit version)))
3039 (file-name (git-file-name name version))
3040 (sha256
3041 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3042 (build-system pyproject-build-system)
3043 (propagated-inputs (list python-wcwidth))
3044 (native-inputs (list python-pytest python-setuptools python-wheel))
3045 (home-page "https://pyte.readthedocs.io/")
3046 (synopsis "Simple VTXXX-compatible terminal emulator")
3047 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3048emulator. @var{VTxxx} stands for a series of video terminals, developed by
3049DEC between 1970 and 1995. The first and probably most famous one was the
3050VT100 terminal, which is now a de-facto standard for all virtual terminal
3051emulators.
3052
3053pyte is a fork of vt102, which was an incomplete pure Python implementation
3054of VT100 terminal.")
3055 (license license:lgpl3+)))
3056
3057(define-public python-pytokens
3058 (package
3059 (name "python-pytokens")
3060 (version "0.4.1")
3061 (source
3062 (origin
3063 (method git-fetch)
3064 (uri (git-reference
3065 (url "https://github.com/tusharsadhwani/pytokens")
3066 (commit version)))
3067 (file-name (git-file-name name version))
3068 (sha256
3069 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3070 (build-system pyproject-build-system)
3071 (arguments
3072 (list
3073 #:phases
3074 #~(modify-phases %standard-phases
3075 (add-before 'build 'build-with-cython
3076 (lambda _
3077 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3078 (native-inputs
3079 (list python-cython
3080 python-pytest
3081 python-setuptools))
3082 (home-page "https://github.com/tusharsadhwani/pytokens")
3083 (synopsis "Spec compliant Python 3.14+ tokenizer")
3084 (description
3085 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3086runs on older Pythons.")
3087 (license license:expat)))
3088
3089(define-public python-pyuca
3090 (package
3091 (name "python-pyuca")
3092 (version "1.2")
3093 (source
3094 (origin
3095 (method git-fetch)
3096 (uri (git-reference
3097 (url "https://github.com/jtauber/pyuca")
3098 (commit (string-append "v" version))))
3099 (file-name (git-file-name name version))
3100 (sha256
3101 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3102 (build-system pyproject-build-system)
3103 (arguments
3104 (list #:tests? #f)) ; there are no tests
3105 (native-inputs (list python-setuptools))
3106 (home-page "https://github.com/jtauber/pyuca")
3107 (synopsis "Python implementation of the Unicode Collation Algorithm")
3108 (description "This package provides a Python implementation of the
3109@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3110 (license license:expat)))
3111
3112(define-public python-pyxdameraulevenshtein
3113 (package
3114 (name "python-pyxdameraulevenshtein")
3115 (version "1.8.0")
3116 (source
3117 (origin
3118 (method git-fetch)
3119 (uri (git-reference
3120 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3121 (commit (string-append "v" version))))
3122 (file-name (git-file-name name version))
3123 (sha256
3124 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3125 (build-system pyproject-build-system)
3126 (native-inputs (list python-cython python-pytest python-setuptools))
3127 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3128 (synopsis "Damerau-Levenshtein edit distance algorithm")
3129 (description
3130 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3131edit distance algorithm for Python in Cython for high performance.")
3132 (license license:bsd-3)))
3133
3134(define-public python-qrcodegen
3135 (package
3136 (name "python-qrcodegen")
3137 (version "1.8.0")
3138 (source
3139 (origin
3140 (method git-fetch)
3141 (uri (git-reference
3142 (url "https://github.com/nayuki/QR-Code-generator")
3143 (commit (string-append "v" version))))
3144 (sha256
3145 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3146 (build-system pyproject-build-system)
3147 (arguments
3148 (list
3149 #:tests? #f ;no tests
3150 #:phases
3151 #~(modify-phases %standard-phases
3152 (add-before 'build 'chdir
3153 (lambda _
3154 (chdir "python"))))))
3155 (native-inputs (list python-setuptools))
3156 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3157 (synopsis "QR Code generator")
3158 (description
3159 "@code{python-qrcodegen} is a QR code generator library in Python.")
3160 (license license:expat)))
3161
3162(define-public python-represent
3163 (package
3164 (name "python-represent")
3165 (version "2.1")
3166 (source
3167 (origin
3168 (method url-fetch)
3169 (uri (pypi-uri "Represent" version))
3170 (sha256
3171 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3172 (build-system pyproject-build-system)
3173 (native-inputs
3174 ;; XXX This might be too much for testing, maybe switch them off as it's
3175 ;; a simple middleware library.
3176 (list python-ipython
3177 python-pytest
3178 python-rich
3179 python-setuptools))
3180 (home-page "https://github.com/RazerM/represent")
3181 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3182 (description
3183 "This package implements a functionality to generate Python
3184@code{__repr__} methods automatically or declaratively.")
3185 (license license:expat)))
3186
3187(define-public python-rich-argparse
3188 (package
3189 (name "python-rich-argparse")
3190 (version "1.8.0")
3191 (source
3192 (origin
3193 (method git-fetch)
3194 (uri (git-reference
3195 (url "https://github.com/hamdanal/rich-argparse")
3196 (commit (string-append "v" version))))
3197 (file-name (git-file-name name version))
3198 (sha256
3199 (base32
3200 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3201 (build-system pyproject-build-system)
3202 (native-inputs
3203 (list python-pytest
3204 python-hatchling))
3205 (propagated-inputs
3206 (list python-rich))
3207 (home-page "https://github.com/hamdanal/rich-argparse")
3208 (synopsis "Format argparse and optparse help using rich")
3209 (description
3210 "This package improves the look and readability of argparse's help while
3211requiring minimal changes to the code.")
3212 (license license:expat)))
3213
3214(define-public python-rich-rst
3215 (package
3216 (name "python-rich-rst")
3217 (version "2.0.1")
3218 (source
3219 (origin
3220 (method git-fetch)
3221 (uri (git-reference
3222 (url "https://github.com/wasi-master/rich-rst")
3223 (commit (string-append "v" version))))
3224 (file-name (git-file-name name version))
3225 (sha256
3226 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3227 (build-system pyproject-build-system)
3228 (native-inputs
3229 (list python-pytest
3230 python-setuptools))
3231 (propagated-inputs
3232 (list python-pygments
3233 python-rich))
3234 (home-page "https://wasi-master.github.io/rich-rst")
3235 (synopsis "Beautiful reStructuredText renderer for Rich")
3236 (description
3237 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3238documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3239renderables.")
3240 (license license:expat)))
3241
3242(define-public python-roman-numerals
3243 (package
3244 (name "python-roman-numerals")
3245 (version "3.1.0")
3246 (source
3247 (origin
3248 (method url-fetch)
3249 (uri (pypi-uri "roman_numerals" version))
3250 (sha256
3251 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3252 (build-system pyproject-build-system)
3253 (native-inputs (list python-flit-core python-pytest))
3254 (home-page "https://pypi.org/project/roman-numbers/")
3255 (synopsis "Python library to manipulate Roman numerals")
3256 (description "This package provides a Python library to manipulate
3257well-formed Roman numerals.")
3258 (license license:expat)))
3259
3260(define-public python-rush
3261 (package
3262 (name "python-rush")
3263 (version "2021.04.0")
3264 (source
3265 (origin
3266 (method git-fetch)
3267 (uri (git-reference
3268 (url "https://github.com/sigmavirus24/rush")
3269 (commit version)))
3270 (file-name (git-file-name name version))
3271 (sha256
3272 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3273 (build-system pyproject-build-system)
3274 (arguments
3275 (list
3276 #:test-flags
3277 ;; E ValueError: Redis URL must specify one of the following schemes
3278 ;; (redis://, rediss://, unix://)
3279 #~(list "-k" (string-append "not test_valid_url[redis://]"
3280 " and not test_valid_url[rediss://]"))))
3281 (native-inputs
3282 (list python-mock
3283 python-redis
3284 python-rfc3986
3285 python-pytest
3286 python-setuptools))
3287 (propagated-inputs
3288 (list python-attrs))
3289 (home-page "https://github.com/sigmavirus24/rush")
3290 (synopsis "Throttling and rate-limiting algorithms for Python")
3291 (description
3292 "This package provides is a small collection of algorithms that can be
3293reused when throttling user interactions with a resource (e.g., an API).")
3294 (license license:expat)))
3295
3296(define-public python-rustworkx
3297 (package
3298 (name "python-rustworkx")
3299 (version "0.17.1")
3300 (source
3301 (origin
3302 (method git-fetch)
3303 (uri (git-reference
3304 (url "https://github.com/Qiskit/rustworkx")
3305 (commit version)))
3306 (file-name (git-file-name name version))
3307 (sha256
3308 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3309 (build-system pyproject-build-system)
3310 (arguments
3311 (list
3312 #:test-flags #~(list "--test-path" "tests")
3313 #:imported-modules (append %cargo-build-system-modules
3314 %pyproject-build-system-modules)
3315 #:modules '(((guix build cargo-build-system)
3316 #:prefix cargo:)
3317 (guix build pyproject-build-system)
3318 (guix build utils))
3319 #:phases
3320 #~(modify-phases %standard-phases
3321 (add-after 'unpack 'prepare-cargo-build-system
3322 (lambda args
3323 (for-each
3324 (lambda (phase)
3325 (format #t "Running cargo phase: ~a~%" phase)
3326 (apply (assoc-ref cargo:%standard-phases phase)
3327 #:cargo-target #$(cargo-triplet) args))
3328 '(unpack-rust-crates
3329 configure
3330 check-for-pregenerated-files
3331 patch-cargo-checksums))))
3332 (add-before 'check 'pre-check
3333 (lambda _
3334 ;; Delete the source directory to avoid interference.
3335 (delete-file-recursively "rustworkx")
3336 ;; Matplotlib needs to be able to write its configuration file
3337 ;; somewhere.
3338 (setenv "MPLCONFIGDIR" "/tmp")
3339 ;; For fontconfig.
3340 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3341 (propagated-inputs (list python-numpy))
3342 (native-inputs
3343 (append (list graphviz
3344 python-matplotlib
3345 python-networkx
3346 python-pillow
3347 python-setuptools
3348 python-setuptools-rust
3349 python-stestr
3350 rust
3351 `(,rust "cargo"))
3352 (or (and=> (%current-target-system)
3353 (compose list make-rust-sysroot))
3354 '())))
3355 (inputs (cargo-inputs 'python-rustworkx))
3356 (home-page "https://www.rustworkx.org")
3357 (synopsis "High performance graph library for Python")
3358 (description
3359 "@code{rustworkx} is a Python package for working with graphs and complex
3360networks. It enables the creation, interaction with, and study of graphs and
3361networks.")
3362 (license license:asl2.0)))
3363
3364(define-public python-safety-schemas
3365 (package
3366 (name "python-safety-schemas")
3367 (version "0.0.14")
3368 (source
3369 (origin
3370 (method url-fetch)
3371 (uri (pypi-uri "safety_schemas" version))
3372 (sha256
3373 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
3374 (build-system pyproject-build-system)
3375 (arguments
3376 (list
3377 #:test-flags
3378 #~(list "-k" (string-join
3379 ;; These tests are failing for unknown reasons.
3380 ;; (AssertionError).
3381 (list "not test_model[ConfigModel-ConfigModel]"
3382 "test_model[MetadataModel-MetadataModel]"
3383 "test_model[PolicyFileModel-PolicyFileModel]"
3384 "test_model[ProjectModel-ProjectModel]"
3385 "test_model[ReportModel-ReportModel]")
3386 " and not "))))
3387 (propagated-inputs (list python-dparse
3388 python-packaging
3389 python-pydantic
3390 python-ruamel.yaml
3391 python-typing-extensions))
3392 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3393 ;; Source code is not yet published outside of PyPI:
3394 ;; https://github.com/pyupio/safety/issues/494
3395 (home-page "https://pypi.org/project/safety-schemas/")
3396 (synopsis "Schemas for Safety tools")
3397 (description "This package contains models and schemas used by Safety.")
3398 (license license:expat)))
3399
3400(define-public python-scverse-misc
3401 (package
3402 (name "python-scverse-misc")
3403 (version "0.1.1")
3404 (source
3405 (origin
3406 (method git-fetch)
3407 (uri (git-reference
3408 (url "https://github.com/scverse/scverse-misc")
3409 (commit (string-append "v" version))))
3410 (file-name (git-file-name name version))
3411 (sha256
3412 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3413 (build-system pyproject-build-system)
3414 (arguments
3415 (list
3416 #:test-flags
3417 ;; Optinal tests, Pydantic fails to validate inputs.
3418 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3419 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3420 (native-inputs
3421 (list python-hatch-vcs
3422 python-hatchling
3423 python-pytest
3424 python-pyyaml))
3425 (propagated-inputs
3426 (list python-session-info2
3427 python-typing-extensions
3428 ;; [optional]
3429 python-dotenv
3430 python-pydantic-settings))
3431 (home-page "https://github.com/scverse/scverse-misc")
3432 (synopsis "Miscellaneous utility code used by scverse packages")
3433 (description
3434 "This package provides miscellaneous utility code used by scverse
3435packages.")
3436 (license license:bsd-3)))
3437
3438(define-public python-senf
3439 (package
3440 (name "python-senf")
3441 (version "1.5.1")
3442 (source
3443 (origin
3444 (method git-fetch)
3445 (uri (git-reference
3446 (url "https://github.com/quodlibet/senf")
3447 (commit (string-append "v" version))))
3448 (file-name (git-file-name name version))
3449 (sha256
3450 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3451 (build-system pyproject-build-system)
3452 (arguments
3453 (list
3454 #:test-flags
3455 ;; These tests fail due to various home fetching methods during build.
3456 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3457 "--deselect" "tests/test_api.py::test_expanduser_user")))
3458 (native-inputs (list python-pytest python-setuptools))
3459 (home-page "https://github.com/quodlibet/senf")
3460 (synopsis "Text, bytes and paths conversion functions for Python")
3461 (description "Senf introduces a new platform native string type called
3462fsnative. It adds functions to convert text, bytes and paths to and from that
3463new type and helper functions to integrate it nicely with the Python
3464stdlib.")
3465 (license license:expat)))
3466
3467(define-public python-session-info2
3468 (package
3469 (name "python-session-info2")
3470 (version "0.2")
3471 (source
3472 (origin
3473 (method url-fetch)
3474 (uri (pypi-uri "session_info2" version))
3475 (sha256
3476 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3477 (build-system pyproject-build-system)
3478 (arguments
3479 (list
3480 #:test-flags
3481 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3482 ;; Tests require Jupyter Client.
3483 "--ignore=tests/test_subprocess.py")))
3484 (native-inputs
3485 (list python-hatch-docstring-description
3486 python-hatch-vcs
3487 python-hatchling
3488 python-pytest
3489 python-pytest-asyncio))
3490 (home-page "https://session-info2.readthedocs.io/")
3491 (synopsis "Print versions of imported packages")
3492 (description
3493 "This package implements a functionality to print versions of imported
3494Python packages.")
3495 (license license:mpl2.0)))
3496
3497(define-public python-show-in-file-manager
3498 (package
3499 (name "python-show-in-file-manager")
3500 (version "1.1.6")
3501 (source
3502 (origin
3503 (method git-fetch)
3504 (uri (git-reference
3505 (url "https://github.com/damonlynch/showinfilemanager")
3506 (commit (string-append "v" version))))
3507 (file-name (git-file-name name version))
3508 (sha256
3509 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3510 (build-system pyproject-build-system)
3511 (arguments (list #:tests? #f)) ;no tests upstream
3512 (native-inputs
3513 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3514 (propagated-inputs
3515 (list python-packaging python-pyxdg))
3516 (home-page "https://github.com/damonlynch/showinfilemanager")
3517 (synopsis "Open the system file manager and select files in it")
3518 (description
3519 "Show in File Manager is a Python package to open the system file manager
3520and optionally select files in it. The point is not to open the files, but to
3521select them in the file manager, thereby highlighting the files and allowing
3522the user to quickly do something with them.")
3523 (license license:expat)))
3524
3525(define-public python-shxparser
3526 (package
3527 (name "python-shxparser")
3528 (version "0.0.2")
3529 (source
3530 (origin
3531 (method url-fetch)
3532 (uri (pypi-uri "shxparser" version))
3533 (sha256
3534 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3535 (build-system pyproject-build-system)
3536 (arguments (list #:test-backend #~'unittest))
3537 (native-inputs
3538 (list python-svgelements python-setuptools))
3539 (home-page "https://github.com/tatarize/shxparser")
3540 (synopsis "SHX line font parser")
3541 (description
3542 "This is a pure python parser for SHX Hershey font files that are an
3543AutoCad format which can encode single line fonts. This format is used for
3544many CNC and laser operations.")
3545 (license license:expat)))
3546
3547(define-public python-simplify-polyline
3548 (package
3549 (name "python-simplify-polyline")
3550 (version "0.1.0")
3551 (source
3552 (origin
3553 (method url-fetch)
3554 (uri (pypi-uri "simplify_polyline" version))
3555 (sha256
3556 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3557 (build-system pyproject-build-system)
3558 (native-inputs
3559 (list python-pytest
3560 python-setuptools
3561 python-setuptools-scm
3562 python-wheel))
3563 (propagated-inputs
3564 (list python-numpy))
3565 (home-page "https://github.com/ShayHill/simplify_polyline")
3566 (synopsis "Simplify an open or closed polyline")
3567 (description
3568 "This package implements functionality to work with plyline.
3569Features:
3570@itemize
3571@item Visvalingham-Whyatt - removes the smallest triangles formed by
3572three consecutive points in a polyline or polygon
3573@item Douglas-Peucker - gives a better representation of the convex hull
3574@end itemize")
3575 (license license:expat)))
3576
3577(define-public python-siphash24
3578 (package
3579 (name "python-siphash24")
3580 (version "1.8")
3581 (source
3582 (origin
3583 (method git-fetch)
3584 (uri (git-reference
3585 (url "https://github.com/dnicolodi/python-siphash24/")
3586 (commit (string-append "v" version))))
3587 (file-name (git-file-name name version))
3588 (sha256
3589 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3590 (build-system pyproject-build-system)
3591 (arguments
3592 (list
3593 #:test-backend #~'custom
3594 #:test-flags #~(list "test.py")
3595 #:phases
3596 #~(modify-phases %standard-phases
3597 (add-after 'unpack 'patch-pyproject
3598 (lambda _
3599 (substitute* "pyproject.toml"
3600 ;; meson-python: error: Field `project.license` has an invalid
3601 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3602 ;; LGPL-2.1-or-later`)
3603 (("^license = .*")
3604 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3605 (native-inputs
3606 (list pkg-config
3607 python-meson
3608 python-pytest))
3609 (inputs
3610 (list c-siphash))
3611 (home-page "https://github.com/dnicolodi/python-siphash24/")
3612 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3613 (description
3614 "This package provides a C-based implementation of
3615@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3616compatible with the hash functions provided by the hashlib standard library
3617module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3618 ;; They are in LICENSES directory:
3619 (license (list license:asl2.0
3620 license:lgpl2.1+))))
3621
3622(define-public python-snakesay
3623 (package
3624 (name "python-snakesay")
3625 (version "0.10.4")
3626 (source
3627 (origin
3628 (method git-fetch)
3629 (uri (git-reference
3630 (url "https://github.com/pythonanywhere/snakesay")
3631 (commit (string-append "v" version))))
3632 (file-name (git-file-name name version))
3633 (sha256
3634 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3635 (build-system pyproject-build-system)
3636 (arguments
3637 ;; XXX: We don't have python-uv-build yet.
3638 (list #:build-backend "setuptools.build_meta"))
3639 (native-inputs (list python-pytest python-setuptools))
3640 (home-page "https://github.com/pythonanywhere/snakesay")
3641 (synopsis "Like @command{cowsay} but with Python flavor")
3642 (description
3643 "This package provides a simple ASCII art pictures generator of a
3644Snake with a message.")
3645 (license license:expat)))
3646
3647(define-public python-jaconv
3648 (package
3649 (name "python-jaconv")
3650 ;; Last release is not tagged.
3651 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3652 (revision . "0")))
3653 (version (git-version "0.4.0"
3654 (assoc-ref properties 'revision)
3655 (assoc-ref properties 'commit)))
3656 (source
3657 (origin
3658 (method git-fetch)
3659 (uri (git-reference
3660 (url "https://github.com/ikegami-yukino/jaconv")
3661 (commit (assoc-ref properties 'commit))))
3662 (file-name (git-file-name name version))
3663 (sha256
3664 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3665 (build-system pyproject-build-system)
3666 (native-inputs (list python-setuptools python-pynose))
3667 (home-page "https://github.com/ikegami-yukino/jaconv")
3668 (synopsis
3669 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3670Hankaku, Zenkaku")
3671 (description
3672 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3673Hankaku (half-width character) and Zenkaku (full-width character)")
3674 (license license:expat)))
3675
3676(define-public python-janus
3677 (package
3678 (name "python-janus")
3679 (version "1.0.0")
3680 (source
3681 (origin
3682 (method url-fetch)
3683 (uri (pypi-uri "janus" version))
3684 (sha256
3685 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3686 (build-system pyproject-build-system)
3687 (native-inputs
3688 (list python-pytest python-pytest-asyncio
3689 python-setuptools python-wheel))
3690 (propagated-inputs (list python-typing-extensions))
3691 (home-page "https://github.com/aio-libs/janus/")
3692 (synopsis
3693 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3694 (description
3695 "Mixed sync-async queue, supposed to be used for communicating between
3696classic synchronous (threaded) code and asynchronous (in terms of
3697@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3698@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3699library has two faces: synchronous and asynchronous interface. Synchronous is
3700fully compatible with
3701@url{https://docs.python.org/3/library/queue.html,standard queue},
3702asynchronous one follows
3703@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3704design}.")
3705 (license license:asl2.0)))
3706
3707(define-public python-concurrent-log-handler
3708 (package
3709 (name "python-concurrent-log-handler")
3710 (version "0.9.25")
3711 ;; No tests in the PyPI tarball.
3712 (source
3713 (origin
3714 (method git-fetch)
3715 (uri (git-reference
3716 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3717 (commit version)))
3718 (file-name (git-file-name name version))
3719 (sha256
3720 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3721 (build-system pyproject-build-system)
3722 (arguments
3723 (list
3724 ;; XXX: Tests are broken, no new version fixing them yet.
3725 #:tests? #f))
3726 (native-inputs
3727 (list python-hatchling))
3728 (propagated-inputs
3729 (list python-portalocker))
3730 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3731 (synopsis
3732 "Additional log handler for Python's standard @code{logging} package")
3733 (description
3734 "This package provides an additional log handler for Python's standard
3735@code{logging} package (PEP 282). This handler will write log events to a log
3736file which is rotated when the log file reaches a certain size. Multiple
3737processes can safely write to the same log file concurrently and rotated logs
3738can be gzipped if desired. An optional threaded queue logging handler is
3739provided to perform logging in the background.")
3740 (license license:asl2.0)))
3741
3742(define-public python-lazy
3743 (package
3744 (name "python-lazy")
3745 (version "1.6")
3746 (source
3747 (origin
3748 (method url-fetch)
3749 (uri (pypi-uri "lazy" version))
3750 (sha256
3751 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3752 (build-system pyproject-build-system)
3753 (native-inputs (list python-pytest python-setuptools python-wheel))
3754 (home-page "https://github.com/stefanholek/lazy")
3755 (synopsis "Lazy attributes for Python objects")
3756 (description "This package provides a decorator to create lazy
3757attributes.")
3758 (license license:bsd-2)))
3759
3760(define-public python-logfury
3761 (package
3762 (name "python-logfury")
3763 (version "1.0.1")
3764 (source
3765 (origin
3766 (method url-fetch)
3767 (uri (pypi-uri "logfury" version))
3768 (sha256
3769 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3770 (build-system pyproject-build-system)
3771 (native-inputs
3772 (list python-pytest
3773 python-setuptools
3774 python-setuptools-scm
3775 python-testfixtures
3776 python-wheel))
3777 (home-page "https://github.com/reef-technologies/logfury/")
3778 (synopsis "Logging of method calls for python libraries")
3779 (description
3780 "Logfury is a tool for python library maintainers. It allows for
3781responsible, low-boilerplate logging of method calls.")
3782 (license license:bsd-3)))
3783
3784(define-public python-logzero
3785 (package
3786 (name "python-logzero")
3787 (version "1.7.0")
3788 (source
3789 (origin
3790 (method git-fetch)
3791 (uri (git-reference
3792 (url "https://github.com/metachris/logzero")
3793 (commit (string-append "v" version))))
3794 (file-name (git-file-name name version))
3795 (sha256
3796 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
3797 (build-system pyproject-build-system)
3798 (native-inputs (list python-pytest python-setuptools))
3799 (home-page "https://github.com/metachris/logzero")
3800 (synopsis "Robust and effective logging for Python")
3801 (description
3802 "@code{logzero} provides a fully configured Python logger object for
3803easy logging and rotating to a console or a file.")
3804 (license license:expat)))
3805
3806(define-public python-logbook
3807 (package
3808 (name "python-logbook")
3809 (version "1.8.2")
3810 (source
3811 (origin
3812 (method url-fetch)
3813 (uri (pypi-uri "logbook" version))
3814 (sha256
3815 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
3816 (build-system pyproject-build-system)
3817 (native-inputs
3818 (list python-brotli
3819 python-cython
3820 python-pytest
3821 python-setuptools
3822 python-wheel))
3823 (home-page "https://github.com/getlogbook/logbook")
3824 (synopsis "Logbook is a logging replacement for Python")
3825 (description
3826 "Logbook is a logging system for Python that replaces the standard
3827library’s logging module. It was designed with both complex and simple
3828applications in mind and the idea to make logging fun.")
3829 (license license:bsd-3)))
3830
3831(define-public python-databind-core
3832 (package
3833 (name "python-databind-core")
3834 (version "4.4.2")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "databind.core" version))
3839 (sha256
3840 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
3841 (snippet
3842 #~(begin (use-modules (guix build utils))
3843 ;; The problem with python-typing-extensions >= 4.7 is only
3844 ;; with python-3.7.
3845 (substitute* "pyproject.toml"
3846 ((",<4.7.*") "\"\n"))))))
3847 (build-system pyproject-build-system)
3848 (arguments
3849 (list
3850 #:phases
3851 #~(modify-phases %standard-phases
3852 (add-after 'install 'fix-name
3853 (lambda* (#:key inputs outputs #:allow-other-keys)
3854 (let* ((sitedir (site-packages inputs outputs))
3855 (dist-info
3856 (string-append sitedir "/databind_core-" #$version ".dist-info")))
3857 (substitute* (string-append dist-info "/METADATA")
3858 (("Name: databind-core")
3859 "Name: databind.core"))
3860 (substitute* (string-append dist-info "/RECORD")
3861 (("databind_core") "databind.core"))
3862 (rename-file dist-info
3863 (string-append sitedir
3864 "/databind.core-"
3865 #$version ".dist-info"))))))))
3866 (propagated-inputs
3867 (list python-deprecated
3868 python-nr-date
3869 python-nr-stream
3870 python-typeapi
3871 python-typing-extensions))
3872 (native-inputs
3873 (list python-poetry-core python-pytest))
3874 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
3875 (synopsis
3876 "Library for de-/serializing Python dataclasses")
3877 (description
3878 "Databind is a library inspired by jackson-databind to de-/serialize
3879Python dataclasses.")
3880 (license license:expat)))
3881
3882(define-public python-databind-json
3883 (package
3884 (name "python-databind-json")
3885 (version "4.4.2")
3886 (source
3887 (origin
3888 (method url-fetch)
3889 (uri (pypi-uri "databind.json" version))
3890 (sha256
3891 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
3892 (snippet
3893 #~(begin (use-modules (guix build utils))
3894 ;; The problem with python-typing-extensions >= 4.7 is only
3895 ;; with python-3.7.
3896 (substitute* "pyproject.toml"
3897 ((",<4.7.*") "\"\n"))))))
3898 (build-system pyproject-build-system)
3899 (arguments
3900 (list
3901 #:phases
3902 #~(modify-phases %standard-phases
3903 (add-after 'install 'fix-name
3904 (lambda* (#:key inputs outputs #:allow-other-keys)
3905 (let* ((sitedir (site-packages inputs outputs))
3906 (dist-info
3907 (string-append sitedir "/databind_json-" #$version ".dist-info")))
3908 (substitute* (string-append dist-info "/METADATA")
3909 (("Name: databind-json")
3910 "Name: databind.json"))
3911 (substitute* (string-append dist-info "/RECORD")
3912 (("databind_json") "databind.json"))
3913 (rename-file dist-info
3914 (string-append sitedir
3915 "/databind.json-"
3916 #$version ".dist-info"))))))))
3917 (propagated-inputs
3918 (list python-databind-core python-nr-date
3919 python-typeapi python-typing-extensions))
3920 (native-inputs (list python-poetry-core python-pytest))
3921 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
3922 (synopsis
3923 "De-/serialize Python dataclasses to or from JSON payloads")
3924 (description
3925 "The @code{databind.json} package implements the de-/serialization to or
3926from JSON payloads using the @code{databind.core} framework.")
3927 (license license:expat)))
3928
3929(define-public python-docspec
3930 (package
3931 (name "python-docspec")
3932 (version "2.2.1")
3933 (source
3934 (origin
3935 (method url-fetch)
3936 (uri (pypi-uri "docspec" version))
3937 (sha256
3938 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
3939 (build-system pyproject-build-system)
3940 (arguments (list #:tests? #false)) ;there are none
3941 (propagated-inputs
3942 (list python-databind-core
3943 python-databind-json
3944 python-deprecated))
3945 (native-inputs
3946 (list python-poetry-core))
3947 (home-page "https://github.com/NiklasRosenstein/python-docspec")
3948 (synopsis "Represent API documentation of programming languages")
3949 (description
3950 "Docspec is a JSON object specification for representing API
3951documentation of programming languages.")
3952 (license license:expat)))
3953
3954(define-public python-docspec-python
3955 (package
3956 (name "python-docspec-python")
3957 (version "2.2.1")
3958 (source
3959 (origin
3960 (method url-fetch)
3961 (uri (pypi-uri "docspec_python" version))
3962 (sha256
3963 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
3964 (build-system pyproject-build-system)
3965 (arguments
3966 (list #:tests? #false)) ;there are none
3967 (propagated-inputs (list python-docspec python-nr-util))
3968 (native-inputs (list python-poetry-core))
3969 (home-page "https://github.com/NiklasRosenstein/docspec/")
3970 (synopsis "Produce docspec data from Python source code")
3971 (description
3972 "This package provides a parser based on @code{lib2to3} producing
3973@code{docspec} data from Python source code.")
3974 (license license:expat)))
3975
3976(define-public python-fqdn
3977 (package
3978 (name "python-fqdn")
3979 (version "1.5.1")
3980 (source
3981 (origin
3982 (method url-fetch)
3983 (uri (pypi-uri "fqdn" version))
3984 (sha256
3985 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
3986 (build-system pyproject-build-system)
3987 (arguments (list #:tests? #false)) ;there are none
3988 (propagated-inputs (list python-cached-property))
3989 (native-inputs (list python-setuptools python-wheel))
3990 (home-page "https://github.com/ypcrts/fqdn")
3991 (synopsis "Validate domain names against RFC 1123")
3992 (description
3993 "This package validates fully-qualified domain names against RFC 1123, so
3994that they are acceptable to modern bowsers")
3995 (license license:mpl2.0)))
3996
3997(define-public python-fire
3998 (package
3999 (name "python-fire")
4000 (version "0.7.0")
4001 (source
4002 (origin
4003 (method url-fetch)
4004 (uri (pypi-uri "fire" version))
4005 (sha256
4006 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4007 (build-system pyproject-build-system)
4008 (propagated-inputs (list python-termcolor))
4009 (native-inputs (list python-pytest python-setuptools python-wheel))
4010 (synopsis "Library for automatically generating command line interfaces")
4011 (description
4012 "Fire is a library for automatically generating command line interfaces
4013from absolutely any Python object. The following are the advantages:
4014@itemize
4015@item A simple way to create a CLI in Python.
4016@item A helpful tool for developing and debugging Python code.
4017@item Helps with exploring existing code or turning other people's code into a
4018command line interface.
4019@item Makes transitioning between Bash and Python easier.
4020@item Makes using a Python REPL easier by setting up the REPL with the modules
4021and variables you'll need already imported and created.
4022@end itemize")
4023 (home-page "https://github.com/google/python-fire")
4024 (license license:asl2.0)))
4025
4026(define-public python-fit-nbinom
4027 (package
4028 (name "python-fit-nbinom")
4029 (version "1.1")
4030 (source (origin
4031 (method url-fetch)
4032 (uri (pypi-uri "fit_nbinom" version))
4033 (sha256
4034 (base32
4035 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4036 (build-system pyproject-build-system)
4037 (arguments
4038 (list
4039 #:tests? #false ;there are none
4040 #:phases
4041 '(modify-phases %standard-phases
4042 (add-after 'unpack 'remove-invalid-syntax
4043 (lambda _
4044 (substitute* "setup.py"
4045 ((".\\*\"") "\"")))))))
4046 (propagated-inputs (list python-numpy python-scipy))
4047 (native-inputs (list python-setuptools python-wheel))
4048 (home-page "https://github.com/joachimwolff/fit_nbinom")
4049 (synopsis "Negative binomial maximum likelihood estimator")
4050 (description "This package provides an implementation in Python using
4051scipy and numpy of negative binomial maximum likelihood estimation.")
4052 (license license:gpl3+)))
4053
4054(define-public python-docrep
4055 (package
4056 (name "python-docrep")
4057 (version "0.3.2")
4058 (source (origin
4059 (method url-fetch)
4060 (uri (pypi-uri "docrep" version))
4061 (sha256
4062 (base32
4063 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4064 (build-system pyproject-build-system)
4065 (propagated-inputs (list python-six))
4066 (native-inputs (list python-pytest python-setuptools python-wheel))
4067 (home-page "https://github.com/Chilipp/docrep")
4068 (synopsis "Python package for docstring repetition")
4069 (description "Docrep is the documentation repetition module. This module
4070targets developers that develop complex and nested Python APIs and helps them
4071to create a well-documented piece of software.")
4072 (license license:asl2.0)))
4073
4074(define-public python-dotmap
4075 (package
4076 (name "python-dotmap")
4077 (version "1.3.30")
4078 (source
4079 (origin
4080 (method url-fetch)
4081 (uri (pypi-uri "dotmap" version))
4082 (sha256
4083 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4084 (build-system pyproject-build-system)
4085 (arguments (list #:test-backend #~'unittest))
4086 (native-inputs (list python-setuptools))
4087 (home-page "https://github.com/drgrib/dotmap")
4088 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4089 (description
4090 "DotMap is a dot-access dictionary subclass that has dynamic
4091hierarchy creation, can be initialized with keys, can be initialized from a
4092dictionary, can be convert to a dictionary, and is ordered by insertion.")
4093 (license license:expat)))
4094
4095(define-public python-dotty-dict
4096 (package
4097 (name "python-dotty-dict")
4098 (version "1.3.1")
4099 (source
4100 (origin
4101 (method git-fetch)
4102 (uri (git-reference
4103 (url "https://github.com/pawelzny/dotty_dict")
4104 (commit (string-append "v" version))))
4105 (sha256
4106 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4107 (build-system pyproject-build-system)
4108 (native-inputs
4109 (list python-poetry-core
4110 python-pytest
4111 python-setuptools))
4112 (home-page "https://github.com/pawelzny/dotty_dict")
4113 (synopsis "Python library for accessing dictionaries using a dot syntax")
4114 (description "This package provides a library that wraps the traditional
4115Python dictionaries and provides a syntax to access nested dictionaries values
4116using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4117 (license license:expat)))
4118
4119(define-public python-affine
4120 (package
4121 (name "python-affine")
4122 (version "2.4.0")
4123 (source (origin
4124 (method url-fetch)
4125 (uri (pypi-uri "affine" version))
4126 (sha256
4127 (base32
4128 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4129 (build-system pyproject-build-system)
4130 (propagated-inputs (list python-flake8
4131 python-pytest python-pytest-cov))
4132 (native-inputs (list python-flit-core))
4133 (home-page "https://github.com/rasterio/affine")
4134 (synopsis "Matrices describing affine transformation of the plane")
4135 (description "This is a package for matrices describing the affine
4136transformation of the plane.")
4137 (license license:bsd-3)))
4138
4139(define-public python-argopt
4140 (package
4141 (name "python-argopt")
4142 (version "0.9.1")
4143 (source
4144 (origin
4145 (method url-fetch)
4146 (uri (pypi-uri "argopt" version))
4147 (sha256
4148 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4149 (build-system pyproject-build-system)
4150 (native-inputs
4151 (list python-pytest
4152 python-pytest-timeout
4153 python-setuptools
4154 python-setuptools-scm
4155 python-wheel))
4156 (home-page "https://github.com/casperdcl/argopt")
4157 (synopsis "Generate a command-line interface from a docstring")
4158 (description
4159 "This package provides tools to define a command line interface
4160from a docstring rather than the other way around.")
4161 (license license:mpl2.0)))
4162
4163(define-public python-array-api-compat
4164 (package
4165 (name "python-array-api-compat")
4166 (version "1.12.0")
4167 (source
4168 (origin
4169 (method url-fetch)
4170 (uri (pypi-uri "array_api_compat" version))
4171 (sha256
4172 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4173 (build-system pyproject-build-system)
4174 ;; Tests would require all supported array libraries, including pytorch
4175 (arguments (list #:tests? #false))
4176 (native-inputs
4177 (list python-setuptools))
4178 (home-page "https://data-apis.org/array-api-compat/")
4179 (synopsis "Array API compatibility wrapper for NumPy et al")
4180 (description
4181 "This package provides a wrapper around @code{NumPy} and other array
4182libraries to make them compatible with the Array API standard")
4183 (license license:expat)))
4184
4185(define-public python-array-api-strict
4186 (package
4187 (name "python-array-api-strict")
4188 (version "2.4.1")
4189 (source
4190 (origin
4191 (method url-fetch)
4192 (uri (pypi-uri "array_api_strict" version))
4193 (sha256
4194 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
4195 (build-system pyproject-build-system)
4196 (arguments
4197 (list
4198 ;; tests: 584 passed, 1 skipped, 2 deselected
4199 #:test-flags
4200 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4201 #~(list "-k" (string-append "not test_disabled_extensions"
4202 " and not test_environment_variables"))))
4203 (native-inputs
4204 (list python-pytest
4205 python-setuptools
4206 python-setuptools-scm))
4207 (propagated-inputs
4208 (list python-numpy))
4209 (home-page "https://data-apis.org/array-api-strict/")
4210 (synopsis "Strict implementation of the Python array API")
4211 (description
4212 "@code{array_api_strict} is a strict, minimal implementation of the
4213@url{https://data-apis.org/array-api/latest/, Python array API}.
4214
4215The purpose of array-api-strict is to provide an implementation of the array
4216API for consuming libraries to test against so they can be completely sure
4217their usage of the array API is portable.")
4218 (license license:bsd-3)))
4219
4220(define-public python-cachedir-tag
4221 (package
4222 (name "python-cachedir-tag")
4223 (version "0.0.4")
4224 (source
4225 (origin
4226 (method git-fetch)
4227 (uri (git-reference
4228 (url "https://github.com/moreati/python-cachedir-tag")
4229 (commit (string-append "v" version))))
4230 (file-name (git-file-name name version))
4231 (sha256
4232 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4233 (build-system pyproject-build-system)
4234 (arguments '(#:tests? #f)) ;no test
4235 (native-inputs (list python-setuptools))
4236 (home-page "https://github.com/moreati/python-cachedir-tag")
4237 (synopsis
4238 "Handle @file{CACHEDIR.TAG} in cache directories")
4239 (description
4240 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4241a file llowing any arbitrary directory to be marked as a cache directory.")
4242 (license license:expat)))
4243
4244(define-public python-cachetools
4245 (package
4246 (name "python-cachetools")
4247 (version "6.1.0")
4248 (source
4249 (origin
4250 (method url-fetch)
4251 (uri (pypi-uri "cachetools" version))
4252 (sha256
4253 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4254 (build-system pyproject-build-system)
4255 (native-inputs
4256 (list python-pytest
4257 python-setuptools
4258 python-wheel))
4259 (home-page "https://github.com/tkem/cachetools/")
4260 (synopsis "Extensible memoizing collections and decorators")
4261 (description "This module provides various memoizing collections and
4262decorators, including variants of the Python standard library's
4263@code{lru_cache} function decorator.")
4264 (license license:expat)))
4265
4266(define-public python-cachetools-5
4267 (package
4268 (inherit python-cachetools)
4269 (version "5.5.2")
4270 (source
4271 (origin
4272 (method url-fetch)
4273 (uri (pypi-uri "cachetools" version))
4274 (sha256
4275 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4276
4277(define-public python-colorclass
4278 (package
4279 (name "python-colorclass")
4280 (version "2.2.2")
4281 (source
4282 (origin
4283 (method git-fetch)
4284 (uri (git-reference
4285 (url "https://github.com/matthewdeanmartin/colorclass")
4286 (commit (string-append "v" version))))
4287 (file-name (git-file-name name version))
4288 (sha256
4289 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4290 (build-system pyproject-build-system)
4291 (arguments
4292 (list
4293 #:test-flags
4294 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4295 #:phases
4296 #~(modify-phases %standard-phases
4297 (add-after 'unpack 'use-poetry-core
4298 (lambda _
4299 ;; Patch to use the core poetry API.
4300 (substitute* "pyproject.toml"
4301 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4302 (native-inputs (list python-poetry-core python-pytest))
4303 (home-page "https://github.com/matthewdeanmartin/colorclass")
4304 (synopsis "Colorful console applications with Python")
4305 (description
4306 "This package provides an ANSI color text library for Python. It
4307provides automatic coloring for dark or light terminals.")
4308 (license license:expat)))
4309
4310(define-public python-colorcet
4311 (package
4312 (name "python-colorcet")
4313 (version "3.1.1a1")
4314 (source
4315 (origin
4316 (method url-fetch)
4317 (uri (pypi-uri "colorcet" version))
4318 (sha256
4319 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4320 (build-system pyproject-build-system)
4321 (native-inputs (list python-nbval
4322 python-packaging
4323 python-pytest
4324 python-pytest-mpl
4325 python-setuptools
4326 python-setuptools-scm))
4327 (home-page "https://colorcet.holoviz.org/")
4328 (synopsis "Collection of perceptually uniform colormaps")
4329 (description "Colorcet is a collection of perceptually accurate 256-color
4330colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4331HoloViews, and Datashader.")
4332 (license license:cc-by4.0)))
4333
4334(define-public python-colored
4335 (package
4336 (name "python-colored")
4337 (version "2.3.0")
4338 (source (origin
4339 (method git-fetch)
4340 (uri (git-reference
4341 (url "https://gitlab.com/dslackw/colored")
4342 (commit version)))
4343 (file-name (git-file-name name version))
4344 (sha256
4345 (base32
4346 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4347 (build-system pyproject-build-system)
4348 (arguments
4349 (list
4350 #:phases
4351 #~(modify-phases %standard-phases
4352 (add-before 'check 'pre-check
4353 (lambda _
4354 ;; Tests expect ANSI escape codes for colors.
4355 (setenv "FORCE_COLOR" "1"))))))
4356 (native-inputs (list python-flit-core python-pytest))
4357 (home-page "https://gitlab.com/dslackw/colored")
4358 (synopsis "Simple library for color and formatting to terminal")
4359 (description "This is a very simple Python library for color and
4360formatting in the terminal. It comes with a collection of color codes and
4361names for 256 color terminal setups.")
4362 (license license:expat)))
4363
4364(define-public python-colored-traceback
4365 ;; No tags in upstream repository.
4366 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4367 (revision "0"))
4368 (package
4369 (name "python-colored-traceback")
4370 (version (git-version "0.4.2" revision commit))
4371 (source
4372 (origin
4373 (method git-fetch)
4374 (uri (git-reference
4375 (url "https://github.com/staticshock/colored-traceback.py")
4376 (commit commit)))
4377 (file-name (git-file-name name version))
4378 (sha256
4379 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4380 (build-system pyproject-build-system)
4381 (arguments
4382 ;; Tests are incompatible with current python version.
4383 (list #:tests? #f))
4384 (propagated-inputs (list python-colorama python-pygments))
4385 (native-inputs (list python-setuptools python-wheel))
4386 (home-page "https://github.com/staticshock/colored-traceback.py")
4387 (synopsis "Automatically color uncaught exception tracebacks")
4388 (description "This package provides python utilities to automatically
4389color uncaught exception tracebacks.")
4390 (license license:isc))))
4391
4392(define-public python-colorful
4393 (package
4394 (name "python-colorful")
4395 (version "0.5.8")
4396 (source
4397 (origin
4398 (method git-fetch)
4399 (uri (git-reference
4400 (url "https://github.com/timofurrer/colorful")
4401 (commit (string-append "v" version))))
4402 (file-name (git-file-name name version))
4403 (sha256
4404 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4405 (build-system pyproject-build-system)
4406 (native-inputs
4407 (list python-pytest
4408 python-setuptools))
4409 (propagated-inputs
4410 (list python-colorama))
4411 (home-page "http://github.com/timofurrer/colorful")
4412 (synopsis "Terminal string styling")
4413 (description "Colorful provides an array of text styles, that can be used
4414as functions or string constants to form colored terminal output.")
4415 (license license:expat)))
4416
4417(define-public python-colorthief
4418 (package
4419 (name "python-colorthief")
4420 (version "0.2.1")
4421 (source
4422 (origin
4423 (method url-fetch)
4424 (uri (pypi-uri "colorthief" version))
4425 (sha256
4426 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4427 (build-system pyproject-build-system)
4428 (arguments
4429 (list #:tests? #f)) ;no tests in PyPI or Git
4430 (native-inputs (list python-setuptools))
4431 (propagated-inputs (list python-pillow))
4432 (home-page "https://github.com/fengsp/color-thief-py")
4433 (synopsis "Grab the color palette of an image")
4434 (description
4435 "This package provides methods to determine the dominant color
4436of an image, as well as constructing a representative color palette.")
4437 (license license:bsd-3)))
4438
4439(define-public python-construct-classes
4440 (package
4441 (name "python-construct-classes")
4442 (version "0.1.2")
4443 (source
4444 (origin
4445 (method git-fetch)
4446 (uri (git-reference
4447 (url "https://github.com/matejcik/construct-classes")
4448 (commit (string-append "v" version))))
4449 (file-name (git-file-name name version))
4450 (sha256
4451 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4452 (build-system pyproject-build-system)
4453 (propagated-inputs
4454 (list python-construct))
4455 (native-inputs
4456 (list python-poetry-core
4457 python-pytest))
4458 (home-page "https://github.com/matejcik/construct-classes")
4459 (synopsis "Parse binary structs into dataclasses")
4460 (description "This package provides a parser to parse binary structs
4461into dataclasses.")
4462 (license license:expat)))
4463
4464(define-public python-contourpy
4465 (package
4466 (name "python-contourpy")
4467 (version "1.3.3")
4468 (source
4469 (origin
4470 (method url-fetch)
4471 (uri (pypi-uri "contourpy" version))
4472 (sha256
4473 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4474 (build-system pyproject-build-system)
4475 (arguments
4476 (list
4477 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4478 #:test-flags
4479 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4480 #~(list "-m" "not image"
4481 ;; Tests that pass but avoided for load reasons.
4482 "-k" "not test_filled_random_big and not test_lines_random_big")))
4483 (native-inputs
4484 (list pybind11-2
4485 python-meson
4486 python-pytest
4487 python-wurlitzer))
4488 (propagated-inputs
4489 (list python-numpy))
4490 (home-page "https://contourpy.readthedocs.io/")
4491 (synopsis
4492 "Python library for calculating contours of 2D quadrilateral grids")
4493 (description
4494 "ContourPy is a Python library for calculating contours of 2D
4495quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4496 (license license:bsd-3)))
4497
4498(define-public python-lunr
4499 (package
4500 (name "python-lunr")
4501 (version "0.8.0")
4502 (source
4503 (origin
4504 (method url-fetch)
4505 (uri
4506 (pypi-uri "lunr" version))
4507 (sha256
4508 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4509 (build-system pyproject-build-system)
4510 (arguments
4511 (list
4512 #:test-flags
4513 '(list "-k" "not TestLanguageSupport"
4514 "--ignore-glob=tests/acceptance_tests/*")))
4515 (native-inputs
4516 (list python-hatch-fancy-pypi-readme
4517 python-hatchling
4518 python-pytest
4519 python-pytest-timeout))
4520 (propagated-inputs
4521 (list python-nltk))
4522 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4523 (synopsis "Full-text search library")
4524 (description "This package provides python library for full-text search.
4525It indexes documents and provides a search interface for retrieving documents
4526that best match text queries.")
4527 (license license:expat)))
4528
4529(define-public python-mdit-py-plugins
4530 (package
4531 (name "python-mdit-py-plugins")
4532 (version "0.5.0")
4533 (source (origin
4534 (method git-fetch) ;for tests
4535 (uri (git-reference
4536 (url "https://github.com/executablebooks/mdit-py-plugins")
4537 (commit (string-append "v" version))))
4538 (file-name (git-file-name name version))
4539 (sha256
4540 (base32
4541 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4542 (build-system pyproject-build-system)
4543 (propagated-inputs
4544 (list python-markdown-it-py
4545 python-attrs))
4546 (native-inputs
4547 (list python-flit-core
4548 python-pytest
4549 python-pytest-regressions))
4550 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4551 (synopsis "Collection of plugins for markdown-it-py")
4552 (description "This package contains a collection of plugins for
4553@code{markdown-it-py} like:
4554@enumerate
4555@item amsmath,
4556@item attrs,
4557@item container,
4558@item definition list,
4559@item dollarmath,
4560@item field list,
4561@item footnote,
4562@item textmath, and
4563@item wordcount.
4564@end enumerate")
4565 (license license:expat)))
4566
4567(define-public python-mdurl
4568 (package
4569 (name "python-mdurl")
4570 (version "0.1.2")
4571 (source
4572 (origin
4573 (method git-fetch) ; no tests data in PyPi package
4574 (uri (git-reference
4575 (url "https://github.com/executablebooks/mdurl")
4576 (commit version)))
4577 (file-name (git-file-name name version))
4578 (sha256
4579 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4580 (build-system pyproject-build-system)
4581 (native-inputs (list python-flit python-pytest))
4582 (home-page "https://github.com/executablebooks/mdurl")
4583 (synopsis "Markdown URL utilities")
4584 (description
4585 "This package implements a Python port of the JavaScript @code{mdurl}.")
4586 (license license:expat)))
4587
4588(define-public python-mkdocs
4589 (package
4590 (name "python-mkdocs")
4591 (version "1.6.1")
4592 (source
4593 (origin
4594 (method git-fetch)
4595 (uri (git-reference
4596 (url "https://github.com/mkdocs/mkdocs")
4597 (commit version)))
4598 (file-name (git-file-name name version))
4599 (sha256
4600 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4601 (build-system pyproject-build-system)
4602 (arguments
4603 (list
4604 ;; tests: 687 passed
4605 #:test-backend #~'unittest
4606 #:test-flags
4607 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4608 #:phases
4609 #~(modify-phases %standard-phases
4610 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4611 ;; to run tests with pytest (and thus ignore them selectively).
4612 (add-before 'check 'delete-failing-tests
4613 (lambda _
4614 (delete-file "mkdocs/tests/cli_tests.py"))))))
4615 (native-inputs
4616 (list python-hatchling
4617 python-setuptools))
4618 (propagated-inputs
4619 (list python-click
4620 python-ghp-import
4621 python-jinja2
4622 python-markdown
4623 python-markupsafe
4624 python-mergedeep
4625 python-mkdocs-get-deps
4626 python-packaging
4627 python-pathspec
4628 python-pyyaml
4629 python-pyyaml-env-tag
4630 python-watchdog
4631 ;; [optional]
4632 python-babel))
4633 (home-page "https://www.mkdocs.org")
4634 (synopsis "Project documentation with Markdown")
4635 (description
4636 "MkDocs is a static site generator geared towards building project
4637documentation. Documentation source files are written in Markdown, and
4638configured with a single YAML configuration file.")
4639 (license license:bsd-3)))
4640
4641(define-public python-mkdocs-get-deps
4642 (package
4643 (name "python-mkdocs-get-deps")
4644 (version "0.2.0")
4645 (source
4646 (origin
4647 (method git-fetch)
4648 (uri (git-reference
4649 (url "https://github.com/mkdocs/get-deps")
4650 (commit (string-append "v" version))))
4651 (file-name (git-file-name name version))
4652 (sha256
4653 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4654 (build-system pyproject-build-system)
4655 (native-inputs
4656 (list python-pytest
4657 python-hatchling))
4658 (propagated-inputs
4659 (list python-mergedeep
4660 python-platformdirs
4661 python-pyyaml))
4662 (home-page "https://github.com/mkdocs/get-deps")
4663 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4664 (description
4665 "This package provides an @code{MkDocs} extension that lists all dependencies
4666according to a mkdocs.yml file. This command guesses the Python dependencies
4667that a MkDocs site requires in order to build. It simply prints the PyPI
4668packages that need to be installed.")
4669 (license license:expat)))
4670
4671(define-public python-mkdocs-markdownextradata-plugin
4672 (package
4673 (name "python-mkdocs-markdownextradata-plugin")
4674 (version "0.2.5")
4675 (source
4676 (origin
4677 (method git-fetch)
4678 (uri (git-reference
4679 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4680 (commit version)))
4681 (file-name (git-file-name name version))
4682 (sha256
4683 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4684 (build-system pyproject-build-system)
4685 (native-inputs (list python-pytest python-setuptools))
4686 (propagated-inputs (list python-mkdocs python-pyyaml))
4687 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4688 (synopsis "Inject extra variables into the MkDocs markdown template")
4689 (description
4690 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4691variables into the markdown template.")
4692 (license license:expat)))
4693
4694(define-public python-docstring-to-markdown
4695 (package
4696 (name "python-docstring-to-markdown")
4697 (version "0.15")
4698 (source
4699 (origin
4700 (method url-fetch)
4701 (uri (pypi-uri "docstring-to-markdown" version))
4702 (sha256
4703 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4704 (build-system pyproject-build-system)
4705 (native-inputs
4706 (list python-pytest
4707 python-setuptools))
4708 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4709 (synopsis "On the fly conversion of Python docstrings to markdown")
4710 (description
4711 "This module can convert Python docstrings to Markdown. It can recognise
4712reStructuredText inside docstrings and convert multiple of its features to
4713Markdown. It also includes initial support for Google-formatted docstrings.")
4714 (license license:lgpl2.1+)))
4715
4716(define-public python-pdoc
4717 (package
4718 (name "python-pdoc")
4719 (version "13.0.1")
4720 (source (origin
4721 (method git-fetch)
4722 (uri (git-reference
4723 (url "https://github.com/mitmproxy/pdoc")
4724 (commit (string-append "v" version))))
4725 (file-name (git-file-name name version))
4726 (sha256
4727 (base32
4728 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4729 (build-system pyproject-build-system)
4730 (native-inputs (list python-pytest python-jinja2 python-pygments
4731 python-setuptools python-wheel))
4732 (arguments
4733 (list
4734 ;; Some tests fail, presumably because of slight version mismatches of
4735 ;; the dependencies.
4736 #:test-flags
4737 '(list "-k" (string-append "not test_var_with_raising_repr and "
4738 "not test_smoke[mock] and "
4739 "not test_snapshots[html"))))
4740 (home-page "https://pdoc.dev/")
4741 (synopsis "API documentation for Python projects")
4742 (description "pdoc auto-generates API documentation that follows your
4743project's Python module hierarchy. It requires no configuration, has
4744first-class support for type annotations, cross-links between identifiers,
4745comes with an integrated live-reloading web server, uses customizable HTML
4746templates, understands numpydoc and Google-style docstrings.")
4747 (license license:unlicense)))
4748
4749(define-public python-py4j
4750 (package
4751 (name "python-py4j")
4752 (version "0.10.9.7")
4753 (source (origin
4754 (method url-fetch)
4755 (uri (pypi-uri "py4j" version))
4756 (sha256
4757 (base32
4758 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4759 (build-system pyproject-build-system)
4760 (arguments (list #:tests? #f)) ; Requires a running JVM?
4761 (native-inputs (list python-setuptools))
4762 (home-page "https://www.py4j.org/")
4763 (synopsis "Dynamically access arbitrary Java objects from Python")
4764 (description
4765 "This package enables Python programs to dynamically access arbitrary
4766Java objects.")
4767 (license license:bsd-3)))
4768
4769(define-public python-pymdown-extensions
4770 (package
4771 (name "python-pymdown-extensions")
4772 (version "10.16.1")
4773 (source
4774 (origin
4775 (method git-fetch)
4776 (uri (git-reference
4777 (url "https://github.com/facelessuser/pymdown-extensions")
4778 (commit version)))
4779 (file-name (git-file-name name version))
4780 (sha256
4781 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
4782 (build-system pyproject-build-system)
4783 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
4784 (arguments
4785 (list #:tests? #f))
4786 (native-inputs (list python-hatchling python-pytest python-pyyaml))
4787 (propagated-inputs (list python-markdown))
4788 (home-page "https://github.com/facelessuser/pymdown-extensions")
4789 (synopsis "Extension pack for Python Markdown")
4790 (description
4791 "PyMdown Extensions is a collection of extensions for Python Markdown.
4792All extensions are found under the module namespace of pymdownx.")
4793 (license license:expat)))
4794
4795(define-public python-plotext
4796 (package
4797 (name "python-plotext")
4798 (version "5.2.8")
4799 (source (origin
4800 (method url-fetch)
4801 (uri (pypi-uri "plotext" version))
4802 (sha256
4803 (base32
4804 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
4805 (build-system pyproject-build-system)
4806 (arguments (list #:tests? #false)) ;there are none
4807 (native-inputs (list python-setuptools python-wheel))
4808 (home-page "https://github.com/piccolomo/plotext")
4809 (synopsis "Plots in the terminal")
4810 (description "Plotext lets you plot directly to the terminal.")
4811 (license license:expat)))
4812
4813(define-public python-plotille
4814 (package
4815 (name "python-plotille")
4816 (version "5.0.0")
4817 (source
4818 (origin
4819 (method git-fetch)
4820 (uri (git-reference
4821 (url "https://github.com/tammoippen/plotille")
4822 (commit (string-append "v" version))))
4823 (file-name (git-file-name name version))
4824 (sha256
4825 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
4826 (modules '((guix build utils)))
4827 (snippet
4828 #~(begin
4829 ;; Without deleting ./imgs setuptools complains as follows: error:
4830 ;; Multiple top-level packages discovered in a flat-layout:
4831 ;; ['imgs', 'plotille'].
4832 (delete-file-recursively "./imgs")))))
4833 (build-system pyproject-build-system)
4834 (native-inputs
4835 (list python-pytest
4836 python-mock
4837 python-pendulum
4838 python-pytest-mock
4839 python-setuptools
4840 python-wheel))
4841 (home-page "https://github.com/tammoippen/plotille")
4842 (synopsis "Plot in the terminal using braille dots")
4843 (description
4844 "Plotille provides a figure class and graphing functions to create plots,
4845scatter plots, histograms and heatmaps in the terminal using braille dots.")
4846 (license license:expat)))
4847
4848(define-public python-poetry-dynamic-versioning
4849 (package
4850 (name "python-poetry-dynamic-versioning")
4851 (version "1.9.1")
4852 (source
4853 (origin
4854 (method url-fetch)
4855 (uri (pypi-uri "poetry_dynamic_versioning" version))
4856 (sha256
4857 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
4858 (build-system pyproject-build-system)
4859 (arguments
4860 (list
4861 #:test-flags
4862 #~(list "--ignore=tests/test_integration.py"
4863 "-k" (string-join
4864 ;; Tests searching for VCS back end.
4865 (list "not test__get_version__defaults"
4866 "test__enable_in_doc__project_with_dynamic"
4867 "test__enable_in_doc__project_with_version"
4868 "test__get_version__format_jinja"
4869 "test__get_version__format_jinja_imports_with_module_and_item"
4870 "test__get_version__format_jinja_imports_with_module_only"
4871 "test__get_version__format_jinja_with_enforced_style")
4872 " and not "))))
4873 (native-inputs
4874 (list python-poetry-core
4875 python-pytest))
4876 (propagated-inputs
4877 (list python-dunamai
4878 python-jinja2
4879 python-tomlkit))
4880 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
4881 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
4882 (description
4883 "This package provides a build backend that patches Poetry Core to enable
4884the versioning system in PEP 517 build frontends.")
4885 (license license:expat)))
4886
4887(define-public python-poetry-plugin-export
4888 (package
4889 (name "python-poetry-plugin-export")
4890 (version "1.10.0")
4891 (source
4892 (origin
4893 (method url-fetch)
4894 (uri (pypi-uri "poetry_plugin_export" version))
4895 (sha256
4896 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
4897 (build-system pyproject-build-system)
4898 (arguments
4899 (list
4900 #:tests? #f)) ;tests cycle with poetry
4901 (native-inputs
4902 (list python-poetry-core))
4903 (propagated-inputs
4904 (list python-cachy
4905 python-pendulum
4906 python-poetry-core
4907 python-tomlkit))
4908 (home-page "https://python-poetry.org/")
4909 (synopsis "Poetry plugin to export the dependencies to various formats")
4910 (description
4911 "Poetry plugin to export the dependencies to various formats.")
4912 (license license:expat)))
4913
4914(define-public python-portpicker
4915 (package
4916 (name "python-portpicker")
4917 (version "1.6.0")
4918 (source
4919 (origin
4920 (method url-fetch)
4921 (uri (pypi-uri "portpicker" version))
4922 (sha256
4923 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
4924 (build-system pyproject-build-system)
4925 (arguments
4926 (list
4927 #:test-flags
4928 ;; This fails because portserver ends up in bin, not site-packages
4929 '(list "--ignore=src/tests/portserver_test.py")))
4930 (propagated-inputs (list python-psutil))
4931 (native-inputs (list python-pytest python-setuptools python-wheel
4932 net-tools))
4933 (home-page "https://github.com/google/python_portpicker")
4934 (synopsis "Choose unique available network ports")
4935 (description
4936 "This package provides a library to choose unique available network
4937ports.")
4938 (license license:asl2.0)))
4939
4940(define-public python-md-ulb-pwrap
4941 (package
4942 (name "python-md-ulb-pwrap")
4943 (version "0.1.3")
4944 (source
4945 (origin
4946 (method git-fetch)
4947 (uri (git-reference
4948 (url "https://github.com/mondeja/md-ulb-pwrap")
4949 (commit (string-append "v" version))))
4950 (file-name (git-file-name name version))
4951 (sha256
4952 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
4953 (build-system pyproject-build-system)
4954 (arguments
4955 (list
4956 #:imported-modules `(,@%cargo-build-system-modules
4957 ,@%pyproject-build-system-modules)
4958 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4959 (guix build pyproject-build-system)
4960 (guix build utils))
4961 #:test-backend #~'custom
4962 #:test-flags #~(list "test.py")
4963 #:phases
4964 #~(modify-phases %standard-phases
4965 (add-after 'unpack 'prepare-cargo-build-system
4966 (lambda args
4967 (for-each
4968 (lambda (phase)
4969 (format #t "Running cargo phase: ~a~%" phase)
4970 (apply (assoc-ref cargo:%standard-phases phase)
4971 #:cargo-target #$(cargo-triplet)
4972 args))
4973 '(unpack-rust-crates
4974 configure
4975 check-for-pregenerated-files
4976 patch-cargo-checksums))))
4977 (add-after 'prepare-cargo-build-system 'chdir
4978 (lambda _
4979 (chdir "python"))))))
4980 (native-inputs
4981 (append
4982 (list maturin
4983 python-pytest
4984 python-unicode-linebreak
4985 rust
4986 `(,rust "cargo"))
4987 (or (and=> (%current-target-system)
4988 (compose list make-rust-sysroot))
4989 '())))
4990 (inputs (cargo-inputs 'md_ulb_pwrap))
4991 (home-page "https://github.com/mondeja/md-ulb-pwrap")
4992 (synopsis "Markdown paragraph wrapper")
4993 (description
4994 "This package provides a Markdown paragraph wrapper using Unicode Line
4995Breaking Algorithm written in Rust with Python bindings.")
4996 (license license:expat)))
4997
4998(define-public python-mdx-gh-links
4999 (package
5000 (name "python-mdx-gh-links")
5001 (version "0.4")
5002 (source
5003 (origin
5004 (method url-fetch)
5005 (uri (pypi-uri "mdx_gh_links" version))
5006 (sha256
5007 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5008 (build-system pyproject-build-system)
5009 (arguments (list #:tests? #f)) ;tests connect github
5010 (native-inputs (list python-setuptools))
5011 (propagated-inputs (list python-markdown))
5012 (home-page "https://github.com/Python-Markdown/github-links/")
5013 (synopsis "Python-Markdown extension adding support for shorthand links")
5014 (description "This package is an extension to Python-Markdown which adds
5015support for shorthand links to GitHub users, repositories, issues and
5016commits.")
5017 (license license:bsd-3)))
5018
5019(define-public python-mkdocs-material
5020 (package
5021 (name "python-mkdocs-material")
5022 (version "7.3.6")
5023 (source
5024 (origin
5025 (method git-fetch)
5026 (uri (git-reference
5027 (url "https://github.com/squidfunk/mkdocs-material")
5028 (commit version)))
5029 (file-name (git-file-name name version))
5030 (sha256
5031 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5032 (modules '((guix build utils)))
5033 (snippet
5034 ;; TODO There are still bundled assets and minified JS.
5035 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5036 (build-system pyproject-build-system)
5037 (arguments
5038 (list
5039 #:tests? #f ; No tests.
5040 #:phases
5041 #~(let ((symlink-js
5042 (lambda (inputs)
5043 (for-each
5044 (lambda (lang)
5045 (let* ((filename (string-append "lunr." lang ".min.js"))
5046 (file (string-append "share/javascript/" filename)))
5047 (symlink (search-input-file inputs file) filename)))
5048 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5049 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5050 "vi")))))
5051 (modify-phases %standard-phases
5052 ;; Requirement mkdocs-material-extensions
5053 ;; in-turn requires mkdocs-material. This causes
5054 ;; circular dependency, so we remove this requirement.
5055 (add-after 'unpack 'patch-requirements
5056 (lambda _
5057 (substitute* "requirements.txt"
5058 (("mkdocs-material-extensions.*$")
5059 ""))))
5060 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5061 (lambda* (#:key inputs #:allow-other-keys)
5062 (mkdir-p "material/assets/javascripts/lunr/min")
5063 (with-directory-excursion "material/assets/javascripts/lunr/min"
5064 (symlink-js inputs))))
5065 (add-after 'wrap 'replace-javascript-assets
5066 (lambda* (#:key inputs outputs #:allow-other-keys)
5067 (let* ((site (site-packages inputs outputs))
5068 (js-assets (string-append site "/material/"
5069 "assets/javascripts")))
5070 (with-directory-excursion js-assets
5071 (delete-file-recursively "lunr/min")
5072 (mkdir-p "lunr/min")
5073 (with-directory-excursion "lunr/min"
5074 (symlink-js inputs))))))))))
5075 (native-inputs (list python-setuptools))
5076 (inputs (list js-lunr-ar
5077 js-lunr-da
5078 js-lunr-de
5079 js-lunr-es
5080 js-lunr-fi
5081 js-lunr-fr
5082 js-lunr-hu
5083 js-lunr-it
5084 js-lunr-ja
5085 js-lunr-nl
5086 js-lunr-no
5087 js-lunr-pt
5088 js-lunr-ro
5089 js-lunr-ru
5090 js-lunr-sv
5091 js-lunr-tr
5092 js-lunr-vi
5093 js-lunr-multi
5094 js-lunr-stemmer-support))
5095 (propagated-inputs
5096 (list python-markdown python-mkdocs python-pygments
5097 python-pymdown-extensions))
5098 (home-page "https://squidfunk.github.io/mkdocs-material/")
5099 (synopsis "Material Design theme for MkDocs")
5100 (description "This package provides a theme plugin for the static site
5101generator MkDocs.")
5102 (license license:expat)))
5103
5104(define-public python-nanobind
5105 (package
5106 (name "python-nanobind")
5107 (version "2.10.2")
5108 (source
5109 (origin
5110 (method url-fetch)
5111 (uri (pypi-uri "nanobind" version))
5112 (sha256
5113 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5114 (build-system pyproject-build-system)
5115 (arguments
5116 (list
5117 ;; tests: 466 passed, 27 skipped
5118 #:phases
5119 #~(modify-phases %standard-phases
5120 (add-before 'build 'configure-cmake
5121 (lambda _
5122 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5123 (add-after 'configure-cmake 'build-c++
5124 (lambda _
5125 (invoke "cmake" "--build" "build" "-j" "2")))
5126 (add-before 'check 'pre-check
5127 (lambda _ (chdir "build"))))))
5128 (native-inputs
5129 (list cmake-minimal
5130 python-numpy
5131 python-pathspec
5132 python-pytest
5133 python-scikit-build-core
5134 python-scipy))
5135 (inputs
5136 (list eigen))
5137 (home-page "https://github.com/wjakob/nanobind/")
5138 (synopsis "Tiny and efficient C++/Python bindings")
5139 (description "Nanobind is a small binding library that exposes C++ types
5140in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5141@code{pybind11} and uses near-identical syntax. In contrast to these existing
5142tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5143of time, produce smaller binaries, and have better runtime performance.")
5144 (license license:bsd-3)))
5145
5146(define-public python-nr-date
5147 (package
5148 (name "python-nr-date")
5149 (version "2.1.0")
5150 (source
5151 (origin
5152 (method url-fetch)
5153 (uri (pypi-uri "nr_date" version))
5154 (sha256
5155 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5156 (build-system pyproject-build-system)
5157 (arguments (list #:tests? #false)) ;there are none
5158 (native-inputs (list python-poetry-core))
5159 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5160 (synopsis "Fast, regex-based date parsing library in plain Python")
5161 (description "This package provides a fast, regex-based date parsing
5162library in pure Python.")
5163 (license license:expat)))
5164
5165(define-public python-nr-stream
5166 (package
5167 (name "python-nr-stream")
5168 (version "1.1.5")
5169 (source
5170 (origin
5171 (method url-fetch)
5172 (uri (pypi-uri "nr_stream" version))
5173 (sha256
5174 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5175 (build-system pyproject-build-system)
5176 (arguments (list #:tests? #false)) ;there are none
5177 (native-inputs (list python-poetry-core))
5178 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5179 (synopsis "Stream and Optional classes for Python")
5180 (description "This package provides a @code{Stream} and @code{Optional}
5181class.")
5182 (license license:expat)))
5183
5184(define-public python-nr-util
5185 (package
5186 (name "python-nr-util")
5187 (version "0.8.12")
5188 (source
5189 (origin
5190 (method url-fetch)
5191 (uri (pypi-uri "nr.util" version))
5192 (sha256
5193 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5194 (build-system pyproject-build-system)
5195 (arguments
5196 (list
5197 #:tests? #false ;there are none
5198 #:phases
5199 #~(modify-phases %standard-phases
5200 (add-after 'unpack 'patch-build-system
5201 (lambda _
5202 (substitute* "pyproject.toml"
5203 (("^config =.*") "config = []\n"))))
5204 (add-after 'install 'fix-name
5205 (lambda* (#:key inputs outputs #:allow-other-keys)
5206 (let* ((sitedir (site-packages inputs outputs))
5207 (dist-info
5208 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5209 (substitute* (string-append dist-info "/METADATA")
5210 (("Name: nr-util")
5211 "Name: nr.util"))
5212 (substitute* (string-append dist-info "/RECORD")
5213 (("nr_util") "nr.util"))
5214 (rename-file dist-info
5215 (string-append sitedir
5216 "/nr.util-"
5217 #$version ".dist-info"))))))))
5218 (propagated-inputs (list python-deprecated python-typing-extensions))
5219 (native-inputs (list python-poetry-core))
5220 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5221 (synopsis "General purpose Python utility library")
5222 (description "This package provides a general purpose Python utility
5223library.")
5224 (license license:expat)))
5225
5226(define-public python-slicerator
5227 (package
5228 (name "python-slicerator")
5229 (version "1.1.0")
5230 (source
5231 (origin
5232 (method url-fetch)
5233 (uri (pypi-uri "slicerator" version))
5234 (sha256
5235 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5236 (build-system pyproject-build-system)
5237 (native-inputs
5238 (list python-numpy
5239 python-pytest
5240 python-setuptools))
5241 (home-page "https://github.com/soft-matter/slicerator")
5242 (synopsis "Lazy-loading, fancy-sliceable iterable")
5243 (description
5244 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5245of it like a generator that is \"reusable\" and has a length.")
5246 (license license:bsd-3)))
5247
5248(define-public python-pytelegrambotapi
5249 (package
5250 (name "python-pytelegrambotapi")
5251 (version "4.22.0")
5252 (source
5253 (origin
5254 (method git-fetch)
5255 (uri (git-reference
5256 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5257 (commit version)))
5258 (file-name (git-file-name name version))
5259 (sha256
5260 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5261 (build-system pyproject-build-system)
5262 (arguments
5263 (list
5264 #:phases
5265 #~(modify-phases %standard-phases
5266 (replace 'check
5267 (lambda* (#:key tests? #:allow-other-keys)
5268 (when tests?
5269 (with-directory-excursion "tests"
5270 (invoke "py.test"))))))))
5271 (propagated-inputs
5272 (list python-requests))
5273 (native-inputs
5274 (list python-hatchling python-pytest))
5275 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5276 (synopsis "Python Telegram bot api")
5277 (description "This package provides a simple, but extensible Python
5278implementation for the Telegram Bot API.")
5279 (license license:gpl2)))
5280
5281(define-public python-pytoolconfig
5282 (package
5283 (name "python-pytoolconfig")
5284 (version "1.3.1")
5285 (source
5286 (origin
5287 (method url-fetch)
5288 (uri (pypi-uri "pytoolconfig" version))
5289 (sha256
5290 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5291 (build-system pyproject-build-system)
5292 (arguments
5293 (list
5294 #:test-flags
5295 ;; Requires Sphinx.
5296 #~(list "--ignore=tests/test_documentation.py")))
5297 (native-inputs
5298 (list python-pdm-backend
5299 python-pytest))
5300 (propagated-inputs
5301 (list python-tomli
5302 python-packaging
5303 python-platformdirs))
5304 (home-page "https://pypi.org/project/pytoolconfig/")
5305 (synopsis "Python tool configuration")
5306 (description "The goal of this project is to manage configuration for
5307Python tools, such as rope and add support for a @file{pyproject.toml}
5308configuration file.")
5309 (license license:lgpl3+)))
5310
5311(define-public python-pytooling
5312 (package
5313 (name "python-pytooling")
5314 (version "8.15.0")
5315 (source
5316 (origin
5317 (method git-fetch)
5318 (uri (git-reference
5319 (url "https://github.com/pyTooling/pyTooling/")
5320 (commit (string-append "v" version))))
5321 (file-name (git-file-name name version))
5322 (sha256
5323 (base32 "07h2hj00vs6svjn6qgjf7k914l0ng0zz7d9h9agjfzya33qn06yp"))))
5324 (build-system pyproject-build-system)
5325 (arguments
5326 (list
5327 ;; Tests do not support linux-i686 system: Exception: Unknown
5328 ;; architecture 'linux-i686' for a native Linux.
5329 #:tests? (not (or (%current-target-system)
5330 (target-x86-32?)))
5331 #:test-flags
5332 #~(list
5333 "tests/unit"
5334 ;; These tests try to access the network.
5335 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5336 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5337 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5338 #:phases
5339 #~(modify-phases %standard-phases
5340 (add-after 'unpack 'patch-git-bin-for-tests
5341 (lambda* (#:key inputs #:allow-other-keys)
5342 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5343 "tests/unit/CLIAbstraction/Program.py")
5344 (("/usr/bin")
5345 (dirname (search-input-file inputs "/bin/git")))))))))
5346 (native-inputs
5347 (list git-minimal/pinned
5348 python-aiohttp
5349 python-colorama
5350 python-pytest
5351 python-requests
5352 python-ruamel.yaml
5353 python-setuptools))
5354 (home-page "https://pytooling.github.io/pyTooling/")
5355 (synopsis "Miscellaneous Python tools")
5356 (description
5357 "pyTooling is a collection of (abstract) data models, lacking classes,
5358decorators, a new performance boosting meta-class, and enhanced exceptions.
5359It also provides lots of helper functions---e.g., to ease the handling of
5360package descriptions or to unify multiple existing APIs into a single API.")
5361 (license license:asl2.0)))
5362
5363(define-public python-colorlog
5364 (package
5365 (name "python-colorlog")
5366 (version "6.9.0")
5367 (source
5368 (origin
5369 (method url-fetch)
5370 (uri (pypi-uri "colorlog" version))
5371 (sha256
5372 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5373 (build-system pyproject-build-system)
5374 (native-inputs
5375 (list python-pytest
5376 python-setuptools))
5377 (home-page "https://github.com/borntyping/python-colorlog")
5378 (synopsis "Log formatting with colors for python")
5379 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5380with Python's logging module that outputs records using terminal colors.")
5381 (license license:expat)))
5382
5383(define-public python-pyprind
5384 (package
5385 (name "python-pyprind")
5386 (version "2.11.3")
5387 (source
5388 (origin
5389 (method url-fetch)
5390 (uri (pypi-uri "PyPrind" version))
5391 (sha256
5392 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5393 (build-system pyproject-build-system)
5394 (native-inputs (list python-pytest python-setuptools))
5395 (propagated-inputs (list python-psutil))
5396 (home-page "https://github.com/rasbt/pyprind")
5397 (synopsis "Python Progress Bar and Percent Indicator Utility")
5398 (description
5399 "The PyPrind (Python Progress Indicator) module provides a progress bar
5400and a percentage indicator object that let you track the progress of a loop
5401structure or other iterative computation.")
5402 (license license:bsd-3)))
5403
5404(define-public python-gh-md-to-html
5405 (package
5406 (name "python-gh-md-to-html")
5407 (version "1.21.2")
5408 (source
5409 (origin
5410 (method url-fetch)
5411 (uri (pypi-uri "gh_md_to_html" version))
5412 (sha256
5413 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5414 (build-system pyproject-build-system)
5415 (arguments
5416 (list
5417 #:tests? #false ;there are none
5418 #:phases
5419 #~(modify-phases %standard-phases
5420 (add-after 'unpack 'relax-shellescape-requirement
5421 (lambda _
5422 (substitute* "src/__init__.py"
5423 (("import shellescape")
5424 "import shlex")
5425 (("shellescape\\.quote")
5426 "shlex.quote"))
5427 (substitute* "setup.py"
5428 (("\"shellescape\",")
5429 "")))))))
5430 (propagated-inputs
5431 (list python-beautifulsoup4
5432 python-emoji-for-gh-md-to-html
5433 python-pillow
5434 python-requests
5435 python-webcolors))
5436 (native-inputs (list python-setuptools))
5437 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5438 (synopsis "Github-flavored Markdown")
5439 (description
5440 "This package provides a feature-rich Github-flavored Markdown to HTML
5441Python library and command line interface.")
5442 (license license:expat)))
5443
5444(define-public python-gfloat
5445 (package
5446 (name "python-gfloat")
5447 (version "0.5.2")
5448 (source
5449 (origin
5450 (method url-fetch)
5451 (uri (pypi-uri "gfloat" version))
5452 (sha256
5453 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5454 (build-system pyproject-build-system)
5455 (arguments
5456 (list
5457 #:test-flags
5458 #~(list
5459 "--ignore=test/test_array_api.py" ;requires array_api_strict
5460 "--ignore=test/test_jax.py" ;requires python-jax
5461 "--ignore=test/test_microxcaling.py" ;requires torchao
5462 ;; Jupyter.
5463 "--ignore-glob=docs/source/*.ipynb")))
5464 (propagated-inputs
5465 (list python-array-api-compat python-more-itertools python-numpy))
5466 (native-inputs (list python-nbval
5467 python-ml-dtypes
5468 python-pytest
5469 python-pytorch
5470 python-setuptools
5471 openssl))
5472 (home-page "https://github.com/graphcore-research/gfloat")
5473 (synopsis "Generic floating point handling in Python")
5474 (description
5475 "This package provides an implementation of generic floating point encode
5476and decode logic in Python. It handles various current and proposed floating
5477point types:
5478
5479@itemize
5480@item IEEE 754: Binary16, Binary32
5481@item OCP Float8: E5M2, E4M3
5482@item IEEE WG P3109
5483@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5484@end itemize")
5485 (license license:expat)))
5486
5487(define-public python-glymur
5488 (package
5489 (name "python-glymur")
5490 (version "0.14.8")
5491 (source
5492 (origin
5493 (method git-fetch)
5494 (uri (git-reference
5495 (url "https://github.com/quintusdias/glymur")
5496 (commit (string-append "v" version))))
5497 (file-name (git-file-name name version))
5498 (sha256
5499 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5500 (build-system pyproject-build-system)
5501 (arguments
5502 (list
5503 #:test-flags
5504 #~(list "--numprocesses" (number->string (parallel-job-count))
5505 ;; Failing test due to inability of ctypes.util.find_library()
5506 ;; to determine library path, which is patched above.
5507 "--ignore=tests/test_config.py")
5508 #:phases
5509 #~(modify-phases %standard-phases
5510 (add-after 'unpack 'patch-library-locations
5511 (lambda* (#:key inputs #:allow-other-keys)
5512 ;; XXX: It's a workaround for Python inability to find the
5513 ;; .so libraries with ctypes.util.find_library()
5514 (substitute* '("glymur/config.py")
5515 (("path = find_library\\(libname\\)")
5516 (string-append
5517 "if libname == \"openjp2\":\n"
5518 " path = \""
5519 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5520 " elif libname == \"tiff\":\n"
5521 " path = \""
5522 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5523 " elif libname == \"c\":\n"
5524 " path = \""
5525 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5526 (native-inputs
5527 (list python-pytest
5528 python-pytest-xdist
5529 python-scikit-image
5530 python-setuptools))
5531 (inputs
5532 (list openjpeg ; glymur/lib/openjp2.py
5533 libtiff)) ; glymur/lib/tiff.py
5534 (propagated-inputs
5535 (list python-lxml
5536 python-numpy
5537 python-pillow ))
5538 (home-page "https://github.com/quintusdias/glymur")
5539 (synopsis "Python interface to OpenJPEG and LibTIFF")
5540 (description
5541 "This package provides Python interface to the OpenJPEG library which
5542allows one to read and write JPEG 2000 files")
5543 (license license:expat)))
5544
5545(define-public python-gphoto2
5546 (package
5547 (name "python-gphoto2")
5548 (version "2.6.1")
5549 (source
5550 (origin
5551 (method git-fetch) ; no tests in PyPI
5552 (uri (git-reference
5553 (url "https://github.com/jim-easterbrook/python-gphoto2")
5554 (commit (string-append "v" version))))
5555 (file-name (git-file-name name version))
5556 (sha256
5557 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5558 (build-system pyproject-build-system)
5559 (native-inputs
5560 (list pkg-config python-pytest python-setuptools python-wheel))
5561 (inputs
5562 (list libgphoto2))
5563 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5564 (synopsis "Python interface to libgphoto2")
5565 (description "@code{python-gphoto2} is a comprehensive Python interface
5566(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5567automatically generate the interface code.")
5568 (license license:lgpl3+)))
5569
5570(define-public python-colour
5571 (package
5572 (name "python-colour")
5573 (version "0.1.5")
5574 (source
5575 (origin
5576 (method git-fetch)
5577 (uri (git-reference
5578 (url "https://github.com/vaab/colour")
5579 (commit version)))
5580 (file-name (git-file-name name version))
5581 (sha256
5582 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5583 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5584 (build-system pyproject-build-system)
5585 (arguments
5586 (list
5587 #:tests? #f ; No tests.
5588 #:phases
5589 #~(modify-phases %standard-phases
5590 (add-after 'unpack 'set-version
5591 (lambda _
5592 (substitute* "autogen.sh"
5593 (("if ! \"\\$git\".*")
5594 "if false ; then\n")
5595 (("depends git grep")
5596 "depends grep")
5597 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5598 (format #f "version=~s" #$version))))))))
5599 (native-inputs (list python-setuptools))
5600 (home-page "https://github.com/vaab/colour")
5601 (synopsis "Convert and manipulate various color representations")
5602 (description
5603 "This package provides a pythonic way to manipulate color representations
5604(HSL, RVB,web, X11, ...).")
5605 (license license:expat)))
5606
5607(define-public python-rapidfuzz
5608 (package
5609 (name "python-rapidfuzz")
5610 (version "3.14.3")
5611 (source
5612 (origin
5613 (method git-fetch)
5614 (uri (git-reference
5615 (url "https://github.com/rapidfuzz/RapidFuzz")
5616 (commit (string-append "v" version))))
5617 (file-name (git-file-name name version))
5618 (sha256
5619 (base32 "1vnm1yx12am0ffbh0fj4nd8l1h0m299hdsw6kcp0pmgnl1jxxr8c"))))
5620 (build-system pyproject-build-system)
5621 (native-inputs
5622 (list cmake-minimal
5623 python-cython
5624 python-numpy
5625 python-pandas
5626 python-pytest
5627 python-scikit-build-core
5628 rapidfuzz-cpp
5629 taskflow))
5630 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5631 (synopsis "Rapid fuzzy string matching")
5632 (description
5633 "RapidFuzz is a fast string matching library for Python and
5634C++, which is using the string similarity calculations from FuzzyWuzzy.")
5635 (license license:expat)))
5636
5637(define-public python-easygui
5638 (package
5639 (name "python-easygui")
5640 (version "0.98.1")
5641 (source
5642 (origin
5643 (method git-fetch)
5644 (uri (git-reference
5645 (url "https://github.com/robertlugg/easygui")
5646 (commit version)))
5647 (file-name (git-file-name name version))
5648 (sha256
5649 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5650 (build-system pyproject-build-system)
5651 (arguments
5652 ;; XXX: There seem to be no tests upstream, although the package itself
5653 ;; seems to provide a lot of demo elements.
5654 (list #:tests? #f))
5655 (native-inputs (list python-pytest python-setuptools))
5656 (propagated-inputs (list `(,python "tk")))
5657 (home-page "https://github.com/robertlugg/easygui")
5658 (synopsis "GUI programming module for Python")
5659 (description
5660 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5661different from other GUI generators in that EasyGUI is NOT event-driven.
5662Instead, all GUI interactions are invoked by simple function calls.")
5663 (license license:bsd-3)))
5664
5665(define-public python-echo
5666 (package
5667 (name "python-echo")
5668 (version "0.12.1")
5669 (source
5670 (origin
5671 (method url-fetch)
5672 (uri (pypi-uri "echo" version))
5673 (sha256
5674 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5675 (build-system pyproject-build-system)
5676 (arguments
5677 (list
5678 #:phases
5679 #~(modify-phases %standard-phases
5680 (add-before 'check 'start-xorg-server
5681 (lambda _
5682 ;; The test suite requires a running X server.
5683 (system "Xvfb :99 -screen 0 1024x768x24 &")
5684 (setenv "DISPLAY" ":99.0"))))))
5685 (propagated-inputs
5686 (list python-numpy
5687 python-qtpy
5688 python-pyqt-6))
5689 (native-inputs
5690 (list python-pytest
5691 python-setuptools
5692 python-setuptools-scm
5693 xorg-server-for-tests))
5694 (home-page "https://github.com/glue-viz/echo")
5695 (synopsis "Callback Properties in Python")
5696 (description
5697 "Echo is a small library for attaching callback functions to property
5698state changes.")
5699 (license license:expat)))
5700
5701(define-public python-pymd4c
5702 (package
5703 (name "python-pymd4c")
5704 (version "1.3.0")
5705 (source
5706 (origin
5707 (method git-fetch)
5708 (uri (git-reference
5709 (url "https://github.com/dominickpastore/pymd4c")
5710 (commit (string-append "v" version))))
5711 (file-name (git-file-name name version))
5712 (sha256
5713 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5714 (build-system pyproject-build-system)
5715 (arguments (list #:test-flags #~(list "test")))
5716 (inputs (list md4c))
5717 (native-inputs
5718 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5719 (home-page "https://github.com/dominickpastore/pymd4c")
5720 (synopsis "Python bindings for MD4C")
5721 (description
5722 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5723to CommonMark.")
5724 (license license:expat)))
5725
5726(define-public python-pymediainfo
5727 (package
5728 (name "python-pymediainfo")
5729 (version "4.1")
5730 (source
5731 (origin
5732 (method url-fetch)
5733 (uri (pypi-uri "pymediainfo" version))
5734 (sha256
5735 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5736 (build-system pyproject-build-system)
5737 (arguments
5738 (list
5739 ;; The only failing test requires internet access.
5740 #:test-flags
5741 #~(list "-k" "not test_parse_url")
5742 #:phases
5743 #~(modify-phases %standard-phases
5744 (add-after 'unpack 'patch-libmediainfo
5745 (lambda* (#:key inputs #:allow-other-keys)
5746 (substitute* "pymediainfo/__init__.py"
5747 (("libmediainfo.so.0")
5748 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5749 (native-inputs (list python-pytest python-setuptools))
5750 (inputs (list libmediainfo))
5751 (home-page "https://github.com/sbraz/pymediainfo")
5752 (synopsis "Python wrapper for the mediainfo library")
5753 (description
5754 "This package provides a Python wrapper for the mediainfo library to
5755access the technical and tag data for video and audio files.")
5756 (license license:expat)))
5757
5758(define-public python-psutil
5759 (package
5760 (name "python-psutil")
5761 (version "7.2.2")
5762 (source
5763 (origin
5764 (method git-fetch)
5765 (uri (git-reference
5766 (url "https://github.com/giampaolo/psutil")
5767 (commit (string-append "release-" version))))
5768 (file-name (git-file-name name version))
5769 (sha256
5770 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
5771 (build-system pyproject-build-system)
5772 (arguments
5773 (list
5774 ;; tests: X86_64-linux 414 passed, 278 skipped
5775 ;; i686-linux 410 passed, 278 skipped
5776 #:test-flags
5777 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
5778 "--dist" "loadgroup"
5779 #$@(map (lambda (ls) (string-append "--deselect=tests/"
5780 (string-join ls "::")))
5781 ;; assert None is not None
5782 '(("test_linux.py" "TestRootFsDeviceFinder"
5783 "test_comparisons")
5784 ;; FileNotFoundError: [Errno 2] No such file or
5785 ;; directory: '/sys/class/net/lo/mtu'
5786 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
5787 ;; AssertionError: assert '/dev/root' != '/dev/root'
5788 ("test_linux.py" "TestRootFsDeviceFinder"
5789 "test_disk_partitions_mocked")
5790 ;; psutil.AccessDenied: (pid=426)
5791 ("test_process.py" "TestProcess" "test_weird_environ")
5792 ;; assert []
5793 ("test_system.py" "TestMiscAPIs" "test_users")
5794 ;; ModuleNotFoundError: No module named '_common'
5795 ("test_scripts.py" "TestSetupScript"
5796 "test_invocation")
5797 ;; AssertionError: assert ''
5798 ("test_scripts.py" "TestExampleScripts" "test_who")
5799 ;; AssertionError: no disks on this system? assert
5800 ;; None is not None
5801 ("test_system.py" "TestDiskAPIs"
5802 "test_disk_io_counters")
5803 ;; psutil.NoSuchProcess: process no longer exists
5804 ;; (pid=247))
5805 ("test_process_all.py" "TestFetchAllProcesses"
5806 "test_all")
5807 ;; ModuleNotFoundError: No module named 'pypinfo'
5808 ("test_scripts.py" "TestInternalScripts"
5809 "test_import_all")
5810 ;; FileNotFoundError: [Errno 2] No such file or
5811 ;; directory: '/sys/class/power_supply'
5812 ("test_misc.py" "TestMisc" "test_serialization")))
5813 #$@(if (target-32bit?)
5814 (map (lambda (ls) (string-append "--deselect=tests/"
5815 (string-join ls "::")))
5816 ;; assert 12884901915 < 500 where 12884901915 =
5817 ;; abs((2596570605 - 15481472520))
5818 '(("test_linux.py" "TestSystemCPUStats"
5819 "test_interrupts")
5820 ;; OSError: [Errno 22] Invalid argument
5821 ("test_process.py" "TestProcess"
5822 "test_zombie_process")))
5823 '()))
5824 #:phases
5825 #~(modify-phases %standard-phases
5826 (add-before 'check 'pre-check
5827 (lambda _
5828 (delete-file-recursively "psutil")
5829 (substitute* "tests/test_linux.py"
5830 (("\"(free|vmstat)\"" _ cmd)
5831 (format #f "~s" (which cmd))))
5832 (setenv "PYTHONWARNINGS" "always")
5833 (setenv "PYTHONUNBUFFERED" "1")
5834 (setenv "PSUTIL_DEBUG" "1")
5835 (setenv "PSUTIL_TESTING" "1"))))))
5836 (native-inputs
5837 (list procps
5838 python-packaging
5839 python-psleak
5840 python-pyperf
5841 python-pytest
5842 python-pytest-instafail
5843 python-pytest-xdist
5844 python-setuptools))
5845 (home-page "https://github.com/giampaolo/psutil")
5846 (synopsis "Library for retrieving information on running processes")
5847 (description
5848 "@code{psutil} (Python system and process utilities) is a library for
5849retrieving information on running processes and system utilization (CPU,
5850memory, disks, network) in Python. It is useful mainly for system monitoring,
5851profiling and limiting process resources and management of running processes.
5852It implements many functionalities offered by command line tools such as: ps,
5853top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
5854iotop, uptime, pidof, tty, taskset, pmap.")
5855 (license license:bsd-3)))
5856
5857(define-public python-psutil-bootstrap
5858 (hidden-package
5859 (package/inherit python-psutil
5860 (name "python-psutil-bootstrap")
5861 (arguments
5862 (list #:tests? #f))
5863 (propagated-inputs '())
5864 (native-inputs
5865 (list python-setuptools)))))
5866
5867(define-public python-scapy
5868 (package
5869 (name "python-scapy")
5870 (version "2.6.1")
5871 (source (origin
5872 (method url-fetch)
5873 (uri (pypi-uri "scapy" version))
5874 (sha256
5875 (base32
5876 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
5877 (arguments
5878 '(#:tests? #f)) ; There is a test directory, but apparently no
5879 ; automatic testing framework.
5880 ;; The package has more optional dependencies such as ipython and
5881 ;; matplotlib. If functionality is missing, these should be added.
5882 ;; See
5883 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
5884 (build-system pyproject-build-system)
5885 (native-inputs (list python-setuptools python-wheel))
5886 (home-page "https://scapy.net")
5887 (synopsis "Python network packet crafting library")
5888 (description
5889 "Scapy is a Python library and executable for interactively
5890manipulating network packets. It can forge or decode packets of a number
5891of protocols, send them on the wire, capture them, store or read them
5892using pcap files, match requests and replies, and so on.
5893It can handle tasks such as scanning, tracerouting, probing, unit tests,
5894attacks or network discovery.")
5895 (license license:gpl2)))
5896
5897(define-public python-icmplib
5898 (package
5899 (name "python-icmplib")
5900 (version "3.0.4")
5901 (source
5902 (origin
5903 (method git-fetch)
5904 (uri (git-reference
5905 (url "https://github.com/ValentinBELYN/icmplib")
5906 (commit (string-append "v" version))))
5907 (file-name (git-file-name name version))
5908 (sha256
5909 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
5910 (build-system pyproject-build-system)
5911 (arguments (list #:tests? #f)) ; No tests.
5912 (native-inputs (list python-setuptools))
5913 (home-page "https://github.com/ValentinBELYN/icmplib")
5914 (synopsis
5915 "Python implementation of the Internet Control Message Protocol (ICMP)")
5916 (description
5917 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
5918ICMP is typically used for diagnostic or control purposes - well known from
5919utilities such as ping(1).")
5920 (license license:lgpl3)))
5921
5922(define-public python-iron-core
5923 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
5924 (revision "0"))
5925 (package
5926 (name "python-iron-core")
5927 (version (git-version "1.2.1" revision commit))
5928 (source
5929 (origin
5930 (method git-fetch)
5931 (uri (git-reference
5932 (url "https://www.github.com/iron-io/iron_core_python")
5933 (commit commit)))
5934 (file-name (git-file-name name version))
5935 (sha256
5936 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
5937 (build-system pyproject-build-system)
5938 (arguments
5939 (list
5940 ;; XXX: Tests are run, but they seem too old/not updated.
5941 #:tests? #f
5942 #:test-backend #~'unittest))
5943 (propagated-inputs (list python-dateutil python-requests))
5944 (native-inputs (list python-setuptools))
5945 (home-page "https://www.github.com/iron-io/iron_core_python")
5946 (synopsis "Universal classes and methods for Iron.io API wrappers")
5947 (description
5948 "This package provides universal classes and methods for the Iron.io
5949API wrappers to build on.")
5950 (license license:bsd-2))))
5951
5952(define-public python-iron-mq
5953 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
5954 (revision "0"))
5955 (package
5956 (name "python-iron-mq")
5957 (version (git-version "0.9" revision commit))
5958 (source
5959 (origin
5960 (method git-fetch)
5961 (uri (git-reference
5962 (url "https://github.com/iron-io/iron_mq_python")
5963 (commit commit)))
5964 (file-name (git-file-name name version))
5965 (sha256
5966 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
5967 (build-system pyproject-build-system)
5968 (arguments
5969 (list
5970 ;; XXX: Tests are broken and require network access.
5971 #:tests? #f
5972 #:test-backend #~'unittest))
5973 (propagated-inputs (list python-iron-core))
5974 (native-inputs (list python-setuptools))
5975 (home-page "https://github.com/iron-io/iron_mq_python")
5976 (synopsis "Client library for IronMQ, a message queue in the cloud")
5977 (description
5978 "This package provides Python language bindings for IronMQ. IronMQ is an
5979elastic message queue for managing data and event flow within cloud
5980applications and between systems.")
5981 (license license:bsd-2))))
5982
5983(define-public python-rasterio
5984 (package
5985 (name "python-rasterio")
5986 (version "1.3.7")
5987 (source (origin
5988 (method url-fetch)
5989 (uri (pypi-uri "rasterio" version))
5990 (sha256
5991 (base32
5992 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
5993 (properties
5994 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
5995 (build-system pyproject-build-system)
5996 (arguments
5997 (list
5998 #:tests? #false ;test data not present
5999 #:phases
6000 '(modify-phases %standard-phases
6001 (add-before 'check 'build-extensions
6002 (lambda _
6003 ;; Cython extensions have to be built before running the tests.
6004 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6005 (propagated-inputs (list python-affine
6006 python-attrs
6007 python-certifi
6008 python-click
6009 python-click-plugins
6010 python-cligj
6011 python-numpy
6012 python-setuptools ; For pkg_resources.
6013 python-snuggs))
6014 (native-inputs (list gdal
6015 python-boto3
6016 python-cython
6017 python-hypothesis
6018 python-packaging
6019 python-pytest
6020 python-shapely
6021 python-wheel))
6022 (home-page "https://github.com/rasterio/rasterio")
6023 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6024 (description "This package implements fast and direct raster I/O for use
6025with Numpy and SciPy.")
6026 (license license:bsd-3)))
6027
6028(define-public python-rich-tables
6029 (package
6030 (name "python-rich-tables")
6031 (version "0.8.0")
6032 (source
6033 (origin
6034 (method git-fetch) ; no tests data in PyPi package
6035 (uri (git-reference
6036 (url "https://github.com/snejus/rich-tables")
6037 (commit version)))
6038 (file-name (git-file-name name version))
6039 (sha256
6040 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6041 (build-system pyproject-build-system)
6042 (arguments
6043 (list
6044 #:test-flags
6045 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6046 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6047 (native-inputs
6048 (list python-freezegun
6049 python-poetry-core
6050 python-pytest))
6051 (propagated-inputs
6052 (list python-funcy
6053 python-humanize
6054 python-multimethod
6055 python-platformdirs
6056 python-rgbxy
6057 python-rich
6058 python-sqlparse))
6059 (home-page "https://github.com/snejus/rich-tables")
6060 (synopsis "Ready-made rich tables for various purposes")
6061 (description
6062 "This package implements rich tables for various purposes, it's JSON
6063human-prettifier based on the @code{rich} Python library.")
6064 (license license:expat)))
6065
6066(define-public python-rich-toolkit
6067 (package
6068 (name "python-rich-toolkit")
6069 (version "0.12.0")
6070 (source
6071 (origin
6072 (method url-fetch)
6073 (uri (pypi-uri "rich_toolkit" version))
6074 (sha256
6075 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6076 (build-system pyproject-build-system)
6077 (propagated-inputs (list python-click python-rich python-typing-extensions))
6078 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6079 (home-page "https://pypi.org/project/rich-toolkit/")
6080 (synopsis "Rich toolkit for building command-line applications")
6081 (description "This package provides the Rich toolkit for building
6082command-line applications.")
6083 (license license:expat)))
6084
6085(define-public python-shapely
6086 (package
6087 (name "python-shapely")
6088 (version "2.1.1")
6089 (source
6090 (origin
6091 (method url-fetch)
6092 (uri (pypi-uri "shapely" version))
6093 (sha256
6094 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6095 (build-system pyproject-build-system)
6096 (arguments
6097 (list
6098 #:phases
6099 '(modify-phases %standard-phases
6100 (add-before 'check 'build-extensions
6101 (lambda _
6102 ;; Cython extensions have to be built before running the tests.
6103 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6104 (native-inputs
6105 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6106 (inputs
6107 (list geos))
6108 (propagated-inputs
6109 (list python-numpy))
6110 (home-page "https://github.com/shapely/shapely")
6111 (synopsis "Library for the manipulation and analysis of geometric objects")
6112 (description "Shapely is a Python package for manipulation and analysis of
6113planar geometric objects. It is based on the @code{GEOS} library.")
6114 (license license:bsd-3)))
6115
6116(define-public python-shortuuid
6117 (package
6118 (name "python-shortuuid")
6119 (version "1.0.13")
6120 (source
6121 (origin
6122 (method url-fetch)
6123 (uri (pypi-uri "shortuuid" version))
6124 (sha256
6125 (base32
6126 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6127 (build-system pyproject-build-system)
6128 (native-inputs
6129 (list python-poetry-core python-pytest))
6130 (home-page "https://github.com/skorokithakis/shortuuid")
6131 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6132 (description
6133 "@code{shortuuid} is a Python library for generating concise, unambiguous
6134and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6135module and then similar looking characters are removed.")
6136 (license license:bsd-3)))
6137
6138(define-public python-logwrap
6139 (package
6140 (name "python-logwrap")
6141 (version "11.1.1")
6142 (source
6143 (origin
6144 (method git-fetch) ; no tests in PyPI release
6145 (uri (git-reference
6146 (url "https://github.com/python-useful-helpers/logwrap")
6147 (commit version)))
6148 (file-name (git-file-name name version))
6149 (sha256
6150 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6151 (build-system pyproject-build-system)
6152 (native-inputs (list python-pytest
6153 python-setuptools
6154 python-setuptools-scm
6155 python-wheel))
6156 (home-page "https://github.com/python-useful-helpers/logwrap")
6157 (synopsis "Decorator for logging function arguments")
6158 (description "This package provides a decorator to log function arguments
6159and function call return values in a human-readable way.")
6160 (license license:asl2.0)))
6161
6162(define-public python-babel
6163 (package
6164 (name "python-babel")
6165 (version "2.16.0")
6166 (source
6167 (origin
6168 (method url-fetch)
6169 (uri (pypi-uri "babel" version))
6170 (sha256
6171 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6172 (build-system pyproject-build-system)
6173 (native-inputs
6174 (list python-freezegun
6175 python-pytest
6176 python-setuptools
6177 tzdata-for-tests))
6178 (propagated-inputs
6179 (list python-pytz))
6180 (home-page "https://babel.pocoo.org/")
6181 (synopsis
6182 "Tools for internationalizing Python applications")
6183 (description
6184 "Babel is composed of two major parts:
6185- tools to build and work with gettext message catalogs
6186- a Python interface to the CLDR (Common Locale Data Repository), providing
6187access to various locale display names, localized number and date formatting,
6188etc.")
6189 (license license:bsd-3)))
6190
6191(define-public python-bidict
6192 (package
6193 (name "python-bidict")
6194 (version "0.23.1")
6195 (source
6196 (origin
6197 (method git-fetch) ; no tests in PyPI.
6198 (uri (git-reference
6199 (url "https://github.com/jab/bidict")
6200 (commit (string-append "v" version))))
6201 (file-name (git-file-name name version))
6202 (sha256
6203 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6204 (build-system pyproject-build-system)
6205 (native-inputs
6206 (list python-pytest
6207 python-pytest-benchmark
6208 python-pytest-xdist
6209 python-setuptools
6210 python-sortedcollections
6211 python-wheel))
6212 (home-page "https://bidict.readthedocs.io")
6213 (synopsis "Bidirectional mapping library")
6214 (description "The @code{bidict} library provides several data structures
6215for working with bidirectional mappings in Python.")
6216 (license license:mpl2.0)))
6217
6218(define-public python-bip39
6219 (package
6220 (name "python-bip39")
6221 (version "0.0.2")
6222 (source
6223 (origin
6224 (method url-fetch)
6225 (uri (pypi-uri "bip39" version))
6226 (sha256
6227 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6228 (build-system pyproject-build-system)
6229 (native-inputs (list python-pytest python-setuptools))
6230 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6231 (synopsis "Self-contained and simple BIP39 implementation in Python")
6232 (description
6233 "This package provides a self-contained and simple BIP39
6234implementation written in Python. It includes a @code{bip39.py} executable.
6235
6236BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6237and a list of words that are easier to remember for humans (the
6238@emph{mnemonic}).")
6239 (license license:expat)))
6240
6241(define-public python-bitarray
6242 (package
6243 (name "python-bitarray")
6244 (version "3.4.3")
6245 (source (origin
6246 (method url-fetch)
6247 (uri (pypi-uri "bitarray" version))
6248 (sha256
6249 (base32
6250 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6251 (build-system pyproject-build-system)
6252 (arguments
6253 (list #:phases
6254 #~(modify-phases %standard-phases
6255 (replace 'check
6256 (lambda* (#:key tests? #:allow-other-keys)
6257 (when tests?
6258 ;; Step out of the source directory to avoid interference.
6259 (with-directory-excursion "/tmp"
6260 (invoke "python" "-c"
6261 "import bitarray; bitarray.test()"))))))))
6262 (native-inputs (list python-setuptools python-wheel))
6263 (home-page "https://github.com/ilanschnell/bitarray")
6264 (synopsis "Efficient arrays of booleans")
6265 (description "This package provides an object type which efficiently
6266represents an array of booleans. Bitarrays are sequence types and behave very
6267much like usual lists. Eight bits are represented by one byte in a contiguous
6268block of memory. The user can select between two representations:
6269little-endian and big-endian. All of the functionality is implemented in C.
6270Methods for accessing the machine representation are provided. This can be
6271useful when bit level access to binary files is required, such as portable
6272bitmap image files. Also, when dealing with compressed data which uses
6273variable bit length encoding, you may find this module useful.")
6274 (license license:psfl)))
6275
6276(define-public python-bitarray-2
6277 (package
6278 (inherit python-bitarray)
6279 (version "2.8.1")
6280 (source (origin
6281 (method url-fetch)
6282 (uri (pypi-uri "bitarray" version))
6283 (sha256
6284 (base32
6285 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6286
6287(define-public python-boolean.py
6288 (package
6289 (name "python-boolean.py")
6290 (version "5.0")
6291 (source
6292 (origin
6293 (method url-fetch)
6294 (uri (pypi-uri "boolean_py" version))
6295 (sha256
6296 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6297 (build-system pyproject-build-system)
6298 (native-inputs (list python-pytest python-setuptools python-wheel))
6299 (home-page "https://github.com/bastikr/boolean.py")
6300 (synopsis "Boolean algebra in one Python module")
6301 (description
6302 "This is a small Python library that implements boolean algebra.
6303It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6304@code{Symbol} class that can take on one of these two values. Calculations
6305are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6306compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6307Expressions are constructed from parsed strings or directly in Python.")
6308 (license license:bsd-2)))
6309
6310(define-public python-h5netcdf
6311 (package
6312 (name "python-h5netcdf")
6313 (version "1.3.0")
6314 (source
6315 (origin
6316 (method url-fetch)
6317 (uri (pypi-uri "h5netcdf" version))
6318 (sha256
6319 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6320 (build-system pyproject-build-system)
6321 (native-inputs
6322 (list python-netcdf4
6323 python-pytest
6324 python-setuptools
6325 python-setuptools-scm
6326 python-wheel))
6327 (propagated-inputs
6328 (list python-h5py python-packaging))
6329 (home-page "https://h5netcdf.org")
6330 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6331 (description "This package provides a Python interface for the netCDF4
6332file-format that reads and writes local or remote HDF5 files directly via
6333@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6334https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6335library.")
6336 (license license:bsd-3)))
6337
6338(define-public python-h5py
6339 (package
6340 (name "python-h5py")
6341 (version "3.15.1")
6342 (source
6343 (origin
6344 (method url-fetch)
6345 (uri (pypi-uri "h5py" version))
6346 (sha256
6347 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
6348 (build-system pyproject-build-system)
6349 (arguments
6350 (list
6351 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
6352 #:test-flags
6353 ;; Tests requiring the build with MPI.
6354 #~(list "-k" (string-append "not test_mpio"
6355 " and not test_mpio_append"
6356 " and not test_mpi_atomic"
6357 " and not test_close_multiple_mpio_driver"))
6358 #:phases
6359 #~(modify-phases %standard-phases
6360 (add-after 'unpack 'fix-hdf5-paths
6361 (lambda _
6362 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
6363 (replace 'check
6364 (lambda* (#:key tests? test-flags #:allow-other-keys)
6365 (when tests?
6366 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6367 (with-directory-excursion #$output
6368 (apply invoke "pytest" "-vv" test-flags))))))))
6369 (native-inputs
6370 (list pkg-config
6371 python-cython
6372 python-pkgconfig
6373 python-pytest
6374 python-setuptools))
6375 (inputs
6376 (list hdf5))
6377 (propagated-inputs
6378 (list python-numpy))
6379 (home-page "https://www.h5py.org/")
6380 (synopsis "Read and write HDF5 files from Python")
6381 (description
6382 "The h5py package provides both a high- and low-level interface to the
6383HDF5 library from Python. The low-level interface is intended to be a
6384complete wrapping of the HDF5 API, while the high-level component supports
6385access to HDF5 files, datasets and groups using established Python and NumPy
6386concepts.")
6387 (license license:bsd-3)))
6388
6389(define-public python-hdf5storage
6390 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6391 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6392 ;;
6393 ;; This package probably is sun setting, consider to remove when stops
6394 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6395 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6396 (revision "0"))
6397 (package
6398 (name "python-hdf5storage")
6399 (version (git-version "0.1.19" revision commit))
6400 (source
6401 (origin
6402 (method git-fetch)
6403 (uri (git-reference
6404 (url "https://github.com/frejanordsiek/hdf5storage")
6405 (commit commit)))
6406 (file-name (git-file-name name version))
6407 (sha256
6408 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6409 (build-system pyproject-build-system)
6410 (arguments
6411 ;; Started failing with the move to [email protected], due to modules changes.
6412 (list
6413 #:test-flags
6414 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6415 (native-inputs
6416 (list python-pytest
6417 python-setuptools))
6418 (propagated-inputs
6419 (list python-h5py
6420 python-numpy-1))
6421 (home-page "https://github.com/frejanordsiek/hdf5storage")
6422 (synopsis "Read and write Python data types from and to HDF5 files")
6423 (description
6424 "This Python package provides high-level utilities to read and write a
6425variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6426formatted files. This package also provides support for MATLAB MAT v7.3
6427formatted files, which are HDF5 files with a different extension and some
6428extra metadata. Because HDF5 and MAT files might need to be read from
6429untrusted sources, pickling is avoided in this package.")
6430 (license license:bsd-2))))
6431
6432(define-public python-prctl
6433 (package
6434 (name "python-prctl")
6435 (version "1.8.1")
6436 (source (origin
6437 (method url-fetch)
6438 (uri (pypi-uri "python-prctl" version))
6439 (sha256
6440 (base32
6441 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6442 (build-system pyproject-build-system)
6443 (arguments
6444 (list #:test-backend ''custom
6445 #:test-flags ''("test_prctl.py")
6446 #:phases
6447 #~(modify-phases %standard-phases
6448 (add-after 'unpack 'patch-tests
6449 (lambda _
6450 (substitute* "test_prctl.py"
6451 ;; actual suffix used in cpython build output dir name
6452 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6453 ;; test_no_new_privs assumes existence of /bin/ping, but
6454 ;; can never run anyway due to it requiring setuid ping.
6455 ;; just short circuit it instead.
6456 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6457 (inputs (list libcap))
6458 (native-inputs (list python-setuptools))
6459 (supported-systems (filter target-linux? %supported-systems))
6460 (home-page "https://pythonhosted.org/python-prctl")
6461 (synopsis "Linux capabilities library")
6462 (description "This package provides a Python library for controlling Linux
6463capabilities and attributes, similar to the prctl syscall.")
6464 (license license:gpl3+)))
6465
6466(define-public python-pyhimitsu
6467 (package
6468 (name "python-pyhimitsu")
6469 (version "0.0.9")
6470 (source (origin
6471 (method url-fetch)
6472 (uri (pypi-uri "py_himitsu" version))
6473 (sha256
6474 (base32
6475 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6476 (build-system pyproject-build-system)
6477 (arguments
6478 (list
6479 #:phases
6480 #~(modify-phases %standard-phases
6481 (replace 'check
6482 (lambda _
6483 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6484 (invoke "make" "check"))))))
6485 (native-inputs (list python-hatchling))
6486 (propagated-inputs (list python-pyxdg))
6487 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6488 (synopsis "Himitsu client protocol implementation in Python")
6489 (description "This package provides a library for writing Himitsu client
6490programs in Python.")
6491 (license license:expat)))
6492
6493(define-public python-hjson
6494 ;; Using commit from master branch as the PyPI version does not contain
6495 ;; the hjson/tests/ directory.
6496 (let ((revision "0")
6497 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6498 (package
6499 (name "python-hjson")
6500 (version (git-version "3.1.0" revision commit))
6501 (source (origin
6502 (method git-fetch)
6503 (uri (git-reference
6504 (url "https://github.com/hjson/hjson-py")
6505 (commit commit)))
6506 (file-name (git-file-name name version))
6507 (sha256
6508 (base32
6509 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6510 (modules '((guix build utils)))
6511 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6512 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6513 (snippet #~(substitute* "hjson/__init__.py"
6514 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6515 "{'foo': 'a', 'bar': 1}")))))
6516 (build-system pyproject-build-system)
6517 (native-inputs (list python-setuptools python-wheel))
6518 (home-page "https://github.com/hjson/hjson-py")
6519 (synopsis "Python package to parse HJSON documents")
6520 (description "This package provides a Python library and a command-line
6521interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6522 (license license:expat))))
6523
6524(define-public python-hnswlib
6525 (package
6526 (name "python-hnswlib")
6527 (version "0.8.0")
6528 (source
6529 (origin
6530 (method git-fetch)
6531 (uri (git-reference
6532 (url "https://github.com/nmslib/hnswlib")
6533 (commit (string-append "v" version))))
6534 (file-name (git-file-name name version))
6535 (sha256
6536 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6537 (build-system pyproject-build-system)
6538 (arguments
6539 (list
6540 #:phases
6541 #~(modify-phases %standard-phases
6542 (add-after 'unpack 'disable-native-optimization
6543 (lambda _
6544 (substitute* "setup.py"
6545 ((", '-march=native'")
6546 "")))))))
6547 (native-inputs
6548 (list pybind11-2
6549 python-pytest
6550 python-setuptools))
6551 (propagated-inputs
6552 (list python-numpy))
6553 (home-page "https://github.com/nmslib/hnswlib")
6554 (synopsis "Fast approximate nearest neighbor search")
6555 (description "Hnswlib is a header-only C++ implementation of fast
6556approximate nearest neighbor search with Python bindings.")
6557 (license license:asl2.0)))
6558
6559(define-public python-pylatex
6560 (package
6561 (name "python-pylatex")
6562 (version "1.4.2")
6563 (source
6564 (origin
6565 (method git-fetch)
6566 (uri (git-reference
6567 (url "https://github.com/JelteF/PyLaTeX")
6568 (commit (string-append "v" version))))
6569 (file-name (git-file-name name version))
6570 (sha256
6571 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6572 (build-system pyproject-build-system)
6573 (arguments
6574 (list #:phases
6575 #~(modify-phases %standard-phases
6576 ;; some tests attempt to create directories
6577 (add-before 'check 'set-home-directory
6578 (lambda _
6579 (setenv "HOME" "/tmp"))))))
6580 (propagated-inputs (list python-ordered-set))
6581 (native-inputs (list python-matplotlib
6582 python-pytest
6583 python-quantities
6584 python-setuptools
6585 (texlive-local-tree
6586 (list texlive-lastpage
6587 texlive-latexmk
6588 texlive-parskip))))
6589 (home-page "https://github.com/JelteF/PyLaTeX")
6590 (synopsis "Library for creating LaTeX files and snippets")
6591 (description
6592 "This package provides a Python library for creating LaTeX files and
6593snippets.")
6594 (license license:expat)))
6595
6596(define-public python-pylatexenc
6597 (package
6598 (name "python-pylatexenc")
6599 (version "2.10")
6600 (source
6601 (origin
6602 (method url-fetch)
6603 (uri (pypi-uri "pylatexenc" version))
6604 (sha256
6605 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6606 (build-system pyproject-build-system)
6607 (native-inputs (list python-pytest python-setuptools python-wheel))
6608 (home-page "https://github.com/phfaist/pylatexenc")
6609 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6610 (description
6611 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6612Unicode-to-LaTeX conversion.")
6613 (license license:expat)))
6614
6615(define-public python-lsp-black
6616 (package
6617 (name "python-lsp-black")
6618 (version "2.0.0")
6619 (source
6620 (origin
6621 (method git-fetch)
6622 (uri (git-reference
6623 (url "https://github.com/python-lsp/python-lsp-black")
6624 (commit (string-append "v" version))))
6625 (file-name (git-file-name name version))
6626 (sha256
6627 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6628 (build-system pyproject-build-system)
6629 (arguments
6630 ;; The python version is too old for these tests to pass properly.
6631 (list #:test-flags
6632 `'("-k" ,(string-append
6633 "not test_pylsp_format_document_syntax_error"
6634 " and not test_pylsp_format_range_syntax_error"
6635 " and not test_load_config_defaults"
6636 " and not test_load_config_with_skip_options"))))
6637 (propagated-inputs
6638 (list python-black python-lsp-server python-tomli))
6639 (native-inputs
6640 (list python-pytest python-setuptools python-wheel))
6641 (home-page "https://github.com/python-lsp/python-lsp-black")
6642 (synopsis "Black plugin for the Python LSP Server")
6643 (description "This package provides a plugin with support for the
6644@code{python-black} formatter for the Python LSP Server.")
6645 (license license:expat)))
6646
6647(define-public python-pylsp-mypy
6648 (package
6649 (name "python-pylsp-mypy")
6650 (version "0.7.1")
6651 (source
6652 (origin
6653 ;; "The newest version on PyPI is indeed not published on GitHub."
6654 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6655 (method url-fetch)
6656 (uri (pypi-uri "pylsp_mypy" version))
6657 (sha256
6658 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6659 (build-system pyproject-build-system)
6660 (native-inputs (list python-pytest python-setuptools))
6661 (propagated-inputs (list python-mypy python-lsp-server))
6662 (home-page "https://github.com/python-lsp/pylsp-mypy")
6663 (synopsis "Mypy linter for the Python LSP Server")
6664 (description
6665 "Mypy linter integration for use with @code{python-lsp-server}.")
6666 (license license:expat)))
6667
6668(define-public python-sh
6669 (package
6670 (name "python-sh")
6671 (version "2.2.2")
6672 (source
6673 (origin
6674 (method url-fetch)
6675 (uri (pypi-uri "sh" version))
6676 (sha256
6677 (base32
6678 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6679 (build-system pyproject-build-system)
6680 (arguments
6681 (list
6682 #:test-flags
6683 #~(list "-k" (string-join
6684 ;; These tests are shaky.
6685 (list "not test_bad_sig_raise_exception"
6686 "test_doesnt_execute_directories"
6687 "test_environment"
6688 "test_ok_code_ignores_bad_sig_exception"
6689 "test_unicode_path")
6690 " and not ")
6691 "tests")
6692 #:phases
6693 #~(modify-phases %standard-phases
6694 (add-before 'check 'pre-check
6695 (lambda _
6696 (setenv "HOME" "/tmp"))))))
6697 (native-inputs
6698 (list python-poetry-core python-pytest))
6699 (home-page "https://github.com/amoffat/sh")
6700 (synopsis "Python subprocess replacement")
6701 (description "This package provides a replacement for Python's
6702@code{subprocess} feature.")
6703 (license license:expat)))
6704
6705;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6706;; that is updated.
6707(define-public python-sh-1
6708 (package
6709 (inherit python-sh)
6710 (version "1.14.2")
6711 (source
6712 (origin
6713 (method url-fetch)
6714 (uri (pypi-uri "sh" version))
6715 (sha256
6716 (base32
6717 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6718 (arguments
6719 '(#:phases
6720 (modify-phases %standard-phases
6721 (replace 'check
6722 (lambda _
6723 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6724 (setenv "HOME" "/tmp")
6725 (invoke "python" "sh.py" "test"))))))
6726 (native-inputs
6727 (list python-setuptools))))
6728
6729(define-public python-cftime
6730 (package
6731 (name "python-cftime")
6732 (version "1.6.5")
6733 (source
6734 (origin
6735 (method url-fetch)
6736 (uri (pypi-uri "cftime" version))
6737 (sha256
6738 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6739 (build-system pyproject-build-system)
6740 (propagated-inputs
6741 (list python-numpy))
6742 (native-inputs
6743 (list python-cython
6744 python-pytest
6745 python-setuptools
6746 python-wheel))
6747 (home-page "https://unidata.github.io/cftime/")
6748 (synopsis "Library for time handling")
6749 (description
6750 "This package provides time-handling functionality that used to be part
6751of the netcdf4 package before.")
6752 (license license:expat)))
6753
6754(define-public python-netcdf4
6755 (package
6756 (name "python-netcdf4")
6757 (version "1.7.2")
6758 (source
6759 (origin
6760 (method git-fetch)
6761 (uri (git-reference
6762 (url "https://github.com/Unidata/netcdf4-python")
6763 (commit (string-append "v" version "rel"))))
6764 (file-name (git-file-name name version))
6765 (sha256
6766 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
6767 (build-system pyproject-build-system)
6768 (arguments
6769 (list
6770 ;; tests: Ran 113 tests; skipped=7
6771 #:phases
6772 #~(modify-phases %standard-phases
6773 (add-before 'build 'set-configure-flags
6774 (lambda _
6775 (setenv "CFLAGS" (string-join
6776 (list "-g -O2"
6777 "-Wno-error=incompatible-pointer-types"
6778 "-Wno-error=implicit-function-declaration"
6779 "-Wno-error=int-conversion")
6780 " "))
6781 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
6782 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
6783 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
6784 (setenv "USE_NCCONFIG" "0")))
6785 (replace 'check
6786 (lambda* (#:key tests? #:allow-other-keys)
6787 (when tests?
6788 (with-directory-excursion "test"
6789 (setenv "NO_NET" "1")
6790 (setenv "NO_CDL" "1")
6791 (invoke "python" "run_all.py"))))))))
6792 (native-inputs
6793 (list python-cython
6794 python-packaging
6795 python-pytest
6796 python-setuptools
6797 python-setuptools-scm
6798 python-typing-extensions))
6799 (inputs
6800 (list netcdf
6801 hdf5
6802 zlib))
6803 (propagated-inputs
6804 (list python-certifi
6805 python-cftime
6806 python-numpy))
6807 (home-page "https://github.com/Unidata/netcdf4-python")
6808 (synopsis "Python/numpy interface to the netCDF library")
6809 (description "Netcdf4-python is a Python interface to the netCDF C
6810library. netCDF version 4 has many features not found in earlier
6811versions of the library and is implemented on top of HDF5. This module
6812can read and write files in both the new netCDF 4 and the old netCDF 3
6813format, and can create files that are readable by HDF5 clients. The
6814API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
6815to users of that module.")
6816 ;; The software is mainly ISC, but includes some files covered
6817 ;; by the Expat license.
6818 (license (list license:isc license:expat))))
6819
6820(define-public python-ncclient
6821 (package
6822 (name "python-ncclient")
6823 (version "0.6.19")
6824 (source
6825 (origin
6826 (method git-fetch) ;no tests in PyPI release
6827 (uri (git-reference
6828 (url "https://github.com/ncclient/ncclient")
6829 (commit (string-append "v" version))))
6830 (file-name (git-file-name name version))
6831 (sha256
6832 (base32
6833 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
6834 (build-system pyproject-build-system)
6835 (native-inputs
6836 (list python-pytest
6837 python-setuptools
6838 python-wheel))
6839 (propagated-inputs
6840 (list python-lxml
6841 python-paramiko))
6842 (home-page "https://github.com/ncclient/ncclient")
6843 (synopsis "Python library for NETCONF clients")
6844 (description "@code{ncclient} is a Python library that facilitates
6845client-side scripting and application development around the NETCONF
6846protocol.")
6847 (license license:asl2.0)))
6848
6849(define-public python-ncls
6850 (package
6851 (name "python-ncls")
6852 (version "0.0.68")
6853 (source (origin
6854 (method url-fetch)
6855 (uri (pypi-uri "ncls" version))
6856 (sha256
6857 (base32
6858 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
6859 (build-system pyproject-build-system)
6860 (arguments
6861 ;; Those tests fail with warnings (not errors) for the Numpy update.
6862 ;; Remove it at next python-team iteration.
6863 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
6864 "--ignore=examples/test_find_overlap_list.py")))
6865 (native-inputs (list python-cython
6866 python-pandas
6867 python-pytest
6868 python-setuptools
6869 python-wheel))
6870 (propagated-inputs (list python-numpy))
6871 (home-page "https://github.com/endrebak/ncls")
6872 (synopsis "Nested containment list data structure")
6873 (description
6874 "This package provides a wrapper for the nested containment list data
6875structure. It is a static interval-tree that is fast for both construction
6876and lookups.")
6877 (license license:bsd-3)))
6878
6879(define-public python-license-expression
6880 (package
6881 (name "python-license-expression")
6882 (version "30.1.0")
6883 (source
6884 (origin
6885 (method url-fetch)
6886 (uri (pypi-uri "license-expression" version))
6887 (sha256
6888 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
6889 (build-system pyproject-build-system)
6890 (native-inputs
6891 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
6892 (propagated-inputs
6893 (list python-boolean.py))
6894 (home-page "https://github.com/nexB/license-expression")
6895 (synopsis "Apply boolean logic to license expressions")
6896 (description
6897 "This Python module defines a tiny language to evaluate and compare
6898license expressions using boolean logic. Logical combinations of licenses can
6899be tested for equality, containment, and equivalence. They can be normalised
6900and simplified. It supports SPDX license expressions as well as other naming
6901conventions and aliases in the same expression.")
6902 (license license:gpl2+)))
6903
6904(define-public python-limits
6905 (package
6906 (name "python-limits")
6907 (version "5.8.0")
6908 (source
6909 (origin
6910 (method git-fetch)
6911 (uri (git-reference
6912 (url "https://github.com/alisaifee/limits")
6913 (commit version)))
6914 (file-name (git-file-name name version))
6915 (sha256
6916 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
6917 (build-system pyproject-build-system)
6918 (arguments
6919 (list
6920 ;; tests: 155 passed, 620 deselected
6921 #:test-flags
6922 #~(list
6923 ;; The test suite spawns storages in Docker.
6924 "-k" (simple-format #f "not (~a)"
6925 (string-join
6926 '("lazy_dependency" ;importing redis
6927 "memcache"
6928 "mongo"
6929 "redis"
6930 "valkey")
6931 " or "))
6932 "--ignore=tests/benchmarks")
6933 #:phases
6934 #~(modify-phases %standard-phases
6935 (add-before 'check 'adjust-tests
6936 (lambda _
6937 (substitute* "pytest.ini"
6938 ((".*--cov=.*") "")
6939 ((".*-K.*") ""))
6940 (substitute* (find-files "tests" "\\.py$")
6941 (("import pymemcache.*") "")
6942 (("import pymongo.*") "")
6943 (("import redis.*") "")
6944 (("import valkey.*") "")
6945 ;; Lazy fixtures are only used for storages.
6946 (("from pytest_lazy_fixtures import lf.*") "")
6947 (("lf\\((.+)\\)" all fixture) fixture))
6948 (substitute* "tests/test_storage.py"
6949 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
6950 (propagated-inputs (list python-deprecated python-packaging))
6951 (native-inputs
6952 (list python-flaky
6953 python-hatch-vcs
6954 python-hatchling
6955 python-pytest
6956 python-pytest-asyncio))
6957 (home-page "https://limits.readthedocs.io/")
6958 (synopsis "Rate limiting utilities")
6959 (description
6960 "This package provides a Python library to perform rate limiting with
6961commonly used storage backends.")
6962 (license license:expat)))
6963
6964(define-public python-fb-re2
6965 (package
6966 (name "python-fb-re2")
6967 (version "1.0.7")
6968 (source
6969 (origin
6970 (method git-fetch)
6971 (uri (git-reference
6972 (url "https://github.com/facebook/pyre2")
6973 (commit (string-append "v" version))))
6974 (file-name (git-file-name name version))
6975 (sha256
6976 (base32
6977 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
6978 (build-system pyproject-build-system)
6979 (arguments
6980 (list
6981 #:phases
6982 #~(modify-phases %standard-phases
6983 (add-after 'unpack 'fix-tests
6984 (lambda _
6985 (substitute* "tests/test_match.py"
6986 (("assertRaisesRegexp")
6987 "assertRaisesRegex")))))))
6988 (native-inputs
6989 (list python-pytest python-setuptools))
6990 (inputs
6991 (list re2))
6992 (home-page "https://github.com/facebook/pyre2")
6993 (synopsis "Python wrapper for RE2")
6994 (description "This package provides a Python extension that wraps Google's
6995RE2 regular expression library. It implements many of the features of
6996Python's built-in @code{re} module with compatible interfaces.")
6997 (license license:bsd-3)))
6998
6999(define-public python-filelock
7000 ;; Try to update simultaneously with the bootstrap version in
7001 ;; (gnu packages python-build).
7002 (package
7003 (name "python-filelock")
7004 (version "3.16.1")
7005 (source
7006 (origin
7007 (method url-fetch)
7008 (uri (pypi-uri "filelock" version))
7009 (sha256
7010 (base32
7011 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7012 (build-system pyproject-build-system)
7013 (arguments
7014 (list
7015 ;; Break cycle with virtualenv.
7016 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7017 (native-inputs
7018 (list python-hatch-vcs
7019 python-hatchling
7020 python-pytest
7021 python-pytest-asyncio
7022 python-pytest-mock
7023 python-setuptools-scm))
7024 (home-page "https://github.com/tox-dev/py-filelock")
7025 (synopsis "Platform independent file lock")
7026 (description "@code{filelock} contains a single module implementing
7027a platform independent file lock in Python, which provides a simple way of
7028inter-process communication.")
7029 (license license:unlicense)))
7030
7031(define-public python-filelock-next
7032 (package
7033 (inherit python-filelock)
7034 (name "python-filelock")
7035 (version "3.20.0")
7036 (source
7037 (origin
7038 (method url-fetch)
7039 (uri (pypi-uri "filelock" version))
7040 (sha256
7041 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7042 (native-inputs
7043 (list python-hatch-vcs
7044 python-hatchling
7045 python-pytest
7046 python-pytest-asyncio
7047 python-pytest-mock
7048 python-pytest-timeout))))
7049
7050(define-public python-seedir
7051 (package
7052 (name "python-seedir")
7053 (version "0.5.0")
7054 (source
7055 (origin
7056 (method url-fetch)
7057 (uri (pypi-uri "seedir" version))
7058 (sha256
7059 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7060 (build-system pyproject-build-system)
7061 (propagated-inputs (list python-natsort))
7062 (native-inputs (list python-pytest python-setuptools python-wheel))
7063 (home-page "https://github.com/earnestt1234/seedir")
7064 (synopsis
7065 "Package for creating, editing, and reading folder tree diagrams.")
7066 (description
7067 "This is a package for creating, editing, and reading folder tree
7068diagrams.")
7069 (license license:expat)))
7070
7071(define-public python-semantic-version
7072 (package
7073 (name "python-semantic-version")
7074 (version "2.10.0")
7075 (source
7076 (origin
7077 (method url-fetch)
7078 (uri (pypi-uri "semantic_version" version))
7079 (sha256
7080 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7081 (build-system pyproject-build-system)
7082 (arguments (list #:test-backend #~'nose2))
7083 (native-inputs
7084 (list python-nose2
7085 python-setuptools))
7086 (home-page "https://github.com/rbarrois/python-semanticversion")
7087 (synopsis "Semantic versioning module for Python")
7088 (description
7089 "The @code{semantic_version} class is a small library for handling
7090@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7091
7092It can compare versions, generate a new version that represents a bump in one
7093of the version levels, and check whether any given string is a proper semantic
7094version identifier.")
7095 (license license:bsd-3)))
7096
7097(define-public python-serpent
7098 (package
7099 (name "python-serpent")
7100 (version "1.41")
7101 (source
7102 (origin
7103 (method git-fetch)
7104 (uri (git-reference
7105 (url "https://github.com/irmen/Serpent")
7106 (commit (string-append "serpent-" version))))
7107 (file-name (git-file-name name version))
7108 (sha256
7109 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7110 (build-system pyproject-build-system)
7111 (arguments (list #:test-backend #~'unittest
7112 #:test-flags #~(list "discover" "-s" "tests")))
7113 (native-inputs
7114 (list python-attrs python-pytz python-setuptools))
7115 (home-page "https://github.com/irmen/Serpent")
7116 (synopsis "Serializer for literal Python expressions")
7117 (description
7118 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7119serialization. It serializes an object tree into bytes (an utf-8 encoded
7120string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7121to rebuild the original object tree.
7122
7123Because only safe literals are encoded, it is safe to send serpent data to
7124other machines, such as over the network.")
7125 (license license:expat)))
7126
7127(define-public python-setuptools-declarative-requirements
7128 (package
7129 (name "python-setuptools-declarative-requirements")
7130 (version "1.3.0")
7131 (source
7132 (origin
7133 (method url-fetch)
7134 (uri (pypi-uri "setuptools-declarative-requirements" version))
7135 (sha256
7136 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7137 (build-system pyproject-build-system)
7138 (arguments
7139 (list #:tests? #f)) ;require dated inputs
7140 (native-inputs
7141 (list python-setuptools-scm))
7142 (propagated-inputs
7143 (list python-setuptools))
7144 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7145 (synopsis "File support for setuptools declarative setup.cfg")
7146 (description
7147 "This package provides file support for setuptools declarative
7148@code{setup.cfg}.")
7149 (license license:asl2.0)))
7150
7151(define-public python-humanfriendly
7152 (package
7153 (name "python-humanfriendly")
7154 (version "10.0")
7155 (source
7156 (origin
7157 (method git-fetch)
7158 (uri (git-reference
7159 (url "https://github.com/xolox/python-humanfriendly")
7160 (commit version)))
7161 (file-name (git-file-name name version))
7162 (sha256
7163 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7164 (build-system pyproject-build-system)
7165 (arguments
7166 (list
7167 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7168 #:tests? #f))
7169 (native-inputs (list python-setuptools))
7170 (home-page "https://humanfriendly.readthedocs.io")
7171 (synopsis "Human-friendly input and output in Python")
7172 (description
7173 "The functions and classes in @code{humanfriendly} can be used to make
7174text interfaces more user-friendly. It includes tools to parse and format
7175numbers, file sizes, and timespans, timers for long-running operations, menus
7176to allow the user to choose from a list of options, and terminal interaction
7177helpers.")
7178 (license license:expat)))
7179
7180(define-public python-calver
7181 (package
7182 (name "python-calver")
7183 (version "2022.06.26")
7184 (source
7185 (origin
7186 (method git-fetch)
7187 (uri (git-reference
7188 (url "https://github.com/di/calver")
7189 (commit version)))
7190 (file-name (git-file-name name version))
7191 (sha256
7192 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7193 (build-system pyproject-build-system)
7194 (native-inputs
7195 (list python-pretend
7196 python-pytest
7197 python-setuptools
7198 python-wheel))
7199 (home-page "https://github.com/di/calver")
7200 (synopsis "Setuptools extension for CalVer package versions")
7201 (description
7202 "The calver package is a setuptools extension for automatically defining
7203your Python package version as a calendar version.")
7204 (license license:asl2.0)))
7205
7206(define-public python-can
7207 (package
7208 (name "python-can")
7209 (version "4.6.1")
7210 (source
7211 (origin
7212 (method git-fetch)
7213 (uri (git-reference
7214 (url "https://github.com/hardbyte/python-can")
7215 (commit (string-append "v" version))))
7216 (file-name (git-file-name name version))
7217 (sha256
7218 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7219 (build-system pyproject-build-system)
7220 (arguments
7221 (list
7222 #:test-flags
7223 #~(list
7224 ;; TODO: Check if it could be packed:
7225 ;; https://github.com/projectgus/python-canalystii
7226 ;;
7227 ;; Disable tests which require specific CAN drivers we have no
7228 ;; package for in Guix.
7229 "--ignore=test/test_interface_canalystii.py"
7230 ;; These tests fail with "OSError: [Errno 19] No such device".
7231 "-k" "not BasicTestUdpMulticastBusIPv")
7232 #:phases
7233 #~(modify-phases %standard-phases
7234 (add-after 'unpack 'relax-requirements
7235 (lambda _
7236 (substitute* "pyproject.toml"
7237 (("\"wrapt~=.*\"")
7238 "\"wrapt\"")))))))
7239 (propagated-inputs (list python-packaging python-wrapt))
7240 (native-inputs
7241 (list ;; python-canalystii ; Not packed yet
7242 python-hypothesis
7243 python-mock
7244 python-parameterized
7245 python-pyserial
7246 python-pytest
7247 python-pytest-timeout
7248 python-setuptools
7249 python-setuptools-scm))
7250 (home-page "https://github.com/hardbyte/python-can")
7251 (synopsis "Controller Area Network (CAN) interface module for Python")
7252 (description
7253 "This package defines the @code{can} module, which provides controller
7254area network (CAN) support for Python developers; providing common
7255abstractions to different hardware devices, and a suite of utilities for
7256sending and receiving messages on a CAN bus.")
7257 (license license:lgpl3+)))
7258
7259(define-public python-canmatrix
7260 (package
7261 (name "python-canmatrix")
7262 (version "1.2")
7263 (source
7264 (origin
7265 (method git-fetch) ; no tests data in PyPi package
7266 (uri (git-reference
7267 (url "https://github.com/ebroecker/canmatrix")
7268 (commit version)))
7269 (file-name (git-file-name name version))
7270 (sha256
7271 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7272 (build-system pyproject-build-system)
7273 (native-inputs
7274 (list python-pytest
7275 python-pytest-timeout
7276 python-setuptools
7277 python-wheel))
7278 (propagated-inputs
7279 (list python-attrs
7280 python-canopen
7281 python-click
7282 ;; python-ldfparser
7283 python-lxml
7284 python-openpyxl
7285 python-pyyaml
7286 python-xlrd
7287 python-xlwt))
7288 (home-page "https://github.com/ebroecker/canmatrix")
7289 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7290 (description
7291 "This package implements a @acronym{CAN, Controller Area Network} matrix
7292object in Python which describes the CAN-communication and its needed objects
7293such as board units, frames, signals, and values. It also includes two
7294command-line tools (@command{canconvert} and @command{cancompare}) for
7295converting and comparing CAN databases.")
7296 (license license:bsd-2)))
7297
7298(define-public python-canopen
7299 (package
7300 (name "python-canopen")
7301 (version "2.4.1")
7302 (source
7303 (origin
7304 (method git-fetch)
7305 (uri (git-reference
7306 (url "https://github.com/canopen-python/canopen")
7307 (commit (string-append "v" version))))
7308 (file-name (git-file-name name version))
7309 (sha256
7310 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7311 (build-system pyproject-build-system)
7312 (native-inputs (list python-pytest python-setuptools))
7313 (propagated-inputs (list python-can))
7314 (home-page "https://github.com/canopen-python/canopen")
7315 (synopsis "CANopen stack implementation")
7316 (description
7317 "This package provides a Python implementation of the
7318@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7319@acronym{CANs, controller-area networks}. The aim of the project is to
7320support the most common parts of the CiA 301 standard in a simple
7321Pythonic interface. It is mainly targeted for testing and automation
7322tasks rather than a standard compliant master implementation.")
7323 (license license:expat)))
7324
7325(define-public python-diskcache
7326 (package
7327 (name "python-diskcache")
7328 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7329 ;; Django fixing failing tests.
7330 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7331 (revision . "0")))
7332 (version (git-version "5.6.3"
7333 (assoc-ref properties 'revision)
7334 (assoc-ref properties 'commit)))
7335 (source
7336 (origin
7337 (method git-fetch)
7338 (uri (git-reference
7339 (url "https://github.com/grantjenks/python-diskcache")
7340 (commit (assoc-ref properties 'commit))))
7341 (file-name (git-file-name name version))
7342 (sha256
7343 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7344 (build-system pyproject-build-system)
7345 (arguments
7346 (list
7347 #:phases
7348 #~(modify-phases %standard-phases
7349 (add-after 'unpack 'fix-pytest-config
7350 (lambda _
7351 ;; Prevent full threads utilization.
7352 (substitute* "tox.ini"
7353 (("-n auto") "")))))))
7354 (native-inputs
7355 (list python-django
7356 python-pytest
7357 python-setuptools))
7358 (home-page "https://www.grantjenks.com/docs/diskcache/")
7359 (synopsis "Disk and file backed cache library")
7360 (description "DiskCache is a disk and file backed persistent cache.")
7361 (license license:asl2.0)))
7362
7363(define-public python-optparse-pretty
7364 (package
7365 (name "python-optparse-pretty")
7366 (version "0.1.1")
7367 (source
7368 (origin
7369 (method url-fetch)
7370 (uri (pypi-uri "optparse-pretty" version))
7371 (sha256
7372 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7373 (build-system pyproject-build-system)
7374 (arguments (list #:tests? #false)) ;There are none
7375 (native-inputs (list python-setuptools python-wheel))
7376 (home-page "https://github.com/gvalkov/optparse-pretty")
7377 (synopsis "Compact help formatter for optparse")
7378 (description
7379 "This module provides two help formatters for optparse. They provide
7380terser and more customizable option formatting in comparison to the default
7381help formatter.")
7382 (license license:bsd-3)))
7383
7384(define-public python-orjson
7385 (package
7386 (name "python-orjson")
7387 (version "3.9.7")
7388 (source (origin
7389 (method url-fetch)
7390 (uri (pypi-uri "orjson" version))
7391 (sha256
7392 (base32
7393 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7394 (build-system cargo-build-system)
7395 (arguments
7396 (list
7397 #:imported-modules `(,@%cargo-build-system-modules
7398 ,@%pyproject-build-system-modules)
7399 #:modules '((guix build cargo-build-system)
7400 ((guix build pyproject-build-system) #:prefix py:)
7401 (guix build utils))
7402 #:phases
7403 #~(modify-phases %standard-phases
7404 (add-after 'build 'build-python-module
7405 (assoc-ref py:%standard-phases 'build))
7406 (add-after 'build-python-module 'install-python-module
7407 (assoc-ref py:%standard-phases 'install)))
7408 #:install-source? #false))
7409 (inputs
7410 (cons maturin (cargo-inputs 'python-orjson)))
7411 (native-inputs
7412 (list python-wrapper))
7413 (home-page "https://github.com/ijl/orjson")
7414 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7415 (description "Orjson is a fast, correct JSON library for Python. It
7416benchmarks as the fastest Python library for JSON and is more correct than the
7417standard @code{json} library or other third-party libraries. It serializes
7418dataclass, datetime, numpy, and UUID instances natively.")
7419 ;; Either of these licenses
7420 (license (list license:asl2.0 license:expat))))
7421
7422(define-public python-overrides
7423 (package
7424 (name "python-overrides")
7425 (version "7.7.0")
7426 (source
7427 (origin
7428 (method url-fetch)
7429 (uri (pypi-uri "overrides" version))
7430 (sha256
7431 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7432 (build-system pyproject-build-system)
7433 (native-inputs (list python-pytest python-setuptools python-wheel))
7434 (home-page "https://github.com/mkorpela/overrides")
7435 (synopsis "Decorator to detect mismatch when overriding a method")
7436 (description
7437 "This package provides a decorator to automatically detect mismatch when
7438overriding a method.")
7439 (license license:asl2.0)))
7440
7441(define-public python-argparse-addons
7442 (package
7443 (name "python-argparse-addons")
7444 (version "0.12.0")
7445 (source
7446 (origin
7447 (method url-fetch)
7448 (uri (pypi-uri "argparse_addons" version))
7449 (sha256
7450 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7451 (build-system pyproject-build-system)
7452 (native-inputs
7453 (list python-pytest python-setuptools))
7454 (home-page "https://github.com/eerimoq/argparse_addons")
7455 (synopsis "Extensions for Python's @code{argparse} library")
7456 (description "This Python library provides additional types and actions
7457for the standard @code{argparse} library.")
7458 (license license:expat)))
7459
7460(define-public python-bitstruct
7461 (package
7462 (name "python-bitstruct")
7463 (version "8.21.0")
7464 (source
7465 (origin
7466 (method url-fetch)
7467 (uri (pypi-uri "bitstruct" version))
7468 (sha256
7469 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7470 (build-system pyproject-build-system)
7471 (native-inputs
7472 (list python-pytest
7473 python-setuptools
7474 python-wheel))
7475 (home-page "https://github.com/eerimoq/bitstruct")
7476 (synopsis "Python values to and C bit field structs converter")
7477 (description
7478 "This module performs conversions between Python values and C bit field
7479structs represented as Python byte strings. It is intended to have a similar
7480interface as the @code{struct} module from Python, but working on bits instead
7481of primitive data types like @code{char}, @code{int}, etc.")
7482 (license license:expat)))
7483
7484(define-public python-cantools
7485 (package
7486 (name "python-cantools")
7487 (version "40.5.0")
7488 (source
7489 (origin
7490 (method git-fetch)
7491 (uri (git-reference
7492 (url "https://github.com/eerimoq/cantools")
7493 (commit version)))
7494 (file-name (git-file-name name version))
7495 (sha256
7496 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7497 (build-system pyproject-build-system)
7498 (native-inputs
7499 (list python-freezegun
7500 python-parameterized
7501 python-pytest
7502 python-setuptools
7503 python-setuptools-scm))
7504 (propagated-inputs
7505 (list python-argparse-addons
7506 python-bitstruct
7507 python-can
7508 python-crccheck
7509 python-diskcache
7510 python-matplotlib
7511 python-textparser))
7512 (home-page "https://github.com/eerimoq/cantools")
7513 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7514 (description
7515 "This package includes Controller Area Network (CAN) related tools that
7516can be used to:
7517@itemize
7518@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7519@item encode and decode CAN messages
7520@item multiplex simple and extended signals
7521@item diagnose DID encoding and decoding
7522@item dump the CAN decoder output
7523@item test CAN nodes
7524@item generate C source code
7525@item monitor the CAN bus
7526@end itemize")
7527 (license license:expat)))
7528
7529(define-public python-capturer
7530 (package
7531 (name "python-capturer")
7532 (version "3.0")
7533 (source
7534 (origin
7535 (method git-fetch)
7536 (uri (git-reference
7537 (url "https://github.com/xolox/python-capturer")
7538 (commit version)))
7539 (file-name (git-file-name name version))
7540 (sha256
7541 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7542 (build-system pyproject-build-system)
7543 (native-inputs (list python-pytest python-setuptools))
7544 (propagated-inputs (list python-humanfriendly))
7545 (home-page "https://capturer.readthedocs.io")
7546 (synopsis "Capture stdout and stderr streams of the current process")
7547 (description
7548 "The capturer package makes it easy to capture the stdout and stderr
7549streams of the current process and subprocesses. Output can be relayed
7550to the terminal in real time but is also available to the Python program
7551for additional processing.")
7552 (license license:expat)))
7553
7554(define-public python-fastprogress
7555 (package
7556 (name "python-fastprogress")
7557 (version "1.0.3")
7558 (source (origin
7559 (method git-fetch)
7560 (uri (git-reference
7561 (url "https://github.com/fastai/fastprogress")
7562 (commit version)))
7563 (file-name (git-file-name name version))
7564 (sha256
7565 (base32
7566 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7567 (build-system pyproject-build-system)
7568 (arguments
7569 (list #:tests? #f ;there are no tests
7570 #:phases #~(modify-phases %standard-phases
7571 ;; XXX: Fails with: "In procedure utime: No such file
7572 ;; or directory".
7573 (delete 'ensure-no-mtimes-pre-1980))))
7574 (native-inputs (list python-setuptools python-wheel))
7575 (home-page "https://github.com/fastai/fastprogress")
7576 (synopsis "Progress bar for Jupyter Notebook and console")
7577 (description
7578 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7579 (license license:asl2.0)))
7580
7581(define-public python-coloredlogs
7582 (package
7583 (name "python-coloredlogs")
7584 (version "15.0.1")
7585 (source
7586 (origin
7587 (method git-fetch)
7588 (uri (git-reference
7589 (url "https://github.com/xolox/python-coloredlogs")
7590 (commit version)))
7591 (file-name (git-file-name name version))
7592 (sha256
7593 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7594 (build-system pyproject-build-system)
7595 (arguments
7596 (list
7597 #:test-flags
7598 #~(list "-k"
7599 (string-join
7600 (list "not test_auto_install" ; Unclear why this fails.
7601 ;; XXX: Require a "script" executable.
7602 "test_cli_conversion"
7603 "test_empty_conversion"
7604 "test_output_interception")
7605 " and not "))))
7606 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7607 (propagated-inputs (list python-capturer))
7608 (home-page "https://coloredlogs.readthedocs.io")
7609 (synopsis "Colored stream handler for Python's logging module")
7610 (description
7611 "The @code{coloredlogs} package enables colored terminal output for
7612Python's logging module. The @code{ColoredFormatter} class inherits from
7613@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7614messages in color.")
7615 (license license:expat)))
7616
7617(define-public python-editorconfig
7618 (package
7619 (name "python-editorconfig")
7620 (version "0.17.1")
7621 (source
7622 (origin
7623 (method git-fetch)
7624 (uri (git-reference
7625 (url "https://github.com/editorconfig/editorconfig-core-py")
7626 (commit (string-append "v" version))
7627 (recursive? #t)))
7628 (file-name (git-file-name name version))
7629 (sha256
7630 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7631 (build-system pyproject-build-system)
7632 (arguments
7633 (list
7634 #:phases
7635 #~(modify-phases %standard-phases
7636 (replace 'check
7637 (lambda _
7638 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7639 (invoke "cmake" ".")
7640 (invoke "ctest" "."))))))
7641 (native-inputs (list cmake python-setuptools python-wheel))
7642 (home-page "https://editorconfig.org/")
7643 (synopsis "EditorConfig bindings for python")
7644 (description "The EditorConfig project consists of a file format for
7645defining coding styles and a collection of text editor plugins that enable
7646editors to read the file format and adhere to defined styles. EditorConfig
7647files are easily readable and they work nicely with version control systems.")
7648 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7649 (license (list license:bsd-2 license:psfl))))
7650
7651(define-public dosage
7652 (package
7653 (name "dosage")
7654 (version "3.2")
7655 (source
7656 (origin
7657 (method url-fetch)
7658 (uri (pypi-uri "dosage" version))
7659 (sha256
7660 (base32
7661 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
7662 (build-system pyproject-build-system)
7663 (arguments
7664 ;; It requires additional modules for integration tests.
7665 (list #:test-flags #~(list "--ignore=tests/modules/")))
7666 (native-inputs
7667 (list python-pytest
7668 python-responses
7669 python-setuptools
7670 python-setuptools-scm))
7671 (inputs
7672 (list python-imagesize
7673 python-importlib-resources
7674 python-lxml
7675 python-platformdirs
7676 python-requests
7677 python-rich))
7678 (home-page "https://github.com/webcomics/dosage")
7679 (synopsis "Comic strip downloader and archiver")
7680 (description
7681 "Dosage is designed to keep a local copy of specific webcomics and other
7682picture-based content such as Picture of the Day sites. With the
7683@command{dosage} command-line script you can get the latest strip of a
7684webcomic, catch-up to the last strip downloaded, or download a strip for a
7685particular date or index, if possible.")
7686 (license license:expat)))
7687
7688(define-public python-etcd3
7689 (package
7690 (name "python-etcd3")
7691 (version "0.12.0")
7692 (source
7693 (origin
7694 (method git-fetch)
7695 (uri (git-reference
7696 (url "https://github.com/kragniz/python-etcd3")
7697 (commit (string-append "v" version))))
7698 (file-name (git-file-name name version))
7699 (sha256
7700 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7701 (build-system pyproject-build-system)
7702 (arguments
7703 (list
7704 ;; XXX: Tests require the etcd package.
7705 #:tests? #f
7706 #:test-backend #~'custom
7707 #:test-flags ; Taken from tox.ini.
7708 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7709 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
7710 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
7711 (home-page "https://github.com/kragniz/python-etcd3")
7712 (synopsis "Python client for the etcd3 API")
7713 (description
7714 "This package provide a Python client for the @code{etcd3} API.")
7715 (license license:asl2.0)))
7716
7717(define-public python-et-xmlfile
7718 (package
7719 (name "python-et-xmlfile")
7720 (version "2.0.0")
7721 (source
7722 (origin
7723 ;; Use a checkout because the PyPI archive does not contain tests.
7724 (method hg-fetch)
7725 (uri (hg-reference
7726 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7727 (changeset version)))
7728 (file-name (string-append name "-" version "-checkout"))
7729 (sha256
7730 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7731 (build-system pyproject-build-system)
7732 (native-inputs
7733 (list python-pytest
7734 python-lxml
7735 python-setuptools))
7736 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7737 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7738 (description "This Python library is based upon the @code{xmlfile} module
7739from @code{lxml}. It aims to provide a low memory, compatible implementation
7740of @code{xmlfile}.")
7741 (license license:expat)))
7742
7743(define-public python-omero-py
7744 (let ((omero-blitz-version "5.8.2"))
7745 (package
7746 (name "python-omero-py")
7747 (version "5.20.0")
7748 (source
7749 (origin
7750 (method git-fetch)
7751 (uri (git-reference
7752 (url "https://github.com/ome/omero-py")
7753 (commit (string-append "v" version))))
7754 (file-name (git-file-name name version))
7755 (sha256
7756 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
7757 (build-system pyproject-build-system)
7758 (arguments
7759 (list
7760 #:test-flags
7761 #~(list
7762 "-m" "not broken" "-rf" "test" "-s"
7763 ;; TestImport tries to download Java things; TestSessions
7764 ;; and TestBuildQuery require networking.
7765 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
7766 #:modules '((guix build pyproject-build-system)
7767 (guix build utils)
7768 (ice-9 match)
7769 (srfi srfi-1)
7770 (srfi srfi-26))
7771 #:phases
7772 #~(modify-phases %standard-phases
7773 (add-after 'unpack 'find-artifacts
7774 (lambda* (#:key inputs #:allow-other-keys)
7775 (let ((zip-file
7776 (match inputs
7777 (((labels . files) ...)
7778 (find (cut string-suffix?
7779 (string-append "omero-blitz-"
7780 #$omero-blitz-version
7781 "-python.zip")
7782 <>)
7783 files)))))
7784 (setenv "ZIP_FILE"
7785 (or zip-file (error "failed to find artifact file"))))))
7786 ;; Some tests need this, such as TestTempFileManager
7787 (add-after 'build 'set-HOME
7788 (lambda _ (setenv "HOME" "/tmp")))
7789 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
7790 ;; module to load.
7791 (delete 'sanity-check)
7792 ;; The argument parser is picky and interprets the "-real" part as
7793 ;; the first argument.
7794 (add-after 'wrap 'rename-executable
7795 (lambda _
7796 (with-directory-excursion (string-append #$output "/bin")
7797 (rename-file ".omero-real" ".omero")
7798 (substitute* "omero"
7799 (("bin/.omero-real") "bin/.omero"))))))))
7800 (propagated-inputs
7801 (list python-appdirs
7802 python-future
7803 python-numpy
7804 python-pillow
7805 python-pyyaml
7806 python-requests
7807 python-tables
7808 python-zeroc-ice-3.6))
7809 (native-inputs
7810 (list python-portalocker
7811 python-pytest
7812 python-pytest-mock
7813 python-pytest-rerunfailures
7814 python-pytest-xdist
7815 python-setuptools
7816 python-wheel
7817 unzip
7818 (origin
7819 (method url-fetch)
7820 (uri (format #f "\
7821https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
7822openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
7823 omero-blitz-version
7824 omero-blitz-version))
7825 (sha256
7826 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
7827 (home-page "https://github.com/ome/omero-py")
7828 (synopsis "Python bindings to the OMERO.blitz server")
7829 (description "This package provides Python bindings to the OMERO.blitz
7830server.")
7831 (license license:gpl2))))
7832
7833(define-public python-openpyxl
7834 (package
7835 (name "python-openpyxl")
7836 (version "3.1.5")
7837 (source
7838 (origin
7839 ;; We use the upstream repository, as the tests are not included in the
7840 ;; PyPI releases.
7841 (method hg-fetch)
7842 (uri (hg-reference
7843 (url "https://foss.heptapod.net/openpyxl/openpyxl")
7844 (changeset version)))
7845 (file-name (string-append name "-" version "-checkout"))
7846 (sha256
7847 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
7848 (build-system pyproject-build-system)
7849 (arguments
7850 (list
7851 ;; XXX: The workbook writer doesn't respect SOURCE_DATE_EPOCH
7852 ;; https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2268
7853 ;; It makes a few tests fail.
7854 #:test-flags
7855 #~(list "--ignore=openpyxl/worksheet/tests/test_read_only.py"
7856 "-k" (string-join
7857 (list "not test_unsupport_drawing"
7858 "test_broken_sheet_ref"
7859 "test_no_default_style"
7860 "test_ctor"
7861 "test_force_dimension"
7862 "test_get_max_cell"
7863 "test_read_hyperlinks_read_only"
7864 "test_read_with_missing_cells"
7865 "test_read_empty_rows")
7866 " and not "))))
7867 (native-inputs
7868 (list python-lxml-4.9
7869 python-pillow
7870 python-pytest
7871 python-setuptools))
7872 (propagated-inputs
7873 (list python-et-xmlfile))
7874 (home-page "https://openpyxl.readthedocs.io")
7875 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
7876 (description
7877 "This Python library allows reading and writing to the Excel XLSX, XLSM,
7878XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
7879standard.")
7880 (license license:expat)))
7881
7882(define-public python-sinfo
7883 (package
7884 (name "python-sinfo")
7885 (version "1.0.1")
7886 (source
7887 (origin
7888 (method git-fetch)
7889 (uri (git-reference
7890 (url "https://gitlab.com/joelostblom/session_info")
7891 (commit (string-append "v" version))))
7892 (file-name (git-file-name name version))
7893 (sha256
7894 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
7895 (build-system pyproject-build-system)
7896 (arguments
7897 (list #:tests? #f)) ; no tests in PyPI or Git
7898 (native-inputs
7899 (list python-setuptools))
7900 (propagated-inputs
7901 (list python-stdlib-list))
7902 (home-page "https://gitlab.com/joelostblom/session_info")
7903 (synopsis "Output module version information loaded in a Python session")
7904 (description "This package outputs version information for modules loaded
7905in the current session, Python, and the OS.")
7906 (license license:bsd-3)))
7907
7908(define-public python-schedule
7909 (package
7910 (name "python-schedule")
7911 (version "1.2.2")
7912 (source
7913 (origin
7914 (method url-fetch)
7915 (uri (pypi-uri "schedule" version))
7916 (sha256
7917 (base32
7918 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
7919 (build-system pyproject-build-system)
7920 (native-inputs
7921 (list python-pytest python-setuptools python-wheel))
7922 (home-page "https://github.com/dbader/schedule")
7923 (synopsis "Schedule periodic function calls in Python")
7924 (description
7925 "Schedule is an in-process scheduler for periodic jobs that uses the
7926builder pattern for configuration. Schedule lets you run Python functions (or
7927any other callable) periodically at pre-determined intervals using a simple,
7928human-friendly syntax.")
7929 (license license:expat)))
7930
7931;; XXX: This project is unmaintained since 2020, see:
7932;; <https://github.com/scour-project/scour/issues/321>.
7933;;
7934;; The only user is Inkscape, see:
7935;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
7936(define-public python-scour
7937 (package
7938 (name "python-scour")
7939 (version "0.38.2")
7940 (source
7941 (origin
7942 (method git-fetch)
7943 (uri
7944 (git-reference
7945 (url "https://gitlab.com/inkscape/extras/scour")
7946 (commit
7947 (string-append "v" version))))
7948 (file-name (git-file-name name version))
7949 (sha256
7950 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
7951 (build-system pyproject-build-system)
7952 (arguments
7953 (list #:test-backend #~'custom
7954 #:test-flags #~(list "test_scour.py")))
7955 (native-inputs
7956 (list python-setuptools))
7957 (propagated-inputs
7958 (list python-six))
7959 (home-page "https://gitlab.com/inkscape/extras/scour")
7960 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
7961 (description
7962 "The goal of Scour is to output a file that renders identically at a
7963fraction of the size by removing a lot of redundant information created by
7964most SVG editors. Optimization options are typically lossless but can be
7965tweaked for more aggressive cleaning.")
7966 (license license:asl2.0)))
7967
7968(define-public python-mechanize
7969 (package
7970 (name "python-mechanize")
7971 (version "0.4.10")
7972 (source
7973 (origin
7974 (method url-fetch)
7975 (uri (pypi-uri "mechanize" version))
7976 (sha256
7977 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
7978 (build-system pyproject-build-system)
7979 (arguments
7980 ;; XXX: Unclear why tests are failing.
7981 (list #:tests? #f
7982 #:phases
7983 #~(modify-phases %standard-phases
7984 (add-before 'check 'configure-tests
7985 (lambda _
7986 (setenv "GUIX_PYTHONPATH"
7987 (string-append (getcwd) "/test-tools:"
7988 (getenv "GUIX_PYTHONPATH"))))))))
7989 (native-inputs
7990 (list python-html5-parser
7991 python-html5lib
7992 python-lxml
7993 python-service-identity
7994 python-setuptools
7995 python-six
7996 python-twisted
7997 python-wheel))
7998 (propagated-inputs
7999 (list python-html5lib))
8000 (home-page "https://github.com/python-mechanize/mechanize")
8001 (synopsis
8002 "Stateful programmatic web browsing in Python")
8003 (description
8004 "Mechanize implements stateful programmatic web browsing in Python,
8005after Andy Lester’s Perl module WWW::Mechanize.")
8006 (license license:bsd-3)))
8007
8008(define-public python-mediapy
8009 (package
8010 (name "python-mediapy")
8011 (version "1.2.6")
8012 (source
8013 (origin
8014 (method git-fetch)
8015 (uri (git-reference
8016 (url "https://github.com/google/mediapy")
8017 (commit (string-append "v" version))))
8018 (file-name (git-file-name name version))
8019 (sha256
8020 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8021 (build-system pyproject-build-system)
8022 (arguments
8023 (list
8024 #:phases
8025 '(modify-phases %standard-phases
8026 (add-after 'unpack 'fix-references
8027 (lambda _
8028 (substitute* "mediapy_test.py"
8029 (("'/bin/bash")
8030 (string-append "'" (which "bash")))))))))
8031 (inputs (list ffmpeg-6))
8032 (propagated-inputs (list python-absl-py
8033 python-ipython
8034 python-matplotlib
8035 python-numpy
8036 python-pillow))
8037 (native-inputs
8038 (list python-flit-core
8039 python-pytest
8040 python-pytest-xdist))
8041 (home-page "https://github.com/google/mediapy")
8042 (synopsis "Read/write/show images and videos in an IPython notebook")
8043 (description "This Python library makes it easy to display images and
8044videos in a notebook.")
8045 (license license:asl2.0)))
8046
8047(define-public python-simpleaudio
8048 (package
8049 (name "python-simpleaudio")
8050 (version "1.0.4")
8051 (source
8052 (origin
8053 (method git-fetch)
8054 (uri (git-reference
8055 (url "https://github.com/hamiltron/py-simple-audio")
8056 (commit version)))
8057 (file-name (git-file-name name version))
8058 (sha256
8059 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8060 (build-system pyproject-build-system)
8061 (arguments
8062 (list
8063 #:test-backend #~'unittest
8064 #:phases
8065 #~(modify-phases %standard-phases
8066 (add-before 'check 'fix-test-run
8067 (lambda _
8068 (delete-file-recursively "simpleaudio"))))))
8069 (native-inputs (list python-setuptools))
8070 (inputs (list alsa-lib))
8071 (home-page "https://github.com/hamiltron/py-simple-audio")
8072 (synopsis "Simple, asynchronous audio playback for Python 3")
8073 (description
8074 "The @code{simplaudio} package provides cross-platform, dependency-free
8075audio playback capability for Python 3 on OSX, Windows, and Linux.")
8076 (license license:expat))) ; MIT license
8077
8078(define-public python-jsonalias
8079 (package
8080 (name "python-jsonalias")
8081 (version "0.1.2")
8082 (source (origin
8083 (method url-fetch)
8084 (uri (pypi-uri "jsonalias" version))
8085 (sha256
8086 (base32
8087 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8088 (build-system pyproject-build-system)
8089 (arguments
8090 (list #:tests? #f)) ; no tests in PyPI or Git
8091 (native-inputs
8092 (list python-poetry-core))
8093 (home-page "https://github.com/kevinheavey/jsonalias/")
8094 (synopsis "JSON type alias for Python")
8095 (description
8096 "This package provides a microlibrary that defines a JSON type alias for
8097Python.")
8098 (license license:expat)))
8099
8100(define-public python-jsonargparse
8101 (package
8102 (name "python-jsonargparse")
8103 (version "4.49.0")
8104 (source
8105 (origin
8106 (method git-fetch)
8107 (uri (git-reference
8108 (url "https://github.com/omni-us/jsonargparse/")
8109 (commit (string-append "v" version))))
8110 (file-name (git-file-name name version))
8111 (sha256
8112 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8113 (build-system pyproject-build-system)
8114 (propagated-inputs
8115 (list python-pyyaml))
8116 (native-inputs
8117 (list python-attrs
8118 python-pydantic
8119 python-pytest
8120 python-pytest-subtests
8121 python-requests
8122 python-responses
8123 python-setuptools
8124 python-types-pyyaml
8125 python-types-requests))
8126 (home-page "https://github.com/omni-us/jsonargparse/")
8127 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8128 (description
8129 "This package lets you implement minimal boilerplate CLIs derived from
8130type hints and parse from command line, config files and environment
8131variables.")
8132 (license license:expat)))
8133
8134(define-public python-pymarshal
8135 (package
8136 (name "python-pymarshal")
8137 (version "2.2.3")
8138 (source (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "pymarshal" version))
8141 (sha256
8142 (base32
8143 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8144 (build-system pyproject-build-system)
8145 (arguments
8146 ;; Test fails with this error:
8147 ;; "CovReportWarning: Failed to generate report: No data to report."
8148 (list #:tests? #f))
8149 (native-inputs
8150 (list python-pytest python-setuptools python-wheel))
8151 (propagated-inputs (list python-bson python-pyyaml))
8152 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8153 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8154 (description "PyMarshal replicates the feature of (un)marshalling structs
8155in Golang.")
8156 (license license:bsd-2)))
8157
8158(define-public python-simplejson
8159 (package
8160 (name "python-simplejson")
8161 (version "3.20.1")
8162 (source
8163 (origin
8164 (method url-fetch)
8165 (uri (pypi-uri "simplejson" version))
8166 (sha256
8167 (base32
8168 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8169 (build-system pyproject-build-system)
8170 (native-inputs
8171 (list python-pytest python-setuptools))
8172 (home-page "https://simplejson.readthedocs.io/en/latest")
8173 (synopsis
8174 "Json library for Python")
8175 (description
8176 "JSON (JavaScript Object Notation) is a subset of JavaScript
8177syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8178format.
8179
8180Simplejson exposes an API familiar to users of the standard library marshal
8181and pickle modules. It is the externally maintained version of the json
8182library contained in Python 2.6, but maintains compatibility with Python 2.5
8183and (currently) has significant performance advantages, even without using
8184the optional C extension for speedups. Simplejson is also supported on
8185Python 3.3+.")
8186 (license license:x11)))
8187
8188(define-public python-simple-rlp
8189 (package
8190 (name "python-simple-rlp")
8191 (version "0.1.3")
8192 (source
8193 (origin
8194 (method git-fetch)
8195 (uri (git-reference
8196 (url "https://github.com/SamuelHaidu/simple-rlp")
8197 ;; Upstream doesn't tag the git repo.
8198 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8199 (file-name (git-file-name name version))
8200 (sha256
8201 (base32
8202 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8203 (build-system pyproject-build-system)
8204 (native-inputs
8205 (list
8206 python-pytest
8207 python-setuptools))
8208 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8209 (synopsis
8210 "Python implementation of RLP (Recursive Length Prefix) encoding")
8211 (description
8212 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8213Prefix) - Encode and decode data structures.")
8214 (license license:expat)))
8215
8216(define-public python-pyicu
8217 (package
8218 (name "python-pyicu")
8219 (version "2.15.2")
8220 (source
8221 (origin
8222 (method url-fetch)
8223 (uri (pypi-uri "pyicu" version))
8224 (sha256
8225 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8226 (build-system pyproject-build-system)
8227 (native-inputs
8228 (list pkg-config
8229 python-pytest
8230 python-setuptools
8231 python-six))
8232 (inputs
8233 (list icu4c))
8234 (home-page "https://gitlab.pyicu.org/main/pyicu")
8235 (synopsis "Python extension wrapping the ICU C++ API")
8236 (description
8237 "PyICU is a python extension wrapping the ICU C++ API.")
8238 (license license:x11)))
8239
8240(define-public python-dogtail
8241 (package
8242 (name "python-dogtail")
8243 (version "0.9.11")
8244 (source
8245 (origin
8246 (method url-fetch)
8247 (uri (string-append
8248 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8249 version ".tar.gz"))
8250 (sha256
8251 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8252 (build-system pyproject-build-system)
8253 (arguments
8254 (list
8255 #:tests? #f ;TODO Launching dbus for the tests fails
8256 #:phases
8257 #~(modify-phases %standard-phases
8258 (replace 'check
8259 (lambda* (#:key tests? #:allow-other-keys)
8260 (when tests?
8261 (system "Xvfb :1 &")
8262 (setenv "DISPLAY" ":1")
8263 (invoke "dbus-run-session" "--"
8264 "nosetests" "-v" "tests/")))))))
8265 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8266 (native-inputs
8267 (list python-pynose
8268 gtk+
8269 xorg-server-for-tests
8270 dbus
8271 gsettings-desktop-schemas
8272 gobject-introspection
8273 python-setuptools))
8274 (home-page "https://gitlab.com/dogtail/dogtail/")
8275 (synopsis "GUI test tool and automation framework written in Python")
8276 (description
8277 "Dogtail is a GUI test tool and automation framework written in Python.
8278It uses Accessibility (a11y) technologies to communicate with desktop
8279applications. dogtail scripts are written in Python and executed like any
8280other Python program.")
8281 (license license:gpl2+)))
8282
8283(define-public python-doxyqml
8284 (package
8285 (name "python-doxyqml")
8286 (version "0.5.3")
8287 (source (origin
8288 (method url-fetch)
8289 (uri (pypi-uri "doxyqml" version))
8290 (sha256
8291 (base32
8292 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8293 (build-system pyproject-build-system)
8294 (arguments
8295 (list #:test-backend #~'custom
8296 #:test-flags #~(list "tests/functional/tests.py")))
8297 (native-inputs
8298 (list python-setuptools))
8299 (home-page "https://agateau.com/projects/doxyqml")
8300 (synopsis "Doxygen input filter for QML files")
8301 (description
8302 "This package provides a Doxygen input filter for QML files.")
8303 (license license:bsd-3)))
8304
8305(define-public python-doxypypy
8306 (package
8307 (name "python-doxypypy")
8308 (version "0.8.8.7")
8309 (source (origin
8310 (method url-fetch)
8311 (uri (pypi-uri "doxypypy" version))
8312 (sha256
8313 (base32
8314 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8315 (build-system pyproject-build-system)
8316 (arguments
8317 (list
8318 #:test-flags
8319 #~(list "-k" (string-join
8320 ;; Test files are not in UTF-8 format and attmet to
8321 ;; substitute shebang fails, while tests fail with error:
8322 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8323 ;; File w[387 chars]g.')" !=
8324 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8325 ;; chars]g.')"
8326 (list "not test_utf16be_bom"
8327 "test_utf16le_bom"
8328 "test_utf32be_bom"
8329 "test_utf32le_bom"
8330 "test_utf8_bom")
8331 " and not "))
8332 #:phases
8333 #~(modify-phases %standard-phases
8334 ;; compile-bytecode phases fails with error: SyntaxError: source
8335 ;; code string cannot contain null bytes.
8336 (add-after 'unpack 'fix-setup.py
8337 (lambda _
8338 (substitute* "setup.py"
8339 (("packages=.*") "packages=['doxypypy'],\n")))))))
8340 (native-inputs
8341 (list python-pytest
8342 python-setuptools
8343 python-wheel))
8344 (propagated-inputs
8345 (list python-chardet))
8346 (home-page "https://github.com/Feneric/doxypypy")
8347 (synopsis "Doxygen filter for Python")
8348 (description
8349 "This package provides a Doxygen filter for Python.")
8350 (license license:gpl2+)))
8351
8352(define-public python-empy
8353 (package
8354 (name "python-empy")
8355 (version "3.3.4")
8356 (source
8357 (origin
8358 (method url-fetch)
8359 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8360 version ".tar.gz"))
8361 (sha256
8362 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8363 (build-system pyproject-build-system)
8364 (arguments
8365 (list
8366 #:phases
8367 #~(modify-phases %standard-phases
8368 (replace 'check
8369 (lambda* (#:key tests? #:allow-other-keys)
8370 (when tests?
8371 (invoke "./test.sh")))))))
8372 (native-inputs (list python-setuptools))
8373 (home-page "http://www.alcyone.com/software/empy/")
8374 (synopsis "Templating system for Python")
8375 (description
8376 "EmPy is a system for embedding Python expressions and statements in
8377template text; it takes an EmPy source file, processes it, and produces
8378output. This is accomplished via expansions, which are special signals to the
8379EmPy system and are set off by a special prefix (by default the at sign, @@).
8380EmPy can expand arbitrary Python expressions and statements in this way, as
8381well as a variety of special forms. Textual data not explicitly delimited in
8382this way is sent unaffected to the output, allowing Python to be used in
8383effect as a markup language. Also supported are callbacks via hooks,
8384recording and playback via diversions, and dynamic, chainable filters. The
8385system is highly configurable via command line options and embedded
8386commands.")
8387 (license license:lgpl2.1+)))
8388
8389(define-public python-palettable
8390 (package
8391 (name "python-palettable")
8392 (version "3.3.3")
8393 (source (origin
8394 (method url-fetch)
8395 (uri (pypi-uri "palettable" version))
8396 (sha256
8397 (base32
8398 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8399 (build-system pyproject-build-system)
8400 (native-inputs (list python-pytest python-setuptools python-wheel))
8401 (home-page "https://jiffyclub.github.io/palettable/")
8402 (synopsis "Color palettes for Python")
8403 (description "Palettable (formerly brewer2mpl) is a library of color
8404palettes for Python. It’s written in pure Python with no dependencies, but it
8405can supply color maps for matplotlib. You can use Palettable to customize
8406matplotlib plots or supply colors for a web application.")
8407 (license license:expat)))
8408
8409(define-public python-parse-type
8410 (package
8411 (name "python-parse-type")
8412 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8413 ;; 3.12+; move back to git tag when released.
8414 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8415 (revision . "0")))
8416 (version (git-version "0.6.6"
8417 (assoc-ref properties 'revision)
8418 (assoc-ref properties 'commit)))
8419 (source
8420 (origin
8421 (method git-fetch)
8422 (uri (git-reference
8423 (url "https://github.com/jenisys/parse_type")
8424 (commit (assoc-ref properties 'commit))))
8425 (file-name (git-file-name name version))
8426 (sha256
8427 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8428 (build-system pyproject-build-system)
8429 (arguments
8430 (list
8431 ;; tests: 332 passed, 2 skipped
8432 #:phases
8433 #~(modify-phases %standard-phases
8434 (add-after 'unpack 'fix-pytest-config
8435 ;; To bypass options: --metadata, --html and --junit-xml.
8436 (lambda _
8437 (delete-file "pytest.ini"))))))
8438 (native-inputs
8439 (list python-pytest
8440 python-setuptools
8441 python-setuptools-scm))
8442 (propagated-inputs
8443 (list python-six ;hard dependency
8444 python-parse))
8445 (home-page "https://github.com/jenisys/parse_type")
8446 (synopsis "Extended parse module")
8447 (description "Parse_type extends the python parse module.")
8448 (license license:expat)))
8449
8450(define-public python-parse
8451 (package
8452 (name "python-parse")
8453 (version "1.20.2")
8454 (source
8455 (origin
8456 (method git-fetch)
8457 (uri (git-reference
8458 (url "https://github.com/r1chardj0n3s/parse")
8459 (commit version)))
8460 (file-name (git-file-name name version))
8461 (sha256
8462 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8463 (build-system pyproject-build-system)
8464 (native-inputs (list python-pytest python-setuptools))
8465 (home-page "https://github.com/r1chardj0n3s/parse")
8466 (synopsis "Parse strings")
8467 (description
8468 "Parse strings using a specification based on the Python @code{format()}
8469syntax.")
8470 (license license:x11)))
8471
8472(define-public python-parsley
8473 (package
8474 (name "python-parsley")
8475 (version "1.3")
8476 (source
8477 (origin
8478 (method git-fetch)
8479 (uri (git-reference
8480 (url "https://github.com/pyga/parsley")
8481 (commit version)))
8482 (file-name (git-file-name name version))
8483 (sha256
8484 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8485 (patches
8486 (list
8487 (origin
8488 (method url-fetch)
8489 (uri
8490 (string-append "https://github.com/pyga/parsley/commit/"
8491 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8492 (sha256
8493 (base32
8494 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8495 (build-system pyproject-build-system)
8496 (arguments
8497 (list
8498 #:test-flags #~(list "ometa/test" "terml/test")))
8499 (native-inputs
8500 (list python-pytest
8501 python-setuptools
8502 python-twisted))
8503 (home-page "https://launchpad.net/parsley")
8504 (synopsis "Parsing and pattern matching Python library")
8505 (description
8506 "Parsley is a parsing library using PEG algorithm, so each expression in
8507the grammar rules works like a Python expression. In particular, alternatives
8508are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8509Parsley is an implementation of OMeta, an object-oriented pattern-matching
8510language.")
8511 (license license:expat)))
8512
8513(define-public python-petl
8514 (package
8515 (name "python-petl")
8516 (version "1.7.16")
8517 (source
8518 (origin
8519 (method url-fetch)
8520 (uri (pypi-uri "petl" version))
8521 (sha256
8522 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8523 (build-system pyproject-build-system)
8524 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8525 python-pytest))
8526 (home-page "https://github.com/petl-developers/petl")
8527 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8528processing pipelines.")
8529 (description
8530 "This package provides a library for extracting, transforming and loading
8531tables of data. It can read from and write to databases or files in multiple
8532formats, including:
8533@itemize @bullet
8534@item python objects
8535@item delimited files
8536@item pickle files
8537@item text/XML/JSON/HTML files
8538@item python I/O streams
8539@item Excel XLS/XLSX files
8540@item HDF5 files
8541@end itemize")
8542 (license license:expat)))
8543
8544(define-public python-polib
8545 (package
8546 (name "python-polib")
8547 (version "1.2.0")
8548 (source
8549 (origin
8550 (method git-fetch)
8551 (uri (git-reference
8552 (url "https://github.com/izimobil/polib/")
8553 (commit version)))
8554 (file-name (git-file-name name version))
8555 (sha256
8556 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8557 (build-system pyproject-build-system)
8558 (arguments
8559 (list #:test-backend #~'custom
8560 #:test-flags #~(list "tests/tests.py")))
8561 (native-inputs (list python-setuptools))
8562 (home-page "https://github.com/izimobil/polib/")
8563 (synopsis "Manipulate, create and modify gettext files")
8564 (description
8565 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8566be used to create po files from scratch or to modify existing ones.")
8567 (license license:expat)))
8568
8569(define-public python-polling2
8570 (package
8571 (name "python-polling2")
8572 (version "0.5.0")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/ddmee/polling2")
8578 (commit (string-append "v" version))))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8582 (build-system pyproject-build-system)
8583 (arguments
8584 ;; XXX: Additional , in string comparison.
8585 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8586 (native-inputs (list python-mock python-pytest python-setuptools))
8587 (home-page "https://github.com/ddmee/polling2")
8588 (synopsis "Polling utility with many configurable options")
8589 (description "Polling2 is a utility used to wait for a function to return
8590a certain expected condition.")
8591 (license license:expat)))
8592
8593(define-public python-daft
8594 (package
8595 (name "python-daft")
8596 (version "0.1.2")
8597 (source (origin
8598 (method url-fetch)
8599 (uri (pypi-uri "daft" version))
8600 (sha256
8601 (base32
8602 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8603 (build-system pyproject-build-system)
8604 (arguments
8605 (list
8606 #:test-flags
8607 '(list "-k"
8608 (string-append
8609 ;; The following tests compare matplotlib output with
8610 ;; previously generated images. They fail due to minor
8611 ;; differences in where matplotlib places labels.
8612 "not test_bca[png]"
8613 " and not test_classic[png]"
8614 " and not test_deconvolution[png]"
8615 " and not test_exoplanets[png]"
8616 " and not test_fixed[png]"
8617 " and not test_gaia[png]"
8618 " and not test_galex[png]"
8619 " and not test_huey_p_newton[png]"
8620 " and not test_logo[png]"
8621 " and not test_no_circles[png]"
8622 " and not test_no_gray[png]"
8623 " and not test_recursive[png]"
8624 " and not test_thick_lines[png]"
8625 " and not test_weaklensing[png]"
8626 " and not test_wordy[png]"))))
8627 (native-inputs
8628 (list python-pytest
8629 python-setuptools
8630 python-wheel))
8631 (propagated-inputs (list python-matplotlib python-numpy))
8632 (home-page "https://docs.daft-pgm.org/")
8633 (synopsis "PGM rendering library")
8634 (description "Daft is a Python package that uses matplotlib to
8635render pixel-perfect probabilistic graphical models for publication in
8636a journal or on the internet. With a short Python script and an
8637intuitive model-building syntax you can design directed (Bayesian
8638Networks, directed acyclic graphs) and undirected (Markov random fields)
8639models and save them in any formats that matplotlib supports (including
8640PDF, PNG, EPS and SVG).")
8641 (license license:expat)))
8642
8643(define-public python-portalocker
8644 (package
8645 (name "python-portalocker")
8646 (version "2.7.0")
8647 (source (origin
8648 (method url-fetch)
8649 (uri (pypi-uri "portalocker" version))
8650 (sha256
8651 (base32
8652 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8653 (build-system pyproject-build-system)
8654 (native-inputs (list python-pytest
8655 python-pytest-timeout
8656 python-redis
8657 python-setuptools
8658 python-wheel))
8659 (home-page "https://github.com/WoLpH/portalocker")
8660 (synopsis "Python library for file locking")
8661 (description "Portalocker is a library to provide an easy API to file
8662locking..")
8663 (license license:bsd-3)))
8664
8665(define-public python-poyo
8666 (package
8667 (name "python-poyo")
8668 (version "0.5.0")
8669 (source
8670 (origin
8671 (method url-fetch)
8672 (uri (pypi-uri "poyo" version))
8673 (sha256
8674 (base32
8675 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8676 (build-system pyproject-build-system)
8677 (native-inputs
8678 (list python-pytest python-setuptools))
8679 (home-page "https://github.com/hackebrot/poyo")
8680 (synopsis "Lightweight YAML Parser for Python")
8681 (description
8682 "This package provides a lightweight YAML Parser for Python. It supports
8683only a chosen subset of the YAML format that is required to parse cookiecutter
8684user configuration files. It does not have support for serializing into YAML
8685and is not compatible with JSON.")
8686 (license license:expat)))
8687
8688(define-public python-expandvars
8689 (package
8690 (name "python-expandvars")
8691 (version "1.1.2")
8692 (source
8693 (origin
8694 (method url-fetch)
8695 (uri (pypi-uri "expandvars" version))
8696 (sha256
8697 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8698 (build-system pyproject-build-system)
8699 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8700 (native-inputs
8701 (list python-hatchling python-pytest))
8702 (home-page "https://pypi.org/project/expandvars/")
8703 (synopsis "Expand system variables Unix style")
8704 (description "This module is inspired by GNU bash's variable expansion
8705features. It can be used as an alternative to Python's
8706@code{os.path.expandvars} function. A good use case is reading config files
8707with the flexibility of reading values from environment variables using
8708advanced features like returning a default value if some variable is not
8709defined.")
8710 (license license:expat)))
8711
8712(define-public python-expiringdict
8713 (package
8714 (name "python-expiringdict")
8715 (version "1.2.2")
8716 (source
8717 (origin
8718 (method git-fetch)
8719 (uri (git-reference
8720 (url "https://github.com/mailgun/expiringdict")
8721 (commit (string-append "v" version))))
8722 (file-name (git-file-name name version))
8723 (sha256
8724 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8725 (build-system pyproject-build-system)
8726 (arguments
8727 ;; Started failing with [email protected], but it's only repr not functionality
8728 ;; so we should be fine.
8729 (list #:test-flags #~'("-v" "-e" "test_repr")))
8730 (native-inputs
8731 (list python-dill python-mock python-pynose python-setuptools))
8732 (home-page "https://github.com/mailgun/expiringdict")
8733 (synopsis "Dictionary with auto-expiring values for caching purposes")
8734 (description
8735 "This Python library provides an ordered dictionary
8736with a maximum capacity and auto-expiring values for caching purposes.
8737Expiration happens on any access, object is locked during cleanup
8738from expired values.")
8739 (license license:asl2.0)))
8740
8741(define-public python-extension-helpers
8742 (package
8743 (name "python-extension-helpers")
8744 (version "1.4.0")
8745 (source
8746 (origin
8747 (method git-fetch) ; no tests in the PyPI tarball
8748 (uri (git-reference
8749 (url "https://github.com/astropy/extension-helpers")
8750 (commit (string-append "v" version))))
8751 (file-name (git-file-name name version))
8752 (sha256
8753 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8754 (build-system pyproject-build-system)
8755 (arguments
8756 (list
8757 #:test-flags
8758 #~(list "--pyargs" "extension_helpers"
8759 "-k" (string-join
8760 ;; XXX: Tests try to check various compilation options and
8761 ;; fail with some incomparability or trying to download
8762 ;; missing modules.
8763 (list "not test_only_pyproject"
8764 "test_no_setup_py"
8765 "test_limited_api")
8766 " and not "))))
8767 (native-inputs
8768 (list python-pytest
8769 python-setuptools-scm))
8770 (propagated-inputs
8771 (list python-setuptools))
8772 (home-page "https://extension-helpers.readthedocs.io")
8773 (synopsis "Astropy ecosystem utilities for building and installing packages")
8774 (description
8775 "The extension-helpers package includes convenience helpers to assist
8776with building Python packages with compiled C/Cython extensions. It is
8777developed by the Astropy project but is intended to be general and usable by
8778any Python package.")
8779 (license license:bsd-3)))
8780
8781(define-public python-milc
8782 (package
8783 (name "python-milc")
8784 (version "1.9.1")
8785 (source
8786 (origin
8787 (method git-fetch) ;no tests in PyPI archive
8788 (uri (git-reference
8789 (url "https://github.com/clueboard/milc")
8790 (commit version)))
8791 (file-name (git-file-name name version))
8792 (sha256
8793 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
8794 (build-system pyproject-build-system)
8795 (native-inputs
8796 (list python-pytest
8797 python-semver
8798 python-setuptools))
8799 (propagated-inputs
8800 (list python-argcomplete
8801 python-colorama
8802 python-halo
8803 python-platformdirs
8804 python-spinners
8805 python-types-colorama))
8806 (home-page "https://github.com/clueboard/milc")
8807 (synopsis "Python library for command line interface programs")
8808 (description "MILC is a Python library for developing command line
8809interface programs. This library provides features to parse arguments,
8810automatic tab-completion, color support, logging to @code{std}, etc.")
8811 (license license:expat)))
8812
8813(define-public python-extract-dtb
8814 (package
8815 (name "python-extract-dtb")
8816 (version "1.2.3")
8817 (source
8818 (origin
8819 (method git-fetch)
8820 (uri (git-reference
8821 (url "https://github.com/PabloCastellano/extract-dtb/")
8822 (commit version)))
8823 (file-name (git-file-name name version))
8824 (sha256
8825 (base32
8826 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
8827 (build-system pyproject-build-system)
8828 (arguments
8829 (list #:tests? #f)) ;no tests
8830 (native-inputs
8831 (list python-setuptools))
8832 (home-page "https://github.com/PabloCastellano/extract-dtb/")
8833 (synopsis "Extract device tree blobs (DTB) from kernel images")
8834 (description
8835 "This package provides a tool to split a kernel image with appended
8836@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
8837 (license license:gpl3+)))
8838
8839(define-public python-mimeparse
8840 (package
8841 (name "python-mimeparse")
8842 (version "2.0.0")
8843 (source
8844 (origin
8845 (method url-fetch)
8846 (uri (pypi-uri "python_mimeparse" version))
8847 (sha256
8848 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
8849 (build-system pyproject-build-system)
8850 (native-inputs
8851 (list python-pytest
8852 python-setuptools))
8853 (home-page "https://github.com/falconry/python-mimeparse")
8854 (synopsis "Python library for parsing MIME types")
8855 (description
8856 "Mimeparse provides basic functions for parsing MIME type names and
8857matching them against a list of media-ranges.")
8858 (license license:expat)))
8859
8860(define-public python-miniboa
8861 (package
8862 (name "python-miniboa")
8863 (version "1.0.9")
8864 (source
8865 (origin
8866 (method git-fetch) ;no tests in PyPI archive
8867 (uri (git-reference
8868 (url "https://github.com/shmup/miniboa")
8869 (commit (string-append "v" version))))
8870 (file-name (git-file-name name version))
8871 (sha256
8872 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
8873 (build-system pyproject-build-system)
8874 (native-inputs
8875 (list python-pytest
8876 python-setuptools
8877 python-wheel))
8878 (home-page "https://github.com/shmup/miniboa")
8879 (synopsis "Simple, single-threaded Telnet server")
8880 (description
8881 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
8882server.")
8883 (license license:asl2.0)))
8884
8885(define-public python-mir-eval
8886 (package
8887 (name "python-mir-eval")
8888 (version "0.8.2")
8889 (source (origin
8890 (method git-fetch)
8891 (uri (git-reference
8892 (url "https://github.com/mir-evaluation/mir_eval")
8893 (commit version)))
8894 (file-name (git-file-name name version))
8895 (sha256
8896 (base32
8897 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
8898 (build-system pyproject-build-system)
8899 (arguments
8900 (list
8901 #:phases
8902 #~(modify-phases %standard-phases
8903 (add-before 'check 'cd-tests
8904 (lambda _
8905 ;; Move to 'tests' directory because tests read data files from
8906 ;; a relative path.
8907 (chdir "tests"))))))
8908 (propagated-inputs (list python-decorator python-numpy python-scipy))
8909 (native-inputs (list python-matplotlib
8910 python-pytest
8911 python-pytest-mpl
8912 python-setuptools
8913 python-wheel))
8914 (home-page "https://github.com/mir-evaluation/mir_eval")
8915 (synopsis "Common metrics for common audio/music processing tasks")
8916 (description "This is a Python library for computing common heuristic
8917accuracy scores for various music/audio information retrieval/signal
8918processing tasks.")
8919 (license license:expat)))
8920
8921(define-public python-mizani
8922 (package
8923 (name "python-mizani")
8924 (version "0.13.1")
8925 (source (origin
8926 (method git-fetch)
8927 (uri (git-reference
8928 (url "https://github.com/has2k1/mizani")
8929 (commit (string-append "v" version))))
8930 (file-name (git-file-name name version))
8931 (sha256
8932 (base32
8933 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
8934 (build-system pyproject-build-system)
8935 (propagated-inputs
8936 (list python-matplotlib python-numpy python-pandas python-scipy))
8937 (native-inputs
8938 (list python-setuptools
8939 python-setuptools-scm
8940 python-pytest
8941 python-wheel
8942 tzdata))
8943 (home-page "https://github.com/has2k1/mizani")
8944 (synopsis "Create data visualizations in Python")
8945 (description
8946 "Mizani is a Python package for creating data visualizations. It
8947provides functions and tools to help with the creation of visually appealing
8948and informative visualizations, including scales, transformations and color
8949palettes.")
8950 (license license:bsd-3)))
8951
8952(define-public python-miniupnpc
8953 (package
8954 (name "python-miniupnpc")
8955 (version "2.3.3")
8956 (source
8957 (origin
8958 (method git-fetch)
8959 (uri
8960 (git-reference
8961 ;; The project tags miniupnpd_ as well but with a different version,
8962 ;; where updater may select a wrong version.
8963 (url "https://github.com/miniupnp/miniupnp")
8964 (commit
8965 (string-append
8966 "miniupnpc_" (string-replace-substring version "." "_")))))
8967 (file-name
8968 (git-file-name name version))
8969 (sha256
8970 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
8971 (build-system pyproject-build-system)
8972 (arguments
8973 (list
8974 #:phases
8975 #~(modify-phases %standard-phases
8976 (add-after 'unpack 'subdir
8977 (lambda* (#:key inputs #:allow-other-keys)
8978 (chdir "miniupnpc")
8979 (setenv "CC" #$(cc-for-target))
8980 (substitute* "Makefile"
8981 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
8982 (add-before 'subdir 'remove-kernel-version
8983 ;; Avoid embedding the running kernel version for reproducible builds
8984 (lambda _
8985 (substitute*
8986 "miniupnpc/updateminiupnpcstrings.sh"
8987 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
8988 (replace 'check
8989 (lambda* (#:key tests? #:allow-other-keys)
8990 (when tests?
8991 (invoke "make" "check")))))))
8992 (native-inputs
8993 (list python-setuptools
8994 python-wheel))
8995 (inputs (list python)) ;we are building a Python extension
8996 (synopsis "UPnP client for Python")
8997 (description "Miniupnpc is a client library for Python programs to set up
8998port forwards using @acronym{UPnP, Universal Plug and Play}.")
8999 (home-page "http://miniupnp.free.fr")
9000 (license license:bsd-3)))
9001
9002;; NOTE: As taken from upstram: "this library is in maintenance mode and
9003;; should not be used in new code."
9004(define-public python-py
9005 (package
9006 (name "python-py")
9007 (version "1.11.0")
9008 (source
9009 (origin
9010 (method url-fetch)
9011 (uri (pypi-uri "py" version))
9012 (sha256
9013 (base32
9014 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
9015 (build-system pyproject-build-system)
9016 (arguments
9017 '(#:tests? #f)) ;cycle with python-pytest
9018 (native-inputs
9019 (list python-setuptools
9020 python-setuptools-scm
9021 python-wheel))
9022 (home-page "https://github.com/pytest-dev/py")
9023 (synopsis "Python library for parsing, I/O, introspection, and logging")
9024 (description
9025 "Py is a Python library for file name parsing, .ini file parsing, I/O,
9026code introspection, and logging.")
9027 (license license:expat)))
9028
9029(define-public python-pyrsistent
9030 (package
9031 (name "python-pyrsistent")
9032 (version "0.20.0")
9033 (home-page "https://github.com/tobgu/pyrsistent")
9034 (source (origin
9035 (method url-fetch)
9036 (uri (pypi-uri "pyrsistent" version))
9037 (sha256
9038 (base32
9039 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9040 (build-system pyproject-build-system)
9041 (native-inputs
9042 (list python-pytest python-setuptools python-wheel))
9043 (synopsis "Persistent data structures for Python")
9044 (description
9045 "Pyrsistent is a number of persistent collections (by some referred to as
9046functional data structures). Persistent in the sense that they are immutable.
9047
9048All methods on a data structure that would normally mutate it instead return a
9049new copy of the structure containing the requested updates. The original
9050structure is left untouched.")
9051 (license license:expat)))
9052
9053(define-public python-exif-read
9054 (package
9055 (name "python-exif-read")
9056 (version "3.3.2")
9057 (source
9058 (origin
9059 (method git-fetch) ;PyPI doesn't contain the test images
9060 (uri (git-reference
9061 (url "https://github.com/ianare/exif-py")
9062 (commit version)))
9063 (file-name (git-file-name name version))
9064 (sha256
9065 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9066 (build-system pyproject-build-system)
9067 (native-inputs (list python-pytest python-setuptools python-wheel))
9068 (home-page "https://github.com/ianare/exif-py")
9069 (synopsis "Python library to extract EXIF data from image files")
9070 (description
9071 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9072files.")
9073 (license license:bsd-3)))
9074
9075(define-public python-pyld
9076 (package
9077 (name "python-pyld")
9078 (version "2.0.4")
9079 (source
9080 (origin
9081 (method git-fetch)
9082 (uri (git-reference
9083 (url "https://github.com/digitalbazaar/pyld")
9084 ;; Not all tags have the 'v' prefix.
9085 (commit (string-append "v" version))))
9086 (file-name (git-file-name name version))
9087 (sha256
9088 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9089 (build-system pyproject-build-system)
9090 (arguments
9091 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9092 (list #:tests? #f))
9093 (native-inputs
9094 (list python-lxml
9095 python-setuptools))
9096 (propagated-inputs
9097 (list python-aiohttp
9098 python-cachetools
9099 python-frozendict
9100 python-requests))
9101 (home-page "https://github.com/digitalbazaar/pyld")
9102 (synopsis "Python implementation of the JSON-LD specification")
9103 (description "PyLD is an implementation of the JSON-LD specification.")
9104 (license license:bsd-3)))
9105
9106(define-public python-cli-helpers
9107 (package
9108 (name "python-cli-helpers")
9109 (version "2.7.0")
9110 (source
9111 (origin
9112 (method url-fetch)
9113 (uri (pypi-uri "cli_helpers" version))
9114 (sha256
9115 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9116 (build-system pyproject-build-system)
9117 (native-inputs
9118 (list python-pytest
9119 python-setuptools))
9120 (propagated-inputs
9121 (list python-configobj
9122 python-tabulate))
9123 (home-page "https://github.com/dbcli/cli_helpers")
9124 (synopsis "Helpers for building command-line apps")
9125 (description
9126 "CLI Helpers is a Python package that makes it easy to perform common
9127tasks when building command-line apps. It's a helper library for command-line
9128interfaces.")
9129 (license license:bsd-3)))
9130
9131(define-public python-click
9132 (package
9133 (name "python-click")
9134 (version "8.3.1")
9135 (source
9136 (origin
9137 (method git-fetch)
9138 (uri (git-reference
9139 (url "https://github.com/pallets/click")
9140 (commit version)))
9141 (file-name (git-file-name name version))
9142 (sha256
9143 (base32 "041w6s8w11za2jlws7sxvrcfmi0bvr354nq74wyb66gsk908idii"))))
9144 (build-system pyproject-build-system)
9145 (native-inputs
9146 (list less
9147 python-flit-core
9148 python-pytest))
9149 (home-page "https://palletsprojects.com/p/click/")
9150 (synopsis "Command line library for Python")
9151 (description
9152 "Click is a Python package for creating command line interfaces in a
9153composable way with as little code as necessary. Its name stands for
9154\"Command Line Interface Creation Kit\". It's highly configurable but comes
9155with sensible defaults out of the box.")
9156 (license license:bsd-3)))
9157
9158(define-public python-click-7
9159 (package (inherit python-click)
9160 (name "python-click")
9161 (version "7.1.2")
9162 (source
9163 (origin
9164 (method url-fetch)
9165 (uri (pypi-uri "click" version))
9166 (sha256
9167 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9168 (arguments (list #:tests? #f)) ;no tests in PyPI
9169 (native-inputs
9170 (list python-setuptools))))
9171
9172(define-public python-click-8.1
9173 (package
9174 (inherit python-click)
9175 (name "python-click")
9176 (version "8.1.7")
9177 (source
9178 (origin
9179 (method git-fetch)
9180 (uri (git-reference
9181 (url "https://github.com/pallets/click")
9182 (commit version)))
9183 (file-name (git-file-name name version))
9184 (sha256
9185 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9186 (native-inputs
9187 (list less
9188 python-pytest
9189 python-setuptools))))
9190
9191(define-public python-click-aliases
9192 (package
9193 (name "python-click-aliases")
9194 (version "1.0.6")
9195 (source
9196 (origin
9197 (method git-fetch)
9198 (uri (git-reference
9199 (url "https://github.com/click-contrib/click-aliases")
9200 (commit (string-append "v" version))))
9201 (file-name (git-file-name name version))
9202 (sha256
9203 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9204 (build-system pyproject-build-system)
9205 (native-inputs
9206 (list python-pytest
9207 python-poetry-core))
9208 (propagated-inputs
9209 (list python-click))
9210 (home-page "https://github.com/click-contrib/click-aliases")
9211 (synopsis "Enable aliases for Click")
9212 (description
9213 "This package helps to add (mutiple) aliases to a click group or command.")
9214 (license license:expat)))
9215
9216(define-public python-click-option-group
9217 (package
9218 (name "python-click-option-group")
9219 (version "0.5.9")
9220 (source
9221 (origin
9222 (method git-fetch)
9223 (uri (git-reference
9224 (url "https://github.com/click-contrib/click-option-group")
9225 (commit (string-append "v" version))))
9226 (file-name (git-file-name name version))
9227 (sha256
9228 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9229 (build-system pyproject-build-system)
9230 (native-inputs
9231 (list python-hatch-vcs
9232 python-hatchling
9233 python-pytest))
9234 (propagated-inputs
9235 (list python-click))
9236 (home-page "https://click-option-group.readthedocs.io/")
9237 (synopsis "Option groups missing in Click")
9238 (description
9239 "Click is a package for creating powerful and beautiful command line
9240interfaces (CLI) in Python, but it has no the functionality for creating option
9241groups. The aim of this package is to provide group options with extensible
9242functionality using canonical and clean API (Click-like API as far as
9243possible).")
9244 (license license:bsd-3)))
9245
9246(define-public python-clickgen
9247 (package
9248 (name "python-clickgen")
9249 (version "2.2.5")
9250 (source (origin
9251 (method git-fetch)
9252 (uri (git-reference
9253 (url "https://github.com/ful1e5/clickgen")
9254 (commit (string-append "v" version))))
9255 (file-name (git-file-name name version))
9256 (sha256
9257 (base32
9258 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9259 (build-system pyproject-build-system)
9260 (arguments
9261 (list
9262 #:test-flags
9263 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9264 '(list "-k" "not test_clickgen_raises")))
9265 (native-inputs
9266 (list python-pytest
9267 python-setuptools))
9268 (propagated-inputs
9269 (list python-attrs
9270 python-numpy
9271 python-pillow
9272 python-pyyaml
9273 python-toml))
9274 (home-page "https://github.com/ful1e5/clickgen")
9275 (synopsis "The hassle-free cursor building toolbox")
9276 (description
9277 "Clickgen is an API for building X11 and Windows cursors from .png files.
9278clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9279 (license license:expat)))
9280
9281(define-public python-clickhouse-connect
9282 (package
9283 (name "python-clickhouse-connect")
9284 (version "0.6.1")
9285 (source (origin
9286 (method git-fetch)
9287 (uri (git-reference
9288 (url "https://github.com/ClickHouse/clickhouse-connect")
9289 (commit (string-append "v" version))))
9290 (file-name (git-file-name name version))
9291 (sha256
9292 (base32
9293 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9294 (build-system pyproject-build-system)
9295 (arguments
9296 (list
9297 #:test-flags
9298 ;; All these tests require docker-compose
9299 '(list "--ignore-glob=tests/integration_tests/*")
9300 #:phases
9301 '(modify-phases %standard-phases
9302 (add-after 'unpack 'patch-pyproject
9303 (lambda _
9304 ;; Our version of pytest is confused by this field.
9305 (substitute* "pyproject.toml"
9306 (("^env_files.*") ""))))
9307 (add-before 'check 'build-extensions
9308 (lambda _
9309 ;; Cython extensions have to be built before running the tests.
9310 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9311 (propagated-inputs
9312 (list python-arrow
9313 python-certifi
9314 python-lz4
9315 python-numpy
9316 python-orjson
9317 python-pandas
9318 python-pytz
9319 python-setuptools ; For pkg_resources.
9320 python-sqlalchemy
9321 python-urllib3
9322 python-zstandard))
9323 (native-inputs
9324 (list python-cython
9325 python-pytest
9326 python-wheel))
9327 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9328 (synopsis
9329 "ClickHouse database core driver for Python, Pandas, and Superset")
9330 (description
9331 "This package provides a high performance core database driver for
9332connecting ClickHouse to Python, Pandas, and Superset.")
9333 (license license:asl2.0)))
9334
9335(define-public python-cligj
9336 (package
9337 (name "python-cligj")
9338 (version "0.7.2")
9339 (source
9340 (origin
9341 (method url-fetch)
9342 (uri (pypi-uri "cligj" version))
9343 (sha256
9344 (base32
9345 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9346 (build-system pyproject-build-system)
9347 (native-inputs
9348 (list python-pytest
9349 python-setuptools))
9350 (propagated-inputs
9351 (list python-click))
9352 (home-page "https://github.com/mapbox/cligj")
9353 (synopsis "Click params for command line interfaces to GeoJSON")
9354 (description
9355 "cligj is for Python developers who create command line interfaces
9356for geospatial data. cligj allows you to quickly build consistent,
9357well-tested and interoperable CLIs for handling GeoJSON.")
9358 (license license:bsd-3)))
9359
9360(define-public python-cloup
9361 (package
9362 (name "python-cloup")
9363 (version "3.0.8")
9364 (source (origin
9365 (method url-fetch)
9366 (uri (pypi-uri "cloup" version))
9367 (sha256
9368 (base32
9369 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9370 (build-system pyproject-build-system)
9371 (propagated-inputs (list python-click))
9372 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9373 (home-page "https://github.com/janLuke/cloup")
9374 (synopsis "Extension library for python-click")
9375 (description
9376 "Cloup enriches Click with several features that make it more expressive
9377and configurable such as option groups, constraints, subcommand aliases,
9378subcommands sections and a themeable HelpFormatter.")
9379 (license license:bsd-3)))
9380
9381(define-public python-jsondiff
9382 (package
9383 (name "python-jsondiff")
9384 (version "2.2.1")
9385 (source
9386 (origin
9387 (method url-fetch)
9388 (uri (pypi-uri "jsondiff" version))
9389 (sha256
9390 (base32
9391 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9392 (build-system pyproject-build-system)
9393 (arguments
9394 (list
9395 #:phases
9396 #~(modify-phases %standard-phases
9397 (add-before 'build 'set-version
9398 (lambda _
9399 (substitute* "pyproject.toml"
9400 (("^version_file.*") "")
9401 (("dynamic = \\[\"version\"\\]")
9402 (string-append "version = \"" #$version "\""))))))))
9403 (propagated-inputs (list python-pyyaml))
9404 (native-inputs
9405 (list python-hypothesis
9406 python-pytest
9407 python-setuptools
9408 python-setuptools-scm
9409 python-wheel))
9410 (home-page "https://github.com/fzumstein/jsondiff")
9411 (synopsis "Compare JSON and JSON-like structures in Python")
9412 (description "@code{jsondiff} is a Python library which lets you compare,
9413diff, and patch JSON and JSON-like structures in Python.")
9414 (license license:expat)))
9415
9416(define-public python-ddlparse
9417 (package
9418 (name "python-ddlparse")
9419 (version "1.10.0")
9420 (source
9421 (origin
9422 (method url-fetch)
9423 (uri (pypi-uri "ddlparse" version))
9424 (sha256
9425 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9426 (build-system pyproject-build-system)
9427 (native-inputs
9428 (list python-pytest python-setuptools))
9429 (propagated-inputs (list python-pyparsing))
9430 (home-page "https://github.com/shinichi-takii/ddlparse")
9431 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9432 (description "This package provides @code{ddlparse}, a Python library to parse
9433and convert DDL to BigQuery JSON schema.")
9434 (license license:bsd-3)))
9435
9436(define-public python-jsonschema
9437 (package
9438 (name "python-jsonschema")
9439 (version "4.23.0")
9440 (source
9441 (origin
9442 (method url-fetch)
9443 (uri (pypi-uri "jsonschema" version))
9444 (sha256
9445 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
9446 (build-system pyproject-build-system)
9447 (arguments
9448 (list
9449 #:phases
9450 #~(modify-phases %standard-phases
9451 (add-before 'check 'pre-check
9452 (lambda _
9453 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9454 (native-inputs
9455 (list python-hatchling
9456 python-hatch-fancy-pypi-readme
9457 python-hatch-vcs
9458 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
9459 python-pip
9460 python-pytest))
9461 (propagated-inputs
9462 (list python-attrs
9463 python-fqdn
9464 python-idna
9465 python-importlib-resources
9466 python-isoduration
9467 python-jsonpointer
9468 python-jsonschema-specifications
9469 python-rfc3339-validator
9470 python-rfc3986-validator
9471 python-referencing-bootstrap
9472 python-rpds-py
9473 python-uri-template
9474 python-webcolors))
9475 (home-page "https://github.com/Julian/jsonschema")
9476 (synopsis "Implementation of JSON Schema for Python")
9477 (description
9478 "Jsonschema is an implementation of JSON Schema for Python.")
9479 (license license:expat)))
9480
9481;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9482;; version.
9483(define-public python-jsonschema-3
9484 (package
9485 (inherit python-jsonschema)
9486 (version "3.2.0")
9487 (source (origin
9488 (method url-fetch)
9489 (uri (pypi-uri "jsonschema" version))
9490 (sha256
9491 (base32
9492 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9493 (arguments
9494 (substitute-keyword-arguments arguments
9495 ((#:tests? _ #t) #f)))
9496 (propagated-inputs
9497 (list python-attrs
9498 python-pyrsistent
9499 python-typing-extensions))
9500 (native-inputs
9501 (list python-setuptools-scm python-twisted
9502 python-setuptools python-wheel))))
9503
9504(define-public python-jsonschema-path
9505 (package
9506 (name "python-jsonschema-path")
9507 (version "0.3.2")
9508 (source
9509 (origin
9510 (method url-fetch)
9511 (uri (pypi-uri "jsonschema_path" version))
9512 (sha256
9513 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9514 (build-system pyproject-build-system)
9515 (arguments
9516 (list
9517 #:tests? #false ;there are none
9518 #:phases
9519 '(modify-phases %standard-phases
9520 (add-after 'unpack 'relax-requirements
9521 (lambda _
9522 (substitute* "pyproject.toml"
9523 (("referencing = \">=0.28.0,<0.32.0\"")
9524 "referencing = \">=0.28.0\"")))))))
9525 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9526 python-requests))
9527 (native-inputs (list python-poetry-core))
9528 (home-page "https://github.com/p1c2u/jsonschema-path")
9529 (synopsis "JSONSchema Spec with object-oriented paths")
9530 (description "This package implements object-oriented JSONSchema. It lets
9531you traverse a schema like paths and access a schema on demand with separate
9532dereferencing accessor layer.")
9533 (license license:asl2.0)))
9534
9535(define-public python-jsonschema-objects
9536 (package
9537 (name "python-jsonschema-objects")
9538 (version "0.5.7")
9539 (source
9540 (origin
9541 (method git-fetch)
9542 (uri (git-reference
9543 (url "https://github.com/cwacek/python-jsonschema-objects/")
9544 (commit version)))
9545 (file-name (git-file-name name version))
9546 (sha256
9547 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9548 (build-system pyproject-build-system)
9549 (native-inputs
9550 (list python-pytest
9551 python-pytest-mock
9552 python-setuptools))
9553 (propagated-inputs
9554 (list python-inflection
9555 python-jsonschema
9556 python-markdown))
9557 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9558 (synopsis "Automatic Python binding generation from JSON schemas")
9559 (description
9560 "This package provides an automatic class-based binding to JSON
9561Schemas for use in python.")
9562 (license license:expat)))
9563
9564(define-public python-jsonschema-specifications
9565 (package
9566 (name "python-jsonschema-specifications")
9567 (version "2024.10.1")
9568 (source
9569 (origin
9570 (method url-fetch)
9571 (uri (pypi-uri "jsonschema_specifications" version))
9572 (sha256
9573 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
9574 (build-system pyproject-build-system)
9575 (native-inputs
9576 (list python-hatch-vcs
9577 python-hatchling
9578 python-pytest))
9579 (propagated-inputs
9580 (list python-importlib-resources
9581 python-referencing-bootstrap))
9582 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9583 (synopsis
9584 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9585 (description
9586 "This package provides JSON support files from the JSON Schema
9587Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9588from Python as a referencing-based Schema Registry.")
9589 (license license:expat)))
9590
9591(define-public python-schema
9592 (package
9593 (name "python-schema")
9594 (version "0.7.8")
9595 (source
9596 (origin
9597 (method git-fetch)
9598 (uri (git-reference
9599 (url "https://github.com/keleshev/schema")
9600 (commit (string-append "v" version))))
9601 (file-name (git-file-name name version))
9602 (sha256
9603 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9604 (build-system pyproject-build-system)
9605 (native-inputs
9606 (list python-pytest python-setuptools))
9607 (home-page "https://github.com/keleshev/schema")
9608 (synopsis "Simple data validation library")
9609 (description
9610 "@code{python-schema} is a library for validating Python data
9611structures, such as those obtained from config-files, forms, external
9612services or command-line parsing, converted from JSON/YAML (or
9613something else) to Python data-types.")
9614 (license license:psfl)))
9615
9616(define-public python-kitchen
9617 (package
9618 (name "python-kitchen")
9619 (version "1.2.6")
9620 (source
9621 (origin
9622 (method git-fetch)
9623 (uri (git-reference
9624 (url "https://github.com/fedora-infra/kitchen")
9625 (commit version)))
9626 (file-name (git-file-name name version))
9627 (sha256
9628 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9629 (build-system pyproject-build-system)
9630 (arguments
9631 (list
9632 #:test-flags
9633 #~(list "kitchen3"
9634 ;; XXX: Unclear why these tests fail.
9635 "-e" "test_invalid_fallback_no_raise"
9636 "-e" "test_internal_generate_combining_table"
9637 "-e" "test_lgettext"
9638 "-e" "test_lngettext"
9639 "-e" "test_easy_gettext_setup_non_unicode")
9640 #:phases
9641 #~(modify-phases %standard-phases
9642 (add-before 'check 'delete-broken-test-files
9643 (lambda _
9644 (delete-file "kitchen3/tests/test__all__.py")
9645 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9646 (native-inputs (list python-pynose python-setuptools))
9647 (home-page "https://github.com/fedora-infra/kitchen")
9648 (synopsis "Python API for snippets")
9649 (description
9650 "@code{kitchen} module provides a python API for all sorts of little
9651useful snippets of code that everybody ends up writing for their projects but
9652never seem big enough to build an independent release. Use kitchen and stop
9653cutting and pasting that code over and over.")
9654 (license (list license:lgpl2.1+
9655 ;; subprocess.py, test_subprocess.py,
9656 ;; kitchen/pycompat25/defaultdict.py:
9657 license:psfl))))
9658
9659(define-public python-roman
9660 (package
9661 (name "python-roman")
9662 (version "5.2")
9663 (source
9664 (origin
9665 (method git-fetch)
9666 (uri (git-reference
9667 (url "https://github.com/zopefoundation/roman")
9668 (commit version)))
9669 (file-name (git-file-name name version))
9670 (sha256
9671 (base32
9672 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9673 (build-system pyproject-build-system)
9674 (arguments
9675 (list
9676 #:test-backend #~'unittest
9677 #:test-flags #~(list "discover" "-s" "src")))
9678 (native-inputs (list python-setuptools))
9679 (home-page "https://github.com/zopefoundation/roman")
9680 (synopsis "Integer to Roman numerals converter")
9681 (description
9682 "This package provides a small helper library to convert Arabic Numbers
9683to Roman Numerals.")
9684 (license license:zpl2.1)))
9685
9686(define-public python-rollbar
9687 (package
9688 (name "python-rollbar")
9689 (version "1.3.0")
9690 (source (origin
9691 (method url-fetch)
9692 (uri (pypi-uri "rollbar" version))
9693 (sha256
9694 (base32
9695 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9696 (build-system pyproject-build-system)
9697 (native-inputs (list python-httpx
9698 python-pytest
9699 python-setuptools
9700 python-webob
9701 python-wheel))
9702 (inputs (list python-requests))
9703 (home-page "https://github.com/rollbar/pyrollbar")
9704 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9705 (description
9706 "Python SDK for reporting exceptions, errors, and log messages
9707to @url{https://rollbar.com/, Rollbar}.
9708
9709Capabilities include:
9710
9711@itemize @bullet
9712@item Sending messages and exceptions with arbitrary context
9713@item Getting back aggregates
9714@item Debugging production issues
9715@end itemize")
9716 (license license:expat)))
9717
9718(define-public python-pyjwt
9719 (package
9720 (name "python-pyjwt")
9721 (version "2.10.1")
9722 (source
9723 (origin
9724 (method url-fetch)
9725 (uri (pypi-uri "pyjwt" version))
9726 (sha256
9727 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9728 (build-system pyproject-build-system)
9729 (arguments
9730 (list
9731 ;; tests: 286 passed, 4 skipped, 1 deselected
9732 ;;
9733 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9734 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9735 ;; resolution>"
9736 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9737 (native-inputs
9738 (list python-pytest
9739 python-setuptools))
9740 (propagated-inputs
9741 (if (supported-package? python-cryptography)
9742 (list python-cryptography)
9743 '()))
9744 (home-page "https://github.com/progrium/pyjwt")
9745 (synopsis "JSON Web Token implementation in Python")
9746 (description
9747 "PyJWT is a JSON Web Token implementation written in Python.")
9748 (license license:expat)))
9749
9750(define-public python-pymsgbox
9751 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9752 (revision "1"))
9753 (package
9754 (name "python-pymsgbox")
9755 (version (git-version "1.0.6" revision commit))
9756 (source
9757 (origin
9758 (method git-fetch)
9759 (uri (git-reference
9760 (url "https://github.com/asweigart/PyMsgBox")
9761 (commit commit)))
9762 (file-name (git-file-name name version))
9763 (sha256
9764 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
9765 (build-system pyproject-build-system)
9766 (arguments
9767 ;; Circular dependency to run tests:
9768 ;; Tests need pyautogui, which depends on pymsgbox.
9769 '(#:tests? #f))
9770 (native-inputs (list python-setuptools python-wheel))
9771 (home-page "https://github.com/asweigart/PyMsgBox")
9772 (synopsis "Python module for JavaScript-like message boxes")
9773 (description
9774 "PyMsgBox is a simple, cross-platform, pure Python module for
9775JavaScript-like message boxes. Types of dialog boxes include:
9776@enumerate
9777@item alert
9778@item confirm
9779@item prompt
9780@item password
9781@end enumerate
9782")
9783 (license license:bsd-3))))
9784
9785(define-public python-pympler
9786 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
9787 (revision "0"))
9788 (package
9789 (name "python-pympler")
9790 (version (git-version "1.1" revision commit))
9791 (source
9792 (origin
9793 (method git-fetch)
9794 (uri (git-reference
9795 (url "https://github.com/pympler/pympler")
9796 (commit commit)))
9797 (file-name (git-file-name name version))
9798 (sha256
9799 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
9800 (build-system pyproject-build-system)
9801 (arguments
9802 (list
9803 #:tests? #f ;FIXME: tests timeout.
9804 #:test-flags
9805 #~(list
9806 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
9807 ;; != 'function (muppy.test_summary.func)'.
9808 ;; See <https://github.com/pympler/pympler/issues/134>.
9809 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
9810 ;; This test times out.
9811 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback")))
9812 (native-inputs
9813 (list python-pytest python-setuptools))
9814 (home-page "https://pythonhosted.org/Pympler/")
9815 (synopsis "Measure, monitor and analyze memory behavior")
9816 (description
9817 "Pympler is a development tool to measure, monitor and analyze
9818the memory behavior of Python objects in a running Python application.
9819
9820By pympling a Python application, detailed insight in the size and the
9821lifetime of Python objects can be obtained. Undesirable or unexpected
9822runtime behavior like memory bloat and other @samp{pymples} can easily
9823be identified.
9824
9825A web profiling frontend exposes process statistics, garbage
9826visualisation and class tracker statistics.")
9827 (license license:asl2.0))))
9828
9829(define-public python-itsdangerous
9830 (package
9831 (name "python-itsdangerous")
9832 (version "2.2.0")
9833 (source
9834 (origin
9835 (method url-fetch)
9836 (uri (pypi-uri "itsdangerous" version))
9837 (sha256
9838 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
9839 (build-system pyproject-build-system)
9840 (native-inputs
9841 (list python-flit-core
9842 python-freezegun
9843 python-pytest))
9844 (home-page "https://palletsprojects.com/p/itsdangerous/")
9845 (synopsis "Python library for passing data to/from untrusted environments")
9846 (description
9847 "Itsdangerous provides various helpers to pass trusted data to untrusted
9848environments and back.")
9849 (license license:bsd-3)))
9850
9851;; WARNING: This package is a dependency of mesa.
9852(define-public python-pyyaml
9853 (package
9854 (name "python-pyyaml")
9855 (version "6.0.2")
9856 (source
9857 (origin
9858 (method url-fetch)
9859 (uri (pypi-uri "PyYAML" version))
9860 (sha256
9861 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
9862 (build-system pyproject-build-system)
9863 (native-inputs
9864 (list python-cython
9865 python-pytest
9866 python-setuptools
9867 python-wheel))
9868 (inputs
9869 (list libyaml))
9870 (home-page "https://pyyaml.org")
9871 (synopsis "YAML parser and emitter for Python")
9872 (description
9873 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
9874complete YAML 1.1 parser, Unicode support, pickle support, capable extension
9875API, and sensible error messages. PyYAML supports standard YAML tags and
9876provides Python-specific tags that represent an arbitrary Python object.")
9877 (license license:expat)))
9878
9879(define-public python-crossenv
9880 (package
9881 (name "python-crossenv")
9882 (version "1.6.1")
9883 (source
9884 (origin
9885 (method git-fetch)
9886 (uri (git-reference
9887 (url "https://github.com/benfogle/crossenv")
9888 (commit (string-append "v" version))))
9889 (file-name (git-file-name name version))
9890 (sha256
9891 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
9892 (build-system pyproject-build-system)
9893 (arguments
9894 (list
9895 ;; XXX: Running test require setting environment variables for
9896 ;; architectures.
9897 #:tests? #f))
9898 (native-inputs (list python-hatchling))
9899 (home-page "https://github.com/benfogle/crossenv")
9900 (synopsis "Cross-compiling virtualenv for Python")
9901 (description
9902 "This package is a tool for cross-compiling extension modules. It
9903creates a special virtual environment such that @command{pip} or
9904@file{setup.py} will cross compile packages for you, usually with no further
9905work on your part.")
9906 (license license:expat)))
9907
9908(define-public python-linkify-it-py
9909 (package
9910 (name "python-linkify-it-py")
9911 (version "2.0.0")
9912 (source (origin
9913 (method git-fetch) ;for tests
9914 (uri (git-reference
9915 (url "https://github.com/tsutsu3/linkify-it-py")
9916 (commit (string-append "v" version))))
9917 (file-name (git-file-name name version))
9918 (sha256
9919 (base32
9920 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
9921 (build-system pyproject-build-system)
9922 (propagated-inputs (list python-uc-micro-py))
9923 (native-inputs (list python-pytest python-setuptools python-wheel))
9924 (home-page "https://github.com/tsutsu3/linkify-it-py")
9925 (synopsis "Links recognition library with full Unicode support")
9926 (description "This is Python port of
9927@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
9928recognition library with full Unicode support. It has features like:
9929@itemize
9930@item Full unicode support, with @i{astral} characters
9931@item International domains support
9932@item Allows rules extension and custom normalizers.
9933@end itemize")
9934 (license license:expat)))
9935
9936(define-public python-makefun
9937 (package
9938 (name "python-makefun")
9939 ;; Released version fails tests in Python 3.12 due to asyncio
9940 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
9941 (revision . "0")))
9942 (version (git-version "1.16.0"
9943 (assoc-ref properties 'revision)
9944 (assoc-ref properties 'commit)))
9945 (source
9946 (origin
9947 (method git-fetch)
9948 (uri (git-reference
9949 (url "https://github.com/smarie/python-makefun")
9950 (commit (assoc-ref properties 'commit))))
9951 (file-name (git-file-name name version))
9952 (sha256
9953 (base32
9954 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
9955 (build-system pyproject-build-system)
9956 (native-inputs
9957 (list python-pytest
9958 python-pytest-asyncio
9959 python-setuptools
9960 python-setuptools-scm))
9961 (home-page "https://github.com/smarie/python-makefun")
9962 (synopsis "Library to dynamically create python functions")
9963 (description "@code{makefun} helps create functions dynamically with a
9964given signature. It was largely inspired by @code{python-decorator} and
9965@code{functools}.")
9966 (license license:bsd-3)))
9967
9968(define-public python-markdown-it-py
9969 (package
9970 (name "python-markdown-it-py")
9971 (version "4.0.0")
9972 (source
9973 (origin
9974 (method git-fetch)
9975 (uri (git-reference
9976 (url "https://github.com/executablebooks/markdown-it-py")
9977 (commit (string-append "v" version))))
9978 (file-name (git-file-name name version))
9979 (sha256
9980 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
9981 (build-system pyproject-build-system)
9982 (arguments (list #:test-flags #~(list "--benchmark-disable")))
9983 (native-inputs
9984 (list python-flit-core
9985 python-pytest
9986 python-pytest-benchmark
9987 python-pytest-regressions
9988 python-requests))
9989 (propagated-inputs
9990 (list python-commonmark
9991 python-linkify-it-py
9992 python-markdown
9993 python-mdurl
9994 python-mistletoe
9995 python-mistune
9996 python-panflute
9997 python-pyyaml))
9998 (home-page "https://github.com/executablebooks/markdown-it-py")
9999 (synopsis "Python port of markdown-it")
10000 (description
10001 "This is a Python port of @code{markdown-it}, and some of its associated
10002plugins. The driving design philosophy of the port has been to change as
10003little of the fundamental code structure (file names, function name, etc) as
10004possible.")
10005 (license license:expat)))
10006
10007(define-public python-markupsafe
10008 (package
10009 (name "python-markupsafe")
10010 (version "3.0.3")
10011 (source
10012 (origin
10013 (method url-fetch)
10014 (uri (pypi-uri "markupsafe" version))
10015 (sha256
10016 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10017 (build-system pyproject-build-system)
10018 ;; tests: 79 passed, 1 skipped
10019 (native-inputs
10020 (list python-pytest
10021 python-setuptools))
10022 (home-page "https://markupsafe.palletsprojects.com")
10023 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10024 (description
10025 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10026for Python.")
10027 (license license:bsd-3)))
10028
10029(define-public python-jinja2
10030 (package
10031 (name "python-jinja2")
10032 (version "3.1.2")
10033 (source
10034 (origin
10035 (method url-fetch)
10036 (uri (pypi-uri "Jinja2" version))
10037 (sha256
10038 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
10039 (build-system pyproject-build-system)
10040 (native-inputs (list python-pytest python-setuptools python-wheel))
10041 (propagated-inputs (list python-markupsafe))
10042 (home-page "https://jinja.palletsprojects.com/")
10043 (synopsis "Python template engine")
10044 (description
10045 "Jinja2 is a small but fast and easy to use stand-alone template engine
10046written in pure Python.")
10047 (license license:bsd-3)))
10048
10049(define-public python-jinja2-fragments
10050 (package
10051 (name "python-jinja2-fragments")
10052 (version "1.11.0")
10053 (source
10054 (origin
10055 (method git-fetch)
10056 (uri (git-reference
10057 (url "https://github.com/sponsfreixes/jinja2-fragments")
10058 (commit version)))
10059 (file-name (git-file-name name version))
10060 (sha256
10061 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10062 (patches
10063 ;; Remove test setup code related to `litestar` and `sanic`
10064 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10065 (build-system pyproject-build-system)
10066 (arguments
10067 (list
10068 #:test-flags
10069 #~(list "--ignore=tests/test_litestar.py"
10070 "--ignore=tests/test_sanic.py")))
10071 (native-inputs
10072 (list python-fastapi
10073 python-flask
10074 python-pytest
10075 python-pytest-asyncio
10076 python-quart
10077 python-setuptools))
10078 (propagated-inputs
10079 (list python-jinja2))
10080 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10081 (synopsis "Jinja2 extension for template fragments")
10082 (description
10083 "Render Jinja2 template block as HTML page fragments on Python web
10084frameworks.")
10085 (license license:expat)))
10086
10087(define-public python-pypugjs
10088 (package
10089 (name "python-pypugjs")
10090 (version "5.12.0")
10091 (source
10092 (origin
10093 (method git-fetch)
10094 (uri (git-reference
10095 (url "https://github.com/kakulukia/pypugjs")
10096 (commit (string-append "v" version))))
10097 (file-name (git-file-name name version))
10098 (sha256
10099 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10100 (build-system pyproject-build-system)
10101 (native-inputs (list python-django
10102 python-jinja2
10103 python-flask
10104 python-mako
10105 python-poetry-core
10106 python-pytest
10107 python-tornado))
10108 (propagated-inputs (list python-charset-normalizer python-six))
10109 (home-page "https://github.com/kakulukia/pypugjs")
10110 (synopsis "Convert Pug source files into different template languages")
10111 (description
10112 "PyPugJS is a high-performance port of PugJS for Python, that converts
10113any @file{.pug} source into different template languages: Django, Jinja2,
10114Mako, and Tornado.")
10115 (license license:expat))) ;; MIT
10116
10117(define-public python-pysrt
10118 (package
10119 (name "python-pysrt")
10120 (version "1.1.2")
10121 (source
10122 (origin
10123 (method git-fetch)
10124 (uri (git-reference
10125 (url "https://github.com/byroot/pysrt")
10126 (commit (string-append "v" version))))
10127 (file-name (git-file-name name version))
10128 (sha256
10129 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10130 (build-system pyproject-build-system)
10131 (arguments
10132 (list
10133 #:test-backend #~'unittest
10134 #:phases
10135 #~(modify-phases %standard-phases
10136 (add-after 'unpack 'fix-python-incompatibilities
10137 (lambda _
10138 (substitute* (find-files "tests" "\\.py$")
10139 (("assertEquals") "assertEqual")))))))
10140 (propagated-inputs (list python-chardet))
10141 (native-inputs (list python-setuptools))
10142 (home-page "https://github.com/byroot/pysrt")
10143 (synopsis "SubRip Text subtitle parser and writer")
10144 (description
10145 "This package provides a Python library to edit or create
10146SubRip Text files, and additionally a command-line program @command{srt}
10147to shift, split or rescale them.")
10148 (license license:gpl3+)))
10149
10150(define-public python-pystache
10151 (package
10152 (name "python-pystache")
10153 (version "0.6.8")
10154 (source (origin
10155 (method url-fetch)
10156 (uri (pypi-uri "pystache" version))
10157 (sha256
10158 (base32
10159 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10160 (build-system pyproject-build-system)
10161 (native-inputs (list python-pytest python-setuptools python-wheel))
10162 (home-page "http://defunkt.io/pystache/")
10163 (synopsis "Python logic-less template engine")
10164 (description
10165 "Pystache is a Python implementation of the framework agnostic,
10166logic-free templating system Mustache.")
10167 (license license:expat)))
10168
10169(define-public python-pystack
10170 (package
10171 (name "python-pystack")
10172 (version "1.5.1")
10173 (source
10174 (origin
10175 (method git-fetch)
10176 (uri (git-reference
10177 (url "https://github.com/bloomberg/pystack")
10178 (commit (string-append "v" version))))
10179 (file-name (git-file-name name version))
10180 (sha256
10181 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10182 (build-system pyproject-build-system)
10183 (arguments
10184 (list
10185 ;; Integration tests need ptrace and gcore (gdb).
10186 #:test-flags #~(list "tests/unit")))
10187 (native-inputs
10188 (list python-cython
10189 python-pkgconfig
10190 python-pytest
10191 python-setuptools))
10192 (inputs
10193 (list elfutils))
10194 (home-page "https://github.com/bloomberg/pystack")
10195 (synopsis "Python stack trace analyzer for core dumps and live processes")
10196 (description
10197 "PyStack analyzes stack frames of running Python processes or Python core
10198dumps. It can inspect what a process is doing or what it was doing when it
10199crashed, without modifying any memory or executing code in the target process.")
10200 (license license:asl2.0)))
10201
10202(define-public python-pystitcher
10203 (package
10204 (name "python-pystitcher")
10205 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10206 (revision . "0")
10207 (upstream-version . "1.0.5")))
10208 (version (git-version (assoc-ref properties 'upstream-version)
10209 (assoc-ref properties 'revision)
10210 (assoc-ref properties 'commit)))
10211 (source
10212 (origin
10213 (method git-fetch)
10214 (uri (git-reference
10215 (url "https://github.com/captn3m0/pystitcher")
10216 (commit (assoc-ref properties 'commit))))
10217 (file-name (git-file-name name version))
10218 (sha256
10219 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10220 (build-system pyproject-build-system)
10221 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10222 (inputs (list python-html5lib
10223 python-markdown
10224 python-pypdf
10225 python-validators))
10226 (home-page "https://github.com/captn3m0/pystitcher")
10227 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10228 (description
10229 "This package stitches your PDF files together, generating customizable
10230bookmarks using a declarative input in the form of a markdown file.")
10231 (license license:expat)))
10232
10233(define-public python-joblib
10234 (package
10235 (name "python-joblib")
10236 (version "1.5.2")
10237 (source
10238 (origin
10239 (method url-fetch)
10240 (uri (pypi-uri "joblib" version))
10241 (sha256
10242 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
10243 (build-system pyproject-build-system)
10244 (arguments
10245 (list
10246 #:test-flags
10247 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10248 ;; Disabled to avoid having to depend on ipython/jupyter.
10249 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10250 (native-inputs
10251 (list python-pytest
10252 python-pytest-asyncio
10253 python-pytest-xdist
10254 python-setuptools
10255 python-wheel))
10256 (home-page "https://joblib.readthedocs.io/")
10257 (synopsis "Using Python functions as pipeline jobs")
10258 (description
10259 "Joblib is a set of tools to provide lightweight pipelining in Python.
10260In particular, joblib offers: transparent disk-caching of the output values
10261and lazy re-evaluation (memoize pattern), easy simple parallel computing
10262logging and tracing of the execution.")
10263 (license license:bsd-3)))
10264
10265(define-public python-daemon
10266 (package
10267 (name "python-daemon")
10268 (version "3.1.2")
10269 (source
10270 (origin
10271 (method git-fetch)
10272 (uri (git-reference
10273 (url "https://pagure.io/python-daemon")
10274 (commit (string-append "release/" version))))
10275 (file-name (git-file-name name version))
10276 (sha256
10277 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10278 (patches
10279 (search-patches "python-daemon-relax-lockfile.patch"))))
10280 (build-system pyproject-build-system)
10281 (arguments
10282 (list
10283 #:phases
10284 #~(modify-phases %standard-phases
10285 (add-after 'unpack 'discard-dynamic-metadata
10286 (lambda _
10287 (substitute* "pyproject.toml"
10288 (("^dynamic = " all)
10289 (format #f "version = ~s~%~a" #$version all))
10290 (("\"(description|readme|version|maintainers)\",")
10291 ""))
10292 (for-each delete-file
10293 '("setup.py"
10294 "test/test_util_metadata.py"
10295 "test/test_setup.py")))))))
10296 (propagated-inputs (list python-filelock))
10297 (native-inputs (list python-testscenarios python-setuptools))
10298 (home-page "https://pagure.io/python-daemon/")
10299 (synopsis "Python library for making a Unix daemon process")
10300 (description
10301 "Python-daemon is a library that assists a Python program to turn itself
10302into a well-behaved Unix daemon process, as specified in PEP 3143.
10303
10304This library provides a @code{DaemonContext} class that manages the following
10305important tasks for becoming a daemon process:
10306@enumerate
10307@item Detach the process into its own process group.
10308@item Set process environment appropriate for running inside a chroot.
10309@item Renounce suid and sgid privileges.
10310@item Close all open file descriptors.
10311@item Change the working directory, uid, gid, and umask.
10312@item Set appropriate signal handlers.
10313@item Open new file descriptors for stdin, stdout, and stderr.
10314@item Manage a specified PID lock file.
10315@item Register cleanup functions for at-exit processing.
10316@end enumerate")
10317 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10318 (license (list license:asl2.0 license:gpl3+))))
10319
10320(define-public python-annotated-types
10321 (package
10322 (name "python-annotated-types")
10323 (version "0.7.0")
10324 (source
10325 (origin
10326 (method url-fetch)
10327 (uri (pypi-uri "annotated_types" version))
10328 (sha256
10329 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10330 (build-system pyproject-build-system)
10331 (native-inputs
10332 (list python-hatchling
10333 python-pytest))
10334 (propagated-inputs (list python-typing-extensions))
10335 (home-page "https://github.com/annotated-types/annotated-types")
10336 (synopsis "Reusable constraint types to use with typing.Annotated")
10337 (description "This package provides metadata objects which can be used to
10338represent common constraints such as upper and lower bounds on scalar values and
10339collection sizes, a Predicate marker for runtime checks, and descriptions of how
10340we intend these metadata to be interpreted. In some cases, we also note
10341alternative representations which do not require this package.")
10342 (license license:expat)))
10343
10344(define-public python-anytree
10345 (package
10346 (name "python-anytree")
10347 (version "2.13.0")
10348 (source
10349 (origin
10350 (method git-fetch) ; no tests data in PyPi package
10351 (uri (git-reference
10352 (url "https://github.com/c0fec0de/anytree")
10353 (commit version)))
10354 (file-name (git-file-name name version))
10355 (sha256
10356 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10357 (build-system pyproject-build-system)
10358 (arguments
10359 (list
10360 #:phases
10361 #~(modify-phases %standard-phases
10362 (add-before 'check 'pre-check
10363 (lambda _
10364 ;; Tests need to write to that direcroty.
10365 (mkdir-p "tests/dotexport/"))))))
10366 (native-inputs
10367 (list graphviz ;for 'dot'
10368 python-pdm-backend
10369 python-pytest
10370 python-pyyaml
10371 python-test2ref))
10372 (home-page "https://github.com/c0fec0de/anytree")
10373 (synopsis "Lightweight tree data library")
10374 (description
10375 "@code{anytree} is a simple, lightweight, and extensible tree data
10376structure for Python.")
10377 (license license:asl2.0)))
10378
10379(define-public kalamine
10380 (package
10381 (name "kalamine")
10382 (version "0.38")
10383 (source
10384 (origin
10385 (method url-fetch)
10386 (uri (pypi-uri "kalamine" version))
10387 (sha256
10388 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10389 (build-system pyproject-build-system)
10390 (arguments
10391 (list
10392 #:phases
10393 #~(modify-phases %standard-phases
10394 (add-before 'check 'make-test-layouts
10395 (lambda _
10396 (apply invoke
10397 (cons* "python" "-m" "kalamine.cli" "build"
10398 (find-files "layouts" "\\.toml")))
10399 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10400 (propagated-inputs
10401 (list python-click
10402 python-livereload
10403 python-lxml
10404 python-progress
10405 python-pyyaml
10406 python-tomli))
10407 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10408 ;; packaged.
10409 (native-inputs
10410 (list python-hatchling python-pytest))
10411 (home-page "https://github.com/OneDeadKey/kalamine")
10412 (synopsis "Keyboard layout maker")
10413 (description
10414 "Kalamine provides a CLI to create advanced keyboard layout from a
10415textual portable description. It also supports layout emulation via web
10416browser.")
10417 (license license:expat)))
10418
10419(define-public python-dm-tree
10420 (package
10421 (name "python-dm-tree")
10422 (version "0.1.9")
10423 (source
10424 (origin
10425 (method url-fetch)
10426 (uri (pypi-uri "dm_tree" version))
10427 (sha256
10428 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10429 (build-system pyproject-build-system)
10430 (arguments
10431 (list #:tests? #f
10432 #:phases
10433 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10434 ;; and USE_SYSTEM_PYBIND11=true.
10435 #~(modify-phases %standard-phases
10436 (add-before 'build 'build-shared-lib
10437 (lambda _
10438 (let* ((pybind11 #$(this-package-input "pybind11"))
10439 (python #$(this-package-input "python"))
10440 (version (python-version python))
10441 (abseil-cpp #$(this-package-input "abseil-cpp")))
10442 ;; Delete default cmake build.
10443 (substitute* "setup.py"
10444 (("ext_modules.*") "")
10445 (("cmdclass.*") ""))
10446 ;; Actual build phase.
10447 (mkdir-p "build/temp/tree/")
10448 (invoke
10449 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10450 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10451 "-fno-semantic-interposition" "-fPIC"
10452 "-I" (string-append pybind11
10453 "/lib/python" version
10454 "/site-packages/pybind11/include")
10455 "-I" (string-append python "/include/python"
10456 version)
10457 "-I" (string-append abseil-cpp "/include")
10458 "-c" "tree/tree.cc"
10459 "-o" "build/temp/tree/tree.o"
10460 "-fvisibility=hidden" "-g0")
10461 (mkdir-p "build/lib/tree")
10462 (invoke
10463 "g++" "-pthread" "-shared"
10464 (string-append "-Wl," "-rpath=" python "/lib")
10465 "-fno-semantic-interposition"
10466 "build/temp/tree/tree.o"
10467 "-L" (string-append python "/lib")
10468 (string-append abseil-cpp "/lib/libabsl_int128.a")
10469 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10470 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10471 (string-append abseil-cpp "/lib/libabsl_strings.a")
10472 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10473 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10474 "-o" "build/lib/tree/_tree.so")))))))
10475 ;; We link the static abseil libraries here to avoid problems in
10476 ;; downstream libraries using potentially different variants of
10477 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10478 (native-inputs
10479 (list python-setuptools))
10480 (inputs
10481 (list pybind11-2
10482 static-abseil-cpp
10483 python))
10484 (propagated-inputs
10485 (list python-absl-py
10486 python-attrs
10487 python-numpy
10488 python-wrapt))
10489 (home-page "https://github.com/deepmind/tree")
10490 (synopsis "Work with nested data structures in Python")
10491 (description "Tree is a python library for working with nested data
10492structures. In a way, @code{tree} generalizes the builtin @code{map} function
10493which only supports flat sequences, and allows you to apply a function to each
10494leaf preserving the overall structure.")
10495 (license license:asl2.0)))
10496
10497(define-public python-pyment
10498 (package
10499 (name "python-pyment")
10500 (version "0.3.4")
10501 (source
10502 (origin
10503 (method git-fetch)
10504 (uri
10505 (git-reference
10506 (url "https://github.com/dadadel/pyment")
10507 (commit (string-append "v" version))))
10508 (file-name (git-file-name name version))
10509 (sha256
10510 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10511 (build-system pyproject-build-system)
10512 (native-inputs (list python-pytest python-setuptools))
10513 (home-page "https://github.com/dadadel/pyment/")
10514 (synopsis "Convert Python docstrings automatically")
10515 (description "Pyment is a command line tool and library that can be
10516used to convert between several docstring styles.")
10517 (license license:gpl3+)))
10518
10519(define-public python-docstring-parser
10520 (package
10521 (name "python-docstring-parser")
10522 (version "0.15")
10523 (source (origin
10524 (method url-fetch)
10525 (uri (pypi-uri "docstring_parser" version))
10526 (sha256
10527 (base32
10528 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10529 (build-system pyproject-build-system)
10530 (native-inputs (list python-poetry-core python-pytest))
10531 (home-page "https://github.com/rr-/docstring_parser")
10532 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10533 (description "This package lets you parse Python docstrings in reST,
10534Google and Numpydoc format.")
10535 (license license:expat)))
10536
10537(define-public python-docutils
10538 (package
10539 (name "python-docutils")
10540 (version "0.21.2")
10541 (source
10542 (origin
10543 (method url-fetch)
10544 (uri (pypi-uri "docutils" version))
10545 (sha256
10546 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
10547 (build-system pyproject-build-system)
10548 (arguments
10549 (list
10550 #:test-backend #~'custom
10551 #:test-flags #~(list "test/alltests.py")
10552 #:phases
10553 (if (target-hurd?)
10554 #~(modify-phases %standard-phases
10555 (add-before 'check 'fix-errno
10556 (lambda _
10557 ;; Some tests check for an exact error message
10558 ;; Expecting ENOENT == 2.
10559 (substitute* (find-files "test" "\\.py$")
10560 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10561 #~%standard-phases)))
10562 (native-inputs
10563 (list python-flit-core))
10564 (home-page "https://docutils.sourceforge.net/")
10565 (synopsis "Python Documentation Utilities")
10566 (description
10567 "Docutils is a modular system for processing documentation into useful
10568formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10569easy to use markup language, for input.
10570
10571This package provides tools for converting @file{.rst} files to other formats
10572via commands such as @command{rst2man}, as well as supporting Python code.")
10573 ;; Most of the source code is public domain, but some source files are
10574 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10575 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10576
10577(define-public python-docutils-0.19
10578 (hidden-package
10579 (package
10580 (inherit python-docutils)
10581 (version "0.19")
10582 (source (origin
10583 (method url-fetch)
10584 (uri (pypi-uri "docutils" version))
10585 (sha256
10586 (base32
10587 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10588 (native-inputs
10589 (list python-setuptools python-wheel)))))
10590
10591(define-public python-docx
10592 (package
10593 (name "python-docx")
10594 (version "1.2.0")
10595 (source (origin
10596 (method url-fetch)
10597 (uri (pypi-uri "python_docx" version))
10598 (sha256
10599 (base32
10600 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10601 (build-system pyproject-build-system)
10602 (native-inputs
10603 (list behave
10604 python-pyparsing
10605 python-pytest
10606 python-setuptools
10607 python-wheel))
10608 (propagated-inputs
10609 (list python-lxml python-typing-extensions))
10610 (home-page "https://github.com/python-openxml/python-docx/")
10611 (synopsis "Python library to create and modify Microsoft Word documents")
10612 (description "This Python library can be used to create and update
10613Microsoft Word (.docx) documents.")
10614 (license license:expat)))
10615
10616(define-public python-repoze-lru
10617 (package
10618 (name "python-repoze-lru")
10619 (version "0.7")
10620 (source
10621 (origin
10622 (method url-fetch)
10623 (uri (pypi-uri "repoze.lru" version))
10624 (sha256
10625 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10626 (build-system pyproject-build-system)
10627 (arguments
10628 (list
10629 #:test-backend #~'unittest
10630 #:test-flags #~(list "discover" "repoze")))
10631 (native-inputs
10632 (list python-setuptools))
10633 (home-page "https://www.repoze.org")
10634 (synopsis "Tiny LRU cache implementation and decorator")
10635 (description
10636 "This package provides a tiny LRU cache implementation and decorator.")
10637 (license license:bsd-4)))
10638
10639(define-public python-reretry
10640 (package
10641 (name "python-reretry")
10642 (version "0.11.8")
10643 (source
10644 (origin
10645 (method git-fetch)
10646 (uri (git-reference
10647 (url "https://github.com/leshchenko1979/reretry")
10648 (commit version)))
10649 (file-name (git-file-name name version))
10650 (sha256
10651 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10652 (build-system pyproject-build-system)
10653 (native-inputs
10654 (list python-pytest python-pytest-asyncio python-setuptools))
10655 (home-page "https://github.com/leshchenko1979/reretry")
10656 (synopsis "Functional decorator for retrying on exceptions")
10657 (description
10658 "This package is a fork from the retry package, but with some of added
10659community-sourced features. It provides an easy to use, but functional
10660decorator for retrying on exceptions.")
10661 (license license:asl2.0)))
10662
10663(define-public python-restructuredtext-lint
10664 (package
10665 (name "python-restructuredtext-lint")
10666 (version "1.4.0")
10667 (source
10668 (origin
10669 (method git-fetch)
10670 (uri (git-reference
10671 (url "https://github.com/twolfson/restructuredtext-lint")
10672 (commit version)))
10673 (file-name (git-file-name name version))
10674 (sha256
10675 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
10676 (build-system pyproject-build-system)
10677 (arguments (list #:test-backend #~'unittest))
10678 (propagated-inputs (list python-docutils))
10679 (native-inputs (list python-setuptools))
10680 (home-page "https://github.com/twolfson/restructuredtext-lint")
10681 (synopsis "Linter")
10682 (description
10683 "This package provides a linter for the reStructuredText format.")
10684 (license license:unlicense)))
10685
10686(define-public python-click-repl
10687 (package
10688 (name "python-click-repl")
10689 ;; To support Python 3.12, see:
10690 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10691 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10692 (revision . "1")))
10693 (version (git-version "0.3.0"
10694 (assoc-ref properties 'revision)
10695 (assoc-ref properties 'commit)))
10696 (source
10697 (origin
10698 (method git-fetch)
10699 (uri (git-reference
10700 (url "https://github.com/click-contrib/click-repl")
10701 (commit (assoc-ref properties 'commit))))
10702 (file-name (git-file-name name version))
10703 (sha256
10704 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10705 (build-system pyproject-build-system)
10706 (native-inputs
10707 (list python-pytest
10708 python-setuptools))
10709 (propagated-inputs
10710 (list python-click
10711 python-prompt-toolkit))
10712 (home-page "https://github.com/click-contrib/click-repl")
10713 (synopsis "REPL plugin for Click")
10714 (description "This package provides a REPL plugin for Click.")
10715 (license license:expat)))
10716
10717(define-public python-pygdbmi
10718 (package
10719 (name "python-pygdbmi")
10720 (version "0.11.0.0")
10721 (source
10722 (origin
10723 (method url-fetch)
10724 (uri (pypi-uri "pygdbmi" version))
10725 (sha256
10726 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10727 (build-system pyproject-build-system)
10728 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10729 (native-inputs (list python-setuptools python-wheel))
10730 (home-page "https://github.com/cs01/pygdbmi")
10731 (synopsis "Parse gdb machine interface output with Python")
10732 (description "This package provides a parse gdb machine interface output
10733with Python.")
10734 (license license:expat)))
10735
10736(define-public python-pygtrie
10737 (package
10738 (name "python-pygtrie")
10739 (version "2.5.0")
10740 (source
10741 (origin
10742 (method git-fetch)
10743 (uri (git-reference
10744 (url "https://github.com/mina86/pygtrie")
10745 (commit (string-append "v" version))))
10746 (file-name (git-file-name name version))
10747 (sha256
10748 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10749 (build-system pyproject-build-system)
10750 (arguments
10751 (list
10752 #:test-backend #~'unittest
10753 #:phases
10754 #~(modify-phases %standard-phases
10755 (add-after 'unpack 'set-version
10756 (lambda _
10757 (delete-file "version.py")
10758 (substitute* "setup.py"
10759 (("import version")
10760 "")
10761 (("version\\.get_version\\(\\)")
10762 (format #f "~s" #$version))))))))
10763 (native-inputs (list python-setuptools))
10764 (home-page "https://github.com/mina86/pygtrie")
10765 (synopsis "Pure Python trie data structure implementation")
10766 (description
10767 "This package provides a pure Python trie data structure implementation.")
10768 (license license:asl2.0)))
10769
10770(define-public python-bump2version
10771 (package
10772 (name "python-bump2version")
10773 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
10774 (revision . "1")))
10775 (version (git-version "1.0.1"
10776 (assoc-ref properties 'revision)
10777 (assoc-ref properties 'commit)))
10778 (source
10779 (origin
10780 (method git-fetch)
10781 (uri (git-reference
10782 (url "https://github.com/c4urself/bump2version")
10783 (commit (assoc-ref properties 'commit))))
10784 (file-name (git-file-name name version))
10785 (sha256
10786 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
10787 (build-system pyproject-build-system)
10788 (arguments
10789 ;; XXX: Single flaky failing test.
10790 (list #:test-flags #~(list "-k" "not test_usage_string")))
10791 (native-inputs (list python-pytest python-setuptools python-testfixtures))
10792 (home-page "https://github.com/c4urself/bump2version")
10793 (synopsis "Version-bump your software with a single command!")
10794 (description
10795 "This package provides a small command line tool to simplify releasing
10796software by updating all version strings in your source code by the correct
10797increment. It also creates commits and tags.")
10798 (license license:expat)))
10799
10800(define-public python-deprecated
10801 (package
10802 (name "python-deprecated")
10803 (version "1.3.1")
10804 (source
10805 (origin
10806 (method git-fetch)
10807 (uri (git-reference
10808 (url "https://github.com/tantale/deprecated")
10809 (commit (string-append "v" version))))
10810 (file-name (git-file-name name version))
10811 (sha256
10812 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
10813 (build-system pyproject-build-system)
10814 (native-inputs
10815 (list python-pytest
10816 python-setuptools))
10817 (propagated-inputs
10818 (list python-wrapt))
10819 (home-page "https://github.com/tantale/deprecated")
10820 (synopsis "Python decorator to deprecate classes, functions or methods")
10821 (description
10822 "The @code{deprecated} decorator provides a convenient way to deprecate
10823to deprecate classes, functions or methods.")
10824 (license license:expat)))
10825
10826(define-public python-pygithub
10827 (package
10828 (name "python-pygithub")
10829 (version "2.8.1")
10830 (source
10831 (origin
10832 (method git-fetch)
10833 (uri (git-reference
10834 (url "https://github.com/PyGithub/PyGithub")
10835 (commit (string-append "v" version))))
10836 (file-name (git-file-name name version))
10837 (sha256
10838 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
10839 (build-system pyproject-build-system)
10840 (propagated-inputs
10841 (list python-pyjwt
10842 python-pynacl
10843 python-requests
10844 python-typing-extensions
10845 python-urllib3))
10846 (native-inputs
10847 (list python-responses
10848 python-pytest
10849 python-setuptools
10850 python-setuptools-scm))
10851 (home-page "https://pygithub.readthedocs.io/en/latest/")
10852 (synopsis "Python library for the GitHub API")
10853 (description "This library allows managing GitHub resources such as
10854repositories, user profiles, and organizations in your Python applications,
10855using version 3 of the GitHub application programming interface (API).")
10856 (license license:lgpl3+)))
10857
10858(define-public python-rellu
10859 (package
10860 (name "python-rellu")
10861 (version "0.7")
10862 (source
10863 (origin
10864 (method git-fetch)
10865 (uri (git-reference
10866 (url "https://github.com/robotframework/rellu")
10867 (commit (string-append "v" version))))
10868 (file-name (git-file-name name version))
10869 (sha256
10870 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
10871 (build-system pyproject-build-system)
10872 (native-inputs (list python-pytest python-setuptools))
10873 (propagated-inputs (list python-invoke python-pygithub))
10874 (home-page "https://github.com/robotframework/rellu")
10875 (synopsis "Utilities to create PyPI releases")
10876 (description
10877 "This collection of utilities contains tooling and templates to assist in
10878creating releases on GitHub and publishing them on PyPI. It is designed to be
10879used by Robot Framework and tools and libraries in its ecosystem, but can
10880naturally be used also by other projects.")
10881 (license license:asl2.0)))
10882
10883(define-public python-robotframework
10884 (package
10885 (name "python-robotframework")
10886 (version "7.3.2")
10887 (source
10888 (origin
10889 (method git-fetch) ; no tests in the PyPI archive
10890 (uri (git-reference
10891 (url "https://github.com/robotframework/robotframework")
10892 (commit (string-append "v" version))))
10893 (file-name (git-file-name name version))
10894 (sha256
10895 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
10896 (outputs '("out" "doc"))
10897 (build-system pyproject-build-system)
10898 (arguments
10899 (list
10900 #:modules '((guix build pyproject-build-system)
10901 (guix build utils)
10902 (ice-9 ftw)
10903 (ice-9 match)
10904 (srfi srfi-26))
10905 #:phases
10906 #~(modify-phases %standard-phases
10907 (add-before 'build 'build-and-install-doc
10908 (lambda* (#:key outputs #:allow-other-keys)
10909 (let ((doc (string-append #$output:doc
10910 "/share/doc/robotframework")))
10911 (invoke "invoke" "library-docs" "all")
10912 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
10913 (mkdir-p doc)
10914 (with-directory-excursion "dist"
10915 (define user-guide-dir
10916 (match (scandir "." (cut string-prefix?
10917 "robotframework-userguide-" <>))
10918 ((dir) dir)
10919 (_ (error "could not find the user guide directory"))))
10920 (copy-recursively user-guide-dir doc)))))
10921 (replace 'check
10922 (lambda* (#:key tests? #:allow-other-keys)
10923 (when tests?
10924 ;; TODO: Some acceptance failed and took near 30min to
10925 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
10926 ;; to skip failing ones.
10927 (format #t "Running unit tests...~%")
10928 (invoke "utest/run.py")))))))
10929 (native-inputs
10930 (list python-docutils
10931 python-invoke
10932 python-jsonschema
10933 python-pygments
10934 python-rellu
10935 python-typing-extensions
10936 python-setuptools
10937 `(,python "tk") ;used when building the HTML doc
10938 python-wheel))
10939 (home-page "https://robotframework.org")
10940 (synopsis "Generic automation framework")
10941 (description "Robot Framework is a generic automation framework for
10942acceptance testing, acceptance test driven development (ATDD), and robotic
10943process automation (RPA).")
10944 (license license:asl2.0)))
10945
10946(define-public python-robotframework-datadriver
10947 (package
10948 (name "python-robotframework-datadriver")
10949 (version "1.11.2")
10950 (source
10951 (origin
10952 (method git-fetch) ; no tests in PyPI release
10953 (uri (git-reference
10954 (url "https://github.com/Snooz82/robotframework-datadriver")
10955 (commit version)))
10956 (file-name (git-file-name name version))
10957 (sha256
10958 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
10959 (build-system pyproject-build-system)
10960 (arguments
10961 (list
10962 #:phases
10963 #~(modify-phases %standard-phases
10964 (add-before 'check 'skip-problematic-tests
10965 (lambda _
10966 (for-each delete-file-recursively
10967 (list
10968 ;; The test file 'tab-csv-file-name.tsv' contains
10969 ;; special characters for which there is no locale
10970 ;; in the build environment, causing one test to
10971 ;; fail.
10972 "atest/TestCases/csv_reader_config"
10973 ;; Error in file on line 6: Non-existing setting
10974 ;; 'Test Tags'.
10975 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
10976 (replace 'check
10977 (lambda* (#:key tests? #:allow-other-keys)
10978 (when tests?
10979 (with-directory-excursion "atest"
10980 (invoke "sh" "run_atest.sh"))))))))
10981 (native-inputs
10982 (list python-docutils
10983 python-robotframework-stacktrace
10984 python-setuptools
10985 python-xlrd))
10986 (propagated-inputs
10987 (list python-openpyxl
10988 python-pandas
10989 python-pygments
10990 python-robotframework))
10991 (home-page "https://github.com/Snooz82/robotframework-datadriver")
10992 (synopsis "Data-driven test extension for Robot Framework")
10993 (description "DataDriver is a data-driven extension for Robot Framework.
10994DataDriver uses the Listener Interface of Robot Framework to create new test
10995cases based on a data file that contains the test data. DataDriver supports
10996data files in the CSV, XLS or XLSX formats.")
10997 (license license:asl2.0)))
10998
10999(define-public python-robotframework-pabot
11000 (package
11001 (name "python-robotframework-pabot")
11002 (version "4.2.0")
11003 (source
11004 (origin
11005 ;; There are no tests in the PyPI archive.
11006 (method git-fetch)
11007 (uri (git-reference
11008 (url "https://github.com/mkorpela/pabot")
11009 (commit version)))
11010 (file-name (git-file-name name version))
11011 (sha256
11012 (base32
11013 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11014 (build-system pyproject-build-system)
11015 (arguments
11016 (list
11017 #:test-flags
11018 #~(list "-k" (string-join
11019 ;; XXX: Maybe it's a bad idea to skip these tests which
11020 ;; failing assertions highlight incomparability issues.
11021 ;;
11022 ;; 93 passed, 23 deselected, 11 warnings
11023 (list "not test_argumentfile_outputs"
11024 "test_dependency_ok"
11025 "test_longnames_in_tests"
11026 "test_multiple_dependencies_ok"
11027 "test_orders"
11028 "test_pabotprerunmodifier"
11029 "test_pabotprerunmodifier_with_prerunmodifier"
11030 "test_pabotprerunmodifier_with_testlevelsplit"
11031 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11032 "test_parallel_execution"
11033 "test_parallel_execution_with_testlevelsplit"
11034 "test_pre_run_with_new_name"
11035 "test_pre_run_with_new_tag"
11036 "test_run_dir_2_then_dir_3"
11037 "test_run_dir_3_then_dir_2"
11038 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11039 "test_sleep_test_cases_and_group"
11040 "test_stdout_should_display_passed_test"
11041 "test_stdout_should_display_passed_test"
11042 "test_stdout_should_display_passed_test_and_not_"
11043 "test_testlevelsplit_output_task_order"
11044 "test_too_big_testname"
11045 "test_two_orders")
11046 " and not "))
11047 #:phases
11048 #~(modify-phases %standard-phases
11049 (add-after 'unpack 'relax-requirements
11050 (lambda _
11051 (substitute* "setup.cfg"
11052 ;; natsort>=8.2.0
11053 ((">=8.2.0") "")))))))
11054 (native-inputs
11055 (list python-pytest
11056 python-setuptools
11057 python-wheel))
11058 (propagated-inputs
11059 (list python-natsort
11060 python-robotframework
11061 python-robotframework-stacktrace))
11062 (home-page "https://pabot.org")
11063 (synopsis "Parallel test runner for Robot Framework")
11064 (description "Pabot is a parallel executor for Robot Framework tests.")
11065 (license license:asl2.0)))
11066
11067(define-public python-robotframework-stacktrace
11068 (package
11069 (name "python-robotframework-stacktrace")
11070 (version "0.4.1")
11071 (source
11072 (origin
11073 (method git-fetch)
11074 (uri (git-reference
11075 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11076 (commit version)))
11077 (file-name (git-file-name name version))
11078 (sha256
11079 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11080 (build-system pyproject-build-system)
11081 (arguments
11082 ;; XXX: The test suite fails (see:
11083 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11084 (list
11085 #:tests? #f
11086 #:phases
11087 #~(modify-phases %standard-phases
11088 (add-after 'unpack 'set-version
11089 (lambda _
11090 (substitute* "setup.py"
11091 (("VERSION =.*")
11092 (string-append "VERSION = '" #$version "'"))))))))
11093 (native-inputs (list python-setuptools))
11094 (propagated-inputs (list python-robotframework))
11095 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11096 (synopsis "Robot Framework listener to print a stack trace on error")
11097 (description "StackTrace is a Robot Framework listener that prints a stack
11098trace directly to the terminal to ease debugging.")
11099 (license license:asl2.0)))
11100
11101(define-public python-robotframework-sshlibrary
11102 (package
11103 (name "python-robotframework-sshlibrary")
11104 (version "3.8.0")
11105 ;; There are no tests in the PyPI archive.
11106 (source
11107 (origin
11108 (method git-fetch)
11109 (uri (git-reference
11110 (url "https://github.com/robotframework/SSHLibrary")
11111 (commit (string-append "v" version))))
11112 (file-name (git-file-name name version))
11113 (sha256
11114 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11115 (patches (search-patches
11116 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11117 (build-system pyproject-build-system)
11118 (arguments
11119 (list
11120 #:phases
11121 #~(modify-phases %standard-phases
11122 (add-after 'unpack 'fix-python-incompatibilities
11123 (lambda _
11124 (substitute* (find-files "utest" "\\.py$")
11125 (("assertEquals") "assertEqual"))))
11126 (add-before 'build 'build-and-install-doc
11127 (lambda _
11128 (let ((doc (string-append #$output:doc
11129 "/share/doc/robotframework-sshlibrary")))
11130 (invoke "chmod" "-R" "+w" "docs")
11131 (invoke "invoke" "kw-docs" "project-docs")
11132 (mkdir-p doc)
11133 (for-each delete-file
11134 (find-files "docs" "\\.rst"))
11135 (copy-recursively "docs" doc))))
11136 (replace 'check
11137 (lambda* (#:key tests? #:allow-other-keys)
11138 (when tests?
11139 ;; Some tests require an SSH server; we remove them.
11140 (delete-file "utest/test_client_api.py")
11141 (delete-file "utest/test_scp.py")
11142 (invoke "python" "utest/run.py")))))))
11143 (propagated-inputs
11144 (list python-robotframework python-paramiko python-scp))
11145 (native-inputs
11146 (list openssh
11147 which
11148 ;; To generate the documentation
11149 python-docutils
11150 python-invoke
11151 python-pygments
11152 python-rellu
11153 python-setuptools))
11154 (outputs '("out" "doc"))
11155 (home-page "https://github.com/robotframework/SSHLibrary")
11156 (synopsis "Robot Framework library for SSH and SFTP")
11157 (description
11158 "SSHLibrary is a Robot Framework library providing support for SSH and
11159SFTP. It has the following main usages:
11160@itemize @bullet
11161@item Executing commands on the remote machine, either blocking or non-blocking.
11162@item Writing and reading in an interactive shell.
11163@item Transferring files and directories over SFTP.
11164@item Ensuring that files and directories exist on the remote machine.
11165@end itemize")
11166 (license license:asl2.0)))
11167
11168(define-public python-robotframework-pythonlibcore
11169 (package
11170 (name "python-robotframework-pythonlibcore")
11171 (version "4.4.1")
11172 (source
11173 (origin
11174 (method git-fetch) ;no tests in pypi archive
11175 (uri (git-reference
11176 (url "https://github.com/robotframework/PythonLibCore")
11177 (commit (string-append "v" version))))
11178 (file-name (git-file-name name version))
11179 (sha256
11180 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11181 (build-system pyproject-build-system)
11182 (arguments
11183 (list
11184 #:test-backend #~'custom
11185 #:test-flags #~(list "utest/run.py")))
11186 (native-inputs
11187 (list python-approvaltests
11188 python-pytest
11189 python-pytest-cov ; This package has a custom way to run tests.
11190 python-pytest-mockito
11191 python-robotframework
11192 python-setuptools))
11193 (home-page "https://github.com/robotframework/PythonLibCore")
11194 (synopsis "Robot Framework Python library tools")
11195 (description
11196 "PythonLibCore provides tools for creating larger test libraries for
11197Robot Framework using Python. The Robot Framework hybrid and dynamic library
11198APIs give more flexibility for library than the static library API, but they
11199also set requirements for libraries which need to be implemented in the
11200library side. PythonLibCore eases the problem by providing a simpler
11201interface and by handling all the requirements towards the Robot Framework
11202library APIs.")
11203 (license license:asl2.0)))
11204
11205(define-public python-robotframework-seleniumlibrary
11206 (package
11207 (name "python-robotframework-seleniumlibrary")
11208 (version "6.8.0")
11209 (source
11210 (origin
11211 (method git-fetch)
11212 (uri (git-reference
11213 (url "https://github.com/robotframework/SeleniumLibrary")
11214 (commit (string-append "v" version))))
11215 (file-name (git-file-name name version))
11216 (sha256
11217 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11218 (build-system pyproject-build-system)
11219 (arguments
11220 (list
11221 #:test-flags
11222 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11223 "-k" (string-join
11224 (list "not test_create_firefox_with_options"
11225 "test_create_headless_firefox_with_options"
11226 "test_create_driver_firefox")
11227 " and not "))))
11228 (native-inputs
11229 (list python-approvaltests
11230 python-pytest
11231 python-pytest-mockito
11232 python-setuptools))
11233 (propagated-inputs
11234 (list python-click
11235 python-robotframework
11236 python-robotframework-pythonlibcore
11237 python-selenium))
11238 (home-page "https://github.com/robotframework/SeleniumLibrary")
11239 (synopsis "Web testing library for Robot Framework")
11240 (description "SeleniumLibrary is a web testing library for Robot Framework
11241that utilizes the Selenium tool internally.")
11242 (license license:asl2.0)))
11243
11244(define-public python-robotframework-seleniumscreenshots
11245 (package
11246 (name "python-robotframework-seleniumscreenshots")
11247 (version "0.9.5")
11248 (source
11249 (origin
11250 (method git-fetch)
11251 (uri (git-reference
11252 (url
11253 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11254 (commit version)))
11255 (file-name (git-file-name name version))
11256 (sha256
11257 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11258 (build-system pyproject-build-system)
11259 (arguments
11260 ;; XXX: The tests require a relatively complicated setup configured in
11261 ;; their CI with Nix (!).
11262 `(#:tests? #f))
11263 (native-inputs (list python-setuptools))
11264 (propagated-inputs
11265 (list python-robotframework python-robotframework-seleniumlibrary))
11266 (home-page
11267 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11268 (synopsis
11269 "Robot Framework library for annotating and cropping screenshots")
11270 (description
11271 "The SeleniumScreenshots library for Robot Framework provides keywords
11272for annotating and cropping screenshots taken with SeleniumLibrary. It is
11273useful for scripting automatically updated screenshots for documentation or
11274for visual regression testing purposes.")
11275 (license license:bsd-3)))
11276
11277(define-public python-rstr
11278 (package
11279 (name "python-rstr")
11280 (version "3.2.2")
11281 (source
11282 (origin
11283 (method git-fetch)
11284 (uri (git-reference
11285 (url "https://github.com/leapfrogonline/rstr")
11286 (commit version)))
11287 (file-name (git-file-name name version))
11288 (sha256
11289 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11290 (build-system pyproject-build-system)
11291 (native-inputs (list python-pytest
11292 python-setuptools
11293 python-setuptools-scm
11294 python-wheel))
11295 (home-page "https://github.com/leapfrogonline/rstr")
11296 (synopsis "Generate random strings in Python")
11297 (description "This package provides a python module for generating
11298random strings of various types. It could be useful for fuzz testing,
11299generating dummy data, or other applications. It has no dependencies
11300outside the standard library.")
11301 (license license:bsd-3)))
11302
11303(define-public python-scp
11304 (package
11305 (name "python-scp")
11306 (version "0.15.0")
11307 (source
11308 (origin
11309 (method git-fetch)
11310 (uri (git-reference
11311 (url "https://github.com/jbardin/scp.py")
11312 (commit (string-append "v" version))))
11313 (file-name (git-file-name name version))
11314 (sha256
11315 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11316 (build-system pyproject-build-system)
11317 (arguments (list #:tests? #f)) ;tests require an SSH server
11318 (native-inputs (list python-setuptools))
11319 (propagated-inputs (list python-paramiko))
11320 (home-page "https://github.com/jbardin/scp.py")
11321 (synopsis "SCP protocol module for Python and Paramiko")
11322 (description
11323 "The scp module extends the Paramiko library to send and receive files
11324via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11325 (license license:gpl2+)))
11326
11327(define-public python-rst-linker
11328 (package
11329 (name "python-rst-linker")
11330 (version "2.6.0")
11331 (source
11332 (origin
11333 (method git-fetch)
11334 (uri (git-reference
11335 (url "https://github.com/jaraco/rst.linker")
11336 (commit (string-append "v" version))))
11337 (file-name (git-file-name name version))
11338 (sha256
11339 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11340 (build-system pyproject-build-system)
11341 (propagated-inputs (list python-jaraco-context))
11342 (native-inputs
11343 (list python-path
11344 python-jaraco-vcs
11345 python-pytest
11346 python-pytest-subprocess
11347 python-setuptools-scm
11348 python-setuptools))
11349 (home-page "https://github.com/jaraco/rst.linker")
11350 (synopsis "Sphinx plugin to add links and timestamps")
11351 (description
11352 "rst.linker automatically replaces text by a reStructuredText external
11353reference or timestamps. It's primary purpose is to augment the changelog,
11354but it can be used for other documents, too.")
11355 (license license:expat)))
11356
11357(define-public python-feedgenerator
11358 (package
11359 (name "python-feedgenerator")
11360 (version "2.1.0")
11361 (source
11362 (origin
11363 (method url-fetch)
11364 (uri (pypi-uri "feedgenerator" version))
11365 (sha256
11366 (base32
11367 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11368 (build-system pyproject-build-system)
11369 (native-inputs
11370 (list python-pytest python-setuptools python-wheel))
11371 (propagated-inputs
11372 (list python-pytz))
11373 (home-page "https://github.com/getpelican/feedgenerator")
11374 (synopsis
11375 "Standalone version of Django's Atom/RSS feed generator")
11376 (description
11377 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11378which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11379 (license license:bsd-3)))
11380
11381(define-public python-lsp-jsonrpc
11382 (package
11383 (name "python-lsp-jsonrpc")
11384 (version "1.1.2")
11385 (source
11386 (origin
11387 (method url-fetch)
11388 (uri (pypi-uri "python-lsp-jsonrpc" version))
11389 (sha256
11390 (base32
11391 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11392 (build-system pyproject-build-system)
11393 (native-inputs
11394 (list python-pyflakes
11395 python-pytest
11396 python-setuptools
11397 python-setuptools-scm
11398 python-wheel))
11399 (propagated-inputs
11400 (list python-ujson))
11401 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11402 (synopsis "JSON RPC 2.0 server library")
11403 (description
11404 "This package provides a JSON RPC 2.0 server library for Python.")
11405 (license license:expat)))
11406
11407(define-public python-pydantic
11408 (package
11409 (name "python-pydantic")
11410 (version "2.12.5")
11411 (source
11412 (origin
11413 (method git-fetch)
11414 (uri (git-reference
11415 (url "https://github.com/samuelcolvin/pydantic")
11416 (commit (string-append "v" version))))
11417 (file-name (git-file-name name version))
11418 (sha256
11419 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11420 (build-system pyproject-build-system)
11421 (arguments
11422 (list
11423 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11424 #:test-flags
11425 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11426 (native-inputs
11427 (list tzdata-for-tests
11428 python-dirty-equals-bootstrap
11429 python-faker
11430 python-hatch-fancy-pypi-readme
11431 python-hatchling
11432 python-jsonschema
11433 python-pytest
11434 python-pytest-benchmark
11435 python-pytest-examples
11436 python-pytest-mock
11437 python-pytest-run-parallel
11438 python-pytz))
11439 (propagated-inputs
11440 (list python-annotated-types
11441 python-pydantic-core ;it's hard == requirement, keep it in sync
11442 python-typing-extensions
11443 python-typing-inspection))
11444 (home-page "https://github.com/samuelcolvin/pydantic")
11445 (synopsis "Python data validation and settings management")
11446 (description
11447 "Pydantic enforces type hints at runtime, and provides user friendly
11448errors when data is invalid.")
11449 (license license:expat)))
11450
11451;; It may be removed after 2026-01-05.
11452(define-deprecated/public-alias python-pydantic-2 python-pydantic)
11453
11454(define-public python-pydantic-core
11455 (package
11456 (name "python-pydantic-core")
11457 (version "2.41.5")
11458 (source
11459 (origin
11460 (method url-fetch)
11461 (uri (pypi-uri "pydantic_core" version))
11462 (sha256
11463 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11464 (build-system pyproject-build-system)
11465 (arguments
11466 (list
11467 #:imported-modules `(,@%cargo-build-system-modules
11468 ,@%pyproject-build-system-modules)
11469 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11470 (guix build pyproject-build-system)
11471 (guix build utils))
11472 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11473 #:test-flags
11474 #~(list "--ignore=tests/benchmarks"
11475 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11476 ;; python-pydantic-core -> python-pydantic ->
11477 ;; python-inline-snapshot -> python-pydantic-core
11478 "--ignore=tests/test_docstrings.py"
11479 "--ignore=tests/test_hypothesis.py"
11480 "--ignore=tests/validators/test_allow_partial.py"
11481 "--ignore=tests/validators/test_frozenset.py"
11482 "--ignore=tests/validators/test_list.py"
11483 "--ignore=tests/validators/test_set.py")
11484 #:phases
11485 #~(modify-phases %standard-phases
11486 (add-after 'unpack 'prepare-cargo-build-system
11487 (lambda args
11488 (for-each (lambda (phase)
11489 (format #t "Running cargo phase: ~a~%" phase)
11490 (apply (assoc-ref cargo:%standard-phases phase)
11491 #:cargo-target #$(cargo-triplet)
11492 args))
11493 '(unpack-rust-crates
11494 configure
11495 check-for-pregenerated-files
11496 patch-cargo-checksums)))))))
11497 (native-inputs
11498 (append
11499 (list maturin
11500 python-dirty-equals-bootstrap
11501 python-pytest
11502 python-pytest-benchmark ;TODO: disable in pyproject.toml
11503 python-pytest-mock
11504 python-pytest-timeout
11505 python-typing-inspection
11506 python-tzdata
11507 rust
11508 `(,rust "cargo"))
11509 (or (and=> (%current-target-system)
11510 (compose list make-rust-sysroot))
11511 '())))
11512 (inputs
11513 (cargo-inputs 'python-pydantic-core))
11514 (propagated-inputs
11515 (list python-typing-extensions))
11516 (home-page "https://github.com/pydantic/pydantic-core")
11517 (synopsis "Core validation logic for pydantic")
11518 (description "This package provides the core functionality for pydantic
11519validation and serialization.")
11520 (license license:expat)))
11521
11522(define-public python-pydantic-cli
11523 (package
11524 (name "python-pydantic-cli")
11525 (version "9.1.0")
11526 (source
11527 (origin
11528 (method git-fetch) ;for tests
11529 (uri (git-reference
11530 (url "https://github.com/mpkocher/pydantic-cli")
11531 (commit (string-append "v" version))))
11532 (file-name (git-file-name name version))
11533 (sha256
11534 (base32
11535 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11536 (build-system pyproject-build-system)
11537 (propagated-inputs
11538 (list python-pydantic))
11539 (native-inputs
11540 (list python-hatchling python-pytest))
11541 (home-page "https://github.com/mpkocher/pydantic-cli")
11542 (synopsis "Turn Pydantic defined data models into CLI tools")
11543 (description
11544 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11545Interfaces} via data models provided in the JSON format.")
11546 (license license:expat)))
11547
11548(define-public python-pydantic-extra-types
11549 (package
11550 (name "python-pydantic-extra-types")
11551 (version "2.10.6")
11552 (source
11553 (origin
11554 (method git-fetch)
11555 (uri (git-reference
11556 (url "https://github.com/pydantic/pydantic-extra-types")
11557 (commit (string-append "v" version))))
11558 (file-name (git-file-name name version))
11559 (sha256
11560 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11561 (build-system pyproject-build-system)
11562 (arguments
11563 (list
11564 ;; tests: 13079 passed, 1 deselected
11565 #:test-flags
11566 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11567 #~(list "--ignore=tests/test_s3.py"
11568 "--deselect=tests/test_coordinate.py::test_json_schema"
11569 ;; XXX: The most of the tests fail, pendulum is optional package
11570 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11571 ;; requires Rust.
11572 "--ignore=tests/test_pendulum_dt.py"
11573 "--ignore=tests/test_json_schema.py")
11574 #:phases
11575 #~(modify-phases %standard-phases
11576 (add-before 'check 'pre-check
11577 (lambda* (#:key inputs #:allow-other-keys)
11578 (setenv "TZ" "UTC")
11579 (setenv "TZDIR" (search-input-directory inputs
11580 "share/zoneinfo")))))))
11581 (native-inputs
11582 (list python-pytest
11583 python-hatchling
11584 tzdata-for-tests))
11585 (propagated-inputs
11586 (list python-pydantic
11587 python-typing-extensions
11588 ;; [optional]
11589 python-cron-converter
11590 ;; python-pendulum
11591 python-phonenumbers
11592 python-pycountry
11593 python-pymongo
11594 python-pytz
11595 python-semver
11596 python-tzdata
11597 python-ulid))
11598 (home-page "https://github.com/pydantic/pydantic-extra-types")
11599 (synopsis "Extra Pydantic types")
11600 (description "This package provides sxtra types for Pydantic.")
11601 (license license:expat)))
11602
11603(define-public python-pydantic-settings
11604 (package
11605 (name "python-pydantic-settings")
11606 (version "2.12.0")
11607 (source
11608 (origin
11609 (method url-fetch)
11610 (uri (pypi-uri "pydantic_settings" version))
11611 (sha256
11612 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11613 (build-system pyproject-build-system)
11614 (arguments
11615 (list
11616 ;; tests: 399 passed, 27 skipped
11617 #:test-flags
11618 ;; XXX: Ignore tests requiring python-ruff.
11619 #~(list "--ignore=tests/test_docs.py")
11620 #:phases
11621 #~(modify-phases %standard-phases
11622 (add-before 'check 'set-home
11623 (lambda _
11624 ;; FileNotFoundError: [Errno 2] No such file or directory:
11625 ;; '/homeless-shelter/
11626 (setenv "HOME" "/tmp"))))))
11627 (native-inputs
11628 (list python-hatchling
11629 python-pytest
11630 python-pytest-examples
11631 python-pytest-mock))
11632 (propagated-inputs
11633 (list python-dotenv
11634 python-pydantic
11635 python-typing-inspection
11636 ;; [optional]
11637 python-pyyaml
11638 python-tomli))
11639 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11640 (synopsis "Settings management using Pydantic")
11641 (description
11642 "Pydantic Settings provides optional Pydantic features for loading a
11643settings or config class from environment variables or secrets files.")
11644 (license license:expat)))
11645
11646(define-public python-pydoc-markdown
11647 (package
11648 (name "python-pydoc-markdown")
11649 (version "4.8.2")
11650 (source
11651 (origin
11652 (method url-fetch)
11653 (uri (pypi-uri "pydoc_markdown" version))
11654 (sha256
11655 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11656 (build-system pyproject-build-system)
11657 (arguments
11658 (list
11659 #:tests? #false ;there are none
11660 #:phases
11661 '(modify-phases %standard-phases
11662 ;; This is probably not a good idea, but it wants a rather old
11663 ;; version of docstring-parser.
11664 (add-after 'unpack 'relax-requirements
11665 (lambda _
11666 (substitute* "pyproject.toml"
11667 (("docstring-parser = .*")
11668 "docstring-parser = \"^0\"\n")))))))
11669 (propagated-inputs (list python-click
11670 python-databind-core
11671 python-databind-json
11672 python-docspec
11673 python-docspec-python
11674 python-docstring-parser
11675 python-jinja2
11676 python-nr-util
11677 python-pyyaml
11678 python-requests
11679 python-tomli
11680 python-tomli-w
11681 python-watchdog
11682 python-yapf))
11683 (native-inputs (list python-poetry-core))
11684 (home-page "https://pypi.org/project/pydoc-markdown/")
11685 (synopsis "Create Python API documentation in Markdown format")
11686 (description "Pydoc-Markdown is a tool to create Python API documentation
11687in Markdown format. Instead of executing your Python code like so many other
11688documentation tools, it parses it using docspec instead.")
11689 (license license:expat)))
11690
11691;; XXX: The project is deprecated upstream, still in use by some packages,
11692;; consider to remove when nothing depends on it.
11693(define-public python-pydocstyle
11694 (package
11695 (name "python-pydocstyle")
11696 (version "6.3.0")
11697 (source
11698 (origin
11699 (method git-fetch) ;no tests in PyPI archive
11700 (uri (git-reference
11701 (url "https://github.com/PyCQA/pydocstyle")
11702 (commit version)))
11703 (file-name (git-file-name name version))
11704 (sha256
11705 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11706 (patches (search-patches
11707 "python-pydocstyle-add-support-for-pep701.patch"))))
11708 (build-system pyproject-build-system)
11709 (arguments
11710 (list
11711 ;; It tries to install with pip.
11712 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11713 #:phases
11714 #~(modify-phases %standard-phases
11715 (add-after 'unpack 'set-version
11716 (lambda _
11717 (substitute* "pyproject.toml"
11718 (("0.0.0-dev") #$version)))))))
11719 (native-inputs
11720 (list python-poetry-core
11721 python-pytest
11722 python-tomli))
11723 (propagated-inputs
11724 (list python-six
11725 python-snowballstemmer))
11726 (home-page "https://github.com/PyCQA/pydocstyle/")
11727 (synopsis "Python docstring style checker")
11728 (description
11729 "This package provides a style checker for the Python Language
11730Server (PLS).")
11731 (license license:expat)))
11732
11733(define-public python-lsp-server
11734 (package
11735 (name "python-lsp-server")
11736 (version "1.14.0")
11737 (source
11738 (origin
11739 (method git-fetch)
11740 (uri (git-reference
11741 (url "https://github.com/python-lsp/python-lsp-server")
11742 (commit (string-append "v" version))))
11743 (file-name (git-file-name name version))
11744 (sha256
11745 (base32 "1dyp49x844c4mja0qg01nilsbi09w7526izsk3pi5zpylmhmvbk2"))
11746 (patches
11747 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11748 (build-system pyproject-build-system)
11749 (arguments
11750 (list
11751 #:test-flags
11752 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11753 "-k"
11754 (string-append
11755 "not test_concurrent_ws_requests " ; flaky
11756 "and not test_pyqt_completion " ; avoid pyqt5
11757 "and not test_pandas_completion")) ; avoid pandas
11758 #:phases
11759 #~(modify-phases %standard-phases
11760 (add-before 'check 'set-HOME
11761 (lambda _ (setenv "HOME" "/tmp"))))))
11762 (propagated-inputs
11763 (list python-black
11764 python-docstring-to-markdown
11765 python-flake8
11766 python-jedi
11767 python-lsp-jsonrpc
11768 python-mccabe
11769 python-pluggy
11770 python-pycodestyle
11771 python-pydocstyle
11772 python-pyflakes
11773 python-pylint
11774 python-rope
11775 python-ujson
11776 python-whatthepatch
11777 python-yapf))
11778 (native-inputs
11779 (list python-flaky
11780 python-matplotlib
11781 python-pytest
11782 python-setuptools
11783 python-setuptools-scm
11784 python-websockets))
11785 (home-page "https://github.com/python-lsp/python-lsp-server")
11786 (synopsis "Python implementation of the Language Server Protocol")
11787 (description
11788 "The Python Language Server @command{pylsp} is an implementation of the
11789Python 3 language specification for the Language Server Protocol (LSP).
11790This tool is used in text editing environments to provide a complete
11791and integrated feature-set for programming Python effectively.")
11792 (license license:expat)))
11793
11794(define-public python-black
11795 (package
11796 (name "python-black")
11797 (version "26.3.1")
11798 (source
11799 (origin
11800 (method git-fetch)
11801 (uri (git-reference
11802 (url "https://github.com/psf/black")
11803 (commit version)))
11804 (file-name (git-file-name name version))
11805 (sha256
11806 (base32 "1m2vxwajavhpg34zkwyg4qyhf0lfsbphm9lvqkikal1lr1cymknz"))))
11807 (build-system pyproject-build-system)
11808 (arguments
11809 (list
11810 ;; tests: 232 passed, 3 skipped, 4 subtests
11811 #:test-flags
11812 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
11813 ;; Diffs are not equal.
11814 "--deselect=tests/test_format.py::test_simple_format")
11815 #:phases
11816 #~(modify-phases %standard-phases
11817 (add-after 'patch-source-shebangs 'use-absolute-file-names
11818 (lambda* (#:key inputs #:allow-other-keys)
11819 (substitute* (find-files "tests" "\\.py$")
11820 (("#!/usr/bin/env python3")
11821 (string-append
11822 "#!" (search-input-file inputs "/bin/python3")))))))))
11823 (propagated-inputs
11824 (list python-aiohttp
11825 python-click
11826 python-mypy-extensions
11827 python-packaging
11828 python-pathspec
11829 python-platformdirs
11830 python-pytokens))
11831 (native-inputs
11832 (list python-pytest
11833 python-pytest-xdist
11834 python-hatch-fancy-pypi-readme
11835 python-hatch-vcs
11836 python-hatchling))
11837 (home-page "https://github.com/psf/black")
11838 (synopsis "The uncompromising code formatter")
11839 (description "Black is the uncompromising Python code formatter.")
11840 (license license:expat)))
11841
11842(define-public python-black-macchiato
11843 (package
11844 (name "python-black-macchiato")
11845 (version "1.3.0")
11846 (source
11847 (origin
11848 (method git-fetch)
11849 (uri (git-reference
11850 (url "https://github.com/wbolster/black-macchiato")
11851 (commit version)))
11852 (file-name (git-file-name name version))
11853 (sha256
11854 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
11855 (build-system pyproject-build-system)
11856 (arguments
11857 (list
11858 #:phases
11859 #~(modify-phases %standard-phases
11860 (add-after 'unpack 'ignore-failing-tests
11861 (lambda _
11862 (substitute* "test_macchiato.py"
11863 (("\\(.*\\n'\\)," all)
11864 (string-append "# " all))))))))
11865 (native-inputs (list python-pytest python-setuptools))
11866 (propagated-inputs (list python-black))
11867 (home-page "https://github.com/wbolster/black-macchiato")
11868 (synopsis "Partial @code{python-black} formatting")
11869 (description
11870 "This package is built on top the @code{python-black} code formatter to
11871enable formatting of partial files.")
11872 (license license:bsd-3)))
11873
11874(define-public python-blinker
11875 (package
11876 (name "python-blinker")
11877 (version "1.9.0")
11878 (source
11879 (origin
11880 (method url-fetch)
11881 (uri (pypi-uri "blinker" version))
11882 (sha256
11883 (base32
11884 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
11885 (build-system pyproject-build-system)
11886 (native-inputs
11887 (list python-flit-core
11888 python-pytest
11889 python-pytest-asyncio))
11890 (home-page "https://pythonhosted.org/blinker/")
11891 (synopsis "Fast, simple object-to-object and broadcast signaling")
11892 (description
11893 "Blinker provides a fast dispatching system that allows any number of
11894interested parties to subscribe to events, or \"signals\".")
11895 (license license:expat)))
11896
11897(define-public pelican
11898 (package
11899 (name "pelican")
11900 (version "4.11.0")
11901 (source
11902 (origin
11903 (method url-fetch)
11904 (uri (pypi-uri "pelican" version))
11905 (sha256
11906 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
11907 (build-system pyproject-build-system)
11908 (arguments
11909 (list
11910 #:test-flags #~(list "-k" (string-append
11911 ;; These tests failed with AssertionError.
11912 "not test_typogrify_ignore_filters"
11913 " and not test_typogrify_ignore_tags"
11914 " and not test_error_on_warning"))))
11915 (native-inputs
11916 (list python-anyio
11917 python-beautifulsoup4
11918 python-lxml
11919 python-pdm-backend
11920 python-pytest
11921 python-smartypants
11922 python-typogrify))
11923 (inputs
11924 (list python-blinker
11925 python-dateutil
11926 ;; Ignoring `guix lint` warning as python-docutils is used to support
11927 ;; reStructuredText processing at runtime.
11928 python-docutils
11929 python-feedgenerator
11930 python-jinja2
11931 python-ordered-set
11932 python-pygments
11933 python-rich
11934 python-tzdata
11935 python-unidecode
11936 python-watchfiles))
11937 (home-page "https://blog.getpelican.com/")
11938 (synopsis "Python-based static site publishing system")
11939 (description
11940 "Pelican is a tool to generate a static blog from reStructuredText,
11941Markdown input files, and more. Pelican uses Jinja2 for templating
11942and is very extensible.")
11943 (license license:agpl3+)))
11944
11945(define-public python-cykhash
11946 (package
11947 (name "python-cykhash")
11948 (version "2.0.1")
11949 (source
11950 (origin
11951 (method url-fetch)
11952 (uri (pypi-uri "cykhash" version))
11953 (sha256
11954 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
11955 (build-system pyproject-build-system)
11956 (arguments
11957 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
11958 (native-inputs
11959 (list python-cython
11960 python-setuptools))
11961 (home-page "https://github.com/realead/cykhash")
11962 (synopsis "Khash-sets and maps")
11963 (description
11964 "This package is a Cython wrapper for khash-sets/maps. It brings
11965functionality of
11966@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
11967Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
11968world is lacking the concept of a (hash-)set. This shortcoming is fixed and
11969efficient (memory- and speedwise compared to pandas) @code{unique} and
11970@code{isin} are implemented. Python-set/dict have a big memory-footprint.
11971For some datatypes the overhead can be reduced by using khash by factor 4-8.")
11972 (license license:expat)))
11973
11974(define-public python-cython
11975 ;; TODO: Move to python-build.
11976 (package
11977 (name "python-cython")
11978 (version "3.1.7")
11979 (source
11980 (origin
11981 (method url-fetch)
11982 (uri (pypi-uri "cython" version))
11983 (sha256
11984 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
11985 (build-system pyproject-build-system)
11986 (arguments
11987 (list
11988 #:test-backend #~'custom
11989 #:test-flags
11990 #~(list "runtests.py"
11991 "-vv"
11992 "-j" (number->string (parallel-job-count))
11993 "-x" (string-join
11994 (list "annotate_html"
11995 "Debugger"
11996 ;; It introduces cycle.
11997 "numpy_test"
11998 ;; It fails with AssertionError: Failed doctest test
11999 ;; for complex_numbers_cpp.double_abs.
12000 "complex_numbers_cpp"
12001 ;; This test fails when running on 24 cores.
12002 "cpp_stl_conversion"
12003 #$@(if (target-32bit?)
12004 ;; XXX: On 32-bit architectures, running the
12005 ;; parallel tests fails on many-core systems.
12006 ;; See: <https://github.com/cython/cython/issues/2807>.
12007 '("run.parallel"
12008 ;; Test cpp_stl_any.cast_test fails.
12009 ;; See: <https://github.com/cython/cython/issues/5928>.
12010 "cpp_stl_any")
12011 '())
12012 #$@(if (system-hurd?)
12013 '("test_class_ref"
12014 "test_compiler_directives"
12015 "test_lang_version")
12016 '()))
12017 "|"))
12018 #:phases
12019 #~(modify-phases %standard-phases
12020 (add-before 'check 'pre-check
12021 (lambda* (#:key tests? test-flags #:allow-other-keys)
12022 ;; Disable compiler optimizations to greatly reduce the running
12023 ;; time of the test suite.
12024 (setenv "CFLAGS" "-O0")
12025 ;; Some tests require access to "$HOME/.cython".
12026 (setenv "HOME" "/tmp"))))))
12027 (native-inputs
12028 (list libxcrypt
12029 python-setuptools
12030 python-wheel))
12031 ;; we need the full python package and not just the python-wrapper
12032 ;; because we need libpython3.3m.so
12033 (inputs
12034 (list python))
12035 (home-page "https://cython.org/")
12036 (synopsis "C extensions for Python")
12037 (description "Cython is an optimising static compiler for both the Python
12038programming language and the extended Cython programming language. It makes
12039writing C extensions for Python as easy as Python itself.")
12040 (license license:asl2.0)))
12041
12042(define-public python-cython-0
12043 (package
12044 (inherit python-cython)
12045 ;; It's the latest version of 0.29. See
12046 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12047 (version "0.29.37")
12048 (source
12049 (origin
12050 (method url-fetch)
12051 (uri (pypi-uri "Cython" version))
12052 (sha256
12053 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12054 (arguments
12055 (list
12056 ;; XXX: Tests are broken with [email protected], but dependent packages
12057 ;; build, so keep it until unnecessary.
12058 #:tests? #f
12059 #:test-backend #~'custom
12060 #:test-flags
12061 #~(list "runtests.py"
12062 "-vv"
12063 "-j" (number->string (parallel-job-count))
12064 ;; XXX: On 32-bit architectures, running the parallel tests
12065 ;; fails on many-core systems, see
12066 ;; <https://github.com/cython/cython/issues/2807>.
12067 #$@(if (target-32bit?)
12068 #~("-x" "run.parallel")
12069 #~())
12070 #$@(if (system-hurd?)
12071 #~("-x" "test_class_ref"
12072 "-x" "test_compiler_directives"
12073 "-x" "test_lang_version")
12074 #~())
12075 ;; This test fails when running on 24 cores.
12076 "-x" "cpp_stl_conversion")
12077 #:phases
12078 #~(modify-phases %standard-phases
12079 (add-after 'unpack 'fix-pyximport-python-3.12
12080 (lambda _
12081 (let ((importlib-util-load-dynamic "\
12082import importlib.util
12083from importlib.machinery import ExtensionFileLoader
12084
12085def load_dynamic(name, path):
12086 loader = ExtensionFileLoader(name, path)
12087 spec = importlib.util.spec_from_file_location(name, loader=loader)
12088 module = importlib.util.module_from_spec(spec)
12089 spec.loader.exec_module(module)
12090 return module
12091"))
12092 (substitute* "pyximport/pyximport.py"
12093 (("^import imp")
12094 importlib-util-load-dynamic)
12095 (("imp\\.load_dynamic")
12096 "load_dynamic")))))
12097 (add-before 'check 'pre-check
12098 ;; some tests require access to "$HOME/.cython"
12099 (lambda _
12100 (setenv "HOME" "/tmp")
12101 ;; Disable compiler optimizations to greatly reduce the running
12102 ;; time of the test suite.
12103 (setenv "CFLAGS" "-O0"))))))))
12104
12105(define-public python-cython-next
12106 (package
12107 (inherit python-cython)
12108 (version "3.2.2")
12109 (source
12110 (origin
12111 (method url-fetch)
12112 (uri (pypi-uri "cython" version))
12113 (sha256
12114 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
12115
12116;; NOTE: when upgrading numpy please make sure that python-numba,
12117;; python-pandas and python-scipy still build, as these three packages are
12118;; often used together.
12119(define-public python-numpy
12120 (package
12121 (name "python-numpy")
12122 (version "2.3.1")
12123 (source
12124 (origin
12125 (method url-fetch)
12126 (uri (string-append
12127 "https://github.com/numpy/numpy/releases/download/v"
12128 version "/numpy-" version ".tar.gz"))
12129 (sha256
12130 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
12131 (build-system pyproject-build-system)
12132 (arguments
12133 (list
12134 ;; tests: 47513 passed, 1740 skipped, 33 xfailed, 5 xpassed, 341 warnings
12135 #:modules '((guix build utils)
12136 (guix build pyproject-build-system)
12137 (ice-9 format))
12138 #:test-flags
12139 #~(list "-m" "not slow"
12140 "--numprocesses" (number->string (min 8 (parallel-job-count)))
12141 ;; See: <https://github.com/numpy/numpy/issues/27531>,
12142 ;; <https://github.com/numpy/numpy/issues/17685>,
12143 ;; <https://github.com/numpy/numpy/issues/17635>.
12144 "-k" "not test_api_importable")
12145 #:phases
12146 #~(modify-phases %standard-phases
12147 (add-after 'unpack 'fix-executable-paths
12148 (lambda _
12149 (substitute* "numpy/distutils/exec_command.py"
12150 (("'/bin/sh'")
12151 (format #f "~s" (which "bash"))))
12152 (substitute* "numpy/meson.build"
12153 ;; Relay on python from the PATH instead of full reference
12154 ;; stored in built wheel.
12155 (("'py.full_path\\(\\)'") "'python'"))))
12156 ;; This isn't architecture specific.
12157 ;; TODO: Remove this conditional and apply for all builds.
12158 #$@(if (target-ppc64le?)
12159 #~((add-after 'unpack 'patch-bin-true
12160 (lambda* (#:key inputs #:allow-other-keys)
12161 (substitute* "numpy/_core/tests/test_cpu_features.py"
12162 (("/bin/true")
12163 (search-input-file inputs "bin/true"))))))
12164 #~())
12165 (add-before 'build 'parallelize-build
12166 (lambda _
12167 (setenv "OMP_NUM_THREAD"
12168 (number->string (parallel-job-count)))
12169 (setenv "NPY_NUM_BUILD_JOBS"
12170 (number->string (parallel-job-count)))))
12171 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12172 ;; when the gfortran header is used. Remove gfortran from
12173 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12174 ;; <https://issues.guix.gnu.org/73439#45>.
12175 (add-after 'set-paths 'hide-gfortran
12176 (lambda* (#:key inputs #:allow-other-keys)
12177 (let ((gfortran (assoc-ref inputs "gfortran")))
12178 (setenv "CPLUS_INCLUDE_PATH"
12179 (string-join
12180 (delete (string-append gfortran "/include/c++")
12181 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12182 ":")))))
12183 (add-before 'build 'configure-blas
12184 (lambda* (#:key inputs #:allow-other-keys)
12185 (call-with-output-file "site.cfg"
12186 (lambda (port)
12187 (format port
12188 "[openblas]
12189libraries = openblas
12190library_dirs = ~a/lib
12191include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12192 (replace 'check
12193 (lambda* (#:key tests? test-flags #:allow-other-keys)
12194 (when tests?
12195 (with-directory-excursion #$output
12196 (apply invoke "pytest" test-flags)))))
12197 ;; The executables provided by this package ('f2py' and 'numpy-config')
12198 ;; only depend on Python. By customizing the wrap phase we can ensure
12199 ;; that we don't add all Python packages listed in native-inputs to
12200 ;; the closure. This significantly reduces the overall closure size.
12201 ;;
12202 ;; See also <https://bugs.gnu.org/25235>.
12203 (replace 'wrap
12204 (lambda* (#:key inputs outputs #:allow-other-keys)
12205 (for-each
12206 (lambda (program)
12207 (wrap-program program
12208 `("GUIX_PYTHONPATH" ":" suffix
12209 ,(list (site-packages inputs outputs)))))
12210 (find-files (in-vicinity #$output "/bin"))))))))
12211 (native-inputs
12212 (list gfortran
12213 python-hypothesis
12214 python-meson
12215 python-pytest
12216 python-pytest-xdist
12217 python-setuptools
12218 python-typing-extensions))
12219 (home-page "https://numpy.org")
12220 (synopsis "Fundamental package for scientific computing with Python")
12221 (description "NumPy is the fundamental package for scientific computing
12222with Python. It contains among other things: a powerful N-dimensional array
12223object, sophisticated (broadcasting) functions, tools for integrating C/C++
12224and Fortran code, useful linear algebra, Fourier transform, and random number
12225capabilities.")
12226 (properties
12227 '((upstream-name . "numpy")))
12228 (license license:bsd-3)))
12229
12230(define-public python-numpy-1
12231 (package
12232 (inherit python-numpy)
12233 (name "python-numpy")
12234 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12235 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12236 ;; in upstream Meson.
12237 ;;
12238 ;; See:
12239 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12240 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12241 ;; - file <doc/source/building/understanding_meson.rst>
12242 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12243 (source
12244 (origin
12245 (method url-fetch)
12246 (uri (string-append
12247 "https://github.com/numpy/numpy/releases/download/v"
12248 version "/numpy-" version ".tar.gz"))
12249 (sha256
12250 (base32
12251 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12252 (patches (search-patches "python-numpy-gcc-14.patch"))))
12253 (arguments
12254 (list
12255 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12256 #:modules '((guix build utils)
12257 (guix build pyproject-build-system)
12258 (ice-9 format))
12259 #:phases
12260 #~(modify-phases %standard-phases
12261 (add-after 'unpack 'delete-test-files
12262 (lambda _
12263 ;; These tests depend on older setuptools, see:
12264 ;; <https://github.com/numpy/numpy/issues/27531>.
12265 ;;
12266 ;; E ModuleNotFoundError: No module named
12267 ;; 'distutils.msvccompiler'
12268 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12269 (delete-file "numpy/distutils/tests/test_system_info.py")))
12270 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12271 ;; when the gfortran header is used. Remove gfortran from
12272 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12273 ;; <https://issues.guix.gnu.org/73439#45>.
12274 (add-after 'set-paths 'hide-gfortran
12275 (lambda* (#:key inputs #:allow-other-keys)
12276 (let ((gfortran (assoc-ref inputs "gfortran")))
12277 (setenv "CPLUS_INCLUDE_PATH"
12278 (string-join
12279 (delete (string-append gfortran "/include/c++")
12280 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12281 ":")))))
12282 (add-before 'build 'relax-gcc-14-strictness
12283 (lambda _
12284 (setenv "CFLAGS"
12285 "-g -O2 -Wno-error=implicit-function-declaration")))
12286 (add-before 'build 'parallelize-build
12287 (lambda _
12288 (setenv "NPY_NUM_BUILD_JOBS"
12289 (number->string (parallel-job-count)))))
12290 (add-before 'build 'configure-blas
12291 (lambda* (#:key inputs #:allow-other-keys)
12292 (call-with-output-file "site.cfg"
12293 (lambda (port)
12294 (format port
12295 "\
12296[openblas]
12297libraries = openblas
12298library_dirs = ~a/lib
12299include_dirs = ~:*~a/include~%"
12300 (dirname (dirname
12301 (search-input-file
12302 inputs "include/openblas_config.h"))))))))
12303 (add-before 'build 'fix-executable-paths
12304 (lambda* (#:key inputs #:allow-other-keys)
12305 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12306 ;; instead of /bin/sh.
12307 (substitute* "numpy/distutils/exec_command.py"
12308 (("'/bin/sh'")
12309 (format #f "~s" (search-input-file inputs "bin/bash"))))
12310 ;; Don't try to call '/bin/true' specifically.
12311 (substitute* "numpy/core/tests/test_cpu_features.py"
12312 (("/bin/true") (search-input-file inputs "bin/true")))))
12313 (replace 'check
12314 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12315 (when tests?
12316 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12317 "-j" (number->string (parallel-job-count))
12318 ;; Contrary to scipy, the runtests.py script of numpy
12319 ;; does *not* automatically provide -n when -j is used
12320 ;; (see: https://github.com/numpy/numpy/issues/21359).
12321 "--" "-n" (number->string (parallel-job-count))
12322 ;; Disable Pytest Warnings, they are resolved in the
12323 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12324 ;; applied to fixtures have no effect,
12325 ;; DeprecationWarning.
12326 "-p" "no:warnings"
12327 "-k" (string-append
12328 ;; These tests may fail on 32-bit systems (see:
12329 ;; https://github.com/numpy/numpy/issues/18387).
12330 "not test_float_remainder_overflow "
12331 "and not test_pareto "
12332 ;; The 'test_rint_big_int' test fails on older
12333 ;; x86_64 CPUs such as the Core 2 Duo (see:
12334 ;; https://github.com/numpy/numpy/issues/22170).
12335 "and not test_rint_big_int "
12336 ;; They fail to detect compiler.
12337 "and not test_compile1 "
12338 "and not test_compile2 "
12339 ;; Due to disabled warnings
12340 "and not test_getattr_warning "
12341 "and not test_integer_signs "
12342 "and not test_implicit_cast_float_to_int_fails "
12343 "and not test_integer_signs "
12344 ;; The huge_array test is too large for 32-bit (see:
12345 ;; https://bugs.gentoo.org/843599 and
12346 ;; https://bugs.gentoo.org/846548).
12347 ;; TestKind.test_all is a Fortran type failure
12348 ;; that may be toolchain or environment related.
12349 #$@(if (or (target-x86?) (target-arm32?))
12350 `(" and not test_identityless_reduction_huge_array"
12351 " and not (TestKind and test_all)")
12352 '())
12353 ;; This test fails with a Fortran failure (16
12354 ;; expected but got -1), due to the fact that it
12355 ;; requires a 64-bit system.
12356 #$@(if (or (target-x86-32?) (target-arm32?))
12357 `(" and not test_int")
12358 '())
12359 ;; These tests fail when building from aarch64-linux.
12360 #$@(if (target-arm32?)
12361 `(" and not test_features"
12362 " and not test_unary_spurious_fpexception")
12363 '())
12364 ;; These tests seem to fail on machines without
12365 ;; an FPU is still under investigation upstream.
12366 ;; https://github.com/numpy/numpy/issues/20635
12367 #$@(if (target-riscv64?)
12368 `(" and not test_fp_noncontiguous")
12369 '())
12370 ;; They also fail with gcc-14
12371 " and not test_float"
12372 " and not test_fpclass"
12373
12374 ;; These tests fail with gcc-14
12375 " and not test_context_locality"
12376 " and not test_cosh"
12377 " and not test_default_policy_singleton"
12378 " and not test_exp_exceptions"
12379 " and not test_half_fpe"
12380 " and not test_owner_is_base"
12381 " and not test_policy_propagation"
12382 " and not test_set_policy"
12383 " and not test_sinh"
12384 " and not test_square_values"
12385 " and not test_sum"
12386 " and not test_switch_owner"
12387 " and not test_thread_locality"
12388
12389 ;; These tests depend on older setuptools, see:
12390 ;; <https://github.com/numpy/numpy/issues/27531>.
12391 " and not test_api_importable"
12392 " and not test_all_modules_are_expected_2")))))
12393 ;; See comment for custom python-numpy wrap phase above.
12394 (replace 'wrap
12395 (lambda* (#:key inputs outputs #:allow-other-keys)
12396 (for-each
12397 (lambda (program)
12398 (wrap-program program
12399 `("GUIX_PYTHONPATH" ":" suffix
12400 ,(list (site-packages inputs outputs)))))
12401 (find-files (in-vicinity #$output "/bin"))))))))
12402 (native-inputs
12403 (list python-hypothesis
12404 python-meson
12405 python-pytest
12406 python-pytest-xdist
12407 python-setuptools
12408 python-typing-extensions
12409 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12410 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12411 ;; <https://github.com/numpy/numpy/issues/24318>.
12412 gcc ;fevn.h c[++] include must precede fortran's
12413 gfortran))
12414 (inputs (list bash openblas))))
12415
12416(define-deprecated/public-alias python-numpy-2 python-numpy)
12417
12418(define-public python-numpysane
12419 (package
12420 (name "python-numpysane")
12421 (version "0.42")
12422 (source
12423 (origin
12424 (method git-fetch)
12425 (uri (git-reference
12426 (url "https://github.com/dkogan/numpysane.git")
12427 (commit (string-append "v" version))))
12428 (file-name (git-file-name name version))
12429 (sha256
12430 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
12431 (build-system pyproject-build-system)
12432 (arguments
12433 (list
12434 #:phases
12435 #~(modify-phases %standard-phases
12436 (add-after 'unpack 'patch
12437 (lambda* (#:key inputs outputs #:allow-other-keys)
12438 (let* ((numpy (assoc-ref inputs "python-numpy"))
12439 (site (site-packages inputs `(("out" . ,numpy)))))
12440 (substitute* "Makefile.common.header"
12441 ;; numpy 2.0 has this--but we don't use numpy 2.0.
12442 (("pkg-config --cflags-only-I numpy")
12443 (format #f "echo -I~a/numpy/core/include" site))))))
12444 (replace 'check
12445 (lambda _
12446 (setenv "CC"
12447 #$(cc-for-target))
12448 (invoke "make" "check"))))))
12449 (propagated-inputs (list python-numpy-1))
12450 (native-inputs (list perl pkg-config python-setuptools))
12451 (home-page "https://github.com/dkogan/numpysane")
12452 (synopsis "More-reasonable core functionality for numpy")
12453 (description
12454 "This package provides more-reasonable core functionality for numpy.
12455
12456A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12457
12458numpysane has:
12459@itemize
12460@item easier broadcasting
12461@item nicer array manipulation
12462@item array concatenation
12463@item manipulation of dimensions
12464@item broadcast-aware inner product
12465@item broadcast-aware outer product
12466@item broadcast-aware 2-norm
12467@item broadcast-aware matrix multiplication
12468@end itemize
12469")
12470 (license license:lgpl2.0+)))
12471
12472(define-public python-numpy-documentation
12473 (package
12474 (inherit python-numpy)
12475 (name "python-numpy-documentation")
12476 (arguments
12477 (list
12478 #:tests? #f ;we're only generating the documentation
12479 #:phases
12480 #~(modify-phases %standard-phases
12481 (add-after 'unpack 'avoid-external-deps
12482 (lambda _
12483 ;; XXX: Avoid search-button to avoid sphinx error
12484 ;; TemplateNotFound('search-button.html')
12485 (substitute* "doc/source/conf.py"
12486 (("\"search-button\",") ""))
12487 ;; XXX: Avoid theme-switcher to avoid sphinx error
12488 ;; TemplateNotFound('theme-switcher.html')
12489 (substitute* "doc/source/conf.py"
12490 (("\"theme-switcher\",") ""))
12491 ;; XXX: Avoid version-switcher because it depends on the value
12492 ;; of external https://numpy.org/doc/_static/versions.json
12493 (substitute* "doc/source/conf.py"
12494 (("\"version-switcher\",") ""))))
12495 (add-before 'build 'add-gnu-freefont-to-texmf
12496 (lambda _
12497 ;; XXX: The Sphinx-generated tex output specifies the GNU
12498 ;; FreeFont font to be searched via its extension, which uses
12499 ;; kpathsea instead of fontconfig and fail (see:
12500 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12501 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12502 ;; GUIX_TEXMF.
12503 (mkdir-p "texmf-dist/fonts/opentype/public")
12504 (symlink (string-append
12505 #$(this-package-native-input "font-gnu-freefont")
12506 "/share/fonts/opentype")
12507 (string-append
12508 (getcwd) "/"
12509 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12510 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12511 (getcwd) "/texmf-dist"))))
12512 (replace 'build
12513 (lambda _
12514 (chdir "doc")
12515 (let ((sphinxopts (string-append
12516 "SPHINXOPTS=-j"
12517 (number->string (parallel-job-count)))))
12518 ;; Do not treat warnings as errors.
12519 (substitute* "Makefile"
12520 ((" -WT ") " -T "))
12521 (setenv "HOME" "/tmp")
12522 ;; Build the PDF documentation.
12523 (invoke "make" "latex-build" sphinxopts)
12524 ;; FIXME: PDF build fails
12525 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12526 ;; Build the HTML documentation
12527 (invoke "make" "html" sphinxopts)
12528 ;; Build the Info documentation. The issues worked around
12529 ;; below can be tracked at
12530 ;; https://github.com/numpy/numpy/issues/12278.
12531 (substitute* "source/conf.py"
12532 ;; The root document should be "index", not "contents".
12533 (("\"contents\"") "'index'")
12534 ;; Disable Sphinx extensions that produce broken Texinfo.
12535 ((".*'numpydoc'.*") "")
12536 ((".*'sphinx.ext.autodoc'.*") "")
12537 ((".*'sphinx.ext.autosummary'.*") ""))
12538 (invoke "make" "info" sphinxopts))))
12539 (replace 'install
12540 (lambda _
12541 (let* ((data (string-append #$output "/share"))
12542 (doc (string-append data "/doc/numpy"))
12543 (html (string-append doc "/html"))
12544 (info (string-append data "/info")))
12545 ;; Install the HTML documentation.
12546 (mkdir-p html)
12547 (copy-recursively "build/html" html)
12548 ;; Install the PDF reference and user manuals.
12549 ;; FIXME:
12550 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12551 ;; (install-file "build/latex/numpy-user.pdf" doc)
12552 ;; Install the info manual.
12553 (install-file "build/texinfo/numpy.info" info)
12554 (symlink (string-append html "/_images")
12555 (string-append info "/numpy-figures"))))))))
12556 (native-inputs
12557 (list font-gnu-freefont
12558 perl
12559 python-breathe
12560 python-ipython
12561 python-jupyterlite-sphinx
12562 python-matplotlib
12563 python-numpy
12564 python-numpydoc
12565 python-pandas
12566 python-pydata-sphinx-theme
12567 python-scipy ;used by matplotlib
12568 python-setuptools
12569 python-sphinx
12570 python-sphinx-copybutton
12571 python-sphinx-design
12572 texinfo
12573 (texlive-local-tree
12574 (list texlive-cbfonts
12575 texlive-cm-super
12576 texlive-cmap
12577 texlive-expdlist
12578 texlive-fandol
12579 texlive-greek-fontenc
12580 texlive-latexmk
12581 texlive-polyglossia
12582 texlive-xetex
12583 texlive-xindy))))
12584 (inputs '())
12585 (propagated-inputs '())
12586 (synopsis "Documentation for the @code{python-numpy} package")
12587 (description "This package provides the complete NumPy documentation in
12588the Texinfo, and HTML formats.")))
12589
12590(define-public python-numpy-stl
12591 (package
12592 (name "python-numpy-stl")
12593 (version "3.2.0")
12594 (source
12595 (origin
12596 (method url-fetch)
12597 (uri (pypi-uri "numpy_stl" version))
12598 (sha256
12599 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12600 (build-system pyproject-build-system)
12601 (native-inputs
12602 (list python-cython
12603 python-pytest
12604 python-setuptools
12605 python-wheel))
12606 (propagated-inputs
12607 (list python-numpy
12608 python-utils))
12609 (home-page "https://github.com/WoLpH/numpy-stl/")
12610 (synopsis "Read, write and modify binary/ASCII STL files library")
12611 (description
12612 "Library to make reading, writing and modifying both binary and ascii STL
12613files, file format native to the stereolithography CAD software created by 3D
12614Systems, easy.")
12615 (license license:bsd-3)))
12616
12617(define-public python-npx
12618 (package
12619 (name "python-npx")
12620 (version "0.1.6")
12621 (source
12622 (origin
12623 (method git-fetch) ; no source archive in PyPI
12624 (uri (git-reference
12625 (url "https://github.com/sigma-py/npx")
12626 (commit (string-append "v" version))))
12627 (file-name (git-file-name name version))
12628 (sha256
12629 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12630 (build-system pyproject-build-system)
12631 (native-inputs
12632 (list python-networkx
12633 python-pytest
12634 python-setuptools
12635 python-wheel))
12636 (propagated-inputs
12637 (list python-numpy))
12638 (home-page "https://github.com/nschloe/npx")
12639 (synopsis "Extensions for NumPy")
12640 (description "NumPy is a large library used everywhere in scientific
12641computing. That's why breaking backwards-compatibility comes at a
12642significant cost and is almost always avoided, even if the API of some
12643methods is arguably lacking. This package provides drop-in wrappers
12644\"fixing\" those.")
12645 (license license:bsd-3)))
12646
12647(define-public python-munch
12648 (package
12649 (name "python-munch")
12650 (version "4.0.0")
12651 (source
12652 (origin
12653 (method url-fetch)
12654 (uri (pypi-uri "munch" version))
12655 (sha256
12656 (base32
12657 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12658 (build-system pyproject-build-system)
12659 (native-inputs
12660 (list python-astroid
12661 python-pytest
12662 python-setuptools
12663 python-wheel))
12664 (home-page "https://github.com/Infinidat/munch")
12665 (synopsis "Dot-accessible dictionary")
12666 (description "Munch is a dot-accessible dictionary similar to JavaScript
12667objects.")
12668 (license license:expat)))
12669
12670(define-public python-colormath2
12671 (package
12672 (name "python-colormath2")
12673 (version "3.0.3")
12674 (source
12675 (origin
12676 (method git-fetch)
12677 (uri (git-reference
12678 (url "https://github.com/bkmgit/python-colormath2")
12679 (commit version)))
12680 (file-name (git-file-name name version))
12681 (sha256
12682 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12683 (build-system pyproject-build-system)
12684 (propagated-inputs (list python-networkx python-numpy))
12685 (native-inputs (list python-nose2 python-setuptools))
12686 (home-page "https://github.com/bkmgit/python-colormath2")
12687 (synopsis "Color math and conversion library")
12688 (description
12689 "This is a Python library for color math and conversions.")
12690 (license license:bsd-3)))
12691
12692(define-public python-pyspnego
12693 (package
12694 (name "python-pyspnego")
12695 (version "0.8.0")
12696 (source (origin
12697 (method url-fetch)
12698 (uri (pypi-uri "pyspnego" version))
12699 (sha256
12700 (base32
12701 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
12702 (build-system pyproject-build-system)
12703 (native-inputs
12704 (list python-pytest python-pytest-mock python-setuptools python-wheel))
12705 (propagated-inputs
12706 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
12707 (home-page "https://github.com/jborean93/pyspnego")
12708 (synopsis "Python SPNEGO library")
12709 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
12710Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
12711parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
12712readable format.")
12713 (license license:expat)))
12714
12715(define-public python-pygit2
12716 (package
12717 (name "python-pygit2")
12718 (version "1.18.2")
12719 (source
12720 (origin
12721 (method url-fetch)
12722 (uri (pypi-uri "pygit2" version))
12723 (sha256
12724 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
12725 (build-system pyproject-build-system)
12726 (propagated-inputs (list python-cffi libgit2))
12727 (native-inputs (list python-pytest python-setuptools python-wheel))
12728 (home-page "https://github.com/libgit2/pygit2")
12729 (synopsis "Python bindings for libgit2")
12730 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
12731 ;; GPL2.0 only, with linking exception.
12732 (license license:gpl2)))
12733
12734(define-public python-patiencediff
12735 (package
12736 (name "python-patiencediff")
12737 (version "0.2.15")
12738 (source
12739 (origin
12740 (method url-fetch)
12741 (uri (pypi-uri "patiencediff" version))
12742 (sha256
12743 (base32
12744 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
12745 (build-system pyproject-build-system)
12746 (arguments
12747 (list
12748 #:phases #~(modify-phases %standard-phases
12749 ;; Fails because bin/patiencediff expects two files to diff
12750 (delete 'sanity-check))))
12751 (native-inputs (list python-pytest python-setuptools python-wheel))
12752 (home-page "https://www.breezy-vcs.org/")
12753 (synopsis "Python implementation of the patiencediff algorithm")
12754 (description
12755 "This package contains a Python implementation of the @code{patiencediff}
12756algorithm. Patiencediff provides a good balance of performance, nice output for
12757humans, and implementation simplicity.")
12758 (license license:gpl2+)))
12759
12760(define-public python-merge3
12761 (package
12762 (name "python-merge3")
12763 (version "0.0.16")
12764 (source
12765 (origin
12766 (method git-fetch)
12767 (uri (git-reference
12768 (url "https://github.com/breezy-team/merge3")
12769 (commit (string-append "v" version))))
12770 (file-name (git-file-name name version))
12771 (sha256
12772 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
12773 (build-system pyproject-build-system)
12774 (arguments (list #:test-backend #~'unittest))
12775 (native-inputs (list python-setuptools))
12776 (home-page "https://github.com/breezy-team/merge3")
12777 (synopsis "Python implementation of 3-way merge")
12778 (description "This Python library implements 3-way merge for text.")
12779 (license license:gpl2+)))
12780
12781(define-public python-fancycompleter
12782 (package
12783 (name "python-fancycompleter")
12784 (version "0.9.1")
12785 (source
12786 (origin
12787 (method git-fetch)
12788 (uri (git-reference
12789 (url "https://github.com/pdbpp/fancycompleter")
12790 (commit version)))
12791 (file-name (git-file-name name version))
12792 (sha256
12793 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
12794 (build-system pyproject-build-system)
12795 (arguments
12796 (list
12797 #:phases
12798 #~(modify-phases %standard-phases
12799 (add-after 'unpack 'fix-setup.py
12800 (lambda _
12801 (substitute* "setup.py"
12802 ((".*setupmeta.*")
12803 "")
12804 (("versioning=.*")
12805 (string-append "version='" #$version "',"))
12806 ((".*pyrepl.*") ; broken on Python 3
12807 "")))))))
12808 (native-inputs (list python-pytest python-setuptools))
12809 (home-page "https://github.com/pdbpp/fancycompleter")
12810 (synopsis "TAB completion library for Python")
12811 (description
12812 "@code{fancycompleter} is a module that adds TAB completion to the
12813interactive prompt. It is an extension of the @code{rlcompleter} module from
12814the standard Python library.")
12815 (license license:bsd-3)))
12816
12817(define-public python-ipdb
12818 (package
12819 (name "python-ipdb")
12820 (version "0.13.13")
12821 (source
12822 (origin
12823 (method git-fetch)
12824 (uri (git-reference
12825 (url "https://github.com/gotcha/ipdb")
12826 (commit version)))
12827 (file-name (git-file-name name version))
12828 (sha256
12829 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
12830 (build-system pyproject-build-system)
12831 (arguments (list #:test-backend #~'unittest))
12832 (native-inputs (list python-setuptools))
12833 (propagated-inputs (list python-ipython python-toml python-decorator))
12834 (home-page "https://github.com/gotcha/ipdb")
12835 (synopsis "IPython-enhanced Python debugger (pdb)")
12836 (description
12837 "@code{ipdb} exports functions to access the IPython debugger, which
12838features tab completion, syntax highlighting, better tracebacks and better
12839introspection than Python's standard @command{pdb} debugger, with which it
12840shares the same interface.")
12841 (license license:bsd-3)))
12842
12843(define-public python-ipfsspec
12844 (package
12845 (name "python-ipfsspec")
12846 (version "0.4.0")
12847 (source
12848 (origin
12849 (method url-fetch)
12850 (uri (pypi-uri "ipfsspec" version))
12851 (sha256
12852 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
12853 (build-system pyproject-build-system)
12854 (arguments
12855 (list
12856 #:test-flags
12857 '(list "-m not local_gw"
12858 ;; Require local gateway
12859 "--ignore=test/test_gateway.py"
12860 ;; Require internet
12861 "--ignore=test/test_async.py"
12862 "--ignore=test/test_ipfs.py")))
12863 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
12864 (native-inputs
12865 (list python-pytest
12866 python-pytest-asyncio
12867 python-setuptools
12868 python-wheel))
12869 (home-page "https://github.com/fsspec/ipfsspec")
12870 (synopsis "Read-only implementation of fsspec for IPFS")
12871 (description "This package provides a read-only implementation of
12872@code{fsspec} for IPFS.")
12873 (license license:expat)))
12874
12875(define-public python-pdftotext
12876 (package
12877 (name "python-pdftotext")
12878 (version "3.0.0")
12879 (source
12880 (origin
12881 (method url-fetch)
12882 (uri (pypi-uri "pdftotext" version))
12883 (sha256
12884 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
12885 (build-system pyproject-build-system)
12886 (native-inputs (list python-pytest python-setuptools python-wheel))
12887 (inputs (list poppler))
12888 (home-page "https://github.com/jalan/pdftotext")
12889 (synopsis "Simple PDF text extraction")
12890 (description "Pdftotext is a Python library of PDF text extraction.")
12891 (license license:expat)))
12892
12893(define-public python-pluginbase
12894 (package
12895 (name "python-pluginbase")
12896 (version "1.0.1")
12897 (source
12898 (origin
12899 (method git-fetch)
12900 (uri (git-reference
12901 (url "https://github.com/mitsuhiko/pluginbase")
12902 (commit (string-append "v" version))))
12903 (file-name (git-file-name name version))
12904 (sha256
12905 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
12906 (build-system pyproject-build-system)
12907 (arguments
12908 (list
12909 #:phases
12910 #~(modify-phases %standard-phases
12911 (replace 'check
12912 (lambda* (#:key tests? #:allow-other-keys)
12913 (when tests?
12914 (invoke "make" "test")))))))
12915 (native-inputs (list python-pytest python-setuptools))
12916 (home-page "https://github.com/mitsuhiko/pluginbase")
12917 (synopsis "Simple but flexible plugin system for Python")
12918 (description
12919 "PluginBase is a library useful in the development of flexible plugin
12920systems in Python.")
12921 (license license:bsd-3)))
12922
12923(define-public python-node-semver
12924 (package
12925 (name "python-node-semver")
12926 (version "0.8.1")
12927 (source
12928 (origin
12929 (method git-fetch)
12930 (uri (git-reference
12931 (url "https://github.com/podhmo/python-node-semver")
12932 (commit version)))
12933 (file-name (git-file-name name version))
12934 (sha256
12935 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
12936 (build-system pyproject-build-system)
12937 (native-inputs (list python-pytest python-setuptools))
12938 (home-page "https://github.com/podhmo/python-node-semver")
12939 (synopsis "Python port of node-semver")
12940 (description
12941 "This module provides a Python version of node-semver, a semantic version
12942parser for Node.js.")
12943 (license license:expat)))
12944
12945(define-public python-norns
12946 (package
12947 (name "python-norns")
12948 (version "0.1.6")
12949 (source
12950 (origin
12951 (method git-fetch)
12952 (uri (git-reference
12953 (url "https://github.com/simonvh/norns")
12954 (commit version)))
12955 (file-name (git-file-name name version))
12956 (sha256
12957 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
12958 (patches
12959 (search-patches "python-norns-nose.patch"))))
12960 (build-system pyproject-build-system)
12961 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
12962 (native-inputs (list python-setuptools))
12963 (home-page "https://github.com/simonvh/norns")
12964 (synopsis "Simple YAML-based config module")
12965 (description "This package provides a simple YAML-based config module.")
12966 (license license:expat)))
12967
12968(define-public python-patch-ng
12969 (package
12970 (name "python-patch-ng")
12971 (version "1.18.1")
12972 (source
12973 (origin
12974 (method git-fetch)
12975 (uri (git-reference
12976 (url "https://github.com/conan-io/python-patch-ng")
12977 (commit version)))
12978 (file-name (git-file-name name version))
12979 (sha256
12980 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
12981 (build-system pyproject-build-system)
12982 (arguments
12983 (list
12984 #:test-backend #~'custom
12985 #:test-flags #~(list "tests/run_tests.py" "-v")))
12986 (native-inputs (list python-pytest python-setuptools))
12987 (home-page "https://github.com/conan-io/python-patch-ng")
12988 (synopsis "Python library to parse and apply unified diffs")
12989 (description
12990 "Patch NG (New Generation) is a command and Python library to parse and
12991apply unified diffs. It has features such as:
12992@itemize
12993@item automatic correction of common patch formatting corruption
12994@item patch format detection (SVN, Hg, Git)
12995@item nice diffstat histogram.
12996@end itemize")
12997 (license license:expat)))
12998
12999(define-public python-numpydoc
13000 (package
13001 (name "python-numpydoc")
13002 (version "1.10.0")
13003 (source
13004 (origin
13005 (method url-fetch)
13006 (uri (pypi-uri "numpydoc" version))
13007 (sha256
13008 (base32
13009 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13010 (build-system pyproject-build-system)
13011 (arguments
13012 (list
13013 #:test-flags
13014 '(list "numpydoc/tests"
13015 "-k" (string-append
13016 ;; TODO: unclear why these fail.
13017 "not test_MyClass and not test_my_function "
13018 ;; This test compares installed vs source absolute file
13019 ;; names.
13020 "and not test_source_file_name_with_properties"))))
13021 (propagated-inputs (list python-sphinx python-tomli))
13022 (native-inputs
13023 (list python-matplotlib python-pytest python-setuptools))
13024 (home-page "https://pypi.org/project/numpydoc/")
13025 (synopsis "Numpy's Sphinx extensions")
13026 (description "Sphinx extension to support docstrings in Numpy format.")
13027 (license license:bsd-2)))
13028
13029(define-public python-numexpr
13030 (package
13031 (name "python-numexpr")
13032 (version "2.14.1")
13033 (source
13034 (origin
13035 (method url-fetch)
13036 (uri (pypi-uri "numexpr" version))
13037 (sha256
13038 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
13039 (build-system pyproject-build-system)
13040 (arguments
13041 (list
13042 ;; tests: 6039 passed, 8 warnings
13043 #:phases
13044 #~(modify-phases %standard-phases
13045 (replace 'check
13046 (lambda* (#:key tests? test-flags #:allow-other-keys)
13047 (when tests?
13048 (with-directory-excursion #$output
13049 (apply invoke "pytest" "-vv" test-flags))))))))
13050 (native-inputs
13051 (list python-pytest
13052 python-setuptools))
13053 (propagated-inputs
13054 (list python-numpy))
13055 (home-page "https://github.com/pydata/numexpr")
13056 (synopsis "Fast numerical expression evaluator for NumPy")
13057 (description
13058 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13059expressions that operate on arrays are accelerated and use less memory than
13060doing the same calculation in Python. In addition, its multi-threaded
13061capabilities can make use of all your cores, which may accelerate
13062computations, most specially if they are not memory-bounded (e.g. those using
13063transcendental functions).")
13064 (license license:expat)))
13065
13066(define-public python-cycler
13067 (package
13068 (name "python-cycler")
13069 (version "0.12.1")
13070 (source
13071 (origin
13072 (method git-fetch) ;no tests in PyPI archive
13073 (uri (git-reference
13074 (url "https://github.com/matplotlib/cycler")
13075 (commit (string-append "v" version))))
13076 (file-name (git-file-name name version))
13077 (sha256
13078 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13079 (build-system pyproject-build-system)
13080 (native-inputs
13081 (list python-pytest
13082 python-setuptools))
13083 (home-page "https://matplotlib.org/cycler/")
13084 (synopsis "Composable keyword argument iterator")
13085 (description
13086 "When using @code{matplotlib} and plotting more than one line, it is
13087common to want to be able to want to be able to cycle over one or more artist
13088styles; but the plotting logic can quickly become involved.
13089To address this and enable easy cycling over arbitrary @code{kwargs}, the
13090@code{Cycler} class was developed.")
13091 (license license:bsd-3)))
13092
13093(define-public python-colorspacious
13094 (package
13095 (name "python-colorspacious")
13096 (version "1.1.2")
13097 (source
13098 (origin
13099 (method git-fetch)
13100 (uri (git-reference
13101 (url "https://github.com/njsmith/colorspacious")
13102 (commit (string-append "v" version))))
13103 (file-name (git-file-name name version))
13104 (sha256
13105 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13106 (build-system pyproject-build-system)
13107 (arguments (list #:tests? #f)) ; No tests.
13108 (propagated-inputs (list python-numpy))
13109 (native-inputs (list python-pytest python-setuptools))
13110 (home-page "https://github.com/njsmith/colorspacious")
13111 (synopsis "Python library for colorspace conversions")
13112 (description
13113 "@code{colorspacious} is a Python library that lets you convert between
13114colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13115 (license license:expat)))
13116
13117(define-public python-propcache
13118 (package
13119 (name "python-propcache")
13120 (version "0.2.1")
13121 (source
13122 (origin
13123 (method url-fetch)
13124 (uri (pypi-uri "propcache" version))
13125 (sha256
13126 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13127 (build-system pyproject-build-system)
13128 (arguments
13129 (list
13130 #:test-flags
13131 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13132 "--ignore=tests/test_benchmarks.py")
13133 #:phases
13134 '(modify-phases %standard-phases
13135 (add-after 'unpack 'patch-build-system
13136 (lambda _
13137 ;; XXX: I don't know how to tell it to build the extensions in
13138 ;; place.
13139 (substitute* "packaging/pep517_backend/_backend.py"
13140 (("build_inplace=False") "build_inplace=True")))))))
13141 (native-inputs
13142 (list python-cython
13143 python-expandvars
13144 python-pytest
13145 python-pytest-xdist
13146 python-setuptools
13147 python-tomli))
13148 (home-page "https://github.com/aio-libs/propcache")
13149 (synopsis "Accelerated property cache")
13150 (description "The module provides a fast implementation of cached
13151properties for Python 3.9+.")
13152 (license license:asl2.0)))
13153
13154(define-public python-proto-matcher
13155 (package
13156 (name "python-proto-matcher")
13157 (version "0.0.3")
13158 (source
13159 (origin
13160 (method git-fetch)
13161 (uri (git-reference
13162 (url "https://github.com/dayfine/proto-matcher")
13163 (commit version)))
13164 (file-name (git-file-name name version))
13165 (sha256
13166 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13167 (build-system pyproject-build-system)
13168 (native-inputs (list python-pytest python-setuptools))
13169 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13170 (propagated-inputs (list python-protobuf python-pyhamcrest))
13171 (home-page "https://github.com/dayfine/proto-matcher")
13172 (synopsis "PyHamcrest test matchers for protocol buffers")
13173 (description
13174 "This package provides the following PyHamcrest test matchers, that
13175enable matching a protocol buffer message:
13176@table @code
13177@item equals_proto
13178Test the argument equals the given protobuf message.
13179@item approximately
13180Test the argument equals the given protobuf message, while comparing any float
13181field using approximation.
13182@item ignoring_field_paths
13183Test the argument equals the given protobuf message, while ignoring those
13184fields specified in the field paths.
13185@item ignoring_repeated_field_ordering
13186Test the argument equals the given protobuf message, ignoring the ordering of
13187any repeated field.
13188@item partially
13189Test the argument partially equals the given protobuf message, i.e. if a field
13190is in the argument but not in the expected message, it's ignored in the
13191comparison.
13192@end table")
13193 (license license:asl2.0)))
13194
13195(define-public python-matplotlib
13196 (package
13197 (name "python-matplotlib")
13198 (version "3.10.8")
13199 (source
13200 (origin
13201 (method git-fetch)
13202 (uri (git-reference
13203 (url "https://github.com/matplotlib/matplotlib")
13204 (commit (string-append "v" version))))
13205 (file-name (git-file-name name version))
13206 (sha256
13207 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
13208 (build-system pyproject-build-system)
13209 (arguments
13210 (list
13211 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13212 #:configure-flags
13213 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13214 "-Dsystem-freetype=true"
13215 "-Dsystem-qhull=true"))
13216 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13217 #:test-flags
13218 #~(list "-m" "not network"
13219 "-n" (number->string (parallel-job-count))
13220 ;; Run the installed tests, which is what we want since not
13221 ;; everything gets built in the source directory.
13222 "--pyargs" "matplotlib"
13223 "-k"
13224 (string-join
13225 (list
13226 ;; XXX: Disable all image comparison tests because we're using
13227 ;; a newer version of FreeType than matplotlib expects. This
13228 ;; leads to minor differences throughout the tests.
13229 "not image_comparison"
13230 "check_figures_equal"
13231 "png" ;disables many problematic image tests
13232 "test_figure_legend_outside"
13233 "test_ft2font_get_kerning"
13234 "test_normal_axes"
13235 "test_get_tightbbox_polar"
13236 ;; The invisible line ordering test fails due to a too short
13237 ;; timeout (see:
13238 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13239 "test_invisible_Line_rendering"
13240 ;; The determinism check test is not deterministic (see:
13241 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13242 "test_determinism_check")
13243 " and not "))
13244 #:phases
13245 #~(modify-phases %standard-phases
13246 (add-after 'unpack 'patch-commands
13247 (lambda _
13248 (substitute* "lib/matplotlib/tests/test_animation.py"
13249 (("/bin/sh") (which "sh")))))
13250 (add-after 'unpack 'patch-dlopen
13251 (lambda* (#:key inputs #:allow-other-keys)
13252 (substitute* "src/_c_internal_utils.cpp"
13253 (("libX11.so.6")
13254 (search-input-file inputs "lib/libX11.so.6")))))
13255 (add-before 'build 'configure-environment
13256 (lambda* (#:key inputs #:allow-other-keys)
13257 ;; Fix rounding errors when using the x87 FPU.
13258 (when (string-prefix? "i686" #$(%current-system))
13259 (setenv "CFLAGS" "-ffloat-store"))))
13260 (add-before 'check 'chdir
13261 (lambda _
13262 ;; Step out of the source directory to avoid interference.
13263 (chdir "/tmp"))))))
13264 (propagated-inputs
13265 (list python-contourpy
13266 python-cycler
13267 python-dateutil
13268 python-fonttools-minimal
13269 python-importlib-resources
13270 python-kiwisolver
13271 python-numpy
13272 python-packaging
13273 python-pillow
13274 python-pyparsing
13275 `(,python "tk")))
13276 (inputs
13277 (list cairo
13278 freetype
13279 glib
13280 libpng
13281 qhull
13282 tcl
13283 tk))
13284 (native-inputs
13285 (list pkg-config
13286 python-meson
13287 pybind11-2
13288 python-pytest
13289 python-pytest-timeout
13290 python-pytest-xdist
13291 python-setuptools
13292 python-setuptools-scm))
13293 (home-page "https://matplotlib.org/")
13294 (synopsis "2D plotting library for Python")
13295 (description
13296 "Matplotlib is a Python 2D plotting library which produces publication
13297quality figures in a variety of hardcopy formats and interactive environments
13298across platforms. Matplotlib can be used in Python scripts, the python and
13299ipython shell, web application servers, and six graphical user interface
13300toolkits.")
13301 (license license:psfl)))
13302
13303(define-public python-matplotlib-documentation
13304 (package
13305 (inherit python-matplotlib)
13306 (name "python-matplotlib-documentation")
13307 (arguments
13308 (list
13309 #:tests? #f ;we're only generating documentation
13310 #:phases
13311 #~(modify-phases %standard-phases
13312 (add-after 'unpack 'avoid-external-deps
13313 (lambda _
13314 ;; XXX: Avoid theme-switcher to avoid sphinx error
13315 ;; TemplateNotFound('theme-switcher.html')
13316 ;; XXX: Avoid version-switcher because it depends on an
13317 ;; external file, and we pack only one version anyway.
13318 (substitute* "doc/conf.py"
13319 (("\
13320\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13321 "\"navbar_end\": ["))))
13322 (replace 'build
13323 (lambda _
13324 (setenv "HOME" "/tmp")
13325 (chdir "doc")
13326 (invoke "make" "html" "info"
13327 ;; Don't abort on warnings; build in parallel.
13328 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13329 (replace 'install
13330 (lambda _
13331 (let* ((data (string-append #$output "/share"))
13332 (doc (string-append data "/doc/matplotlib"))
13333 (info (string-append data "/info"))
13334 (html (string-append doc "/html")))
13335 (mkdir-p html)
13336 (copy-recursively "build/html" html)
13337 (install-file "build/texinfo/matplotlib.info" info)
13338 ;; The "matplotlib-figures" directory contains are a subset of
13339 ;; the images produced for the html target; simply create a
13340 ;; symlink to it, saving about 11 MiB.
13341 (symlink (string-append html "/_images")
13342 (string-append info "/matplotlib-figures"))))))))
13343 ;; Move all propagated inputs to inputs. *-documentation packages are
13344 ;; expected to be installed as standalone leaf packages, and not as
13345 ;; libraries with propagated inputs.
13346 (propagated-inputs '())
13347 (inputs (append
13348 (package-inputs python-matplotlib)
13349 (package-propagated-inputs python-matplotlib)))
13350 (native-inputs
13351 (list ffmpeg ;for matplotlib animation support
13352 graphviz
13353 inkscape/pinned
13354 python-colorspacious
13355 python-ipython
13356 python-ipykernel
13357 python-ipywidgets
13358 python-matplotlib
13359 python-mpl-sphinx-theme
13360 python-numpydoc
13361 python-pyyaml
13362 python-scipy
13363 python-setuptools
13364 ;; XXX: investigate how to build using a newer version of sphinx.
13365 python-sphinx-6
13366 python-sphinx-copybutton
13367 python-sphinx-design
13368 python-sphinx-gallery
13369 python-sphinx-tags
13370 python-sphinxcontrib-svg2pdfconverter
13371 python-sphinxcontrib-video
13372 texinfo
13373 texlive-dvipng-bin
13374 (texlive-local-tree
13375 (list texlive-amsfonts
13376 texlive-amsmath
13377 texlive-babel
13378 texlive-cm-super
13379 texlive-etoolbox
13380 texlive-expdlist
13381 texlive-fontspec
13382 texlive-times
13383 texlive-type1cm
13384 texlive-underscore
13385 texlive-unicode-math))))
13386 (synopsis "Documentation for the @code{python-matplotlib} package")))
13387
13388(define-public python-matplotlib-inline
13389 (package
13390 (name "python-matplotlib-inline")
13391 (version "0.1.7")
13392 (source
13393 (origin
13394 (method url-fetch)
13395 (uri (pypi-uri "matplotlib_inline" version))
13396 (sha256
13397 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13398 (build-system pyproject-build-system)
13399 (arguments
13400 (list
13401 ;; Tests disabled because of a circular dependency with IPython.
13402 #:tests? #f
13403 #:phases
13404 #~(modify-phases %standard-phases
13405 ;; Disabled because of a circular dependency with IPython.
13406 (delete 'sanity-check))))
13407 (native-inputs
13408 (list python-setuptools))
13409 (propagated-inputs
13410 (list python-matplotlib
13411 python-traitlets))
13412 (home-page "https://github.com/ipython/matplotlib-inline")
13413 (synopsis "Inline Matplotlib backend for Jupyter")
13414 (description
13415 "This package provides a Matplotlib inline back-end for IPython and
13416Jupyter.")
13417 (license license:bsd-3)))
13418
13419(define-public python-matplotlib-venn
13420 (package
13421 (name "python-matplotlib-venn")
13422 (version "1.1.2")
13423 (source
13424 (origin
13425 (method url-fetch)
13426 (uri (pypi-uri "matplotlib-venn" version))
13427 (sha256
13428 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13429 (build-system pyproject-build-system)
13430 (native-inputs (list python-pytest
13431 python-setuptools
13432 python-shapely
13433 python-wheel))
13434 (propagated-inputs
13435 (list python-matplotlib python-numpy python-scipy))
13436 (home-page "https://github.com/konstantint/matplotlib-venn")
13437 (synopsis "Plot area-proportional Venn diagrams")
13438 (description
13439 "This package provides tools for plotting area-proportional two- and
13440three-way Venn diagrams in @code{matplotlib}.")
13441 (license license:expat)))
13442
13443(define-public python-matplotx
13444 (package
13445 (name "python-matplotx")
13446 (version "0.3.10")
13447 (source
13448 (origin
13449 (method git-fetch)
13450 (uri (git-reference
13451 (url "https://github.com/nschloe/matplotx")
13452 (commit (string-append "v" version))))
13453 (file-name (git-file-name name version))
13454 (sha256
13455 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13456 (build-system pyproject-build-system)
13457 (arguments
13458 (list
13459 #:test-flags
13460 ;; This test fails with ValueError: not enough values to unpack.
13461 #~(list "--deselect" "tests/test_spy.py::test_cli"
13462 ;; XXX: unknown failure
13463 "--deselect" "tests/test_spy.py::test_png")))
13464 (propagated-inputs
13465 (list python-matplotlib
13466 python-numpy
13467 ;; optional dependencies
13468 python-networkx
13469 python-pypng
13470 python-scipy))
13471 (native-inputs (list python-imageio
13472 python-meshzoo
13473 python-pytest
13474 python-scikit-fem
13475 python-setuptools
13476 python-wheel))
13477 (home-page "https://github.com/nschloe/matplotx")
13478 (synopsis "Minimal matplotlib styles")
13479 (description
13480 "This package includes some extensions for Matplotlib to create
13481clean plots with a minimalistic style.")
13482 (license license:expat)))
13483
13484(define-public python-cplot
13485 (package
13486 (name "python-cplot")
13487 (version "0.9.3")
13488 (source
13489 (origin
13490 (method git-fetch) ;for tests
13491 (uri (git-reference
13492 (url "https://github.com/nschloe/cplot")
13493 (commit (string-append "v" version))))
13494 (file-name (git-file-name name version))
13495 (sha256
13496 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13497 (build-system pyproject-build-system)
13498 (native-inputs
13499 (list python-pytest
13500 python-setuptools
13501 python-wheel))
13502 (propagated-inputs
13503 (list python-matplotlib
13504 python-matplotx
13505 python-npx
13506 python-numpy))
13507 (home-page "https://github.com/nschloe/cplot")
13508 (synopsis "Plot complex-valued functions")
13509 (description "@code{cplot} is a Python library for plotting
13510complex-valued functions.")
13511 (license license:gpl3+)))
13512
13513(define-public python-cppheaderparser
13514 (package
13515 (name "python-cppheaderparser")
13516 (version "2.7.4")
13517 (source
13518 (origin
13519 (method url-fetch)
13520 (uri (pypi-uri "CppHeaderParser" version))
13521 (sha256
13522 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13523 (build-system pyproject-build-system)
13524 (arguments
13525 (list
13526 #:tests? #f)) ; no tests
13527 (propagated-inputs (list python-ply))
13528 (native-inputs (list python-setuptools python-wheel))
13529 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13530 (synopsis
13531 "Parse C++ header files and generate a data structure representing the class")
13532 (description
13533 "CppHeaderParser is a pure python module that will parse C++ header files
13534and generate a data structure representing the class.")
13535 (license license:bsd-3)))
13536
13537(define-public python-cppy
13538 (package
13539 (name "python-cppy")
13540 (version "1.3.1")
13541 (source
13542 (origin
13543 (method url-fetch)
13544 (uri (pypi-uri "cppy" version))
13545 (sha256
13546 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
13547 (build-system pyproject-build-system)
13548 (native-inputs
13549 (list python-pytest
13550 python-setuptools
13551 python-setuptools-scm
13552 python-wheel))
13553 (home-page "https://github.com/nucleic/cppy")
13554 (synopsis "C++ header library for Python extension modules")
13555 (description "This package is a small C++ header library which makes it
13556easier to write Python extension modules. The primary feature is a
13557@code{PyObject} smart pointer which automatically handles reference counting
13558and provides convenience methods for performing common object operations.")
13559 (license license:bsd-3)))
13560
13561(define-public python-perfplot
13562 (package
13563 (name "python-perfplot")
13564 (version "0.10.2")
13565 (source (origin
13566 (method url-fetch)
13567 (uri (pypi-uri "perfplot" version))
13568 (sha256
13569 (base32
13570 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
13571 (build-system pyproject-build-system)
13572 (propagated-inputs (list python-matplotlib
13573 python-matplotx
13574 python-numpy-1
13575 python-rich))
13576 (native-inputs (list python-flit-core
13577 python-pytest))
13578 (home-page "https://github.com/nschloe/perfplot")
13579 (synopsis "Performance plots for Python code snippets")
13580 (description "@code{perfplot} extends Python's timeit by testing
13581snippets with input parameters (e.g., the size of an array) and plotting
13582the results.")
13583 (license license:gpl3+)))
13584
13585(define-public python-persist-queue
13586 (package
13587 (name "python-persist-queue")
13588 (version "1.1.0")
13589 (source
13590 (origin
13591 (method git-fetch)
13592 (uri (git-reference
13593 (url "https://github.com/peter-wangxu/persist-queue")
13594 (commit (string-append "v" version))))
13595 (file-name (git-file-name name version))
13596 (sha256
13597 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13598 (build-system pyproject-build-system)
13599 (native-inputs
13600 (list python-pytest
13601 python-pytest-asyncio
13602 python-setuptools))
13603 (propagated-inputs
13604 (list python-aiofiles
13605 python-aiosqlite
13606 python-cbor2
13607 python-dbutils
13608 python-msgpack))
13609 (home-page "https://github.com/peter-wangxu/persist-queue")
13610 (synopsis "Thread-safe disk based persistent queue in Python")
13611 (description
13612 "This package provides a thread-safe disk (file and sqlite) based
13613persistent queue in Python.")
13614 (license license:bsd-3)))
13615
13616(define-public python-pycodestyle
13617 (package
13618 (name "python-pycodestyle")
13619 (version "2.12.1")
13620 (source
13621 (origin
13622 (method url-fetch)
13623 (uri (pypi-uri "pycodestyle" version))
13624 (sha256
13625 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
13626 (build-system pyproject-build-system)
13627 (arguments
13628 (list
13629 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
13630 #:phases
13631 #~(modify-phases %standard-phases
13632 ;; Taken from Tox config
13633 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13634 (replace 'check
13635 (lambda* (#:key tests? test-flags #:allow-other-keys)
13636 (when tests?
13637 (apply invoke "python" "-v" test-flags)))))))
13638 (native-inputs
13639 (list python-setuptools
13640 python-wheel))
13641 (home-page "https://pycodestyle.readthedocs.io/")
13642 (synopsis "Python style guide checker")
13643 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13644Python code against some of the style conventions in
13645@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13646 (license license:expat)))
13647
13648(define-public python-pycollada
13649 (package
13650 (name "python-pycollada")
13651 (version "0.9.2")
13652 (source
13653 (origin
13654 (method git-fetch)
13655 (uri (git-reference
13656 (url "https://github.com/pycollada/pycollada")
13657 (commit (string-append "v" version))))
13658 (file-name (git-file-name name version))
13659 (sha256
13660 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13661 (build-system pyproject-build-system)
13662 (native-inputs
13663 (list python-pytest
13664 python-setuptools))
13665 (propagated-inputs
13666 (list python-numpy
13667 python-dateutil))
13668 (home-page "https://pycollada.readthedocs.io")
13669 (synopsis "Reading and writing collada documents library")
13670 (description
13671 "This package implements a functionality for creating, editing and
13672loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13673COLLAborative Design Activity for establishing an interchange file format for
13674interactive 3D applications.
13675
13676The library allows you to load a COLLADA file and interact with it as a python
13677object. In addition, it supports creating a collada python object from
13678scratch, as well as in-place editing.")
13679 (license license:bsd-3)))
13680
13681(define-public python-pyct
13682 (package
13683 (name "python-pyct")
13684 (version "0.5.0")
13685 (source
13686 (origin
13687 (method url-fetch)
13688 (uri (pypi-uri "pyct" version))
13689 (sha256
13690 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
13691 (build-system pyproject-build-system)
13692 (arguments
13693 (list
13694 #:test-flags
13695 ;; These tests want to download example data from the internet.
13696 '(list "-k" (string-append
13697 "not test_examples_with_use_test_data"
13698 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
13699 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
13700 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
13701 (propagated-inputs (list python-param python-pyyaml))
13702 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
13703 (home-page "https://github.com/holoviz-dev/pyct")
13704 (synopsis "Common packaging tasks")
13705 (description
13706 "This Python package provides utilities to run common packaging tasks,
13707e.g. copy examples, fetch data, etc.")
13708 (license license:bsd-3)))
13709
13710(define-public python-multidict
13711 (package
13712 (name "python-multidict")
13713 (version "6.7.0")
13714 (source
13715 (origin
13716 (method git-fetch)
13717 (uri (git-reference
13718 (url "https://github.com/aio-libs/multidict/")
13719 (commit (string-append "v" version))))
13720 (file-name (git-file-name name version))
13721 (sha256
13722 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
13723 (build-system pyproject-build-system)
13724 (arguments
13725 (list
13726 ;; tests: 1395 passed
13727 #:test-flags
13728 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13729 "--ignore-glob=tests/test_*_benchmarks.py")))
13730 (native-inputs
13731 (list python-objgraph
13732 python-psutil
13733 python-pytest
13734 python-setuptools))
13735 (home-page "https://github.com/aio-libs/multidict/")
13736 (synopsis "Multidict implementation")
13737 (description
13738 "Multidict is dict-like collection of key-value pairs where key might be
13739occurred more than once in the container.")
13740 (license license:asl2.0)))
13741
13742(define-public python-orderedmultidict
13743 (package
13744 (name "python-orderedmultidict")
13745 (version "1.0.1")
13746 (source
13747 (origin
13748 (method url-fetch)
13749 (uri (pypi-uri "orderedmultidict" version))
13750 (sha256
13751 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
13752 (build-system pyproject-build-system)
13753 (propagated-inputs
13754 (list python-six))
13755 (native-inputs
13756 (list python-pytest
13757 python-setuptools))
13758 (home-page "https://github.com/gruns/orderedmultidict")
13759 (synopsis "Python Ordered Multivalue Dictionary - omdict")
13760 (description "This package contains a library for ordered multivalue
13761dictionaries. A multivalue dictionary is a dictionary that can store
13762multiple values for the same key. An ordered multivalue dictionary is a
13763multivalue dictionary that retains the order of insertions and deletions.")
13764 (license license:unlicense)))
13765
13766(define-public python-autopage
13767 (package
13768 (name "python-autopage")
13769 (version "0.5.1")
13770 (source (origin
13771 (method url-fetch)
13772 (uri (pypi-uri "autopage" version))
13773 (sha256
13774 (base32
13775 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
13776 (build-system pyproject-build-system)
13777 (arguments
13778 (list
13779 #:phases
13780 #~(modify-phases %standard-phases
13781 (add-before 'check 'disable-e2e-tests
13782 (lambda _
13783 ;; These tests rely on KeyboardInterrupts which do not
13784 ;; work in the build container.
13785 (delete-file "autopage/tests/test_end_to_end.py"))))))
13786 (native-inputs
13787 (list python-pypa-build
13788 python-setuptools
13789 python-wheel
13790 ;; For tests.
13791 python-fixtures
13792 python-pytest
13793 python-testtools))
13794 (home-page "https://github.com/zaneb/autopage")
13795 (synopsis "Automatic paging for console output")
13796 (description
13797 "Autopage is a Python library to automatically display terminal output
13798from a program in a @dfn{pager} such as @command{less}.")
13799 (license license:asl2.0)))
13800
13801(define-public python-dirty-equals
13802 (package
13803 (name "python-dirty-equals")
13804 (version "0.11.0")
13805 (source
13806 (origin
13807 (method git-fetch)
13808 (uri (git-reference
13809 (url "https://github.com/samuelcolvin/dirty-equals")
13810 (commit (string-append "v" version))))
13811 (file-name (git-file-name name version))
13812 (sha256
13813 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
13814 (build-system pyproject-build-system)
13815 ;; tests: 551 passed, 60 skipped
13816 (native-inputs
13817 (list python-hatchling
13818 python-pydantic
13819 python-pytest
13820 python-pytest-examples
13821 tzdata-for-tests))
13822 (home-page "https://dirty-equals.helpmanual.io/")
13823 (synopsis "Do dirty (but useful) things with equals")
13824 (description
13825 "@code{dirty-equals} is a Python library that (mis)uses the
13826@code{__eq__} method to make code (generally unit tests) more declarative
13827and therefore easier to read and write.")
13828 (license license:expat)))
13829
13830(define-public python-dirty-equals-bootstrap
13831 (hidden-package
13832 (package
13833 (inherit python-dirty-equals)
13834 (name "python-dirty-equals-bootstrap")
13835 (arguments
13836 (list #:tests? #f))
13837 (native-inputs
13838 (list python-hatchling)))))
13839
13840(define-public python-distutils-extra
13841 (package
13842 (name "python-distutils-extra")
13843 (version "2.38")
13844 (source
13845 (origin
13846 (method url-fetch)
13847 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
13848 version "/+download/python-distutils-extra-"
13849 version ".tar.gz"))
13850 (sha256
13851 (base32
13852 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
13853 (build-system pyproject-build-system)
13854 (arguments
13855 (list #:tests? #f)) ;tests are outdated and broken
13856 (native-inputs (list python-setuptools python-wheel))
13857 (home-page "https://launchpad.net/python-distutils-extra/")
13858 (synopsis "Enhancements to Python's distutils")
13859 (description
13860 "The python-distutils-extra module enables you to easily integrate
13861gettext support, themed icons, and scrollkeeper-based documentation into
13862Python's distutils.")
13863 (license license:gpl2)))
13864
13865(define-public python-olefile
13866 (package
13867 (name "python-olefile")
13868 (version "0.47")
13869 (source
13870 (origin
13871 (method git-fetch)
13872 (uri (git-reference
13873 (url "https://github.com/decalage2/olefile")
13874 (commit (string-append "v" version))))
13875 (file-name (git-file-name name version))
13876 (sha256
13877 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
13878 (build-system pyproject-build-system)
13879 (native-inputs
13880 (list python-pytest
13881 python-setuptools))
13882 (home-page "https://www.decalage.info/python/olefileio")
13883 (synopsis "Read and write Microsoft OLE2 files")
13884 (description
13885 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
13886Storage or Compound Document, Microsoft Office). It is an improved version of
13887the OleFileIO module from PIL, the Python Image Library.")
13888 (license license:bsd-3)))
13889
13890(define-public python-property-cached
13891 (package
13892 (name "python-property-cached")
13893 (version "1.6.4")
13894 (source
13895 (origin
13896 (method url-fetch)
13897 (uri (pypi-uri "property-cached" version ".zip"))
13898 (sha256
13899 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
13900 (patches
13901 (search-patches "python-property-cached-asyncio-3_11.patch"))))
13902 (build-system pyproject-build-system)
13903 (arguments
13904 (list
13905 ;; AssertionError.
13906 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
13907 (native-inputs (list python-freezegun python-pytest unzip
13908 python-setuptools python-wheel))
13909 (home-page "https://github.com/althonos/property-cached/")
13910 (synopsis "Decorator for caching properties in classes")
13911 (description "This package provides a decorator for caching properties in
13912classes. It is forked from @code{cached-property}.")
13913 (license license:bsd-3)))
13914
13915(define-public python-pdf2image
13916 (package
13917 (name "python-pdf2image")
13918 (version "1.17.0")
13919 (source
13920 (origin
13921 (method git-fetch)
13922 (uri (git-reference
13923 (url "https://github.com/Belval/pdf2image")
13924 (commit (string-append "v" version))))
13925 (file-name (git-file-name name version))
13926 (sha256
13927 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
13928 (build-system pyproject-build-system)
13929 (arguments
13930 (list
13931 ;; The following excluded tests assume hardcoded binary paths to
13932 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
13933 #:test-flags
13934 #~(list "--exclude=^test_use_poppler_path$"
13935 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
13936 (propagated-inputs (list python-pillow))
13937 (inputs (list poppler))
13938 (native-inputs (list python-pynose which python-setuptools))
13939 (home-page "https://github.com/Belval/pdf2image")
13940 (synopsis
13941 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
13942 (description
13943 "This package provides a Python API wrapping the @command{pdftoppm} and
13944@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
13945Python list with elements of type @code{PIL.Image} (from the
13946@code{python-pillow} library).")
13947 (license license:expat)))
13948
13949(define-public python-pikepdf
13950 (package
13951 (name "python-pikepdf")
13952 (version "8.15.1")
13953 (source
13954 (origin
13955 (method git-fetch)
13956 (uri (git-reference
13957 (url "https://github.com/pikepdf/pikepdf")
13958 (commit (string-append "v" version))))
13959 (file-name (git-file-name name version))
13960 (sha256
13961 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
13962 (build-system pyproject-build-system)
13963 (native-inputs
13964 (list pybind11-2
13965 python-attrs
13966 python-hypothesis
13967 python-setuptools-scm
13968 python-psutil
13969 python-pytest
13970 python-pytest-timeout
13971 python-pytest-xdist
13972 python-dateutil
13973 python-xmp-toolkit
13974 python-tomli
13975 python-setuptools))
13976 (inputs
13977 (list qpdf))
13978 (propagated-inputs
13979 (list python-deprecated python-lxml python-packaging python-pillow))
13980 (home-page "https://github.com/pikepdf/pikepdf")
13981 (synopsis "Read and write PDFs with Python")
13982 (description
13983 "pikepdf is a Python library for reading and writing PDF files.")
13984 (license license:mpl2.0)))
13985
13986(define-public python-pillow
13987 (package
13988 (name "python-pillow")
13989 (version "12.1.1")
13990 (source
13991 (origin
13992 (method git-fetch)
13993 (uri (git-reference
13994 (url "https://github.com/python-pillow/Pillow")
13995 (commit version)))
13996 (file-name (git-file-name name version))
13997 (sha256
13998 (base32 "1g374rklljx0941j6d1gib9pgcq3scmqw9psqaj2c7m8pilqsn9n"))))
13999 (build-system pyproject-build-system)
14000 (arguments
14001 (list
14002 #:phases
14003 #~(modify-phases %standard-phases
14004 (add-after 'unpack 'patch-ldconfig
14005 (lambda _
14006 (substitute* "setup.py"
14007 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14008 (replace 'check
14009 (lambda* (#:key tests? #:allow-other-keys)
14010 (when tests?
14011 (setenv "HOME" (getcwd))
14012 (invoke "python" "selftest.py" "--installed")
14013 (invoke "python" "-m" "pytest" "-vv")))))))
14014 (native-inputs (list pybind11
14015 python-defusedxml
14016 python-markdown2
14017 python-olefile
14018 python-pytest
14019 python-setuptools
14020 python-trove-classifiers))
14021 (inputs (list freetype
14022 lcms
14023 libjpeg-turbo
14024 libtiff
14025 libwebp
14026 openjpeg
14027 zlib))
14028 (home-page "https://python-pillow.github.io/")
14029 (synopsis "Fork of the Python Imaging Library")
14030 (description
14031 "The Python Imaging Library adds image processing capabilities to your
14032Python interpreter. This library provides extensive file format support, an
14033efficient internal representation, and fairly powerful image processing
14034capabilities. The core image library is designed for fast access to data
14035stored in a few basic pixel formats. It should provide a solid foundation for
14036a general image processing tool.")
14037 (properties `((cpe-name . "pillow")))
14038 (license (license:x11-style
14039 "https://github.com/python-pillow/Pillow/blob/12.1.1/LICENSE"
14040 "MIT-CMU License"))))
14041
14042(define-public python-pillow-avif-plugin
14043 (package
14044 (name "python-pillow-avif-plugin")
14045 (version "1.5.5")
14046 (source
14047 (origin
14048 (method git-fetch)
14049 (uri (git-reference
14050 (url "https://github.com/fdintino/pillow-avif-plugin/")
14051 (commit (string-append "v" version))))
14052 (file-name (git-file-name name version))
14053 (sha256
14054 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14055 (build-system pyproject-build-system)
14056 (propagated-inputs (list python-requests))
14057 (native-inputs (list python-packaging
14058 python-pillow
14059 python-pytest
14060 python-setuptools))
14061 (inputs (list libavif))
14062 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14063 (synopsis "Pillow plugin that adds avif support via libavif")
14064 (description
14065 "This package provides a pillow plugin that adds avif support via
14066libavif.")
14067 (license license:expat)))
14068
14069(define-public python-pillow-heif
14070 (package
14071 (name "python-pillow-heif")
14072 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14073 ;; commit is taken from the master branch.
14074 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14075 (revision . "0")))
14076 (version (git-version "1.3.0"
14077 (assoc-ref properties 'revision)
14078 (assoc-ref properties 'commit)))
14079 (source
14080 (origin
14081 (method git-fetch)
14082 (uri (git-reference
14083 (url "https://github.com/bigcat88/pillow_heif")
14084 (commit (assoc-ref properties 'commit))))
14085 (file-name (git-file-name name version))
14086 (sha256
14087 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14088 (build-system pyproject-build-system)
14089 (inputs (list libheif))
14090 (propagated-inputs (list python-pillow))
14091 (native-inputs (list opencv ; for opencv-python
14092 python-defusedxml
14093 python-numpy
14094 python-packaging
14095 python-pympler
14096 python-pytest
14097 python-setuptools))
14098 (home-page "https://github.com/bigcat88/pillow_heif")
14099 (synopsis "Python interface for libheif library")
14100 (description "This package provides Python bindings for the libheif library
14101and a plugin for Pillow.")
14102 (license license:bsd-3)))
14103
14104(define-public python-pillow-jxl-plugin
14105 (package
14106 (name "python-pillow-jxl-plugin")
14107 (version "1.3.7")
14108 (source
14109 (origin
14110 (method git-fetch)
14111 (uri (git-reference
14112 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14113 (commit (string-append "v" version))))
14114 (file-name (git-file-name name version))
14115 (sha256
14116 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14117 (build-system pyproject-build-system)
14118 (arguments
14119 (list
14120 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14121 ;; in Guix.
14122 #:tests? #f
14123 #:imported-modules `(,@%cargo-build-system-modules
14124 ,@%pyproject-build-system-modules)
14125 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14126 (guix build pyproject-build-system)
14127 (guix build utils))
14128 #:phases
14129 #~(modify-phases %standard-phases
14130 (add-after 'unpack 'prepare-cargo-build-system
14131 (lambda args
14132 (for-each (lambda (phase)
14133 (format #t "Running cargo phase: ~a~%" phase)
14134 (apply (assoc-ref cargo:%standard-phases phase)
14135 #:cargo-target #$(cargo-triplet)
14136 args))
14137 '(unpack-rust-crates
14138 configure
14139 check-for-pregenerated-files
14140 patch-cargo-checksums))))
14141 (add-after 'unpack 'patch-pyproject
14142 (lambda _
14143 ;; maturin failed to parse pyproject.toml.
14144 (substitute* "pyproject.toml"
14145 (("^license-files = .*") "")))))))
14146 (propagated-inputs (list python-brotli
14147 python-packaging
14148 python-pillow))
14149 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14150 (native-inputs (list maturin
14151 python-numpy
14152 python-pytest
14153 rust
14154 `(,rust "cargo")))
14155 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14156 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14157 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14158 (description "This package provides pillow plugin for JPEG-XL, using Rust
14159for bindings.")
14160 (license license:gpl3+)))
14161
14162(define-public python-jxlpy
14163 (package
14164 (name "python-jxlpy")
14165 (version "0.9.5")
14166 (source
14167 (origin
14168 (method git-fetch)
14169 (uri (git-reference
14170 (url "https://github.com/olokelo/jxlpy")
14171 (commit version)))
14172 (file-name (git-file-name name version))
14173 (sha256
14174 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14175 (build-system pyproject-build-system)
14176 (arguments (list #:tests? #f)) ; no tests, just examples
14177 (inputs (list libjxl))
14178 (propagated-inputs (list python-cython))
14179 (native-inputs (list python-cython python-setuptools))
14180 (home-page "https://github.com/olokelo/jxlpy")
14181 (synopsis "JPEG XL integration in Python")
14182 (description "This package provides Cython-based Python bindings for
14183libjxl, as well as a pillow plugin.")
14184 (license license:expat)))
14185
14186(define-public python-pixelmatch
14187 (package
14188 (name "python-pixelmatch")
14189 (version "0.3.0")
14190 (source
14191 (origin
14192 (method git-fetch)
14193 (uri (git-reference
14194 (url "https://github.com/whtsky/pixelmatch-py")
14195 (commit (string-append "v" version))))
14196 (file-name (git-file-name name version))
14197 (sha256
14198 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14199 (build-system pyproject-build-system)
14200 (arguments
14201 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14202 (list #:tests? #f))
14203 (native-inputs
14204 (list python-poetry-core
14205 python-pillow
14206 python-pytest
14207 python-pytest-benchmark))
14208 (home-page "https://github.com/whtsky/pixelmatch-py")
14209 (synopsis "Pixel-level image comparison library")
14210 (description
14211 "This package provides a pixel-level image comparison library for Python,
14212originally created to compare screenshots in tests. Its features include
14213accurate anti-aliased pixels detection and perceptual color difference
14214metrics.")
14215 (license license:isc)))
14216
14217(define-public python-imagecodecs
14218 (package
14219 (name "python-imagecodecs")
14220 (version "2025.8.2")
14221 (source
14222 (origin
14223 (method url-fetch)
14224 (uri (pypi-uri "imagecodecs" version))
14225 (sha256
14226 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14227 (modules '((guix build utils)))
14228 (snippet #~(for-each delete-file
14229 ;; Delete pre-generated Cython files.
14230 (find-files "imagecodecs" "_.*\\.c$")))))
14231 (build-system pyproject-build-system)
14232 (arguments
14233 (list
14234 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14235 #:test-flags
14236 ;; Some of those tests are flaky.
14237 #~(list "-k" "not test_cms_identity_transforms")
14238 #:phases
14239 #~(modify-phases %standard-phases
14240 (add-after 'unpack 'create-configuration
14241 (lambda _
14242 ;; By default everything is enabled. We can selectively disable
14243 ;; extensions (and thus dependencies) by deleting them from the
14244 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14245 (call-with-output-file "imagecodecs_distributor_setup.py"
14246 (lambda (port)
14247 (format port "\
14248def customize_build(EXTENSIONS, OPTIONS):
14249~{ del EXTENSIONS[~s]~%~}~%"
14250 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14251 ;; Those rely on unpackaged inputs.
14252 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14253 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14254 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14255 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14256 "zlibng" "zopfli"))))))
14257 (add-after 'unpack 'fix-sanity-check
14258 (lambda _
14259 ;; XXX: Don't exit twice. The generated script already does that.
14260 (substitute* "imagecodecs/__main__.py"
14261 (("sys\\.exit\\(main\\(\\)\\)")
14262 ""))))
14263 (add-before 'check 'configure-tests
14264 (lambda _
14265 (setenv "HOME" (getcwd)))))))
14266 (inputs
14267 (list brotli
14268 c-blosc
14269 c-blosc2
14270 giflib
14271 lcms
14272 libheif
14273 libjpeg-turbo
14274 libpng
14275 libtiff
14276 libwebp
14277 lz4
14278 lzfse
14279 snappy
14280 xz
14281 zlib
14282 `(,zstd "lib")))
14283 (propagated-inputs
14284 (list python-numpy python-matplotlib python-tifffile))
14285 (native-inputs
14286 (list python-cython python-pytest python-setuptools))
14287 (home-page "https://www.lfd.uci.edu/~gohlke/")
14288 (synopsis "Image transformation, compression, and decompression codecs")
14289 (description
14290 "Imagecodecs is a Python library that provides block-oriented, in-memory
14291buffer transformation, compression, and decompression functions for use in the
14292tifffile, czifile, and other scientific image input/output modules.")
14293 (license license:bsd-3)))
14294
14295(define-public python-property-manager
14296 (package
14297 (name "python-property-manager")
14298 (version "3.0")
14299 (source
14300 (origin
14301 (method git-fetch)
14302 (uri (git-reference
14303 (url "https://github.com/xolox/python-property-manager")
14304 (commit version)))
14305 (file-name (git-file-name name version))
14306 (sha256
14307 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14308 (build-system pyproject-build-system)
14309 (native-inputs (list python-pytest python-setuptools))
14310 (propagated-inputs
14311 (list python-verboselogs
14312 python-humanfriendly
14313 python-coloredlogs))
14314 (home-page "https://github.com/xolox/python-property-manager")
14315 (synopsis "Useful property variants for Python programming")
14316 (description
14317 "The @code{property-manager} package defines several custom property
14318variants for Python programming including required properties,writable
14319properties, cached properties, etc.")
14320 (license license:expat)))
14321
14322(define-public python-executing
14323 (package
14324 (name "python-executing")
14325 (version "2.2.0")
14326 (source
14327 (origin
14328 (method url-fetch)
14329 (uri (pypi-uri "executing" version))
14330 (sha256
14331 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14332 (build-system pyproject-build-system)
14333 (arguments
14334 (list
14335 #:test-flags
14336 ;; Test needs IPython
14337 #~(list "-k" "not test_two_statement_lookups")
14338 #:phases
14339 #~(modify-phases %standard-phases
14340 (add-after 'unpack 'fix-tests
14341 (lambda _
14342 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14343 (substitute* "pyproject.toml"
14344 (("ignore_missing_imports = true.*")
14345 "ignore_missing_imports = true
14346
14347[tool.pytest.ini_options]
14348python_functions = \"test_\"\n")))))))
14349 (native-inputs
14350 (list python-asttokens
14351 python-littleutils
14352 python-pytest
14353 python-rich
14354 python-setuptools
14355 python-setuptools-scm
14356 python-wheel))
14357 (home-page "https://github.com/alexmojaki/executing")
14358 (synopsis "Get information about what a Python frame is currently doing")
14359 (description "This package lets you get information about what a frame is
14360currently doing, particularly the AST node being executed.")
14361 (license license:expat)))
14362
14363(define-public python-executor
14364 (package
14365 (name "python-executor")
14366 (version "23.2")
14367 (source
14368 (origin
14369 (method git-fetch)
14370 (uri (git-reference
14371 (url "https://github.com/xolox/python-executor")
14372 (commit version)))
14373 (file-name (git-file-name name version))
14374 (sha256
14375 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14376 (build-system pyproject-build-system)
14377 (arguments
14378 (list #:tests? #f)) ;TODO: tests require root/sudo
14379 (native-inputs (list python-mock python-pytest python-setuptools))
14380 (propagated-inputs
14381 (list python-six
14382 python-property-manager
14383 python-fasteners
14384 python-virtualenv))
14385 (home-page "https://github.com/xolox/python-executor")
14386 (synopsis "Programmer friendly subprocess wrapper")
14387 (description
14388 "The @code{executor} package is a simple wrapper for Python’s subprocess
14389module that makes it very easy to handle subprocesses on UNIX systems with
14390proper escaping of arguments and error checking currently doing, particularly
14391the AST node being executed.")
14392 (license license:expat)))
14393
14394(define-public python-roifile
14395 (package
14396 (name "python-roifile")
14397 (version "2025.5.10")
14398 (source
14399 (origin
14400 (method url-fetch)
14401 (uri (pypi-uri "roifile" version))
14402 (sha256
14403 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14404 (build-system pyproject-build-system)
14405 (arguments (list #:tests? #f)) ; There are none.
14406 (native-inputs (list python-setuptools))
14407 (propagated-inputs (list python-numpy))
14408 (home-page "https://www.lfd.uci.edu/~gohlke/")
14409 (synopsis "Read and write ImageJ ROI format")
14410 (description "Roifile is a Python library to read, write, create, and plot
14411ImageJ ROIs, an undocumented and ImageJ application specific format to store
14412regions of interest, geometric shapes, paths, text, etc for image overlays.")
14413 (license license:bsd-3)))
14414
14415(define-public python-lfdfiles
14416 (package
14417 (name "python-lfdfiles")
14418 (version "2026.4.30")
14419 (source
14420 (origin
14421 (method url-fetch)
14422 (uri (pypi-uri "lfdfiles" version))
14423 (sha256
14424 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14425 (modules '((guix build utils)))
14426 (snippet
14427 ;; Delete pre-generated Cython files.
14428 #~(begin
14429 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14430 (delete-file "lfdfiles/conftest.py")))))
14431 (build-system pyproject-build-system)
14432 (arguments
14433 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14434 (list #:tests? #f))
14435 (native-inputs (list python-setuptools))
14436 (propagated-inputs (list python-click python-numpy python-tifffile))
14437 (home-page "https://www.lfd.uci.edu/~gohlke/")
14438 (synopsis "Work with LFD data files")
14439 (description
14440 "Lfdfiles is a Python library and console script for reading, writing,
14441converting, and viewing many of the proprietary file formats used to store
14442experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14443 (license license:bsd-3)))
14444
14445;; ~8Mo of test files.
14446(define python-av-testdata
14447 (file-union
14448 "python-av-testdata"
14449 (cons*
14450 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14451 `(,(string-append "pyav-curated/" file)
14452 ,(origin
14453 (method url-fetch)
14454 (uri (string-append "https://pyav.org/datasets/" file))
14455 (sha256
14456 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14457 (map
14458 (match-lambda
14459 ((file . hash)
14460 (list (string-append "fate-suite/" file)
14461 (origin
14462 (method url-fetch)
14463 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14464 (sha256 (base32 hash))))))
14465 '(("aac/latm_stereo_to_51.ts" .
14466 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14467 ("h264/extradata-reload-multi-stsd.mov" .
14468 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14469 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14470 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14471 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14472 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14473 ("h264/interlaced_crop.mp4" .
14474 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14475 ("hap/HAPQA_NoSnappy_127x1.mov" .
14476 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14477 ("mkv/codec_delay_opus.mkv" .
14478 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14479 ("mov/displaymatrix.mov" .
14480 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14481 ("mov/mov-1elist-ends-last-bframe.mov" .
14482 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14483 ("mov/white_zombie_scrunch-part.mov" .
14484 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14485 ("mpeg2/mpeg2_field_encoding.ts" .
14486 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14487 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14488 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14489 ("mxf/track_01_v02.mxf" .
14490 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14491 ("png1/55c99e750a5fd6_50314226.png" .
14492 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14493 ("qtrle/aletrek-rle.mov" .
14494 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14495 ("sub/MovText_capability_tester.mp4" .
14496 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14497 ("sub/vobsub.sub" .
14498 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14499
14500(define-public python-av
14501 (package
14502 (name "python-av")
14503 (version "16.0.1")
14504 (source
14505 (origin
14506 (method url-fetch)
14507 (uri (pypi-uri "av" version))
14508 (sha256
14509 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14510 (build-system pyproject-build-system)
14511 (arguments
14512 (list
14513 ;; Upstream is not great in responding to open issues or change requests.
14514 ;; See:
14515 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14516 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14517 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14518 #:test-flags
14519 ;; Writing to custom IO requires network access.
14520 #~(list "-k" "not test_writing_to_custom_io_dash")
14521 #:phases
14522 #~(modify-phases %standard-phases
14523 (add-before 'check 'pre-check
14524 (lambda _
14525 ;; This would otherwise interfere with finding the installed
14526 ;; av when running tests.
14527 (delete-file-recursively "av")
14528 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14529 (substitute* "tests/common.py"
14530 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14531 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14532 (native-inputs
14533 (list pkg-config
14534 python-cython
14535 python-numpy
14536 python-pillow
14537 python-pytest
14538 python-setuptools))
14539 (inputs (list ffmpeg))
14540 (home-page "https://github.com/PyAV-Org/PyAV")
14541 (synopsis "Pythonic bindings for FFmpeg's libraries")
14542 (description
14543 "PyAV is a Python library that allows for direct and precise manipulation
14544of media through containers, streams, packets, codecs, and frames. It provides
14545access to the powerful FFmpeg libraries while managing the complex details as
14546much as possible.
14547PyAV also facilitates data transformation and integration with
14548other packages such as Numpy and Pillow. However, working with media is a
14549challenging task and PyAV cannot abstract it away or make all the best decisions
14550for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14551be necessary. Nonetheless, PyAV is an essential tool when working with media
14552that requires its specific capabilities.")
14553 (license license:bsd-3)))
14554
14555(define-public python-ffmpeg-python
14556 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14557 (package
14558 (name "python-ffmpeg-python")
14559 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14560 (revision . "0")))
14561 (version (git-version "0.2.0"
14562 (assoc-ref properties 'revision)
14563 (assoc-ref properties 'commit)))
14564 (source
14565 (origin
14566 (method git-fetch)
14567 (uri (git-reference
14568 (url "https://github.com/kkroening/ffmpeg-python.git")
14569 (commit (assoc-ref properties 'commit))))
14570 (file-name (git-file-name name version))
14571 (sha256
14572 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14573 (build-system pyproject-build-system)
14574 (arguments
14575 (list
14576 #:test-flags
14577 #~(list "-k" "not test_pipe and not test__probe")
14578 #:phases
14579 #~(modify-phases %standard-phases
14580 (add-after 'unpack 'hardcode-ffmpeg
14581 (lambda* (#:key inputs #:allow-other-keys)
14582 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14583 (substitute* "ffmpeg/_run.py"
14584 (("cmd='ffmpeg'")
14585 (string-append "cmd='" ffmpeg "'")))
14586 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14587 (("out_file.compile\\(\\) == \\['ffmpeg'")
14588 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14589 (inputs (list ffmpeg))
14590 (propagated-inputs (list python-future))
14591 (native-inputs (list python-future
14592 python-numpy
14593 python-pytest
14594 python-pytest-mock
14595 python-setuptools))
14596 (home-page "https://github.com/kkroening/ffmpeg-python")
14597 (synopsis "Python bindings for FFmpeg with complex filtering support")
14598 (description
14599 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14600Python terms, taking care of running ffmpeg with the correct command-line
14601arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14602 (license license:asl2.0)))
14603
14604(define-public python-imageio-ffmpeg
14605 (package
14606 (name "python-imageio-ffmpeg")
14607 (version "0.6.0")
14608 (source
14609 (origin
14610 (method url-fetch)
14611 (uri (pypi-uri "imageio_ffmpeg" version))
14612 (sha256
14613 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14614 (build-system pyproject-build-system)
14615 (arguments
14616 (list
14617 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14618 #:phases
14619 #~(modify-phases %standard-phases
14620 (add-after 'unpack 'hardcode-ffmpeg
14621 (lambda* (#:key inputs #:allow-other-keys)
14622 (substitute* "imageio_ffmpeg/_utils.py"
14623 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14624 (string-append "(" all " or \""
14625 (search-input-file inputs "bin/ffmpeg")
14626 "\")"))))))))
14627 (native-inputs
14628 (list python-setuptools
14629 python-wheel))
14630 (inputs
14631 (list ffmpeg))
14632 (home-page "https://github.com/imageio/imageio-ffmpeg")
14633 (synopsis "FFMPEG wrapper for Python")
14634 (description
14635 "This package provides an FFMPEG wrapper for working with video files.
14636It implements generator functions for reading and writing data to and from
14637FFMPEG, reliably terminating the process when done.")
14638 (license license:bsd-2)))
14639
14640(define-public python-imageio
14641 (package
14642 (name "python-imageio")
14643 (version "2.36.1")
14644 (source
14645 (origin
14646 (method url-fetch)
14647 (uri (pypi-uri "imageio" version))
14648 (sha256
14649 (base32
14650 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14651 (build-system pyproject-build-system)
14652 (arguments
14653 (list
14654 #:test-flags #~(list "-m" "not needs_internet"
14655 ;; This attempts to load libGL.so (provided by mesa)
14656 ;; at the Python store path (sys.base_prefix?).
14657 "-k" "not test_findlib2"
14658 "--ignore" "tests/test_freeimage.py")
14659 #:phases
14660 #~(modify-phases %standard-phases
14661 (add-after 'unpack 'fix-source
14662 (lambda* (#:key inputs #:allow-other-keys)
14663 (substitute* "imageio/core/util.py"
14664 (("\"/var/tmp\"")
14665 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14666 (propagated-inputs
14667 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14668 (native-inputs
14669 (list python-fsspec
14670 python-pytest
14671 python-setuptools))
14672 (home-page "https://imageio.github.io/")
14673 (synopsis "Library for reading and writing a wide range of image data")
14674 (description
14675 "Imageio is a Python library that provides an easy interface to read and
14676write a wide range of image data, including animated images, video, volumetric
14677data, and scientific formats.")
14678 (license license:bsd-2)))
14679
14680(define-public python-pyudorandom
14681 ;; Releases are not tagged in Git:
14682 ;; https://github.com/mewwts/pyudorandom/issues/3
14683 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14684 (revision "0"))
14685 (package
14686 (name "python-pyudorandom")
14687 (version (git-version "1.0.0" revision commit))
14688 (source
14689 (origin
14690 (method git-fetch)
14691 (uri (git-reference
14692 (url "https://github.com/mewwts/pyudorandom")
14693 (commit commit)))
14694 (file-name (git-file-name name version))
14695 (sha256
14696 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
14697 (build-system pyproject-build-system)
14698 (arguments (list #:test-backend #~'unittest))
14699 (native-inputs (list python-setuptools))
14700 (home-page "https://github.com/mewwts/pyudorandom")
14701 (synopsis "Generate pseudorandom numbers by using algebra")
14702 (description
14703 "The @code{pyudorandom} module lets you iterate over a list
14704in a non-succsessive, yet deterministic way based on integer modulo.
14705It comes in handy when you want to mix up the items, but don't need
14706any guarantees of randomness. It might be slow on small data,
14707but shall be significantly faster than @code{random.shuffle}
14708for longer lists.")
14709 (license license:expat))))
14710
14711(define-public python-pyvips
14712 (package
14713 (name "python-pyvips")
14714 (version "3.1.1")
14715 (source
14716 (origin
14717 (method git-fetch) ; PyPI does not include test helpers
14718 (uri (git-reference
14719 (url "https://github.com/libvips/pyvips")
14720 (commit (string-append "v" version))))
14721 (file-name (git-file-name name version))
14722 (sha256
14723 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
14724 (build-system pyproject-build-system)
14725 (native-inputs
14726 (list pkg-config
14727 python-pytest
14728 python-setuptools
14729 python-wheel))
14730 (inputs
14731 (list glib vips))
14732 (propagated-inputs
14733 (list python-cffi python-pkgconfig))
14734 (home-page "https://github.com/libvips/pyvips")
14735 (synopsis "Python bindings for VIPS")
14736 (description "The @code{pyvips} package provides Python bindings for VIPS,
14737a multithreaded image-processing system with low memory needs.")
14738 (license license:expat)))
14739
14740;; WARNING: This package is a dependency of mesa.
14741;; There are no users in python-xyz for this package, consider to adopt closer
14742;; to Mesa.
14743(define-public python-pycparser
14744 (package
14745 (name "python-pycparser")
14746 (version "2.22")
14747 (source
14748 (origin
14749 (method url-fetch)
14750 (uri (pypi-uri "pycparser" version))
14751 (sha256
14752 (base32
14753 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
14754 (outputs '("out" "doc"))
14755 (build-system pyproject-build-system)
14756 (arguments
14757 (list
14758 #:test-backend #~'unittest
14759 #:phases
14760 #~(modify-phases %standard-phases
14761 (add-after 'install 'install-doc
14762 (lambda _
14763 (let* ((data (string-append #$output:doc "/share"))
14764 (doc (string-append data "/doc/" #$name "-" #$version))
14765 (examples (string-append doc "/examples")))
14766 (mkdir-p examples)
14767 (for-each (lambda (file)
14768 (copy-file (string-append "." file)
14769 (string-append doc file)))
14770 '("/README.rst" "/CHANGES" "/LICENSE"))
14771 (copy-recursively "examples" examples)))))))
14772 (native-inputs
14773 (list python-setuptools))
14774 (home-page "https://github.com/eliben/pycparser")
14775 (synopsis "C parser in Python")
14776 (description
14777 "Pycparser is a complete parser of the C language, written in pure Python
14778using the PLY parsing library. It parses C code into an AST and can serve as
14779a front-end for C compilers or analysis tools.")
14780 (license license:bsd-3)))
14781
14782(define-public python-pywavelets
14783 (package
14784 (name "python-pywavelets")
14785 (version "1.8.0")
14786 (home-page "https://github.com/PyWavelets/pywt")
14787 (source (origin
14788 (method url-fetch)
14789 (uri (pypi-uri "pywavelets" version))
14790 (sha256
14791 (base32
14792 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
14793 (build-system pyproject-build-system)
14794 (arguments
14795 (list
14796 #:test-flags '(list "--pyargs" "pywt")
14797 #:phases
14798 #~(modify-phases %standard-phases
14799 ;; The compiled libraries are only in the output at this point,
14800 ;; but they are needed to run tests.
14801 ;; FIXME: This should be handled by the pyargs pytest argument,
14802 ;; but is not for some reason.
14803 (add-before 'check 'pre-check
14804 (lambda _ (chdir #$output))))))
14805 (native-inputs
14806 (list meson
14807 ninja
14808 pkg-config
14809 python-cython
14810 python-meson
14811 python-numpy
14812 python-pytest))
14813 (propagated-inputs
14814 (list python-numpy python-scipy))
14815 (synopsis "Wavelet transforms in Python")
14816 (description
14817 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
14818mathematical basis functions that are localized in both time and frequency.
14819Wavelet transforms are time-frequency transforms employing wavelets. They are
14820similar to Fourier transforms, the difference being that Fourier transforms are
14821localized only in frequency instead of in time and frequency.")
14822 (license license:expat)))
14823
14824(define-public python-pywal
14825 (package
14826 (name "python-pywal")
14827 (version "3.3.0")
14828 (source
14829 (origin
14830 (method git-fetch)
14831 (uri (git-reference
14832 (url "https://github.com/dylanaraps/pywal")
14833 (commit version)))
14834 (file-name (git-file-name name version))
14835 (sha256
14836 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
14837 (build-system pyproject-build-system)
14838 (arguments
14839 `(#:phases
14840 (modify-phases %standard-phases
14841 (add-before 'check 'fix-home-directory
14842 (lambda _
14843 ;; Tests fail with "Permission denied: '/homeless-shelter'".
14844 (setenv "HOME" "/tmp"))))))
14845 (native-inputs
14846 (list python-pytest
14847 python-setuptools))
14848 (inputs
14849 (list imagemagick))
14850 (home-page "https://github.com/dylanaraps/pywal")
14851 (synopsis "Color palette generator and applicator")
14852 (description
14853 "Pywal is a tool that generates a color palette from the dominant colors
14854in an image. It then applies the colors system-wide and on-the-fly in all of
14855your favourite programs.")
14856 (license license:expat)))
14857
14858(define-public python-pywal16
14859 (package
14860 (name "python-pywal16")
14861 (version "3.8.10")
14862 (source
14863 (origin
14864 (method url-fetch)
14865 (uri (pypi-uri "pywal16" version))
14866 (sha256
14867 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
14868 (build-system pyproject-build-system)
14869 (arguments
14870 (list
14871 #:phases
14872 '(modify-phases %standard-phases
14873 (add-before 'check 'set-HOME
14874 (lambda _ (setenv "HOME" "/tmp"))))))
14875 (native-inputs
14876 (list imagemagick
14877 python-pytest
14878 python-setuptools))
14879 (home-page "https://github.com/eylles/pywal16")
14880 (synopsis "16 colors fork of pywal")
14881 (description
14882 "Pywal16 is a tool that generates a color palette from the dominant
14883colors in an image. It then applies the colors system-wide and on-the-fly in
14884all of your favorite programs.")
14885 (license license:expat)))
14886
14887(define-public python-click-didyoumean
14888 (package
14889 (name "python-click-didyoumean")
14890 (version "0.3.1")
14891 (source
14892 (origin
14893 (method git-fetch) ;no tests in PyPI archive
14894 (uri (git-reference
14895 (url "https://github.com/click-contrib/click-didyoumean")
14896 (commit (string-append "v" version))))
14897 (file-name (git-file-name name version))
14898 (sha256
14899 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
14900 (build-system pyproject-build-system)
14901 (native-inputs
14902 (list python-poetry-core python-pytest))
14903 (propagated-inputs
14904 (list python-click))
14905 (home-page "https://github.com/timofurrer/click-didyoumean")
14906 (synopsis "Git-like did-you-mean feature in Click")
14907 (description
14908 "This plugin enables git-like did-you-mean feature in Click.")
14909 (license license:expat)))
14910
14911(define-public python-pywinrm
14912 (package
14913 (name "python-pywinrm")
14914 (version "0.5.0")
14915 (source
14916 (origin
14917 (method git-fetch)
14918 (uri (git-reference
14919 (url "https://github.com/diyan/pywinrm/")
14920 (commit (string-append "v" version))))
14921 (file-name (git-file-name name version))
14922 (sha256
14923 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
14924 (build-system pyproject-build-system)
14925 (propagated-inputs
14926 (list python-requests python-requests-ntlm python-xmltodict))
14927 (native-inputs
14928 (list python-mock python-pytest python-setuptools))
14929 (home-page "https://github.com/diyan/pywinrm/")
14930 (synopsis "Python library for Windows Remote Management (WinRM)")
14931 (description
14932 "pywinrm is a Python client for the Windows Remote Management (WinRM)
14933service. It allows you to invoke commands on target Windows machines from
14934any machine that can run Python.")
14935 (license license:expat)))
14936
14937(define-public python-manimpango
14938 (package
14939 (name "python-manimpango")
14940 (version "0.5.0")
14941 (source
14942 (origin
14943 (method git-fetch) ; no tests data in PyPi package
14944 (uri (git-reference
14945 (url "https://github.com/ManimCommunity/ManimPango")
14946 (commit (string-append "v" version))))
14947 (file-name (git-file-name name version))
14948 (sha256
14949 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
14950 (build-system pyproject-build-system)
14951 (arguments
14952 (list
14953 #:phases
14954 #~(modify-phases %standard-phases
14955 (add-before 'check 'build-extensions
14956 (lambda _
14957 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
14958 (native-inputs
14959 (list pkg-config
14960 python-cython
14961 python-pytest
14962 python-setuptools
14963 python-wheel))
14964 (inputs
14965 (list pango))
14966 (home-page "https://manimpango.manim.community/")
14967 (synopsis "Bindings for Pango for using with Manim")
14968 (description
14969 "Python bindings for ManimPango which is a C binding for Pango,
14970using Cython.
14971
14972ManimPango is internally used in Manim to render (non-LaTeX) text.")
14973 (license license:expat)))
14974
14975(define-public python-cairocffi
14976 (package
14977 (name "python-cairocffi")
14978 (version "1.7.1")
14979 (source
14980 (origin
14981 ;; The PyPI archive does not include the documentation, so use Git.
14982 (method git-fetch)
14983 (uri (git-reference
14984 (url "https://github.com/Kozea/cairocffi")
14985 (commit (string-append "v" version))))
14986 (file-name (git-file-name name version))
14987 (sha256
14988 (base32
14989 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
14990 (build-system pyproject-build-system)
14991 (outputs '("out" "doc"))
14992 (inputs
14993 (list glib gtk+ gdk-pixbuf cairo))
14994 (native-inputs
14995 (list python-flit-core
14996 python-numpy
14997 python-pikepdf
14998 python-pytest
14999 python-sphinx
15000 python-sphinx-rtd-theme))
15001 (propagated-inputs
15002 (list python-xcffib)) ; used at run time
15003 (arguments
15004 (list
15005 #:phases
15006 #~(modify-phases %standard-phases
15007 (add-after 'unpack 'patch-paths
15008 (lambda* (#:key inputs #:allow-other-keys)
15009 (substitute* "cairocffi/__init__.py"
15010 ;; Hack the dynamic library loading mechanism.
15011 (("find_library\\(library_name\\)")
15012 "\"found\"")
15013 (("filenames = \\(library_filename,\\) \\+ filenames")
15014 "pass")
15015 (("libcairo.so.2")
15016 (search-input-file inputs "/lib/libcairo.so.2")))
15017 (substitute* "cairocffi/pixbuf.py"
15018 (("libgdk_pixbuf-2.0.so.0")
15019 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15020 (("libgobject-2.0.so.0")
15021 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15022 (("libglib-2.0.so.0")
15023 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15024 (("libgdk-3.so.0")
15025 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15026 (add-after 'install 'install-doc
15027 (lambda* (#:key inputs #:allow-other-keys)
15028 (let* ((data (string-append #$output:doc "/share"))
15029 (doc (string-append data "/doc/" #$name "-" #$version))
15030 (html (string-append doc "/html")))
15031 (setenv "LD_LIBRARY_PATH"
15032 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15033 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15034 (setenv "LANG" "en_US.UTF-8")
15035 (mkdir-p html)
15036 (for-each (lambda (file)
15037 (copy-file (string-append "." file)
15038 (string-append doc file)))
15039 '("/README.rst" "/NEWS.rst"))
15040 (system* "python" "setup.py" "build_sphinx")
15041 (copy-recursively "docs/_build/html" html)))))))
15042 (home-page "https://github.com/Kozea/cairocffi")
15043 (synopsis "Python bindings and object-oriented API for Cairo")
15044 (description
15045 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15046Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15047graphics library with support for multiple backends including image buffers,
15048PNG, PostScript, PDF, and SVG file output.")
15049 (license license:bsd-3)))
15050
15051(define-public python-decorator
15052 (package
15053 (name "python-decorator")
15054 (version "5.2.1")
15055 (source
15056 (origin
15057 (method url-fetch)
15058 (uri (pypi-uri "decorator" version))
15059 (sha256
15060 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15061 (build-system pyproject-build-system)
15062 (arguments
15063 (list #:test-backend #~'custom
15064 #:test-flags #~(list "tests/test.py")))
15065 (native-inputs
15066 (list python-setuptools))
15067 (home-page "https://pypi.org/project/decorator/")
15068 (synopsis "Python module to simplify usage of decorators")
15069 (description
15070 "The aim of the decorator module is to simplify the usage of decorators
15071for the average programmer, and to popularize decorators usage giving examples
15072of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15073etc. The core of this module is a decorator factory.")
15074 (license license:expat)))
15075
15076(define-public python-drmaa
15077 (package
15078 (name "python-drmaa")
15079 (version "0.7.7")
15080 (source
15081 (origin
15082 (method url-fetch)
15083 (uri (pypi-uri "drmaa" version))
15084 (sha256
15085 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15086 (build-system pyproject-build-system)
15087 ;; The test suite requires libdrmaa which is provided by the cluster
15088 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15089 ;; should be set to the path of the libdrmaa library.
15090 (arguments
15091 (list
15092 #:tests? #f
15093 #:phases
15094 #~(modify-phases %standard-phases
15095 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15096 ;; is not configured.
15097 (delete 'sanity-check))))
15098 (native-inputs (list python-setuptools))
15099 (home-page "https://pypi.org/project/drmaa/")
15100 (synopsis "Python bindings for the DRMAA library")
15101 (description
15102 "A Python package for Distributed Resource Management (DRM) job
15103submission and control. This package is an implementation of the DRMAA 1.0
15104Python language binding specification.")
15105 (license license:bsd-3)))
15106
15107(define-public python-grako
15108 (package
15109 (name "python-grako")
15110 (version "3.99.9")
15111 (source
15112 (origin
15113 (method url-fetch)
15114 (uri (pypi-uri "grako" version ".zip"))
15115 (sha256
15116 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15117 (snippet
15118 #~(begin (use-modules (guix build utils))
15119 (substitute* "grako/grammars.py"
15120 (("from collections import defaultdict, Mapping")
15121 (string-append "from collections import defaultdict\n"
15122 "from collections.abc import Mapping")))
15123 (substitute* '("grako/util.py"
15124 "grako/walkers.py")
15125 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15126 (build-system pyproject-build-system)
15127 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15128 (arguments (list #:tests? #f))
15129 (native-inputs (list unzip python-pytest python-setuptools))
15130 (home-page "https://pypi.org/project/grako")
15131 (synopsis "EBNF parser generator")
15132 (description
15133 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15134memoizing PEG/Packrat parser in Python.")
15135 (license license:bsd-3)))
15136
15137(define-public python-grandalf
15138 (package
15139 (name "python-grandalf")
15140 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15141 (version "0.8")
15142 (source
15143 (origin
15144 (method git-fetch)
15145 (uri (git-reference
15146 (url "https://github.com/bdcht/grandalf")
15147 (commit (string-append "v" version))))
15148 (file-name (git-file-name name version))
15149 (sha256
15150 (base32
15151 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
15152 (build-system pyproject-build-system)
15153 (arguments
15154 (list
15155 #:phases
15156 #~(modify-phases %standard-phases
15157 (add-before 'build 'patch-requirements
15158 (lambda _
15159 (substitute* "setup.py"
15160 (("install_requires=\\['pyparsing'],") "")))))))
15161 (native-inputs
15162 (list python-setuptools python-pytest))
15163 (propagated-inputs
15164 (list python-numpy python-ply))
15165 (home-page "https://github.com/bdcht/grandalf")
15166 (synopsis "Graph and drawing algorithms framework")
15167 (description
15168 "Grandalf is a Python package made for experimentations with graphs
15169drawing algorithms. It is written in pure Python, and currently implements
15170two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15171minimization approach. While not as fast or featured as graphviz or other
15172libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15173than thousands of nodes, while keeping the source code simple enough to tweak
15174and hack any part of it for experimental purpose. With a total of about 1500
15175lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15176in less than 600 lines. The energy minimization approach is comprised of only
15177250 lines!
15178
15179Grandalf does only 2 not-so-simple things:
15180@itemize
15181@item computing the nodes (x,y) coordinates (based on provided nodes
15182dimensions, and a chosen layout)
15183@item routing the edges with lines or nurbs
15184@end itemize
15185
15186It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15187will help you find where to draw things like nodes and edges, but it’s up to
15188you to actually draw things with your favorite toolkit.")
15189 ;; The user can choose either license.
15190 (license (list license:gpl2 license:epl1.0))))
15191
15192(define-public python-gridmap
15193 ;; XXX: Project is unmaintained since 2020-08-24, see:
15194 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15195 (package
15196 (name "python-gridmap")
15197 (version "0.15.0")
15198 (source
15199 (origin
15200 (method git-fetch)
15201 (uri (git-reference
15202 (url "https://github.com/pygridtools/gridmap")
15203 (commit (string-append "v" version))))
15204 (file-name (git-file-name name version))
15205 (sha256
15206 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15207 (build-system pyproject-build-system)
15208 (arguments
15209 (list #:tests? #f ;XXX: freezes or timeout
15210 #:test-backend #~'nose))
15211 (native-inputs
15212 (list ;; python-pynose
15213 python-setuptools))
15214 (propagated-inputs
15215 (list python-cherrypy
15216 python-cloudpickle
15217 python-psutil
15218 python-drmaa
15219 python-pyzmq))
15220 (home-page "https://github.com/pygridtools/gridmap")
15221 (synopsis "Create jobs on a cluster directly from Python")
15222 (description
15223 "Gridmap is a Python package to allow you to easily create jobs on the
15224cluster directly from Python. You can directly map Python functions onto the
15225cluster without needing to write any wrapper code yourself.")
15226 (license license:gpl3+)))
15227
15228(define-public python-honcho
15229 (package
15230 (name "python-honcho")
15231 (version "2.0.0")
15232 (source
15233 (origin
15234 (method git-fetch)
15235 (uri (git-reference
15236 (url "https://github.com/nickstenning/honcho")
15237 (commit (string-append "v" version))))
15238 (file-name (git-file-name name version))
15239 (sha256
15240 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15241 (build-system pyproject-build-system)
15242 (arguments
15243 ;; Tests below fail with the error
15244 ;; ValueError: The 'honcho.export.xxx' package was not installed
15245 ;; in a way that PackageLoader understands.
15246 ;; Probably safe because it's testing for different init systems.
15247 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15248 "--ignore" "tests/test_export_runit.py"
15249 "--ignore" "tests/test_export_supervisord.py"
15250 "--ignore" "tests/test_export_systemd.py"
15251 "--ignore" "tests/test_export_upstart.py")))
15252 (native-inputs
15253 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15254 (propagated-inputs
15255 (list python-colorama))
15256 (home-page "https://github.com/nickstenning/honcho")
15257 (synopsis "Manage Procfile-based applications")
15258 (description
15259 "A Procfile is a file which describes how to run an application
15260consisting of several processes. honcho starts all listed processes.
15261The output of all running processes is collected by honcho and
15262displayed.")
15263 (license license:expat)))
15264
15265(define-public python-hsluv
15266 (package
15267 (name "python-hsluv")
15268 (version "5.0.4")
15269 (source
15270 (origin
15271 (method url-fetch)
15272 (uri (pypi-uri "hsluv" version))
15273 (sha256
15274 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15275 (build-system pyproject-build-system)
15276 (native-inputs
15277 (list python-pytest python-setuptools))
15278 (home-page "https://www.hsluv.org")
15279 (synopsis "Human-friendly HSL colour space implemented in Python")
15280 (description
15281 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15282@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15283component that allows you to span all the available chroma as a neat
15284percentage.")
15285 (license license:expat)))
15286
15287(define-public python-pebble
15288 (package
15289 (name "python-pebble")
15290 (version "5.1.3")
15291 (source
15292 (origin
15293 (method git-fetch)
15294 (uri (git-reference
15295 (url "https://github.com/noxdafox/pebble")
15296 (commit version)))
15297 (file-name (git-file-name name version))
15298 (sha256
15299 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15300 (build-system pyproject-build-system)
15301 (native-inputs (list python-pytest python-setuptools))
15302 (home-page "https://github.com/noxdafox/pebble")
15303 (synopsis "Threading and multiprocessing for Python")
15304 (description
15305 "Pebble aims to help manage threads and processes in an easier way. It
15306wraps Python's standard library threading and multiprocessing objects.")
15307 (license license:lgpl3+)))
15308
15309(define-public python-pexpect
15310 (package
15311 (name "python-pexpect")
15312 (version "4.9.0")
15313 (source
15314 (origin
15315 (method url-fetch)
15316 (uri (pypi-uri "pexpect" version))
15317 (sha256
15318 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15319 (build-system pyproject-build-system)
15320 (arguments
15321 (list
15322 #:test-flags
15323 #~(list "-k" (string-join
15324 (list
15325 ;; Disable failing test, see
15326 ;; <https://github.com/pexpect/pexpect/issues/568>.
15327 "not test_bash"
15328 ;; Fails with attempt to find OpenSSL.
15329 "test_large_stdout_stream"
15330 ;; Tests fail while trying to find
15331 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15332 "test_run_uses_env"
15333 "test_run_uses_env_path"
15334 "test_run_uses_env_path_over_path"
15335 "test_spawn_uses_env"
15336 ;; Fails with assertion error: assert 0 == 500
15337 "test_before_across_chunks"
15338 ;; Bash is enough for tests.
15339 "test_zsh")
15340 " and not "))
15341 #:phases
15342 #~(modify-phases %standard-phases
15343 (add-before 'check 'prepare-tests
15344 (lambda _
15345 (substitute* (find-files "tests")
15346 (("/bin/bash") (which "bash"))
15347 (("/bin/echo") (which "echo"))
15348 (("/bin/ls") (which "ls"))
15349 (("/bin/which") (which "which"))
15350 ;; Many tests try to use the /bin directory which is not
15351 ;; present in the build environment. Use one that's non-empty
15352 ;; and unlikely to change.
15353 (("/bin'") "/dev'")))))))
15354 (native-inputs
15355 (list bash ;full Bash for 'test_replwrap.py'
15356 man-db
15357 python-pytest
15358 python-setuptools
15359 python-wheel
15360 which))
15361 (propagated-inputs
15362 (list python-ptyprocess))
15363 (home-page "https://pexpect.readthedocs.org/")
15364 (synopsis "Controlling interactive console applications")
15365 (description
15366 "Pexpect is a pure Python module for spawning child applications;
15367controlling them; and responding to expected patterns in their output. Pexpect
15368works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15369application and control it as if a human were typing commands.")
15370 (license license:isc)))
15371
15372(define-public python-sexpdata
15373 (package
15374 (name "python-sexpdata")
15375 (version "1.0.2")
15376 (source
15377 (origin
15378 (method url-fetch)
15379 (uri (pypi-uri "sexpdata" version))
15380 (sha256
15381 (base32
15382 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15383 (build-system pyproject-build-system)
15384 (arguments
15385 (list #:tests? #f)) ; no tests
15386 (native-inputs (list python-setuptools python-wheel))
15387 (home-page "https://github.com/jd-boyd/sexpdata")
15388 (synopsis "S-expression parser for Python")
15389 (description
15390 "Sexpdata is an S-expression parser/serializer. It has load and dump
15391functions like pickle, json or PyYAML module.")
15392 (license license:bsd-3)))
15393
15394(define-public python-pathable
15395 (package
15396 (name "python-pathable")
15397 (version "0.4.3")
15398 (source
15399 (origin
15400 (method url-fetch)
15401 (uri (pypi-uri "pathable" version))
15402 (sha256
15403 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15404 (build-system pyproject-build-system)
15405 (arguments (list #:tests? #false)) ;there are none
15406 (native-inputs (list python-poetry-core))
15407 (home-page "https://github.com/p1c2u/pathable")
15408 (synopsis "Object-oriented paths")
15409 (description "With this package you can traverse resources like paths and
15410access resources on demand with separate accessor layer.")
15411 (license license:asl2.0)))
15412
15413(define-public python-importlib-resources
15414 (package
15415 (name "python-importlib-resources")
15416 (version "6.5.2")
15417 (source (origin
15418 (method url-fetch)
15419 (uri (pypi-uri "importlib_resources" version))
15420 (sha256
15421 (base32
15422 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15423 (build-system pyproject-build-system)
15424 (native-inputs
15425 (list python-jaraco-test
15426 python-jaraco-collections
15427 python-pytest
15428 python-setuptools
15429 python-setuptools-scm
15430 python-zipp))
15431 (home-page "https://importlib-resources.readthedocs.io/")
15432 (synopsis "Read resources from Python packages")
15433 (description
15434 "@code{importlib_resources} is a backport of Python 3's standard library
15435@code{importlib.resources} module for Python 2.7, and Python 3.")
15436 (license license:asl2.0)))
15437
15438(define-public python-importlib-metadata
15439 (package
15440 (name "python-importlib-metadata")
15441 (version "8.7.0")
15442 (source
15443 (origin
15444 (method url-fetch)
15445 (uri (pypi-uri "importlib_metadata" version))
15446 (sha256
15447 (base32
15448 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15449 (build-system pyproject-build-system)
15450 (arguments
15451 (list #:test-flags #~(list "tests")))
15452 (native-inputs
15453 (list python-jaraco-test
15454 python-packaging-bootstrap
15455 python-pyfakefs
15456 python-pytest-bootstrap
15457 python-setuptools
15458 python-setuptools-scm))
15459 (propagated-inputs
15460 (list python-zipp))
15461 (home-page "https://importlib-metadata.readthedocs.io/")
15462 (synopsis "Read metadata from Python packages")
15463 (description
15464 "@code{importlib_metadata} is a library which provides an API for
15465accessing an installed Python package's metadata, such as its entry points or
15466its top-level name. This functionality intends to replace most uses of
15467@code{pkg_resources} entry point API and metadata API. Along with
15468@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15469need to use the older and less efficient @code{pkg_resources} package.")
15470 (license license:asl2.0)))
15471
15472(define-public python-importlib-metadata-argparse-version
15473 (package
15474 (name "python-importlib-metadata-argparse-version")
15475 (version "2.0.1")
15476 (home-page
15477 "https://github.com/mondeja/importlib-metadata-argparse-version")
15478 (source
15479 (origin
15480 (method git-fetch)
15481 (uri (git-reference
15482 (url home-page)
15483 (commit (string-append "v" version))))
15484 (file-name (git-file-name name version))
15485 (sha256
15486 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15487 (build-system pyproject-build-system)
15488 (native-inputs (list python-pytest python-hatchling))
15489 (synopsis "Get Python package version more efficiently")
15490 (description
15491 "This package provides an @code{argparse} action to define CLI version
15492with a delayed call to @code{importlib.metadata}, avoiding to load this module
15493when not needed.")
15494 (license license:bsd-3)))
15495
15496(define-public python-importmagic
15497 (package
15498 (name "python-importmagic")
15499 (version "0.1.7")
15500 (source
15501 (origin
15502 (method git-fetch)
15503 (uri (git-reference
15504 (url "https://github.com/alecthomas/importmagic")
15505 (commit version)))
15506 (file-name (git-file-name name version))
15507 (sha256
15508 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15509 (build-system pyproject-build-system)
15510 (native-inputs (list python-pytest python-setuptools))
15511 (home-page "https://github.com/alecthomas/importmagic")
15512 (synopsis "Library for adding, removing and managing Python imports")
15513 (description
15514 "Importmagic is a Python library for automatically managing imports by
15515finding unresolved symbols in Python code and their corresponding imports.")
15516 (license license:bsd-3)))
15517
15518(define-public python-inotify-simple
15519 (package
15520 (name "python-inotify-simple")
15521 (version "1.3.5")
15522 (source
15523 (origin
15524 (method git-fetch)
15525 (uri (git-reference
15526 (url "https://github.com/chrisjbillington/inotify_simple")
15527 (commit version)))
15528 (file-name (git-file-name name version))
15529 (sha256
15530 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15531 (build-system pyproject-build-system)
15532 (arguments
15533 (list
15534 #:test-backend #~'custom
15535 #:test-flags #~(list "example.py")))
15536 (native-inputs (list python-setuptools))
15537 (home-page "https://github.com/chrisjbillington/inotify_simple")
15538 (synopsis "Simple wrapper around inotify library")
15539 (description
15540 "@code{inotify-simple} is a simple wrapper around inotify library.")
15541 (license license:bsd-3)))
15542
15543(define-public python-interface-meta
15544 (package
15545 (name "python-interface-meta")
15546 (version "1.3.0")
15547 (source
15548 (origin
15549 (method url-fetch)
15550 (uri (pypi-uri "interface_meta" version))
15551 (sha256
15552 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15553 (build-system pyproject-build-system)
15554 (native-inputs (list python-poetry-core python-pytest))
15555 (home-page "https://github.com/matthewwardrop/interface_meta")
15556 (synopsis
15557 "API for enforced method signatures and consistent documentation")
15558 (description
15559 "This package provides a convenient way to expose an extensible API with
15560enforced method signatures and consistent documentation.")
15561 (license license:expat)))
15562
15563(define-public python-jaraco-itertools
15564 (package
15565 (name "python-jaraco-itertools")
15566 (version "6.4.3")
15567 (source
15568 (origin
15569 (method git-fetch)
15570 (uri (git-reference
15571 (url "https://github.com/jaraco/jaraco.itertools")
15572 (commit (string-append "v" version))))
15573 (file-name (git-file-name name version))
15574 (sha256
15575 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15576 (build-system pyproject-build-system)
15577 (arguments
15578 (list #:tests? #f)) ;no tests
15579 (native-inputs
15580 (list python-setuptools
15581 python-setuptools-scm))
15582 (propagated-inputs
15583 (list python-inflect
15584 python-more-itertools))
15585 (home-page "https://github.com/jaraco/jaraco.itertools")
15586 (synopsis "Tools for working with iterables")
15587 (description
15588 "This package provides an utility collection based on no longer
15589maintained @code{jaraco.util}.")
15590 (license license:expat)))
15591
15592(define-public python-jaraco-logging
15593 (package
15594 (name "python-jaraco-logging")
15595 (version "3.4.0")
15596 (source
15597 (origin
15598 (method git-fetch)
15599 (uri (git-reference
15600 (url "https://github.com/jaraco/jaraco.logging")
15601 (commit (string-append "v" version))))
15602 (file-name (git-file-name name version))
15603 (sha256
15604 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15605 (build-system pyproject-build-system)
15606 (native-inputs
15607 (list python-pytest
15608 python-setuptools
15609 python-setuptools-scm))
15610 (propagated-inputs
15611 (list python-tempora))
15612 (home-page "https://github.com/jaraco/jaraco.logging")
15613 (synopsis "Support for Python's logging facility")
15614 (description
15615 "This package allows soliciting log-level info from command-line
15616parameters.")
15617 (license license:expat)))
15618
15619(define-public python-jaraco-packaging
15620 (package
15621 (name "python-jaraco-packaging")
15622 (version "9.4.0") ;the latest version compatible with [email protected]
15623 (source
15624 (origin
15625 (method url-fetch)
15626 (uri (pypi-uri "jaraco.packaging" version))
15627 (sha256
15628 (base32
15629 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15630 (build-system pyproject-build-system)
15631 (arguments
15632 (list #:tests? #f)) ;no tests in PyPI archive
15633 (native-inputs
15634 (list python-setuptools
15635 python-setuptools-scm))
15636 (propagated-inputs
15637 (list python-pypa-build
15638 python-virtualenv
15639 python-domdf-python-tools
15640 python-jaraco-context
15641 python-sphinx))
15642 (home-page "https://github.com/jaraco/jaraco.packaging")
15643 (synopsis "Tools to supplement packaging Python releases")
15644 (description
15645 "This package provides various tools to supplement packaging Python
15646releases.")
15647 (license license:expat)))
15648
15649(define-public python-jaraco-vcs
15650 (package
15651 (name "python-jaraco-vcs")
15652 (version "2.4.1")
15653 (source
15654 (origin
15655 (method git-fetch)
15656 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15657 (commit (string-append "v" version))))
15658 (file-name (git-file-name name version))
15659 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15660 (build-system pyproject-build-system)
15661 (arguments
15662 (list
15663 #:test-flags
15664 ;; Ignore doctests.
15665 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15666 (propagated-inputs (list python-jaraco-classes
15667 python-jaraco-path
15668 python-jaraco-versioning
15669 python-more-itertools
15670 python-packaging
15671 python-dateutil
15672 python-tempora))
15673 (native-inputs (list python-pygments
15674 python-pytest
15675 python-pytest-home
15676 python-setuptools
15677 python-setuptools-scm))
15678 (home-page "https://github.com/jaraco/jaraco.vcs")
15679 (synopsis "Utilities for working with VCS repositories")
15680 (description
15681 "This package provides facilities for working with VCS repositories in
15682Python.")
15683 (license license:expat)))
15684
15685(define-public python-jaraco-versioning
15686 (package
15687 (name "python-jaraco-versioning")
15688 (version "1.1.0")
15689 (source
15690 (origin
15691 (method git-fetch)
15692 (uri (git-reference
15693 (url "https://github.com/jaraco/jaraco.versioning")
15694 (commit (string-append "v" version))))
15695 (file-name (git-file-name name version))
15696 (sha256
15697 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
15698 (build-system pyproject-build-system)
15699 (propagated-inputs (list python-packaging))
15700 (native-inputs
15701 (list python-pytest python-setuptools python-setuptools-scm))
15702 (home-page "https://github.com/jaraco/jaraco.versioning")
15703 (synopsis "Version manipulation utils")
15704 (description
15705 "This package builds upon @code{python-packaging} to provide more
15706sophisticated version manipulation.")
15707 (license license:expat)))
15708
15709(define-public python-pypytools
15710 (package
15711 (name "python-pypytools")
15712 (version "0.6.2")
15713 (source
15714 (origin
15715 (method git-fetch)
15716 (uri (git-reference
15717 (url "https://github.com/antocuni/pypytools/")
15718 (commit version)))
15719 (file-name (git-file-name name version))
15720 (sha256
15721 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
15722 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
15723 (build-system pyproject-build-system)
15724 (arguments
15725 (list
15726 ;; These tests are using deprecated py.code module.
15727 #:test-flags
15728 #~(list
15729 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
15730 "--deselect=pypytools/testing/test_codegen.py::test_def_"
15731 "--deselect=pypytools/testing/test_codegen.py::test_compile"
15732 "--ignore=pypytools/testing/test_unroll.py"
15733 ;; clone_func returns an object of the wrong type.
15734 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
15735 (native-inputs
15736 (list python-freezegun
15737 python-numpy
15738 python-pytest
15739 python-setuptools))
15740 (propagated-inputs (list python-py))
15741 (home-page "https://github.com/antocuni/pypytools/")
15742 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
15743 (description
15744 "This package provides a collection of useful tools to use PyPy-specific
15745features, with CPython fallbacks.")
15746 (license license:x11)))
15747
15748(define-public python-simplegeneric
15749 (package
15750 (name "python-simplegeneric")
15751 (version "0.8.1")
15752 (source
15753 (origin
15754 (method url-fetch)
15755 (uri (pypi-uri "simplegeneric" version ".zip"))
15756 (sha256
15757 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
15758 (build-system pyproject-build-system)
15759 (arguments
15760 (list
15761 #:test-backend #~'custom
15762 #:test-flags #~(list "-m" "simplegeneric")))
15763 (native-inputs
15764 (list unzip python-setuptools))
15765 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
15766 (synopsis "Python module for simple generic functions")
15767 (description
15768 "The simplegeneric module lets you define simple single-dispatch generic
15769functions, akin to Python’s built-in generic functions like @code{len()},
15770@code{iter()} and so on. However, instead of using specially-named methods,
15771these generic functions use simple lookup tables, akin to those used by
15772e.g. @code{pickle.dump()} and other generic functions found in the Python
15773standard library.")
15774 (license license:zpl2.1)))
15775
15776(define-public python-ipython-genutils
15777 ;; TODO: This package is retired, check if can be removed, see description.
15778 (package
15779 (name "python-ipython-genutils")
15780 (version "0.1.0")
15781 (source
15782 (origin
15783 (method url-fetch)
15784 (uri (pypi-uri "ipython_genutils" version))
15785 (sha256
15786 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
15787 (build-system pyproject-build-system)
15788 (arguments `(#:tests? #f)) ; no tests
15789 (native-inputs
15790 (list python-setuptools))
15791 (home-page "https://ipython.org")
15792 (synopsis "Vestigial utilities from IPython")
15793 (description
15794 "This package provides retired utilities from IPython. No packages
15795outside IPython/Jupyter should depend on it.
15796
15797This package shouldn't exist. It contains some common utilities shared by
15798Jupyter and IPython projects during The Big Split. As soon as possible, those
15799packages will remove their dependency on this, and this package will go
15800away.")
15801 (license license:bsd-3)))
15802
15803;;; Variant used to break a cycle with python-ipykernel.
15804(define-public python-ipyparallel-bootstrap
15805 (hidden-package
15806 (package
15807 (name "python-ipyparallel-bootstrap")
15808 (version "9.0.1")
15809 (source
15810 (origin
15811 (method url-fetch)
15812 (uri (pypi-uri "ipyparallel" version))
15813 (sha256
15814 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
15815 (build-system pyproject-build-system)
15816 (arguments
15817 (list
15818 #:tests? #f
15819 #:phases #~(modify-phases %standard-phases
15820 ;; The python-ipykernel is normally propagated but is
15821 ;; removed from this package to break the cycle.
15822 (delete 'sanity-check))))
15823 (native-inputs
15824 (list python-hatchling))
15825 (propagated-inputs
15826 (list python-dateutil
15827 python-decorator
15828 python-entrypoints
15829 python-ipython
15830 ;; python-ipykernel is omitted here to break a cycle.
15831 python-jupyter-client-bootstrap
15832 python-psutil
15833 python-pyzmq
15834 python-tornado
15835 python-tqdm
15836 python-traitlets))
15837 (home-page "https://ipython.org/")
15838 (synopsis "Interactive Parallel Computing with IPython")
15839 (description
15840 "@code{ipyparallel} is a Python package and collection of CLI scripts
15841for controlling clusters for Jupyter. @code{ipyparallel} contains the
15842following CLI scripts:
15843@enumerate
15844@item ipcluster - start/stop a cluster
15845@item ipcontroller - start a scheduler
15846@item ipengine - start an engine
15847@end enumerate")
15848 (license license:bsd-3))))
15849
15850(define-public python-ipyparallel
15851 (package
15852 (inherit python-ipyparallel-bootstrap)
15853 (name "python-ipyparallel")
15854 (arguments
15855 (list
15856 #:test-flags
15857 ;; Disable warning because DeprecationWarnings make tests fail.
15858 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
15859 (native-inputs
15860 (modify-inputs native-inputs
15861 (append python-ipython
15862 python-pytest
15863 python-pytest-asyncio
15864 python-pytest-tornado
15865 python-testpath)))
15866 (propagated-inputs
15867 (modify-inputs propagated-inputs
15868 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
15869 (append python-ipykernel)))
15870 (properties (alist-delete 'hidden? (package-properties
15871 python-ipyparallel-bootstrap)))))
15872
15873;; TODO: Package python-jupysql which is the maintained fork of this one.
15874(define-public python-ipython-sql
15875 (package
15876 (name "python-ipython-sql")
15877 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
15878 (revision . "0")))
15879 (version (git-version "0.5.0"
15880 (assoc-ref properties 'revision)
15881 (assoc-ref properties 'commit)))
15882 (source
15883 (origin
15884 (method git-fetch)
15885 (uri (git-reference
15886 (url "https://github.com/catherinedevlin/ipython-sql")
15887 (commit (assoc-ref properties 'commit))))
15888 (file-name (git-file-name name version))
15889 (sha256
15890 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
15891 (build-system pyproject-build-system)
15892 (arguments
15893 (list #:tests? #f ;Fail because of prettytable.
15894 #:phases
15895 #~(modify-phases %standard-phases
15896 (replace 'check
15897 (lambda* (#:key tests? #:allow-other-keys)
15898 (setenv "HOME" (getcwd))
15899 (if tests?
15900 (invoke "ipython" "-c"
15901 "import pytest; pytest.main(['.'])")
15902 (format #t "test suite not run.~%")))))))
15903 (native-inputs (list python-pytest python-setuptools))
15904 (propagated-inputs
15905 (list python-ipython
15906 python-ipython-genutils
15907 python-prettytable
15908 python-sqlalchemy-2
15909 python-sqlparse))
15910 (home-page "https://github.com/catherinedevlin/ipython-sql")
15911 (synopsis "RDBMS access via IPython")
15912 (description "This library connects to a database, using SQLAlchemy URL
15913connect strings, then issue SQL commands within IPython or IPython Notebook.")
15914 (license license:expat)))
15915
15916(define-public python-optree
15917 (package
15918 (name "python-optree")
15919 (version "0.14.0")
15920 (source
15921 (origin
15922 (method git-fetch)
15923 (uri (git-reference
15924 (url "https://github.com/metaopt/optree")
15925 (commit (string-append "v" version))))
15926 (file-name (git-file-name name version))
15927 (sha256
15928 (base32
15929 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
15930 (build-system pyproject-build-system)
15931 (arguments
15932 (list
15933 #:test-flags
15934 ;; These tests fails due to a circular import
15935 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
15936 " and not test_import_no_warnings"))))
15937 (propagated-inputs (list python-typing-extensions))
15938 (native-inputs
15939 (list python-pytest
15940 python-setuptools
15941 python-wheel
15942 cmake-minimal
15943 pybind11-2))
15944 (home-page "https://github.com/metaopt/optree")
15945 (synopsis "Optimized PyTree Utilities")
15946 (description "This package contains operations on PyTrees (a tree made of
15947container data structures in Python).")
15948 (license license:asl2.0)))
15949
15950(define-public python-backcall
15951 (package
15952 (name "python-backcall")
15953 (version "0.2.0")
15954 (source
15955 (origin
15956 (method git-fetch)
15957 (uri (git-reference
15958 (url "https://github.com/takluyver/backcall/")
15959 (commit version)))
15960 (file-name (git-file-name name version))
15961 (sha256
15962 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
15963 (build-system pyproject-build-system)
15964 (native-inputs (list python-flit-core python-pytest))
15965 (home-page "https://github.com/takluyver/backcall/")
15966 (synopsis "Specifications for callback functions passed in to an API")
15967 (description
15968 "If your code lets other people supply callback functions, it's important
15969to specify the function signature you expect, and check that functions support
15970that. Adding extra parameters later would break other peoples code unless
15971you're careful. The @code{backcall} package provides a way of specifying the
15972callback signature using a prototype function.")
15973 (license license:bsd-3)))
15974
15975(define-public python-pubmed-parser
15976 (package
15977 (name "python-pubmed-parser")
15978 (version "0.5.1")
15979 (source (origin
15980 (method git-fetch)
15981 (uri (git-reference
15982 (url "https://github.com/titipata/pubmed_parser")
15983 (commit version)))
15984 (file-name (git-file-name name version))
15985 (sha256
15986 (base32
15987 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15988 (build-system pyproject-build-system)
15989 (arguments (list #:tests? #f)) ;; Tests require internet
15990 (native-inputs
15991 (list python-setuptools))
15992 (propagated-inputs
15993 (list python-lxml
15994 python-numpy
15995 python-requests
15996 python-six ;hard dependency
15997 python-unidecode))
15998 (home-page "https://titipata.github.io/pubmed_parser/")
15999 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16000 (description
16001 "This package provides a Python parser for Pubmed Open-Access Subset and
16002MEDLINE XML repository.")
16003 (license license:expat)))
16004
16005(define-public python-pure-eval
16006 (package
16007 (name "python-pure-eval")
16008 (version "0.2.3")
16009 (source
16010 (origin
16011 (method url-fetch)
16012 (uri (pypi-uri "pure_eval" version))
16013 (sha256
16014 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16015 (build-system pyproject-build-system)
16016 (native-inputs
16017 (list python-pytest
16018 python-setuptools
16019 python-setuptools-scm
16020 python-wheel))
16021 (home-page "https://github.com/alexmojaki/pure_eval")
16022 (synopsis "Python library to evaluate abstract syntax tree nodes")
16023 (description "The @code{pure_eval} Python library can safely evaluate
16024abstract syntax tree (AST) nodes without side effects.")
16025 (license license:expat)))
16026
16027(define-public python-puremagic
16028 (package
16029 (name "python-puremagic")
16030 (version "1.28")
16031 (source
16032 (origin
16033 (method git-fetch) ;no tests in PyPI archive
16034 (uri (git-reference
16035 (url "https://github.com/cdgriffith/puremagic")
16036 (commit version)))
16037 (file-name (git-file-name name version))
16038 (sha256
16039 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16040 (build-system pyproject-build-system)
16041 (native-inputs
16042 (list python-pytest python-setuptools python-wheel))
16043 (home-page "https://github.com/cdgriffith/puremagic")
16044 (synopsis "Pure Python implementation of magic file detection")
16045 (description
16046 "This package implements a functionality that will identify a file based
16047off it's magic numbers.")
16048 (license license:expat)))
16049
16050(define-public python-ast-decompiler
16051 (package
16052 (name "python-ast-decompiler")
16053 (version "0.7.0")
16054 (source
16055 (origin
16056 (method url-fetch)
16057 (uri (pypi-uri "ast_decompiler" version))
16058 (sha256
16059 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16060 ;; We need to manually create an __init__.py file under the tests/
16061 ;; directory, since it is not included in the distributed
16062 ;; version. (See:
16063 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16064 (modules '((guix build utils)))
16065 (snippet '(call-with-output-file "tests/__init__.py"
16066 (const #t)))))
16067 (build-system pyproject-build-system)
16068 (native-inputs (list python-flit-core python-pytest))
16069 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16070 (synopsis
16071 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16072 (description
16073 "This library provides functionality to decompile @acronym{AST, Abstract
16074Syntax Tree} objects, as generated by the standard library @code{ast} module,
16075to Python code.")
16076 (license license:asl2.0)))
16077
16078(define-public python-asttokens
16079 (package
16080 (name "python-asttokens")
16081 (version "3.0.0")
16082 (source
16083 (origin
16084 (method url-fetch)
16085 (uri (pypi-uri "asttokens" version))
16086 (sha256
16087 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
16088 (build-system pyproject-build-system)
16089 (native-inputs
16090 (list python-astroid
16091 python-pytest
16092 python-setuptools
16093 python-setuptools-scm
16094 python-wheel))
16095 (home-page "https://github.com/gristlabs/asttokens")
16096 (synopsis "Python library to annotate abstract syntax trees")
16097 (description "The @code{asttokens} module annotates Python abstract syntax
16098trees (ASTs) with the positions of tokens and text in the source code that
16099generated them. It makes it possible for tools that work with logical AST
16100nodes to find the particular text that resulted in those nodes, for example
16101for automated refactoring or highlighting.")
16102 (license license:asl2.0)))
16103
16104(define-public python-littleutils
16105 (package
16106 (name "python-littleutils")
16107 (version "0.2.4")
16108 (source
16109 (origin
16110 (method url-fetch)
16111 (uri (pypi-uri "littleutils" version))
16112 (sha256
16113 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16114 (build-system pyproject-build-system)
16115 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16116 (native-inputs
16117 (list python-setuptools
16118 python-setuptools-scm
16119 python-wheel))
16120 (home-page "https://github.com/alexmojaki/littleutils")
16121 (synopsis "Python utility function collection")
16122 (description "@code{littleutils} is a small collection of Python utility
16123functions, useful in the context of writing unit tests among other uses.")
16124 (license license:expat)))
16125
16126(define-public python-ipython
16127 (package
16128 (name "python-ipython")
16129 (version "9.8.0")
16130 (source
16131 (origin
16132 (method git-fetch)
16133 (uri (git-reference
16134 (url "https://github.com/ipython/ipython")
16135 (commit version)))
16136 (file-name (git-file-name name version))
16137 (sha256
16138 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16139 (build-system pyproject-build-system)
16140 (arguments
16141 (list
16142 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16143 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16144 #:test-backend #~'custom
16145 ;; XXX: It's a workaround to fix the error with module import
16146 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16147 ;; <https://codeberg.org/guix/guix/issues/2108>.
16148 #:test-flags
16149 #~(list "-m" "pytest" "-vv"
16150 "-k" (string-join
16151 ;; These need git.
16152 (list "not test_json_getsysinfo"
16153 "IPython.utils.sysinfo.sys_info"
16154 ;; Failed: DID NOT RAISE
16155 "test_timeit_raise_on_interrupt"
16156 "test_script_raise_on_interrupt"
16157 "test_time_raise_on_interrupt")
16158 " and not "))
16159 #:phases
16160 #~(modify-phases %standard-phases
16161 (add-before 'check 'pre-check
16162 (lambda _
16163 (setenv "HOME" "/tmp"))))))
16164 (propagated-inputs
16165 (list python-decorator
16166 python-ipython-pygments-lexers
16167 python-jedi
16168 python-matplotlib-inline
16169 python-pexpect
16170 python-prompt-toolkit
16171 python-pygments
16172 python-stack-data
16173 python-traitlets
16174 python-typing-extensions))
16175 (native-inputs
16176 (list python-pytest
16177 python-pytest-asyncio
16178 python-setuptools
16179 python-testpath
16180 ;; [extra]
16181 ;; python-curio ;deprecated
16182 ;; python-ipykernel ;cycles
16183 ;; python-jupyter-ai ;not packaged
16184 python-matplotlib
16185 ;; python-nbclient ;cycles
16186 python-nbformat
16187 python-numpy
16188 python-pandas
16189 python-trio))
16190 (home-page "https://ipython.org")
16191 (synopsis "IPython is a tool for interactive computing in Python")
16192 (description
16193 "IPython provides a rich architecture for interactive computing with:
16194Powerful interactive shells, a browser-based notebook, support for interactive
16195data visualization, embeddable interpreters and tools for parallel
16196computing.")
16197 (properties '((cpe-name . "ipython")))
16198 (license license:bsd-3)))
16199
16200(define-public python-ipython-documentation
16201 (package
16202 (inherit python-ipython)
16203 (name "python-ipython-documentation")
16204 (version (package-version python-ipython))
16205 (arguments
16206 (list
16207 #:phases
16208 #~(modify-phases %standard-phases
16209 (add-after 'unpack 'set-pythonpath
16210 (lambda _
16211 ;; Ensure this fixed (via the
16212 ;; "python-ipython-documentation-chars.patch" patch) copy of
16213 ;; IPython gets used.
16214 (setenv "PYTHONPATH" (string-append (getcwd)))))
16215 (delete 'build)
16216 (delete 'check)
16217 (replace 'install
16218 (lambda* (#:key outputs #:allow-other-keys)
16219 (let* ((data (string-append #$output "/share"))
16220 (doc (string-append data "/doc/" #$name "-" #$version))
16221 (html (string-append doc "/html"))
16222 (info (string-append data "/info")))
16223 (invoke "make" "-C" "docs" "info" "html"
16224 (string-append "SPHINXOPTS=-j"
16225 (number->string (parallel-job-count))))
16226 (install-file "COPYING.rst" doc)
16227 (copy-recursively "examples" (string-append doc "/examples"))
16228 ;; Install HTML documentation.
16229 (copy-recursively "docs/build/html" html)
16230 ;; Likewise for the info manual.
16231 (install-file "docs/build/texinfo/ipython.info" info)
16232 (symlink (string-append html "/_images")
16233 (string-append info "/ipython-figures"))))))))
16234 (native-inputs
16235 (list graphviz
16236 python-docrepr
16237 python-ipykernel
16238 python-sphinx
16239 python-sphinx-rtd-theme
16240 python-sphinx-toml
16241 texinfo))))
16242
16243;; A bare minimal package, mainly to use in tests and reduce closure
16244;; size. Tests are left out in the main package to slim down native-inputs.
16245(define-public python-ipython-minimal
16246 (package/inherit python-ipython
16247 (name "python-ipython-minimal")
16248 (arguments
16249 (list #:tests? #f))
16250 (native-inputs
16251 (list python-setuptools))))
16252
16253(define-public python-ipython-pygments-lexers
16254 (package
16255 (name "python-ipython-pygments-lexers")
16256 (version "1.1.1")
16257 (source
16258 (origin
16259 (method git-fetch)
16260 (uri (git-reference
16261 (url "https://github.com/ipython/ipython-pygments-lexers/")
16262 (commit version)))
16263 (file-name (git-file-name name version))
16264 (sha256
16265 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16266 (build-system pyproject-build-system)
16267 (propagated-inputs (list python-pygments))
16268 (native-inputs (list python-flit-core python-pytest))
16269 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16270 (synopsis "Plugin for IPython code sessions")
16271 (description
16272 "This package defines a variety of Pygments lexers for highlighting IPython
16273code.")
16274 (license license:bsd-3)))
16275
16276(define-public python-pydbus
16277 (package
16278 (name "python-pydbus")
16279 (version "0.6.0")
16280 (source
16281 (origin
16282 (method url-fetch)
16283 (uri (pypi-uri "pydbus" version))
16284 (sha256
16285 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16286 (build-system pyproject-build-system)
16287 (arguments
16288 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16289 #:phases
16290 #~(modify-phases %standard-phases
16291 (add-after 'unpack 'fix-comparability-with-pygobject
16292 (lambda _
16293 (substitute* "pydbus/_inspect3.py"
16294 (("getargspec")
16295 "getfullargspec")))))))
16296 (native-inputs
16297 (list python-setuptools
16298 python-wheel))
16299 (propagated-inputs
16300 (list python-pygobject))
16301 (home-page "https://github.com/LEW21/pydbus")
16302 (synopsis "Pythonic D-Bus library")
16303 (description
16304 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16305Pydbus can be used to access remote objects and also for object publication.
16306It is based on PyGI, the Python GObject Introspection bindings, which is the
16307recommended way to use GLib from Python.")
16308 (license license:lgpl2.1+)))
16309
16310(define-public python-dbus-1.2
16311 (package
16312 (name "python-dbus")
16313 (version "1.2.18")
16314 (source
16315 (origin
16316 (method url-fetch)
16317 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16318 "dbus-python-" version ".tar.gz"))
16319 (sha256
16320 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16321 (build-system gnu-build-system)
16322 (native-inputs
16323 (list pkg-config
16324 python-setuptools))
16325 (inputs
16326 `(("python" ,python-wrapper)
16327 ("dbus-glib" ,dbus-glib)))
16328 (synopsis "Python bindings for D-bus")
16329 (description "python-dbus provides bindings for libdbus, the reference
16330implementation of D-Bus.")
16331 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16332 (license license:expat)))
16333
16334(define-public python-dasbus
16335 (package
16336 (name "python-dasbus")
16337 (version "1.7")
16338 (source
16339 (origin
16340 (method git-fetch)
16341 (uri (git-reference
16342 (url "https://github.com/dasbus-project/dasbus")
16343 (commit (string-append "v" version))))
16344 (file-name (git-file-name name version))
16345 (sha256
16346 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16347 (build-system pyproject-build-system)
16348 (arguments
16349 (list
16350 #:phases
16351 #~(modify-phases %standard-phases
16352 (replace 'check
16353 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16354 (when tests?
16355 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16356 (native-inputs
16357 (list dbus
16358 python-hatchling
16359 python-pytest
16360 python-setuptools))
16361 (propagated-inputs
16362 (list python-pygobject))
16363 (home-page "https://dasbus.readthedocs.io/")
16364 (synopsis "DBus library in Python")
16365 (description
16366 "This DBus library is written in Python, based on GLib and inspired by
16367@code{pydbus}.")
16368 (license license:lgpl2.1+)))
16369
16370(define-public python-notify2
16371 (package
16372 (name "python-notify2")
16373 (version "0.3.1")
16374 (source
16375 (origin
16376 (method url-fetch)
16377 (uri (pypi-uri "notify2" version))
16378 (sha256
16379 (base32
16380 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16381 (build-system pyproject-build-system)
16382 (arguments (list #:tests? #f)) ; tests depend on system state
16383 (native-inputs (list python-setuptools))
16384 (propagated-inputs (list python-dbus))
16385 (home-page "https://bitbucket.org/takluyver/pynotify2")
16386 (synopsis "Python interface to D-Bus notifications")
16387 (description
16388 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16389It is a reimplementation of pynotify in pure Python, and an alternative to
16390the GObject Introspection bindings to libnotify for non-GTK applications.")
16391 (license (list license:bsd-2
16392 license:lgpl2.1+))))
16393
16394;; beautifulsoup4 has a totally different namespace than 3.x,
16395;; and pypi seems to put it under its own name, so I guess we should too
16396(define-public python-beautifulsoup4
16397 (package
16398 (name "python-beautifulsoup4")
16399 (version "4.14.3")
16400 (source
16401 (origin
16402 (method url-fetch)
16403 (uri (pypi-uri "beautifulsoup4" version))
16404 (sha256
16405 (base32
16406 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16407 (build-system pyproject-build-system)
16408 (native-inputs
16409 (list python-hatchling
16410 python-pytest))
16411 (propagated-inputs
16412 (list python-soupsieve
16413 python-typing-extensions
16414 ;; [optional]
16415 python-cchardet
16416 python-chardet
16417 python-charset-normalizer
16418 python-html5lib
16419 python-lxml))
16420 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16421 (synopsis "Python screen-scraping library")
16422 (description
16423 "Beautiful Soup is a Python library designed for rapidly setting up
16424screen-scraping projects. It offers Pythonic idioms for navigating,
16425searching, and modifying a parse tree, providing a toolkit for
16426dissecting a document and extracting what you need. It automatically
16427converts incoming documents to Unicode and outgoing documents to UTF-8.")
16428 (license license:expat)))
16429
16430(define-public python-beautifulsoup4-bootstrap
16431 (hidden-package
16432 (package/inherit python-beautifulsoup4
16433 (arguments
16434 (list #:tests? #f))
16435 (native-inputs
16436 (list python-hatchling))
16437 (propagated-inputs '()))))
16438
16439
16440(define-public python-netifaces
16441 (package
16442 (name "python-netifaces")
16443 (version "0.11.0")
16444 (source
16445 (origin
16446 (method url-fetch)
16447 (uri (pypi-uri "netifaces" version))
16448 (sha256
16449 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16450 (build-system pyproject-build-system)
16451 (arguments
16452 (list
16453 #:test-backend #~'custom
16454 #:test-flags #~(list "test.py")))
16455 (native-inputs (list python-setuptools))
16456 (home-page "https://github.com/al45tair/netifaces")
16457 (synopsis "Python module for portable network interface information")
16458 (description
16459 "Netifaces is a Python module providing information on network
16460interfaces in an easy and portable manner.")
16461 (license license:expat)))
16462
16463(define-public python-networkx
16464 (package
16465 (name "python-networkx")
16466 (version "3.4.2")
16467 (source
16468 (origin
16469 (method url-fetch)
16470 (uri (pypi-uri "networkx" version))
16471 (sha256
16472 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16473 (build-system pyproject-build-system)
16474 (arguments
16475 (list
16476 #:test-flags
16477 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16478 (native-inputs
16479 (list python-pytest
16480 python-pytest-xdist
16481 python-setuptools
16482 python-wheel))
16483 (propagated-inputs
16484 (list python-decorator))
16485 (home-page "https://networkx.github.io/")
16486 (synopsis "Python module for creating and manipulating graphs and networks")
16487 (description
16488 "NetworkX is a Python package for the creation, manipulation, and study
16489of the structure, dynamics, and functions of complex networks.")
16490 (license license:bsd-3)))
16491
16492(define-public python-datrie
16493 (package
16494 (name "python-datrie")
16495 (version "0.8.3")
16496 (source
16497 (origin
16498 (method git-fetch)
16499 (uri (git-reference
16500 (url "https://github.com/kmike/datrie")
16501 (commit version)))
16502 (file-name (git-file-name name version))
16503 (sha256
16504 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16505 (build-system pyproject-build-system)
16506 (arguments
16507 (list
16508 #:phases
16509 #~(modify-phases %standard-phases
16510 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16511 (lambda* (#:key inputs #:allow-other-keys)
16512 (let* ((headers (search-input-directory inputs
16513 "include/datrie"))
16514 (base (dirname (dirname headers))))
16515 (symlink headers "libdatrie/datrie")
16516 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16517 (add-before 'build 'relax-gcc-14-strictness
16518 (lambda _
16519 (setenv "CFLAGS"
16520 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16521 (native-inputs
16522 (list python-cython python-hypothesis python-pytest python-setuptools))
16523 (inputs (list libdatrie))
16524 (home-page "https://github.com/kmike/datrie")
16525 (synopsis "Fast, efficiently stored trie for Python")
16526 (description
16527 "This package provides a fast, efficiently stored trie implementation for
16528Python.")
16529 (license license:lgpl2.1+)))
16530
16531(define-public python-amply
16532 (package
16533 (name "python-amply")
16534 (version "0.1.6")
16535 (source
16536 (origin
16537 (method url-fetch)
16538 (uri (pypi-uri "amply" version))
16539 (sha256
16540 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16541 (build-system pyproject-build-system)
16542 (native-inputs
16543 (list python-pytest
16544 python-setuptools
16545 python-setuptools-scm
16546 python-wheel))
16547 (propagated-inputs
16548 (list python-docutils
16549 python-pyparsing))
16550 (home-page "https://github.com/willu47/amply")
16551 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16552 (description
16553 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16554structures.")
16555 (license license:epl1.0)))
16556
16557(define-public python-pulp
16558 ;; When updating, check snakemake@N builds still fine, see:
16559 ;; <https://codeberg.org/guix/guix/issues/4782>.
16560 (package
16561 (name "python-pulp")
16562 (version "2.4")
16563 (source
16564 (origin
16565 (method url-fetch)
16566 (uri (pypi-uri "PuLP" version))
16567 (sha256
16568 (base32
16569 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
16570 (build-system pyproject-build-system)
16571 (arguments
16572 ;; TODO: They need a special setup, see:
16573 ;; <https://codeberg.org/guix/guix/pulls/4908>.
16574 (list #:tests? #f))
16575 (native-inputs
16576 (list python-setuptools))
16577 (propagated-inputs
16578 (list python-amply))
16579 (home-page "https://github.com/coin-or/pulp")
16580 (synopsis "Linear Programming modeler")
16581 (description
16582 "PuLP is a Linear Programming modeler written in Python. PuLP can
16583generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16584solve linear problems.")
16585 (license license:expat)))
16586
16587(define-public python-py-partiql-parser
16588 (package
16589 (name "python-py-partiql-parser")
16590 (version "0.6.3")
16591 (source
16592 (origin
16593 (method git-fetch)
16594 (uri (git-reference
16595 (url "https://github.com/getmoto/py-partiql-parser")
16596 (commit version)))
16597 (file-name (git-file-name name version))
16598 (sha256
16599 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16600 (build-system pyproject-build-system)
16601 (native-inputs
16602 (list python-hatchling
16603 python-pytest))
16604 (home-page "https://pypi.org/project/py-partiql-parser/")
16605 (synopsis "Pure Python PartiQL Parser")
16606 (description
16607 "This package provides a tokenizer/parser/executor for the PartiQL
16608language, in Python.")
16609 (license license:expat)))
16610
16611(define-public python-py-tes
16612 (package
16613 (name "python-py-tes")
16614 (version "0.4.2")
16615 (source
16616 (origin
16617 (method git-fetch)
16618 (uri (git-reference
16619 (url "https://github.com/ohsu-comp-bio/py-tes")
16620 (commit version)))
16621 (file-name (git-file-name name version))
16622 (sha256
16623 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16624 (build-system pyproject-build-system)
16625 (native-inputs
16626 (list python-pytest python-requests-mock python-setuptools))
16627 (propagated-inputs
16628 (list python-attrs python-dateutil python-future python-requests))
16629 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16630 (synopsis "Library for communicating with the GA4GH Task Execution API")
16631 (description "This package provides a library for communicating with the
16632GA4GH Task Execution API.")
16633 (license license:expat)))
16634
16635(define-public python-altgraph
16636 (package
16637 (name "python-altgraph")
16638 (version "0.17.4")
16639 (source
16640 (origin
16641 (method url-fetch)
16642 (uri (pypi-uri "altgraph" version))
16643 (sha256
16644 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16645 (build-system pyproject-build-system)
16646 (native-inputs (list python-pytest python-setuptools python-wheel))
16647 (home-page "https://altgraph.readthedocs.io")
16648 (synopsis "Python graph network package")
16649 (description
16650"This package provides tools for constructing graphs, BFS and DFS
16651traversals, topological sort, shortest paths, and more with graphviz
16652output.")
16653 (license license:expat)))
16654
16655(define-public python-pyqrcode
16656 (package
16657 (name "python-pyqrcode")
16658 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16659 (revision . "0")))
16660 (version (git-version "1.2.1"
16661 (assoc-ref properties 'revision)
16662 (assoc-ref properties 'commit)))
16663 (source
16664 (origin
16665 (method git-fetch)
16666 (uri (git-reference
16667 (url "https://github.com/mnooner256/pyqrcode")
16668 (commit (assoc-ref properties 'commit))))
16669 (file-name (git-file-name name version))
16670 (sha256
16671 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16672 (build-system pyproject-build-system)
16673 (arguments (list #:test-backend #~'nose))
16674 (native-inputs (list python-pynose python-pypng python-setuptools))
16675 (home-page "https://github.com/mnooner256/pyqrcode")
16676 (synopsis "QR code generator")
16677 (description
16678 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16679PNG and terminal output.")
16680 (license license:bsd-3)))
16681
16682(define-public python-seaborn
16683 (package
16684 (name "python-seaborn")
16685 (version "0.13.2")
16686 (source (origin
16687 (method url-fetch)
16688 (uri (pypi-uri "seaborn" version))
16689 (sha256
16690 (base32
16691 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
16692 (build-system pyproject-build-system)
16693 (arguments
16694 (list
16695 ;; tests: 2354 passed, 16 skipped, 6 xfailed, 224 warnings
16696 #:test-flags
16697 #~(list "--numprocesses" (number->string (parallel-job-count))
16698 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
16699 ;; KeyError: 'labelleft'
16700 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
16701 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
16702 ;; AttributeError: module 'numpy' has no attribute
16703 ;; 'VisibleDeprecationWarning'
16704 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
16705 (native-inputs
16706 (list python-flit-core
16707 python-pytest-8
16708 python-pytest-xdist))
16709 (propagated-inputs
16710 (list python-matplotlib
16711 python-numpy
16712 python-pandas
16713 python-scipy
16714 python-statsmodels))
16715 (home-page "https://seaborn.pydata.org/")
16716 (synopsis "Statistical data visualization")
16717 (description
16718 "Seaborn is a library for making attractive and informative statistical
16719graphics in Python. It is built on top of matplotlib and tightly integrated
16720with the PyData stack, including support for numpy and pandas data structures
16721and statistical routines from scipy and statsmodels.")
16722 (license license:bsd-3)))
16723
16724(define-public python-session-info
16725 (package
16726 (name "python-session-info")
16727 (version "1.0.0")
16728 (source
16729 (origin
16730 (method git-fetch)
16731 (uri (git-reference
16732 (url "https://gitlab.com/joelostblom/session_info")
16733 (commit version)))
16734 (file-name (git-file-name name version))
16735 (sha256
16736 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
16737 (build-system pyproject-build-system)
16738 (arguments (list #:tests? #f)) ; No tests.
16739 (native-inputs (list python-setuptools))
16740 (propagated-inputs (list python-stdlib-list))
16741 (home-page "https://gitlab.com/joelostblom/session_info")
16742 (synopsis "Output version information for modules currently loaded")
16743 (description
16744 "This package outputs version information for modules loaded in the current
16745session, Python, and the OS.")
16746 (license license:bsd-3)))
16747
16748(define-public python-mpmath
16749 (package
16750 (name "python-mpmath")
16751 (version "1.3.0")
16752 (source
16753 (origin
16754 (method git-fetch)
16755 (uri (git-reference
16756 (url "https://github.com/fredrik-johansson/mpmath")
16757 (commit version)))
16758 (file-name (git-file-name name version))
16759 (sha256
16760 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
16761 (build-system pyproject-build-system)
16762 (native-inputs
16763 (list python-pytest
16764 python-setuptools
16765 python-setuptools-scm))
16766 (home-page "https://mpmath.org")
16767 (synopsis "Arbitrary-precision floating-point arithmetic in python")
16768 (description
16769 "@code{mpmath} can be used as an arbitrary-precision substitute for
16770Python's float/complex types and math/cmath modules, but also does much
16771more advanced mathematics.")
16772 (license license:bsd-3)))
16773
16774(define-public python-bigfloat
16775 (package
16776 (name "python-bigfloat")
16777 (version "0.4.0")
16778 (source
16779 (origin
16780 (method url-fetch)
16781 (uri (pypi-uri "bigfloat" version))
16782 (sha256
16783 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
16784 (snippet '(delete-file "mpfr.c"))))
16785 (build-system pyproject-build-system)
16786 (arguments
16787 (list
16788 #:test-flags
16789 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
16790 ;; but I don't know what to do about it.
16791 '(list "-k" "not test_hash")
16792 #:phases
16793 '(modify-phases %standard-phases
16794 (add-before 'build 'cythonize
16795 (lambda _ (invoke "cython" "mpfr.pyx"))))))
16796 (inputs (list mpfr))
16797 (native-inputs
16798 (list python-cython python-pytest python-setuptools python-wheel))
16799 (propagated-inputs
16800 (list python-six))
16801 (home-page "https://github.com/mdickinson/bigfloat")
16802 (synopsis "Arbitrary precision floating-point arithmetic for Python")
16803 (description
16804 "This package provides a Python interface to the MPFR library for
16805multiprecision arithmetic.")
16806 (license license:lgpl3+)))
16807
16808(define-public python-plac
16809 (package
16810 (name "python-plac")
16811 (version "1.4.3")
16812 (source
16813 (origin
16814 (method git-fetch)
16815 (uri (git-reference
16816 (url "https://github.com/ialbert/plac")
16817 (commit (string-append "v" version))))
16818 (file-name (git-file-name name version))
16819 (sha256
16820 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
16821 (build-system pyproject-build-system)
16822 (arguments
16823 (list
16824 #:phases
16825 #~(modify-phases %standard-phases
16826 (add-after 'unpack 'fix-tkinter
16827 (lambda _
16828 (substitute* "plac_tk.py"
16829 (("from Tkinter import Tk")
16830 "from tkinter import Tk")
16831 (("from ScrolledText import ScrolledText")
16832 "from tkinter.scrolledtext import ScrolledText")))))))
16833 (native-inputs
16834 (list (list python "tk") python-pytest python-setuptools))
16835 (home-page "https://github.com/ialbert/plac")
16836 (synopsis "Command line arguments parser")
16837 (description
16838 "This package can generate command line parameters from function
16839signatures.")
16840 (license license:bsd-3)))
16841
16842(define-public python-q
16843 (package
16844 (name "python-q")
16845 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
16846 (revision . "0")))
16847 (version (git-version "2.7"
16848 (assoc-ref properties 'revision)
16849 (assoc-ref properties 'commit)))
16850 (source
16851 (origin
16852 (method git-fetch)
16853 (uri (git-reference
16854 (url "https://github.com/zestyping/q")
16855 (commit (assoc-ref properties 'commit))))
16856 (file-name (git-file-name name version))
16857 (sha256
16858 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
16859 (build-system pyproject-build-system)
16860 (arguments
16861 (list
16862 ;; Deduced from the makefile.
16863 #:test-backend #~'custom
16864 #:test-flags #~(list "test/test_basic.py")
16865 #:phases
16866 #~(modify-phases %standard-phases
16867 (add-before 'check 'configure-tests
16868 (lambda* (#:key tests? #:allow-other-keys)
16869 (when tests?
16870 (setenv "TMPDIR" "/tmp")))))))
16871 (native-inputs (list python-setuptools))
16872 (home-page "https://github.com/zestyping/q")
16873 (synopsis "Quick-and-dirty debugging output for tired programmers")
16874 (description
16875 "q is a Python module for \"print\" style of debugging Python code. It
16876provides convenient short API for print out of values, tracebacks, and
16877falling into the Python interpreter.")
16878 (license license:asl2.0)))
16879
16880(define-public python-qnorm
16881 (package
16882 (name "python-qnorm")
16883 (version "0.9.0")
16884 (source
16885 (origin
16886 (method git-fetch)
16887 (uri (git-reference
16888 (url "https://github.com/Maarten-vd-Sande/qnorm")
16889 (commit (string-append "v" version))))
16890 (file-name (git-file-name name version))
16891 (sha256
16892 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
16893 (build-system pyproject-build-system)
16894 (propagated-inputs
16895 (list python-numba python-numpy python-pandas
16896 ;; XXX: pandas optional dependencies.
16897 python-tables python-pyarrow python-fastparquet))
16898 (native-inputs (list python-setuptools))
16899 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
16900 (synopsis "Quantile normalization")
16901 (description
16902 "This tool implements quantile normalization. It properly resolves rank
16903ties, which is important when ties happen frequently, such as when working
16904with discrete numbers (integers) in count tables. This implementation should
16905be relatively fast, and can use multiple cores to sort the columns and
16906tie-resolvement is accelerated by numba.")
16907 (license license:expat)))
16908
16909(define-public python-quantlaw
16910 (package
16911 (name "python-quantlaw")
16912 (version "0.0.7")
16913 (source
16914 (origin
16915 (method git-fetch)
16916 (uri (git-reference
16917 (url "https://github.com/Quantlaw/quantlaw")
16918 (commit (string-append "v" version))))
16919 (file-name (git-file-name name version))
16920 (sha256
16921 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
16922 (build-system pyproject-build-system)
16923 (arguments
16924 (list
16925 #:test-flags
16926 #~(list "-k"
16927 ;; test expects network access
16928 "not test_load_statue_names")))
16929 (native-inputs (list python-pytest python-setuptools))
16930 (propagated-inputs (list python-beautifulsoup4 python-networkx
16931 python-pandas python-regex python-requests))
16932 (home-page "https://quantlaw.readthedocs.io/")
16933 (synopsis "Coding utilities for quantitative legal studies")
16934 (description
16935 "This package provides coding utilities for quantitative legal studies.")
16936 (license license:bsd-3)))
16937
16938(define-public python-singledispatch
16939 (package
16940 (name "python-singledispatch")
16941 (version "4.0.0")
16942 (source
16943 (origin
16944 (method url-fetch)
16945 (uri (pypi-uri "singledispatch" version))
16946 (sha256
16947 (base32
16948 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16949 (build-system pyproject-build-system)
16950 (native-inputs
16951 (list python-pytest
16952 python-setuptools
16953 python-six ; required for conversion, not at run-time
16954 python-wheel))
16955 (home-page
16956 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16957 (synopsis "Backport of singledispatch feature from Python 3.4")
16958 (description
16959 "This library brings functools.singledispatch from Python 3.4 to Python
169602.6-3.3.")
16961 (license license:expat)))
16962
16963(define-public python-pyzmq
16964 (package
16965 (name "python-pyzmq")
16966 (version "27.1.0")
16967 (source
16968 (origin
16969 (method git-fetch)
16970 (uri (git-reference
16971 (url "https://github.com/zeromq/pyzmq")
16972 (commit (string-append "v" version))))
16973 (file-name (git-file-name name version))
16974 (sha256
16975 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
16976 (build-system pyproject-build-system)
16977 (arguments
16978 (list
16979 #:test-flags
16980 '(list "-m" "not flaky")
16981 #:phases
16982 #~(modify-phases %standard-phases
16983 (add-before 'build 'configure
16984 (lambda _
16985 ;; Our zeromq package is built with '--enable-drafts'; also
16986 ;; enable draft support for pyzmq so the draft test passes.
16987 (setenv "ZMQ_DRAFT_API" "1")
16988 ;; Make sure to prevent building bundled libzmq.
16989 (setenv "PYZMQ_NO_BUNDLE" "1")))
16990 (add-before 'check 'delete-source
16991 ;; To prevent loading it and skip build extensions one more times.
16992 (lambda _
16993 (delete-file-recursively "zmq"))))))
16994 (native-inputs
16995 (list cmake-minimal
16996 ;; python-cffi ; for PyPy
16997 python-cython
16998 python-packaging
16999 python-pytest
17000 python-pytest-asyncio
17001 python-scikit-build-core
17002 python-tornado))
17003 (inputs
17004 (list libsodium
17005 zeromq))
17006 (home-page "https://github.com/zeromq/pyzmq")
17007 (synopsis "Python bindings for 0MQ")
17008 (description
17009 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17010 (license license:bsd-4)))
17011
17012(define-public python-immutabledict
17013 (package
17014 (name "python-immutabledict")
17015 (version "4.2.0")
17016 (source
17017 (origin
17018 (method url-fetch)
17019 (uri (pypi-uri "immutabledict" version))
17020 (sha256
17021 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17022 (build-system pyproject-build-system)
17023 (native-inputs
17024 (list python-poetry-core python-pytest))
17025 (home-page "https://github.com/corenting/immutabledict")
17026 (synopsis "Immutable wrapper around dictionaries")
17027 (description
17028 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17029It implements the complete mapping interface and can be used as a drop-in
17030replacement for dictionaries where immutability is desired.")
17031 (license license:expat)))
17032
17033(define-public python-emoji
17034 (package
17035 (name "python-emoji")
17036 (version "2.12.1")
17037 (source
17038 (origin
17039 (method url-fetch)
17040 (uri (pypi-uri "emoji" version))
17041 (sha256
17042 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17043 (build-system pyproject-build-system)
17044 (propagated-inputs (list python-typing-extensions))
17045 (native-inputs
17046 (list python-pytest
17047 python-setuptools
17048 python-wheel))
17049 (home-page "https://github.com/carpedm20/emoji/")
17050 (synopsis "Emoji terminal output for Python")
17051 (description
17052 "This package provides Emoji terminal output for Python. The
17053entire set of Emoji codes as defined by the Unicode Consortium is supported in
17054addition to a bunch of aliases.")
17055 (license license:bsd-3)))
17056
17057;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17058;; latest version. The latest gh-md-to-html does not build successfully from
17059;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17060;; version 1.21.2 from failing.
17061;; https://issues.guix.gnu.org/72102
17062;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17063(define-public python-emoji-for-gh-md-to-html
17064 (package
17065 (inherit python-emoji)
17066 (version "1.6.1")
17067 (source
17068 (origin
17069 (method url-fetch)
17070 (uri (pypi-uri "emoji" version))
17071 (sha256
17072 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17073
17074(define-public python-sarge
17075 (package
17076 (name "python-sarge")
17077 (version "0.1.7.post1") ;post release only to correct errors in metadata
17078 (source
17079 (origin
17080 (method git-fetch)
17081 (uri (git-reference
17082 (url "https://github.com/vsajip/sarge")
17083 (commit version)))
17084 (file-name (git-file-name name version))
17085 (sha256
17086 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17087 (build-system pyproject-build-system)
17088 (native-inputs (list python-pytest python-setuptools))
17089 (home-page "https://docs.red-dove.com/sarge/")
17090 (synopsis "Subprocess wrapper with command pipeline functionality")
17091 (description "@code{sarge} is a wrapper for subprocess which provides
17092command pipeline functionality.")
17093 (license license:bsd-3)))
17094
17095(define-public python-sentry-sdk
17096 ;; TODO: Move to (gnu packages python-web).
17097 (package
17098 (name "python-sentry-sdk")
17099 (version "2.59.0")
17100 (source
17101 (origin
17102 (method git-fetch)
17103 (uri (git-reference
17104 (url "https://github.com/getsentry/sentry-python")
17105 (commit version)))
17106 (file-name (git-file-name name version))
17107 (sha256
17108 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17109 (build-system pyproject-build-system)
17110 (arguments
17111 (list
17112 ;; tests: 2119 passed, 128 skipped, 224 warnings
17113 #:test-flags
17114 #~(list "--durations=10"
17115 "--numprocesses" (number->string (parallel-job-count))
17116 ;; The whole test suite is quite shaky, may fail unpredictably
17117 ;; and depends on many additional inputs to enable all
17118 ;; integration tests.
17119 "-k" (string-join
17120 (list "not test_aggregates"
17121 "test_aggregates_deprecated"
17122 (string-append "test_aggregates_explicitly_disabled"
17123 "_session_tracking_request_mode")
17124 (string-append "test_aggregates_explicitly_disabled"
17125 "_session_tracking_request"
17126 "_mode_deprecated")
17127 "test_auto_session_tracking_with_aggregates[False]"
17128 "test_auto_session_tracking_with_aggregates[True]"
17129 "test_basic"
17130 "test_default_attributes"
17131 "test_default_release"
17132 (string-append "test_ensure_integration_enabled"
17133 "_no_original_function_enabled")
17134 "test_logger_with_all_attributes"
17135 "test_merging"
17136 (string-append "test_session_mode_defaults_to"
17137 "_request_mode_in_wsgi_handler"))
17138 " and not "))
17139 #:phases
17140 #~(modify-phases %standard-phases
17141 (add-after 'unpack 'fix-pytest-config
17142 (lambda _
17143 ;; Tests run in debug mode which generats a lot of noise.
17144 (delete-file "tox.ini")
17145 (substitute* "pyproject.toml"
17146 (("addopts =.*") "")))))))
17147 (native-inputs
17148 (list nss-certs-for-test
17149 python-brotli
17150 python-jsonschema
17151 python-mock
17152 python-pysocks
17153 python-pytest
17154 python-pytest-aiohttp
17155 python-pytest-asyncio
17156 python-pytest-localserver
17157 python-pytest-timeout
17158 python-pytest-xdist
17159 python-responses
17160 python-setuptools
17161 python-socksio))
17162 (propagated-inputs
17163 (list python-certifi
17164 python-urllib3
17165 ;; [optional]
17166 ;; python-unleashclient
17167 python-aiohttp
17168 ;; python-anthropic
17169 ;; python-apache-beam
17170 ;; python-arq
17171 python-asttokens
17172 ;; python-asyncpg
17173 ;; python-blinker
17174 ;; python-bottle
17175 ;; python-celery
17176 ;; python-celery-redbeat
17177 ;; python-chalice
17178 ;; python-clickhouse-driver
17179 ;; python-django
17180 python-executing
17181 ;; python-falcon
17182 ;; python-fastapi
17183 ;; python-flask
17184 ;; python-google-genai
17185 ;; python-grpcio
17186 python-httpcore
17187 ;; python-httpx
17188 ;; python-huey
17189 ;; python-huggingface-hub
17190 ;; python-langchain
17191 ;; python-langgraph
17192 ;; python-launchdarkly-server-sdk
17193 ;; python-litellm
17194 ;; python-litestar
17195 ;; python-loguru
17196 ;; python-markupsafe
17197 ;; python-mcp
17198 ;; python-openai
17199 ;; python-openfeature-sdk
17200 ;; python-opentelemetry-distro
17201 ;; python-protobuf
17202 ;; python-pure-eval
17203 ;; python-pydantic-ai
17204 ;; python-pymongo
17205 ;; python-pyspark
17206 ;; python-quart
17207 ;; python-rq
17208 ;; python-sanic
17209 ;; python-sqlalchemy
17210 ;; python-starlette
17211 ;; python-starlite
17212 ;; python-statsig
17213 ;; python-tiktoken
17214 #;python-tornado))
17215 (home-page "https://github.com/getsentry/sentry-python")
17216 (synopsis "Python SDK for Sentry")
17217 (description "This package provides a Python SDK for the Sentry
17218application monitoring and error tracking software.")
17219 (license license:bsd-2)))
17220
17221;; A bare minimal package, mainly to use in tests and reduce closure
17222;; size. Tests are left out in the main package to slim down native-inputs.
17223(define-public python-sentry-sdk-minimal
17224 (package/inherit python-sentry-sdk
17225 (name "python-sentry-sdk-minimal")
17226 (arguments
17227 (list #:tests? #f))
17228 (native-inputs
17229 (list python-setuptools))
17230 (propagated-inputs
17231 (list python-certifi
17232 python-urllib3))))
17233
17234(define-public python-pep440
17235 (package
17236 (name "python-pep440")
17237 (version "0.1.2")
17238 (source
17239 (origin
17240 (method url-fetch)
17241 (uri (pypi-uri "pep440" version))
17242 (sha256
17243 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17244 (build-system pyproject-build-system)
17245 (arguments
17246 ;; This checks for "pep440" in the output, but we actually print
17247 ;; ".pep440-real" due to wrapping.
17248 (list #:test-flags '(list "-k" "not test_cli_help")))
17249 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17250 python-pytest-console-scripts python-pytest-cov))
17251 (native-inputs (list python-flit-core))
17252 (home-page "https://pypi.org/project/pep440/")
17253 (synopsis "Utils to check whether versions number match PEP 440")
17254 (description
17255 "This package provides a simple package with utils to check whether
17256versions number match PEP 440.")
17257 (license license:expat)))
17258
17259(define-public python-pyproject-metadata
17260 (package
17261 (name "python-pyproject-metadata")
17262 (version "0.10.0")
17263 (source
17264 (origin
17265 (method git-fetch)
17266 (uri (git-reference
17267 (url "https://github.com/FFY00/python-pyproject-metadata")
17268 (commit version)))
17269 (file-name (git-file-name name version))
17270 (sha256
17271 (base32 "1vz2dx46ag42bqp81frd92pfnryfdry6112g6z5inrywqs8vymkw"))))
17272 (build-system pyproject-build-system)
17273 (arguments
17274 (list
17275 #:test-flags
17276 ;; Two tests fail because the error message slightly changed, so the
17277 ;; tests' regular expressions no longer match.
17278 '(list "--ignore=tests/test_standard_metadata.py")))
17279 (propagated-inputs (list python-packaging))
17280 (native-inputs
17281 (list python-flit-core python-pytest python-tomli))
17282 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17283 (synopsis "Dataclass for PEP 621 metadata")
17284 (description "This project does not implement the parsing of
17285@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17286data structure representing PEP 621 metadata (already parsed), it will
17287validate this input and generate a PEP 643-compliant metadata
17288file (e.g. @file{PKG-INFO}).")
17289 (license license:expat)))
17290
17291(define-public python-meson
17292 (package
17293 (name "python-meson")
17294 (version "0.19.0")
17295 (source
17296 (origin
17297 (method git-fetch)
17298 (uri (git-reference
17299 (url "https://github.com/mesonbuild/meson-python")
17300 (commit version)))
17301 (file-name (git-file-name name version))
17302 (sha256
17303 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17304 (build-system pyproject-build-system)
17305 ;; tests: 124 passed, 16 skipped
17306 (native-inputs
17307 (list git-minimal/pinned
17308 patchelf
17309 python-pytest
17310 python-pytest-mock))
17311 (propagated-inputs
17312 (list meson
17313 ninja
17314 python-cython
17315 python-packaging
17316 python-pyproject-metadata))
17317 (home-page "https://github.com/mesonbuild/meson-python")
17318 (synopsis "Meson Python build backend (PEP 517)")
17319 (description "This package provides a PEP 517 build backend that makes
17320use of the Meson build system.")
17321 (license license:expat)))
17322
17323;; XXX: Deprecated on <2026-01-26>.
17324(define-deprecated/public-alias python-meson-python python-meson)
17325;;; Deprecated on 2026-03-02.
17326(define-deprecated-package meson-python python-meson)
17327
17328(define-public python-mfusepy
17329 (package
17330 (name "python-mfusepy")
17331 (version "3.1.1")
17332 (source
17333 (origin
17334 (method git-fetch)
17335 (uri (git-reference
17336 (url "https://github.com/mxmlnkn/mfusepy")
17337 (commit (string-append "v" version))))
17338 (file-name (git-file-name name version))
17339 (sha256
17340 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17341 (build-system pyproject-build-system)
17342 (native-inputs (list python-setuptools))
17343 (inputs (list fuse))
17344 (arguments
17345 (list
17346 #:tests? #f ; Tests require fuse kernel module
17347 #:phases
17348 #~(modify-phases %standard-phases
17349 (add-after 'unpack 'embed-libfuse
17350 (lambda* (#:key inputs #:allow-other-keys)
17351 (substitute* "mfusepy.py"
17352 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17353 (format #f "~a\"~a\"\n"
17354 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17355 (home-page "https://github.com/mxmlnkn/mfusepy")
17356 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17357 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17358 (license license:isc)))
17359
17360(define-public python-mccabe
17361 (package
17362 (name "python-mccabe")
17363 (version "0.7.0")
17364 (source
17365 (origin
17366 (method url-fetch)
17367 (uri (pypi-uri "mccabe" version))
17368 (sha256
17369 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
17370 (build-system pyproject-build-system)
17371 (arguments
17372 (list
17373 ;; Test fixtures are not released yet, see
17374 ;; <https://github.com/PyCQA/mccabe/issues/93>
17375 #:tests? #f))
17376 (native-inputs
17377 (list python-toml
17378 python-setuptools
17379 python-wheel))
17380 (home-page "https://github.com/PyCQA/mccabe")
17381 (synopsis "McCabe checker, plugin for flake8")
17382 (description
17383 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17384complexity of Python source code.")
17385 (license license:expat)))
17386
17387(define-public python-autoflake8
17388 (package
17389 (name "python-autoflake8")
17390 (version "0.4.0")
17391 (source (origin
17392 (method git-fetch) ;for tests
17393 (uri (git-reference
17394 (url "https://github.com/fsouza/autoflake8")
17395 (commit (string-append "v" version))))
17396 (file-name (git-file-name name version))
17397 (sha256
17398 (base32
17399 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17400 (build-system pyproject-build-system)
17401 (native-inputs
17402 (list python-aiofiles
17403 python-poetry-core
17404 python-pytest
17405 python-pytest-xdist))
17406 (propagated-inputs (list python-pyflakes))
17407 (home-page "https://github.com/fsouza/autoflake8")
17408 (synopsis "Automatically fix issues reported by flake8")
17409 (description "Tool to automatically fix some issues reported by
17410@command{flake8}.")
17411 (license license:expat)))
17412
17413(define-public python-flake8
17414 (package
17415 (name "python-flake8")
17416 (version "7.1.1")
17417 (source
17418 (origin
17419 (method git-fetch) ; no tests data in PyPi package
17420 (uri (git-reference
17421 (url "https://github.com/pycqa/flake8")
17422 (commit version)))
17423 (file-name (git-file-name name version))
17424 (sha256
17425 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
17426 (build-system pyproject-build-system)
17427 (native-inputs
17428 (list python-pytest
17429 python-setuptools
17430 python-wheel))
17431 (propagated-inputs
17432 (list python-mccabe
17433 python-pycodestyle
17434 python-pyflakes))
17435 (home-page "https://flake8.pycqa.org/en/latest/")
17436 (synopsis "The modular source code checker: pep8, pyflakes and co")
17437 (description
17438 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17439 (license license:expat)))
17440
17441(define-public python-flake8-blind-except
17442 (package
17443 (name "python-flake8-blind-except")
17444 (version "0.2.1")
17445 (source
17446 (origin
17447 (method git-fetch)
17448 (uri (git-reference
17449 (url "https://github.com/elijahandrews/flake8-blind-except")
17450 (commit (string-append "v" version))))
17451 (file-name (git-file-name name version))
17452 (sha256
17453 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17454 (build-system pyproject-build-system)
17455 (arguments (list #:tests? #f)) ;no tests
17456 (native-inputs (list python-setuptools))
17457 (propagated-inputs (list python-pycodestyle))
17458 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17459 (synopsis "Check for blind @code{except:} statements")
17460 (description
17461 "This package provides a flake8 extension that checks for blind
17462@code{except:} statements.")
17463 (license license:expat)))
17464
17465(define-public python-flake8-bugbear
17466 (package
17467 (name "python-flake8-bugbear")
17468 (version "24.10.31")
17469 (source
17470 (origin
17471 (method url-fetch)
17472 (uri (pypi-uri "flake8_bugbear" version))
17473 (sha256
17474 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17475 (build-system pyproject-build-system)
17476 (native-inputs
17477 (list python-hypothesmith
17478 python-pytest
17479 python-setuptools
17480 python-wheel))
17481 (propagated-inputs
17482 (list python-attrs
17483 python-flake8))
17484 (home-page "https://github.com/PyCQA/flake8-bugbear")
17485 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17486 (description
17487 "This package contains a plugin for Flake8 finding likely bugs and design
17488problems in your program. It contains warnings that don't belong in pyflakes
17489and pycodestyle.")
17490 (license license:expat)))
17491
17492(define-public python-flake8-continuation
17493 (package
17494 (name "python-flake8-continuation")
17495 (version "1.0.5")
17496 (source
17497 (origin
17498 (method git-fetch)
17499 (uri (git-reference
17500 (url "https://github.com/planetlabs/flake8-continuation")
17501 (commit version)))
17502 (file-name (git-file-name name version))
17503 (sha256
17504 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17505 (build-system pyproject-build-system)
17506 (arguments
17507 (list
17508 #:phases
17509 #~(modify-phases %standard-phases
17510 (add-after 'unpack 'remove-python-six-dependency
17511 (lambda _
17512 (substitute* "flake8_continuation.py"
17513 (("import six|six\\.moves\\.")
17514 ""))
17515 (substitute* "setup.py"
17516 ((", \"six\"")
17517 "")))))))
17518 (native-inputs (list python-pytest python-setuptools))
17519 (propagated-inputs (list python-flake8 python-pycodestyle))
17520 (home-page "https://github.com/planetlabs/flake8-continuation")
17521 (synopsis "Flake8 Line Continuation Plugin")
17522 (description
17523 "A Flake8 plugin that checks for the line continuation style to be in the
17524preferred method according to PEP-8, specifically:
17525@quotation
17526The preferred way of wrapping long lines is by using Python's implied line
17527continuation inside parentheses, brackets and braces. Long lines can be
17528broken over multiple lines by wrapping expressions in parentheses. These
17529should be used in preference to using a backslash for line continuation.
17530@end quotation")
17531 (license license:asl2.0)))
17532
17533(define-public python-flake8-debugger
17534 (package
17535 (name "python-flake8-debugger")
17536 (version "4.1.2")
17537 (source
17538 (origin
17539 (method git-fetch)
17540 (uri (git-reference
17541 (url "https://github.com/jbkahn/flake8-debugger")
17542 (commit version)))
17543 (file-name (git-file-name name version))
17544 (sha256
17545 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17546 (build-system pyproject-build-system)
17547 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17548 (propagated-inputs (list python-flake8 python-pycodestyle))
17549 (home-page "https://github.com/jbkahn/flake8-debugger")
17550 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17551 (description
17552 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17553@code{pdb} imports and set traces, as well as @code{from
17554IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17555@code{InteractiveShellEmbed()()}.")
17556 (license license:expat)))
17557
17558(define-public python-flake8-implicit-str-concat
17559 (package
17560 (name "python-flake8-implicit-str-concat")
17561 (version "0.5.0")
17562 (source
17563 (origin
17564 (method url-fetch)
17565 (uri (pypi-uri "flake8_implicit_str_concat" version))
17566 (sha256
17567 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17568 (build-system pyproject-build-system)
17569 (arguments
17570 (list
17571 #:tests? #f)) ; no tests in PiPY or git checkout
17572 (native-inputs
17573 (list python-hatchling))
17574 (propagated-inputs
17575 (list python-attrs
17576 python-more-itertools))
17577 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17578 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17579 (description
17580 "This is a plugin for the Python code checking tool Flake8 to encourage
17581correct string literal concatenation.
17582
17583It looks for style problems like implicitly concatenated string literals on
17584the same line (which can be introduced by the code formatting tool Black), or
17585unnecessary plus operators for explicit string literal concatenation.")
17586 (license license:expat)))
17587
17588(define-public python-flake8-print
17589 (package
17590 (name "python-flake8-print")
17591 (version "5.0.0")
17592 (source
17593 (origin
17594 (method url-fetch)
17595 (uri (pypi-uri "flake8-print" version))
17596 (sha256
17597 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17598 (build-system pyproject-build-system)
17599 (arguments
17600 (list
17601 #:tests? #f)) ; no tests in PiPY or git checkout
17602 (native-inputs
17603 (list python-poetry-core))
17604 (propagated-inputs
17605 (list python-flake8
17606 python-pycodestyle))
17607 (home-page "https://github.com/jbkahn/flake8-print")
17608 (synopsis "Print statement checker plugin for Flake8")
17609 (description
17610 "This plugin for Flake8 checks for @code{print} statements in Python
17611files.")
17612 (license license:expat)))
17613
17614(define-public python-flake8-pyi
17615 (package
17616 (name "python-flake8-pyi")
17617 (version "24.9.0")
17618 (source
17619 (origin
17620 (method url-fetch)
17621 (uri (pypi-uri "flake8_pyi" version))
17622 (sha256
17623 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
17624 (build-system pyproject-build-system)
17625 (arguments
17626 (list
17627 #:phases
17628 #~(modify-phases %standard-phases
17629 (add-after 'unpack 'fix-pytest-config
17630 (lambda _
17631 ;; Prevent full threads utilization.
17632 (substitute* "pyproject.toml"
17633 (("-nauto") "")))))))
17634 (native-inputs
17635 (list python-hatchling
17636 python-pytest))
17637 (propagated-inputs
17638 (list python-attrs
17639 python-flake8
17640 python-pyflakes))
17641 (home-page "https://github.com/ambv/flake8-pyi")
17642 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
17643 (description
17644 "This package contains a plugin that provides specializations for type
17645hinting stub files, especially interesting for linting typeshed. It adds the
17646@file{.pyi} extension to the default value of the @code{--filename}
17647command-line argument to Flake8. This means stubs are linted by default with
17648this plugin enabled, without needing to explicitly list every file. It
17649modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17650expressions after the entire file has been read. This enables support for
17651first-class forward references that stub files use.")
17652 (license license:expat)))
17653
17654(define-public python-flake8-quotes
17655 (package
17656 (name "python-flake8-quotes")
17657 (version "3.4.0")
17658 (source
17659 (origin
17660 (method url-fetch)
17661 (uri (pypi-uri "flake8-quotes" version))
17662 (sha256
17663 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17664 (build-system pyproject-build-system)
17665 (native-inputs
17666 (list python-pytest
17667 python-setuptools
17668 python-wheel))
17669 (propagated-inputs
17670 (list python-flake8))
17671 (home-page "https://github.com/zheller/flake8-quotes/")
17672 (synopsis "Flake8 lint for quotes")
17673 (description "This package provides a Flake8 lint for quotes.")
17674 (license license:expat)))
17675
17676(define-public python-flake8-todo
17677 (package
17678 (name "python-flake8-todo")
17679 (version "0.7")
17680 (source
17681 (origin
17682 (method git-fetch)
17683 (uri (git-reference
17684 (url "https://github.com/schlamar/flake8-todo")
17685 (commit (string-append "v" version))))
17686 (file-name (git-file-name name version))
17687 (sha256
17688 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
17689 (build-system pyproject-build-system)
17690 (arguments (list #:tests? #f)) ; No tests.
17691 (native-inputs (list python-setuptools))
17692 (propagated-inputs (list python-pycodestyle))
17693 (home-page "https://github.com/schlamar/flake8-todo")
17694 (synopsis "TODO notes checker, plugin for flake8")
17695 (description
17696 "This package provides the @code{flake8-todo} Python module, a
17697TODO notes checker plugin for flake8.")
17698 (license license:expat)))
17699
17700(define-public python-flake8-isort
17701 (package
17702 (name "python-flake8-isort")
17703 (version "7.0.0")
17704 (source
17705 (origin
17706 (method git-fetch)
17707 (uri (git-reference
17708 (url "https://github.com/gforcada/flake8-isort")
17709 (commit version)))
17710 (file-name (git-file-name name version))
17711 (sha256
17712 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
17713 (build-system pyproject-build-system)
17714 (arguments (list #:test-backend #~'custom
17715 #:test-flags #~(list "run_tests.py")))
17716 (native-inputs (list python-hatchling python-pytest))
17717 (propagated-inputs (list python-flake8 python-isort))
17718 (home-page "https://github.com/gforcada/flake8-isort")
17719 (synopsis "Flake8 plugin integrating isort")
17720 (description
17721 "This package provides a flake8 plugin that integrates isort,
17722extending flake8 so that it can warn about badly sorted Python import
17723directives.")
17724 (license license:gpl2+)))
17725
17726(define-public python-autoflake
17727 (package
17728 (name "python-autoflake")
17729 (version "2.3.1")
17730 (source
17731 (origin
17732 (method url-fetch)
17733 (uri (pypi-uri "autoflake" version))
17734 (sha256
17735 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
17736 (build-system pyproject-build-system)
17737 (arguments
17738 (list
17739 #:phases
17740 #~(modify-phases %standard-phases
17741 (replace 'check
17742 (lambda _
17743 (invoke "python" "test_autoflake.py"))))))
17744 (native-inputs
17745 (list python-hatchling))
17746 (propagated-inputs
17747 (list python-pyflakes))
17748 (home-page "https://github.com/myint/autoflake")
17749 (synopsis "Removes unused imports and unused variables")
17750 (description
17751 "@code{autoflake} removes unused imports and unused variables from Python
17752code as reported by @code{pyflakes}.
17753
17754By default, it only removes unused imports for modules that are part of the
17755standard library. Removal of unused variables is also disabled by default.
17756It also removes useless @code{pass} statements.")
17757 (license license:expat)))
17758
17759(define-public python-mistune
17760 (package
17761 (name "python-mistune")
17762 (version "3.1.3")
17763 (source
17764 (origin
17765 (method url-fetch)
17766 (uri (pypi-uri "mistune" version))
17767 (sha256
17768 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
17769 (build-system pyproject-build-system)
17770 (native-inputs
17771 (list python-pytest
17772 python-setuptools
17773 python-wheel))
17774 (home-page "https://github.com/lepture/mistune")
17775 (synopsis "Markdown parser in pure Python")
17776 (description "This package provides a fast markdown parser in pure
17777Python.")
17778 (license license:bsd-3)))
17779
17780(define-public python-markdown
17781 (package
17782 (name "python-markdown")
17783 (version "3.10")
17784 (source
17785 (origin
17786 (method url-fetch)
17787 (uri (pypi-uri "markdown" version))
17788 (sha256
17789 (base32
17790 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
17791 (build-system pyproject-build-system)
17792 (native-inputs
17793 (list python-pyyaml
17794 python-setuptools))
17795 (home-page "https://python-markdown.github.io/")
17796 (synopsis "Python implementation of Markdown")
17797 (description
17798 "This package provides a Python implementation of John Gruber's
17799Markdown. The library features international input, various Markdown
17800extensions, and several HTML output formats. A command line wrapper
17801markdown_py is also provided to convert Markdown files to HTML.")
17802 (license license:bsd-3)))
17803
17804(define-public python-markdown2
17805 (package
17806 (name "python-markdown2")
17807 (version "2.5.3")
17808 (source
17809 (origin
17810 (method git-fetch) ; no tests data in PyPi package
17811 (uri (git-reference
17812 (url "https://github.com/trentm/python-markdown2")
17813 (commit version)))
17814 (file-name (git-file-name name version))
17815 (sha256
17816 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
17817 (build-system pyproject-build-system)
17818 (arguments
17819 (list
17820 #:test-backend #~'custom
17821 #:test-flags #~(list "test.py" "--" "-knownfailure")
17822 #:phases
17823 #~(modify-phases %standard-phases
17824 (add-before 'check 'pre-check
17825 (lambda _
17826 (chdir "test"))))))
17827 (native-inputs
17828 (list ;; python-pygments ;optional, tests fail when added
17829 ;; python-wavedrom ;optional, not packaged
17830 ;; python-latex2mathml ;optional, not packaged
17831 python-setuptools))
17832 (home-page "https://github.com/trentm/python-markdown2")
17833 (synopsis "Fast and complete Python implementation of Markdown")
17834 (description
17835 "This package provides a fast and complete Python implementation of
17836Markdown. It was written to closely match the behaviour of the original
17837Perl-implemented Markdown.pl. It also comes with a number of
17838extensions (called @code{extras}) for things like syntax coloring, tables,
17839header-ids.")
17840 (license license:expat)))
17841
17842(define-public python-mdx-include
17843 (package
17844 (name "python-mdx-include")
17845 (version "1.4.2")
17846 (source
17847 (origin
17848 (method git-fetch)
17849 (uri (git-reference
17850 (url "https://github.com/neurobin/mdx_include")
17851 (commit (string-append "v" version))))
17852 (file-name (git-file-name name version))
17853 (sha256
17854 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
17855 (build-system pyproject-build-system)
17856 (arguments
17857 (list
17858 #:test-backend #~'unittest
17859 #:phases
17860 (let* ((django-hello-url "\
17861https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1786273951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
17863 (django-hello
17864 (origin
17865 (method url-fetch)
17866 (uri django-hello-url)
17867 (sha256 (base32 "\
1786813bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
17869 #~(modify-phases %standard-phases
17870 (add-before 'check 'disable-test-requiring-network
17871 (lambda _
17872 (substitute* "mdx_include/test/test.py"
17873 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
17874 (string-append pre "__off__test_" post "("))
17875 (((string-join (string-split #$django-hello-url #\.) "\\."))
17876 #+django-hello))))))))
17877 (native-inputs (list python-setuptools))
17878 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
17879 (home-page "https://github.com/neurobin/mdx_include")
17880 (synopsis "Python Markdown extension to include local or remote files")
17881 (description "Include extension for Python Markdown. It lets you include
17882local or remote (downloadable) files into your markdown at arbitrary
17883positions.
17884
17885This project is motivated by markdown-include and provides the same
17886functionalities with some extras.")
17887 (license license:bsd-3)))
17888
17889(define-public python-ptyprocess
17890 (package
17891 (name "python-ptyprocess")
17892 (version "0.7.0")
17893 (source
17894 (origin
17895 (method url-fetch)
17896 (uri (pypi-uri "ptyprocess" version))
17897 (sha256
17898 (base32
17899 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
17900 (build-system pyproject-build-system)
17901 (native-inputs
17902 (list python-flit-core
17903 python-pytest))
17904 (home-page "https://github.com/pexpect/ptyprocess")
17905 (synopsis "Run a subprocess in a pseudo terminal")
17906 (description
17907 "This package provides a Python library used to launch a subprocess in a
17908pseudo terminal (pty), and interact with both the process and its pty.")
17909 (license license:isc)))
17910
17911(define-public python-configshell-fb
17912 (package
17913 (name "python-configshell-fb")
17914 (version "1.1.30")
17915 (source
17916 (origin
17917 (method url-fetch)
17918 (uri (pypi-uri "configshell-fb" version))
17919 ;; XXX: Snippet below is required because on v1.1.30 the source code
17920 ;; has configshell_fb as softlink to configshell and guix
17921 ;; pyproject-build-system doesn't work with symlinks very well.
17922 ;;
17923 ;; This package is only used in spdk for now and it's crucial to keep
17924 ;; it locked on version and keep the snipped for spdk to build
17925 ;; successfully.
17926 (snippet #~(begin
17927 (use-modules (guix build utils))
17928 (delete-file "setup.py")
17929 (delete-file-recursively "configshell_fb")
17930 (rename-file "configshell" "configshell_fb")))
17931 (sha256
17932 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
17933 (build-system pyproject-build-system)
17934 (arguments
17935 (list #:tests? #f)) ;; this package has no tests
17936 (native-inputs
17937 (list python-setuptools
17938 python-six
17939 python-wheel))
17940 (propagated-inputs
17941 (list python-pyparsing))
17942 (home-page "https://github.com/open-iscsi/configshell-fb")
17943 (synopsis "Framework to implement simple but nice CLIs")
17944 (description
17945 "This package provides a framework to implement simple but nice CLIs.")
17946 (license license:asl2.0)))
17947
17948(define-public python-configupdater
17949 (package
17950 (name "python-configupdater")
17951 (version "3.2")
17952 (source
17953 (origin
17954 (method git-fetch)
17955 (uri (git-reference
17956 (url "https://github.com/pyscaffold/configupdater")
17957 (commit (string-append "v" version))))
17958 (file-name (git-file-name name version))
17959 (sha256
17960 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
17961 (build-system pyproject-build-system)
17962 (native-inputs
17963 (list python-pytest python-setuptools python-setuptools-scm))
17964 (home-page "https://github.com/pyscaffold/configupdater")
17965 (synopsis "Parser like ConfigParser but for updating configuration files")
17966 (description
17967 "ConfigUpdater is a Python library for updating INI configuration files
17968while preserving the original file's formatting, structure, and comments.
17969Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
17970targeted changes--keeping comments, section ordering, key-value pair
17971ordering, and original casing intact.")
17972 (license license:expat)))
17973
17974(define-public python-crccheck
17975 (package
17976 (name "python-crccheck")
17977 (version "1.3.0")
17978 (source
17979 (origin
17980 (method git-fetch) ; no tests in PyPI
17981 (uri (git-reference
17982 (url "https://github.com/MartinScharrer/crccheck")
17983 (commit (string-append "v" version))))
17984 (file-name (git-file-name name version))
17985 (sha256
17986 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
17987 (build-system pyproject-build-system)
17988 (native-inputs (list python-pytest python-setuptools python-wheel))
17989 (home-page "https://github.com/MartinScharrer/crccheck")
17990 (synopsis "Calculation library for CRCs and checksums")
17991 (description "@code{crccheck} is a calculation library for CRCs and
17992checksums. It implement more than a hundred checksum routines.")
17993 (license license:gpl3+)))
17994
17995(define-public python-crashtest
17996 (package
17997 (name "python-crashtest")
17998 (version "0.4.1")
17999 (source
18000 (origin
18001 (method git-fetch)
18002 (uri (git-reference
18003 (url "https://github.com/sdispater/crashtest")
18004 (commit version)))
18005 (file-name (git-file-name name version))
18006 (sha256
18007 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18008 (build-system pyproject-build-system)
18009 (native-inputs (list python-poetry-core python-pytest))
18010 (home-page "https://github.com/sdispater/crashtest")
18011 (synopsis "Manage Python errors with ease")
18012 (description
18013 "Python library that makes exceptions handling and inspection easier.")
18014 (license license:expat)))
18015
18016(define-public python-pysendfile
18017 (package
18018 (name "python-pysendfile")
18019 (version "2.0.1")
18020 (source
18021 (origin
18022 (method git-fetch)
18023 (uri (git-reference
18024 (url "https://github.com/giampaolo/pysendfile")
18025 (commit (string-append "release-" version))))
18026 (file-name (git-file-name name version))
18027 (sha256
18028 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18029 (build-system pyproject-build-system)
18030 (arguments
18031 (list
18032 #:phases
18033 #~(modify-phases %standard-phases
18034 (replace 'check
18035 (lambda* (#:key tests? #:allow-other-keys)
18036 (when tests?
18037 (setenv "HOME" "/tmp")
18038 (invoke "make" "test")))))))
18039 (native-inputs (list python-pytest python-setuptools))
18040 (propagated-inputs (list python-pyasynchat))
18041 (home-page "https://github.com/giampaolo/pysendfile")
18042 (synopsis "Python interface to sendfile(2)")
18043 (description "The @code{pysendfile} Python library provides an interface to
18044the @code{sendfile(2)} system call.")
18045 (license license:expat)))
18046
18047(define-public python-pyftpdlib
18048 (package
18049 (name "python-pyftpdlib")
18050 (version "1.5.10")
18051 (source
18052 (origin
18053 (method url-fetch)
18054 (uri (pypi-uri "pyftpdlib" version))
18055 (sha256
18056 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18057 (build-system pyproject-build-system)
18058 ;; Using Pytest instead of the Makefile causes the command line tests to
18059 ;; fail on unknown Pytest arguments.
18060 (arguments
18061 (list
18062 #:test-flags
18063 #~(list "-k" "not TestCommandLineParser"
18064 #$@(if (target-aarch64?)
18065 ;; TimeoutError: timed out
18066 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
18067 "::TestTimeouts::test_idle_data_timeout2"))
18068 '()))))
18069 (native-inputs
18070 (list python-psutil
18071 python-pytest
18072 python-setuptools
18073 python-wheel))
18074 (propagated-inputs
18075 (list python-pyopenssl
18076 python-pysendfile))
18077 (home-page "https://github.com/giampaolo/pyftpdlib/")
18078 (synopsis "Asynchronous and scalable Python FTP server library")
18079 (description "The Python FTP server library provides a high-level
18080interface to write efficient, scalable and asynchronous FTP servers with
18081Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18082RFC-959} FTP server implementation available for Python, and has the following
18083traits:
18084@itemize
18085@item
18086It is lightweight, fast and scalable.
18087@item
18088It uses the @code{sendfile(2)} system call for uploads.
18089@item
18090It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18091asynchronously.
18092@item
18093It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18094IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18095RFC-2640}) and MLSD/MLST commands (RFC-3659).
18096@item
18097It has a flexible system of @samp{authorizers} able to manage both
18098@samp{virtual} and @samp{real} users.
18099@end itemize")
18100 (license license:expat)))
18101
18102(define-public python-fonttools
18103 (package
18104 (name "python-fonttools")
18105 (version "4.59.2")
18106 (source
18107 (origin
18108 (method url-fetch)
18109 (uri (pypi-uri "fonttools" version ".tar.gz"))
18110 (sha256
18111 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18112 (build-system pyproject-build-system)
18113 (arguments
18114 (list
18115 #:tests? (not (%current-target-system))
18116 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18117 ;; 3 subtests passed
18118 #:test-flags
18119 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18120 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18121 (string-join ls "::")))
18122 ;; XXX: Some test data is not included in PyPI archive,
18123 ;; remove when switched to git-fetch.
18124 '(("cffLib/cffLib_test.py" "CffLibTest"
18125 "test_reading_supplement_encoding")
18126 ("tfmLib/tfmLib_test.py"
18127 "test_read_boundary_char")
18128 ("tfmLib/tfmLib_test.py"
18129 "test_read_fontdimens_vanilla")
18130 ("tfmLib/tfmLib_test.py"
18131 "test_read_fontdimens_mathex")
18132 ("tfmLib/tfmLib_test.py"
18133 "test_read_fontdimens_mathsy")
18134 ("voltLib/volttofea_test.py" "ToFeaTest"
18135 "test_cli_vtp")
18136 ("voltLib/volttofea_test.py" "ToFeaTest"
18137 "test_group_order"))))))
18138 (native-inputs
18139 (list python-pytest
18140 python-setuptools))
18141 ;; All of them are listed as extras_require.
18142 (propagated-inputs
18143 (list python-brotli
18144 python-lxml
18145 python-unicodedata2
18146 python-zopfli))
18147 (home-page "https://github.com/fonttools/fonttools")
18148 (synopsis "Tools to manipulate font files")
18149 (description
18150 "FontTools/TTX is a library to manipulate font files from Python. It
18151supports reading and writing of TrueType/OpenType fonts, reading and writing
18152of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18153also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18154from an XML-based format.")
18155 (license license:expat)))
18156
18157;;; Tests are left out in the main package to avoid cycles.
18158;; XXX: When updating, solve comment in python-cu2qu.
18159(define-public python-fonttools-minimal
18160 (hidden-package
18161 (package
18162 (inherit python-fonttools)
18163 (name "python-fonttools-minimal")
18164 (arguments '(#:tests? #f))
18165 (native-inputs
18166 (list python-setuptools))
18167 (propagated-inputs '()))))
18168
18169(define-public python-ly
18170 (package
18171 (name "python-ly")
18172 (version "0.9.9")
18173 (source
18174 (origin
18175 (method git-fetch)
18176 (uri (git-reference
18177 (url "https://github.com/frescobaldi/python-ly")
18178 (commit (string-append "v" version))))
18179 (file-name (git-file-name name version))
18180 (sha256
18181 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18182 (build-system pyproject-build-system)
18183 (arguments
18184 (list
18185 #:phases
18186 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18187 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18188 #~(modify-phases %standard-phases
18189 (add-after 'unpack 'inject-data
18190 (lambda _
18191 (substitute* "tests/musicxml.xsd"
18192 (((string-join (string-split #$namespace-url #\.) "\\."))
18193 #$(origin
18194 (method url-fetch)
18195 (uri namespace-url)
18196 (sha256 (base32 "\
181971j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18198 (((string-join (string-split #$xlink-url #\.) "\\."))
18199 #$(origin
18200 (method url-fetch)
18201 (uri xlink-url)
18202 (sha256 (base32 "\
182030jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18204 (native-inputs (list python-hatchling python-lxml python-pytest))
18205 (synopsis "Tool and library for manipulating LilyPond files")
18206 (description
18207 "This package provides a Python library to parse, manipulate or create
18208documents in LilyPond format. A command line program ly is also provided that
18209can be used to do various manipulations with LilyPond files.")
18210 (home-page "https://pypi.org/project/python-ly/")
18211 (license license:gpl2+)))
18212
18213(define-public python-appdirs
18214 (package
18215 (name "python-appdirs")
18216 (version "1.4.4")
18217 (source
18218 (origin
18219 (method url-fetch)
18220 (uri (pypi-uri "appdirs" version))
18221 (sha256
18222 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18223 (build-system pyproject-build-system)
18224 (arguments (list #:test-backend #~'unittest))
18225 (native-inputs (list python-setuptools))
18226 (home-page "https://github.com/ActiveState/appdirs")
18227 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18228 (description
18229 "This module provides a portable way of finding out where user data
18230should be stored on various operating systems.")
18231 (license license:expat)))
18232
18233(define-public python-gorilla
18234 (package
18235 (name "python-gorilla")
18236 (version "0.5.0")
18237 (source
18238 (origin
18239 (method git-fetch)
18240 (uri (git-reference
18241 (url "https://github.com/christophercrouzet/gorilla")
18242 (commit (string-append "v" version))))
18243 (file-name (git-file-name name version))
18244 (sha256
18245 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18246 (build-system pyproject-build-system)
18247 (arguments (list #:test-backend #~'unittest))
18248 (native-inputs (list python-setuptools))
18249 (home-page "https://github.com/christophercrouzet/gorilla")
18250 (synopsis "Convenient monkey patching with Python")
18251 (description
18252 "Gorilla is a Python library that provides a convenient approach to
18253monkey patching. Monkey patching is the process of modifying module and
18254class attributes at runtime with the purpose of replacing or extending
18255third-party code.")
18256 (license license:expat)))
18257
18258(define-public python-llfuse
18259 (package
18260 (name "python-llfuse")
18261 (version "1.5.1")
18262 (source
18263 (origin
18264 (method git-fetch)
18265 (uri (git-reference
18266 (url "https://github.com/python-llfuse/python-llfuse")
18267 (commit (string-append "release-" version))))
18268 (file-name (git-file-name name version))
18269 (sha256
18270 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18271 (build-system pyproject-build-system)
18272 (arguments
18273 (list
18274 #:test-flags
18275 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18276 #:phases
18277 #~(modify-phases %standard-phases
18278 (add-before 'build 'build-cython
18279 (lambda _
18280 (invoke "python" "setup.py" "build_cython"))))))
18281 (inputs (list fuse-2 attr))
18282 (native-inputs
18283 (list pkg-config python-cython python-pytest python-setuptools))
18284 (synopsis "Python bindings for FUSE")
18285 (description
18286 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18287 (home-page "https://github.com/python-llfuse/python-llfuse")
18288 (license license:lgpl2.0+)))
18289
18290(define-public python-msgpack
18291 (package
18292 (name "python-msgpack")
18293 (version "1.1.2")
18294 (source
18295 (origin
18296 (method url-fetch)
18297 (uri (pypi-uri "msgpack" version))
18298 (sha256
18299 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18300 (build-system pyproject-build-system)
18301 (native-inputs
18302 (list python-pytest
18303 python-setuptools))
18304 (home-page "https://msgpack.org/")
18305 (synopsis "MessagePack (de)serializer")
18306 (description "MessagePack is a fast, compact binary serialization format,
18307suitable for similar data to JSON. This package provides CPython bindings for
18308reading and writing MessagePack data.")
18309 (license license:asl2.0)))
18310
18311(define-public python-openstep-plist
18312 (package
18313 (name "python-openstep-plist")
18314 (version "0.5.2")
18315 (source
18316 (origin
18317 (method git-fetch)
18318 (uri (git-reference
18319 (url "https://github.com/fonttools/openstep-plist")
18320 (commit (string-append "v" version))))
18321 (file-name (git-file-name name version))
18322 (sha256
18323 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18324 (build-system pyproject-build-system)
18325 (native-inputs
18326 (list python-cython
18327 python-pytest
18328 python-setuptools-scm
18329 python-setuptools))
18330 (home-page "https://github.com/fonttools/openstep-plist")
18331 (synopsis "OpenStep plist parser and writer")
18332 (description
18333 "This package provides a parser for the \"old style\" OpenStep property
18334list format (also known as ASCII plist), written in Cython.")
18335 (license license:expat)))
18336
18337(define-public python-resolvelib
18338 (package
18339 (name "python-resolvelib")
18340 (version "1.1.0")
18341 (source
18342 (origin
18343 ;; Tests are missing from the PyPI release.
18344 (method git-fetch)
18345 (uri (git-reference
18346 (url "https://github.com/sarugaku/resolvelib")
18347 (commit version)))
18348 (file-name (git-file-name name version))
18349 (sha256
18350 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
18351 (build-system pyproject-build-system)
18352 (native-inputs
18353 (list python-packaging
18354 python-pytest
18355 python-setuptools
18356 python-wheel))
18357 (home-page "https://github.com/sarugaku/resolvelib")
18358 (synopsis "Abstract dependencies resolver")
18359 (description
18360 "The ResolveLib library provides a @code{Resolver} class that includes
18361dependency resolution logic.")
18362 (license license:isc)))
18363
18364;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18365;; 2022. It is now read-only.
18366(define-public python-commonmark
18367 (package
18368 (name "python-commonmark")
18369 (version "0.9.1")
18370 (source
18371 (origin
18372 (method url-fetch)
18373 (uri (pypi-uri "commonmark" version))
18374 (sha256
18375 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18376 (build-system pyproject-build-system)
18377 (native-inputs
18378 (list python-setuptools))
18379 (home-page "https://github.com/readthedocs/commonmark.py")
18380 (synopsis "Python parser for the CommonMark Markdown spec")
18381 (description
18382 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18383Markdown parser and renderer for the CommonMark specification, using only
18384native modules.")
18385 (license license:bsd-3)))
18386
18387(define-public python-immutables
18388 (package
18389 (name "python-immutables")
18390 (version "0.21")
18391 (source
18392 (origin
18393 (method git-fetch)
18394 (uri (git-reference
18395 (url "https://github.com/MagicStack/immutables")
18396 (commit (string-append "v" version))))
18397 (file-name (git-file-name name version))
18398 (sha256
18399 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18400 (build-system pyproject-build-system)
18401 (arguments
18402 (list #:phases #~(modify-phases %standard-phases
18403 (add-after 'unpack 'remove-mypy-dependency
18404 (lambda _
18405 (delete-file "tests/test_mypy.py")
18406 (delete-file "tests/conftest.py"))))))
18407 (native-inputs
18408 (list python-pytest python-setuptools python-wheel))
18409 (home-page "https://github.com/MagicStack/immutables")
18410 (synopsis "High-performance immutable mapping type for Python")
18411 (description
18412 "An immutable mapping type for Python. The underlying datastructure is a
18413Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18414functional languages.")
18415 (license license:asl2.0)))
18416
18417(define-public python-prettytable
18418 (package
18419 (name "python-prettytable")
18420 (version "3.12.0")
18421 (source
18422 (origin
18423 (method url-fetch)
18424 (uri (pypi-uri "prettytable" version))
18425 (sha256
18426 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18427 (build-system pyproject-build-system)
18428 (native-inputs
18429 (list python-hatchling
18430 python-hatch-vcs
18431 python-pytest
18432 python-pytest-lazy-fixtures
18433 python-setuptools-scm))
18434 (propagated-inputs
18435 (list python-wcwidth))
18436 (home-page "https://github.com/jazzband/prettytable")
18437 (synopsis "Display tabular data in an ASCII table format")
18438 (description
18439 "A library designed to represent tabular data in visually appealing ASCII
18440tables. PrettyTable allows for selection of which columns are to be printed,
18441independent alignment of columns (left or right justified or centred) and
18442printing of sub-tables by specifying a row range.")
18443 (license license:bsd-3)))
18444
18445(define-public python-rtf-tokenize
18446 (package
18447 (name "python-rtf-tokenize")
18448 (version "1.0.1")
18449 (source (origin
18450 (method url-fetch)
18451 (uri (pypi-uri "rtf_tokenize" version))
18452 (sha256
18453 (base32
18454 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18455 (build-system pyproject-build-system)
18456 (native-inputs (list python-pytest python-setuptools python-wheel))
18457 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18458 (synopsis "Simple RTF tokenizer")
18459 (description "This package is a simple RTF tokenizer.")
18460 (license license:gpl2+)))
18461
18462(define-public python-sniffio
18463 (package
18464 (name "python-sniffio")
18465 (version "1.3.1")
18466 (source
18467 (origin
18468 (method url-fetch)
18469 (uri (pypi-uri "sniffio" version))
18470 (sha256
18471 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18472 (build-system pyproject-build-system)
18473 (arguments
18474 (list
18475 #:test-flags
18476 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18477 (native-inputs
18478 (list python-pytest python-setuptools))
18479 (home-page "https://github.com/python-trio/sniffio")
18480 (synopsis "Detect which async library a program is running under")
18481 (description
18482 "This package detects which async library a program is running under. It
18483supports multiple async I/O packages, like Trio, and asyncio.")
18484 ;; Either license applies.
18485 (license (list license:expat license:asl2.0))))
18486
18487(define-public python-snuggs
18488 (package
18489 (name "python-snuggs")
18490 (version "1.4.7")
18491 (source (origin
18492 (method url-fetch)
18493 (uri (pypi-uri "snuggs" version))
18494 (sha256
18495 (base32
18496 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18497 (build-system pyproject-build-system)
18498 (propagated-inputs (list python-numpy python-pyparsing))
18499 (native-inputs (list python-hypothesis python-pytest python-setuptools
18500 python-wheel))
18501 (home-page "https://github.com/mapbox/snuggs")
18502 (synopsis "Snuggs are S-expressions for Numpy")
18503 (description "Snuggs are S-expressions for Numpy.")
18504 (license license:expat)))
18505
18506(define-public python-geojson
18507 (package
18508 (name "python-geojson")
18509 (version "3.2.0")
18510 (source
18511 (origin
18512 (method url-fetch)
18513 (uri (pypi-uri "geojson" version))
18514 (sha256
18515 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18516 (build-system pyproject-build-system)
18517 (native-inputs (list python-pytest python-setuptools))
18518 (home-page "https://github.com/jazzband/geojson")
18519 (synopsis "Python bindings and utilities for GeoJSON")
18520 (description
18521 "This package provides Python bindings and utilities for
18522@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18523structures.")
18524 (license license:bsd-3)))
18525
18526;; pyowm only accepts a version less than version 3.
18527(define-public python-geojson-for-pyowm
18528 (package
18529 (inherit python-geojson)
18530 (version "2.5.0")
18531 (source
18532 (origin
18533 (method url-fetch)
18534 (uri (pypi-uri "geojson" version))
18535 (sha256
18536 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18537 (arguments
18538 ;; https://github.com/jazzband/geojson/issues/175
18539 (list #:tests? #f))))
18540
18541(define-public python-gpxpy
18542 (package
18543 (name "python-gpxpy")
18544 (version "1.6.2")
18545 (source
18546 (origin
18547 (method url-fetch)
18548 (uri (pypi-uri "gpxpy" version))
18549 (sha256
18550 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18551 (build-system pyproject-build-system)
18552 (arguments
18553 (list #:test-backend #~'unittest))
18554 (native-inputs
18555 (list python-setuptools))
18556 (home-page "https://github.com/tkrajina/gpxpy")
18557 (synopsis "Python GPX parser")
18558 (description "GPX file parser and GPS track manipulation library.")
18559 (license license:asl2.0)))
18560
18561(define-public python-get-version
18562 (package
18563 (name "python-get-version")
18564 (version "3.5.5")
18565 (source
18566 (origin
18567 (method url-fetch)
18568 (uri (pypi-uri "get_version" version))
18569 (sha256
18570 (base32
18571 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18572 (build-system pyproject-build-system)
18573 (arguments
18574 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18575 ;; lack of git metadata in the checkout.
18576 (list #:tests? #f))
18577 (native-inputs (list python-flit-core))
18578 (propagated-inputs (list python-dunamai))
18579 (home-page "https://github.com/flying-sheep/get_version")
18580 (synopsis "Version helper in the spirit of versioneer")
18581 (description
18582 "This package provides a version helper that lets you automatically use
18583the latest @code{vX.X.X} Git tag as the version in your Python package. It
18584also supports getting the version from Python source distributions or, once
18585your package is installed, via @code{pkg_resources} (part of
18586@code{setuptools}).")
18587 (license license:gpl3+)))
18588
18589(define-public python-filetype
18590 (package
18591 (name "python-filetype")
18592 (version "1.2.0")
18593 (source
18594 (origin
18595 (method url-fetch)
18596 (uri (pypi-uri "filetype" version))
18597 (sha256
18598 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18599 (build-system pyproject-build-system)
18600 (native-inputs (list python-pytest
18601 python-pytest-benchmark
18602 python-setuptools
18603 python-wheel))
18604 (home-page "https://github.com/h2non/filetype.py")
18605 (synopsis "Infer file type and MIME type of any file/buffer")
18606 (description "@code{filetype} is a small and dependency free Python
18607package to infer file type and MIME type checking the magic numbers
18608signature of a file or buffer.")
18609 (license license:expat)))
18610
18611(define-public python-cachelib
18612 (package
18613 (name "python-cachelib")
18614 (version "0.13.0")
18615 (source
18616 (origin
18617 (method url-fetch)
18618 (uri (pypi-uri "cachelib" version))
18619 (sha256
18620 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18621 (build-system pyproject-build-system)
18622 (arguments
18623 ;; These tests use a remote connection.
18624 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18625 "--ignore" "tests/test_mongodb_cache.py")))
18626 (native-inputs
18627 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18628 (home-page "https://github.com/pallets-eco/cachelib")
18629 (synopsis "Collection of cache libraries")
18630 (description "Cachelib is a library extracted from @code{werkzeug} which
18631provides a collection of cache libraries in the same API interface.")
18632 (license license:bsd-3)))
18633
18634(define-public python-pylru
18635 (package
18636 (name "python-pylru")
18637 (version "1.2.0")
18638 (source
18639 (origin
18640 (method git-fetch)
18641 (uri (git-reference
18642 (url "https://github.com/jlhutch/pylru")
18643 (commit (string-append "v" version))))
18644 (file-name (git-file-name name version))
18645 (sha256
18646 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18647 (build-system pyproject-build-system)
18648 (arguments
18649 (list
18650 #:test-backend #~'custom
18651 #:test-flags #~(list "test.py")))
18652 (native-inputs (list python-pytest python-setuptools))
18653 (home-page "https://github.com/jlhutch/pylru")
18654 (synopsis "Least recently used (LRU) cache implementation")
18655 (description
18656 "Pylru implements a true LRU cache along with several support classes.
18657Pylru provides a cache class with a simple dict interface. It also provides
18658classes to wrap any object that has a dict interface with a cache. Both
18659write-through and write-back semantics are supported. Pylru also provides
18660classes to wrap functions in a similar way, including a function decorator.")
18661 (license license:gpl2+)))
18662
18663(define-public python-legacy-api-wrap
18664 (package
18665 (name "python-legacy-api-wrap")
18666 (version "1.5")
18667 (source
18668 (origin
18669 (method url-fetch)
18670 (uri (pypi-uri "legacy_api_wrap" version))
18671 (sha256
18672 (base32
18673 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
18674 (build-system pyproject-build-system)
18675 (native-inputs
18676 (list python-hatch-docstring-description
18677 python-hatch-vcs
18678 python-hatchling
18679 python-pytest
18680 python-typer))
18681 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
18682 (synopsis "Legacy API wrapper")
18683 (description "This module defines a decorator to wrap legacy APIs. The
18684primary use case is APIs defined before keyword-only parameters existed.")
18685 (license license:gpl3+)))
18686
18687(define-public python-langdetect
18688 (package
18689 (name "python-langdetect")
18690 (version "1.0.9")
18691 (source
18692 (origin
18693 (method url-fetch)
18694 (uri (pypi-uri "langdetect" version))
18695 (sha256
18696 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
18697 (build-system pyproject-build-system)
18698 (native-inputs
18699 (list python-pytest
18700 python-setuptools))
18701 (propagated-inputs
18702 (list python-six))
18703 (home-page "https://github.com/Mimino666/langdetect")
18704 (synopsis "Language detection library")
18705 (description
18706 "This library is a port of Nakatani Shuyo's language-detection library
18707(version from 03/03/2014) to Python.")
18708 (license license:expat)))
18709
18710(define-public python-pyasn1
18711 (package
18712 (name "python-pyasn1")
18713 (version "0.6.1")
18714 (source
18715 (origin
18716 (method url-fetch)
18717 (uri (pypi-uri "pyasn1" version))
18718 (sha256
18719 (base32
18720 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
18721 (build-system pyproject-build-system)
18722 (arguments
18723 (list #:test-backend #~'unittest
18724 #:test-flags #~(list "discover" "tests")))
18725 (native-inputs
18726 (list python-setuptools))
18727 (home-page "https://github.com/pyasn1/pyasn1")
18728 (synopsis "ASN.1 types and codecs")
18729 (description
18730 "This is an implementation of ASN.1 types and codecs in Python. It is
18731suitable for a wide range of protocols based on the ASN.1 specification.")
18732 (license license:bsd-2)))
18733
18734(define-public python-pyasn1-modules
18735 (package
18736 (name "python-pyasn1-modules")
18737 (version "0.4.2")
18738 (source
18739 (origin
18740 (method url-fetch)
18741 (uri (pypi-uri "pyasn1_modules" version))
18742 (sha256
18743 (base32
18744 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
18745 (build-system pyproject-build-system)
18746 (arguments
18747 (list #:test-backend #~'unittest
18748 #:test-flags #~(list "discover" "tests")))
18749 (native-inputs
18750 (list python-setuptools))
18751 (propagated-inputs
18752 (list python-pyasn1))
18753 (home-page "https://github.com/pyasn1/pyasn1-modules")
18754 (synopsis "ASN.1 codec implementations")
18755 (description
18756 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
18757implementations of ASN.1-based codecs and protocols.")
18758 (license license:bsd-3)))
18759
18760(define-public python-asn1tools
18761 (package
18762 (name "python-asn1tools")
18763 (version "0.167.0")
18764 (source
18765 (origin
18766 (method url-fetch)
18767 (uri (pypi-uri "asn1tools" version))
18768 (sha256
18769 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
18770 (build-system pyproject-build-system)
18771 (arguments
18772 (list
18773 #:test-flags
18774 #~(list "-k" (string-join
18775 ;; Tests fail with error: IndexError: string index out of
18776 ;; range. It may be some incompatibility with pyparsing,
18777 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
18778 (list "not test_c_source"
18779 "test_command_line_generate_c_source_oer"
18780 "test_command_line_generate_c_source_uper"
18781 "test_command_line_generate_rust_source_uper"
18782 "test_missing_parameterized_value"
18783 "test_c_source"
18784 "test_parse_parameterization")
18785 " and not "))))
18786 (native-inputs
18787 (list python-pytest
18788 python-setuptools
18789 python-wheel))
18790 (propagated-inputs
18791 (list python-bitstruct
18792 python-diskcache
18793 python-prompt-toolkit
18794 python-pyparsing))
18795 (home-page "https://github.com/eerimoq/asn1tools")
18796 (synopsis "ASN.1 parsing, encoding and decoding")
18797 (description "This package provides ASN.1 parsing, encoding and decoding
18798for Python, including constraints checking. It supports several
18799codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
18800for OER and UPER.")
18801 (license license:expat)))
18802
18803(define-public python-idna
18804 (package
18805 (name "python-idna")
18806 (version "3.10")
18807 (source
18808 (origin
18809 (method url-fetch)
18810 (uri (pypi-uri "idna" version))
18811 (sha256
18812 (base32
18813 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
18814 (build-system pyproject-build-system)
18815 (native-inputs
18816 (list python-flit-core))
18817 (home-page "https://github.com/kjd/idna")
18818 (synopsis "Internationalized domain names in applications")
18819 (description
18820 "This is a library to support the Internationalised Domain Names in
18821Applications (IDNA) protocol as specified in RFC 5891. This version of the
18822protocol is often referred to as “IDNA2008” and can produce different results
18823from the earlier standard from 2003. The library is also intended to act as a
18824suitable drop-in replacement for the “encodings.idna” module that comes with
18825the Python standard library but currently only supports the older 2003
18826specification.")
18827 (license license:bsd-4)))
18828
18829(define-public python-libsass
18830 (package
18831 (name "python-libsass")
18832 (version "0.23.0")
18833 (source
18834 (origin
18835 ;; PyPI tarball is missing some test files.
18836 (method git-fetch)
18837 (uri (git-reference
18838 (url "https://github.com/sass/libsass-python")
18839 (commit version)))
18840 (file-name (git-file-name name version))
18841 (sha256
18842 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
18843 (build-system pyproject-build-system)
18844 (arguments
18845 '(#:phases
18846 (modify-phases %standard-phases
18847 ;; Use Guix package of libsass instead of compiling from a checkout.
18848 (add-before 'build 'set-libsass
18849 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
18850 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
18851 ;; https://github.com/sass/libsass-python/issues/440. It passed with
18852 ;; [email protected] which requires rebuild the world (1200+ packages),
18853 ;; remove when v3.6.5 is available.
18854 (add-before 'check 'silent-failing-tests
18855 (lambda _
18856 (substitute* "sasstests.py"
18857 (("def test_build_one")
18858 "def __off_test_build_one")
18859 (("def test_stack_trace_formatting")
18860 "def __off_test_stack_trace_formatting"))))
18861 (replace 'check
18862 (lambda* (#:key tests? #:allow-other-keys)
18863 (when tests?
18864 (invoke "pytest" "sasstests.py"))))
18865 (add-after 'install 'delete-test
18866 (lambda* (#:key inputs outputs #:allow-other-keys)
18867 ;; Delete sasstests.py because it attempts to open a file
18868 ;; that is not installed when loaded, which breaks the sanity
18869 ;; check.
18870 (delete-file (string-append
18871 (assoc-ref outputs "out")
18872 "/lib/python"
18873 (python-version
18874 (dirname (dirname
18875 (search-input-file inputs "bin/python"))))
18876 "/site-packages/sasstests.py")))))))
18877 (native-inputs
18878 (list python-pytest python-setuptools python-werkzeug python-wheel))
18879 (inputs
18880 (list libsass))
18881 (home-page "https://sass.github.io/libsass-python/")
18882 (synopsis "Straightforward binding of libsass for Python")
18883 (description
18884 "This package provides a simple Python extension module @code{sass} which
18885is binding LibSass.")
18886 (license license:expat)))
18887
18888;; It may be removed after 2026-01-24.
18889(define-deprecated/public-alias python-path-bootstrap python-path)
18890
18891(define-public python-pip-run
18892 (package
18893 (name "python-pip-run")
18894 (version "8.8.0")
18895 (source
18896 (origin
18897 (method git-fetch)
18898 (uri (git-reference
18899 (url "https://github.com/jaraco/pip-run")
18900 (commit (string-append "v" version))))
18901 (file-name (git-file-name name version))
18902 (sha256
18903 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18904 (build-system pyproject-build-system)
18905 (arguments
18906 (list
18907 #:tests? (not (%current-target-system))
18908 #:test-flags
18909 #~(list "-k" (string-append
18910 ;; Do not test the myproject.toml build as it tries
18911 ;; to pull dependencies from the internet.
18912 "not project "
18913 ;; These tests attempt to install dependencies from
18914 ;; the network and fail.
18915 "and not test_pkg_imported "
18916 "and not test_pkg_loaded_from_alternate_index "
18917 "and not test_pkg_loaded_from_url "))))
18918 (native-inputs
18919 (list python-nbformat
18920 python-pygments
18921 python-pytest
18922 python-setuptools
18923 python-setuptools-scm))
18924 (propagated-inputs
18925 (list python-autocommand
18926 python-packaging
18927 python-path
18928 python-pip))
18929 (home-page "https://github.com/jaraco/pip-run")
18930 (synopsis "Dynamic dependency loader for Python")
18931 (description "The @command{pip-run} command provides on-demand temporary
18932package installation for a single interpreter run. It replaces this series of
18933commands:
18934@example
18935$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18936$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18937$ /tmp/env/bin/python ...
18938$ rm -rf /tmp/env
18939@end example")
18940 (license license:expat)))
18941
18942;; It may be removed after 2026-01-24.
18943(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18944
18945(define-public python-libarchive-c
18946 (package
18947 (name "python-libarchive-c")
18948 (version "5.2")
18949 (source (origin
18950 (method url-fetch)
18951 (uri (pypi-uri "libarchive_c" version))
18952 (sha256
18953 (base32
18954 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18955 (build-system pyproject-build-system)
18956 (arguments
18957 (list
18958 #:phases
18959 #~(modify-phases %standard-phases
18960 (add-before 'build 'reference-libarchive
18961 (lambda* (#:key inputs #:allow-other-keys)
18962 ;; Retain the absolute file name of libarchive.so.
18963 (substitute* "libarchive/ffi.py"
18964 (("find_library\\('archive'\\)")
18965 (string-append
18966 "'"
18967 (search-input-file inputs "/lib/libarchive.so")
18968 "'"))))))))
18969 (native-inputs
18970 (list python-setuptools python-wheel python-pytest))
18971 (inputs
18972 (list libarchive))
18973 (home-page "https://github.com/Changaco/python-libarchive-c")
18974 (synopsis "Python interface to libarchive")
18975 (description
18976 "This package provides Python bindings to libarchive, a C library to
18977access possibly compressed archives in many different formats. It uses
18978Python's @code{ctypes} foreign function interface (FFI).")
18979 (license license:lgpl2.0+)))
18980
18981(define-public python-file
18982 (package/inherit file
18983 (name "python-file")
18984 (build-system pyproject-build-system)
18985 (arguments
18986 (list
18987 #:tests? #f ;no tests
18988 #:phases
18989 #~(modify-phases %standard-phases
18990 (add-before 'build 'change-directory
18991 (lambda _
18992 (chdir "python")))
18993 (add-before 'build 'set-library-file-name
18994 (lambda* (#:key inputs #:allow-other-keys)
18995 (substitute* "magic.py"
18996 (("find_library\\('magic'\\)")
18997 (format #f "~s" (search-input-file inputs
18998 "lib/libmagic.so")))))))))
18999 (inputs (list file))
19000 (native-inputs (cons* python-setuptools
19001 (if (%current-target-system)
19002 (list this-package)
19003 '())))
19004 (synopsis "Python bindings to the libmagic file type guesser")
19005 (description "This package provides Python bindings to the libmagic file
19006type guesser.
19007
19008Note that this module and the @code{python-magic} module both provide a
19009@file{magic.py} file; these two modules, which are different and were
19010developed separately, both serve the same purpose: provide Python bindings for
19011libmagic.")))
19012
19013(define-public python-pydemumble
19014 (package
19015 (name "python-pydemumble")
19016 (version "0.0.1")
19017 (source
19018 (origin
19019 (method git-fetch)
19020 (uri (git-reference
19021 (url "https://github.com/angr/pydemumble")
19022 (commit (string-append "v" version))))
19023 (file-name (git-file-name name version))
19024 (sha256
19025 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19026 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19027 (build-system pyproject-build-system)
19028 (arguments
19029 (list
19030 #:test-flags
19031 #~(list "discover" "-s" "tests")
19032 #:phases
19033 #~(modify-phases %standard-phases
19034 (add-after 'unpack 'set-demumble-source
19035 (lambda* _
19036 ;; demumble is only a binary and not intended to be used as
19037 ;; a library. Therefore, python-pydemumble creates it's own
19038 ;; bindings for demumble, which are autogenerated from C code.
19039 (substitute* "CMakeLists.txt"
19040 (("src/demumble")
19041 #+(package-source demumble))))))))
19042 (native-inputs (list python-nanobind python-scikit-build-core))
19043 (home-page "https://github.com/angr/pydemumble")
19044 (synopsis "Python library for demangling symbol names")
19045 (description
19046 "This package provides a Python wrapper library for @code{demumble}, which
19047is a tool to demangle C++, Rust, and Swift symbol names.")
19048 (license license:bsd-2)))
19049
19050(define-public python-pydevd
19051 (package
19052 (name "python-pydevd")
19053 (version "3.2.3")
19054 (source
19055 (origin
19056 (method git-fetch)
19057 (uri (git-reference
19058 (url "https://github.com/fabioz/PyDev.Debugger")
19059 (commit (string-append
19060 "pydev_debugger_"
19061 (string-join (string-split version #\.) "_")))))
19062 (modules '((guix build utils)))
19063 (snippet '(begin
19064 ;; Delete pre-built binaries.
19065 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19066 ;; This source is generated via Cython.
19067 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19068 (file-name (git-file-name name version))
19069 (sha256
19070 (base32
19071 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19072 (build-system pyproject-build-system)
19073 (arguments
19074 (list
19075 #:test-flags
19076 #~(list "-n" (number->string (parallel-job-count))
19077 "-m" "not flaky"
19078 "-k"
19079 (string-join
19080 (list
19081 ;; The two "break_01" tests have been failing on
19082 ;; Python 3.10:
19083 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19084 "not test_set_pydevd_break_01 "
19085 ;; the GUI event loop requires an X server.
19086 "test_gui_event_loop_custom"
19087 ;; This test validates that 'pydevd' is not in the
19088 ;; exception message, but it is due to being part
19089 ;; of the build file name present in the message.
19090 "test_evaluate_exception_trace"
19091 ;; This test fail with TimeoutError, no message on stderr.
19092 "test_soft_terminate"
19093 "test_debugger_case_deadlock_interrupt_thread"
19094 ;; subprocess.CalledProcessError
19095 ;; Python 3.11/3.12 specific issue:
19096 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19097 "test_find_main_thread_id")
19098 " and not "))
19099 #:phases
19100 #~(modify-phases %standard-phases
19101 (add-after 'unpack 'fix-tests
19102 (lambda _
19103 (substitute* "tests_python/test_convert_utilities.py"
19104 ;; Add missing trailing '/'.
19105 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19106 (string-append all "/")))))
19107 (add-after 'unpack 'patch-command-paths
19108 (lambda* (#:key inputs #:allow-other-keys)
19109 (substitute* "_pydevd_bundle/pydevd_api.py"
19110 (("'kill'")
19111 (format #f "~s" (search-input-file inputs "bin/kill")))
19112 (("'pgrep'")
19113 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19114 (add-after 'unpack 'generate-sources
19115 (lambda _
19116 (setenv "PYTHONPATH" (getcwd))
19117 (invoke "python" "build_tools/build.py")))
19118 (add-after 'unpack 'adjust-attach-binary-name
19119 (lambda _
19120 (substitute*
19121 '("pydevd_tracing.py"
19122 "pydevd_attach_to_process/add_code_to_python_process.py")
19123 (("def get_(target|python_helper_lib)_filename.*" all)
19124 (format #f "~a return ~s~%" all
19125 (string-append #$output "/lib/attach.so"))))))
19126 (add-after 'unpack 'patch-gdb
19127 (lambda* (#:key inputs #:allow-other-keys)
19128 (substitute*
19129 "pydevd_attach_to_process/add_code_to_python_process.py"
19130 (("'gdb',")
19131 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19132 (add-after 'build 'build-attach-linux-binary
19133 (lambda _
19134 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19135 "-fPIC" "-nostartfiles"
19136 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19137 (add-before 'check 'pre-check
19138 (lambda* (#:key tests? #:allow-other-keys)
19139 (when tests?
19140 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19141 (add-after 'install 'install-attach-binary
19142 (lambda _
19143 (install-file "attach.so"
19144 (string-append #$output "/lib"))))
19145 ;; Some modules aren't designed to be loadable by themselves, such
19146 ;; as 'pydev_app_engine_debug_startup' and fail.
19147 (delete 'sanity-check))))
19148 (native-inputs
19149 (list python-cython
19150 python-numpy
19151 python-psutil
19152 python-pytest
19153 python-pytest-xdist
19154 python-setuptools
19155 python-trio
19156 python-untangle
19157 python-wheel))
19158 (inputs (list coreutils gdb/pinned procps))
19159 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19160 (synopsis "Python debugger")
19161 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19162and other @acronym{IDEs, Integrated Development Environments}.")
19163 (license license:epl1.0)))
19164
19165(define-public python-debugpy
19166 (package
19167 (name "python-debugpy")
19168 (version "1.8.17")
19169 (source
19170 (origin
19171 (method git-fetch)
19172 (uri (git-reference ;no tests in PyPI archive
19173 (url "https://github.com/microsoft/debugpy")
19174 (commit (string-append "v" version))))
19175 (file-name (git-file-name name version))
19176 (modules '((guix build utils)))
19177 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19178 ;; attach binary.
19179 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19180 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19181 (sha256
19182 (base32
19183 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19184 (build-system pyproject-build-system)
19185 (arguments
19186 (list
19187 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19188 #:phases
19189 #~(modify-phases %standard-phases
19190 (add-after 'unpack 'patch-sh-in-tests
19191 (lambda _
19192 (substitute* "tests/debugpy/test_run.py"
19193 (("#!/bin/sh")
19194 (string-append "#!" (which "sh"))))))
19195 (add-before 'build 'configure
19196 (lambda _
19197 ;; This adjusts the behavior of debugpy to load pydevd from
19198 ;; Python site packages.
19199 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19200 (native-inputs
19201 (list python-setuptools
19202 python-versioneer))
19203 (propagated-inputs
19204 (list python-pydevd))
19205 (home-page "https://aka.ms/debugpy")
19206 (synopsis "Debug Adapter Protocol Python implementation")
19207 (description "An implementation of the Debug Adapter Protocol for
19208Python.")
19209 (license license:expat)))
19210
19211(define-public python-debian
19212 (package
19213 (name "python-debian")
19214 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19215 (version "0.1.49")
19216 (source
19217 (origin
19218 ;; Use git-fetch, as pypi doesn't include test suite.
19219 (method git-fetch)
19220 (uri (git-reference
19221 (url home-page)
19222 (commit version)))
19223 (file-name (git-file-name name version))
19224 (sha256
19225 (base32
19226 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19227 (modules '((guix build utils)))
19228 (snippet
19229 #~(begin
19230 ;; python-apt, apt and dpkg are not yet available in guix,
19231 ;; and these tests heavily depend on them.
19232 (for-each delete-file
19233 '("lib/debian/tests/test_deb822.py"
19234 "lib/debian/tests/test_debfile.py"))
19235
19236 ;; for reproducible builds, otherwise python-debian
19237 ;; generates a _version.py including the date
19238 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19239 (substitute* "lib/debian/_version.py"
19240 (("__CHANGELOG_VERSION__") #$version))))))
19241 (build-system pyproject-build-system)
19242 (native-inputs
19243 (list python-pytest python-setuptools))
19244 (propagated-inputs
19245 (list python-six python-chardet))
19246 (synopsis "Debian package related modules")
19247 (description
19248 "This package provides Python modules that abstract many formats of
19249Debian-related files, such as:
19250@itemize
19251@item Debtags information;
19252@item @file{debian/changelog} files;
19253@item packages files, pdiffs;
19254@item control files of single or multiple RFC822-style paragraphs---e.g.
19255 @file{debian/control}, @file{.changes}, @file{.dsc};
19256@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19257 contained files and meta-information.
19258@end itemize")
19259 ;; Modules are either GPLv2+ or GPLv3+.
19260 (license license:gpl3+)))
19261
19262(define-public python-json-spec
19263 (package
19264 (name "python-json-spec")
19265 (version "0.12.0")
19266 (source
19267 (origin
19268 (method git-fetch) ;no tests in PyPI archive
19269 (uri (git-reference
19270 (url "https://github.com/johnnoone/json-spec")
19271 (commit version)))
19272 (file-name (git-file-name name version))
19273 (sha256
19274 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19275 (build-system pyproject-build-system)
19276 (native-inputs
19277 (list python-pytest
19278 python-poetry-core))
19279 (propagated-inputs
19280 (list python-termcolor)) ;for the CLI
19281 (home-page "https://json-spec.readthedocs.io/")
19282 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19283 (description
19284 "This Python library implements several JSON specs, like JSON Schema,
19285JSON Reference and JSON Pointer.")
19286 (license license:bsd-3)))
19287
19288(define-public python-fastbencode
19289 (package
19290 (name "python-fastbencode")
19291 (version "0.3.9")
19292 (source
19293 (origin
19294 (method git-fetch)
19295 (uri (git-reference
19296 (url "https://github.com/breezy-team/fastbencode")
19297 (commit (string-append "v" version))))
19298 (file-name (git-file-name name version))
19299 (sha256
19300 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19301 (build-system pyproject-build-system)
19302 (arguments
19303 (list
19304 #:test-backend #~'unittest
19305 #:test-flags #~(list "tests.test_suite")
19306 #:imported-modules (append %cargo-build-system-modules
19307 %pyproject-build-system-modules)
19308 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19309 (guix build pyproject-build-system)
19310 (guix build utils))
19311 #:phases
19312 #~(modify-phases %standard-phases
19313 (add-after 'unpack 'prepare-cargo-build-system
19314 (lambda args
19315 (for-each
19316 (lambda (phase)
19317 (format #t "Running cargo phase: ~a~%" phase)
19318 (apply (assoc-ref cargo:%standard-phases phase)
19319 #:cargo-target #$(cargo-triplet)
19320 args))
19321 '(unpack-rust-crates
19322 configure
19323 check-for-pregenerated-files
19324 patch-cargo-checksums)))))))
19325 (inputs (cargo-inputs 'fastbencode))
19326 (native-inputs
19327 (append
19328 (list python-setuptools-rust
19329 rust
19330 `(,rust "cargo"))
19331 (or (and=> (%current-target-system)
19332 (compose list make-rust-sysroot))
19333 '())))
19334 (home-page "https://github.com/breezy-team/fastbencode")
19335 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19336 (description
19337 "The fastbencode Python package implements the bencode serialization
19338format for storing and transmitting loosely structured data, originally used
19339by BitTorrent.
19340
19341The format can encode four different types of values: byte strings, integers,
19342lists, and dictionaries (associative arrays). It's simple and unaffected by
19343endianness,
19344
19345This package includes both a pure-Python version and an optional C extension
19346based on Cython. Both provide the same functionality, but the C version has
19347significantly better performance.")
19348 (license (list license:expat ; _bencode_py.py
19349 license:gpl2+)))) ; __init__.py
19350
19351(define-public python-fastjsonschema
19352 (package
19353 (name "python-fastjsonschema")
19354 (version "2.21.1")
19355 (source
19356 (origin
19357 (method git-fetch) ; no tests in PyPI release
19358 (uri (git-reference
19359 (url "https://github.com/horejsek/python-fastjsonschema")
19360 (commit (string-append "v" version))))
19361 (file-name (git-file-name name version))
19362 (sha256
19363 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19364 (build-system pyproject-build-system)
19365 (arguments
19366 (list
19367 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19368 (native-inputs
19369 (list python-json-spec
19370 python-jsonschema
19371 python-pytest
19372 python-pytest-benchmark
19373 python-setuptools))
19374 (home-page "https://github.com/horejsek/python-fastjsonschema")
19375 (synopsis "Fast Python implementation of JSON schema")
19376 (description
19377 "This library implements validation of JSON documents by JSON schema for
19378drafts 04, 06 and 07.")
19379 (license license:bsd-3)))
19380
19381(define-public python-nbformat
19382 (package
19383 (name "python-nbformat")
19384 (version "5.10.4")
19385 ;; The PyPi release tarball lacks some test cases and test data.
19386 (source (origin
19387 (method git-fetch)
19388 (uri (git-reference
19389 (url "https://github.com/jupyter/nbformat")
19390 (commit (string-append "v" version))))
19391 (sha256
19392 (base32
19393 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19394 (file-name (git-file-name name version))))
19395 (build-system pyproject-build-system)
19396 (arguments
19397 (list
19398 #:phases
19399 #~(modify-phases %standard-phases
19400 ;; We don't want to use hatch-nodejs just to get a version string.
19401 (add-after 'unpack 'patch-pyproject
19402 (lambda _
19403 (substitute* "pyproject.toml"
19404 ((", \"hatch-nodejs-version\"") "")
19405 (("dynamic = \\[\"version\"\\]")
19406 (string-append "version = \"" #$version "\""))))))))
19407 (propagated-inputs
19408 (list python-fastjsonschema python-jsonschema python-jupyter-core
19409 python-traitlets))
19410 (native-inputs
19411 (list python-hatchling
19412 python-pep440
19413 python-pytest
19414 python-testpath))
19415 (home-page "https://jupyter.org")
19416 (synopsis "Jupyter Notebook format")
19417 (description "This package provides the reference implementation of the
19418Jupyter Notebook format and Python APIs for working with notebooks.")
19419 (license license:bsd-3)))
19420
19421(define-public python-nb-clean
19422 (package
19423 (name "python-nb-clean")
19424 (version "4.0.1")
19425 (source
19426 (origin
19427 (method git-fetch) ; no tests in PyPI
19428 (uri (git-reference
19429 (url "https://github.com/srstevenson/nb-clean")
19430 (commit version)))
19431 (file-name (git-file-name name version))
19432 (sha256
19433 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19434 (build-system pyproject-build-system)
19435 (native-inputs (list python-poetry-core
19436 python-pytest
19437 python-pytest-mock))
19438 (propagated-inputs (list python-nbformat))
19439 (home-page "https://github.com/srstevenson/nb-clean")
19440 (synopsis "Clean Jupyter notebooks for versioning")
19441 (description "This package cleans Jupyter notebooks of cell execution
19442counts, metadata, outputs, and empty cells, preparing them for committing to
19443version control. It provides a Git filter to automatically clean notebooks
19444before they're staged, and can also be used with other version control
19445systems, as a command line tool, and as a Python library.")
19446 (license license:isc)))
19447
19448(define-public python-entrypoints
19449 (package
19450 (name "python-entrypoints")
19451 (version "0.4")
19452 (source
19453 (origin
19454 (method url-fetch)
19455 (uri (pypi-uri "entrypoints" version))
19456 (sha256
19457 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19458 (build-system pyproject-build-system)
19459 (native-inputs
19460 (list python-flit-core
19461 python-pytest))
19462 (home-page "https://github.com/takluyver/entrypoints")
19463 (synopsis "Discover and load entry points from installed Python packages")
19464 (description "Entry points are a way for Python packages to advertise
19465objects with some common interface. The most common examples are
19466@code{console_scripts} entry points, which define shell commands by
19467identifying a Python function to run. The @code{entrypoints} module contains
19468functions to find and load entry points.")
19469 (license license:expat)))
19470
19471(define-public python-epc
19472 (package
19473 (name "python-epc")
19474 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19475 (revision . "0")))
19476 (version (git-version "0.0.5"
19477 (assoc-ref properties 'revision)
19478 (assoc-ref properties 'commit)))
19479 (source
19480 (origin
19481 (method git-fetch)
19482 (uri (git-reference
19483 (url "https://github.com/tkf/python-epc")
19484 (commit (assoc-ref properties 'commit))))
19485 (file-name (git-file-name name version))
19486 (sha256
19487 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19488 (build-system pyproject-build-system)
19489 (arguments (list #:test-backend #~'nose))
19490 (propagated-inputs (list python-sexpdata))
19491 (native-inputs (list python-pynose python-setuptools))
19492 (home-page "https://github.com/tkf/python-epc")
19493 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19494 (description
19495 "Python-EPC can call elisp functions from Python and Python functions
19496from elisp.")
19497 (license license:gpl3)))
19498
19499(define-public python-forex-python
19500 (package
19501 (name "python-forex-python")
19502 (version "1.5")
19503 (source
19504 (origin
19505 (method git-fetch)
19506 (uri (git-reference
19507 (url "https://github.com/MicroPyramid/forex-python")
19508 (commit version)))
19509 (file-name (git-file-name name version))
19510 (sha256
19511 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19512 (build-system pyproject-build-system)
19513 (arguments (list #:tests? #f)) ; Tests require online data.
19514 (native-inputs (list python-setuptools))
19515 (propagated-inputs (list python-requests python-simplejson))
19516 (home-page "https://github.com/MicroPyramid/forex-python")
19517 (synopsis "Foreign exchange rates and currency conversion")
19518 (description
19519 "@code{python-forex-python} can be used to manipulate foreign
19520exchange rates and to operate currency conversions.
19521
19522Features:
19523@itemize
19524@item List all currency rates.
19525@item BitCoin price for all currencies.
19526@item Converting amount to BitCoins.
19527@item Get historical rates for any day since 1999.
19528@item Conversion rate for one currency(ex; USD to INR).
19529@item Convert amount from one currency to other.('USD 10$' to INR).
19530@item Currency symbols.
19531@item Currency names.
19532@end itemize")
19533 (license license:expat)))
19534
19535(define-public python-simpleeval
19536 (package
19537 (name "python-simpleeval")
19538 (version "0.9.12")
19539 (source
19540 (origin
19541 (method git-fetch)
19542 (uri (git-reference
19543 (url "https://github.com/danthedeckie/simpleeval")
19544 (commit version)))
19545 (file-name (git-file-name name version))
19546 (sha256
19547 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19548 (build-system pyproject-build-system)
19549 (native-inputs (list python-pytest python-setuptools))
19550 (home-page "https://github.com/danthedeckie/simpleeval")
19551 (synopsis "Simple, safe single expression evaluator library")
19552 (description
19553 "This package provides a quick single file library for easily adding
19554evaluatable expressions into python projects. Say you want to allow a user
19555to set an alarm volume, which could depend on the time of day, alarm level,
19556how many previous alarms had gone off, and if there is music playing at the
19557time.")
19558 (license license:expat)))
19559
19560(define-public python-haas
19561 ;; A recent revision is required to avoid obsoleted dependencies.
19562 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19563 (revision "0"))
19564 (package
19565 (name "python-haas")
19566 (version (git-version "0.9.0" revision commit))
19567 (source
19568 (origin
19569 (method git-fetch)
19570 (uri (git-reference
19571 (url "https://github.com/scalative/haas")
19572 (commit commit)))
19573 (file-name (git-file-name name version))
19574 (sha256
19575 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19576 (build-system pyproject-build-system)
19577 (propagated-inputs
19578 (list python-stevedore))
19579 (native-inputs
19580 (list python-coverage
19581 python-pytest
19582 python-setuptools
19583 python-testfixtures))
19584 (home-page "https://github.com/scalative/haas")
19585 (synopsis "Extensible Python test runner")
19586 (description "Haas is a python test runner that is backward-compatible
19587with Python's built-in unittest test-cases, but supports more advanced
19588features, such as project-specific plugins.")
19589 (license license:bsd-3))))
19590
19591(define-public python-okonomiyaki
19592 (package
19593 (name "python-okonomiyaki")
19594 (version "3.0.0")
19595 (source
19596 (origin
19597 (method git-fetch)
19598 (uri (git-reference
19599 (url "https://github.com/enthought/okonomiyaki/")
19600 (commit version)))
19601 (file-name (git-file-name name version))
19602 (sha256
19603 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19604 (build-system pyproject-build-system)
19605 (arguments
19606 (list
19607 #:phases
19608 #~(modify-phases %standard-phases
19609 ;; Unknown platform.
19610 (add-before 'check 'delete-fail-tests
19611 (lambda _
19612 (delete-file-recursively
19613 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19614 (native-inputs
19615 (list python-distro
19616 python-haas
19617 python-jsonschema
19618 python-packaging
19619 python-parameterized
19620 python-pytest
19621 python-setuptools
19622 python-testfixtures
19623 python-zipfile2))
19624 (home-page "https://github.com/enthought/okonomiyaki/")
19625 (synopsis "Python library to deal with Enthought-specific metadata")
19626 (description
19627 "Okonomiyaki is a self-contained library aiming at consolidating
19628low-level code used in Enthought-specific egg and runtime archives.")
19629 (license license:bsd-3)))
19630
19631(define-public python-nbconvert
19632 (package
19633 (name "python-nbconvert")
19634 (version "7.17.0")
19635 (source
19636 (origin
19637 (method url-fetch)
19638 (uri (pypi-uri "nbconvert" version))
19639 (sha256
19640 (base32
19641 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19642 (build-system pyproject-build-system)
19643 (arguments
19644 (list
19645 #:test-flags
19646 '(list "-k"
19647 (string-append
19648 ;; These tests require pyppeteer, not yet
19649 ;; available in Guix.
19650 "not test_webpdf_with_chromium"
19651 " and not test_webpdf.py"
19652 ;; These tests require ipywidgets, which would
19653 ;; introduce a dependency cycle.
19654 " and not test_execute_widgets_from_nbconvert"
19655 " and not test_execute_multiple_notebooks"
19656
19657 ;; This test calls nbconvert itself via "sys.executable -m
19658 ;; nbconvert". It's probably harmless.
19659 " and not test_default_config"))
19660 #:phases
19661 #~(modify-phases %standard-phases
19662 (add-after 'unpack 'fix-paths
19663 (lambda* (#:key inputs #:allow-other-keys)
19664 ;; Use pandoc binary from input.
19665 (substitute* "nbconvert/utils/pandoc.py"
19666 (("'pandoc'")
19667 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
19668 ;; Same for LaTeX.
19669 (substitute* "nbconvert/exporters/pdf.py"
19670 (("\"xelatex\"")
19671 (format #f "~s" (search-input-file inputs "bin/xelatex")))
19672 (("\"bibtex\"")
19673 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
19674 ;; Likewise for Inkscape.
19675 (substitute* "nbconvert/preprocessors/svg2pdf.py"
19676 (("inkscape_path = which\\(\"inkscape\")")
19677 (format #f "inkscape_path = ~s"
19678 (search-input-file inputs "bin/inkscape"))))))
19679 (add-after 'unpack 'ignore-deprecation-warnings
19680 (lambda _
19681 (substitute* "pyproject.toml"
19682 (("\"ignore:nbconvert.utils" m)
19683 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
19684 m)))))
19685 (add-before 'check 'pre-check
19686 (lambda _
19687 ;; Tests depend on templates installed to output.
19688 (setenv "JUPYTER_PATH"
19689 (string-append #$output "/share/jupyter:"
19690 (getenv "JUPYTER_PATH")))
19691 ;; jupyter-core demands this
19692 (setenv "JUPYTER_PLATFORM_DIRS" "1")
19693 ;; Tests need writable HOME and TEXMFVAR.
19694 (setenv "HOME" "/tmp")
19695 (setenv "TEXMFVAR" "/tmp"))))))
19696 (inputs
19697 (list inkscape/pinned pandoc))
19698 (native-inputs
19699 (list python-flaky
19700 python-hatchling
19701 python-ipykernel
19702 ;; Adding ipywidgets would create a cycle.
19703 ;;python-ipywidgets
19704 python-pytest
19705 (texlive-local-tree
19706 (list texlive-adjustbox
19707 texlive-booktabs
19708 texlive-caption
19709 texlive-enumitem
19710 texlive-eurosym
19711 texlive-fancyvrb
19712 texlive-float
19713 texlive-fontspec
19714 texlive-grffile
19715 texlive-jknapltx
19716 texlive-parskip
19717 texlive-pdfcol
19718 texlive-rsfs
19719 texlive-soul
19720 texlive-tcolorbox
19721 texlive-titling
19722 texlive-ulem
19723 texlive-unicode-math
19724 texlive-upquote
19725 texlive-xetex))))
19726 (propagated-inputs
19727 (list python-beautifulsoup4
19728 python-bleach
19729 python-defusedxml
19730 python-jinja2
19731 python-jupyter-core
19732 python-jupyterlab-pygments
19733 python-markupsafe
19734 python-mistune
19735 python-nbclient
19736 python-nbformat
19737 python-packaging
19738 python-pandocfilters
19739 python-pygments
19740 python-tinycss2
19741 python-traitlets
19742 ;; Required, even if [serve] is not used.
19743 python-tornado
19744 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
19745 texlive-adjustbox
19746 texlive-amsmath
19747 texlive-booktabs
19748 texlive-caption
19749 texlive-collection-basic
19750 texlive-enumitem
19751 texlive-environ
19752 texlive-etoolbox
19753 texlive-eurosym
19754 texlive-etoolbox
19755 texlive-fancyvrb
19756 texlive-float
19757 texlive-fontspec
19758 texlive-geometry
19759 texlive-grffile
19760 texlive-hyperref
19761 texlive-infwarerr
19762 texlive-jknapltx
19763 texlive-kvoptions
19764 texlive-lm
19765 texlive-lm-math
19766 texlive-mathpazo
19767 texlive-parskip
19768 texlive-pdfcol
19769 texlive-pgf
19770 texlive-rsfs
19771 texlive-soul
19772 texlive-stringenc
19773 texlive-tcolorbox
19774 texlive-titling
19775 texlive-tools
19776 texlive-trimspaces
19777 texlive-ucs
19778 texlive-ulem
19779 texlive-unicode-math
19780 texlive-upquote
19781 texlive-xcolor
19782 texlive-xetex
19783 texlive-zapfding))
19784 (home-page "https://jupyter.org")
19785 (synopsis "Converting Jupyter Notebooks")
19786 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
19787notebooks to various other formats via Jinja templates. It allows you to
19788convert an @code{.ipynb} notebook file into various static formats including:
19789
19790@enumerate
19791@item HTML
19792@item LaTeX
19793@item PDF
19794@item Reveal JS
19795@item Markdown (md)
19796@item ReStructured Text (rst)
19797@item executable script
19798@end enumerate\n")
19799 (license license:bsd-3)))
19800
19801(define-public python-ipywidgets
19802 (package
19803 (name "python-ipywidgets")
19804 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
19805 (version "8.1.4")
19806 (source
19807 (origin
19808 (method url-fetch)
19809 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
19810 (uri (pypi-uri "ipywidgets" version))
19811 (sha256
19812 (base32
19813 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
19814 (build-system pyproject-build-system)
19815 (native-inputs
19816 (list python-ipykernel
19817 python-jsonschema
19818 python-pytest
19819 python-pytz
19820 python-setuptools))
19821 (propagated-inputs
19822 (list python-comm
19823 python-ipython
19824 python-jupyterlab-widgets
19825 python-traitlets
19826 python-widgetsnbextension))
19827 (home-page "https://ipython.org")
19828 (synopsis "IPython HTML widgets for Jupyter")
19829 (description "Ipywidgets are interactive HTML widgets for Jupyter
19830notebooks and the IPython kernel. Notebooks come alive when interactive
19831widgets are used. Users gain control of their data and can visualize changes
19832in the data.")
19833 (license license:bsd-3)))
19834
19835(define-public python-jsbeautifier
19836 (package
19837 (name "python-jsbeautifier")
19838 (version "1.15.3")
19839 (home-page "https://github.com/beautify-web/js-beautify")
19840 (source
19841 (origin
19842 (method git-fetch)
19843 (uri (git-reference
19844 (url home-page)
19845 (commit (string-append "v" version))))
19846 (file-name (git-file-name name version))
19847 (sha256
19848 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
19849 (build-system pyproject-build-system)
19850 (arguments
19851 (list
19852 #:phases
19853 #~(modify-phases %standard-phases
19854 (add-after 'unpack 'chdir
19855 (lambda _
19856 (chdir "python")
19857 (rename-file "setup-js.py" "setup.py"))))))
19858 (propagated-inputs (list python-editorconfig python-six))
19859 (native-inputs (list python-pytest python-setuptools))
19860 (synopsis "JavaScript unobfuscator and beautifier")
19861 (description
19862 "This packages provides tooling to beautify, unpack or deobfuscate
19863JavaScript, leveraging popular online obfuscators.")
19864 (license license:expat)))
19865
19866(define-public python-chardet
19867 (package
19868 (name "python-chardet")
19869 (version "5.2.0")
19870 (source
19871 (origin
19872 (method url-fetch)
19873 (uri (pypi-uri "chardet" version))
19874 (sha256
19875 (base32
19876 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
19877 (native-inputs
19878 (list python-pytest python-setuptools python-wheel))
19879 (build-system pyproject-build-system)
19880 (arguments
19881 (list #:test-flags
19882 ;; Disable test that fails sporadically:
19883 ;; https://github.com/chardet/chardet/issues/256
19884 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
19885 #:phases
19886 #~(modify-phases %standard-phases
19887 ;; This package provides a 'chardetect' executable that only
19888 ;; depends on Python, so customize the wrap phase to avoid
19889 ;; adding pytest and friends in order to save size.
19890 ;; (See also <https://bugs.gnu.org/25235>.)
19891 (replace 'wrap
19892 (lambda* (#:key inputs outputs #:allow-other-keys)
19893 (let* ((sitedir (site-packages inputs outputs))
19894 (python (dirname (dirname
19895 (search-input-file
19896 inputs "bin/python"))))
19897 (python-sitedir
19898 (string-append python "/lib/python"
19899 (python-version python)
19900 "/site-packages")))
19901 (wrap-program (string-append #$output "/bin/chardetect")
19902 `("GUIX_PYTHONPATH" ":" suffix
19903 ,(list sitedir python-sitedir)))))))))
19904 (home-page "https://github.com/chardet/chardet")
19905 (synopsis "Universal encoding detector for Python 2 and 3")
19906 (description
19907 "This package provides @code{chardet}, a Python module that can
19908automatically detect a wide range of file encodings.")
19909 (license license:lgpl2.1+)))
19910
19911(define-public python-charset-normalizer
19912 (package
19913 (name "python-charset-normalizer")
19914 (version "3.4.2")
19915 (source
19916 (origin
19917 (method url-fetch)
19918 (uri (pypi-uri "charset_normalizer" version))
19919 (sha256
19920 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
19921 (build-system pyproject-build-system)
19922 (arguments
19923 (list
19924 #:phases
19925 #~(modify-phases %standard-phases
19926 ;; https://github.com/jawah/charset_normalizer/issues/625
19927 ;; https://github.com/jawah/charset_normalizer/pull/626
19928 (add-after 'unpack 'fix-scripts
19929 (lambda _
19930 (substitute* "pyproject.toml"
19931 (("charset_normalizer:cli.cli_detect")
19932 "charset_normalizer.cli:cli_detect")))))))
19933 (native-inputs
19934 (list python-pytest
19935 python-setuptools))
19936 (home-page "https://github.com/ousret/charset_normalizer")
19937 (synopsis "Universal Charset Detector, alternative to Chardet")
19938 (description "This library helps you read text from an unknown charset
19939encoding. Motivated by @code{chardet}, it tries to resolve the issue by
19940taking a new approach. All IANA character set names for which the Python core
19941library provides codecs are supported.")
19942 (license license:expat)))
19943
19944(define-public python-docopt
19945 (package
19946 (name "python-docopt")
19947 (version "0.6.2")
19948 (source
19949 (origin
19950 (method git-fetch)
19951 (uri (git-reference
19952 (url "https://github.com/docopt/docopt")
19953 (commit version)))
19954 (file-name (git-file-name name version))
19955 (sha256
19956 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19957 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19958 (build-system pyproject-build-system)
19959 ;; tests: 203 passed, 6 warnings
19960 (native-inputs
19961 (list python-pytest-8 python-setuptools))
19962 (home-page "http://docopt.org")
19963 (synopsis "Command-line interface description language for Python")
19964 (description
19965 "This library allows the user to define a command-line interface from a
19966program's help message rather than specifying it programmatically with
19967command-line parsers like @code{getopt} and @code{argparse}.")
19968 (license license:expat)))
19969
19970(define-public python-pythonanywhere
19971 (package
19972 (name "python-pythonanywhere")
19973 (version "0.19.0")
19974 (source
19975 (origin
19976 (method git-fetch)
19977 (uri (git-reference
19978 (url "https://github.com/pythonanywhere/helper_scripts")
19979 (commit (string-append "v" version))))
19980 (file-name (git-file-name name version))
19981 (sha256
19982 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
19983 (build-system pyproject-build-system)
19984 (arguments
19985 (list
19986 #:test-flags
19987 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19988 "-k" (string-join
19989 ;; Network access is required to clone external
19990 ;; repositories.
19991 (list "not test_actually_creates_django_project_in_vir"
19992 "test_actually_downloads_repo"
19993 "test_actually_installing_a_real_package"
19994 "test_actually_works_against_example_repo"
19995 "test_autoconfigure_actually_works_against_example_repo"
19996 "test_exits_because_boolean_not_satisfied"
19997 "test_gets_version"
19998 "test_nuke_option_lets_you_run_twice"
19999 "test_nuke_option_lets_you_run_twice"
20000 "test_start_actually_creates_django_project_in_vir")
20001 " and not "))
20002 #:phases
20003 #~(modify-phases %standard-phases
20004 (add-after 'unpack 'relax-requirements
20005 (lambda _
20006 (substitute* "pyproject.toml"
20007 (("\"schema==.*\",")
20008 "\"schema\","))))
20009 (add-before 'check 'change-home
20010 (lambda _
20011 (setenv "HOME" "/tmp"))))))
20012 (native-inputs
20013 (list python-psutil
20014 python-pytest
20015 python-pytest-mock
20016 python-responses
20017 python-setuptools))
20018 (propagated-inputs
20019 (list python-dateutil
20020 python-docopt
20021 python-packaging
20022 python-pythonanywhere-core
20023 python-requests
20024 python-schema
20025 python-snakesay
20026 python-tabulate
20027 python-typer))
20028 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20029 (synopsis "PythonAnywhere helper tools for users")
20030 (description
20031 "PythonAnywhere provides a command-line interface and an application
20032programming interface that allows managing files Web apps, scheduled
20033tasks and students. It includes single-command deployment for the Django Girls
20034tutorial.")
20035 (license license:expat)))
20036
20037(define-public python-pythonanywhere-core
20038 (package
20039 (name "python-pythonanywhere-core")
20040 (version "0.3.0")
20041 (source
20042 (origin
20043 (method git-fetch)
20044 (uri (git-reference
20045 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20046 (commit (string-append "v" version))))
20047 (file-name (git-file-name name version))
20048 (sha256
20049 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20050 (build-system pyproject-build-system)
20051 (arguments
20052 (list
20053 #:phases
20054 #~(modify-phases %standard-phases
20055 (add-before 'check 'pre-check
20056 (lambda _
20057 (setenv "HOME" "/tmp"))))))
20058 (native-inputs
20059 (list python-poetry-core
20060 python-pytest
20061 python-pytest-mock
20062 python-responses))
20063 (propagated-inputs
20064 (list python-dateutil
20065 python-requests
20066 python-snakesay
20067 python-typing-extensions))
20068 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20069 (synopsis "API wrapper for PythonAnywhere services")
20070 (description
20071 "This package provides an API wrapper for programmatic management of
20072@code{PythonAnywhere} services.")
20073 (license license:expat)))
20074
20075(define-public python-dialog
20076 (package
20077 (name "python-dialog")
20078 (version "3.5.3")
20079 (source
20080 (origin
20081 (method url-fetch)
20082 (uri (pypi-uri "pythondialog" version))
20083 (sha256
20084 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20085 (modules '((guix build utils)))
20086 (snippet #~(delete-file-recursively "doc"))))
20087 (build-system pyproject-build-system)
20088 (arguments
20089 (list
20090 ;; XXX: There are no tests, but some examples. However, they need to
20091 ;; be run on a terminal.
20092 #:tests? #f
20093 #:phases
20094 #~(modify-phases %standard-phases
20095 (add-after 'unpack 'patch-path
20096 (lambda* (#:key inputs #:allow-other-keys)
20097 (substitute* "dialog.py"
20098 (("_path_to_executable\\(dialog\\)")
20099 (format #f "os.path.realpath(~s)"
20100 (search-input-file inputs "bin/dialog")))))))))
20101 (native-inputs (list python-setuptools))
20102 (inputs (list dialog))
20103 (home-page "https://pythondialog.sourceforge.net/")
20104 (synopsis "Python interface to the UNIX dialog utility")
20105 (description
20106 "A Python wrapper for the dialog utility. Its purpose is to provide an
20107easy to use, pythonic and comprehensive Python interface to dialog. This
20108allows one to make simple text-mode user interfaces on Unix-like systems")
20109 (license license:lgpl2.1)))
20110
20111(define-deprecated-package python-pythondialog python-dialog)
20112
20113(define-public python-confection
20114 (package
20115 (name "python-confection")
20116 (version "1.3.3")
20117 (source
20118 (origin
20119 (method git-fetch)
20120 (uri (git-reference
20121 (url "https://github.com/explosion/confection")
20122 (commit (string-append "release-v" version))))
20123 (file-name (git-file-name name version))
20124 (sha256
20125 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20126 (build-system pyproject-build-system)
20127 (arguments
20128 (list
20129 #:phases
20130 #~(modify-phases %standard-phases
20131 (add-before 'check 'patch-pythonpath
20132 (lambda _
20133 (setenv "PYTHONPATH"
20134 (string-append (getcwd) ":"
20135 (getenv "GUIX_PYTHONPATH"))))))))
20136 (propagated-inputs (list python-pydantic python-srsly))
20137 (native-inputs (list python-pytest python-setuptools))
20138 (home-page "https://github.com/explosion/confection")
20139 (synopsis "Config system for Python")
20140 (description
20141 "Confection is a lightweight library that offers a configuration system
20142letting you conveniently describe arbitrary trees of objects.")
20143 (license license:expat)))
20144
20145(define-public python-configobj
20146 (package
20147 (name "python-configobj")
20148 (version "5.0.9")
20149 (source
20150 (origin
20151 (method url-fetch)
20152 (uri (pypi-uri "configobj" version))
20153 (sha256
20154 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20155 (build-system pyproject-build-system)
20156 (native-inputs
20157 (list python-pytest
20158 python-setuptools))
20159 (home-page "https://github.com/DiffSK/configobj")
20160 (synopsis "Config file reading, writing and validation")
20161 (description
20162 "ConfigObj is a simple but powerful config file reader and writer: an
20163 ini file round tripper. Its main feature is that it is very easy to use,
20164with a straightforward programmer’s interface and a simple syntax for config
20165files.")
20166 (license license:bsd-3)))
20167
20168(define-public python-omegaconf
20169 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20170 (revision "1"))
20171 (package
20172 (name "python-omegaconf")
20173 (version (git-version "2.3.0" revision commit))
20174 (source
20175 (origin
20176 (method git-fetch)
20177 (uri (git-reference
20178 (url "https://github.com/omry/omegaconf")
20179 (commit commit)))
20180 (file-name (git-file-name name version))
20181 (modules '((guix build utils)))
20182 (snippet
20183 #~(begin
20184 (delete-file-recursively "build_helpers/bin")
20185 (substitute* "build_helpers/build_helpers.py"
20186 (("java") "antlr4")
20187 (("\"-jar\",") "")
20188 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20189 (sha256
20190 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20191 (build-system pyproject-build-system)
20192 (arguments
20193 (list
20194 #:test-flags
20195 ;; XXX: Those tests currently fail collection.
20196 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20197 "--ignore=tests/test_basic_ops_list.py"
20198 "--ignore=tests/test_merge.py"
20199 "--ignore=tests/test_select.py")
20200 #:phases
20201 #~(modify-phases %standard-phases
20202 (add-after 'unpack 'loosen-requirements
20203 (lambda _
20204 (substitute* "requirements/base.txt"
20205 (("antlr4-python3-runtime==.*")
20206 "antlr4-python3-runtime >=4.9\n"))
20207 ;; Ignore deprecation warnings.
20208 (substitute* "pyproject.toml"
20209 (("-Werror") "")))))))
20210 (native-inputs
20211 (list icedtea
20212 antlr4
20213 python-pytest
20214 python-pytest-mock
20215 python-setuptools
20216 python-wheel))
20217 (propagated-inputs
20218 (list python-antlr4-runtime
20219 python-pydevd
20220 python-pyyaml))
20221 (home-page "https://github.com/omry/omegaconf")
20222 (synopsis "Flexible configuration system")
20223 (description
20224 "OmegaConf is a hierarchical configuration system and supports merging
20225configurations from multiple sources. It provides a consistent API regardless
20226of how the configuration was created.")
20227 (license license:bsd-3))))
20228
20229(define-public python-configargparse
20230 (package
20231 (name "python-configargparse")
20232 (version "1.7")
20233 (source (origin
20234 (method url-fetch)
20235 (uri (pypi-uri "ConfigArgParse" version))
20236 (sha256
20237 (base32
20238 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
20239 (build-system pyproject-build-system)
20240 (propagated-inputs
20241 (list python-pyyaml))
20242 (native-inputs
20243 (list python-mock python-pytest python-setuptools python-wheel))
20244 (synopsis "Replacement for argparse")
20245 (description "A drop-in replacement for argparse that allows options to also
20246be set via config files and/or environment variables.")
20247 (home-page "https://github.com/bw2/ConfigArgParse")
20248 (license license:expat)))
20249
20250(define-public python-connection-pool
20251 (package
20252 (name "python-connection-pool")
20253 (version "0.0.3")
20254 (source
20255 (origin
20256 (method git-fetch)
20257 (uri (git-reference
20258 (url "https://github.com/zhouyl/ConnectionPool")
20259 (commit version)))
20260 (file-name (git-file-name name version))
20261 (sha256
20262 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20263 (build-system pyproject-build-system)
20264 (arguments (list #:tests? #f)) ; No tests.
20265 (native-inputs (list python-setuptools))
20266 (home-page "https://github.com/zhouyl/ConnectionPool")
20267 (synopsis "Thread-safe connection pool")
20268 (description
20269 "This package provides a library implementing a thread-safe connection
20270pool.")
20271 (license license:expat)))
20272
20273(define-public python-argparse-dataclass
20274 (package
20275 (name "python-argparse-dataclass")
20276 (version "2.0.0")
20277 (source
20278 (origin
20279 (method git-fetch) ;no tests in PyPI archive
20280 (uri (git-reference
20281 (url "https://github.com/mivade/argparse_dataclass")
20282 (commit version)))
20283 (file-name (git-file-name name version))
20284 (sha256
20285 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20286 (build-system pyproject-build-system)
20287 (native-inputs (list python-pytest python-setuptools python-wheel))
20288 (home-page "https://github.com/mivade/argparse_dataclass")
20289 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20290 (description
20291 "This package provides declarative command-line interfaces using argparse
20292and dataclasses.")
20293 (license license:expat)))
20294
20295(define-public python-argparse-manpage
20296 (package
20297 (name "python-argparse-manpage")
20298 (version "4.7")
20299 (source
20300 (origin
20301 (method url-fetch)
20302 (uri (pypi-uri "argparse_manpage" version))
20303 (sha256
20304 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20305 (build-system pyproject-build-system)
20306 (arguments
20307 (list
20308 #:test-flags
20309 ;; Tests require PIP.
20310 #~(list "--ignore=tests/test_examples.py")))
20311 (native-inputs
20312 (list python-pytest
20313 python-setuptools))
20314 (home-page "https://github.com/praiskup/argparse-manpage")
20315 (synopsis "Build manual page from Python's ArgumentParser object")
20316 (description
20317 "This package provides tools to build manual pages from Python's
20318@code{ArgumentParser} object.")
20319 (license license:asl2.0)))
20320
20321(define-public python-atomicwrites
20322 (package
20323 (name "python-atomicwrites")
20324 (version "1.4.0")
20325 (source
20326 (origin
20327 (method git-fetch)
20328 (uri (git-reference
20329 (url "https://github.com/untitaker/python-atomicwrites")
20330 (commit version)))
20331 (file-name (git-file-name name version))
20332 (sha256
20333 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20334 (build-system pyproject-build-system)
20335 (native-inputs (list python-pytest python-setuptools))
20336 (synopsis "Atomic file writes in Python")
20337 (description
20338 "Library for atomic file writes using platform dependent tools
20339for atomic file system operations.")
20340 (home-page "https://github.com/untitaker/python-atomicwrites")
20341 (license license:expat)))
20342
20343(define-public python-qstylizer
20344 (package
20345 (name "python-qstylizer")
20346 (version "0.2.4")
20347 (source
20348 (origin
20349 (method git-fetch)
20350 (uri (git-reference
20351 (url "https://github.com/blambright/qstylizer")
20352 (commit version)))
20353 (file-name (git-file-name name version))
20354 (sha256
20355 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20356 (build-system pyproject-build-system)
20357 (native-inputs
20358 (list python-pbr
20359 python-pytest
20360 python-pytest-mock
20361 python-setuptools
20362 python-wheel))
20363 (propagated-inputs
20364 (list python-inflection
20365 python-tinycss2))
20366 (home-page "https://github.com/blambright/qstylizer")
20367 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20368 (description "@code{qstylizer} is a Python package designed to help with
20369the construction of PyQt/PySide stylesheets.")
20370 (license license:expat)))
20371
20372(define-public python-click-threading
20373 (package
20374 (name "python-click-threading")
20375 (version "0.5.0")
20376 (source
20377 (origin
20378 (method git-fetch)
20379 (uri (git-reference
20380 (url "https://github.com/click-contrib/click-threading")
20381 (commit version)))
20382 (file-name (git-file-name name version))
20383 (sha256
20384 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20385 (build-system pyproject-build-system)
20386 (native-inputs (list python-pytest python-setuptools))
20387 (propagated-inputs (list python-click))
20388 (synopsis "Utilities for multithreading in Click")
20389 (description
20390 "This package provides utilities for multithreading in Click
20391applications.")
20392 (home-page "https://github.com/click-contrib/click-threading")
20393 (license license:expat)))
20394
20395(define-public python-click-log
20396 (package
20397 (name "python-click-log")
20398 (version "0.3.2")
20399 (source
20400 (origin
20401 (method git-fetch)
20402 (uri (git-reference
20403 (url "https://github.com/click-contrib/click-log")
20404 (commit version)))
20405 (file-name (git-file-name name version))
20406 (sha256
20407 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20408 (build-system pyproject-build-system)
20409 (native-inputs (list python-pytest python-setuptools))
20410 (propagated-inputs (list python-click))
20411 (synopsis "Logging for click applications")
20412 (description
20413 "This package provides a Python library for logging Click applications.")
20414 (home-page "https://github.com/click-contrib/click-log")
20415 (license license:expat)))
20416
20417(define-public python-click-default-group
20418 (package
20419 (name "python-click-default-group")
20420 (version "1.2.4")
20421 (source
20422 (origin
20423 (method git-fetch) ; no tests in PyPI release
20424 (uri (git-reference
20425 (url "https://github.com/click-contrib/click-default-group")
20426 (commit (string-append "v" version))))
20427 (file-name (git-file-name name version))
20428 (sha256
20429 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20430 (build-system pyproject-build-system)
20431 (propagated-inputs
20432 (list python-click))
20433 (native-inputs
20434 (list python-flit-core python-pytest))
20435 (synopsis "Extends click.Group")
20436 (description "This package extends click.Group to invoke a command without
20437explicit subcommand name.")
20438 (home-page "https://github.com/click-contrib/click-default-group")
20439 (license license:bsd-3)))
20440
20441(define-public python-apipkg
20442 (package
20443 (name "python-apipkg")
20444 (version "3.0.2")
20445 (source
20446 (origin
20447 (method url-fetch)
20448 (uri (pypi-uri "apipkg" version))
20449 (sha256
20450 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20451 (build-system pyproject-build-system)
20452 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20453 (native-inputs
20454 (list python-hatch-vcs
20455 python-hatchling))
20456 (home-page "https://github.com/pytest-dev/apipkg")
20457 (synopsis "Namespace control and lazy-import mechanism")
20458 (description "With apipkg you can control the exported namespace of a Python
20459package and greatly reduce the number of imports for your users. It is a small
20460pure Python module that works on virtually all Python versions.")
20461 (license license:expat)))
20462
20463(define-public python-essentials
20464 (package
20465 (name "python-essentials")
20466 (version "1.1.8")
20467 (source
20468 (origin
20469 (method git-fetch)
20470 (uri (git-reference
20471 (url "https://github.com/Neoteroi/essentials")
20472 (commit (string-append "v" version))))
20473 (file-name (git-file-name name version))
20474 (sha256
20475 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20476 (build-system pyproject-build-system)
20477 (native-inputs
20478 (list python-hatchling
20479 python-pydantic
20480 python-pytest-asyncio))
20481 (home-page "https://github.com/Neoteroi/essentials/wiki")
20482 (synopsis
20483 "Utility functions, exceptions, and classes for Python applications")
20484 (description
20485 "Essentials is a collection of functions, exceptions, and classes for Python
20486applications. Examples of utilities are exceptions for common scenarios,
20487friendly JSON encoder, decorators for retries and logging.")
20488 (license license:expat)))
20489
20490(define-public python-execnet
20491 (package
20492 (name "python-execnet")
20493 (version "2.1.2")
20494 (source
20495 (origin
20496 (method git-fetch)
20497 (uri (git-reference
20498 (url "https://github.com/pytest-dev/execnet")
20499 (commit (string-append "v" version))))
20500 (file-name (git-file-name name version))
20501 (sha256
20502 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20503 (build-system pyproject-build-system)
20504 (arguments
20505 (list
20506 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20507 #:phases
20508 #~(modify-phases %standard-phases
20509 (add-before 'check 'pre-check
20510 (lambda _
20511 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20512 ;; test in 'testing/test_gateway.py'.
20513 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20514 (native-inputs
20515 (list python-hatchling
20516 python-hatch-vcs
20517 python-pytest-bootstrap))
20518 (home-page "https://codespeak.net/execnet/")
20519 (synopsis "Rapid multi-Python deployment")
20520 (description
20521 "Execnet provides a share-nothing model with channel-send/receive communication
20522for distributing execution across many Python interpreters across version,
20523platform and network barriers. It has a minimal and fast API targeting the
20524following uses:
20525
20526@enumerate
20527@item distribute tasks to (many) local or remote CPUs
20528@item write and deploy hybrid multi-process applications
20529@item write scripts to administer multiple environments
20530@end enumerate")
20531 (license license:expat)))
20532
20533(define-public python-icalendar
20534 (package
20535 (name "python-icalendar")
20536 (version "6.3.2")
20537 (source
20538 (origin
20539 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20540 (uri (pypi-uri "icalendar" version))
20541 (sha256
20542 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20543 (build-system pyproject-build-system)
20544 (arguments
20545 (list
20546 ;; tests: 8995 passed, 21 skipped, 2 deselected
20547 #:test-flags
20548 #~(list
20549 "-k"
20550 (string-append
20551 ;; See: <https://github.com/collective/icalendar/issues/812>.
20552 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20553 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20554 (native-inputs
20555 (list python-hatch-vcs
20556 python-hatchling
20557 python-pytest
20558 python-pytz))
20559 (propagated-inputs
20560 (list python-dateutil
20561 python-tzdata))
20562 (home-page "https://github.com/collective/icalendar")
20563 (synopsis "Python library for parsing and generating iCalendar files")
20564 (description
20565 "@code{icalendar} is a Python library for parsing and generating
20566iCalendar files.")
20567 (license license:bsd-2)))
20568
20569(define-public python-args
20570 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20571 (revision "0"))
20572 (package
20573 (name "python-args")
20574 (version (git-version "0.1.0" revision commit))
20575 (source
20576 (origin
20577 (method git-fetch)
20578 (uri (git-reference
20579 (url "https://github.com/kennethreitz-archive/args")
20580 (commit commit)))
20581 (file-name (git-file-name name version))
20582 (sha256
20583 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20584 (build-system pyproject-build-system)
20585 (arguments
20586 (list
20587 #:tests? #f ; XXX: python-nose is deprecated.
20588 #:phases
20589 #~(modify-phases %standard-phases
20590 (add-after 'unpack 'patch-args.py
20591 (lambda _
20592 (substitute* "args.py"
20593 (("basestring")
20594 "str")))))))
20595 (native-inputs (list python-setuptools python-wheel))
20596 (home-page "https://github.com/kennethreitz-archive/args")
20597 (synopsis "Command-line argument parser")
20598 (description
20599 "This library provides a Python module to parse command-line arguments.")
20600 (license license:bsd-3))))
20601
20602(define-public python-clint
20603 (package
20604 (name "python-clint")
20605 (version "0.5.1")
20606 (source (origin
20607 (method url-fetch)
20608 (uri (pypi-uri "clint" version))
20609 (sha256
20610 (base32
20611 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20612 (build-system pyproject-build-system)
20613 (native-inputs
20614 (list python-pytest python-setuptools python-wheel))
20615 (propagated-inputs
20616 (list python-args))
20617 (home-page "https://github.com/kennethreitz/clint")
20618 (synopsis "Command-line interface tools")
20619 (description
20620 "Clint is a Python module filled with a set of tools for developing
20621command-line applications, including tools for colored and indented
20622output, progress bar display, and pipes.")
20623 (license license:isc)))
20624
20625(define-public python-rply
20626 (package
20627 (name "python-rply")
20628 (version "0.7.8")
20629 (source
20630 (origin
20631 (method git-fetch)
20632 (uri (git-reference
20633 (url "https://github.com/alex/rply")
20634 (commit (string-append "v" version))))
20635 (file-name (git-file-name name version))
20636 (sha256
20637 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20638 (build-system pyproject-build-system)
20639 (arguments
20640 (list
20641 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20642 #:phases
20643 #~(modify-phases %standard-phases
20644 (add-before 'check 'fix-pytest-use
20645 (lambda _
20646 (substitute* (find-files "tests" "\\.py$")
20647 (("import py")
20648 "import pytest")
20649 (("py\\.test")
20650 "pytest"))
20651 (setenv "HOME" (getcwd)))))))
20652 (native-inputs (list python-pytest python-setuptools))
20653 (propagated-inputs (list python-appdirs))
20654 (home-page "https://github.com/alex/rply")
20655 (synopsis "Parser generator for Python")
20656 (description
20657 "This package provides a pure Python based parser generator, that also
20658works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20659with a new public API, and RPython support.")
20660 (license license:bsd-3)))
20661
20662(define-public python-hy
20663 (package
20664 (name "python-hy")
20665 (version "1.3.0")
20666 (source
20667 (origin
20668 (method git-fetch)
20669 (uri (git-reference
20670 (url "https://github.com/hylang/hy")
20671 (commit version)))
20672 (file-name (git-file-name name version))
20673 (sha256
20674 (base32 "0sdv5amhl0p4f84bmw2iy85a7rrkjg969l2gcr6cfl03lb0nxj87"))))
20675 (build-system pyproject-build-system)
20676 (arguments
20677 (list
20678 ;; This test expects the hy executable to be called 'hy', but in Guix
20679 ;; it's .hy-real.
20680 #:test-flags #~(list "-k" "not test_sys_executable")))
20681 (native-inputs (list python-pytest python-setuptools))
20682 (propagated-inputs (list python-funcparserlib))
20683 (home-page "https://hylang.org/hy/doc")
20684 (synopsis "Lisp frontend to Python")
20685 (description
20686 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
20687its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
20688Python at your fingertips, in Lisp form.")
20689 (license license:expat)))
20690
20691(define-public python-hissp
20692 (package
20693 (name "python-hissp")
20694 (version "0.5.0")
20695 (source
20696 (origin
20697 (method git-fetch)
20698 (uri (git-reference
20699 (url "https://github.com/gilch/hissp")
20700 (commit (string-append "v" version))))
20701 (file-name (git-file-name name version))
20702 (sha256
20703 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
20704 (build-system pyproject-build-system)
20705 (arguments (list #:test-backend #~'unittest))
20706 (native-inputs (list python-hypothesis python-setuptools))
20707 (home-page "https://github.com/gilch/hissp")
20708 (synopsis "It's Python with a Lissp")
20709 (description
20710 "Hissp is a modular Lisp implementation that compiles to a functional
20711subset of Python—Syntactic macro metaprogramming with full access to the
20712Python ecosystem.")
20713 (license license:asl2.0)))
20714
20715(define-public python-promise
20716 (package
20717 (name "python-promise")
20718 (version "2.3.0")
20719 (source
20720 (origin
20721 (method git-fetch)
20722 (uri (git-reference
20723 (url "https://github.com/syrusakbary/promise")
20724 (commit (string-append "v" version))))
20725 (file-name (git-file-name name version))
20726 (sha256
20727 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
20728 (build-system pyproject-build-system)
20729 (arguments
20730 (list
20731 #:test-flags
20732 #~(list "--ignore=tests/test_benchmark.py"
20733 ;; Issues with pytest-asyncio
20734 "--ignore=tests/test_awaitable.py"
20735 "-k" (string-join
20736 (list "not test_issue_9_safe"
20737 ;; Stacktrace issues.
20738 "test_thrown_exceptions_have_stacktrace"
20739 "test_thrown_exceptions_preserve_stacktrace")
20740 " and not "))))
20741 (native-inputs
20742 (list python-mock
20743 python-pytest
20744 python-pytest-asyncio
20745 python-setuptools))
20746 (propagated-inputs (list python-six))
20747 (home-page "https://github.com/syrusakbary/promise")
20748 (synopsis "Promises/A+ implementation for Python")
20749 (description
20750 "This package provides an implementation of Promises in Python. It is a
20751super set of Promises/A+ designed to have readable, performant code and to
20752provide just the extensions that are absolutely necessary for using promises
20753in Python.")
20754 (license license:expat)))
20755
20756(define-public python-progress
20757 (package
20758 (name "python-progress")
20759 (version "1.6")
20760 (source
20761 (origin
20762 (method git-fetch)
20763 (uri (git-reference
20764 (url "https://github.com/verigak/progress/")
20765 (commit version)))
20766 (file-name (git-file-name name version))
20767 (sha256
20768 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
20769 (snippet #~(delete-file "demo.gif"))))
20770 (build-system pyproject-build-system)
20771 (arguments
20772 (list
20773 #:test-backend #~'custom
20774 #:test-flags #~(list "test_progress.py")))
20775 (native-inputs (list python-setuptools))
20776 (home-page "https://github.com/verigak/progress/")
20777 (synopsis "Progress reporting bars for Python")
20778 (description
20779 "This Python package provides progress reporting for visual of progress
20780of long running operations. There are multiple choices of progress bars and
20781spinners, with customizable options, such as width, fill character, and
20782suffix.")
20783 (license license:isc)))
20784
20785(define-public python-progressbar2
20786 (package
20787 (name "python-progressbar2")
20788 (version "4.5.0")
20789 (source
20790 (origin
20791 (method url-fetch)
20792 (uri (pypi-uri "progressbar2" version))
20793 (sha256
20794 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
20795 (build-system pyproject-build-system)
20796 (arguments
20797 (list
20798 #:test-flags #~(list "--pyargs" "progressbar" "tests")
20799 #:phases
20800 #~(modify-phases %standard-phases
20801 (add-after 'unpack 'fix-pytest-config
20802 (lambda _
20803 ;; Drop test coverage requirements.
20804 (substitute* "pytest.ini"
20805 ((".*-cov.*") "")))))))
20806 (native-inputs
20807 (list python-dill
20808 python-pytest
20809 python-freezegun
20810 python-setuptools
20811 python-setuptools-scm
20812 python-wheel))
20813 (propagated-inputs
20814 (list python-utils))
20815 (home-page "https://github.com/WoLpH/python-progressbar")
20816 (synopsis "Text progress bar library for Python")
20817 (description
20818 "This package provides a Python progressbar library to provide
20819visual (yet text based) progress to long running operations.")
20820 (license license:bsd-3)))
20821
20822(define-public python-progressbar33
20823 (package
20824 (name "python-progressbar33")
20825 (version "2.4")
20826 (source
20827 (origin
20828 (method git-fetch)
20829 (uri (git-reference
20830 (url "https://github.com/germangh/python-progressbar")
20831 (commit (string-append "v" version))))
20832 (file-name (git-file-name name version))
20833 (sha256
20834 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
20835 (build-system pyproject-build-system)
20836 (arguments
20837 (list
20838 #:test-backend #~'custom
20839 #:test-flags #~(list "examples.py")))
20840 (native-inputs (list python-setuptools))
20841 (home-page "https://github.com/germangh/python-progressbar")
20842 (synopsis "Text progress bar library for Python")
20843 (description
20844 "This package provides a text progress bar library for Python. This
20845version only differs from the original @code{progressbar} package in that it
20846uses relative package imports instead of absolute imports, which is necessary
20847for the module to work under Python 3.3.")
20848 ;; Either or both of these licenses may be selected.
20849 (license (list license:lgpl2.1+ license:bsd-3))))
20850
20851;; XXX: Not maintained since 2012.
20852(define-public python-monthdelta
20853 (package
20854 (name "python-monthdelta")
20855 (version "0.9.1")
20856 (source
20857 (origin
20858 (method url-fetch)
20859 (uri (pypi-uri "MonthDelta" version))
20860 (sha256
20861 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
20862 (build-system pyproject-build-system)
20863 (arguments
20864 (list #:tests? #f)) ; No tests.
20865 (native-inputs (list python-setuptools))
20866 (home-page "http://packages.python.org/MonthDelta")
20867 (synopsis "Date computations with months")
20868 (description
20869 "MonthDelta provides functionality to do date computations with months.")
20870 (license license:expat)))
20871
20872(define-public python-moto
20873 (package
20874 (name "python-moto")
20875 (version "5.1.20")
20876 (source (origin
20877 (method url-fetch)
20878 (uri (pypi-uri "moto" version))
20879 (sha256
20880 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
20881 (build-system pyproject-build-system)
20882 (arguments
20883 (list
20884 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
20885 #:test-flags
20886 #~(list "-m" "not network and not requires_docker"
20887 ;; Not all of the tests are thread save, see:
20888 ;; <https://github.com/getmoto/moto/issues/7786>.
20889 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
20890 "-k" (string-join
20891 ;; Network access is required.
20892 (list "not test_passthrough_calls_for_entire_service"
20893 "test_passthrough_calls_for_specific_url"
20894 "test_passthrough_calls_for_wildcard_urls"
20895 "test_put_record_batch_http_destination"
20896 "test_put_record_http_destination"
20897 "test_s3_server_post_cors_multiple_origins"
20898 "test_with_custom_request_header"
20899 ;; AttributeError: 'ImportError' object has no
20900 ;; attribute 'message'
20901 "test_batch_update"
20902 "test_batch_update__not_enough_parameters"
20903 "test_execute_transaction"
20904 "test_without_primary_key_in_where_clause")
20905 " and not ")
20906 "tests")
20907 #:phases
20908 #~(modify-phases %standard-phases
20909 (add-after 'unpack 'patch-hardcoded-executable-names
20910 (lambda* (#:key inputs #:allow-other-keys)
20911 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20912 (substitute* "moto/batch/models.py"
20913 (("/bin/sh") bash-exec))
20914 (substitute* (find-files "tests" "\\.py$")
20915 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20916 (add-before 'check 'pre-check
20917 (lambda _
20918 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20919 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20920 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20921 (native-inputs
20922 (list python-flask
20923 python-flask-cors
20924 python-freezegun
20925 python-pycognito
20926 python-pyotp
20927 python-pytest
20928 python-setuptools))
20929 (inputs
20930 (list bash-minimal))
20931 (propagated-inputs
20932 (list python-antlr4-runtime
20933 python-aws-xray-sdk
20934 python-boto3
20935 python-botocore
20936 python-cfn-lint
20937 python-cryptography
20938 python-dateutil
20939 python-graphql-core
20940 python-jinja2
20941 python-joserfc
20942 python-jsonpath-ng
20943 python-multipart
20944 python-openapi-spec-validator
20945 python-py-partiql-parser
20946 python-pyparsing
20947 python-requests
20948 python-responses
20949 python-werkzeug
20950 python-xmltodict))
20951 (home-page "https://github.com/spulec/moto")
20952 (synopsis "Mock out the boto library")
20953 (description
20954 "@code{moto} is a library designed to easily mock out the
20955@code{boto} library.")
20956 (license license:asl2.0)))
20957
20958(define-public python-plumbum
20959 (package
20960 (name "python-plumbum")
20961 (version "1.7.0")
20962 (source
20963 (origin
20964 (method git-fetch)
20965 (uri (git-reference
20966 (url "https://github.com/tomerfiliba/plumbum")
20967 (commit (string-append "v" version))))
20968 (file-name (git-file-name name version))
20969 (sha256
20970 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20971 (build-system pyproject-build-system)
20972 (arguments
20973 (list
20974 #:test-flags
20975 #~(list "--ignore=tests/test_remote.py"
20976 "--ignore=tests/test_putty.py"
20977 "--ignore=tests/test_sudo.py"
20978 "-k"
20979 (string-join (list "not test_home"
20980 "test_iter_lines_error"
20981 "test_quoting"
20982 "test_copy_move_delete")
20983 " and not "))))
20984 (native-inputs
20985 (list procps
20986 python-psutil
20987 python-pytest
20988 python-setuptools
20989 python-setuptools-scm
20990 python-wheel))
20991 (home-page "https://plumbum.readthedocs.io")
20992 (synopsis "Python shell combinators library")
20993 (description
20994 "Plumbum is a library of tools for replacing shell scripts with Python
20995code.")
20996 (license license:expat)))
20997
20998(define-public python-deprecation
20999 (package
21000 (name "python-deprecation")
21001 (version "2.1.0")
21002 (source
21003 (origin
21004 (method url-fetch)
21005 (uri (pypi-uri "deprecation" version))
21006 (sha256
21007 (base32
21008 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21009 (build-system pyproject-build-system)
21010 (arguments
21011 (list
21012 #:test-backend #~'unittest
21013 #:phases
21014 #~(modify-phases %standard-phases
21015 (add-after 'unpack 'drop-unittest2
21016 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21017 (lambda _
21018 (substitute* "tests/test_deprecation.py"
21019 (("import unittest2")
21020 "import unittest as unittest2")))))))
21021 (native-inputs
21022 (list python-setuptools))
21023 (propagated-inputs
21024 (list python-packaging))
21025 (home-page "https://deprecation.readthedocs.io/")
21026 (synopsis "Python library to handle automated deprecations")
21027 (description
21028 "This is a library that enables automated deprecations. It offers the
21029@code{deprecated()} decorator to wrap functions, providing proper warnings
21030both in documentation and via Python’s warnings system, as well as the
21031@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21032that deprecated code is eventually removed.")
21033 (license license:asl2.0)))
21034
21035(define-public python-jmespath
21036 (package
21037 (name "python-jmespath")
21038 (version "1.0.1")
21039 (source
21040 (origin
21041 (method url-fetch)
21042 (uri (pypi-uri "jmespath" version))
21043 (sha256
21044 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21045 (build-system pyproject-build-system)
21046 (native-inputs
21047 (list python-pytest
21048 python-setuptools))
21049 (home-page "https://github.com/jmespath/jmespath.py")
21050 (synopsis "JSON Matching Expressions")
21051 (description
21052 "JMESPath (pronounced “james path”) is a Python library that allows one
21053to declaratively specify how to extract elements from a JSON document.")
21054 (license license:expat)))
21055
21056(define-public python-asteval
21057 (package
21058 (name "python-asteval")
21059 (version "1.0.6")
21060 (source
21061 (origin
21062 (method url-fetch)
21063 (uri (pypi-uri "asteval" version))
21064 (sha256
21065 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21066 (build-system pyproject-build-system)
21067 (native-inputs
21068 (list python-pytest python-setuptools python-setuptools-scm))
21069 (home-page "https://github.com/newville/asteval")
21070 (synopsis "Minimalistic evaluator of Python expressions")
21071 (description
21072 "This package provides a minimalistic evaluator of Python expression
21073using the @code{ast} module.")
21074 (license license:expat)))
21075
21076(define-public python-lmfit
21077 (package
21078 (name "python-lmfit")
21079 (version "1.3.4")
21080 (source
21081 (origin
21082 (method git-fetch)
21083 (uri (git-reference
21084 (url "https://github.com/lmfit/lmfit-py")
21085 (commit version)))
21086 (file-name (git-file-name name version))
21087 (sha256
21088 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21089 (build-system pyproject-build-system)
21090 (native-inputs
21091 (list python-pytest
21092 python-setuptools
21093 python-setuptools-scm))
21094 (propagated-inputs
21095 (list python-asteval
21096 python-dill
21097 python-numpy
21098 python-scipy
21099 python-uncertainties))
21100 (home-page "https://lmfit.github.io/lmfit-py/")
21101 (synopsis "Least-Squares minimization with bounds and constraints")
21102 (description
21103 "Lmfit provides a high-level interface to non-linear optimization and
21104curve fitting problems for Python. It builds on and extends many of the
21105optimization methods of @code{scipy.optimize}. Initially inspired by (and
21106named for) extending the Levenberg-Marquardt method from
21107@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21108enhancements to optimization and data fitting problems.")
21109 (license license:bsd-3)))
21110
21111(define-public python-bokeh
21112 (package
21113 (name "python-bokeh")
21114 (version "3.7.3")
21115 (source (origin
21116 (method url-fetch)
21117 (uri (pypi-uri "bokeh" version))
21118 (sha256
21119 (base32
21120 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
21121 (build-system pyproject-build-system)
21122 (arguments
21123 (list
21124 ;; FIXME: Most of the tests do not work, figure out how to enable some
21125 ;; portion.
21126 #:tests? #f
21127 #:test-flags
21128 '(list
21129 ;; These require selenium.
21130 "--ignore=tests/unit/bokeh/io/test_export.py"
21131 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
21132 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
21133
21134 ;; Doesn't find ManagedServerLoop fixture
21135 "--ignore=tests/unit/bokeh/test_client_server.py"
21136
21137 ;; This fails because of the Guix wrapper around pytest
21138 "--ignore=tests/unit/bokeh/io/test_util__io.py"
21139
21140 ;; Fixture ipython not found.
21141 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
21142 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
21143
21144 ;; pd fixture not found.
21145 "--ignore=tests/unit/bokeh/models/test_mappers.py"
21146 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
21147 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
21148 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
21149 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
21150 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
21151 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
21152 "--ignore=tests/unit/bokeh/core/property/test_container.py"
21153 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
21154 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
21155 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
21156
21157 ;; nx fixture not found.
21158 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
21159 "--ignore=tests/unit/bokeh/models/test_graphs.py"
21160 "--ignore=tests/unit/bokeh/io/test_showing.py"
21161 "--ignore=tests/unit/bokeh/document/test_events__document.py"
21162
21163 ;; These tests need external sample data
21164 "--ignore-glob=tests/unit/bokeh/sampledata/*"
21165
21166 ;; Attempts to install something via npm.
21167 "--ignore=tests/unit/bokeh/test_ext.py"
21168
21169 ;; More failures due to set up problems.
21170 "--ignore=tests/unit/bokeh/server/test_server__server.py"
21171 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
21172 "--ignore=tests/unit/bokeh/util/test_serialization.py"
21173 "--ignore=tests/unit/bokeh/util/test_hex.py"
21174 "--ignore=tests/unit/bokeh/models/test_sources.py"
21175 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
21176
21177 "-k"
21178 (string-append
21179 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
21180 ;; Did you mean: 'assert_called_once_with'?
21181 "not test_set_from_json"
21182
21183 ;; XXX: This one test transforms a gif of a red box. It transforms
21184 ;; it all right but the base64 doesn't look as expected, probably
21185 ;; because of a change in pillow.
21186 " and not test_transform_PIL"))
21187 #:phases
21188 #~(modify-phases %standard-phases
21189 (add-before 'build 'set-version
21190 (lambda _
21191 (substitute* "pyproject.toml"
21192 ((", \"setuptools-git-versioning\"") "")
21193 (("dynamic = \\[\"version\"\\]")
21194 (string-append "version = '" #$version "'"))))))))
21195 (propagated-inputs
21196 (list node-lts
21197 python-contourpy
21198 python-jinja2
21199 python-narwhals
21200 python-numpy
21201 python-packaging
21202 python-pandas
21203 python-pillow
21204 python-pyyaml
21205 python-tornado
21206 python-xyzservices))
21207 (native-inputs
21208 (list python-beautifulsoup4
21209 python-dateutil
21210 python-flaky
21211 python-mock
21212 python-nbconvert
21213 python-pandas
21214 python-pytest
21215 python-pytz
21216 python-requests
21217 python-setuptools
21218 python-wheel))
21219 (home-page "https://github.com/bokeh/bokeh")
21220 (synopsis "Interactive plots and applications in the browser from Python")
21221 (description
21222 "This package provides tools for interactive plots and applications in the
21223browser from Python.")
21224 (license license:bsd-3)))
21225
21226;; TODO: Move to python-web.
21227(define-public python-botocore
21228 ;; Note: When updating botocore, also make sure that boto3 and awscli
21229 ;; are compatible.
21230 (package
21231 (name "python-botocore")
21232 (version "1.42.5")
21233 (source
21234 (origin
21235 (method url-fetch)
21236 (uri (pypi-uri "botocore" version))
21237 (sha256
21238 (base32
21239 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21240 (build-system pyproject-build-system)
21241 (arguments
21242 (list
21243 ;; tests: 4496 passed, 87 skipped
21244 #:test-flags
21245 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21246 ;; The full test suite is huge, run some of it's portion.
21247 "--ignore=tests/integration"
21248 "--ignore=tests/functional")))
21249 (native-inputs
21250 (list python-jsonschema
21251 python-pytest
21252 python-pytest-xdist
21253 python-setuptools))
21254 (propagated-inputs
21255 (list python-dateutil
21256 python-jmespath
21257 python-urllib3))
21258 (home-page "https://github.com/boto/botocore")
21259 (synopsis "Low-level interface to AWS")
21260 (description
21261 "Botocore is a Python library that provides a low-level interface to the
21262Amazon Web Services (AWS) API.")
21263 (license license:asl2.0)))
21264
21265(define-public python-boto3
21266 (package
21267 (name "python-boto3")
21268 (version "1.42.5")
21269 (source
21270 (origin
21271 (method git-fetch)
21272 (uri (git-reference
21273 (url "https://github.com/boto/boto3")
21274 (commit version)))
21275 (file-name (git-file-name name version))
21276 (sha256
21277 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21278 (build-system pyproject-build-system)
21279 (arguments
21280 (list
21281 ;; tests: 1435 passed, 22 skipped, 1 warning
21282 #:test-flags
21283 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21284 ;; Integration tests are trying to connect to AWS.
21285 "--ignore=tests/integration")))
21286 (native-inputs
21287 (list python-mock
21288 python-pytest
21289 python-pytest-xdist
21290 python-setuptools))
21291 (propagated-inputs
21292 (list python-botocore
21293 python-jmespath
21294 python-s3transfer))
21295 (home-page "https://github.com/boto/boto3")
21296 (synopsis "AWS SDK for Python")
21297 (description
21298 "Boto3 is a Python library for writing programs that interact with
21299@acronym{AWS,Amazon Web Services}.")
21300 (license license:asl2.0)))
21301
21302(define-public python-pyfiglet
21303 (package
21304 (name "python-pyfiglet")
21305 (version "1.0.4")
21306 (source
21307 (origin
21308 (method git-fetch)
21309 (uri (git-reference
21310 (url "https://github.com/pwaller/pyfiglet")
21311 (commit (string-append "v" version))))
21312 (file-name (git-file-name name version))
21313 (sha256
21314 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21315 (build-system pyproject-build-system)
21316 (arguments
21317 (list
21318 #:phases
21319 #~(modify-phases %standard-phases
21320 (add-after 'unpack 'fallback-on-default-build
21321 (lambda _
21322 ;; This pyproject has little value and fails because of the
21323 ;; :__legacy__ suffix. Removing it to rely on defaults.
21324 (delete-file "pyproject.toml"))))))
21325 (native-inputs (list python-pytest python-setuptools))
21326 (home-page "https://github.com/pwaller/pyfiglet")
21327 (synopsis "Draw ASCII art big letters in Python")
21328 (description
21329 "This module lets you draw large letter from ordinary characters in pure
21330 Python.")
21331 (license license:expat)))
21332
21333(define-public python-mako
21334 (package
21335 (name "python-mako")
21336 (version "1.3.10")
21337 (source
21338 (origin
21339 (method url-fetch)
21340 (uri (pypi-uri "mako" version))
21341 (sha256
21342 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
21343 (build-system pyproject-build-system)
21344 (native-inputs
21345 (list python-pytest
21346 python-setuptools
21347 python-wheel))
21348 (propagated-inputs
21349 (list python-markupsafe))
21350 (home-page "https://www.makotemplates.org/")
21351 (synopsis "Templating language for Python")
21352 (description "Mako is a templating language for Python that compiles
21353templates into Python modules.")
21354 (license license:expat)))
21355
21356(define-public python-cookiecutter
21357 (package
21358 (name "python-cookiecutter")
21359 (version "2.6.0")
21360 (source
21361 (origin
21362 (method url-fetch)
21363 (uri (pypi-uri "cookiecutter" version))
21364 (sha256
21365 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21366 (build-system pyproject-build-system)
21367 (arguments
21368 (list
21369 #:phases #~(modify-phases %standard-phases
21370 (add-before 'check 'pre-check
21371 (lambda _
21372 ;; test_get_user_config.py requires a writable home
21373 ;; directory.
21374 (setenv "HOME"
21375 (getcwd))
21376 ;; test_hooks.py dynamically creates shell scripts
21377 ;; with a /bin/bash shebang. We have to patch these.
21378 (substitute* "tests/test_hooks.py"
21379 (("/bin/bash")
21380 (string-append #$(this-package-native-input
21381 "bash-minimal") "/bin/bash"))))))))
21382 (native-inputs (list bash-minimal
21383 git-minimal/pinned
21384 python-freezegun
21385 python-pytest
21386 python-pytest-mock
21387 python-setuptools
21388 python-wheel))
21389 (propagated-inputs (list python-arrow
21390 python-binaryornot
21391 python-click
21392 python-jinja2
21393 python-pyyaml
21394 python-requests
21395 python-rich
21396 python-slugify))
21397 (home-page "https://github.com/cookiecutter/cookiecutter")
21398 (synopsis
21399 "Command-line utility that creates projects from project templates")
21400 (description
21401 "This package provides a command-line utility that creates projects from
21402project templates, e.g. creating a Python package project from a Python package
21403project template.")
21404 (license license:bsd-3)))
21405
21406(define-public python-pyquery
21407 (package
21408 (name "python-pyquery")
21409 (version "2.0.1")
21410 (source
21411 (origin
21412 (method url-fetch)
21413 (uri (pypi-uri "pyquery" version))
21414 (sha256
21415 (base32
21416 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21417 (build-system pyproject-build-system)
21418 (arguments
21419 (list
21420 #:test-flags
21421 #~(list #$@(map (lambda (test) (string-append
21422 "--deselect=tests/test_pyquery.py::"
21423 test))
21424 (list
21425 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21426 "TestWebScrapping::test_post"
21427 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21428 "TestWebScrapping::test_session"
21429 ;; Assertion is not equal.
21430 "TestManipulating::test_val_for_textarea"
21431 "TestHTMLParser::test_replaceWith"
21432 "TestHTMLParser::test_replaceWith_with_function"
21433 ;; Network access is required.
21434 "TestWebScrapping::test_get"
21435 "TestWebScrappingEncoding::test_get")))))
21436 (native-inputs
21437 (list python-pytest
21438 python-requests
21439 python-setuptools
21440 python-webob
21441 python-webtest
21442 python-wheel))
21443 (propagated-inputs
21444 (list python-cssselect python-lxml))
21445 (home-page "https://github.com/gawel/pyquery")
21446 (synopsis "Make jQuery-like queries on xml documents")
21447 (description "pyquery allows you to make jQuery queries on xml documents.
21448The API is as much as possible the similar to jQuery. pyquery uses lxml for
21449fast xml and html manipulation.")
21450 (license license:bsd-3)))
21451
21452(define-public python-amqp
21453 (package
21454 (name "python-amqp")
21455 (version "5.1.1")
21456 (source
21457 (origin
21458 (method url-fetch)
21459 (uri (pypi-uri "amqp" version))
21460 (sha256
21461 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21462 (build-system pyproject-build-system)
21463 (arguments
21464 (list ; Integration tests require network connectivity.
21465 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21466 (native-inputs (list python-pytest python-setuptools python-wheel))
21467 (propagated-inputs (list python-vine))
21468 (home-page "https://github.com/celery/py-amqp")
21469 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21470 (description
21471 "This is a fork of amqplib which was originally written by Barry Pederson.
21472It is maintained by the Celery project, and used by kombu as a pure python
21473alternative when librabbitmq is not available.")
21474 (license license:lgpl2.1+)))
21475
21476(define-public python-benchmark-4dn
21477 (package
21478 (name "python-benchmark-4dn")
21479 (version "0.5.24")
21480 (source (origin
21481 (method url-fetch)
21482 (uri (pypi-uri "benchmark_4dn" version))
21483 (sha256
21484 (base32
21485 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21486 (properties '(("upstream-name" . "benchmark_4dn")))
21487 (build-system pyproject-build-system)
21488 ;; There are none.
21489 (arguments (list #:tests? #false))
21490 (native-inputs
21491 (list python-poetry-core))
21492 (home-page "https://github.com/SooLee/Benchmark/")
21493 (synopsis "Benchmark functions for CWL workflows")
21494 (description
21495 "This package provides benchmark functions that return total space, memory,
21496CPUs required per given input size, and parameters for CWL workflows.")
21497 (license license:expat)))
21498
21499(define-public python-beniget
21500 (package
21501 (name "python-beniget")
21502 (version "0.4.2.post1")
21503 (source
21504 (origin
21505 (method url-fetch)
21506 (uri (pypi-uri "beniget" version))
21507 (sha256
21508 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
21509 (build-system pyproject-build-system)
21510 (native-inputs
21511 (list python-pytest
21512 python-setuptools))
21513 (propagated-inputs
21514 (list python-gast))
21515 (home-page "https://github.com/serge-sans-paille/beniget")
21516 (synopsis "Extract semantic information about static Python code")
21517 (description
21518 "Beniget is a collection of analyzers for Python @acronym{AST,
21519Abstract Syntax Tree}. It is a building block for writing a static analyzer
21520or compiler for Python.")
21521 (license license:bsd-3)))
21522
21523(define-public python-kombu
21524 (package
21525 (name "python-kombu")
21526 (version "5.6.2")
21527 (source
21528 (origin
21529 (method git-fetch)
21530 (uri (git-reference
21531 (url "https://github.com/celery/kombu")
21532 (commit (string-append "v" version))))
21533 (file-name (git-file-name name version))
21534 (sha256
21535 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21536 (build-system pyproject-build-system)
21537 (arguments
21538 (list
21539 ;; tests: 854 passed, 193 skipped
21540 #:test-flags
21541 #~(list
21542 ;; TODO: Package azure-identity (required for this file)
21543 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21544 ;; XXX: Requires google-cloud-pubsub.
21545 "--ignore=t/unit/transport/test_gcpubsub.py"
21546 ;; XXX: Requires pyro, see:
21547 ;; <https://codeberg.org/guix/guix/issues/5857>
21548 "--ignore=t/unit/transport/test_pyro.py")
21549 #:phases
21550 #~(modify-phases %standard-phases
21551 (add-after 'unpack 'relax-requirements
21552 (lambda _
21553 (substitute* "requirements/default.txt"
21554 (("tzdata>=2025.2")
21555 "tzdata>=2025.1")))))))
21556 (native-inputs
21557 (list python-botocore
21558 python-pytest
21559 python-pytest-freezer
21560 python-pytest-sugar
21561 python-setuptools))
21562 (propagated-inputs
21563 (list python-amqp
21564 python-packaging
21565 python-tzdata
21566 python-vine))
21567 (home-page "https://kombu.readthedocs.io")
21568 (synopsis "Message passing library for Python")
21569 (description
21570 "The aim of Kombu is to make messaging in Python as easy as possible by
21571providing an idiomatic high-level interface for the AMQ protocol, and also
21572provide proven and tested solutions to common messaging problems. AMQP is the
21573Advanced Message Queuing Protocol, an open standard protocol for message
21574orientation, queuing, routing, reliability and security, for which the
21575RabbitMQ messaging server is the most popular implementation.")
21576 (license license:bsd-3)))
21577
21578(define-public python-billiard
21579 (package
21580 (name "python-billiard")
21581 (version "4.2.2")
21582 (source
21583 (origin
21584 (method git-fetch)
21585 (uri (git-reference
21586 (url "https://github.com/celery/billiard")
21587 (commit (string-append "v" version))))
21588 (file-name (git-file-name name version))
21589 (sha256
21590 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21591 (build-system pyproject-build-system)
21592 (arguments
21593 (list
21594 #:phases
21595 #~(modify-phases %standard-phases
21596 (add-after 'unpack 'remove-win-files
21597 (lambda _
21598 (for-each delete-file-recursively
21599 '("billiard/popen_spawn_win32.py"
21600 "billiard/_win.py")))))))
21601 (native-inputs (list python-psutil python-pytest python-setuptools))
21602 (home-page "https://github.com/celery/billiard")
21603 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21604 (description
21605 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21606multiprocessing package itself is a renamed and updated version of R Oudkerk's
21607pyprocessing package. This standalone variant is intended to be compatible with
21608Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21609 (license license:bsd-3)))
21610
21611(define-public python-celery
21612 (package
21613 (name "python-celery")
21614 (version "5.6.3")
21615 (source
21616 (origin
21617 (method url-fetch)
21618 (uri (pypi-uri "celery" version))
21619 (sha256
21620 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21621 (build-system pyproject-build-system)
21622 (arguments
21623 (list
21624 ;; tests: 3364 passed, 38 skipped, 8 deselected, 3 xfailed, 63 warnings,
21625 ;; 28808 subtests passed
21626 #:test-flags
21627 ;; The MongoDB backend test appears to expect an older version of
21628 ;; MongoDB which provided its own bson module, fails with "
21629 ;; AttributeError: module 'bson' has no attribute 'encode'".
21630 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21631 ;; XXX: Requires google-cloud-firestore
21632 "--ignore=t/unit/backends/test_gcs.py"
21633 "-k" (string-join
21634 (list ;; AssertionError.
21635 "not test_check_privileges_no_fchown"
21636 ;; These 3 tests error out on ci.guix.gnu.org with
21637 ;; OSError: [Errno 24] Too many open files
21638 "test_register_with_event_loop__no_on_tick_dupes"
21639 "test_with_autoscaler_file_descriptor_safety"
21640 "test_with_file_descriptor_safety"
21641 ;; XXX: Fails to compare local timezones.
21642 "test_use_local_timezone")
21643 " and not "))))
21644 (native-inputs
21645 (list python-azure-core
21646 python-dnspython
21647 python-flaky
21648 python-gevent
21649 python-google-cloud-storage
21650 python-iniconfig
21651 python-moto
21652 python-msgpack
21653 python-pymongo
21654 python-pytest
21655 python-pytest-celery
21656 python-pytest-click
21657 python-pytest-order
21658 python-pytest-subtests
21659 python-pytest-timeout
21660 python-redis
21661 python-setuptools))
21662 (propagated-inputs
21663 (list python-billiard
21664 python-click
21665 python-click-didyoumean
21666 python-click-plugins
21667 python-click-repl
21668 python-dateutil
21669 python-kombu
21670 python-tzlocal
21671 python-vine))
21672 (home-page "https://celeryproject.org")
21673 (synopsis "Distributed Task Queue")
21674 (description
21675 "Celery is an asynchronous task queue/job queue based on distributed
21676message passing. It is focused on real-time operation, but supports
21677scheduling as well. The execution units, called tasks, are executed
21678concurrently on a single or more worker servers using multiprocessing,
21679Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
21680synchronously (wait until ready).")
21681 (license license:bsd-3)))
21682
21683;; A bare minimal package, mainly to use in tests and reduce closure
21684;; size. Tests are left out in the main package to slim down native-inputs.
21685(define-public python-celery-minimal
21686 (package/inherit python-celery
21687 (name "python-celery-minimal")
21688 (arguments
21689 (list #:tests? #f))
21690 (native-inputs
21691 (list python-setuptools))))
21692
21693(define-public python-anyqt
21694 (package
21695 (name "python-anyqt")
21696 (version "0.2.1")
21697 (source
21698 (origin
21699 (method git-fetch)
21700 (uri (git-reference
21701 (url "https://github.com/ales-erjavec/anyqt")
21702 (commit version)))
21703 (file-name (git-file-name name version))
21704 (sha256
21705 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
21706 (build-system pyproject-build-system)
21707 (arguments
21708 (list
21709 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
21710 ;; TODO Add/configure the right Qt inputs.
21711 #:test-flags
21712 #~(list "--ignore-glob=tests/test_q*.py")
21713 #:phases
21714 #~(modify-phases %standard-phases
21715 (add-after 'unpack 'delete-files
21716 ;; Delete files related to other operating systems.
21717 (lambda _
21718 (delete-file "AnyQt/QtMacExtras.py")
21719 (delete-file "AnyQt/QtWinExtras.py"))))))
21720 (native-inputs
21721 (list python-pyqt-6
21722 python-pytest
21723 python-pytest-qt
21724 python-setuptools))
21725 (home-page "https://github.com/ales-erjavec/anyqt")
21726 (synopsis "PyQt compatibility layer")
21727 (description
21728 "This package provides a PyQt/PySide compatibility layer. More precisely,
21729it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
21730PySide, PySide2.")
21731 (license license:gpl3)))
21732
21733(define-public python-qasync
21734 (package
21735 (name "python-qasync")
21736 (version "0.28.0")
21737 (source
21738 (origin
21739 (method git-fetch)
21740 (uri (git-reference
21741 (url "https://github.com/CabbageDevelopment/qasync/")
21742 (commit (string-append "v" version))))
21743 (file-name (git-file-name name version))
21744 (sha256
21745 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
21746 (build-system pyproject-build-system)
21747 (arguments
21748 (list
21749 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
21750 #:phases
21751 #~(modify-phases %standard-phases
21752 (add-before 'check 'set-qpa
21753 (lambda _
21754 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
21755 (native-inputs
21756 (list python-poetry-core python-pytest))
21757 (propagated-inputs
21758 (list python-pyqt-6))
21759 (home-page "https://github.com/CabbageDevelopment/qasync")
21760 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
21761 (description
21762 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
21763by providing an implementation of the PEP 3156 event-loop.")
21764 (license license:bsd-2)))
21765
21766(define-public python-editor
21767 (package
21768 (name "python-editor")
21769 (version "1.0.4")
21770 (source
21771 (origin
21772 (method git-fetch)
21773 (uri (git-reference
21774 (url "https://github.com/fmoo/python-editor")
21775 (commit version)))
21776 (file-name (git-file-name name version))
21777 (sha256
21778 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
21779 (build-system pyproject-build-system)
21780 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
21781 (native-inputs (list python-setuptools))
21782 (home-page "https://github.com/fmoo/python-editor")
21783 (synopsis "Programmatically open an editor, capture the result")
21784 (description
21785 "This package provides the editor module for programmatically interfacing
21786with your system's $EDITOR.")
21787 (license license:asl2.0)))
21788
21789(define-public python-multiprocessing-logging
21790 (package
21791 (name "python-multiprocessing-logging")
21792 (version "0.3.4")
21793 (home-page "https://github.com/jruere/multiprocessing-logging")
21794 (source
21795 (origin
21796 (method git-fetch)
21797 (uri (git-reference
21798 (url home-page)
21799 (commit (string-append "v" version))))
21800 (file-name (git-file-name name version))
21801 (sha256
21802 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
21803 (build-system pyproject-build-system)
21804 (arguments (list #:test-backend #~'unittest))
21805 (native-inputs (list python-setuptools))
21806 (synopsis "Manage logs from multiple processes")
21807 (description
21808 "This Python module implements a multiprocessing-aware @code{Handler}
21809that, when set on the root @code{Logger}, will tunnel log records to the
21810main process so that they are handled correctly.")
21811 (license license:lgpl3+)))
21812
21813(define-public python-munkres
21814 (package
21815 (name "python-munkres")
21816 (version "1.1.4")
21817 (source
21818 (origin
21819 (method url-fetch)
21820 (uri (pypi-uri "munkres" version))
21821 (sha256
21822 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
21823 (build-system pyproject-build-system)
21824 (arguments
21825 (list
21826 ;; See https://github.com/bmc/munkres/issues/40
21827 #:test-flags
21828 (if (member (%current-system) %32bit-supported-systems)
21829 #~(list "-k" "not test_profit_float")
21830 #~(list))))
21831 (native-inputs (list python-pytest python-setuptools))
21832 (home-page "https://software.clapper.org/munkres/")
21833 (synopsis "Implementation of the Munkres algorithm")
21834 (description
21835 "The Munkres module provides an implementation of the Munkres algorithm
21836(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
21837for solving the Assignment Problem.")
21838 (license license:bsd-3)))
21839
21840(define-public python-codespell
21841 (package
21842 (name "python-codespell")
21843 (version "2.3.0")
21844 (source
21845 (origin
21846 (method url-fetch)
21847 (uri (pypi-uri "codespell" version))
21848 (sha256
21849 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21850 (build-system pyproject-build-system)
21851 (native-inputs
21852 (list python-pygments
21853 python-pytest
21854 python-pytest-dependency
21855 python-setuptools
21856 python-setuptools-scm
21857 python-wheel))
21858 (propagated-inputs
21859 (list python-chardet))
21860 (home-page "https://github.com/codespell-project/codespell/")
21861 (synopsis "Spellchecker for code")
21862 (description
21863 "Codespell fixes common misspellings in text files. It's designed
21864primarily for checking misspelled words in source code, but it can be used
21865with other files as well. It does not check for word membership in a complete
21866dictionary, but instead looks for a set of common misspellings. Therefore it
21867should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21868also means it shouldn't generate false-positives when you use a niche term it
21869doesn't know about.")
21870 (license
21871 (list
21872 ; for codespell and codespell_lib
21873 license:gpl2
21874 ; for dictionary*.txt
21875 license:cc-by-sa3.0))))
21876
21877(define-public python-jellyfish
21878 (package
21879 (name "python-jellyfish")
21880 (version "1.2.1")
21881 (source
21882 (origin
21883 (method git-fetch)
21884 (uri (git-reference
21885 (url "https://github.com/jamesturk/jellyfish")
21886 (commit (string-append "v" version))))
21887 (file-name (git-file-name name version))
21888 (sha256
21889 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21890 (build-system pyproject-build-system)
21891 (arguments
21892 (list
21893 #:imported-modules (append %cargo-build-system-modules
21894 %pyproject-build-system-modules)
21895 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21896 (guix build pyproject-build-system)
21897 (guix build utils))
21898 #:phases
21899 #~(modify-phases %standard-phases
21900 (add-after 'unpack 'prepare-cargo-build-system
21901 (lambda args
21902 (for-each
21903 (lambda (phase)
21904 (format #t "Running cargo phase: ~a~%" phase)
21905 (apply (assoc-ref cargo:%standard-phases phase)
21906 #:cargo-target #$(cargo-triplet)
21907 args))
21908 '(unpack-rust-crates
21909 configure
21910 check-for-pregenerated-files
21911 patch-cargo-checksums)))))))
21912 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21913 (native-inputs
21914 (append
21915 (list python-pytest
21916 python-setuptools
21917 rust
21918 `(,rust "cargo"))
21919 (or (and=> (%current-target-system)
21920 (compose list make-rust-sysroot))
21921 '())))
21922 (home-page "https://www.jpt.sh/projects/jellyfish/")
21923 (synopsis "Approximate and phonetic matching of strings")
21924 (description "Jellyfish uses a variety of string comparison and phonetic
21925encoding algorithms to do fuzzy string matching.")
21926 (license license:bsd-2)))
21927
21928(define-public python-pdfminer-six
21929 (package
21930 (name "python-pdfminer-six")
21931 (version "20260107")
21932 ;; There are no tests in the PyPI tarball.
21933 (source
21934 (origin
21935 (method git-fetch)
21936 (uri (git-reference
21937 (url "https://github.com/pdfminer/pdfminer.six")
21938 (commit version)))
21939 (file-name (git-file-name name version))
21940 (sha256
21941 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
21942 (build-system pyproject-build-system)
21943 (arguments
21944 (list #:phases
21945 #~(modify-phases %standard-phases
21946 ;; Tests write to the source tree.
21947 (add-after 'unpack 'make-git-checkout-writable
21948 (lambda _
21949 (for-each make-file-writable (find-files ".")))))))
21950 (propagated-inputs
21951 (list python-charset-normalizer python-cryptography))
21952 (native-inputs
21953 (list python-pytest python-setuptools python-setuptools-scm))
21954 (home-page "https://github.com/pdfminer/pdfminer.six")
21955 (synopsis "PDF parser and analyzer")
21956 (description "@code{pdfminer.six} is a community maintained fork of
21957the original PDFMiner. It is a tool for extracting information from PDF
21958documents. It focuses on getting and analyzing text data. Pdfminer.six
21959extracts the text from a page directly from the sourcecode of the PDF. It
21960can also be used to get the exact location, font or color of the text.")
21961 (license license:expat)))
21962
21963(define-public python-rarfile
21964 (package
21965 (name "python-rarfile")
21966 (version "4.2")
21967 (source
21968 (origin
21969 (method git-fetch)
21970 (uri (git-reference
21971 (url "https://github.com/markokr/rarfile")
21972 (commit (string-append "v" version))))
21973 (file-name (git-file-name name version))
21974 (sha256
21975 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21976 (build-system pyproject-build-system)
21977 (arguments
21978 (list
21979 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21980 #:phases
21981 #~(modify-phases %standard-phases
21982 (add-after 'unpack 'patch
21983 (lambda* (#:key inputs #:allow-other-keys)
21984 (substitute* "rarfile.py"
21985 ;; Disable unrar and unar, which are unavailable on Guix.
21986 (("(unrar|unar)=True" all tool)
21987 (string-append tool "=False"))
21988 ;; Hardcode path to bsdtar
21989 (("\"bsdtar\"")
21990 (format #f "~s"
21991 (search-input-file inputs "bin/bsdtar")))))))))
21992 (native-inputs (list python-pytest python-setuptools))
21993 (inputs (list libarchive))
21994 (home-page "https://github.com/markokr/rarfile")
21995 (synopsis "RAR archive reader for Python")
21996 (description
21997 "This is Python module for RAR archive reading. The interface is made as
21998zipfile like as possible.")
21999 (license license:isc)))
22000
22001(define-public python-rassumfrassum
22002 (package
22003 (name "python-rassumfrassum")
22004 (version "0.3.3")
22005 (source
22006 (origin
22007 (method git-fetch)
22008 (uri (git-reference
22009 (url "https://github.com/joaotavora/rassumfrassum")
22010 (commit (string-append "v" version))))
22011 (file-name (git-file-name name version))
22012 (sha256
22013 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
22014 (build-system pyproject-build-system)
22015 (arguments
22016 (list
22017 #:phases
22018 #~(modify-phases %standard-phases
22019 (replace 'check
22020 (lambda* (#:key tests? #:allow-other-keys)
22021 (when tests?
22022 (invoke "test/run-all.sh")))))))
22023 (native-inputs (list python-setuptools))
22024 (home-page "https://github.com/joaotavora/rassumfrassum")
22025 (synopsis "Connect an LSP client to multiple LSP servers")
22026 (description
22027 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22028 (license license:gpl3+)))
22029
22030(define-public python-slugid
22031 (package
22032 (name "python-slugid")
22033 (version "2.0.0")
22034 (source
22035 (origin
22036 (method git-fetch)
22037 (uri (git-reference
22038 (url "https://github.com/taskcluster/slugid.py")
22039 (commit (string-append "v" version))))
22040 (file-name (git-file-name name version))
22041 (sha256
22042 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22043 (build-system pyproject-build-system)
22044 (arguments (list #:test-backend #~'nose))
22045 (native-inputs (list python-pynose python-setuptools))
22046 (home-page "http://taskcluster.github.io/slugid.py")
22047 (synopsis "Module for Base64 encoded UUID v4 slugs")
22048 (description
22049 "This package provides a module for generating v4 UUIDs and encoding them
22050into 22 character URL-safe base64 slug representation.")
22051 (license license:mpl2.0)))
22052
22053(define-public python-rich
22054 (package
22055 (name "python-rich")
22056 (version "14.3.3")
22057 (source
22058 (origin
22059 (method git-fetch)
22060 (uri (git-reference
22061 (url "https://github.com/willmcgugan/rich")
22062 (commit (string-append "v" version))))
22063 (file-name (git-file-name name version))
22064 (sha256
22065 (base32 "1g8mb51ffn3bw2dhmmimpyhwkn13xmphircc8bg2kvkmncxmbrza"))))
22066 (build-system pyproject-build-system)
22067 ;; tests: 952 passed, 25 skipped
22068 (native-inputs
22069 (list python-poetry-core
22070 python-pytest
22071 which))
22072 (propagated-inputs
22073 (list python-markdown-it-py
22074 python-pygments))
22075 (home-page "https://github.com/willmcgugan/rich")
22076 (synopsis "Render rich text and more to the terminal")
22077 (description
22078 "This is a Python package for rendering rich text, tables, progress bars,
22079syntax highlighting, markdown and more to the terminal.")
22080 (license license:expat)))
22081
22082(define-public python-rich-click
22083 (package
22084 (name "python-rich-click")
22085 (version "1.9.7")
22086 (source
22087 (origin
22088 (method git-fetch)
22089 (uri (git-reference
22090 (url "https://github.com/ewels/rich-click")
22091 (commit (string-append "v" version))))
22092 (file-name (git-file-name name version))
22093 (sha256
22094 (base32 "1bw3lsj49dln8q7407gv85y8lzdn9a3jcjl9acax6q6x9l73cgqx"))))
22095 (build-system pyproject-build-system)
22096 (native-inputs
22097 (list python-inline-snapshot
22098 python-pytest
22099 python-setuptools
22100 python-typer))
22101 (propagated-inputs
22102 (list python-click
22103 python-rich))
22104 (home-page "https://github.com/ewels/rich-click")
22105 (synopsis "Format click help output nicely with rich")
22106 (description "Click is a \"Python package for creating beautiful command
22107line interfaces\". Rich is a \"Python library for rich text and beautiful
22108formatting in the terminal\". The intention of rich-click is to provide
22109attractive help output from click, formatted with rich, with minimal
22110customization required.")
22111 (license license:expat)))
22112
22113(define-public python-magic
22114 (package
22115 (name "python-magic")
22116 (version "0.4.27")
22117 (home-page "https://github.com/ahupp/python-magic")
22118 (source
22119 (origin
22120 (method git-fetch)
22121 (uri (git-reference (url home-page) (commit version)))
22122 (file-name (git-file-name name version))
22123 (sha256
22124 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22125 (build-system pyproject-build-system)
22126 (arguments
22127 (list
22128 #:test-backend #~'custom
22129 #:test-flags #~(list "test/libmagic_test.py")
22130 #:phases
22131 #~(modify-phases %standard-phases
22132 (add-after 'unpack 'fix-tests
22133 (lambda _
22134 ;; Adjust expected output for [email protected].
22135 (substitute* "test/libmagic_test.py"
22136 (("PDF document, version 1\\.2, 2 pages")
22137 "PDF document, version 1.2, 2 page(s)"))))
22138 ;; Replace a specific method call with a hard-coded path to the
22139 ;; necessary libmagic.so file in the store.
22140 (add-before 'build 'hard-code-path-to-libmagic
22141 (lambda* (#:key inputs #:allow-other-keys)
22142 (substitute* "magic/loader.py"
22143 (("find_library\\('magic'\\)")
22144 (format #f "~s"
22145 (search-input-file inputs "lib/libmagic.so")))))))))
22146 (native-inputs (list which python-setuptools))
22147 (inputs
22148 ;; python-magic needs to be able to find libmagic.so.
22149 (list file))
22150 (synopsis "File type identification using libmagic")
22151 (description
22152 "This module uses ctypes to access the libmagic file type identification
22153library. It makes use of the local magic database and supports both textual
22154and MIME-type output. Note that this module and the python-file module both
22155provide a \"magic.py\" file; these two modules, which are different and were
22156developed separately, both serve the same purpose: to provide Python bindings
22157for libmagic.")
22158 (license license:expat)))
22159
22160(define-public python-securetar
22161 (package
22162 (name "python-securetar")
22163 (version "2025.1.4")
22164 (source
22165 (origin
22166 (method git-fetch)
22167 (uri (git-reference
22168 (url "https://github.com/pvizeli/securetar")
22169 (commit version)))
22170 (file-name (git-file-name name version))
22171 (sha256
22172 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22173 (build-system pyproject-build-system)
22174 (native-inputs (list python-setuptools python-wheel python-pytest))
22175 (propagated-inputs (list python-cryptography))
22176 (home-page "https://github.com/pvizeli/securetar")
22177 (synopsis "Python module to handle tarfile backups")
22178 (description
22179 "This library provides a streaming wrapper around python tarfile and allow
22180secure handling files and support encryption.")
22181 (license license:asl2.0)))
22182
22183(define-public python-pkgconfig
22184 (package
22185 (name "python-pkgconfig")
22186 (version "1.5.5")
22187 (source
22188 (origin
22189 (method url-fetch)
22190 (uri (pypi-uri "pkgconfig" version))
22191 (sha256
22192 (base32
22193 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
22194 (build-system pyproject-build-system)
22195 (arguments
22196 (list
22197 #:tests? #false ;there are none
22198 #:phases
22199 '(modify-phases %standard-phases
22200 (add-before 'build 'patch
22201 ;; Hard-code the path to pkg-config.
22202 (lambda _
22203 (substitute* "pkgconfig/pkgconfig.py"
22204 (("'pkg-config'")
22205 (string-append "'" (which "pkg-config") "'"))))))))
22206 (native-inputs (list python-poetry-core))
22207 (inputs (list pkg-config))
22208 (home-page "https://github.com/matze/pkgconfig")
22209 (synopsis "Python interface for pkg-config")
22210 (description "This module provides a Python interface to pkg-config. It
22211can be used to find all pkg-config packages, check if a package exists,
22212check if a package meets certain version requirements, query CFLAGS and
22213LDFLAGS and parse the output to build extensions with setup.py.")
22214 (license license:expat)))
22215
22216;; This package is unmaintained since 2014, but still used in `khmer'.
22217(define-public python-bz2file
22218 (package
22219 (name "python-bz2file")
22220 (version "0.98")
22221 (source
22222 (origin
22223 (method url-fetch)
22224 (uri (pypi-uri "bz2file" version))
22225 (sha256
22226 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22227 (build-system pyproject-build-system)
22228 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22229 (native-inputs (list python-setuptools))
22230 (home-page "https://github.com/nvawda/bz2file")
22231 (synopsis "Read and write bzip2-compressed files")
22232 (description
22233 "Bz2file is a Python library for reading and writing bzip2-compressed
22234files. It contains a drop-in replacement for the I/O interface in the
22235standard library's @code{bz2} module, including features from the latest
22236development version of CPython that are not available in older releases.")
22237 (license license:asl2.0)))
22238
22239(define-public python-future
22240 (package
22241 (name "python-future")
22242 (version "1.0.0")
22243 (source
22244 (origin
22245 (method url-fetch)
22246 (uri (pypi-uri "future" version))
22247 (sha256
22248 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22249 (build-system pyproject-build-system)
22250 (arguments
22251 (list
22252 #:test-flags
22253 ;; Self tests failed.
22254 #~(list "--ignore=tests/test_future/test_futurize.py"
22255 "-k" (string-join
22256 ;; Self tests failed.
22257 (list "not test_division"
22258 "test_functions_unchanged"
22259 "test_mixed_annotations"
22260 "test_multiple_param_annotations"
22261 "test_print"
22262 "test_range_slice"
22263 ;; Network access is required.
22264 "test_ftp"
22265 "test_main"
22266 "test_moves_urllib_request_http"
22267 "test_urllib_request_http"
22268 ;; Tests failing on Python 3.12
22269 "test_converting_drive_letter"
22270 "test_converting_drive_letter"
22271 "test_converting_when_no_drive_letter"
22272 "test_converting_when_no_drive_letter"
22273 "test_converting_when_no_drive_letter"
22274 "test_converting_when_no_drive_letter"
22275 "test_isinstance_recursion_limit"
22276 "test_roundtrip_pathname2url"
22277 "test_roundtrip_pathname2url"
22278 "test_roundtrip_url2pathname"
22279 "test_roundtrip_url2pathname"
22280 "test_subclass_recursion_limit")
22281 " and not "))))
22282 (native-inputs
22283 (list python-pytest
22284 python-setuptools))
22285 (home-page "https://python-future.org")
22286 (synopsis "Single-source support for Python 3 and 2")
22287 (description
22288 "@code{python-future} is the missing compatibility layer between Python 2
22289and Python 3. It allows you to use a single, clean Python 3.x-compatible
22290codebase to support both Python 2 and Python 3 with minimal overhead.")
22291 (license license:expat)))
22292
22293(define-public python-cysignals
22294 (package
22295 (name "python-cysignals")
22296 (version "1.12.3")
22297 (source
22298 (origin
22299 (method url-fetch)
22300 (uri (pypi-uri "cysignals" version))
22301 (sha256
22302 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22303 (build-system pyproject-build-system)
22304 (native-inputs (list python-meson
22305 python-cython
22306 python-pytest))
22307 (home-page "https://github.com/sagemath/cysignals")
22308 (synopsis "Handling of interrupts and signals for Cython")
22309 (description
22310 "The cysignals package provides mechanisms to handle interrupts (and
22311other signals and errors) in Cython code, using two related approaches,
22312for mixed Cython/Python code or external C libraries and pure Cython code,
22313respectively.")
22314 (license license:lgpl3+)))
22315
22316(define-public python-rope
22317 (package
22318 (name "python-rope")
22319 (version "1.13.0")
22320 (source
22321 (origin
22322 (method url-fetch)
22323 (uri (pypi-uri "rope" version))
22324 (sha256
22325 (base32
22326 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22327 (build-system pyproject-build-system)
22328 (arguments
22329 (list
22330 #:test-flags
22331 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22332 (propagated-inputs (list python-pytoolconfig))
22333 (native-inputs
22334 (list python-pytest python-pytest-timeout python-setuptools))
22335 (home-page "https://github.com/python-rope/rope")
22336 (synopsis "Refactoring library for Python")
22337 (description
22338 "Rope is a refactoring library for Python. It facilitates the renaming,
22339moving and extracting of attributes, functions, modules, fields and parameters
22340in Python source code. These refactorings can also be applied to occurrences
22341in strings and comments.")
22342 (license license:lgpl3+)))
22343
22344(define-public python-py3status
22345 (package
22346 (name "python-py3status")
22347 (version "3.62")
22348 (source
22349 (origin
22350 (method git-fetch)
22351 (uri (git-reference
22352 (url "https://github.com/ultrabug/py3status")
22353 (commit version)))
22354 (file-name (git-file-name name version))
22355 (sha256
22356 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22357 (build-system pyproject-build-system)
22358 (arguments
22359 (list
22360 #:phases
22361 #~(modify-phases %standard-phases
22362 (add-before 'build 'hardcode-file-path
22363 (lambda* (#:key inputs #:allow-other-keys)
22364 (substitute* "py3status/parse_config.py"
22365 (("\\[\"file\", \"-b\"")
22366 (format #f "[~s, \"-b\""
22367 (search-input-file inputs "bin/file")))))))))
22368 (native-inputs (list python-hatchling python-pytest))
22369 (inputs (list file))
22370 (home-page "https://github.com/ultrabug/py3status")
22371 (synopsis "Extensible i3status wrapper written in Python")
22372 (description
22373 "py3status is an i3status wrapper which extends i3status functionality in
22374a modular way, allowing you to extend your panel with your own code,
22375responding to click events and updating clock every second.")
22376 (license license:bsd-3)))
22377
22378(define-public python-greenlet
22379 (package
22380 (name "python-greenlet")
22381 (version "3.1.1")
22382 (source
22383 (origin
22384 (method url-fetch)
22385 (uri (pypi-uri "greenlet" version))
22386 (sha256
22387 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
22388 (build-system pyproject-build-system)
22389 (arguments
22390 (list
22391 ;; AssertionError: 'Exception' not found in ''
22392 #:test-flags
22393 #~(list (string-join
22394 (list "--deselect=src/greenlet/tests/test_greenlet.py"
22395 "TestGreenlet"
22396 "test_dealloc_catches_GreenletExit_throws_other")
22397 "::"))
22398 #:phases
22399 #~(modify-phases %standard-phases
22400 (add-before 'check 'build-extensions
22401 (lambda _
22402 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
22403 (native-inputs
22404 (list python-objgraph
22405 python-pytest
22406 python-psutil
22407 python-setuptools
22408 python-wheel))
22409 (home-page "https://greenlet.readthedocs.io/")
22410 (synopsis "Lightweight in-process concurrent programming")
22411 (description
22412 "Greenlet package is a spin-off of Stackless, a version of CPython
22413that supports micro-threads called \"tasklets\". Tasklets run
22414pseudo-concurrently (typically in a single or a few OS-level threads) and
22415are synchronized with data exchanges on \"channels\".")
22416 (license (list license:psfl license:expat))))
22417
22418(define-public python-objgraph
22419 (package
22420 (name "python-objgraph")
22421 (version "3.6.2")
22422 (source
22423 (origin
22424 (method url-fetch)
22425 (uri (pypi-uri "objgraph" version))
22426 (sha256
22427 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22428 (build-system pyproject-build-system)
22429 (arguments
22430 (list
22431 #:test-flags
22432 #~(list "tests.py"
22433 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22434 ;; [], [], [], [], [], [], [], ...
22435 "-k" "not test_at_addrs")))
22436 (native-inputs
22437 (list graphviz
22438 python-pytest
22439 python-setuptools
22440 python-wheel))
22441 (propagated-inputs
22442 (list python-graphviz))
22443 (home-page "https://mg.pov.lt/objgraph/")
22444 (synopsis "Draw Python object reference graphs with graphviz")
22445 (description
22446 "This package provides tools to draw Python object reference graphs with
22447graphviz.")
22448 (license license:expat)))
22449
22450(define-public python-gevent
22451 (package
22452 (name "python-gevent")
22453 (version "24.11.1")
22454 (source (origin
22455 (method url-fetch)
22456 (uri (pypi-uri "gevent" version))
22457 (sha256
22458 (base32
22459 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22460 (modules '((guix build utils)))
22461 (snippet
22462 '(begin
22463 ;; unbunding libev and c-ares
22464 (delete-file-recursively "deps")
22465 ;; Remove cythonized files.
22466 (with-directory-excursion "src/gevent"
22467 (for-each delete-file
22468 (append (list "resolver/cares.c"
22469 "queue.c"
22470 "local.c"
22471 "libev/corecext.h"
22472 "libev/corecext.c"
22473 "greenlet.c"
22474 "event.c"
22475 "_waiter.c"
22476 "_tracer.c"
22477 "_semaphore.c"
22478 "_imap.c"
22479 "_ident.c"
22480 "_hub_primitives.c"
22481 "_hub_local.c"
22482 "_greenlet_primitives.c"
22483 "_abstract_linkable.c")
22484 (find-files "." "\\.html$"))))))))
22485 (build-system pyproject-build-system)
22486 (arguments
22487 (list
22488 #:test-flags
22489 '(list
22490 ;; These tests relies on networking which is
22491 ;; not available in the build container.
22492 "test__getaddrinfo_import.py"
22493 ;; These tests rely on KeyboardInterrupts which do not
22494 ;; work inside the build container for some reason
22495 ;; (lack of controlling terminal?).
22496 "test__issues461_471.py"
22497 ;; TODO: Patch out the tests that use getprotobyname, etc
22498 ;; instead of disabling all the tests from these files.
22499 "test__resolver_dnspython.py"
22500 ;; This test contains 'test_unlink', which
22501 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22502 "test__core_stat.py")
22503 #:phases
22504 #~(modify-phases %standard-phases
22505 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22506 (lambda _
22507 (substitute* "src/gevent/subprocess.py"
22508 (("/bin/sh") (which "sh")))
22509 (for-each (lambda (file)
22510 (substitute* file
22511 (("/bin/sh") (which "sh"))
22512 (("/bin/true") (which "true"))))
22513 (find-files "src/greentest" "\\.py$"))))
22514 (add-before 'build 'do-not-use-bundled-sources
22515 (lambda _
22516 (setenv "GEVENTSETUP_EMBED" "0")
22517
22518 ;; Prevent building bundled libev.
22519 (substitute* "setup.py"
22520 (("run_make=_BUILDING")
22521 "run_make=False"))))
22522 (add-before 'build 'augment-C_INCLUDE_PATH
22523 (lambda* (#:key inputs #:allow-other-keys)
22524 (let* ((python (dirname (dirname
22525 (search-input-file
22526 inputs "bin/python"))))
22527 (version (python-version python))
22528 (greenlet (string-append
22529 #$(this-package-input "python-greenlet")
22530 "/include/python" version)))
22531 (setenv "C_INCLUDE_PATH"
22532 (string-append greenlet "/:"
22533 (or (getenv "C_INCLUDE_PATH")
22534 ""))))))
22535 (add-before 'check 'pretend-to-be-CI
22536 (lambda _
22537 ;; A few tests are skipped due to network constraints or
22538 ;; get longer timeouts when running in a CI environment.
22539 ;; Piggy-back on that, as we need the same adjustments.
22540 (setenv "TRAVIS" "1")
22541 (setenv "APPVEYOR" "1")))
22542 (add-before 'check 'adjust-tests
22543 (lambda* (#:key test-flags #:allow-other-keys)
22544 (call-with-output-file "skipped_tests.txt"
22545 (lambda (port)
22546 (format port "~a~%" (string-join test-flags "\n"))))))
22547 (replace 'check
22548 (lambda* (#:key tests? #:allow-other-keys)
22549 (when tests?
22550 ;; Use the build daemons configured number of workers.
22551 (setenv "NWORKERS" (number->string (parallel-job-count)))
22552 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22553 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22554 (propagated-inputs
22555 (list python-greenlet python-zope-event python-zope-interface))
22556 (native-inputs
22557 (list python-cffi
22558 python-cython
22559 python-dnspython
22560 python-idna
22561 python-objgraph
22562 python-psutil
22563 python-requests
22564 python-setuptools))
22565 (inputs
22566 (list c-ares libev libuv))
22567 (home-page "https://www.gevent.org/")
22568 (synopsis "Coroutine-based network library")
22569 (description
22570 "@code{gevent} is a coroutine-based Python networking library that uses
22571@code{greenlet} to provide a high-level synchronous API on top of the
22572@code{libev} event loop.")
22573 (license license:expat)))
22574
22575(define-public python-fastimport
22576 (package
22577 (name "python-fastimport")
22578 (version "0.9.16")
22579 (source
22580 (origin
22581 (method git-fetch)
22582 (uri (git-reference
22583 (url "https://github.com/jelmer/python-fastimport")
22584 (commit (string-append "v" version))))
22585 (file-name (git-file-name name version))
22586 (sha256
22587 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22588 (build-system pyproject-build-system)
22589 (arguments (list #:test-backend #~'unittest))
22590 (native-inputs (list python-setuptools))
22591 (home-page "https://github.com/jelmer/python-fastimport")
22592 (synopsis "VCS fastimport parser and generator in Python")
22593 (description
22594 "This package provides a parser for and generator of the Git
22595@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22596format.")
22597 (license license:gpl2+)))
22598
22599(define-public python-pika
22600 (package
22601 (name "python-pika")
22602 (version "1.3.2")
22603 (source
22604 (origin
22605 (method git-fetch)
22606 (uri (git-reference
22607 (url "https://github.com/pika/pika")
22608 (commit version)))
22609 (file-name (git-file-name name version))
22610 (sha256
22611 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22612 (build-system pyproject-build-system)
22613 (arguments
22614 (list
22615 #:test-flags
22616 ;; XXX: These test most likely require a running RabbitMQ server.
22617 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22618 #:phases
22619 #~(modify-phases %standard-phases
22620 (add-before 'check 'configure-tests
22621 (lambda* (#:key tests? #:allow-other-keys)
22622 (when tests?
22623 (setenv "PYTHONPATH" (getcwd))))))))
22624 (native-inputs (list python-pytest
22625 python-gevent
22626 python-tornado
22627 python-twisted
22628 python-setuptools))
22629 (home-page "https://pika.readthedocs.org")
22630 (synopsis "Pure Python AMQP Client Library")
22631 (description
22632 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22633Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22634network support library.")
22635 (license license:bsd-3)))
22636
22637(define-public python-pykka
22638 (package
22639 (name "python-pykka")
22640 (version "4.4.2")
22641 (source
22642 (origin
22643 (method git-fetch)
22644 (uri (git-reference
22645 (url "https://github.com/jodal/pykka")
22646 (commit (string-append "v" version))))
22647 (file-name (git-file-name name version))
22648 (sha256
22649 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
22650 (build-system pyproject-build-system)
22651 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
22652 (home-page "https://pykka.readthedocs.io")
22653 (synopsis "Implementation of the actor model")
22654 (description
22655 "Pykka implements the actor model in Python, which introduces some simple
22656rules to control the sharing of state and cooperation between execution units,
22657and makes it easier to build concurrent applications.")
22658 (license license:asl2.0)))
22659
22660;; WARNING: This package is a dependency of mesa.
22661(define-public python-ply
22662 (package
22663 (name "python-ply")
22664 (version "3.11")
22665 (source
22666 (origin
22667 (method url-fetch)
22668 (uri (pypi-uri "ply" version))
22669 (sha256
22670 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
22671 (build-system pyproject-build-system)
22672 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
22673 (native-inputs
22674 (list python-setuptools
22675 python-wheel))
22676 (home-page "http://www.dabeaz.com/ply/")
22677 (synopsis "Python Lex & Yacc")
22678 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
22679It uses LR parsing and does extensive error checking.")
22680 (license license:bsd-3)))
22681
22682(define-public python-kazoo
22683 (package
22684 (name "python-kazoo")
22685 (version "2.10.0")
22686 (source
22687 (origin
22688 (method git-fetch)
22689 (uri (git-reference
22690 (url "https://github.com/python-zk/kazoo")
22691 (commit version)))
22692 (file-name (git-file-name name version))
22693 (sha256
22694 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
22695 (build-system pyproject-build-system)
22696 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
22697 (native-inputs (list python-setuptools))
22698 (home-page "https://kazoo.readthedocs.org")
22699 (synopsis "High-level Zookeeper client library")
22700 (description
22701 "Kazoo is a Python client library for the Apache Zookeeper distributed
22702application service. It is designed to be easy to use and to avoid common
22703programming errors.")
22704 (license license:asl2.0)))
22705
22706(define-public python-columnize
22707 (package
22708 (name "python-columnize")
22709 (version "0.3.11")
22710 (source
22711 (origin
22712 (method url-fetch)
22713 (uri (pypi-uri "columnize" version))
22714 (sha256
22715 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
22716 (build-system pyproject-build-system)
22717 (native-inputs (list python-pytest python-setuptools))
22718 (home-page "https://github.com/rocky/pycolumnize")
22719 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
22720 (description
22721 "This package provides a way to format a simple (i.e. not nested) list
22722into aligned columns.")
22723 (license license:expat)))
22724
22725(define-public python-pysol-cards
22726 (package
22727 (name "python-pysol-cards")
22728 (version "0.24.0")
22729 (source
22730 (origin
22731 (method url-fetch)
22732 (uri (pypi-uri "pysol_cards" version))
22733 (sha256
22734 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
22735 (build-system pyproject-build-system)
22736 (arguments
22737 (list
22738 #:phases
22739 #~(modify-phases %standard-phases
22740 (replace 'check
22741 (lambda* (#:key test-flags tests? #:allow-other-keys)
22742 (when tests?
22743 (apply invoke
22744 "python"
22745 "-m"
22746 "unittest"
22747 "discover"
22748 "tests"
22749 test-flags)))))))
22750 (native-inputs (list python-setuptools python-wheel))
22751 (home-page "https://github.com/shlomif/pysol_cards")
22752 (synopsis "Deal PySol FC Cards")
22753 (description
22754 "The pysol-cards python modules provide code to generate the initial deals of
22755some PySol games.")
22756 (license license:expat)))
22757
22758(define-public python-freecell-solver
22759 (package
22760 (name "python-freecell-solver")
22761 (version "0.6.0")
22762 (source
22763 (origin
22764 (method url-fetch)
22765 (uri (pypi-uri "freecell_solver" version))
22766 (sha256
22767 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
22768 (build-system pyproject-build-system)
22769 (propagated-inputs (list python-cffi))
22770 (native-inputs (list python-pytest python-setuptools))
22771 (home-page "https://pypi.org/project/freecell-solver/")
22772 (synopsis "Freecell Solver bindings")
22773 (description
22774 "This package provides Python bindings for the freecell-solver
22775package. Freecell Solver is a program that automatically solves layouts of
22776Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
22777and Seahaven Towers, as well as Simple Simon boards.")
22778 (license license:expat)))
22779
22780(define-public python-inflection
22781 (package
22782 (name "python-inflection")
22783 (version "0.5.1")
22784 (source
22785 (origin
22786 (method git-fetch)
22787 (uri (git-reference
22788 (url "https://github.com/jpvanhal/inflection")
22789 (commit version)))
22790 (file-name (git-file-name name version))
22791 (sha256
22792 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
22793 (build-system pyproject-build-system)
22794 (native-inputs (list python-pytest python-setuptools))
22795 (home-page "https://github.com/jpvanhal/inflection")
22796 (synopsis "Python string transformation library")
22797 (description
22798 "Inflection is a string transformation library. It singularizes
22799and pluralizes English words, and transforms strings from CamelCase to
22800underscored string.")
22801 (license license:expat)))
22802
22803(define-public python-krb5
22804 (package
22805 (name "python-krb5")
22806 (version "0.5.1")
22807 (source
22808 (origin
22809 (method url-fetch)
22810 (uri (pypi-uri "krb5" version))
22811 (sha256
22812 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22813 (build-system pyproject-build-system)
22814 (inputs (list mit-krb5))
22815 (native-inputs (list python-cython python-k5test python-pytest
22816 python-setuptools python-wheel))
22817 (home-page "https://github.com/jborean93/pykrb5")
22818 (synopsis "Kerberos API bindings for Python")
22819 (description "This library provides Python functions that wraps the
22820Kerberos 5 C API.")
22821 (license license:expat)))
22822
22823(define-public python-pylev
22824 (package
22825 (name "python-pylev")
22826 (version "1.4.0")
22827 (source
22828 (origin
22829 (method git-fetch)
22830 (uri (git-reference
22831 (url "https://github.com/toastdriven/pylev")
22832 (commit (string-append "v" version))))
22833 (file-name (git-file-name name version))
22834 (sha256
22835 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22836 (build-system pyproject-build-system)
22837 (arguments
22838 (list
22839 #:test-backend #~'custom
22840 #:test-flags #~(list "tests.py")))
22841 (native-inputs (list python-setuptools))
22842 (home-page "https://github.com/toastdriven/pylev")
22843 (synopsis "Levenshtein distance implementation in Python")
22844 (description
22845 "Pure Python Levenshtein implementation, based off the Wikipedia code
22846samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22847 (license license:bsd-3)))
22848
22849(define-public python-cleo
22850 (package
22851 (name "python-cleo")
22852 (version "2.1.0")
22853 (source (origin
22854 (method url-fetch)
22855 (uri (pypi-uri "cleo" version))
22856 (sha256
22857 (base32
22858 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22859 (build-system pyproject-build-system)
22860 (native-inputs
22861 (list python-poetry-core
22862 python-mock
22863 python-pytest-mock
22864 python-pytest))
22865 (propagated-inputs
22866 (list python-crashtest python-rapidfuzz))
22867 (home-page "https://github.com/sdispater/cleo")
22868 (synopsis "Command-line arguments library for Python")
22869 (description
22870 "Cleo allows you to create command-line commands with signature in
22871docstring and colored output.")
22872 (license license:expat)))
22873
22874(define-public python-shellingham
22875 (package
22876 (name "python-shellingham")
22877 (version "1.5.4")
22878 (source
22879 (origin
22880 (method url-fetch)
22881 (uri (pypi-uri "shellingham" version))
22882 (sha256
22883 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22884 (build-system pyproject-build-system)
22885 (native-inputs
22886 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22887 (home-page "https://github.com/sarugaku/shellingham")
22888 (synopsis "Tool to detect surrounding shell")
22889 (description
22890 "Shellingham detects what shell the current Python executable is
22891running in.")
22892 (license license:isc)))
22893
22894(define-public python-shshsh
22895 (package
22896 (name "python-shshsh")
22897 (version "1.0.5")
22898 (source
22899 (origin
22900 (method git-fetch)
22901 (uri
22902 (git-reference
22903 (url "https://github.com/zqqqqz2000/shshsh")
22904 (commit
22905 "fd21c8696aebaae04507760c16cb45979291fef5")))
22906 (file-name (git-file-name name version))
22907 (sha256
22908 (base32
22909 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22910 (build-system pyproject-build-system)
22911 (native-inputs
22912 (list python-poetry-core
22913 python-pytest))
22914 (home-page "https://github.com/zqqqqz2000/shshsh")
22915 (synopsis "Write Shell commands simply and safely within Python")
22916 (description "This package provides a way to write Shell commands from
22917within Python. Python functions can be chained together to process input
22918Bash control characters are escapted so that parameters can be passed
22919without worrying about command injection.")
22920 (license license:expat)))
22921
22922(define-public python-memcached
22923 (package
22924 (name "python-memcached")
22925 (version "1.62")
22926 (source
22927 (origin
22928 (method git-fetch)
22929 (uri (git-reference
22930 (url "https://github.com/linsomniac/python-memcached")
22931 (commit version)))
22932 (file-name (git-file-name name version))
22933 (sha256
22934 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22935 (build-system pyproject-build-system)
22936 (arguments
22937 (list
22938 #:tests? #f ;Requires a connection to a socket.
22939 #:test-backend #~'unittest))
22940 (native-inputs (list python-setuptools))
22941 (home-page "https://github.com/linsomniac/python-memcached")
22942 (synopsis "Pure python memcached client")
22943 (description
22944 "This software is a pure Python interface to the memcached memory cache
22945daemon. It is the client side software which allows storing values in one or
22946more, possibly remote, memcached servers.")
22947 (license license:psfl)))
22948
22949(define-public python-mergedeep
22950 (package
22951 (name "python-mergedeep")
22952 (version "1.3.4")
22953 (source
22954 (origin
22955 (method git-fetch)
22956 (uri (git-reference
22957 (url "https://github.com/clarketm/mergedeep")
22958 (commit (string-append "v" version))))
22959 (file-name (git-file-name name version))
22960 (sha256
22961 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22962 (build-system pyproject-build-system)
22963 (arguments (list #:test-backend #~'unittest))
22964 (native-inputs (list python-setuptools))
22965 (home-page "https://github.com/clarketm/mergedeep")
22966 (synopsis "Deep merge function for Python")
22967 (description
22968 "This package provides a deep merge function for Python, useful to
22969combine multiple data objects as one.")
22970 (license license:expat)))
22971
22972(define-public python-clikit
22973 (package
22974 (name "python-clikit")
22975 (version "0.6.2")
22976 (source
22977 (origin
22978 (method git-fetch)
22979 (uri (git-reference
22980 (url "https://github.com/sdispater/clikit")
22981 (commit version)))
22982 (file-name (git-file-name name version))
22983 (sha256
22984 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22985 (build-system pyproject-build-system)
22986 (arguments
22987 (list
22988 #:phases
22989 #~(modify-phases %standard-phases
22990 (add-after 'unpack 'relax-requirements
22991 (lambda _
22992 (substitute* "pyproject.toml"
22993 (("^crashtest.*")
22994 (format #f "crashtest=~s"
22995 #$(package-version
22996 (this-package-input "python-crashtest"))))))))))
22997 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22998 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22999 (home-page "https://github.com/sdispater/clikit")
23000 (synopsis "Group of utilities to build command line interfaces")
23001 (description
23002 "CliKit is a group of utilities to build testable command line
23003interfaces.")
23004 (license license:expat)))
23005
23006(define-public python-cattrs
23007 (package
23008 (name "python-cattrs")
23009 (version "24.1.2")
23010 (source (origin
23011 (method git-fetch) ;for tests
23012 (uri (git-reference
23013 (url "https://github.com/python-attrs/cattrs")
23014 (commit (string-append "v" version))))
23015 (file-name (git-file-name name version))
23016 (sha256
23017 (base32
23018 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
23019 (build-system pyproject-build-system)
23020 (arguments
23021 (list
23022 #:test-flags
23023 '(list "--numprocesses" (number->string (parallel-job-count))
23024 ;; Skip all benchmark tests.
23025 "--ignore=bench/test_attrs_collections.py"
23026 "--ignore=bench/test_attrs_nested.py"
23027 "--ignore=bench/test_attrs_primitives.py"
23028 "--ignore=bench/test_primitives.py"
23029 "-k"
23030 (string-join
23031 ;; XXX: Tests fail with error: AssertionError: assert ...,
23032 ;; check why.
23033 (list "not test_msgspec_json_converter"
23034 "test_structure_simple_from_dict_default"
23035 "test_310_optional_field_roundtrip"
23036 "test_310_union_field_roundtrip"
23037 "test_individual_overrides"
23038 "test_nested_roundtrip"
23039 "test_nested_roundtrip_tuple"
23040 "test_omit_default_roundtrip"
23041 "test_optional_field_roundtrip"
23042 "test_renaming"
23043 ;; 'utf-8' codec can't encode character '\ud800' in
23044 ;; position 0: surrogates not allowed
23045 "test_simple_classes"
23046 ;; This test fails with an assertion error on the build
23047 ;; farm, but not on my laptop.
23048 "test_nodefs_generated_unstructuring_cl"
23049 ;; See https://github.com/python-attrs/cattrs/issues/575
23050 "test_simple_roundtrip"
23051 "test_simple_roundtrip_defaults"
23052 "test_simple_roundtrip_defaults_tuple"
23053 "test_simple_roundtrip_tuple"
23054 "test_simple_roundtrip_with_extra_keys_forbidden"
23055 "test_structure_simple_from_dict_default"
23056 "test_union_field_roundtrip"
23057 "test_unmodified_generated_structuring")
23058 " and not "))
23059 #:phases
23060 #~(modify-phases %standard-phases
23061 (add-after 'unpack 'patch-pyproject
23062 (lambda _
23063 (substitute* "pyproject.toml"
23064 ;; Fix version string
23065 (("dynamic = \\[\"version\"\\]")
23066 (string-append "version = \"" #$version "\"")))))
23067 ;; XXX Our python-hypothesis package is too old.
23068 (add-after 'unpack 'compatibility
23069 (lambda _
23070 (substitute* "tests/typed.py"
23071 (("characters\\(codec=codec\\)")
23072 "characters()")))))))
23073 (native-inputs
23074 (list python-hatchling
23075 python-hatch-vcs
23076 python-hypothesis
23077 python-immutables
23078 python-msgpack
23079 python-msgspec
23080 python-poetry-core
23081 python-pymongo ;for the bson module
23082 python-pytest
23083 python-pytest-benchmark
23084 python-pytest-xdist))
23085 (propagated-inputs
23086 (list python-attrs
23087 python-cbor2
23088 python-orjson
23089 python-pyyaml
23090 python-tomlkit
23091 python-typing-extensions
23092 python-ujson))
23093 (home-page "https://github.com/python-attrs/cattrs")
23094 (synopsis "Python library for structuring and unstructuring data")
23095 (description "@code{cattrs} is an Python library for structuring and
23096unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23097@code{dataclasses} and the usual Python collections, but other kinds of
23098classes can also be supported by manually registering converters.")
23099 (license license:expat)))
23100
23101;; A bare minimal package, mainly to use in tests and reduce closure
23102;; size. Tests are left out in the main package to slim down native-inputs and
23103;; optional propagated-inputs.
23104(define-public python-cattrs-minimal
23105 (package/inherit python-cattrs
23106 (name "python-cattrs-minimal")
23107 (arguments
23108 (substitute-keyword-arguments arguments
23109 ((#:tests? _ #t) #f)))
23110 (native-inputs
23111 (list python-hatchling
23112 python-hatch-vcs))
23113 (propagated-inputs
23114 (list python-attrs
23115 python-typing-extensions))))
23116
23117(define-public python-cachy
23118 (package
23119 (name "python-cachy")
23120 (version "0.3.0")
23121 (source
23122 (origin
23123 (method url-fetch)
23124 (uri (pypi-uri "cachy" version))
23125 (sha256
23126 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23127 (build-system pyproject-build-system)
23128 (arguments
23129 (list
23130 #:phases
23131 #~(modify-phases %standard-phases
23132 (replace 'check
23133 (lambda* (#:key tests? #:allow-other-keys)
23134 (when tests?
23135 ;; Make it compatible with python-flexmock 0.12.
23136 (substitute* (find-files "tests" "\\.py$")
23137 (("from flexmock import flexmock, flexmock_teardown")
23138 (string-append "from flexmock import flexmock\n"
23139 "from flexmock._api import flexmock_teardown")))
23140 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23141 "pytest")))))))
23142 (native-inputs
23143 (list memcached
23144 python-fakeredis
23145 python-flexmock
23146 python-pifpaf
23147 python-pytest
23148 python-setuptools
23149 python-wheel))
23150 (propagated-inputs
23151 (list python-memcached
23152 python-msgpack
23153 python-redis))
23154 (home-page "https://github.com/sdispater/cachy")
23155 (synopsis "Simple yet effective caching library")
23156 (description
23157 "Cachy provides a simple yet effective caching library. A simple but
23158powerful API: thread-safety; decorator syntax; support for memcached, redis,
23159database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23160 (license license:expat)))
23161
23162(define-public python-pyproject-api
23163 (package
23164 (name "python-pyproject-api")
23165 (version "1.10.0")
23166 (source
23167 (origin
23168 (method url-fetch)
23169 (uri (pypi-uri "pyproject_api" version))
23170 (sha256
23171 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23172 (build-system pyproject-build-system)
23173 (native-inputs
23174 (list python-hatch-vcs
23175 python-hatchling
23176 python-pytest
23177 python-pytest-mock
23178 python-setuptools))
23179 (propagated-inputs
23180 (list python-packaging python-tomli))
23181 (home-page "https://pyproject-api.readthedocs.io/latest/")
23182 (synopsis "API to interact with the Python pyproject.toml based projects")
23183 (description
23184 "@code{pyproject-api} aims to abstract away interaction with
23185@code{pyproject.toml} style projects in a flexible way.")
23186 (license license:expat)))
23187
23188(define-public python-lark
23189 (package
23190 (name "python-lark")
23191 (version "1.2.2")
23192 (source
23193 (origin
23194 (method url-fetch)
23195 (uri (pypi-uri "lark" version))
23196 (sha256
23197 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23198 (build-system pyproject-build-system)
23199 (native-inputs (list python-pytest python-setuptools python-wheel))
23200 (home-page "https://github.com/lark-parser/lark")
23201 (synopsis "Multi-language parser for Python")
23202 (description
23203 "Lark is a parser built with a focus on ergonomics, performance and
23204resilience. Lark can parse all context-free languages. That means it is
23205capable of parsing almost any programming language out there, and to
23206some degree most natural languages too.")
23207 (license license:expat)))
23208
23209(define-public python-find-libpython
23210 (package
23211 (name "python-find-libpython")
23212 (version "0.4.1")
23213 (source
23214 (origin
23215 (method git-fetch)
23216 (uri (git-reference
23217 (url "https://github.com/ktbarrett/find_libpython")
23218 (commit (string-append "v" version))))
23219 (file-name (git-file-name name version))
23220 (sha256
23221 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23222 (build-system pyproject-build-system)
23223 (native-inputs (list python-setuptools python-wheel
23224 ;; tests
23225 python-pytest))
23226 (home-page "https://github.com/ktbarrett/find_libpython")
23227 (synopsis "Find the path to the @code{libpython} dynamic library")
23228 (description
23229 "@code{find_libpython} helps find the path to the
23230@code{libpython} dynamic library for the current Python environment. It is
23231both a script and a Python package.")
23232 (license license:expat)))
23233
23234(define-public python-libcst
23235 (package
23236 (name "python-libcst")
23237 (version "1.6.0")
23238 (source (origin
23239 (method url-fetch)
23240 (uri (pypi-uri "libcst" version))
23241 (sha256
23242 (base32
23243 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23244 (snippet
23245 #~(begin (use-modules (guix build utils))
23246 ;; This is mostly to keep the cargo-build-system happy
23247 (with-output-to-file "Cargo.toml"
23248 (lambda ()
23249 (format #t "\
23250[workspace]
23251
23252members = [
23253 \"native\",]")))))))
23254 (build-system cargo-build-system)
23255 (arguments
23256 (list
23257 #:install-source? #false
23258 #:cargo-test-flags
23259 ;; According to .github/workflows/ci.yml
23260 '(list "--manifest-path=native/Cargo.toml"
23261 "--release"
23262 "--no-default-features")
23263 #:imported-modules `(,@%pyproject-build-system-modules
23264 ,@%cargo-build-system-modules)
23265 #:modules `((guix build cargo-build-system)
23266 ((guix build pyproject-build-system) #:prefix py:)
23267 (guix build utils))
23268 #:phases
23269 #~(modify-phases %standard-phases
23270 (add-after 'unpack 'prepare-source
23271 (lambda _
23272 (delete-file "native/Cargo.lock")))
23273 (replace 'build
23274 (assoc-ref py:%standard-phases 'build))
23275 (add-after 'install 'wrap
23276 (lambda _
23277 ;; Collection of python- and pyproject-build-system phases
23278 ;; between 'install and 'check.
23279 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23280 (assoc-ref py:%standard-phases 'add-install-to-path)
23281 (assoc-ref py:%standard-phases 'wrap)
23282 (assoc-ref py:%standard-phases 'create-entrypoints)
23283 (assoc-ref py:%standard-phases 'compile-bytecode)))
23284 ;; We are not the only ones who cannot load libcst.native
23285 ;; during the 'check phase
23286 ;; https://github.com/Instagram/LibCST/issues/1176
23287 ;; (add-after 'wrap 'python-check
23288 ;; (lambda args
23289 ;; (apply (assoc-ref py:%standard-phases 'check)
23290 ;; #:test-flags '()
23291 ;; args)))
23292 (replace 'install
23293 (assoc-ref py:%standard-phases 'install)))))
23294 (native-inputs
23295 (list python-minimal-wrapper
23296 python-hypothesmith
23297 python-pytest
23298 python-setuptools
23299 python-setuptools-rust
23300 python-setuptools-scm
23301 python-wheel))
23302 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23303 (propagated-inputs
23304 (list python-pyyaml))
23305 (home-page "https://github.com/Instagram/LibCST")
23306 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23307 (description
23308 "LibCST parses Python source code as a CST tree that keeps all
23309formatting details (comments, whitespaces, parentheses, etc). It's useful
23310for building automated refactoring (codemod) applications and linters.
23311LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23312a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23313naming node types and fields, LibCST creates a lossless CST that looks and
23314feels like an AST.")
23315 (license (list license:expat
23316 ;; Some files unde libcst/_parser/ are under Python Software
23317 ;; Foundation license (see LICENSE file for details)
23318 license:psfl
23319 ;; libcst/_add_slots.py
23320 license:asl2.0))))
23321
23322(define-public python-libcst-minimal
23323 (hidden-package
23324 (package
23325 (inherit python-libcst)
23326 (name "python-libcst-minimal")
23327 (arguments
23328 (substitute-keyword-arguments arguments
23329 ((#:tests? _ #t) #f)))
23330 (native-inputs
23331 (list python-minimal-wrapper
23332 python-setuptools
23333 python-setuptools-rust
23334 python-setuptools-scm
23335 python-wheel)))))
23336
23337(define-public python-lazy-loader
23338 (package
23339 (name "python-lazy-loader")
23340 (version "0.4")
23341 (source (origin
23342 (method url-fetch)
23343 (uri (pypi-uri "lazy_loader" version))
23344 (sha256
23345 (base32
23346 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23347 (build-system pyproject-build-system)
23348 (native-inputs
23349 (list python-numpy python-pytest python-setuptools))
23350 (propagated-inputs
23351 (list python-flit-core
23352 python-setuptools
23353 python-wheel))
23354 (home-page "https://scientific-python.org/specs/spec-0001/")
23355 (synopsis "Load subpackages and functions on demand")
23356 (description "@code{python-lazy-loader} makes it easy to load subpackages
23357and functions on demand. Its main features are:
23358
23359@itemize
23360@item Allow subpackages to be made visible to users without incurring import
23361costs.
23362@item Allow external libraries to be imported only when used, improving import
23363times.
23364@end itemize")
23365 (license license:bsd-3)))
23366
23367(define-public python-lazy-object-proxy
23368 (package
23369 (name "python-lazy-object-proxy")
23370 (version "1.11.0")
23371 (source
23372 (origin
23373 (method url-fetch)
23374 (uri (pypi-uri "lazy_object_proxy" version))
23375 (sha256
23376 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
23377 (build-system pyproject-build-system)
23378 (native-inputs
23379 (list python-pytest
23380 python-pytest-benchmark
23381 python-setuptools
23382 python-setuptools-scm
23383 python-wheel))
23384 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23385 (synopsis "Lazy object proxy for Python")
23386 (description
23387 "Lazy object proxy is an object that wraps a callable but defers the call
23388until the object is actually required, and caches the result of said call.")
23389 (license license:bsd-2)))
23390
23391(define-public python-dnspython
23392 (package
23393 (name "python-dnspython")
23394 (version "2.8.0")
23395 (source
23396 (origin
23397 (method url-fetch)
23398 (uri (pypi-uri "dnspython" version))
23399 (sha256
23400 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23401 (build-system pyproject-build-system)
23402 (arguments
23403 (list
23404 ;; tests: 1216 passed, 198 skipped, 2 deselected
23405 #:test-flags
23406 #~(list
23407 ;; AssertionError: assert False
23408 "--deselect=tests/test_features.py::test_have"
23409 ;; dns.exception.SyntaxError: protocol not found
23410 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23411 #:phases
23412 #~(modify-phases %standard-phases
23413 (add-after 'unpack 'patch-getprotobyname-calls
23414 ;; These calls are problematic in the build environment as there is
23415 ;; no /etc/protocols. This breaks the sanity-check phase of any
23416 ;; package depending on this one.
23417 (lambda _
23418 (substitute* "dns/rdtypes/IN/WKS.py"
23419 (("socket.getprotobyname\\('tcp'\\)")
23420 "6")
23421 (("socket.getprotobyname\\('udp'\\)")
23422 "17")))))))
23423 (native-inputs
23424 (list python-hatchling
23425 python-pytest))
23426 (propagated-inputs
23427 (append
23428 (if (supported-package? python-cryptography)
23429 (list ;; DNSSEC
23430 python-cryptography
23431 ;; DNS over Quic
23432 python-aioquic
23433 ;; DNS over HTTPS
23434 python-h2
23435 python-httpcore
23436 python-httpx)
23437 '())
23438 (list python-idna
23439 python-trio)))
23440 (home-page "https://www.dnspython.org")
23441 (synopsis "DNS toolkit for Python")
23442 (description
23443 "dnspython is a DNS toolkit for Python. It supports almost all record
23444types. It can be used for queries, zone transfers, and dynamic updates.
23445It supports TSIG authenticated messages and EDNS0.")
23446 (license license:expat)))
23447
23448(define-public python-py3dns
23449 (package
23450 (name "python-py3dns")
23451 (version "4.0.2")
23452 (source
23453 (origin
23454 (method url-fetch)
23455 (uri (pypi-uri "py3dns" version))
23456 (sha256
23457 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23458 (build-system pyproject-build-system)
23459 (arguments
23460 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23461 ;; removing functionality so we don't run tests.
23462 (list #:tests? #f))
23463 (native-inputs (list python-flit-core))
23464 (home-page "https://launchpad.net/py3dns")
23465 (synopsis "Python 3 DNS library")
23466 (description
23467 "This Python 3 module provides a DNS API for looking up DNS entries from
23468within Python 3 modules and applications. This module is a simple,
23469lightweight implementation.")
23470 (license license:psfl)))
23471
23472(define-public python-email-validator
23473 (package
23474 (name "python-email-validator")
23475 (version "2.2.0")
23476 (source
23477 (origin
23478 (method url-fetch)
23479 (uri (pypi-uri "email_validator" version))
23480 (sha256
23481 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23482 (build-system pyproject-build-system)
23483 (arguments
23484 (list
23485 #:test-flags
23486 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23487 #~(list "-k" "not test_caching_dns_resolver")))
23488 (native-inputs
23489 (list python-pytest
23490 python-setuptools
23491 python-wheel))
23492 (propagated-inputs
23493 (list python-dnspython
23494 python-idna))
23495 (home-page "https://github.com/JoshData/python-email-validator")
23496 (synopsis "Email address validation library for Python")
23497 (description
23498 "This library validates email address syntax and deliverability.")
23499 (license license:cc0)))
23500
23501(define-public python-faker
23502 (package
23503 (name "python-faker")
23504 (version "37.4.2")
23505 (source
23506 (origin
23507 (method url-fetch)
23508 (uri (pypi-uri "faker" version))
23509 (sha256
23510 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23511 (build-system pyproject-build-system)
23512 ;; tests: 2104 passed, 12 skipped, 2 warnings
23513 (native-inputs
23514 (list python-freezegun
23515 python-pytest
23516 python-setuptools
23517 python-validators))
23518 (propagated-inputs
23519 (list python-tzdata))
23520 (home-page "https://github.com/joke2k/faker")
23521 (synopsis "Python package that generates fake data")
23522 (description
23523 "Faker is a Python package that generates fake data such as names,
23524addresses, and phone numbers.")
23525 (license license:expat)))
23526
23527(define-public python-pyaml
23528 (package
23529 (name "python-pyaml")
23530 (version "25.7.0")
23531 (source
23532 (origin
23533 (method url-fetch)
23534 (uri (pypi-uri "pyaml" version))
23535 (sha256
23536 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23537 (build-system pyproject-build-system)
23538 (native-inputs
23539 (list python-pytest
23540 python-setuptools))
23541 (propagated-inputs
23542 (list python-pyyaml))
23543 (home-page "https://github.com/mk-fg/pretty-yaml")
23544 (synopsis "YAML pretty-print library for Python")
23545 (description
23546 "pyaml is a PyYAML based python module to produce pretty and readable
23547YAML-serialized data.")
23548 (license license:wtfpl2)))
23549
23550(define-public python-pyyaml-env-tag
23551 (package
23552 (name "python-pyyaml-env-tag")
23553 (version "1.1")
23554 (source
23555 (origin
23556 (method git-fetch)
23557 (uri (git-reference
23558 (url "https://github.com/waylan/pyyaml-env-tag")
23559 (commit version)))
23560 (file-name (git-file-name name version))
23561 (sha256
23562 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23563 (build-system pyproject-build-system)
23564 (native-inputs (list python-pytest python-setuptools))
23565 (propagated-inputs (list python-pyyaml))
23566 (home-page "https://github.com/waylan/pyyaml-env-tag")
23567 (synopsis "Custom YAML tag for environment variables")
23568 (description
23569 "This package provides a custom YAML tag for referencing environment
23570variables in YAML files.")
23571 (license license:expat)))
23572
23573(define-public python-prompt-toolkit
23574 (package
23575 (name "python-prompt-toolkit")
23576 (version "3.0.51")
23577 (source
23578 (origin
23579 (method url-fetch)
23580 (uri (pypi-uri "prompt_toolkit" version))
23581 (sha256
23582 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23583 (build-system pyproject-build-system)
23584 (arguments
23585 (list
23586 #:phases
23587 #~(modify-phases %standard-phases
23588 (add-before 'check 'pre-check
23589 (lambda _
23590 ;; HOME is needed for the test
23591 ;; "test_pathcompleter_can_expanduser".
23592 (setenv "HOME" "/tmp"))))))
23593 (native-inputs
23594 (list python-pytest
23595 python-setuptools))
23596 (propagated-inputs
23597 (list python-wcwidth))
23598 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23599 (synopsis "Library for building command line interfaces in Python")
23600 (description
23601 "Prompt-Toolkit is a library for building interactive command line
23602interfaces in Python. It's like GNU Readline but it also features syntax
23603highlighting while typing, out-of-the-box multi-line input editing, advanced
23604code completion, incremental search, support for Chinese double-width
23605characters, mouse support, and auto suggestions.")
23606 (license license:bsd-3)))
23607
23608(define-public python-proselint
23609 (package
23610 (name "python-proselint")
23611 (version "0.14.0")
23612 (source
23613 (origin
23614 (method url-fetch)
23615 (uri (pypi-uri "proselint" version))
23616 (sha256
23617 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23618 (build-system pyproject-build-system)
23619 (arguments
23620 (list
23621 #:phases
23622 #~(modify-phases %standard-phases
23623 (add-after 'unpack 'set-home-directory
23624 (lambda _
23625 (setenv "HOME" "/tmp"))))))
23626 (native-inputs
23627 (list python-poetry-core
23628 python-pytest))
23629 (propagated-inputs
23630 (list python-click))
23631 (home-page "http://proselint.com/")
23632 (synopsis "Linter for prose")
23633 (description "@code{python-proselint} is a linter for English prose, that
23634scans through a file and detects issues.")
23635 (license license:bsd-3)))
23636
23637(define-public python-jedi
23638 (package
23639 (name "python-jedi")
23640 (version "0.19.2")
23641 (source
23642 (origin
23643 (method git-fetch)
23644 (uri (git-reference
23645 (url "https://github.com/davidhalter/jedi")
23646 (commit (string-append "v" version))
23647 (recursive? #true)))
23648 (file-name (git-file-name name version))
23649 (sha256
23650 (base32
23651 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23652 (build-system pyproject-build-system)
23653 (arguments
23654 (list
23655 #:phases
23656 '(modify-phases %standard-phases
23657 (add-before 'check 'set-HOME
23658 (lambda _ (setenv "HOME" "/tmp"))))))
23659 (native-inputs
23660 (list python-docopt
23661 python-pytest
23662 python-setuptools
23663 python-wheel))
23664 (propagated-inputs
23665 (list python-parso))
23666 (home-page "https://github.com/davidhalter/jedi")
23667 (synopsis "Autocompletion and static analysis library for Python")
23668 (description
23669 "Jedi is a static analysis tool for Python that can be used in Integrated
23670Development Environments (@dfn{IDE}s) and text editors. It understands Python
23671on a deeper level than many other static analysis frameworks for Python.
23672
23673Jedi understands docstrings and you can use Jedi autocompletion in your REPL
23674as well.")
23675 (license license:expat)))
23676
23677(define-public ptpython
23678 (package
23679 (name "ptpython")
23680 (version "3.0.20")
23681 (source
23682 (origin
23683 (method git-fetch)
23684 (uri (git-reference
23685 (url "https://github.com/jonathanslenders/ptpython")
23686 (commit version)))
23687 (file-name (git-file-name name version))
23688 (sha256
23689 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
23690 (build-system pyproject-build-system)
23691 (arguments
23692 (list
23693 ;; XXX: There is a tests/run_tests.py file but all it does is a
23694 ;; sanity check.
23695 #:tests? #f))
23696 (native-inputs (list python-setuptools))
23697 (propagated-inputs
23698 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
23699 (home-page "https://github.com/jonathanslenders/ptpython")
23700 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
23701 (description
23702 "ptpython is a Python read-eval-print loop with IDE-like features.
23703It supports syntax highlighting, multiline editing, autocompletion, mouse,
23704color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
23705etc.")
23706 (license license:bsd-3)))
23707
23708(define-public python-easyprocess
23709 (package
23710 (name "python-easyprocess")
23711 (version "1.1")
23712 (source
23713 (origin
23714 (method git-fetch)
23715 (uri (git-reference
23716 (url "https://github.com/ponty/easyprocess")
23717 (commit version)))
23718 (file-name (git-file-name name version))
23719 (sha256
23720 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23721 (build-system pyproject-build-system)
23722 (arguments
23723 ;; Tests require pyvirtualdisplay, which requires this package.
23724 (list #:tests? #f))
23725 (native-inputs (list python-setuptools))
23726 (home-page "https://github.com/ponty/easyprocess")
23727 (synopsis "Python subprocess interface")
23728 (description
23729 "@code{easyprocess} is an easy to use Python subprocess interface.")
23730 (license license:bsd-3)))
23731
23732(define-public python-entrypoint2
23733 (package
23734 (name "python-entrypoint2")
23735 (version "0.2.4")
23736 (source
23737 (origin
23738 (method url-fetch)
23739 (uri (pypi-uri "entrypoint2" version))
23740 (sha256
23741 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23742 (build-system pyproject-build-system)
23743 (native-inputs (list python-easyprocess
23744 python-pytest
23745 python-setuptools
23746 python-wheel))
23747 (home-page "https://github.com/ponty/entrypoint2")
23748 (synopsis "Command-line interface for Python modules")
23749 (description
23750 "@code{entrypoint2} is an easy to use command-line interface for Python
23751 modules based on @code{argparse}. It translates function signature and
23752 documentation to argparse configuration.")
23753 (license license:bsd-3)))
23754
23755(define-public python-pyvirtualdisplay
23756 (package
23757 (name "python-pyvirtualdisplay")
23758 (version "3.0")
23759 (source
23760 (origin
23761 (method url-fetch)
23762 (uri (pypi-uri "PyVirtualDisplay" version))
23763 (sha256
23764 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23765 (build-system pyproject-build-system)
23766 (arguments
23767 (list
23768 ;; tests: 27 passed, 8 deselected
23769 #:test-flags
23770 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23771 ;; OSError: Pillow was built without XCB support
23772 #~(list #$@(map (lambda (test) (string-append "--deselect="
23773 "tests/"
23774 test))
23775 (list "test_smart.py::test_slowshot"
23776 "test_smart.py::test_slowshot_with"
23777 "test_smart.py::test_slowshot_nocrop"
23778 "test_smart.py::test_slowshot_timeout"
23779 "test_smart.py::test_slowshot_timeout_nocrop"
23780 "test_smart2.py::test_double"
23781 "test_smart_thread.py::test_smart"
23782 "test_examples.py::test_screenshot")))))
23783 (native-inputs
23784 (list python-easyprocess
23785 python-entrypoint2
23786 python-psutil
23787 python-pytest
23788 python-setuptools
23789 python-vncdotool-bootstrap
23790 xmessage
23791 xorg-server-for-tests))
23792 (home-page "https://github.com/ponty/pyvirtualdisplay")
23793 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23794 (description
23795 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23796 (license license:bsd-3)))
23797
23798(define-public python-pyserial
23799 (package
23800 (name "python-pyserial")
23801 (version "3.5")
23802 (source
23803 (origin
23804 (method url-fetch)
23805 (uri (pypi-uri "pyserial" version))
23806 (sha256
23807 (base32
23808 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23809 (build-system pyproject-build-system)
23810 (native-inputs
23811 (list python-pytest
23812 python-setuptools
23813 python-wheel))
23814 (home-page "https://github.com/pyserial/pyserial")
23815 (synopsis "Python Serial Port Bindings")
23816 (description
23817 "@code{pyserial} provide serial port bindings for Python. It supports
23818different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23819Xon/Xoff. The port is accessed in RAW mode.")
23820 (license license:bsd-3)))
23821
23822(define-public python-pyserial-asyncio
23823 (package
23824 (name "python-pyserial-asyncio")
23825 (version "0.6")
23826 (source
23827 (origin
23828 (method git-fetch)
23829 (uri (git-reference
23830 (url "https://github.com/pyserial/pyserial-asyncio")
23831 (commit (string-append "v" version))))
23832 (file-name (git-file-name name version))
23833 (sha256
23834 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23835 (build-system pyproject-build-system)
23836 (arguments (list #:test-backend #~'unittest))
23837 (native-inputs (list python-setuptools))
23838 (propagated-inputs (list python-pyserial))
23839 (home-page "https://github.com/pyserial/pyserial-asyncio")
23840 (synopsis "Pyserial asynchronous I/O extension")
23841 (description
23842 "This package extends Pyserial with asynchronous I/O support.")
23843 (license license:bsd-3)))
23844
23845(define-public python-pymemcache
23846 (package
23847 (name "python-pymemcache")
23848 (version "4.0.0")
23849 (source
23850 (origin
23851 (method url-fetch)
23852 (uri (pypi-uri "pymemcache" version))
23853 (sha256
23854 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23855 (build-system pyproject-build-system)
23856 (arguments
23857 ;; We don't have the zstd module.
23858 (list
23859 #:test-flags
23860 '(list "--ignore=pymemcache/test/test_compression.py")))
23861 (native-inputs
23862 (list python-faker
23863 python-pytest
23864 python-setuptools
23865 python-wheel))
23866 (home-page "https://github.com/pinterest/pymemcache")
23867 (synopsis "Comprehensive, fast, pure Python memcached client")
23868 (description
23869 "This package provides a comprehensive, fast, pure Python memcached
23870client.")
23871 (license license:asl2.0)))
23872
23873(define-public python-pymodbus
23874 (package
23875 (name "python-pymodbus")
23876 (version "3.8.6")
23877 (source
23878 (origin
23879 (method git-fetch)
23880 (uri (git-reference
23881 (url "https://github.com/riptideio/pymodbus")
23882 (commit (string-append "v" version))))
23883 (file-name (git-file-name name version))
23884 (sha256
23885 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23886 (build-system pyproject-build-system)
23887 (arguments
23888 (list
23889 #:test-flags
23890 #~(list "--ignore"
23891 "test/server/test_simulator_api.py"
23892 ;; These tests require the presence of a certificate.
23893 "--ignore-glob"
23894 "test/examples/*"
23895 "--ignore"
23896 "test/client/test_client.py")))
23897 (native-inputs (list python-mock
23898 python-pytest
23899 python-pytest-asyncio
23900 python-pytest-xdist
23901 python-redis
23902 python-setuptools
23903 python-sqlalchemy
23904 python-tornado
23905 python-twisted
23906 python-wheel))
23907 (propagated-inputs (list python-pyserial
23908 python-six
23909 ;; For the REPL.
23910 python-aiohttp
23911 python-click
23912 python-prompt-toolkit
23913 python-pygments
23914 python-pyserial-asyncio))
23915 (home-page "https://github.com/riptideio/pymodbus/")
23916 (synopsis "Modbus protocol stack in Python")
23917 (description
23918 "Pymodbus is a full Modbus protocol implementation using
23919 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23920 communications core. It includes the following @emph{client} features:
23921 @itemize
23922 @item full read/write protocol on discrete and register
23923 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23924 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23925 @item asynchronous and synchronous versions
23926 @item payload builder/decoder utilities
23927 @item pymodbus read eval print loop (REPL).
23928 @end itemize
23929 It also includes the following @emph{server} features:
23930 @itemize
23931 @item can function as a fully implemented Modbus server
23932 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23933 @item asynchronous and synchronous versions
23934 @item full server control context (device information, counters, etc)
23935 @item a number of backing contexts (database, redis, sqlite, a slave device).
23936 @end itemize")
23937 (license license:bsd-3)))
23938
23939(define-public python-exodriver
23940 (package
23941 (name "python-exodriver")
23942 (version "2.6.0")
23943 (source (origin
23944 (method git-fetch)
23945 (uri (git-reference
23946 (url "https://github.com/labjack/exodriver")
23947 (commit (string-append "v" version))))
23948 (file-name (git-file-name name version))
23949 (sha256
23950 (base32
23951 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23952 (outputs (list "out"
23953 "doc")) ;544 KiB of examples
23954 (build-system gnu-build-system)
23955 (arguments
23956 (list
23957 #:tests? #f ;no test suite
23958 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23959 (string-append "PREFIX=" #$output)
23960 "RUN_LDCONFIG=0"
23961 "LINK_SO=1")
23962 #:phases
23963 #~(modify-phases %standard-phases
23964 (delete 'configure)
23965 (replace 'build
23966 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23967 (with-directory-excursion "liblabjackusb"
23968 (apply (assoc-ref %standard-phases 'build)
23969 `(,@args #:make-flags ,make-flags)))))
23970 (replace 'install
23971 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23972 (with-directory-excursion "liblabjackusb"
23973 (apply (assoc-ref %standard-phases 'install)
23974 `(,@args #:make-flags ,make-flags)))
23975 ;; Install udev rules.
23976 (install-file "90-labjack.rules"
23977 (string-append #$output "/lib/udev/rules.d"))
23978 ;; Install examples.
23979 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23980 (mkdir-p doc)
23981 (copy-recursively "examples"
23982 (string-append doc "/examples"))))))))
23983 (inputs (list libusb))
23984 (home-page "https://github.com/labjack/exodriver")
23985 (synopsis "USB driver for LabJack data acquisition instruments")
23986 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23987communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23988instruments. A udev rule is also included to allow unprivileged users to
23989communicate with the instruments via USB.")
23990 (license license:expat))) ;see README
23991
23992(define-public python-labjack
23993 (package
23994 (name "python-labjack")
23995 (version "2.1.0")
23996 (source (origin
23997 (method url-fetch)
23998 (uri (pypi-uri "LabJackPython" version))
23999 (sha256
24000 (base32
24001 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24002 (build-system pyproject-build-system)
24003 (arguments
24004 (list
24005 #:tests? #f ;no test suite
24006 #:phases
24007 #~(modify-phases %standard-phases
24008 (add-after 'unpack 'patch-liblabjackusb.so
24009 (lambda* (#:key inputs #:allow-other-keys)
24010 (substitute* (find-files "." "\\.py$")
24011 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24012 (format #f "ctypes.CDLL(~s"
24013 (search-input-file inputs
24014 "lib/liblabjackusb.so")))))))))
24015 (native-inputs (list python-setuptools))
24016 ;; exodriver is provided as a regular input, as only its shared object is
24017 ;; used, not its Python API.
24018 (inputs (list python-exodriver))
24019 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24020 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24021 (description
24022 "This Python library allows communicating with the U3, U6, UE9 and U12
24023LabJack data acquisition (DAQ) modules.")
24024 (license license:expat))) ;see setup.py
24025
24026(define-public python-kivy-garden
24027 (package
24028 (name "python-kivy-garden")
24029 (version "0.1.5")
24030 (source
24031 (origin
24032 (method git-fetch) ; source was removed from PyPI
24033 (uri (git-reference
24034 (url "https://github.com/kivy-garden/garden")
24035 (commit (string-append "v" version))))
24036 (file-name (git-file-name name version))
24037 (sha256
24038 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24039 (build-system pyproject-build-system)
24040 (arguments
24041 (list
24042 #:tests? #f)) ; no tests in PyPI or Git distributions
24043 (native-inputs
24044 (list python-setuptools
24045 python-wheel))
24046 (propagated-inputs
24047 (list python-requests))
24048 (home-page "https://github.com/kivy-garden/garden")
24049 (synopsis "Garden tool for Kivy flowers")
24050 (description
24051 "This package provides the @command{garden} command to install packages
24052for Kivy, the multitouch application platform.")
24053 (license license:expat)))
24054
24055(define-public python-async-lru
24056 (package
24057 (name "python-async-lru")
24058 (version "2.0.4")
24059 (source
24060 (origin
24061 (method url-fetch)
24062 (uri (pypi-uri "async-lru" version))
24063 (sha256
24064 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24065 (build-system pyproject-build-system)
24066 (native-inputs
24067 (list python-pytest
24068 python-pytest-asyncio
24069 python-pytest-timeout
24070 python-setuptools
24071 python-wheel))
24072 (propagated-inputs
24073 (list python-typing-extensions))
24074 (home-page "https://github.com/aio-libs/async-lru")
24075 (synopsis "Simple LRU cache for asyncio")
24076 (description
24077 "This package is a port of Python's built-in @code{functools.lru_cache}
24078function for @code{asyncio}. To better handle async behaviour, it also
24079ensures multiple concurrent calls will only result in 1 call to the wrapped
24080function, with all awaits receiving the result of that call when it
24081completes.")
24082 (license license:expat)))
24083
24084(define-public python-asyncinject
24085 (package
24086 (name "python-asyncinject")
24087 (version "0.6.1")
24088 (source
24089 (origin
24090 (method git-fetch)
24091 (uri (git-reference
24092 (url "https://github.com/simonw/asyncinject")
24093 (commit version)))
24094 (file-name (git-file-name name version))
24095 (sha256
24096 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24097 (build-system pyproject-build-system)
24098 (native-inputs
24099 (list python-pytest
24100 python-pytest-asyncio
24101 python-setuptools))
24102 (home-page "https://github.com/simonw/asyncinject")
24103 (synopsis
24104 "Run async workflows using pytest-fixtures-style dependency injection")
24105 (description
24106 "This package lets you run asynchronous workflows using
24107pytest-fixtures-style dependency injection.")
24108 (license license:asl2.0)))
24109
24110(define-public python-binaryornot
24111 (package
24112 (name "python-binaryornot")
24113 (version "0.4.4")
24114 (source
24115 (origin
24116 (method url-fetch)
24117 (uri (pypi-uri "binaryornot" version))
24118 (sha256
24119 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
24120 (build-system pyproject-build-system)
24121 (arguments
24122 (list
24123 #:test-backend #~'unittest
24124 #:test-flags #~(list "discover" "tests")
24125 #:phases
24126 #~(modify-phases %standard-phases
24127 (add-after 'unpack 'patch-tests
24128 (lambda _
24129 ;; TypeError: binary() got an unexpected keyword argument
24130 ;; 'average_size'.
24131 (substitute* "tests/test_check.py"
24132 (("average_size=512") "")))))))
24133 (native-inputs
24134 (list python-hypothesis
24135 python-setuptools))
24136 (propagated-inputs
24137 (list python-chardet))
24138 (home-page "https://github.com/audreyr/binaryornot")
24139 (synopsis "Package to check if a file is binary or text")
24140 (description "Ultra-lightweight pure Python package to check if a file is
24141 binary or text.")
24142 (license license:bsd-3)))
24143
24144(define-public python-bson
24145 (package
24146 (name "python-bson")
24147 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24148 (revision . "0")))
24149 (version (git-version "0.5.10"
24150 (assoc-ref properties 'revision)
24151 (assoc-ref properties 'commit)))
24152 (source
24153 (origin
24154 (method git-fetch) ;for tests
24155 (uri (git-reference
24156 (url "https://github.com/py-bson/bson")
24157 (commit (assoc-ref properties 'commit))))
24158 (file-name (git-file-name name version))
24159 (sha256
24160 (base32
24161 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24162 (build-system pyproject-build-system)
24163 (native-inputs
24164 (list python-pytest
24165 python-setuptools))
24166 (propagated-inputs
24167 (list python-dateutil
24168 python-six))
24169 (home-page "https://github.com/py-bson/bson")
24170 (synopsis "BSON (Binary JSON) codec for Python")
24171 (description "@code{bson} is a Python library implementing a BSON (Binary
24172JSON) codec.")
24173 (license license:asl2.0)))
24174
24175(define-public python-nltk
24176 (package
24177 (name "python-nltk")
24178 (version "3.9.1")
24179 (source
24180 (origin
24181 (method url-fetch)
24182 (uri (pypi-uri "nltk" version))
24183 (sha256
24184 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24185 (build-system pyproject-build-system)
24186 (arguments
24187 ;; Tests require some extra resources to be downloaded.
24188 ;; TODO Try packaging these resources.
24189 '(#:tests? #f))
24190 (propagated-inputs (list python-click python-joblib python-regex
24191 python-tqdm))
24192 (native-inputs (list python-setuptools python-wheel))
24193 (home-page "https://www.nltk.org/")
24194 (synopsis "Natural Language Toolkit")
24195 (description
24196 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24197WordNet, along with a suite of text processing libraries for classification,
24198tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24199natural language processing libraries.")
24200 (license license:asl2.0)))
24201
24202(define-public python-pymongo
24203 (package
24204 (name "python-pymongo")
24205 (version "4.16.0")
24206 (source
24207 (origin
24208 (method url-fetch)
24209 (uri (pypi-uri "pymongo" version))
24210 (sha256
24211 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
24212 (build-system pyproject-build-system)
24213 (arguments
24214 (list
24215 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
24216 #:test-flags
24217 ;; Tests need access to /etc/resolve.conf.
24218 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
24219 "--ignore=test/test_srv_polling.py"
24220 "-k" (string-join
24221 ;; Tests need access to /etc/resolve.conf
24222 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
24223 "test_detected_environment_warning"
24224 ;; XXX: Tests fail with assertion is not equal.
24225 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
24226 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
24227 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
24228 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
24229 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
24230 " and not "))))
24231 (native-inputs
24232 (list python-hatch-requirements-txt
24233 python-hatchling
24234 python-pytest
24235 python-pytest-asyncio
24236 python-setuptools))
24237 (propagated-inputs
24238 (list python-certifi
24239 python-dnspython))
24240 (home-page "https://github.com/mongodb/mongo-python-driver")
24241 (synopsis "Python driver for MongoDB")
24242 (description "Python driver for MongoDB.")
24243 (license license:asl2.0)))
24244
24245(define-public python-py-consul
24246 (package
24247 (name "python-py-consul")
24248 (version "1.6.0")
24249 (source
24250 (origin
24251 (method git-fetch)
24252 (uri (git-reference
24253 ;; Fork from https://github.com/cablehead/python-consul
24254 (url "https://github.com/criteo/py-consul")
24255 (commit (string-append "v" version))))
24256 (file-name (git-file-name name version))
24257 (sha256
24258 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24259 (build-system pyproject-build-system)
24260 (arguments (list #:tests? #f)) ; Tests require docker.
24261 (native-inputs (list python-setuptools))
24262 (propagated-inputs (list python-requests))
24263 (home-page "https://github.com/criteo/py-consul")
24264 (synopsis "Python client for Consul")
24265 (description
24266 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24267discovery, monitoring and configuration.")
24268 (license license:expat)))
24269
24270(define-public python-schematics
24271 (package
24272 (name "python-schematics")
24273 (version "2.1.1")
24274 (source
24275 (origin
24276 (method git-fetch)
24277 (uri (git-reference
24278 (url "https://github.com/schematics/schematics")
24279 (commit (string-append "v" version))))
24280 (file-name (git-file-name name version))
24281 (sha256
24282 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24283 (build-system pyproject-build-system)
24284 (native-inputs
24285 (list python-dateutil python-mock python-pytest python-setuptools))
24286 (home-page "https://github.com/schematics/schematics")
24287 (synopsis "Python Data Structures for Humans")
24288 (description
24289 "Schematics is a Python library to combine types into structures,
24290validate them, and transform the shapes of your data based on simple
24291descriptions.
24292
24293The internals are similar to ORM type systems, but there is no database layer
24294in Schematics. Instead, building a database layer is easily made when
24295Schematics handles everything except for writing the query. Schematics can be
24296used for tasks where having a database involved is unusual.")
24297 (license license:bsd-3)))
24298
24299(define-public python-odfpy
24300 (package
24301 (name "python-odfpy")
24302 (version "1.4.2")
24303 (source
24304 (origin
24305 (method git-fetch)
24306 (uri (git-reference
24307 (url "https://github.com/eea/odfpy")
24308 (commit (string-append "release-" version))))
24309 (file-name (git-file-name name version))
24310 (sha256
24311 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24312 (build-system pyproject-build-system)
24313 (native-inputs (list python-pytest python-setuptools))
24314 (propagated-inputs (list python-defusedxml))
24315 (home-page "https://github.com/eea/odfpy")
24316 (synopsis "Python API and tools to manipulate OpenDocument files")
24317 (description
24318 "Collection of libraries and utility programs written in Python to
24319manipulate OpenDocument 1.2 files.")
24320 (license
24321 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24322 ;; number of files with other licenses.
24323 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24324
24325(define-public python-namex
24326 (package
24327 (name "python-namex")
24328 (version "0.0.7")
24329 (source
24330 (origin
24331 (method url-fetch)
24332 (uri (pypi-uri "namex" version))
24333 (sha256
24334 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24335 (build-system pyproject-build-system)
24336 (arguments (list #:tests? #false)) ;there are none
24337 (native-inputs (list python-setuptools python-wheel))
24338 (home-page "https://github.com/fchollet/namex")
24339 (synopsis
24340 "Separate implementation and public API surface of Python packages")
24341 (description
24342 "This package provides a simple utility to separate the
24343implementation of your Python package and its public API surface.")
24344 (license license:asl2.0)))
24345
24346(define-public python-natsort
24347 (package
24348 (name "python-natsort")
24349 (version "8.4.0")
24350 (source
24351 (origin
24352 (method url-fetch)
24353 (uri (pypi-uri "natsort" version))
24354 (sha256
24355 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24356 (build-system pyproject-build-system)
24357 (native-inputs
24358 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24359 python-pytest
24360 python-pytest-mock
24361 python-setuptools))
24362 (propagated-inputs
24363 (list python-fastnumbers
24364 python-pyicu))
24365 (home-page "https://github.com/SethMMorton/natsort")
24366 (synopsis "Natural sorting for python and shell")
24367 (description
24368 "Natsort lets you apply natural sorting on lists instead of
24369lexicographical. If you use the built-in @code{sorted} method in python on a
24370list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24371it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24372@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24373numbers and sorts them separately from strings. It can also sort version
24374numbers, real numbers, mixed types and more, and comes with a shell command
24375@command{natsort} that exposes this functionality in the command line.")
24376 (license license:expat)))
24377
24378(define-public python-graphql-core
24379 (package
24380 (name "python-graphql-core")
24381 (version "3.2.7")
24382 (source
24383 (origin
24384 (method git-fetch)
24385 (uri (git-reference
24386 (url "https://github.com/graphql-python/graphql-core")
24387 (commit (string-append "v" version))))
24388 (file-name (git-file-name name version))
24389 (sha256
24390 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24391 (build-system pyproject-build-system)
24392 (native-inputs
24393 (list python-gevent
24394 python-mock
24395 python-poetry-core
24396 python-pytest
24397 python-pytest-benchmark
24398 python-pytest-mock))
24399 (propagated-inputs
24400 (list python-promise python-six))
24401 (home-page "https://github.com/graphql-python/graphql-core")
24402 (synopsis "GraphQL implementation for Python")
24403 (description
24404 "GraphQL implementation for Python. GraphQL is a data query language and
24405 runtime designed and used to request and deliver data to mobile and web apps.
24406 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24407 to Python.")
24408 (license license:expat)))
24409
24410(define-public python-graphql-relay
24411 (package
24412 (name "python-graphql-relay")
24413 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24414 (revision . "0")))
24415 (version (git-version "3.1.5"
24416 (assoc-ref properties 'revision)
24417 (assoc-ref properties 'commit)))
24418 (source
24419 (origin
24420 (method git-fetch)
24421 (uri (git-reference
24422 (url "https://github.com/graphql-python/graphql-relay-py")
24423 (commit (assoc-ref properties 'commit))))
24424 (file-name (git-file-name name version))
24425 (sha256
24426 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24427 (build-system pyproject-build-system)
24428 (native-inputs
24429 (list python-pytest
24430 python-pytest-asyncio
24431 python-pytest-describe
24432 python-poetry-core))
24433 (propagated-inputs (list python-graphql-core))
24434 (home-page "https://github.com/graphql-python/graphql-relay-py")
24435 (synopsis "Relay implementation for Python")
24436 (description
24437 "This is a library to allow the easy creation of Relay-compliant servers
24438using the GraphQL Python reference implementation of a GraphQL server. It
24439should be noted that the code is a exact port of the original
24440@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24441implementation} from Facebook.")
24442 (license license:expat)))
24443
24444(define-public python-graphene
24445 (package
24446 (name "python-graphene")
24447 (version "3.4.3")
24448 (source
24449 (origin
24450 (method url-fetch)
24451 (uri (pypi-uri "graphene" version))
24452 (sha256
24453 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24454 (build-system pyproject-build-system)
24455 (arguments
24456 (list #:tests? #f)) ;XXX: tests fail to load
24457 (native-inputs
24458 (list python-setuptools))
24459 (propagated-inputs
24460 (list python-dateutil
24461 python-graphql-core
24462 python-graphql-relay
24463 python-typing-extensions))
24464 (home-page "https://graphene-python.org/")
24465 (synopsis "GraphQL Framework for Python")
24466 (description
24467 "Graphene is a Python library for building GraphQL schemas/types. A
24468GraphQL schema describes your data model, and provides a GraphQL server with
24469an associated set of resolve methods that know how to fetch data.")
24470 (license license:expat)))
24471
24472(define-public python-rodi
24473 (package
24474 (name "python-rodi")
24475 (version "2.0.8")
24476 (source
24477 (origin
24478 (method git-fetch)
24479 (uri (git-reference
24480 (url "https://github.com/Neoteroi/rodi")
24481 (commit (string-append "v" version))))
24482 (file-name (git-file-name name version))
24483 (sha256
24484 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24485 (build-system pyproject-build-system)
24486 (native-inputs
24487 (list python-hatchling
24488 python-pytest
24489 python-pytest-asyncio))
24490 (home-page "https://github.com/Neoteroi/rodi")
24491 (synopsis "Dependency injection framework for Python")
24492 (description
24493 "Rodi is a dependency injection framework for Python applications.
24494
24495Its features include
24496
24497@itemize
24498@item Type resolution by signature types annotations.
24499@item Type resolution by class annotations.
24500@item Type resolution by names and aliases.
24501@item Build graph of objects without the need for source code changes.
24502@item Minimum overhead to obtain services, once the objects graph is built.
24503@item Support for singleton, transient, and scoped services.
24504@end itemize")
24505 (license license:expat)))
24506
24507;; XXX: The last time updated in 2015, consider to remove it when nothing is
24508;; depend on it.
24509(define-public python-snowballstemmer
24510 (package
24511 (name "python-snowballstemmer")
24512 (version "2.2.0")
24513 (source
24514 (origin
24515 (method url-fetch)
24516 (uri (pypi-uri "snowballstemmer" version))
24517 (sha256
24518 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24519 (build-system pyproject-build-system)
24520 (arguments
24521 (list
24522 #:tests? #f)) ; no tests
24523 (native-inputs
24524 (list python-setuptools
24525 python-wheel))
24526 (home-page "https://github.com/shibukawa/snowball_py")
24527 (synopsis "Snowball stemming library collection for Python")
24528 (description
24529 "This package provides 16 word stemmer algorithms generated from Snowball
24530algorithms. It includes the 15 original ones plus the Poerter English
24531stemmer.")
24532 (license license:bsd-3)))
24533
24534(define-public python-setproctitle
24535 (package
24536 (name "python-setproctitle")
24537 (version "1.3.7")
24538 (source
24539 (origin
24540 (method git-fetch)
24541 (uri (git-reference
24542 (url "https://github.com/dvarrazzo/py-setproctitle")
24543 (commit (string-append "version-" version))))
24544 (file-name (git-file-name name version))
24545 (sha256
24546 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24547 (build-system pyproject-build-system)
24548 (arguments
24549 (list
24550 #:phases
24551 #~(modify-phases %standard-phases
24552 (add-before 'check 'configure-tests
24553 (lambda* (#:key tests? #:allow-other-keys)
24554 (when tests?
24555 (setenv "PYTHON"
24556 (or (which "python3")
24557 (which "python")))
24558 (setenv "PYCONFIG"
24559 (if (which "python3-config")
24560 "python3-config --embed"
24561 "python-config"))
24562 (substitute* "tests/conftest.py"
24563 (("cc") "gcc"))))))))
24564 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24565 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24566 (synopsis
24567 "Setproctitle implementation for Python to customize the process title")
24568 (description
24569 "The library allows a process to change its title (as displayed by system
24570tools such as @code{ps} and @code{top}).
24571
24572Changing the title is mostly useful in multi-process systems, for example when a
24573master process is forked: changing the children's title allows identifying the
24574task each process is busy with. The technique is used by PostgreSQL and the
24575OpenSSH Server for example.")
24576 (license license:bsd-3)))
24577
24578(define-public python-pyelftools
24579 (package
24580 (name "python-pyelftools")
24581 (version "0.32")
24582 (source
24583 (origin
24584 (method git-fetch)
24585 (uri (git-reference
24586 (url "https://github.com/eliben/pyelftools")
24587 (commit (string-append "v" version))))
24588 (file-name (git-file-name name version))
24589 (sha256
24590 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24591 (snippet
24592 #~(begin
24593 ;; Delete bundled readelf and llvm-dwardump executables. Project
24594 ;; also ships quite a lot binary files mainly for tests, check
24595 ;; with:
24596 ;;
24597 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24598 ;;
24599 (delete-file "test/external_tools/readelf")
24600 (delete-file "test/external_tools/llvm-dwarfdump")))))
24601 (build-system pyproject-build-system)
24602 (arguments
24603 (list
24604 #:phases
24605 #~(modify-phases %standard-phases
24606 (replace 'check
24607 (lambda* (#:key tests? #:allow-other-keys)
24608 (when tests?
24609 ;; Run just basic unit and example tests, dwarfdump and
24610 ;; readelf tests are not selected as they are fragile and
24611 ;; arch-specific.
24612 (invoke "python" "test/run_all_unittests.py")
24613 (invoke "python" "test/run_examples_test.py")))))))
24614 (home-page "https://github.com/eliben/pyelftools")
24615 (native-inputs
24616 (list python-setuptools
24617 python-wheel))
24618 (synopsis "Analyze binary and library file information")
24619 (description
24620 "This Python library provides interfaces for parsing and analyzing two
24621binary and library file formats ; the Executable and Linking Format (ELF), and
24622debugging information in the Debugging With Attributed Record
24623Format (DWARF).")
24624 (license license:public-domain)))
24625
24626(define-public python-pefile
24627 (package
24628 (name "python-pefile")
24629 (version "2024.8.26")
24630 (source
24631 (origin
24632 (method git-fetch)
24633 (uri (git-reference
24634 (url "https://github.com/erocarrera/pefile")
24635 (commit (string-append "v" version))))
24636 (file-name (git-file-name name version))
24637 (sha256
24638 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24639 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24640 (build-system pyproject-build-system)
24641 (arguments
24642 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24643 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24644 ;; decrypted and unpacked before we can run them.
24645 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24646 (native-inputs (list python-pytest python-setuptools))
24647 (propagated-inputs (list python-future))
24648 (home-page "https://github.com/erocarrera/pefile")
24649 (synopsis "Portable Executable (PE) file parser")
24650 (description
24651 "This python library provides interfaces for parsing and working with
24652Portable Executable (PE) files. It makes to most information from the header,
24653as well as section details and data available.")
24654 (license license:expat)))
24655
24656(define-public python-pyemd
24657 (package
24658 (name "python-pyemd")
24659 (version "1.0.0")
24660 (source (origin
24661 (method url-fetch)
24662 (uri (pypi-uri "pyemd" version))
24663 (sha256
24664 (base32
24665 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
24666 (build-system pyproject-build-system)
24667 (native-inputs
24668 (list python-cython
24669 python-pytest
24670 python-setuptools
24671 python-setuptools-scm))
24672 (propagated-inputs
24673 (list python-numpy-1))
24674 (home-page "https://github.com/wmayner/pyemd")
24675 (synopsis
24676 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
24677 (description
24678 "This package provides a Python wrapper for Ofir Pele and Michael
24679Werman's implementation of the Earth Mover's Distance.")
24680 (license license:expat)))
24681
24682(define-public python-imagesize
24683 (package
24684 (name "python-imagesize")
24685 (version "1.4.1")
24686 (source
24687 (origin
24688 (method url-fetch)
24689 (uri (pypi-uri "imagesize" version))
24690 (sha256
24691 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
24692 (build-system pyproject-build-system)
24693 (arguments (list #:test-backend #~'unittest))
24694 (native-inputs
24695 (list python-setuptools
24696 python-wheel))
24697 (home-page "https://github.com/shibukawa/imagesize_py")
24698 (synopsis "Gets image size of files in various formats in Python")
24699 (description
24700 "This package allows determination of image size from PNG, JPEG,
24701JPEG2000 and GIF files in pure Python.")
24702 (license license:expat)))
24703
24704(define-public python-argcomplete
24705 (package
24706 (name "python-argcomplete")
24707 (version "3.6.2")
24708 (source
24709 (origin
24710 (method url-fetch)
24711 (uri (pypi-uri "argcomplete" version))
24712 (sha256
24713 (base32
24714 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24715 (build-system pyproject-build-system)
24716 (arguments
24717 (list
24718 #:test-backend #~'custom
24719 #:test-flags #~(list "test/test.py" "-v")
24720 #:phases
24721 #~(modify-phases %standard-phases
24722 (add-before 'check 'disable-pip-tests
24723 (lambda _
24724 ;; pip: command not found
24725 (substitute* "test/test.py"
24726 (("def test_console_script")
24727 "def __disable_test_console_script"))))
24728 ;; Disable tests that fail with zsh 5.9.1. See
24729 ;; https://github.com/kislyuk/argcomplete/issues/544
24730 (add-before 'check 'disable-failing-zsh-tests
24731 (lambda _
24732 (substitute* "test/test.py"
24733 (("def (test_python_completion|test_python_filename_completion|test_python_module|test_python_not_executable)" all)
24734 (string-append "@unittest.skip(\"fails with zsh 5.9.1\")\n "
24735 all))))))))
24736 (native-inputs
24737 (list python-hatch-vcs
24738 python-hatchling
24739 python-pexpect
24740 tcsh
24741 fish
24742 bash ;full Bash for 'test_file_completion'
24743 zsh))
24744 (home-page "https://github.com/kislyuk/argcomplete")
24745 (synopsis "Shell tab completion for Python argparse")
24746 (description "argcomplete provides extensible command line tab completion
24747of arguments and options for Python scripts using @code{argparse}. It's
24748particularly useful for programs with many options or sub-parsers that can
24749dynamically suggest completions ; for example, when browsing resources over
24750the network.")
24751 (license license:asl2.0)))
24752
24753(define-public python-csscompressor
24754 (package
24755 (name "python-csscompressor")
24756 (version "0.9.5")
24757 (source
24758 (origin
24759 (method git-fetch)
24760 (uri (git-reference
24761 (url "https://github.com/sprymix/csscompressor")
24762 (commit (string-append "v" version))))
24763 (file-name (git-file-name name version))
24764 (sha256
24765 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24766 (build-system pyproject-build-system)
24767 (native-inputs (list python-pytest python-setuptools))
24768 (home-page "https://github.com/sprymix/csscompressor")
24769 (synopsis "Python port of YUI CSS Compressor")
24770 (description "This package provides a python port of YUI CSS Compressor.")
24771 (license license:bsd-3)))
24772
24773(define-public python-rcssmin
24774 (package
24775 (name "python-rcssmin")
24776 (version "1.2.0")
24777 (source
24778 (origin
24779 (method url-fetch)
24780 (uri (pypi-uri "rcssmin" version))
24781 (sha256
24782 (base32
24783 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24784 (build-system pyproject-build-system)
24785 (native-inputs (list python-pytest python-setuptools python-wheel))
24786 (home-page "http://opensource.perlig.de/rcssmin/")
24787 (synopsis "CSS Minifier")
24788 (description "The minifier is based on the semantics of the YUI compressor,
24789 which itself is based on the rule list by Isaac Schlueter.")
24790 (license license:asl2.0)))
24791
24792(define-public python-rjsmin
24793 (package
24794 (name "python-rjsmin")
24795 (version "1.2.3")
24796 (source
24797 (origin
24798 (method url-fetch)
24799 (uri (pypi-uri "rjsmin" version))
24800 (sha256
24801 (base32
24802 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24803 (modules '((guix build utils)))
24804 (snippet
24805 '(for-each delete-file (find-files "bench" "\\.js$")))))
24806 (build-system pyproject-build-system)
24807 (native-inputs
24808 (list python-pytest python-setuptools python-wheel))
24809 (home-page "http://opensource.perlig.de/rjsmin/")
24810 (synopsis "Javascript Minifier")
24811 (description "@code{rJSmin} is a javascript minifier written in Python.
24812The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24813module is a re-implementation aiming for speed, so it can be used at
24814runtime (rather than during a preprocessing step).")
24815 (license license:asl2.0)))
24816
24817(define-public python-cheetah
24818 (package
24819 (name "python-cheetah")
24820 (version "3.3.1")
24821 (source
24822 (origin
24823 (method url-fetch)
24824 (uri (pypi-uri "CT3" version))
24825 (sha256
24826 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24827 (build-system pyproject-build-system)
24828 (arguments
24829 (list
24830 #:test-backend #~'custom
24831 #:test-flags #~(list "Cheetah/Tests/Test.py")
24832 #:phases
24833 #~(modify-phases %standard-phases
24834 (add-after 'unpack 'use-absolute-python
24835 (lambda _
24836 (substitute* "Cheetah/CheetahWrapper.py"
24837 (("#!/usr/bin/env python")
24838 (string-append "#!" (which "python"))))))
24839 (add-before 'check 'configure-tests
24840 (lambda* (#:key tests? #:allow-other-keys)
24841 (substitute* "Cheetah/Tests/ImportHooks.py"
24842 (("os.path.dirname\\(__file__\\)")
24843 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24844 (substitute* "Cheetah/Tests/Test.py"
24845 (("unittest.TextTestRunner\\(\\)")
24846 "unittest.TextTestRunner(verbosity=2)"))
24847 (setenv "TMPDIR" "/tmp"))))))
24848 (native-inputs (list python-setuptools))
24849 (propagated-inputs (list python-markdown)) ;optional
24850 (home-page "https://cheetahtemplate.org/")
24851 (synopsis "Template engine")
24852 (description
24853 "Cheetah is a text-based template engine and Python code generator.
24854
24855 Cheetah can be used as a standalone templating utility or referenced as a
24856library from other Python applications. It has many potential uses, but web
24857developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24858expected to be its principle user group.
24859
24860Features:
24861@enumerate
24862@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24863other text-based format.
24864@item Cleanly separates content, graphic design, and program code.
24865@item Blends the power and flexibility of Python with a simple template
24866language that non-programmers can understand.
24867@item Gives template writers full access to any Python data structure, module,
24868function, object, or method in their templates.
24869@item Makes code reuse easy by providing an object-orientated interface to
24870templates that is accessible from Python code or other Cheetah templates. One
24871template can subclass another and selectively reimplement sections of it.
24872@item Provides a simple, yet powerful, caching mechanism that can dramatically
24873improve the performance of a dynamic website.
24874@item Compiles templates into optimized, yet readable, Python code.
24875@end enumerate")
24876 (license (license:x11-style "file://LICENSE"))))
24877
24878(define-public python-chevron
24879 (package
24880 (name "python-chevron")
24881 (version "0.14.0")
24882 (source (origin
24883 (method url-fetch)
24884 (uri (pypi-uri "chevron" version))
24885 (sha256
24886 (base32
24887 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24888 (build-system pyproject-build-system)
24889 (arguments (list #:tests? #false)) ;there are none
24890 (native-inputs (list python-setuptools python-wheel))
24891 (home-page "https://github.com/noahmorrison/chevron")
24892 (synopsis "Mustache templating language renderer")
24893 (description "This package provides a Python implementation of the
24894Mustache templating language renderer.")
24895 (license license:expat)))
24896
24897(define-public python-dulwich
24898 (package
24899 (name "python-dulwich")
24900 (version "1.0.0")
24901 (source
24902 (origin
24903 (method url-fetch)
24904 (uri (list (string-append "https://www.dulwich.io/releases/"
24905 "dulwich-" version ".tar.gz")
24906 (pypi-uri "dulwich" version)))
24907 (sha256
24908 (base32 "1g09iwy5hvjgd8qmkc5cny4qqcng2734ll9mxjzj4psj6m3i01rx"))))
24909 (build-system pyproject-build-system)
24910 (arguments
24911 (list
24912 #:test-flags
24913 ;; DULWICH_SWIFT_CFG is not set.
24914 #~(list "--ignore=tests/contrib/test_swift.py"
24915 "--ignore=tests/contrib/test_swift_smoke.py")
24916 #:phases
24917 #~(modify-phases %standard-phases
24918 (add-after 'unpack 'fix-tests
24919 (lambda* (#:key inputs #:allow-other-keys)
24920 (substitute* '("tests/test_hooks.py"
24921 "tests/porcelain/test_filters.py"
24922 "tests/test_repository.py"
24923 "tests/test_worktree.py")
24924 (("/bin/sh")
24925 (search-input-file inputs "/bin/sh")))))
24926 (add-before 'check 'pre-check
24927 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24928 (propagated-inputs
24929 (list python-fastimport python-urllib3))
24930 (native-inputs
24931 (list gnupg
24932 git-minimal/pinned
24933 openssh-sans-x
24934 python-geventhttpclient
24935 python-merge3
24936 python-mypy
24937 python-paramiko
24938 python-pytest
24939 python-requests
24940 python-setuptools
24941 python-setuptools-rust))
24942 (home-page "https://www.dulwich.io/")
24943 (synopsis "Git implementation in Python")
24944 (description "Dulwich is an implementation of the Git file formats and
24945protocols written in pure Python.")
24946 ;; Can be used with either license.
24947 (license (list license:asl2.0 license:gpl2+))))
24948
24949(define-public python-dunamai
24950 (package
24951 (name "python-dunamai")
24952 (version "1.26.0")
24953 (source
24954 (origin
24955 (method url-fetch)
24956 (uri (pypi-uri "dunamai" version))
24957 (sha256
24958 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
24959 (build-system pyproject-build-system)
24960 (arguments
24961 (list
24962 #:test-flags
24963 #~(list "-k" "not test__version__from_git__shallow")
24964 #:phases
24965 #~(modify-phases %standard-phases
24966 ;; These steps are taken from NixOS package definition:
24967 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24968 (add-before 'check 'pre-check
24969 (lambda _
24970 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24971 (setenv "HOME" "/tmp")
24972 (invoke "git" "config" "--global" "user.email" "[email protected]")
24973 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24974 (propagated-inputs
24975 (list python-packaging))
24976 (native-inputs
24977 (list git-minimal/pinned
24978 python-poetry-core
24979 python-pytest))
24980 (home-page "https://github.com/mtkennerly/dunamai")
24981 (synopsis "Dynamic version generation")
24982 (description
24983 "Dunamai is Python library and command line tool for producing dynamic,
24984standards-compliant version strings, derived from tags in your version control
24985system. This facilitates uniquely identifying nightly or per-commit builds in
24986continuous integration and releasing new versions of your software simply by
24987creating a tag.")
24988 (license license:expat)))
24989
24990(define-public python-pbkdf2
24991 (package
24992 (name "python-pbkdf2")
24993 (version "1.3")
24994 (source
24995 (origin
24996 (method url-fetch)
24997 (uri (pypi-uri "pbkdf2" version))
24998 (sha256
24999 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25000 (build-system pyproject-build-system)
25001 (arguments
25002 (list
25003 #:test-backend #~'custom
25004 #:test-flags #~(list "test/test_pbkdf2.py")))
25005 (native-inputs (list python-setuptools))
25006 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25007 (synopsis "Password-based key derivation")
25008 (description
25009 "This module implements the password-based key derivation function,
25010PBKDF2, specified in RSA PKCS#5 v2.0.
25011
25012PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25013is part of the RSA Public Key Cryptography Standards series. The provided
25014implementation takes a password or a passphrase and a salt value (and
25015optionally a iteration count, a digest module, and a MAC module) and provides
25016a file-like object from which an arbitrarily-sized key can be read.")
25017 (license license:expat)))
25018
25019(define-public python-qrcode
25020 (package
25021 (name "python-qrcode")
25022 (version "8.2")
25023 (source
25024 (origin
25025 (method url-fetch)
25026 (uri (pypi-uri "qrcode" version))
25027 (sha256
25028 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25029 (build-system pyproject-build-system)
25030 (native-inputs
25031 (list python-poetry-core
25032 python-pytest))
25033 (home-page "https://github.com/lincolnloop/python-qrcode")
25034 (synopsis "QR Code image generator")
25035 (description
25036 "This package provides a pure Python QR Code generator module. It uses
25037the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25038
25039In addition this package provides a command line tool to generate QR codes and
25040either write these QR codes to a file or do the output as ascii art at the
25041console.")
25042 (license license:bsd-3)))
25043
25044(define-public python-rst2ansi
25045 (package
25046 (name "python-rst2ansi")
25047 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
25048 (revision . "0")))
25049 (version (git-version "0.1.5"
25050 (assoc-ref properties 'revision)
25051 (assoc-ref properties 'commit)))
25052 (source
25053 (origin
25054 (method git-fetch)
25055 (uri (git-reference
25056 (url "https://github.com/Snaipe/python-rst-to-ansi")
25057 (commit (assoc-ref properties 'commit))))
25058 (file-name (git-file-name name version))
25059 (sha256
25060 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
25061 (build-system pyproject-build-system)
25062 (arguments
25063 (list
25064 #:tests? #f ; 2 tests fail with additional line characters
25065 #:phases
25066 #~(modify-phases %standard-phases
25067 (replace 'check
25068 (lambda* (#:key tests? #:allow-other-keys)
25069 (when tests?
25070 (invoke "cram" "test" "-v")))))))
25071 (native-inputs (list python-cram python-setuptools))
25072 (propagated-inputs (list python-docutils))
25073 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25074 (synopsis "Convert RST to ANSI-decorated console output")
25075 (description
25076 "Python module dedicated to rendering RST (reStructuredText) documents to
25077ansi-escaped strings suitable for display in a terminal.")
25078 (license license:expat)))
25079
25080(define-public python-ansi2html
25081 (package
25082 (name "python-ansi2html")
25083 (version "1.9.2")
25084 (source
25085 (origin
25086 (method url-fetch)
25087 (uri (pypi-uri "ansi2html" version))
25088 (sha256
25089 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25090 (build-system pyproject-build-system)
25091 (native-inputs
25092 (list python-mock
25093 python-pytest
25094 python-setuptools
25095 python-wheel))
25096 (home-page "https://github.com/ralphbean/ansi2html")
25097 (synopsis "Convert ANSI-decorated console output to HTML")
25098 (description
25099 "@command{ansi2html} is a Python library and command line utility for
25100converting text with ANSI color codes to HTML or LaTeX.")
25101 (license license:gpl3+)))
25102
25103(define-public python-easy-ansi
25104 (package
25105 (name "python-easy-ansi")
25106 (version "2.1")
25107 (source
25108 (origin
25109 (method git-fetch)
25110 (uri (git-reference
25111 (url "https://gitlab.com/joeysbytes/easy-ansi")
25112 (commit (string-append "v" version))))
25113 (file-name (git-file-name name version))
25114 (sha256
25115 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25116 (build-system pyproject-build-system)
25117 (arguments
25118 (list
25119 #:phases
25120 #~(modify-phases %standard-phases
25121 (add-after 'install 'remove-extra
25122 (lambda* (#:key inputs outputs #:allow-other-keys)
25123 (with-directory-excursion (site-packages inputs outputs)
25124 (delete-file-recursively "tests")
25125 (delete-file "setup.py")))))))
25126 (native-inputs (list python-pytest python-setuptools))
25127 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25128 (synopsis "Terminal framework API")
25129 (description
25130 "Easy ANSI is a terminal framework API to give you an easy way to use
25131colors, cursor control movements, and line/box drawing. It is not meant as a
25132replacement to more full-featured frameworks (such as curses or urwid), but as
25133a tool to quickly create nice-looking screens in your terminal window. You
25134can even create animations with the cursor controls.")
25135 (license license:expat)))
25136
25137(define-public python-easy-ansi-0.3
25138 (package
25139 (inherit python-easy-ansi)
25140 (name "python-easy-ansi")
25141 (version "0.3")
25142 (source
25143 (origin
25144 (method git-fetch)
25145 (uri (git-reference
25146 (url "https://gitlab.com/joeysbytes/easy-ansi")
25147 (commit (string-append "v" version))))
25148 (file-name (git-file-name name version))
25149 (sha256
25150 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25151 (arguments '())))
25152
25153(define-public python-pycosat
25154 (package
25155 (name "python-pycosat")
25156 (version "0.6.6")
25157 (source
25158 (origin
25159 (method git-fetch)
25160 (uri (git-reference
25161 (url "https://github.com/ContinuumIO/pycosat")
25162 (commit version)))
25163 (file-name (git-file-name name version))
25164 (sha256
25165 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25166 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25167 (build-system pyproject-build-system)
25168 (arguments (list #:test-backend #~'unittest))
25169 (native-inputs (list unzip python-setuptools))
25170 (home-page "https://github.com/ContinuumIO/pycosat")
25171 (synopsis "Bindings to picosat (a SAT solver)")
25172 (description
25173 "This package provides efficient Python bindings to @code{picosat} on the
25174C level. When importing pycosat, the @code{picosat} solver becomes part of
25175the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25176Problem} (SAT) solver.")
25177 (license license:expat)))
25178
25179(define-public python-pypeg2
25180 (package
25181 (name "python-pypeg2")
25182 (version "2.15.2")
25183 (source
25184 (origin
25185 (method url-fetch)
25186 (uri (pypi-uri "pyPEG2" version))
25187 (sha256
25188 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25189 (build-system pyproject-build-system)
25190 (native-inputs (list python-pytest python-setuptools))
25191 (propagated-inputs (list python-lxml))
25192 (home-page "https://fdik.org/pyPEG/")
25193 (synopsis "Parsing Expression Grammars in Python")
25194 (description
25195 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25196based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25197formal languages.")
25198 (license license:gpl2)))
25199
25200(define-public python-pyformlang
25201 (package
25202 (name "python-pyformlang")
25203 (version "1.0.10")
25204 (source
25205 (origin
25206 (method url-fetch)
25207 (uri (pypi-uri "pyformlang" version))
25208 (sha256
25209 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25210 (build-system pyproject-build-system)
25211 (native-inputs
25212 (list python-pytest
25213 python-setuptools
25214 python-wheel))
25215 (propagated-inputs
25216 (list python-networkx
25217 python-numpy
25218 python-pydot))
25219 (home-page "https://github.com/Aunsiels/pyformlang")
25220 (synopsis "Framework for interacting with formal grammars")
25221 (description
25222 "This package provides a framework for working with formal
25223language grammars. The library was originally developed for educational
25224purposes and therefore implements many textbook algorithms regarding the
25225manipulation and interaction with formal grammars.")
25226 (license license:expat)))
25227
25228(define-public python-incremental
25229 (package
25230 (name "python-incremental")
25231 (version "24.7.2")
25232 (source
25233 (origin
25234 (method url-fetch)
25235 (uri (pypi-uri "incremental" version))
25236 (sha256
25237 (base32
25238 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25239 (build-system pyproject-build-system)
25240 (arguments
25241 ;; Tests require twisted, which needs this package.
25242 (list #:tests? #false
25243 #:build-backend "setuptools.build_meta"))
25244 (native-inputs
25245 (list python-setuptools))
25246 (home-page "https://github.com/hawkowl/incremental")
25247 (synopsis "Library for versioning Python projects")
25248 (description "Incremental is a small library that versions your Python
25249 projects.")
25250 (license license:expat)))
25251
25252(define-public python-invoke
25253 (package
25254 (name "python-invoke")
25255 (version "2.2.1")
25256 (source
25257 (origin
25258 (method url-fetch)
25259 (uri (pypi-uri "invoke" version))
25260 (sha256
25261 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25262 ;; TODO: invoke/vendor contains:
25263 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25264 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25265 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25266 (build-system pyproject-build-system)
25267 (arguments
25268 (list
25269 ;; XXX: Requires many dependencies that are not yet in Guix.
25270 #:tests? #f
25271 #:phases
25272 #~(modify-phases %standard-phases
25273 (add-after 'unpack 'fix-bash-path
25274 (lambda _
25275 (let ((bash #$(this-package-input "bash-minimal")))
25276 (substitute* "invoke/config.py"
25277 (("shell = \"/bin/bash\"")
25278 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25279 (native-inputs
25280 (list python-setuptools
25281 python-wheel))
25282 (inputs
25283 (list bash-minimal))
25284 (home-page "https://www.pyinvoke.org/")
25285 (synopsis "Pythonic task execution")
25286 (description
25287 "Invoke is a Python task execution tool and library, drawing inspiration
25288from various sources to arrive at a powerful and clean feature set. It is
25289evolved from the Fabric project, but focuses on local and abstract concerns
25290instead of servers and network commands.")
25291 (license license:bsd-3)))
25292
25293(define-public python-automat
25294 (package
25295 (name "python-automat")
25296 (version "24.8.1")
25297 (source (origin
25298 (method url-fetch)
25299 (uri (pypi-uri "Automat" version))
25300 (sha256
25301 (base32
25302 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25303 (build-system pyproject-build-system)
25304 (arguments
25305 (list
25306 #:phases
25307 #~(modify-phases %standard-phases
25308 (replace 'check
25309 (lambda* (#:key tests? test-flags #:allow-other-keys)
25310 (with-directory-excursion #$output
25311 (apply invoke "pytest" "-vv" test-flags))))
25312 ;; Remove script, because it depends on python-twisted.
25313 (add-after 'unpack 'remove-entrypoint
25314 (lambda _
25315 (substitute* "pyproject.toml"
25316 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25317 (native-inputs
25318 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25319 (propagated-inputs
25320 (list python-graphviz python-typing-extensions))
25321 (home-page "https://github.com/glyph/Automat")
25322 (synopsis "Self-service finite-state machines")
25323 (description "Automat is a library for concise, idiomatic Python
25324 expression of finite-state automata (particularly deterministic finite-state
25325 transducers).")
25326 (license license:expat)))
25327
25328(define-public python-constantly
25329 (package
25330 (name "python-constantly")
25331 (version "23.10.4")
25332 (source
25333 (origin
25334 (method url-fetch)
25335 (uri (pypi-uri "constantly" version))
25336 (sha256
25337 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25338 (build-system pyproject-build-system)
25339 (arguments
25340 (list #:tests? #f)) ;cycles with python-twisted
25341 (native-inputs
25342 (list python-setuptools
25343 python-versioneer))
25344 (home-page "https://github.com/twisted/constantly")
25345 (synopsis "Symbolic constants in Python")
25346 (description "Constantly is a Python library that provides symbolic
25347 constant support. It includes collections and constants with text, numeric,
25348 and bit flag values.")
25349 (license license:expat)))
25350
25351(define-public python-attrs
25352 (package
25353 (name "python-attrs")
25354 (version "25.3.0")
25355 (source
25356 (origin
25357 (method url-fetch)
25358 (uri (pypi-uri "attrs" version))
25359 (sha256
25360 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
25361 (build-system pyproject-build-system)
25362 (native-inputs
25363 (list python-hatch-fancy-pypi-readme
25364 python-hatch-vcs
25365 python-hatchling
25366 python-hypothesis
25367 python-pytest))
25368 (home-page "https://github.com/python-attrs/attrs/")
25369 (synopsis "Attributes without boilerplate")
25370 (description "@code{attrs} is a Python package with class decorators that
25371 ease the chores of implementing the most common attribute-related object
25372 protocols.")
25373 (license license:expat)))
25374
25375(define-public python-attrs-bootstrap
25376 (package
25377 (inherit python-attrs)
25378 (name "python-attrs-bootstrap")
25379 (native-inputs (list python-hatchling
25380 python-hatch-fancy-pypi-readme
25381 python-hatch-vcs))
25382 (arguments `(#:tests? #f))))
25383
25384(define-public python-astroid
25385 (package
25386 (name "python-astroid")
25387 (version "3.3.11")
25388 (source
25389 (origin
25390 (method git-fetch)
25391 (uri (git-reference
25392 (url "https://github.com/PyCQA/astroid")
25393 (commit (string-append "v" version))))
25394 (file-name (git-file-name name version))
25395 (sha256
25396 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
25397 (build-system pyproject-build-system)
25398 (arguments
25399 ;; UserWarning: pkg_resources is deprecated as an API. See
25400 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
25401 ;; pkg_resources package is slated for removal as early as
25402 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
25403 (list #:test-flags
25404 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
25405 (native-inputs
25406 (list python-mypy-minimal
25407 python-pytest
25408 python-setuptools
25409 python-wheel))
25410 (propagated-inputs
25411 (list python-lazy-object-proxy
25412 python-typing-extensions
25413 python-wrapt))
25414 (home-page "https://github.com/PyCQA/astroid")
25415 (synopsis "Python source code base representation")
25416 (description "@code{python-astroid} provides a common base representation
25417of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25418It provides a compatible representation which comes from the _ast module. It
25419rebuilds the tree generated by the builtin _ast module by recursively walking
25420down the AST and building an extended ast. The new node classes have
25421additional methods and attributes for different usages. They include some
25422support for static inference and local name scopes. Furthermore, astroid
25423builds partial trees by inspecting living objects.")
25424 (license license:lgpl2.1+)))
25425
25426(define-public python-isbnlib
25427 (package
25428 (name "python-isbnlib")
25429 (version "3.10.14")
25430 (source
25431 (origin
25432 (method git-fetch)
25433 (uri (git-reference
25434 (url "https://github.com/xlcnd/isbnlib")
25435 (commit (string-append "v" version))))
25436 (file-name (git-file-name name version))
25437 (sha256
25438 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25439 (build-system pyproject-build-system)
25440 (arguments
25441 (list
25442 #:test-flags #~(list "-m" "not network")))
25443 (native-inputs (list python-pytest python-setuptools))
25444 (home-page "https://github.com/xlcnd/isbnlib")
25445 (synopsis "Python library to work with ISBN strings")
25446 (description
25447 "@code{python-isbnlib} is a (pure) python library that provides several
25448useful methods and functions to validate, clean, transform, hyphenate and get
25449metadata for ISBN strings. Its origin was as the core of isbntools. This
25450short version, is suitable to be include as a dependency in other projects.")
25451 (license license:lgpl3+)))
25452
25453(define-public python-isoduration
25454 (package
25455 (name "python-isoduration")
25456 (version "20.11.0")
25457 (source
25458 (origin
25459 (method url-fetch)
25460 (uri (pypi-uri "isoduration" version))
25461 (sha256
25462 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
25463 (build-system pyproject-build-system)
25464 (arguments '(#:tests? #f)) ;no tests in PyPI archive
25465 (propagated-inputs (list python-arrow))
25466 (native-inputs (list python-setuptools python-wheel))
25467 (home-page "https://github.com/bolsote/isoduration")
25468 (synopsis "Operations with ISO 8601 durations")
25469 (description "ISO 8601 is most commonly known as a way to exchange
25470datetimes in textual format. A lesser known aspect of the standard is the
25471representation of durations. The state of the art of ISO 8601 duration
25472handling in Python is more or less limited to what's offered by isodate. This
25473package attempts to address the shortcomings of @code{isodate}.")
25474 (license license:isc)))
25475
25476(define-public python-isort
25477 (package
25478 (name "python-isort")
25479 (version "6.0.1")
25480 (source
25481 (origin
25482 (method git-fetch) ;no tests in PyPI archive
25483 (uri (git-reference
25484 (url "https://github.com/timothycrosley/isort")
25485 (commit version)))
25486 (file-name (git-file-name name version))
25487 (modules '((guix build utils)))
25488 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25489 (sha256
25490 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
25491 (build-system pyproject-build-system)
25492 (arguments
25493 (list
25494 #:test-flags
25495 ;; Ignore benchmark and integration to reduce closure size.
25496 #~(list "--ignore=tests/benchmark/"
25497 "--ignore=tests/integration/"
25498 "--ignore=tests/unit/profiles/test_black.py"
25499 "-k" (string-join
25500 (list "not test_gitignore"
25501 "test_isort_supports_shared_profiles_issue_970"
25502 "test_requirements_dir"
25503 "test_requirements_finder"
25504 "test_sort_configurable_sort_issue_1732"
25505 "test_sort_imports_error_handling")
25506 " and not "))))
25507 ;; TODO: Package example plugins separately, available in PyPI:
25508 ;; - example_isort_formatting_plugin
25509 ;; - example_isort_sorting_plugin
25510 ;; - example_shared_isort_profile
25511 (native-inputs
25512 (list python-colorama
25513 python-hatch-vcs
25514 python-hatchling
25515 python-hypothesis
25516 python-pylama
25517 python-pytest))
25518 (home-page "https://github.com/PyCQA/isort")
25519 (synopsis "Python utility/library to sort python imports")
25520 (description
25521 "@code{python-isort} is a python utility/library to sort imports
25522alphabetically, and automatically separated into sections. It provides a
25523command line utility, a python library and plugins for various editors.")
25524 (license license:expat)))
25525
25526(define-public python-configparser
25527 (package
25528 (name "python-configparser")
25529 (version "7.2.0")
25530 (source
25531 (origin
25532 (method url-fetch)
25533 (uri (pypi-uri "configparser" version))
25534 (sha256
25535 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25536 (build-system pyproject-build-system)
25537 (native-inputs
25538 (list python-pytest
25539 python-setuptools
25540 python-setuptools-scm
25541 python-wheel))
25542 (home-page "https://github.com/jaraco/configparser/")
25543 (synopsis "Backport of configparser from python 3.5")
25544 (description "@code{python-configparser} is a backport of
25545 @code{configparser} from Python 3.5 so that it can be used directly
25546 in other versions.")
25547 (license license:expat)))
25548
25549(define-public python-mando
25550 (package
25551 (name "python-mando")
25552 (version "0.8.2")
25553 (source
25554 (origin
25555 (method url-fetch)
25556 (uri (pypi-uri "mando" version))
25557 (sha256
25558 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25559 (build-system pyproject-build-system)
25560 (native-inputs
25561 (list python-pytest python-setuptools))
25562 (home-page "https://mando.readthedocs.org/")
25563 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25564 (description
25565 "This package is a wrapper around argparse, allowing you to write complete CLI
25566applications in seconds while maintaining all the flexibility.")
25567 (license license:expat)))
25568
25569(define-public python-mwclient
25570 (package
25571 (name "python-mwclient")
25572 (version "0.11.0")
25573 (source
25574 (origin
25575 (method git-fetch)
25576 (uri (git-reference
25577 (url "https://github.com/mwclient/mwclient")
25578 (commit (string-append "v" version))))
25579 (file-name (git-file-name name version))
25580 (sha256
25581 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25582 (build-system pyproject-build-system)
25583 (propagated-inputs
25584 (list python-requests-oauthlib))
25585 (native-inputs
25586 (list python-mock
25587 python-pytest
25588 python-responses
25589 python-setuptools))
25590 (home-page "https://github.com/btongminh/mwclient")
25591 (synopsis "MediaWiki API client")
25592 (description "This package provides a MediaWiki API client.")
25593 (license license:expat)))
25594
25595(define-public python-kneed
25596 (package
25597 (name "python-kneed")
25598 (version "0.8.5")
25599 (source
25600 (origin
25601 (method git-fetch)
25602 (uri (git-reference
25603 (url "https://github.com/arvkevi/kneed")
25604 (commit (string-append "v" version))))
25605 (file-name (git-file-name name version))
25606 (sha256
25607 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25608 (build-system pyproject-build-system)
25609 (arguments
25610 (list
25611 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25612 (native-inputs (list python-hatchling python-pytest))
25613 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25614 (home-page "https://github.com/arvkevi/kneed")
25615 (synopsis "Knee-point detection in Python")
25616 (description
25617 "This package implements the kneedle algorithm. Given a set of x and y
25618values, kneed will return the knee point of the function. The knee point is
25619the point of maximum curvature.")
25620 (license license:bsd-3)))
25621
25622(define-public python-diff-cover
25623 (package
25624 (name "python-diff-cover")
25625 (version "9.7.1")
25626 (source
25627 (origin
25628 (method url-fetch)
25629 (uri (pypi-uri "diff_cover" version))
25630 (sha256
25631 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25632 (build-system pyproject-build-system)
25633 (arguments
25634 (list
25635 #:test-flags
25636 ;; Dropp check of flake8 in tests.
25637 #~(list "-k" "not test_file_does_not_exist")))
25638 (native-inputs
25639 (list python-pycodestyle
25640 python-poetry-core
25641 python-pyflakes
25642 python-pylint
25643 python-pytest
25644 python-pytest-datadir
25645 python-pytest-mock))
25646 (propagated-inputs
25647 (list python-chardet
25648 python-jinja2
25649 python-pluggy
25650 python-pygments
25651 python-setuptools ; For pkg_resources.
25652 python-tomli))
25653 (home-page "https://github.com/Bachmann1234/diff_cover")
25654 (synopsis "Run coverage and linting reports on diffs")
25655 (description
25656 "Automatically find diff lines that need test coverage. It also finds
25657diff lines that have violations (according to tools such as pycodestyle,
25658pyflakes, flake8, or pylint). This is used as a code quality metric during
25659code reviews.")
25660 (license license:asl2.0)))
25661
25662(define-public python-diff-match-patch
25663 (package
25664 (name "python-diff-match-patch")
25665 (version "20241021")
25666 (source
25667 (origin
25668 (method url-fetch)
25669 (uri (pypi-uri "diff_match_patch" version))
25670 (sha256
25671 (base32
25672 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25673 (build-system pyproject-build-system)
25674 (native-inputs (list python-flit-core python-pytest))
25675 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25676 (synopsis "Synchronize plain text")
25677 (description "Diff Match and Patch libraries offer robust algorithms to
25678 perform the operations required for synchronizing plain text.")
25679 (license license:asl2.0)))
25680
25681(define-public python-icdiff
25682 (package
25683 (name "python-icdiff")
25684 (version "2.0.7")
25685 (source (origin
25686 (method git-fetch)
25687 (uri (git-reference
25688 (url "https://github.com/jeffkaufman/icdiff")
25689 (commit (string-append "release-" version))))
25690 (file-name (git-file-name name version))
25691 (sha256
25692 (base32
25693 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25694 (build-system pyproject-build-system)
25695 (arguments
25696 (list #:tests? #f)) ; there are no test scripts
25697 (native-inputs (list python-setuptools python-wheel))
25698 (home-page "https://www.jefftk.com/icdiff")
25699 (synopsis "Improved colored diff")
25700 (description "This package provides colored diff functions that highlight
25701parts of the lines that were modified.")
25702 (license license:psfl)))
25703
25704(define-public python-dirsync
25705 (package
25706 (name "python-dirsync")
25707 (version "2.2.6")
25708 (source
25709 (origin
25710 (method url-fetch)
25711 (uri (pypi-uri "dirsync" version))
25712 (sha256
25713 (base32
25714 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25715 (build-system pyproject-build-system)
25716 (arguments
25717 ;; No tests in PyPI release and GitHub repository does not have the
25718 ;; latest release tag.
25719 (list #:tests? #f))
25720 (native-inputs (list python-setuptools python-wheel))
25721 (home-page "https://github.com/tkhyn/dirsync")
25722 (synopsis "Advanced directory tree synchronisation tool")
25723 (description
25724 "Dirsync is an advanced directory tree synchronisation tool.")
25725 (license license:expat)))
25726
25727(define-public python-levenshtein
25728 (package
25729 (name "python-levenshtein")
25730 (version "0.27.1")
25731 (source
25732 (origin
25733 (method git-fetch)
25734 (uri (git-reference
25735 (url "https://github.com/rapidfuzz/Levenshtein")
25736 (commit (string-append "v" version))))
25737 (file-name (git-file-name name version))
25738 (sha256
25739 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25740 (build-system pyproject-build-system)
25741 (propagated-inputs (list python-rapidfuzz))
25742 (native-inputs
25743 (list cmake-minimal
25744 python-cython
25745 python-pytest
25746 python-scikit-build-core
25747 python-setuptools
25748 rapidfuzz-cpp))
25749 (home-page "https://github.com/rapidfuzz/Levenshtein")
25750 (synopsis "Fast computation of Levenshtein distance and string similarity")
25751 (description
25752 "The Levenshtein Python C extension module contains functions for fast computation of
25753@enumerate
25754@item Levenshtein (edit) distance, and edit operations
25755@item string similarity
25756@item approximate median strings, and generally string averaging
25757@item string sequence and set similarity
25758@end enumerate
25759It supports both normal and Unicode strings.")
25760 (license license:gpl2+)))
25761
25762(define-public python-factory-boy
25763 (package
25764 (name "python-factory-boy")
25765 (version "3.3.3")
25766 (source
25767 (origin
25768 (method url-fetch)
25769 (uri (pypi-uri "factory_boy" version))
25770 (sha256
25771 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25772 (build-system pyproject-build-system)
25773 (arguments
25774 ;; Tests are not included in the tarball.
25775 `(#:tests? #f))
25776 (native-inputs (list python-setuptools))
25777 (propagated-inputs (list python-faker))
25778 (home-page "https://github.com/FactoryBoy/factory_boy")
25779 (synopsis "Versatile test fixtures replacement")
25780 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25781factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25782to maintain fixtures with easy-to-use factories for complex object. Instead
25783of building an exhaustive test setup with every possible combination of corner
25784cases, factory_boy allows you to use objects customized for the current test,
25785while only declaring the test-specific fields.")
25786 (license license:expat)))
25787
25788(define-public python-gtts
25789 (package
25790 (name "python-gtts")
25791 (version "2.5.4")
25792 (source
25793 (origin
25794 (method git-fetch)
25795 (uri (git-reference
25796 (url "https://github.com/pndurette/gTTS")
25797 (commit (string-append "v" version))))
25798 (file-name (git-file-name name version))
25799 (sha256
25800 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
25801 (build-system pyproject-build-system)
25802 (arguments
25803 ;; Disable tests that require internet.
25804 (list #:test-flags '(list "-k" "not net")))
25805 (native-inputs
25806 (list python-pytest python-setuptools python-testfixtures))
25807 (propagated-inputs
25808 (list python-click-8.1 python-requests))
25809 (home-page "https://github.com/pndurette/gTTS")
25810 (synopsis "Google Translate text-to-speech interface")
25811 (description
25812 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25813interface with the Google Translate text-to-speech API. It lets you write
25814spoken MP3 data to a file, a file-like object (bytestring) for further audio
25815manipulation, or @code{stdout}.")
25816 (license license:expat)))
25817
25818(define-public python-packaging-legacy
25819 (package
25820 (name "python-packaging-legacy")
25821 (version "23.0.post0")
25822 (source
25823 (origin
25824 (method url-fetch)
25825 (uri (pypi-uri "packaging_legacy" version))
25826 (sha256
25827 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25828 (build-system pyproject-build-system)
25829 (propagated-inputs (list python-packaging))
25830 (native-inputs
25831 (list python-pretend
25832 python-pytest
25833 python-setuptools
25834 python-wheel))
25835 (home-page "https://pypi.org/project/packaging-legacy/")
25836 (synopsis "Core utilities for legacy Python packages")
25837 (description "This library provides support for legacy Python Packaging
25838functionality removed from @code{packaging}.")
25839 (license license:asl2.0)))
25840
25841(define-public python-relatorio
25842 (package
25843 (name "python-relatorio")
25844 (version "0.11.1")
25845 (source
25846 (origin
25847 (method url-fetch)
25848 (uri (pypi-uri "relatorio" version))
25849 (sha256
25850 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25851 (build-system pyproject-build-system)
25852 (native-inputs
25853 (list python-pytest
25854 python-setuptools))
25855 (propagated-inputs
25856 (list python-genshi
25857 python-lxml
25858 python-magic))
25859 (home-page "https://relatorio.tryton.org/")
25860 (synopsis "Templating library able to output ODT and PDF files")
25861 (description
25862 "Relatorio is a templating library which provides a way to easily output
25863ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25864filetypes can be easily added by creating plugins for them.")
25865 (license license:gpl3+)))
25866
25867(define-public python-radon
25868 (package
25869 (name "python-radon")
25870 (version "6.0.1")
25871 (source
25872 (origin
25873 (method git-fetch)
25874 (uri (git-reference
25875 (url "https://github.com/rubik/radon")
25876 (commit (string-append "v" version))))
25877 (file-name (git-file-name name version))
25878 (sha256
25879 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25880 (build-system pyproject-build-system)
25881 (arguments
25882 (list
25883 #:phases
25884 #~(modify-phases %standard-phases
25885 (add-after 'unpack 'relax-requirements
25886 (lambda _
25887 (substitute* (list "pyproject.toml" "requirements.txt")
25888 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25889 mando-lower-bound)))))))
25890 (propagated-inputs (list python-colorama python-mando))
25891 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25892 python-setuptools))
25893 (home-page "https://radon.readthedocs.org/")
25894 (synopsis "Code Metrics in Python")
25895 (description
25896 "Radon is a Python tool which computes various code metrics. Supported
25897metrics are:
25898@itemize @bullet
25899@item raw metrics: SLOC, comment lines, blank lines, &c.
25900@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25901@item Halstead metrics (all of them)
25902@item the Maintainability Index (a Visual Studio metric)
25903@end itemize")
25904 (license license:expat)))
25905
25906(define-public python-rgbxy
25907 (package
25908 (name "python-rgbxy")
25909 (version "0.5")
25910 (source
25911 (origin
25912 (method url-fetch)
25913 (uri (pypi-uri "rgbxy" version))
25914 (sha256
25915 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25916 (build-system pyproject-build-system)
25917 (arguments
25918 (list #:tests? #f)) ;no tests in PyPI or Git
25919 (native-inputs
25920 (list python-setuptools))
25921 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25922 (synopsis "RGB conversion tool in Python")
25923 (description
25924 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25925conversion: Gamut A, B, and C.")
25926 (license license:expat)))
25927
25928(define-public python-jsonpointer
25929 (package
25930 (name "python-jsonpointer")
25931 (version "3.0.0")
25932 (source
25933 (origin
25934 (method url-fetch)
25935 (uri (pypi-uri "jsonpointer" version))
25936 (sha256
25937 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25938 (build-system pyproject-build-system)
25939 (arguments (list #:test-backend #~'unittest))
25940 (native-inputs
25941 (list python-setuptools
25942 python-wheel))
25943 (home-page "https://github.com/stefankoegl/python-json-pointer")
25944 (synopsis "Identify specific nodes in a JSON document")
25945 (description "@code{jsonpointer} allows you to access specific nodes
25946 by path in a JSON document (see RFC 6901).")
25947 (license license:bsd-3)))
25948
25949(define-public python-jsonpatch
25950 (package
25951 (name "python-jsonpatch")
25952 (version "1.33")
25953 (source
25954 (origin
25955 (method git-fetch)
25956 ;; pypi version lacks tests.js
25957 (uri (git-reference
25958 (url "https://github.com/stefankoegl/python-json-patch")
25959 (commit (string-append "v" version))))
25960 (file-name (git-file-name name version))
25961 (sha256
25962 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25963 (build-system pyproject-build-system)
25964 (arguments
25965 (list #:test-backend #~'custom
25966 #:test-flags #~(list "tests.py")))
25967 (native-inputs
25968 (list python-setuptools))
25969 (propagated-inputs
25970 (list python-jsonpointer))
25971 (home-page "https://github.com/stefankoegl/python-json-patch")
25972 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25973 (description "@code{jsonpatch} is a library and program that allows
25974 applying JSON Patches according to RFC 6902.")
25975 (license license:bsd-3)))
25976
25977(define-public python-rfc3987-syntax
25978 (package
25979 (name "python-rfc3987-syntax")
25980 (version "1.1.0")
25981 (source
25982 (origin
25983 (method git-fetch)
25984 (uri (git-reference
25985 (url "https://github.com/willynilly/rfc3987-syntax")
25986 (commit (string-append "v" version))))
25987 (file-name (git-file-name name version))
25988 (sha256
25989 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
25990 (build-system pyproject-build-system)
25991 (native-inputs
25992 (list python-hatchling
25993 python-pytest))
25994 (propagated-inputs
25995 (list python-lark))
25996 (home-page "https://github.com/willynilly/rfc3987-syntax")
25997 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
25998 (description
25999 "This package validates Internationalized Resource Identifiers (IRIs) and
26000their components against the ABNF grammar from RFC 3987. Built on the Lark
26001parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26002package, and provides the @code{format-nongpl} extra required by recent
26003@code{jsonschema} releases.")
26004 (license license:expat)))
26005
26006(define-public python-rfc3986
26007 (package
26008 (name "python-rfc3986")
26009 (version "2.0.0")
26010 (source
26011 (origin
26012 (method url-fetch)
26013 (uri (pypi-uri "rfc3986" version))
26014 (sha256
26015 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26016 (build-system pyproject-build-system)
26017 (native-inputs
26018 (list python-pytest python-setuptools))
26019 (home-page "https://rfc3986.readthedocs.io/")
26020 (synopsis "Parse and validate URI references")
26021 (description
26022 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26023validation and authority parsing. This module also supports RFC@tie{}6874
26024which adds support for zone identifiers to IPv6 addresses.")
26025 (license license:asl2.0)))
26026
26027(define-public python-rfc3986-validator
26028 (package
26029 (name "python-rfc3986-validator")
26030 (version "0.1.1")
26031 (source
26032 (origin
26033 (method url-fetch)
26034 (uri (pypi-uri "rfc3986_validator" version))
26035 (sha256
26036 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26037 (build-system pyproject-build-system)
26038 (native-inputs
26039 (list python-pytest
26040 python-rfc3987
26041 python-setuptools))
26042 (home-page "https://github.com/naimetti/rfc3986-validator")
26043 (synopsis "Pure python rfc3986 validator")
26044 (description "This package implements a URI validator according to RFC3986
26045in pure Python.")
26046 (license license:expat)))
26047
26048(define-public python-rfc3987
26049 (package
26050 (name "python-rfc3987")
26051 (version "1.3.8")
26052 (source
26053 (origin
26054 (method url-fetch)
26055 (uri (pypi-uri "rfc3987" version))
26056 (sha256
26057 (base32
26058 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26059 (build-system pyproject-build-system)
26060 (arguments
26061 (list #:test-backend #~'custom
26062 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26063 (native-inputs
26064 (list python-setuptools))
26065 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26066 (home-page "https://pypi.org/project/rfc3987/")
26067 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26068 (description "@code{rfc3987} provides routines for parsing and
26069 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26070 (license license:gpl3+)))
26071
26072;; The latest commit contains fixes for building with both python3 and python2.
26073(define-public python-rfc6555
26074 (package
26075 (name "python-rfc6555")
26076 (version "0.1.0")
26077 (source
26078 (origin
26079 (method git-fetch)
26080 (uri (git-reference
26081 (url "https://github.com/sethmlarson/rfc6555")
26082 (commit (string-append "v" version))))
26083 (file-name (git-file-name name version))
26084 (sha256
26085 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26086 (build-system pyproject-build-system)
26087 (arguments
26088 (list
26089 ;; Other tests require network access.
26090 #:test-flags #~(list "tests/test_ipv6.py")))
26091 (native-inputs (list python-pytest python-setuptools))
26092 (home-page "https://pypi.org/project/rfc6555/")
26093 (synopsis "Python implementation of RFC 6555")
26094 (description
26095 "Python implementation of the Happy Eyeballs Algorithm described in RFC
260966555. Provided with a single file and dead-simple API to allow easy vendoring
26097and integration into other projects.")
26098 (license license:asl2.0)))
26099
26100(define-public python-sacn
26101 (package
26102 (name "python-sacn")
26103 (version "1.11.0")
26104 (source
26105 (origin
26106 (method url-fetch)
26107 (uri (pypi-uri "sacn" version))
26108 (sha256
26109 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26110 (build-system pyproject-build-system)
26111 (native-inputs (list python-pytest python-setuptools python-wheel))
26112 (home-page "https://github.com/Hundemeier/sacn")
26113 (synopsis "Python library for sending and receiving sACN data")
26114 (description
26115 "This package provides a Python library for sending and receiving
26116 sACN (Streaming Architecture for Control Networks) data, a standard
26117 protocol used for controlling lighting and other devices over
26118 a network.")
26119 (license license:expat)))
26120
26121(define-public python-bagit
26122 (package
26123 (name "python-bagit")
26124 (version "1.9.0")
26125 (source
26126 (origin
26127 (method git-fetch) ; no tests in PyPI
26128 (uri (git-reference
26129 (url "https://github.com/LibraryOfCongress/bagit-python")
26130 (commit (string-append "v" version))))
26131 (file-name (git-file-name name version))
26132 (sha256
26133 (base32
26134 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26135 (build-system pyproject-build-system)
26136 (arguments
26137 (list #:test-flags #~(list "test.py")))
26138 (native-inputs
26139 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26140 (home-page "https://libraryofcongress.github.io/bagit-python/")
26141 (synopsis "Create and validate BagIt packages")
26142 (description "Bagit is a Python library and command line utility for working
26143 with BagIt style packages. BagIt is a minimalist packaging format for digital
26144 preservation.")
26145 (license license:cc0)))
26146
26147(define-public python-prov
26148 (package
26149 (name "python-prov")
26150 (version "2.1.1")
26151 (source
26152 (origin
26153 (method git-fetch)
26154 (uri (git-reference
26155 (url "https://github.com/trungdong/prov")
26156 (commit version)))
26157 (file-name (git-file-name name version))
26158 (sha256
26159 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26160 (build-system pyproject-build-system)
26161 (arguments
26162 (list
26163 #:test-backend #~'unittest
26164 #:test-flags #~(list "discover" "-s" "src")
26165 #:phases
26166 #~(modify-phases %standard-phases
26167 (add-before 'check 'disable-tests
26168 (lambda _
26169 ;; prov.model.ProvException: The provided identifier
26170 ;; "http://www.example.org/bundle" is not valid
26171 (substitute* "src/prov/tests/qnames.py"
26172 (("test_namespace_inheritance")
26173 "disabled_test_namespace_inheritance")
26174 (("test_default_namespace_inheritance")
26175 "disabled_test_default_namespace_inheritance")))))))
26176 (native-inputs
26177 (list python-setuptools))
26178 (propagated-inputs
26179 (list graphviz
26180 python-dateutil
26181 python-networkx
26182 python-pydot
26183 ;; optional dependencies, also needed for tests
26184 python-lxml
26185 python-rdflib))
26186 (home-page "https://github.com/trungdong/prov")
26187 (synopsis
26188 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26189 (description
26190 "This package provides a library for W3C Provenance Data Model supporting
26191 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26192 (license license:expat)))
26193
26194(define-public python-arcp
26195 (package
26196 (name "python-arcp")
26197 (version "0.2.1")
26198 (source
26199 (origin
26200 (method git-fetch)
26201 (uri (git-reference
26202 (url "https://github.com/stain/arcp-py")
26203 (commit version)))
26204 (file-name (git-file-name name version))
26205 (sha256
26206 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26207 (build-system pyproject-build-system)
26208 (arguments
26209 (list
26210 #:phases
26211 #~(modify-phases %standard-phases
26212 (add-after 'unpack 'patch-tests
26213 (lambda _
26214 (substitute* "tests/test_parse.py"
26215 (("ni:///")
26216 "ni:")))))))
26217 (native-inputs (list python-pytest python-setuptools))
26218 (home-page "https://arcp.readthedocs.io/")
26219 (synopsis "Archive and Package URI parser and generator")
26220 (description
26221 "@acronym{arcp, Archive and Package} provides functions for creating
26222@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26223files packaged in an archive or package, like a ZIP file. arcp URIs can be
26224used to consume or reference hypermedia resources bundled inside a file
26225archive or an application package, as well as to resolve URIs for archive
26226resources within a programmatic framework. This URI scheme provides
26227mechanisms to generate a unique base URI to represent the root of the archive,
26228so that relative URI references in a bundled resource can be resolved within
26229the archive without having to extract the archive content on the local file
26230system. An arcp URI can be used for purposes of isolation (e.g. when
26231consuming multiple archives), security constraints (avoiding \"climb out\"
26232from the archive), or for externally identiyfing sub-resources referenced by
26233hypermedia formats.")
26234 (license license:asl2.0)))
26235
26236;; XXX: Project has no updates since 2019, consider to remove when nothing
26237;; depends on it in the next refresh cycle.
26238;; See: <https://github.com/pipermerriam/flex/issues/237>.
26239(define-public python-flex
26240 (package
26241 (name "python-flex")
26242 (version "6.14.1")
26243 (source
26244 (origin
26245 (method url-fetch)
26246 (uri (pypi-uri "flex" version))
26247 (sha256
26248 (base32
26249 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26250 (build-system pyproject-build-system)
26251 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26252 (native-inputs
26253 (list python-setuptools))
26254 (propagated-inputs
26255 (list python-click
26256 python-jsonpointer
26257 python-pyyaml
26258 python-requests
26259 python-rfc3987
26260 python-six
26261 python-strict-rfc3339
26262 python-validate-email))
26263 (home-page "https://github.com/pipermerriam/flex")
26264 (synopsis "Validates Swagger schemata")
26265 (description "@code{flex} can be used to validate Swagger schemata.")
26266 (license license:bsd-3)))
26267
26268(define-public python-marshmallow
26269 (package
26270 (name "python-marshmallow")
26271 (version "4.0.0")
26272 (source
26273 (origin
26274 (method url-fetch)
26275 (uri (pypi-uri "marshmallow" version))
26276 (sha256
26277 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26278 (build-system pyproject-build-system)
26279 (arguments
26280 (list
26281 ;; tests: x86_64 1117 passed
26282 ;; i686-linux 1116 passed, 1 deselected
26283 #:test-flags
26284 #~(list #$@(if (target-64bit?)
26285 '()
26286 ;; OverflowError
26287 '((string-append "--deselect=tests/test_utils.py"
26288 "::test_from_timestamp_with_overflow_value"))))))
26289 (native-inputs
26290 (list python-flit-core
26291 python-pytest
26292 python-simplejson
26293 tzdata-for-tests))
26294 (home-page "https://github.com/marshmallow-code/marshmallow")
26295 (synopsis "Convert complex datatypes to and from native Python datatypes")
26296 (description
26297 "@code{marshmallow} provides a library for converting complex datatypes
26298to and from native Python datatypes.")
26299 (license license:expat)))
26300
26301(define-public python-marshmallow-3
26302 (package
26303 (inherit python-marshmallow)
26304 (version "3.22.0")
26305 (source
26306 (origin
26307 (method url-fetch)
26308 (uri (pypi-uri "marshmallow" version))
26309 (sha256
26310 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26311 (arguments '())
26312 (native-inputs
26313 (list python-pytest
26314 python-pytz
26315 python-simplejson
26316 python-flit-core))
26317 (propagated-inputs
26318 (list python-packaging))))
26319
26320
26321(define-public python-apispec
26322 (package
26323 (name "python-apispec")
26324 (version "6.8.2")
26325 (source
26326 (origin
26327 (method url-fetch)
26328 (uri (pypi-uri "apispec" version))
26329 (sha256
26330 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26331 (build-system pyproject-build-system)
26332 (native-inputs
26333 (list python-flit-core
26334 python-openapi-spec-validator
26335 python-pytest))
26336 (propagated-inputs
26337 (list python-marshmallow
26338 python-packaging
26339 python-pyyaml))
26340 (home-page "https://github.com/marshmallow-code/apispec")
26341 (synopsis "Swagger/OpenAPI specification generator")
26342 (description
26343 "@code{python-apispec} is a pluggable API specification generator. It
26344currently supports the OpenAPI specification, formerly known as Swagger.")
26345 (license license:expat)))
26346
26347(define-public python-apispec-webframeworks
26348 (package
26349 (name "python-apispec-webframeworks")
26350 (version "1.2.0")
26351 (source
26352 (origin
26353 (method url-fetch)
26354 (uri (pypi-uri "apispec_webframeworks" version))
26355 (sha256
26356 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26357 (build-system pyproject-build-system)
26358 (native-inputs
26359 (list python-aiohttp
26360 python-flit-core
26361 python-bottle
26362 python-flask
26363 python-pytest
26364 python-pyyaml
26365 python-tornado
26366 python-wheel))
26367 (propagated-inputs
26368 (list python-apispec))
26369 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26370 (synopsis "Web framework plugins for apispec")
26371 (description "This package provides plugins for using @code{apispec} with
26372web frameworks.")
26373 (license license:expat)))
26374
26375(define-public python-flasgger
26376 (package
26377 (name "python-flasgger")
26378 (version "0.9.7.1")
26379 (source
26380 (origin
26381 (method git-fetch)
26382 (uri (git-reference
26383 (url "https://github.com/rochacbruno/flasgger")
26384 (commit (string-append "v" version))))
26385 (file-name (git-file-name name version))
26386 (sha256
26387 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26388 (patches
26389 (list
26390 (origin
26391 (method url-fetch)
26392 (uri
26393 (string-append "https://github.com/flasgger/flasgger/commit/"
26394 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26395 (sha256
26396 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26397 (build-system pyproject-build-system)
26398 (arguments
26399 (list
26400 #:test-flags
26401 #~(list "--ignore=tests/test_examples.py"
26402 "tests")))
26403 (propagated-inputs
26404 (list python-flask
26405 python-pyyaml
26406 python-jsonschema
26407 python-mistune
26408 python-six))
26409 (native-inputs
26410 (list python-pytest
26411 python-setuptools))
26412 (home-page "https://github.com/rochacbruno/flasgger/")
26413 (synopsis "Extract Swagger specs from your Flask project")
26414 (description "@code{python-flasgger} allows extracting Swagger specs
26415 from your Flask project. It is a fork of Flask-Swagger.")
26416 (license license:expat)))
26417
26418(define-public python-apache-libcloud
26419 (package
26420 (name "python-apache-libcloud")
26421 (version "3.8.0")
26422 (source
26423 (origin
26424 (method url-fetch)
26425 (uri (pypi-uri "apache-libcloud" version))
26426 (sha256
26427 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26428 (build-system pyproject-build-system)
26429 (arguments
26430 (list
26431 #:tests? #f ; XXX: all tests fail requiring additional credentials
26432 #:phases
26433 #~(modify-phases %standard-phases
26434 (add-after 'unpack 'patch-ssh
26435 (lambda* (#:key inputs #:allow-other-keys)
26436 (substitute* "libcloud/compute/ssh.py"
26437 (("'ssh'")
26438 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26439 (add-after 'unpack 'patch-tests
26440 (lambda _
26441 (substitute* "libcloud/test/compute/test_ssh_client.py"
26442 (("^class ShellOutSSHClientTests")
26443 "@unittest.skip(\"Guix container doesn't have ssh service\")
26444class ShellOutSSHClientTests"))))
26445 (add-before 'check 'copy-secret
26446 (lambda _
26447 (copy-file "libcloud/test/secrets.py-dist"
26448 "libcloud/test/secrets.py"))))))
26449 (inputs
26450 (list openssh))
26451 (propagated-inputs
26452 (list python-requests))
26453 (native-inputs
26454 (list python-pytest python-requests-mock python-setuptools))
26455 (home-page "https://libcloud.apache.org/")
26456 (synopsis "Unified Cloud API")
26457 (description
26458 "@code{libcloud} is a Python library for interacting with many of the
26459popular cloud service providers using a unified API.")
26460 (license license:asl2.0)))
26461
26462(define-public python-smmap
26463 (package
26464 (name "python-smmap")
26465 (version "5.0.2")
26466 (source
26467 (origin
26468 (method url-fetch)
26469 (uri (pypi-uri "smmap" version))
26470 (sha256
26471 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26472 (build-system pyproject-build-system)
26473 (native-inputs
26474 (list python-pytest
26475 python-setuptools
26476 python-wheel))
26477 (home-page "https://github.com/Byron/smmap")
26478 (synopsis "Python sliding window memory map manager")
26479 (description "@code{smmap} is a pure Python implementation of a sliding
26480 window memory map manager.")
26481 (license license:bsd-3)))
26482
26483(define-public python-regex
26484 (package
26485 (name "python-regex")
26486 (version "2026.2.28")
26487 (source
26488 (origin
26489 (method git-fetch)
26490 (uri (git-reference
26491 (url "https://github.com/mrabarnett/mrab-regex")
26492 (commit version)))
26493 (file-name (git-file-name name version))
26494 (sha256
26495 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26496 (build-system pyproject-build-system)
26497 (arguments
26498 (list
26499 #:test-backend #~'unittest
26500 #:test-flags #~(list "-v" "regex.tests.test_regex")
26501 #:phases
26502 #~(modify-phases %standard-phases
26503 (add-before 'check 'remove-local-source
26504 (lambda _
26505 (delete-file-recursively "regex"))))))
26506 (native-inputs
26507 (list python-setuptools))
26508 (home-page "https://github.com/mrabarnett/mrab-regex")
26509 (synopsis "Alternative regular expression module")
26510 (description
26511 "This regular expression implementation is backwards-compatible with the
26512standard @code{re} module, but offers additional functionality like full
26513case-folding for case-insensitive matches in Unicode.")
26514 (license license:psfl)))
26515
26516(define-public python-pysocks
26517 (package
26518 (name "python-pysocks")
26519 (version "1.7.1")
26520 (source
26521 (origin
26522 (method url-fetch)
26523 (uri (pypi-uri "PySocks" version))
26524 (sha256
26525 (base32
26526 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26527 (build-system pyproject-build-system)
26528 (arguments `(#:tests? #f))
26529 (native-inputs
26530 (list python-setuptools))
26531 (home-page "https://github.com/Anorov/PySocks")
26532 (synopsis "SOCKS client module")
26533 (description "@code{pysocks} is an updated and semi-actively maintained
26534version of @code{SocksiPy} with bug fixes and extra features.")
26535 (license license:bsd-3)))
26536
26537(define-public python-pydub
26538 ;; TODO: Move to (gnu packages audio)
26539 (package
26540 (name "python-pydub")
26541 (version "0.25.1")
26542 (source
26543 (origin
26544 (method git-fetch)
26545 (uri (git-reference
26546 (url "https://github.com/jiaaro/pydub")
26547 (commit (string-append "v" version))))
26548 (file-name (git-file-name name version))
26549 (sha256
26550 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26551 (patches
26552 (list
26553 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26554 (origin
26555 (method url-fetch)
26556 (uri
26557 (string-append "https://github.com/jiaaro/pydub/commit/"
26558 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26559 (sha256
26560 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26561 (build-system pyproject-build-system)
26562 (arguments
26563 (list
26564 #:test-backend ''unittest
26565 #:phases
26566 #~(modify-phases %standard-phases
26567 (add-after 'unpack 'fix-ffmpeg-path
26568 (lambda* (#:key inputs #:allow-other-keys)
26569 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26570 (substitute* "pydub/utils.py"
26571 (("return \"ffmpeg\"")
26572 (string-append "return \"" bin "/ffmpeg\""))
26573 (("return \"ffplay\"")
26574 (string-append "return \"" bin "/ffplay\""))
26575 (("return \"ffprobe\"")
26576 (string-append "return \"" bin "/ffprobe\""))
26577 (("warn\\(\"Couldn't find ff")
26578 "# warn\\(\"Couldn't find ff"))))))))
26579 (native-inputs (list python-setuptools))
26580 (home-page "https://pydub.com")
26581 (inputs (list ffmpeg))
26582 (propagated-inputs (list python-scipy))
26583 (synopsis "Manipulate audio with a high level interface in Python")
26584 (description
26585 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26586@code{ffmpeg} to open various audio formats.")
26587 (license license:expat))) ; MIT license
26588
26589(define-public python-pkginfo
26590 (package
26591 (name "python-pkginfo")
26592 (version "1.12.1.2")
26593 (source
26594 (origin
26595 (method url-fetch)
26596 (uri (pypi-uri "pkginfo" version))
26597 (sha256
26598 (base32
26599 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26600 (build-system pyproject-build-system)
26601 (arguments
26602 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26603 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26604 (native-inputs
26605 (list python-pytest
26606 python-setuptools
26607 python-wheel))
26608 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26609 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26610 (description
26611 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26612source distriubtion (an sdist) or a binary distribution (e.g., created by
26613running bdist_egg). It can also query the EGG-INFO directory of an installed
26614distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26615created by running @code{python setup.py develop}).")
26616 (license license:expat)))
26617
26618;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26619;; read-only. Consider to remove when nothing depends on it.
26620(define-public python-ratelimiter
26621 ;; From https://github.com/RazerM/ratelimiter/pull/11
26622 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26623 (revision "0"))
26624 (package
26625 (name "python-ratelimiter")
26626 (version (git-version "1.2.0.post1" revision commit))
26627 (source
26628 (origin
26629 (method git-fetch)
26630 (uri (git-reference
26631 (url "https://github.com/RazerM/ratelimiter")
26632 (commit commit)))
26633 (sha256
26634 (base32
26635 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26636 (build-system pyproject-build-system)
26637 (arguments
26638 (list #:phases
26639 '(modify-phases %standard-phases
26640 (add-after 'unpack 'pytest-compatibility
26641 (lambda _
26642 (substitute* "tests/conftest.py"
26643 (("pytest.collect.File") "pytest.File")))))))
26644 (native-inputs
26645 (list python-pytest-8
26646 python-pytest-asyncio-0.26
26647 python-setuptools))
26648 (home-page "https://github.com/RazerM/ratelimiter")
26649 (synopsis "Simple rate limiting object")
26650 (description
26651 "The @code{ratelimiter} module ensures that an operation will not be
26652executed more than a given number of times during a given period.")
26653 (license license:asl2.0))))
26654
26655(define-public python-rbfly
26656 (package
26657 (name "python-rbfly")
26658 (version "0.11.0")
26659 (source
26660 (origin
26661 (method url-fetch)
26662 (uri (pypi-uri "rbfly" version))
26663 (sha256
26664 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26665 (build-system pyproject-build-system)
26666 (arguments
26667 (list
26668 #:test-flags
26669 #~(list "--pyargs" "rbfly"
26670 #$@(if (target-64bit?)
26671 '()
26672 '((string-append "--deselect=tests/amqp/test_message.py"
26673 "::test_encode_amqp_string_too_long"))))
26674 #:phases
26675 #~(modify-phases %standard-phases
26676 (add-before 'check 'remove-local-source
26677 (lambda _
26678 (delete-file-recursively "rbfly"))))))
26679 (native-inputs
26680 (list python-cython
26681 python-pytest
26682 python-pytest-asyncio
26683 python-pytest-timeout
26684 python-setuptools))
26685 (home-page "https://wrobell.dcmod.org/rbfly/")
26686 (synopsis "Work with RabbitMQ Streams in Python")
26687 (description
26688 "This package implements a functionality to deal with
26689@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26690@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26691
26692It is designed and implemented with the following qualities in mind:
26693@itemize
26694@item asynchronous Pythonic API with type annotations
26695@item use of
26696@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
266971.0 message format to enable interoperability between RabbitMQ Stream. clients
26698@item auto reconnection to RabbitMQ broker with lazily created connection
26699objects
26700@end itemize
26701
26702Support of many RabbitMQ Streams broker features:
26703@itemize
26704@item publishing single messages, or in batches, with confirmation
26705@item subscribing to a stream at a specific point in time, from a specific
26706offset, or using offset reference
26707@item stream message filtering
26708@item writing stream offset reference
26709@item message deduplication
26710@item integration with AMQP 1.0 ecosystem at message format level
26711@end itemize")
26712 (license license:gpl3+)))
26713
26714(define-public python-jsonrpclib-pelix
26715 (package
26716 (name "python-jsonrpclib-pelix")
26717 (version "0.3.2")
26718 (source
26719 (origin
26720 (method git-fetch)
26721 (uri (git-reference
26722 (url "https://github.com/tcalmant/jsonrpclib")
26723 (commit (string-append "v" version))))
26724 (file-name (git-file-name name version))
26725 (sha256
26726 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26727 (build-system pyproject-build-system)
26728 (arguments
26729 (list
26730 #:test-flags #~(list "--deselect=\
26731tests/test_internal.py::InternalTests::test_multicall_success")))
26732 (native-inputs (list python-pytest python-setuptools))
26733 (home-page "https://github.com/tcalmant/jsonrpclib")
26734 (synopsis "JSON-RPC 2.0 client library for Python")
26735 (description
26736 "This library implements the JSON-RPC v2.0 specification
26737(backwards-compatible) as a client library for Python. This version is a fork
26738of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26739 (license license:asl2.0)))
26740
26741(define-public python-setuptools-git
26742 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26743 ;; refresh cycle.
26744 (package
26745 (name "python-setuptools-git")
26746 (version "1.2")
26747 (source
26748 (origin
26749 (method url-fetch)
26750 (uri (pypi-uri "setuptools-git" version))
26751 (sha256
26752 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26753 (build-system pyproject-build-system)
26754 (arguments
26755 (list
26756 #:tests? #f ;no tests in PyPI
26757 #:phases
26758 #~(modify-phases %standard-phases
26759 ;; This is needed for tests.
26760 (add-after 'unpack 'configure-git
26761 (lambda _
26762 (setenv "HOME" "/tmp")
26763 (invoke "git" "config" "--global" "user.email" "guix")
26764 (invoke "git" "config" "--global" "user.name" "guix"))))))
26765 (native-inputs
26766 (list git-minimal/pinned python-setuptools python-wheel))
26767 (home-page "https://github.com/msabramo/setuptools-git")
26768 (synopsis "Setuptools revision control system plugin for Git")
26769 (description
26770 "This package provides a plugin for Setuptools for revision control with
26771Git.")
26772 (license license:bsd-3)))
26773
26774(define-public python-setuptools-rust
26775 (package
26776 (name "python-setuptools-rust")
26777 (version "1.11.1")
26778 (source
26779 (origin
26780 (method url-fetch)
26781 (uri (pypi-uri "setuptools_rust" version))
26782 (sha256
26783 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26784 (build-system pyproject-build-system)
26785 (arguments
26786 (list #:tests? #f)) ;tests require Cargo
26787 (propagated-inputs
26788 (list python-semantic-version
26789 python-setuptools))
26790 (home-page "https://github.com/PyO3/setuptools-rust")
26791 (synopsis "Setuptools plugin for Rust extensions")
26792 (description
26793 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26794Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26795 (license license:expat)))
26796
26797(define-public python-setuptools-gettext
26798 (package
26799 (name "python-setuptools-gettext")
26800 (version "0.1.14")
26801 (source
26802 (origin
26803 (method git-fetch)
26804 (uri (git-reference
26805 (url "https://github.com/breezy-team/setuptools-gettext")
26806 (commit (string-append "v" version))))
26807 (file-name (git-file-name name version))
26808 (sha256
26809 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26810 (build-system pyproject-build-system)
26811 (native-inputs (list python-pytest python-tomli python-setuptools))
26812 (home-page "https://github.com/breezy-team/setuptools-gettext")
26813 (synopsis "Setuptools plugin for gettext")
26814 (description "This package provides a plugin for Setuptools for gettext.")
26815 (license license:gpl2+)))
26816
26817(define-public python-pyclibrary
26818 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26819 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26820 (revision "0"))
26821 (package
26822 (name "python-pyclibrary")
26823 (version (git-version "0.2.2" revision commit))
26824 (source
26825 (origin
26826 (method git-fetch)
26827 (uri (git-reference
26828 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26829 (commit commit)))
26830 (file-name (git-file-name name version))
26831 (sha256
26832 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26833 (build-system pyproject-build-system)
26834 (native-inputs
26835 (list python-pytest
26836 python-setuptools
26837 python-setuptools-scm))
26838 (propagated-inputs
26839 (list python-pyparsing))
26840 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26841 (synopsis "Wrap dynamic libraries in Python")
26842 (description
26843 "This package helps wrapping dynamic libraries in Python. It includes
26844a pure-Python C parser and an automation library that uses C header file
26845definitions to simplify the use of C bindings.")
26846 (license license:expat))))
26847
26848(define-public python-pyclipper
26849 (package
26850 (name "python-pyclipper")
26851 (version "1.3.0.post6")
26852 (source
26853 (origin
26854 (method git-fetch)
26855 (uri (git-reference
26856 (url "https://github.com/greginvm/pyclipper")
26857 (commit version)))
26858 (file-name (git-file-name name version))
26859 (sha256
26860 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26861 (build-system pyproject-build-system)
26862 (arguments
26863 (list
26864 #:phases
26865 #~(modify-phases %standard-phases
26866 (add-before 'build 'cythonize-sources
26867 (lambda _
26868 (with-directory-excursion "src/pyclipper"
26869 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26870 (native-inputs
26871 (list python-cython
26872 python-pytest
26873 python-setuptools
26874 python-setuptools-scm))
26875 (home-page "https://github.com/greginvm/pyclipper")
26876 (synopsis "Wrapper for Angus Johnson's Clipper library")
26877 (description
26878 "Pyclipper is a Cython wrapper for the C++ translation of the
26879Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26880 (license license:expat)))
26881
26882(define-public python-semver
26883 (package
26884 (name "python-semver")
26885 (version "3.0.4")
26886 (source
26887 (origin
26888 (method url-fetch)
26889 (uri (pypi-uri "semver" version))
26890 (sha256
26891 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26892 (build-system pyproject-build-system)
26893 (native-inputs (list python-pytest python-setuptools))
26894 (home-page "https://github.com/k-bx/python-semver")
26895 (synopsis "Python helper for Semantic Versioning")
26896 (description
26897 "This package provides a Python library for @url{Semantic Versioning,
26898http://semver.org/}.")
26899 (license license:bsd-3)))
26900
26901(define-public python-phonenumbers
26902 (package
26903 (name "python-phonenumbers")
26904 (version "8.13.37")
26905 (source
26906 (origin
26907 (method git-fetch)
26908 (uri (git-reference
26909 (url "https://github.com/daviddrysdale/python-phonenumbers")
26910 (commit (string-append "v" version))))
26911 (file-name (git-file-name name version))
26912 (sha256
26913 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26914 (build-system pyproject-build-system)
26915 (arguments
26916 (list
26917 #:test-backend #~'custom
26918 #:test-flags #~(list "-m" "testwrapper")
26919 #:phases
26920 #~(modify-phases %standard-phases
26921 (add-after 'unpack 'chdir
26922 (lambda _
26923 (chdir "python"))))))
26924 (propagated-inputs (list python-protobuf))
26925 (native-inputs (list python-setuptools))
26926 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26927 (synopsis "Python library for dealing with international phone numbers")
26928 (description
26929 "This package provides a Python port of Google's libphonenumber library.")
26930 (license license:asl2.0)))
26931
26932(define-public python-heapdict
26933 (package
26934 (name "python-heapdict")
26935 (version "1.0.1")
26936 (source
26937 (origin
26938 (method url-fetch)
26939 (uri (pypi-uri "HeapDict" version))
26940 (sha256
26941 (base32
26942 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26943 (build-system pyproject-build-system)
26944 (arguments (list #:test-backend #~'unittest))
26945 (native-inputs (list python-setuptools))
26946 (home-page "http://stutzbachenterprises.com/")
26947 (synopsis "Heap with decrease-key and increase-key operations")
26948 (description
26949 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26950like a regular Python @code{dict}. It’s designed to be used as a priority
26951queue.")
26952 (license license:bsd-3)))
26953
26954(define-public python-send2trash
26955 (package
26956 (name "python-send2trash")
26957 (version "1.8.2")
26958 (source
26959 (origin (method git-fetch)
26960 ;; Source tarball on PyPI doesn't include tests.
26961 (uri (git-reference
26962 (url "https://github.com/arsenetar/send2trash")
26963 (commit version)))
26964 (file-name (git-file-name name version))
26965 (sha256
26966 (base32
26967 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26968 (build-system pyproject-build-system)
26969 (arguments
26970 (list
26971 #:phases
26972 '(modify-phases %standard-phases
26973 (add-before 'check 'pre-check
26974 (lambda _ (setenv "HOME" "/tmp"))))))
26975 (native-inputs (list python-pytest python-setuptools python-wheel))
26976 (home-page "https://github.com/arsenetar/send2trash")
26977 (synopsis "Send files to the user's @file{~/Trash} directory")
26978 (description "This package provides a Python library to send files to the
26979user's @file{~/Trash} directory.")
26980 (license license:bsd-3)))
26981
26982(define-public python-pyfavicon
26983 (package
26984 (name "python-pyfavicon")
26985 (version "0.1.1")
26986 (source
26987 (origin
26988 (method git-fetch)
26989 (uri (git-reference
26990 (url "https://github.com/bilelmoussaoui/pyfavicon")
26991 (commit version)))
26992 (file-name (git-file-name name version))
26993 (sha256
26994 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26995 (build-system pyproject-build-system)
26996 (arguments
26997 (list
26998 #:test-flags
26999 #~(list "-k" (string-join (list
27000 ;; Socket name resolution fails.
27001 "not test_url_icon_link_type"
27002 "test_icon_sizes"
27003 ;; Tuples differ.
27004 "test_largest_icon")
27005 " and not "))))
27006 (native-inputs (list python-pytest python-setuptools))
27007 (propagated-inputs
27008 (list python-aiohttp python-beautifulsoup4 python-pillow))
27009 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27010 (synopsis "Async favicon fetcher")
27011 (description
27012 "@code{pyfavicon} is an async favicon fetcher.")
27013 (license license:expat)))
27014
27015(define-public python-funcy
27016 (package
27017 (name "python-funcy")
27018 (version "1.11")
27019 (source
27020 (origin
27021 (method git-fetch)
27022 (uri (git-reference
27023 (url "https://github.com/Suor/funcy")
27024 (commit version)))
27025 (sha256
27026 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27027 (file-name (git-file-name name version))))
27028 (build-system pyproject-build-system)
27029 (native-inputs
27030 (list python-pytest python-whatever python-setuptools python-wheel))
27031 (home-page "https://github.com/Suor/funcy")
27032 (synopsis "Functional tools")
27033 (description "@code{funcy} is a library that provides functional tools.
27034Examples are:
27035@enumerate
27036@item merge - Merges collections of the same type
27037@item walk - Type-preserving map
27038@item select - Selects a part of a collection
27039@item take - Takes the first n items of a collection
27040@item first - Takes the first item of a collection
27041@item remove - Predicated-removes items of a collection
27042@item concat - Concatenates two collections
27043@item flatten - Flattens a collection with subcollections
27044@item distinct - Returns only distinct items
27045@item split - Predicated-splits a collection
27046@item split_at - Splits a collection at a given item
27047@item group_by - Groups items by group
27048@item pairwise - Pairs off adjacent items
27049@item partial - Partially-applies a function
27050@item curry - Curries a function
27051@item compose - Composes functions
27052@item complement - Complements a predicate
27053@item all_fn - \"all\" with predicate
27054@end enumerate")
27055 (license license:bsd-3)))
27056
27057(define-public python-funcy-1.14
27058 (package/inherit python-funcy
27059 (name "python-funcy")
27060 (version "1.14")
27061 (source
27062 (origin
27063 (method git-fetch)
27064 (uri (git-reference
27065 (url "https://github.com/Suor/funcy")
27066 (commit version)))
27067 (sha256
27068 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27069 (file-name (git-file-name name version))))))
27070
27071(define-public python-isoweek
27072 (package
27073 (name "python-isoweek")
27074 (version "1.3.3")
27075 (source
27076 (origin
27077 (method url-fetch)
27078 (uri (pypi-uri "isoweek" version))
27079 (sha256
27080 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27081 (build-system pyproject-build-system)
27082 (arguments (list #:test-backend #~'unittest))
27083 (native-inputs (list python-setuptools))
27084 (home-page "https://github.com/gisle/isoweek")
27085 (synopsis "Objects representing a week")
27086 (description "The @code{isoweek} module provide the class Week that
27087implements the week definition of ISO 8601. This standard also defines
27088a notation for identifying weeks; yyyyWww (where the W is a literal).
27089Week instances stringify to this form.")
27090 (license license:bsd-3)))
27091
27092(define-public bpython
27093 (package
27094 (name "bpython")
27095 (version "0.25")
27096 (source
27097 (origin
27098 (method url-fetch)
27099 (uri (pypi-uri "bpython" version))
27100 (sha256
27101 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27102 (build-system pyproject-build-system)
27103 (arguments
27104 (list
27105 #:test-flags
27106 ;; Tests can't import curtsies, pygments and urwid.
27107 #~(list "-k" (string-join
27108 (list "not test_issue108"
27109 "test_issue133")
27110 " and not " ))
27111 #:phases
27112 #~(modify-phases %standard-phases
27113 (add-after 'wrap 'add-aliases
27114 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27115 (lambda _
27116 (for-each
27117 (lambda (old new)
27118 (symlink old (string-append #$output "/bin/" new)))
27119 '("bpython" "bpython-urwid" "bpdb")
27120 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27121 (native-inputs
27122 (list python-mock
27123 python-pytest
27124 python-setuptools))
27125 (propagated-inputs
27126 (list python-curtsies
27127 python-cwcwidth
27128 python-greenlet
27129 python-pygments
27130 python-pyxdg
27131 python-requests
27132 ;; [optional]
27133 python-pyperclip
27134 python-jedi
27135 python-urwid-2
27136 python-watchdog))
27137 (home-page "https://bpython-interpreter.org/")
27138 (synopsis "Fancy interface to the Python interpreter")
27139 (description "Bpython is a fancy interface to the Python
27140interpreter. bpython's main features are
27141
27142@enumerate
27143@item in-line syntax highlighting,
27144@item readline-like autocomplete with suggestions displayed as you type,
27145@item expected parameter list for any Python function,
27146@item \"rewind\" function to pop the last line of code from memory and
27147 re-evaluate,
27148@item send the code you've entered off to a pastebin,
27149@item save the code you've entered to a file, and
27150@item auto-indentation.
27151@end enumerate")
27152 (license license:expat)))
27153
27154(define-public python-pyinotify
27155 (package
27156 (name "python-pyinotify")
27157 (version "0.9.6")
27158 (source
27159 (origin
27160 (method git-fetch)
27161 (uri (git-reference
27162 (url "https://github.com/seb-m/pyinotify")
27163 (commit version)))
27164 (file-name (git-file-name name version))
27165 (sha256
27166 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27167 (build-system pyproject-build-system)
27168 (arguments
27169 (list
27170 #:tests? #f ;no tests
27171 #:phases
27172 #~(modify-phases %standard-phases
27173 (add-after 'unpack 'drop-shebang
27174 (lambda _
27175 ;; Dropping this shebang prevents the build system from adding
27176 ;; python-wrapper as an input, reducing package closure size from
27177 ;; ~200 MiB to ~0.2 MiB.
27178 (substitute* "python3/pyinotify.py"
27179 (("#!/usr/bin/env python") "")))))))
27180 (native-inputs
27181 (list python-setuptools))
27182 (propagated-inputs
27183 (list python-pyasyncore))
27184 (home-page "https://github.com/seb-m/pyinotify")
27185 (synopsis "Python library for monitoring inotify events")
27186 (description
27187 "@code{pyinotify} provides a Python interface for monitoring file system
27188events on Linux.")
27189 (license license:expat)))
27190
27191(define-public python-pyinotify-cli
27192 (package
27193 (inherit python-pyinotify)
27194 (name "python-pyinotify-cli")
27195 (arguments
27196 (substitute-keyword-arguments arguments
27197 ((#:phases phases #~%standard-phases)
27198 #~(modify-phases #$phases
27199 (delete 'drop-shebang)
27200 (add-after 'install 'install-entrypoint
27201 (lambda _
27202 (let ((entrypoint
27203 (string-append #$output "/lib/python"
27204 (python-version (which "python"))
27205 "/site-packages/pyinotify.py"))
27206 (bin (string-append #$output "/bin")))
27207 (mkdir-p bin)
27208 (invoke "chmod" "+x" entrypoint)
27209 (symlink
27210 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27211 (description
27212 "This package provides, in addition to the @code{pyinotify} Python library,
27213a command line application exposing the same functionality.")))
27214
27215(define-public python-latex2pydata
27216 (package
27217 (name "python-latex2pydata")
27218 (version "0.5.0")
27219 (source
27220 (origin
27221 (method url-fetch)
27222 (uri (pypi-uri "latex2pydata" version))
27223 (sha256
27224 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27225 (build-system pyproject-build-system)
27226 (native-inputs (list python-setuptools python-wheel python-pytest))
27227 (home-page "https://github.com/gpoore/latex2pydata")
27228 (synopsis "Load data from LaTeX in Python literal format")
27229 (description
27230 "This package is designed to load data in Python literal format that was
27231saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27232passed from LaTeX to Python.")
27233 (license license:bsd-3)))
27234
27235(define-public python-latexcodec
27236 (package
27237 (name "python-latexcodec")
27238 (version "3.0.1")
27239 (source
27240 (origin
27241 (method git-fetch)
27242 (uri (git-reference
27243 (url "https://github.com/mcmtroffaes/latexcodec/")
27244 (commit version)))
27245 (file-name (git-file-name name version))
27246 (sha256
27247 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27248 (build-system pyproject-build-system)
27249 (native-inputs (list python-pytest python-setuptools))
27250 (home-page "https://readthedocs.org/projects/latexcodec/")
27251 (synopsis "Work with LaTeX code in Python")
27252 (description "Lexer and codec to work with LaTeX code in Python.")
27253 (license license:expat)))
27254
27255(define-public python-latexminted
27256 (package
27257 (name "python-latexminted")
27258 (version "0.7.1")
27259 (source
27260 (origin
27261 (method url-fetch)
27262 (uri (pypi-uri "latexminted" version))
27263 (sha256
27264 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27265 (build-system pyproject-build-system)
27266 (arguments (list #:tests? #f)) ; No tests upstream.
27267 (propagated-inputs (list python-latex2pydata
27268 python-latexrestricted
27269 python-pygments))
27270 (native-inputs (list texlive-kpathsea python-setuptools))
27271 (home-page "https://github.com/gpoore/minted")
27272 (synopsis "Python library for the LaTeX minted package")
27273 (description "This Python package provides the Python side of the
27274@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27275@code{python-pygments} library. It also provides several code formatting and
27276manipulation features implemented in Python that would be difficult to perform
27277in LaTeX, such as dedenting code and extracting code snippets from source files
27278using regular expressions.")
27279 (license license:lppl1.3c+)))
27280
27281(define-public python-latexrestricted
27282 (package
27283 (name "python-latexrestricted")
27284 (version "0.6.2")
27285 (source
27286 (origin
27287 (method url-fetch)
27288 (uri (pypi-uri "latexrestricted" version))
27289 (sha256
27290 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27291 (build-system pyproject-build-system)
27292 (arguments
27293 (list
27294 #:tests? #f ;no test
27295 #:phases
27296 #~(modify-phases %standard-phases
27297 (add-after 'unpack 'fix-paths
27298 (lambda* (#:key inputs #:allow-other-keys)
27299 (let ((pystr (lambda (s) (string-append "'" s "'")))
27300 (kpse (search-input-file inputs "/bin/kpsewhich")))
27301 (substitute* "latexrestricted/_latex_config.py"
27302 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27303 ;; this variable is bogus in Guix because binaries are scattered
27304 ;; across multiple directories. This phase sets SELFAUTOLOC to
27305 ;; the specific directory containing `kpsewhich'.
27306 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27307 (pystr (dirname kpse)))
27308 ;; Refer to kpse by store path instead of looking it upein $PATH.
27309 (("shutil.which\\('kpse'.*$")
27310 (string-append (pystr kpse) "\n")))))))))
27311 (native-inputs (list python-setuptools python-wheel))
27312 (inputs (list texlive-kpathsea))
27313 (home-page "https://github.com/gpoore/latexrestricted")
27314 (synopsis
27315 "Library for creating executables compatible with LaTeX's shell escape")
27316 (description
27317 "This Python package is designed to simplify the process of creating Python
27318executables compatible with LaTeX restricted shell escape. Restricted shell
27319escape allows LaTeX to run trusted executables as part of compiling documents.
27320These executables have restricted access to the file system and restricted
27321ability to launch subprocesses.")
27322 (license license:lppl1.3+)))
27323
27324(define-public python-pybloom-live
27325 (package
27326 (name "python-pybloom-live")
27327 (version "4.0.0")
27328 (source (origin
27329 (method url-fetch)
27330 (uri (pypi-uri "pybloom_live" version))
27331 (sha256
27332 (base32
27333 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27334 (build-system pyproject-build-system)
27335 (propagated-inputs (list python-bitarray python-xxhash))
27336 (native-inputs (list python-pytest python-setuptools python-wheel))
27337 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27338 (synopsis "Bloom filter")
27339 (description "This package provides a scalable Bloom filter implemented in
27340Python.")
27341 (license license:expat)))
27342
27343;; XXX: Not maintained since 2020.
27344(define-public python-pybktree
27345 (package
27346 (name "python-pybktree")
27347 (version "1.1")
27348 (source
27349 (origin
27350 (method url-fetch)
27351 (uri (pypi-uri "pybktree" version))
27352 (sha256
27353 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27354 (build-system pyproject-build-system)
27355 (arguments
27356 (list #:tests? #f)) ;no tests provided
27357 (native-inputs (list python-setuptools))
27358 (home-page "https://github.com/Jetsetter/pybktree")
27359 (synopsis "Pythonic BK-tree data structure")
27360 (description
27361 "This package provides a BK-tree data structure to allow fast querying of
27362close matches in Python.")
27363 (license license:expat)))
27364
27365(define-public python-pybtex
27366 (package
27367 (name "python-pybtex")
27368 (version "0.25.0")
27369 (source
27370 (origin
27371 (method git-fetch)
27372 (uri (git-reference
27373 (url "https://codeberg.org/pybtex/pybtex")
27374 (commit version)))
27375 (file-name (git-file-name name version))
27376 (sha256
27377 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27378 (build-system pyproject-build-system)
27379 (native-inputs (list python-pytest python-setuptools))
27380 (propagated-inputs (list python-latexcodec python-pyyaml))
27381 (home-page "https://pybtex.org/")
27382 (synopsis "BibTeX-compatible bibliography processor")
27383 (description
27384 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27385You can simply type pybtex instead of bibtex.")
27386 (license license:expat)))
27387
27388(define-public python-pybtex-apa-style
27389 (package
27390 (name "python-pybtex-apa-style")
27391 (version "1.3")
27392 (source
27393 (origin
27394 (method url-fetch)
27395 (uri (pypi-uri "pybtex-apa-style" version))
27396 (sha256
27397 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27398 (build-system pyproject-build-system)
27399 (arguments
27400 (list
27401 #:test-backend #~'custom
27402 #:test-flags
27403 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27404 " sys.exit('apa' not"
27405 " in pybtex.plugin.enumerate_plugin_names"
27406 "('pybtex.style.labels'))"))))
27407 (native-inputs (list python-pybtex python-setuptools))
27408 (home-page "https://github.com/naeka/pybtex-apa-style")
27409 (synopsis "APA style for pybtex")
27410 (description
27411 "This package provides support for the APA style within pybtex.")
27412 (license license:expat)))
27413
27414(define-public python-pybtex-docutils
27415 (package
27416 (name "python-pybtex-docutils")
27417 (version "1.0.3")
27418 (source
27419 (origin
27420 (method git-fetch)
27421 (uri (git-reference
27422 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27423 (commit version)))
27424 (file-name (git-file-name name version))
27425 (sha256
27426 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27427 (build-system pyproject-build-system)
27428 (propagated-inputs (list python-docutils python-pybtex))
27429 (native-inputs (list python-setuptools python-pytest))
27430 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27431 (synopsis "Docutils backend for pybtex")
27432 (description "The pybtex docutils backend allows bibtex citations to be
27433inserted into documentation generated by docutils.")
27434 (license license:expat)))
27435
27436(define-public python-onetimepass
27437 (package
27438 (name "python-onetimepass")
27439 (version "1.0.1")
27440 (source
27441 (origin
27442 (method git-fetch)
27443 (uri (git-reference
27444 (url "https://github.com/tadeck/onetimepass/")
27445 (commit (string-append "v" version))))
27446 (file-name (git-file-name name version))
27447 (sha256
27448 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27449 (build-system pyproject-build-system)
27450 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27451 (native-inputs (list python-setuptools))
27452 (propagated-inputs (list python-six))
27453 (home-page "https://github.com/tadeck/onetimepass/")
27454 (synopsis "One-time password library")
27455 (description
27456 "Python one-time password library for HMAC-based (HOTP) and time-based
27457(TOTP) passwords.")
27458 (license license:expat)))
27459
27460(define-public python-online-judge-api-client
27461 (package
27462 (name "python-online-judge-api-client")
27463 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27464 (revision . "0")))
27465 (version (git-version "10.10.1"
27466 (assoc-ref properties 'revision)
27467 (assoc-ref properties 'commit)))
27468 (source
27469 (origin
27470 (method git-fetch)
27471 (uri (git-reference
27472 (url "https://github.com/online-judge-tools/api-client")
27473 (commit (assoc-ref properties 'commit))))
27474 (file-name (git-file-name name version))
27475 (sha256
27476 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27477 (patches
27478 (search-patches "python-online-judge-api-client-tests.patch"))
27479 ))
27480 (build-system pyproject-build-system)
27481 (arguments
27482 (list
27483 #:test-flags
27484 #~(list "--ignore-glob=tests/get_contest_*.py"
27485 "--ignore-glob=tests/get_problem_*.py")
27486 #:phases
27487 #~(modify-phases %standard-phases
27488 (add-before 'check 'configure-tests
27489 (lambda* (#:key inputs outputs #:allow-other-keys)
27490 (delete-file-recursively
27491 (string-append (site-packages inputs outputs)
27492 "/tests"))
27493 (call-with-output-file "pytest.ini"
27494 (lambda (port)
27495 (format port "\
27496[pytest]
27497python_files = tests/*.py"))))))))
27498 (native-inputs (list python-pytest python-setuptools))
27499 (propagated-inputs
27500 (list python-appdirs
27501 python-beautifulsoup4
27502 python-colorlog
27503 python-lxml
27504 python-requests
27505 python-toml
27506 python-jsonschema))
27507 (home-page "https://github.com/online-judge-tools/api-client")
27508 (synopsis "API client for various online judges")
27509 (description
27510 "This is an API client for various online judges, used as the backend
27511library of @code{oj} command. You can use the Python library
27512(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27513command) which talks JSON compatible with jmerle/competitive-companion.")
27514 (license license:expat)))
27515
27516(define-public online-judge-tools
27517 (package
27518 (name "online-judge-tools")
27519 (version "11.5.1")
27520 ;; Source distributions are not uploaded to PyPI.
27521 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27522 (source
27523 (origin
27524 (method git-fetch)
27525 (uri (git-reference
27526 (url "https://github.com/online-judge-tools/oj")
27527 (commit (string-append "v" version))))
27528 (file-name (git-file-name name version))
27529 (sha256
27530 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27531 (patches (search-patches "online-judge-tools.patch"))))
27532 (build-system pyproject-build-system)
27533 (arguments
27534 (list
27535 #:test-flags
27536 ;; These tests require network connections
27537 #~(list "--ignore=tests/command_version.py")))
27538 (native-inputs (list python-pytest python-setuptools))
27539 (inputs (list time))
27540 (propagated-inputs (list python-online-judge-api-client python-colorama
27541 python-requests))
27542 (home-page "https://github.com/online-judge-tools/oj")
27543 (synopsis "Command to help solving problems on various online judges")
27544 (description
27545 "@command{oj} is a command line tool to help solving problems on
27546various online judges. This command automates downloading sample
27547cases, generating additional test cases, testing for your code, and
27548submitting it.")
27549 (license license:expat)))
27550
27551(define-public python-mpv-jsonipc
27552 (package
27553 (name "python-mpv-jsonipc")
27554 (version "1.2.0")
27555 (source
27556 (origin
27557 (method url-fetch)
27558 (uri (pypi-uri "python-mpv-jsonipc" version))
27559 (sha256
27560 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27561 (build-system pyproject-build-system)
27562 (arguments (list #:tests? #f)) ;No test suite.
27563 (native-inputs (list python-setuptools python-wheel))
27564 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27565 (synopsis "Python API to control MPV using JSON IPC")
27566 (description "Python MPV JSONIPC implements an interface similar to
27567python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27568 (license license:asl2.0)))
27569
27570(define-public python-jellyfin-apiclient
27571 (package
27572 (name "python-jellyfin-apiclient")
27573 (version "1.11.0")
27574 (source
27575 (origin
27576 (method git-fetch)
27577 (uri
27578 (git-reference
27579 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27580 (commit (string-append "v" version))))
27581 (sha256
27582 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27583 (build-system pyproject-build-system)
27584 (native-inputs (list python-setuptools python-pytest python-wheel))
27585 (propagated-inputs (list python-certifi python-requests python-urllib3
27586 python-websocket-client))
27587 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27588 (synopsis "Python API client for Jellyfin")
27589 (description "The Jellyfin ApiClient Python package makes it possible
27590to use the Jellyfin API from Python. It was extracted from the Jellyfin
27591Kodi plugin.")
27592 (license license:gpl3+)))
27593
27594(define-public python-parso
27595 (package
27596 (name "python-parso")
27597 (version "0.8.5")
27598 (source
27599 (origin
27600 (method url-fetch)
27601 (uri (pypi-uri "parso" version))
27602 (sha256
27603 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27604 (build-system pyproject-build-system)
27605 (native-inputs
27606 (list python-pytest
27607 python-setuptools))
27608 (home-page "https://github.com/davidhalter/parso")
27609 (synopsis "Python Parser")
27610 (description "Parso is a Python parser that supports error recovery and
27611round-trip parsing for different Python versions (in multiple Python versions).
27612Parso is also able to list multiple syntax errors in your Python file.")
27613 (license license:expat)))
27614
27615(define-public python-async-generator
27616 (package
27617 (name "python-async-generator")
27618 (version "1.10")
27619 (source
27620 (origin
27621 (method url-fetch)
27622 (uri (pypi-uri "async_generator" version))
27623 (sha256
27624 (base32
27625 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27626 (build-system pyproject-build-system)
27627 (native-inputs
27628 (list python-pytest python-setuptools))
27629 (home-page "https://github.com/python-trio/async_generator")
27630 (synopsis "Async generators and context managers for Python 3.5+")
27631 (description "@code{async_generator} back-ports Python 3.6's native async
27632generators and Python 3.7's context managers into Python 3.5.")
27633 ;; Dual licensed.
27634 (license (list license:expat license:asl2.0))))
27635
27636(define-public python-async-timeout
27637 (package
27638 (name "python-async-timeout")
27639 (version "5.0.1")
27640 (source
27641 (origin
27642 (method url-fetch)
27643 (uri (pypi-uri "async_timeout" version))
27644 (sha256
27645 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27646 (build-system pyproject-build-system)
27647 (native-inputs
27648 (list python-pytest
27649 python-pytest-asyncio
27650 python-setuptools
27651 python-wheel))
27652 (home-page "https://github.com/aio-libs/async-timeout")
27653 (synopsis "Timeout context manager for asyncio programs")
27654 (description
27655 "@code{async-timeout} provides a timeout timeout context manager
27656compatible with @code{asyncio}.")
27657 (license license:asl2.0)))
27658
27659(define-public python-async-timeout-4
27660 (package
27661 (inherit python-async-timeout)
27662 (name "python-async-timeout")
27663 (version "4.0.3")
27664 (source
27665 (origin
27666 (method url-fetch)
27667 (uri (pypi-uri "async-timeout" version))
27668 (sha256
27669 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27670
27671(define-public python-glob2
27672 (package
27673 (name "python-glob2")
27674 (version "0.7")
27675 (source
27676 (origin
27677 (method git-fetch)
27678 (uri (git-reference
27679 (url "https://github.com/miracle2k/python-glob2")
27680 (commit (string-append "v" version))))
27681 (file-name (git-file-name name version))
27682 (sha256
27683 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27684 (build-system pyproject-build-system)
27685 (arguments
27686 (list
27687 #:phases
27688 #~(modify-phases %standard-phases
27689 (add-after 'unpack 'patch-tests-for-pytest8
27690 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27691 (lambda _
27692 (substitute* "test.py"
27693 (("setup\\(") "setup_method(")
27694 (("teardown\\(") "teardown_method("))
27695 (rename-file "test.py" "glob2_test.py"))))))
27696 (native-inputs (list python-pytest python-setuptools))
27697 (home-page "https://github.com/miracle2k/python-glob2/")
27698 (synopsis "Extended Version of the python buildin glob module")
27699 (description "This is an extended version of the Python
27700@url{http://docs.python.org/library/glob.html, built-in glob module} which
27701adds:
27702
27703@itemize
27704@item The ability to capture the text matched by glob patterns, and return
27705those matches alongside the file names.
27706@item A recursive @code{**} globbing syntax, akin for example to the
27707@code{globstar} option of Bash.
27708@item The ability to replace the file system functions used, in order to glob
27709on virtual file systems.
27710@item Compatible with Python 2 and Python 3 (tested with 3.3).
27711@end itemize
27712
27713Glob2 currently based on the glob code from Python 3.3.1.")
27714 (license license:bsd-2)))
27715
27716(define-public python-gipc
27717 (package
27718 (name "python-gipc")
27719 (version "1.8.0")
27720 (source
27721 (origin
27722 (method git-fetch)
27723 (uri (git-reference
27724 (url "https://github.com/jgehrcke/gipc")
27725 (commit version)))
27726 (file-name (git-file-name name version))
27727 (sha256
27728 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27729 (build-system pyproject-build-system)
27730 (arguments
27731 (list
27732 #:phases
27733 #~(modify-phases %standard-phases
27734 (add-after 'unpack 'adjust-for-pytest-8
27735 (lambda _
27736 (substitute* "test/test_gipc.py"
27737 (("def setup") "def setup_method")
27738 (("def teardown") "def teardown_method")))))))
27739 (native-inputs
27740 (list python-pytest
27741 python-setuptools))
27742 (propagated-inputs
27743 (list python-gevent))
27744 (home-page "https://gehrcke.de/gipc/")
27745 (synopsis "Child process management in the context of gevent")
27746 (description
27747 "Usage of Python's multiprocessing package in a gevent-powered
27748application may raise problems. With @code{gipc}, process-based child
27749processes can safely be created anywhere within a gevent-powered
27750application.")
27751 (license license:expat)))
27752
27753(define-public python-beautifultable
27754 (package
27755 (name "python-beautifultable")
27756 (version "1.1.0")
27757 (source
27758 (origin
27759 (method git-fetch)
27760 (uri (git-reference
27761 (url "https://github.com/pri22296/beautifultable")
27762 (commit (string-append "v" version))))
27763 (file-name (git-file-name name version))
27764 (sha256
27765 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27766 (build-system pyproject-build-system)
27767 (arguments (list #:test-backend #~'unittest))
27768 (native-inputs (list python-pandas python-setuptools))
27769 (propagated-inputs (list python-wcwidth))
27770 (home-page "https://github.com/pri22296/beautifultable")
27771 (synopsis "Print ASCII tables for terminals")
27772 (description
27773 "@code{python-beautifultable} provides a class for easily printing
27774tabular data in a visually appealing ASCII format to a terminal.
27775
27776Features include, but are not limited to:
27777@itemize
27778@item Full customization of the look and feel of the table
27779@item Row and column accessors.
27780@item Full support for colors using ANSI sequences or any library.
27781@item Plenty of predefined styles and option to create custom ones.
27782@item Support for Unicode characters.
27783@item Supports streaming table when data is slow to retrieve.
27784@end itemize")
27785 (license license:expat)))
27786
27787(define-public python-globber
27788 (package
27789 (name "python-globber")
27790 (version "0.2.1")
27791 (source
27792 (origin
27793 (method git-fetch)
27794 (uri (git-reference
27795 (url "https://github.com/asharov/globber")
27796 (commit version)))
27797 (file-name (git-file-name name version))
27798 (sha256
27799 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27800 (build-system pyproject-build-system)
27801 (native-inputs (list python-pytest python-setuptools))
27802 (home-page "https://github.com/asharov/globber")
27803 (synopsis "Library for string matching with glob patterns")
27804 (description
27805 "Globber is a Python library for matching file names against glob patterns.
27806In contrast to other glob-matching libraries, it matches arbitrary strings and
27807doesn't require the matched names to be existing files. In addition, it
27808supports the globstar @code{**} operator to match an arbitrary number of
27809path components.")
27810 (license license:asl2.0)))
27811
27812;; XXX: Not maintained since 2021.
27813(define-public python-git-hammer
27814 (package
27815 (name "python-git-hammer")
27816 (version "0.3.2")
27817 (source
27818 (origin
27819 (method git-fetch)
27820 (uri (git-reference
27821 (url "https://github.com/asharov/git-hammer")
27822 (commit version)))
27823 (file-name (git-file-name name version))
27824 (sha256
27825 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27826 (build-system pyproject-build-system)
27827 (arguments
27828 (list
27829 #:phases
27830 #~(modify-phases %standard-phases
27831 (add-after 'unpack 'relax-requirements
27832 (lambda _
27833 (substitute* "setup.py"
27834 (("matplotlib <3.1") "matplotlib")))))))
27835 (native-inputs
27836 (list python-pytest
27837 python-setuptools))
27838 (propagated-inputs
27839 (list python-beautifultable
27840 python-dateutil
27841 python-gitpython
27842 python-globber
27843 python-matplotlib
27844 python-sqlalchemy
27845 python-sqlalchemy-utils))
27846 (home-page "https://github.com/asharov/git-hammer")
27847 (synopsis "Provide statistics for git repositories")
27848 (description
27849 "Git Hammer is a statistics tool for projects in git repositories. Its major
27850feature is tracking the number of lines authored by each person for every
27851commit, but it also includes some other useful statistics.")
27852 (license license:asl2.0)))
27853
27854(define-public python-gitignore-parser
27855 (package
27856 (name "python-gitignore-parser")
27857 (version "0.1.13")
27858 (source
27859 (origin
27860 (method git-fetch)
27861 (uri (git-reference
27862 (url "https://github.com/mherrmann/gitignore_parser")
27863 (commit (string-append "v" version))))
27864 (file-name (git-file-name name version))
27865 (sha256
27866 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27867 (build-system pyproject-build-system)
27868 (arguments (list #:test-backend #~'unittest))
27869 (native-inputs (list python-setuptools))
27870 (home-page "https://github.com/mherrmann/gitignore_parser")
27871 (synopsis "Spec-compliant gitignore parser for Python")
27872 (description
27873 "This package provides a spec-compliant gitignore parser for Python.")
27874 (license license:expat)))
27875
27876(define-public python-fusepy
27877 (package
27878 (name "python-fusepy")
27879 (version "2.0.4")
27880 (source
27881 (origin
27882 (method git-fetch)
27883 (uri (git-reference
27884 (url "https://github.com/fusepy/fusepy")
27885 (commit (string-append "v" version))))
27886 (file-name (git-file-name name version))
27887 (sha256
27888 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27889 (build-system pyproject-build-system)
27890 (arguments
27891 (list
27892 #:tests? #f ; No formalized tests.
27893 #:phases
27894 #~(modify-phases %standard-phases
27895 (add-before 'build 'set-library-file-name
27896 (lambda* (#:key inputs #:allow-other-keys)
27897 (substitute* "fuse.py"
27898 (("find_library\\('fuse'\\)")
27899 (format #f "~s"
27900 (search-input-file inputs "lib/libfuse.so")))))))))
27901 (native-inputs (list python-setuptools))
27902 (propagated-inputs (list fuse-2))
27903 (home-page "https://github.com/fusepy/fusepy")
27904 (synopsis "Simple ctypes bindings for FUSE")
27905 (description
27906 "Python module that provides a simple interface to FUSE and MacFUSE. The
27907binding is created using the standard @code{ctypes} library.")
27908 (license license:isc)))
27909
27910(define-public pybind11-2
27911 (package
27912 (name "pybind11")
27913 (version "2.13.6")
27914 (source (origin
27915 (method git-fetch)
27916 (uri (git-reference
27917 (url "https://github.com/pybind/pybind11")
27918 (commit (string-append "v" version))))
27919 (sha256
27920 (base32
27921 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27922 (file-name (git-file-name name version))))
27923 (build-system cmake-build-system)
27924 (arguments
27925 (list
27926 #:configure-flags
27927 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27928 (assoc-ref %build-inputs "catch2")
27929 "/include/catch"))
27930 #:modules '((guix build cmake-build-system)
27931 ((guix build gnu-build-system) #:prefix gnu:)
27932 (guix build utils))
27933 #:phases
27934 #~(modify-phases %standard-phases
27935 (replace 'check
27936 (lambda args
27937 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27938 (add-after 'install 'install-python
27939 (lambda _
27940 (with-directory-excursion "../source"
27941 (setenv "PYBIND11_USE_CMAKE" "yes")
27942 (invoke "python" "setup.py" "install"
27943 "--single-version-externally-managed"
27944 "--root=/"
27945 (string-append "--prefix=" #$output))))))))
27946 (native-inputs
27947 (list catch2-1
27948 eigen
27949 python-pytest
27950 python-setuptools
27951 python-wrapper))
27952 (home-page "https://github.com/pybind/pybind11/")
27953 (synopsis "Seamless operability between C++11 and Python")
27954 (description
27955 "@code{pybind11} is a lightweight header-only library that exposes C++
27956types in Python and vice versa, mainly to create Python bindings of existing
27957C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27958library: to minimize boilerplate code in traditional extension modules by
27959inferring type information using compile-time introspection.")
27960 (license license:bsd-3)))
27961
27962(define-public pybind11
27963 (package
27964 (name "pybind11")
27965 (version "3.0.2")
27966 (source (origin
27967 (method git-fetch)
27968 (uri (git-reference
27969 (url "https://github.com/pybind/pybind11")
27970 (commit (string-append "v" version))))
27971 (sha256
27972 (base32
27973 "1ad4fnn4p2m3sradxxd9wfnll3pa44aw081b6ssh3pq95xqpwksg"))
27974 (file-name (git-file-name name version))))
27975 (build-system cmake-build-system)
27976 (arguments
27977 (list
27978 #:configure-flags
27979 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27980 (assoc-ref %build-inputs "catch2")
27981 "/include/catch"))
27982 #:modules '((guix build cmake-build-system)
27983 ((guix build gnu-build-system) #:prefix gnu:)
27984 (guix build utils))
27985 #:phases
27986 #~(modify-phases %standard-phases
27987 (replace 'check
27988 (lambda args
27989 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27990 (add-after 'install 'build-python-library
27991 (lambda _
27992 (with-directory-excursion "../source"
27993 (setenv "PYBIND11_USE_CMAKE" "yes")
27994 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
27995 "--prefix" #$output ".")))))))
27996 (inputs (list boost))
27997 (native-inputs
27998 (list catch2-1
27999 eigen
28000 python-pytest
28001 python-setuptools
28002 python-wrapper
28003 python-scikit-build-core))
28004 (home-page "https://github.com/pybind/pybind11/")
28005 (synopsis "Seamless operability between C++11 and Python")
28006 (description
28007 "@code{pybind11} is a lightweight header-only library that exposes C++
28008types in Python and vice versa, mainly to create Python bindings of existing
28009C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28010library: to minimize boilerplate code in traditional extension modules by
28011inferring type information using compile-time introspection.")
28012 (license license:bsd-3)))
28013
28014(define-public python-pooch
28015 (package
28016 (name "python-pooch")
28017 (version "1.8.1")
28018 (source
28019 (origin
28020 (method url-fetch)
28021 (uri (pypi-uri "pooch" version))
28022 (sha256
28023 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
28024 (build-system pyproject-build-system)
28025 (arguments
28026 (list
28027 #:test-flags
28028 '(list "-k"
28029 (string-append
28030 ;; We don't have the test archives
28031 "not test_decompress"
28032 " and not test_multiple_unpacking"
28033 " and not test_unpack_members_with_leading_dot"
28034 " and not test_unpacking"
28035 " and not test_unpacking_members_then_no_members"
28036 " and not test_unpacking_wrong_members_then_no_members"
28037 ;; These all require access to the internet
28038 " and not test_check_availability"
28039 " and not test_check_availability_invalid_downloader"
28040 " and not test_check_availability_on_ftp"
28041 " and not test_create_and_fetch"
28042 " and not test_downloader_arbitrary_progressbar"
28043 " and not test_fetch_with_downloader"
28044 " and not test_figshare_data_repository_versions"
28045 " and not test_load_registry_from_doi"
28046 " and not test_pooch_corrupted"
28047 " and not test_pooch_custom_url"
28048 " and not test_pooch_download"
28049 " and not test_pooch_download_retry"
28050 " and not test_pooch_download_retry_fails_eventually"
28051 " and not test_pooch_download_retry_off_by_default"
28052 " and not test_pooch_logging_level"
28053 " and not test_pooch_update"
28054 " and not test_retrieve"
28055 " and not test_retrieve_default_path"
28056 " and not test_retrieve_fname"
28057 " and not test_stream_download")
28058 "--ignore=pooch/tests/test_downloaders.py")))
28059 (native-inputs
28060 (list python-pytest
28061 python-setuptools-scm
28062 python-setuptools
28063 python-wheel))
28064 (propagated-inputs
28065 (list python-packaging python-platformdirs python-requests))
28066 (home-page "https://github.com/fatiando/pooch")
28067 (synopsis "Manage your Python library's sample data files")
28068 (description
28069 "Pooch manages your Python library's sample data files: it automatically
28070downloads and stores them in a local directory, with support for versioning
28071and corruption checks.")
28072 (license license:bsd-3)))
28073
28074(define-public python-fasteners
28075 (package
28076 (name "python-fasteners")
28077 (version "0.20")
28078 (source (origin
28079 ;; No tests in the pypi tarball
28080 (method git-fetch)
28081 (uri (git-reference
28082 (url "https://github.com/harlowja/fasteners")
28083 (commit version)))
28084 (file-name (git-file-name name version))
28085 (sha256
28086 (base32
28087 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28088 (build-system pyproject-build-system)
28089 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28090 python-setuptools python-pytest))
28091 (home-page "https://github.com/harlowja/fasteners")
28092 (synopsis "Python package that provides useful locks")
28093 (description
28094 "This package provides a Python program that provides following locks:
28095
28096@itemize
28097@item Locking decorator
28098@item Reader-writer locks
28099@item Inter-process locks
28100@item Generic helpers
28101@end itemize\n")
28102 (license license:asl2.0)))
28103
28104(define-public python-requests-file
28105 (package
28106 (name "python-requests-file")
28107 (version "3.0.1")
28108 (source
28109 (origin
28110 (method git-fetch)
28111 (uri (git-reference
28112 (url "https://codeberg.org/dashea/requests-file")
28113 (commit version)))
28114 (file-name (git-file-name name version))
28115 (sha256
28116 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28117 (build-system pyproject-build-system)
28118 (native-inputs (list python-pytest python-setuptools))
28119 (propagated-inputs (list python-requests))
28120 (home-page "https://codeberg.org/dashea/requests-file")
28121 (synopsis "File transport adapter for Requests")
28122 (description
28123 "Requests-File is a transport adapter for use with the Requests Python
28124library to allow local file system access via @code{file://} URLs.")
28125 (license license:asl2.0)))
28126
28127(define-public python-identify
28128 (package
28129 (name "python-identify")
28130 (version "2.6.14")
28131 (source
28132 (origin
28133 ;; There are no tests in the PyPI tarball.
28134 (method git-fetch)
28135 (uri (git-reference
28136 (url "https://github.com/chriskuehl/identify")
28137 (commit (string-append "v" version))))
28138 (file-name (git-file-name name version))
28139 (sha256
28140 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28141 (build-system pyproject-build-system)
28142 (native-inputs
28143 (list python-pytest
28144 python-setuptools
28145 python-ukkonen))
28146 (home-page "https://github.com/chriskuehl/identify")
28147 (synopsis "File identification library for Python")
28148 (description
28149 "@code{identify} is a file identification library for Python. Given
28150a file (or some information about a file), return a set of standardized tags
28151identifying what the file is.")
28152 (license license:expat)))
28153
28154(define-public python-nodeenv
28155 (package
28156 (name "python-nodeenv")
28157 (version "1.8.0")
28158 (source
28159 (origin
28160 ;; There's no tarball in PyPI.
28161 (method git-fetch)
28162 (uri (git-reference
28163 (url "https://github.com/ekalinin/nodeenv")
28164 (commit version)))
28165 (file-name (git-file-name name version))
28166 (sha256
28167 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28168 (build-system pyproject-build-system)
28169 (arguments
28170 (list #:test-flags
28171 #~(list "-k" (string-append
28172 "not test_smoke"
28173 " and not test_smoke_n_system_special_chars"))))
28174 (native-inputs
28175 (list python-mock
28176 python-pytest
28177 python-setuptools
28178 python-wheel))
28179 (home-page "https://ekalinin.github.io/nodeenv/")
28180 (synopsis "Create isolated node.js environments")
28181 (description
28182 "Nodeenv (node.js virtual environment) is a tool to create isolated
28183node.js environments. It creates an environment that has its own installation
28184directories, that doesn't share libraries with other node.js virtual
28185environments.")
28186 (license license:bsd-3)))
28187
28188(define-public python-pynamecheap
28189 (package
28190 (name "python-pynamecheap")
28191 (version "0.0.3")
28192 (source
28193 (origin
28194 (method url-fetch)
28195 (uri (pypi-uri "PyNamecheap" version))
28196 (sha256
28197 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28198 (build-system pyproject-build-system)
28199 (arguments (list #:tests? #f)) ; No tests.
28200 (native-inputs (list python-setuptools))
28201 (propagated-inputs (list python-requests))
28202 (home-page "https://github.com/Bemmu/PyNamecheap")
28203 (synopsis "Namecheap API client in Python")
28204 (description
28205 "PyNamecheap is a Namecheap API client in Python.")
28206 (license license:expat)))
28207
28208(define-public python-pynput
28209 (package
28210 (name "python-pynput")
28211 (version "1.8.1")
28212 (source
28213 (origin
28214 (method git-fetch)
28215 (uri (git-reference
28216 (url "https://github.com/moses-palmer/pynput")
28217 (commit (string-append "v" version))))
28218 (file-name (git-file-name name version))
28219 (sha256
28220 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28221 (build-system pyproject-build-system)
28222 (arguments
28223 (list
28224 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28225 #:phases
28226 #~(modify-phases %standard-phases
28227 (add-after 'unpack 'relax-requirements
28228 (lambda _
28229 (substitute* "setup.py"
28230 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28231 "RUNTIME_PACKAGES"))))
28232 (add-before 'sanity-check 'start-xserver
28233 (lambda* (#:key inputs #:allow-other-keys)
28234 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28235 (system (format #f "~a :1 -screen 0 640x480x24 &"
28236 Xvfb))
28237 (setenv "DISPLAY" ":1")))))))
28238 (propagated-inputs
28239 (list python-evdev python-xlib))
28240 (native-inputs
28241 (list python-setuptools xorg-server-for-tests))
28242 (home-page "https://github.com/moses-palmer/pynput")
28243 (synopsis "Send virtual input commands")
28244 (description
28245 "This package provides tools to monitor and control user input devices in
28246Python.")
28247 (license license:lgpl3)))
28248
28249(define-public python-pynixutil
28250 (package
28251 (name "python-pynixutil")
28252 (version "0.5.0")
28253 (source
28254 (origin
28255 (method git-fetch)
28256 (uri (git-reference
28257 (url "https://github.com/nix-community/pynixutil")
28258 (commit version)))
28259 (file-name (git-file-name name version))
28260 (sha256
28261 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28262 (build-system pyproject-build-system)
28263 (arguments
28264 (list
28265 #:test-flags
28266 ;; Tests require nix in the PATH.
28267 #~(list "--ignore=tests/test_drv.py")
28268 #:phases
28269 #~(modify-phases %standard-phases
28270 (add-after 'unpack 'use-poetry-core
28271 (lambda _
28272 ;; Patch to use the core poetry API.
28273 (substitute* "pyproject.toml"
28274 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28275 (native-inputs
28276 (list python-poetry-core
28277 python-pytest))
28278 (home-page "https://github.com/nix-community/pynixutil")
28279 (synopsis "Utility functions for working with data from Nix in Python")
28280 (description
28281 "@code{pynixutil} provides functions for base32 encoding/decoding and
28282derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28283@code{drvparse()}.")
28284 (license license:expat)))
28285
28286(define-public python-dns-lexicon
28287 (package
28288 (name "python-dns-lexicon")
28289 (version "3.21.1")
28290 (source
28291 (origin
28292 (method git-fetch)
28293 (uri (git-reference
28294 (url "https://github.com/dns-lexicon/dns-lexicon")
28295 (commit (string-append "v" version))))
28296 (file-name (git-file-name name version))
28297 (sha256
28298 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28299 (build-system pyproject-build-system)
28300 (arguments
28301 (list
28302 ;; Integration tests require network access.
28303 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28304 #:phases
28305 #~(modify-phases %standard-phases
28306 (add-before 'check 'configure-tests
28307 (lambda _
28308 (setenv "HOME" (getcwd)))))))
28309 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28310 (propagated-inputs
28311 (list python-beautifulsoup4
28312 python-cryptography
28313 python-dnspython
28314 python-pyotp
28315 python-pyyaml
28316 python-requests
28317 python-tldextract))
28318 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28319 (synopsis "Manipulate DNS records on various DNS providers")
28320 (description
28321 "Lexicon provides a way to manipulate DNS records on multiple DNS
28322providers in a standardized way. It has a CLI but it can also be used as a
28323Python library. It was designed to be used in automation, specifically with
28324Let's Encrypt.")
28325 (license license:expat)))
28326
28327(define-public python-cfgv
28328 (package
28329 (name "python-cfgv")
28330 (version "3.4.0")
28331 (source
28332 (origin
28333 ;; There are no tests in the PyPI tarball.
28334 (method git-fetch)
28335 (uri (git-reference
28336 (url "https://github.com/asottile/cfgv")
28337 (commit (string-append "v" version))))
28338 (file-name (git-file-name name version))
28339 (sha256
28340 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28341 (build-system pyproject-build-system)
28342 (native-inputs
28343 (list python-pytest python-setuptools python-wheel))
28344 (home-page "https://github.com/asottile/cfgv")
28345 (synopsis "Configuration validation library")
28346 (description
28347 "This library helps to validate configuration files and produce human
28348readable error messages.")
28349 (license license:expat)))
28350
28351(define-public python-commandlines
28352 (package
28353 (name "python-commandlines")
28354 (version "0.4.1")
28355 (source
28356 (origin
28357 (method git-fetch)
28358 (uri (git-reference
28359 (url "https://github.com/chrissimpkins/commandlines")
28360 (commit (string-append "v" version))))
28361 (file-name (git-file-name name version))
28362 (sha256
28363 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28364 (build-system pyproject-build-system)
28365 (native-inputs (list python-pytest python-setuptools))
28366 (home-page "https://github.com/chrissimpkins/commandlines")
28367 (synopsis "Command line argument to object parsing library")
28368 (description
28369 "@code{Commandlines} is a Python library for command line application
28370development that supports command line argument parsing, command string
28371validation testing and application logic.")
28372 (license license:expat)))
28373
28374;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28375;; python-numba. They have a very inflexible relationship.
28376(define-public python-numba
28377 (package
28378 (name "python-numba")
28379 (version "0.62.1")
28380 (source
28381 (origin
28382 (method url-fetch)
28383 (uri (pypi-uri "numba" version))
28384 (sha256
28385 (base32
28386 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
28387 (build-system pyproject-build-system)
28388 (arguments
28389 (list
28390 ;; tests: 10723 tests (skipped=708, expected failures=23)
28391 #:test-backend #~'custom
28392 #:test-flags
28393 ;; Check <buildscripts> directory for more build/tests examples.
28394 #~(list "-m" "numba.runtests"
28395 "--exclude-tags='long_running'"
28396 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28397 "-b"
28398 "-v"
28399 "--"
28400 "numba.tests")
28401 #:phases
28402 #~(modify-phases %standard-phases
28403 (add-after 'unpack 'disable-failing-tests
28404 (lambda _
28405 ;; This expects to be able to run pip.
28406 (delete-file "numba/tests/test_sysinfo.py")
28407 ;; This fails nondeterministically, possibly depending on CPU.
28408 ;; https://github.com/numba/numba/issues/8282.
28409 (substitute* "numba/tests/test_function_type.py"
28410 (("def test_wrapper_address_protocol_libm")
28411 "def disabled_test_wrapper_address_protocol_libm"))
28412 (substitute* "numba/tests/test_caching.py"
28413 ;; RuntimeError: cannot cache function 'simple_usecase': no
28414 ;; locator available for file
28415 (("def test_non_creatable_pycache")
28416 "def __off_test_non_creatable_pycache")
28417 (("def test_non_writable_pycache")
28418 "def __off_test_non_writable_pycache")
28419 ;; AssertionError: None is not an instance of <class
28420 ;; 'numba.core.caching.UserWideCacheLocator'>
28421 (("def test_frozen")
28422 "def __off_test_frozen"))))
28423 (add-before 'build 'disable-proprietary-features
28424 (lambda _
28425 (setenv "NUMBA_DISABLE_HSA" "1")
28426 (setenv "NUMBA_DISABLE_CUDA" "1")))
28427 (add-before 'check 'pre-check
28428 (lambda _
28429 (setenv "HOME" "/tmp")
28430 ;; XXX: Something is wrong with the PYTHONPATH when running the
28431 ;; tests from the build directory, as it complains about not
28432 ;; being able to import certain modules.
28433 (delete-file-recursively "numba"))))))
28434 (native-inputs
28435 (list python-setuptools))
28436 (propagated-inputs
28437 (list python-llvmlite
28438 python-numpy))
28439 (home-page "https://numba.pydata.org")
28440 (synopsis "Compile Python code using LLVM")
28441 (description "Numba gives you the power to speed up your applications with
28442high performance functions written directly in Python. With a few
28443annotations, array-oriented and math-heavy Python code can be just-in-time
28444compiled to native machine instructions, similar in performance to C, C++ and
28445Fortran, without having to switch languages or Python interpreters.
28446
28447Numba works by generating optimized machine code using the LLVM compiler
28448infrastructure at import time, runtime, or statically (using the included pycc
28449tool).")
28450 (license license:bsd-3)))
28451
28452(define-public python-numcodecs
28453 (package
28454 (name "python-numcodecs")
28455 (version "0.13.1")
28456 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
28457 ;;(version "0.14.1")
28458 (source
28459 (origin
28460 (method url-fetch)
28461 (uri (pypi-uri "numcodecs" version))
28462 (sha256
28463 (base32
28464 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
28465 (modules '((guix build utils)))
28466 (snippet
28467 '(begin
28468 ;; Only add CFLAGS on architectures where they are supported
28469 (substitute* "setup.py"
28470 (("import sys")
28471 "import sys\nimport platform")
28472 (("os\\.name == 'posix'")
28473 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28474 " os.name + platform.machine() == 'posixx86'")))
28475 (delete-file-recursively "c-blosc")))))
28476 (build-system pyproject-build-system)
28477 (arguments
28478 (list
28479 #:test-flags
28480 ;; zarr isn't available, because it dependes on this package.
28481 '(list "-k" "not test_zarr3_import")
28482 #:phases
28483 '(modify-phases %standard-phases
28484 (add-after 'unpack 'disable-avx2
28485 (lambda _
28486 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28487 (add-after 'unpack 'unbundle
28488 (lambda _
28489 (substitute* "setup.py"
28490 (("sources=sources \\+ blosc_sources,")
28491 "sources=sources,")
28492 (("extra_compile_args=extra_compile_args")
28493 "extra_compile_args=list(base_compile_args)")
28494 (("'numcodecs.zstd',")
28495 "'numcodecs.zstd', libraries=['zstd'], ")
28496 (("'numcodecs.lz4',")
28497 "'numcodecs.lz4', libraries=['lz4'], ")
28498 (("'numcodecs.blosc',")
28499 "'numcodecs.blosc', libraries=['blosc'], "))))
28500 (add-before 'check 'build-extensions
28501 (lambda _
28502 ;; Cython extensions have to be built before running the tests.
28503 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
28504 (inputs
28505 (list c-blosc lz4 zlib
28506 `(,zstd "lib")))
28507 (propagated-inputs
28508 (list python-google-crc32c
28509 python-importlib-metadata
28510 python-msgpack
28511 python-numpy))
28512 (native-inputs
28513 (list python-cython
28514 python-py-cpuinfo
28515 python-pydata-sphinx-theme
28516 python-pytest
28517 python-setuptools
28518 python-setuptools-scm ;for correct version
28519 python-sphinx
28520 python-sphinx-issues))
28521 (home-page "https://github.com/zarr-developers/numcodecs")
28522 (synopsis "Buffer compression and transformation codecs")
28523 (description
28524 "This Python package provides buffer compression and transformation
28525codecs for use in data storage and communication applications.")
28526 (license license:expat)))
28527
28528(define-public python-asciitree
28529 (package
28530 (name "python-asciitree")
28531 (version "0.3.3")
28532 (source
28533 (origin
28534 (method git-fetch)
28535 (uri (git-reference
28536 (url "https://github.com/mbr/asciitree")
28537 (commit version)))
28538 (file-name (git-file-name name version))
28539 (sha256
28540 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28541 (build-system pyproject-build-system)
28542 (native-inputs (list python-pytest python-setuptools))
28543 (home-page "https://github.com/mbr/asciitree")
28544 (synopsis "Draws ASCII trees")
28545 (description "This package draws tree structures using characters.")
28546 (license license:expat)))
28547
28548(define-public python-dill
28549 (package
28550 (name "python-dill")
28551 (version "0.4.0")
28552 (source
28553 (origin
28554 (method url-fetch)
28555 (uri (pypi-uri "dill" version))
28556 (sha256
28557 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
28558 (build-system pyproject-build-system)
28559 (arguments
28560 (list
28561 #:phases #~(modify-phases %standard-phases
28562 (replace 'check
28563 (lambda* (#:key tests? #:allow-other-keys)
28564 (if tests?
28565 ;; Extracted from tox.ini
28566 (invoke "python" "dill/tests/__main__.py")
28567 (format #t "test suite not run~%")))))))
28568 (native-inputs
28569 (list python-setuptools python-wheel))
28570 (home-page "https://pypi.org/project/dill/")
28571 (synopsis "Serialize all of Python")
28572 (description "Dill extends Python's @code{pickle} module for serializing
28573and de-serializing Python objects to the majority of the built-in Python
28574types. Dill provides the user the same interface as the @code{pickle} module,
28575and also includes some additional features. In addition to pickling Python
28576objects, @code{dill} provides the ability to save the state of an interpreter
28577session in a single command. Hence, it would be feasible to save a
28578interpreter session, close the interpreter, ship the pickled file to another
28579computer, open a new interpreter, unpickle the session and thus continue from
28580the saved state of the original interpreter session.")
28581 (license license:bsd-3)))
28582
28583(define-public python-multiprocess
28584 (package
28585 (name "python-multiprocess")
28586 (version "0.70.18")
28587 (source
28588 (origin
28589 (method url-fetch)
28590 (uri (pypi-uri "multiprocess" version))
28591 (sha256
28592 (base32
28593 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28594 (build-system pyproject-build-system)
28595 (arguments
28596 (list
28597 #:phases
28598 #~(modify-phases %standard-phases
28599 (add-after 'unpack 'disable-broken-tests
28600 (lambda* (#:key inputs #:allow-other-keys)
28601 ;; The "wait_result" and "shared_memory..." tests are broken as
28602 ;; there is no keyboard interrupt.
28603 ;;
28604 ;; The "preload_resources" test fails as it cannot find
28605 ;; mp_preload.py.
28606 (substitute*
28607 (string-append "py" (python-version
28608 (assoc-ref inputs "python"))
28609 "/multiprocess/tests/__init__.py")
28610 (("^(.*)def test_(\
28611wait_result|\
28612shared_memory_SharedMemoryServer_ignores_sigint|\
28613preload_resources\
28614)" line indent)
28615 (string-append indent
28616 "@unittest.skip(\"Disabled by Guix\")\n"
28617 line)))))
28618 (replace 'check
28619 (lambda* (#:key tests? #:allow-other-keys)
28620 (if tests?
28621 (invoke "python" "-m" "multiprocess.tests")
28622 (format #t "test suite not run~%")))))))
28623 (propagated-inputs
28624 (list python-dill))
28625 (native-inputs (list python-setuptools))
28626 (home-page "https://pypi.org/project/multiprocess/")
28627 (synopsis "Multiprocessing and multithreading in Python")
28628 (description
28629 "This package is a fork of the multiprocessing Python package, a package
28630which supports the spawning of processes using the API of the standard
28631library's @code{threading} module.")
28632 (license license:bsd-3)))
28633
28634(define-public python-multiprocessing-on-dill
28635 (package
28636 (name "python-multiprocessing-on-dill")
28637 (version "3.5.0a4")
28638 (source (origin
28639 (method url-fetch)
28640 (uri (pypi-uri "multiprocessing_on_dill" version))
28641 (sha256
28642 (base32
28643 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28644 (build-system pyproject-build-system)
28645 (propagated-inputs (list python-dill))
28646 (native-inputs (list python-pytest python-setuptools python-wheel))
28647 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28648 (synopsis "Multiprocessing using dill instead of pickle")
28649 (description
28650 "This package provides a friendly fork of multiprocessing which uses dill
28651instead of pickle.")
28652 (license license:psfl)))
28653
28654(define-public python-cytoolz
28655 (package
28656 (name "python-cytoolz")
28657 (version "1.0.1")
28658 (source
28659 (origin
28660 (method url-fetch)
28661 (uri (pypi-uri "cytoolz" version))
28662 (sha256
28663 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28664 (modules '((guix build utils)))
28665 (snippet
28666 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28667 (build-system pyproject-build-system)
28668 (arguments
28669 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28670 (native-inputs
28671 (list python-cython
28672 python-pytest
28673 python-setuptools
28674 python-wheel))
28675 (propagated-inputs
28676 (list python-toolz))
28677 (home-page "https://github.com/pytoolz/cytoolz")
28678 (synopsis "High performance functional utilities")
28679 (description
28680 "The cytoolz package implements the same API as provided by toolz. The
28681main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28682that is accessible to other projects developed in Cython.")
28683 (license license:bsd-3)))
28684
28685(define-public python-cloudpickle
28686 (package
28687 (name "python-cloudpickle")
28688 (version "3.1.0")
28689 (source
28690 (origin
28691 ;; Archive on pypi does not include test infrastructure.
28692 (method git-fetch)
28693 (uri (git-reference
28694 (url "https://github.com/cloudpipe/cloudpickle")
28695 (commit (string-append "v" version))))
28696 (file-name (git-file-name name version))
28697 (sha256
28698 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28699 (build-system pyproject-build-system)
28700 (native-inputs
28701 (list python-flit-core
28702 python-psutil
28703 python-pytest))
28704 (home-page "https://github.com/cloudpipe/cloudpickle")
28705 (synopsis "Extended pickling support for Python objects")
28706 (description
28707 "Cloudpickle makes it possible to serialize Python constructs not
28708supported by the default pickle module from the Python standard library. It
28709is especially useful for cluster computing where Python expressions are
28710shipped over the network to execute on remote hosts, possibly close to the
28711data.")
28712 (license license:bsd-3)))
28713
28714(define-public python-locket
28715 (package
28716 (name "python-locket")
28717 (version "1.0.0")
28718 (source
28719 (origin
28720 (method git-fetch)
28721 (uri (git-reference
28722 (url "https://github.com/mwilliamson/locket.py")
28723 (commit version)))
28724 (file-name (git-file-name name version))
28725 (sha256
28726 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28727 (build-system pyproject-build-system)
28728 ;; XXX: Requires python-spur, which requires another version of
28729 ;; python-paramiko.
28730 (arguments (list #:tests? #f))
28731 (native-inputs (list python-setuptools))
28732 (home-page "https://github.com/mwilliamson/locket.py")
28733 (synopsis "File-based locks for Python")
28734 (description
28735 "Locket implements a lock that can be used by multiple processes provided
28736they use the same path.")
28737 (license license:bsd-2)))
28738
28739(define-public python-loky
28740 (package
28741 (name "python-loky")
28742 (version "3.5.6")
28743 (source
28744 (origin
28745 (method git-fetch)
28746 (uri (git-reference
28747 (url "https://github.com/joblib/loky")
28748 (commit version)))
28749 (file-name (git-file-name name version))
28750 (sha256
28751 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
28752 (build-system pyproject-build-system)
28753 (arguments
28754 (list
28755 #:test-flags
28756 #~(list "-k" (string-join
28757 (list
28758 ;; Requires process control.
28759 "not (test_kill_process_tree"
28760 ;; Hardware dependent tests.
28761 "test_only_physical_cores_error"
28762 ;; Depends on previous results.
28763 "test_wait_result)")
28764 " or "))))
28765 (native-inputs
28766 (list python-packaging
28767 python-psutil
28768 python-pytest
28769 python-setuptools))
28770 (propagated-inputs
28771 (list python-cloudpickle))
28772 (home-page "https://loky.readthedocs.io")
28773 (synopsis "Robust and reusable Executor for joblib")
28774 (description
28775 "This package provides a robust implementation of
28776@code{concurrent.futures.ProcessPoolExecutor}.")
28777 (license license:bsd-3)))
28778
28779(define-public python-partd
28780 (package
28781 (name "python-partd")
28782 (version "1.4.2")
28783 (source
28784 (origin
28785 (method url-fetch)
28786 (uri (pypi-uri "partd" version))
28787 (sha256
28788 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28789 (build-system pyproject-build-system)
28790 (native-inputs
28791 (list python-pytest
28792 python-setuptools
28793 python-versioneer))
28794 (propagated-inputs
28795 (list python-locket
28796 python-toolz
28797 ;; [complete]
28798 python-blosc
28799 python-numpy
28800 python-pandas
28801 python-pyzmq))
28802 (home-page "https://github.com/dask/partd/")
28803 (synopsis "Appendable key-value storage")
28804 (description
28805 "Partd stores key-value pairs. Values are raw bytes. We append on old
28806values. Partd excels at shuffling operations.")
28807 (license license:bsd-3)))
28808
28809(define-public python-fsspec
28810 (package
28811 (name "python-fsspec")
28812 (version "2026.1.0")
28813 (source
28814 (origin
28815 (method git-fetch)
28816 (uri (git-reference
28817 (url "https://github.com/fsspec/filesystem_spec")
28818 (commit version)))
28819 (file-name (git-file-name name version))
28820 (sha256
28821 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
28822 (build-system pyproject-build-system)
28823 (arguments
28824 (list
28825 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
28826 #:test-flags
28827 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28828 "-k" (string-join
28829 ;; Test requires nentwork access
28830 (list "not test_async_cat_file_ranges"
28831 "test_gist_public_all_files"
28832 "test_gist_public_missing_file"
28833 "test_gist_public_one_file"
28834 ;; Test hangs
28835 "test_processes")
28836 " and not "))))
28837 ;; The most of the inputs are optional, project does not force to include
28838 ;; any dependencies according to pyproject.toml.
28839 (propagated-inputs
28840 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28841 (native-inputs
28842 (list nss-certs-for-test
28843 python-hatch-vcs
28844 python-hatchling
28845 python-numpy
28846 python-pytest
28847 python-pytest-asyncio
28848 python-pytest-mock
28849 python-pytest-rerunfailures))
28850 (home-page "https://github.com/fsspec/filesystem_spec")
28851 (synopsis "File-system specification")
28852 (description "The purpose of this package is to produce a template or
28853specification for a file-system interface, that specific implementations
28854should follow, so that applications making use of them can rely on a common
28855behavior and not have to worry about the specific internal implementation
28856decisions with any given backend.")
28857 (license license:bsd-3)))
28858
28859(define-public python-ilinkedlist
28860 (package
28861 (name "python-ilinkedlist")
28862 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28863 (revision . "0")))
28864 (version (git-version "0.4.0"
28865 (assoc-ref properties 'revision)
28866 (assoc-ref properties 'commit)))
28867 (home-page "https://github.com/luther9/ilinkedlist-py")
28868 (source
28869 (origin
28870 (method git-fetch)
28871 (uri (git-reference
28872 (url home-page)
28873 (commit (assoc-ref properties 'commit))))
28874 (file-name (git-file-name name version))
28875 (sha256
28876 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28877 (build-system pyproject-build-system)
28878 (native-inputs (list python-pytest python-setuptools))
28879 (synopsis "Immutable linked list library")
28880 (description
28881 "This is a implementation of immutable linked lists for Python. It
28882contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28883Since a linked list is treated as immutable, it is hashable, and its length
28884can be retrieved in constant time. Some of the terminology is inspired by
28885LISP. It is possible to create an improper list by creating a @code{Pair}
28886with a non-list @code{cdr}.")
28887 (license license:gpl3+)))
28888
28889(define-public python-readlike
28890 (package
28891 (name "python-readlike")
28892 (version "0.1.3")
28893 (source
28894 (origin
28895 (method git-fetch)
28896 (uri (git-reference
28897 (url "https://github.com/jangler/readlike")
28898 (commit version)))
28899 (file-name (git-file-name name version))
28900 (sha256
28901 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28902 (build-system pyproject-build-system)
28903 (native-inputs (list python-pytest python-setuptools))
28904 (home-page "https://github.com/jangler/readlike")
28905 (synopsis "GNU Readline-like line editing module")
28906 (description
28907 "This Python module provides line editing functions similar to the default
28908Emacs-style ones of GNU Readline. Unlike the Python standard library's
28909@code{readline} package, this one allows access to those capabilities in settings
28910outside of a standard command-line interface. It is especially well-suited to
28911interfacing with Urwid, due to a shared syntax for describing key inputs.
28912
28913Currently, all stateless Readline commands are implemented. Yanking and history
28914are not supported.")
28915 (license license:expat)))
28916
28917(define-public python-reparser
28918 (package
28919 (name "python-reparser")
28920 (version "1.4.3")
28921 (source
28922 (origin
28923 (method git-fetch)
28924 (uri (git-reference
28925 (url "https://github.com/xmikos/reparser")
28926 (commit (string-append "v" version))))
28927 (file-name (git-file-name name version))
28928 (sha256
28929 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28930 (build-system pyproject-build-system)
28931 (arguments (list #:tests? #f)) ; No tests.
28932 (native-inputs (list python-setuptools))
28933 (home-page "https://github.com/xmikos/reparser")
28934 (synopsis "Lexer/parser for inline markup based on regular expressions")
28935 (description
28936 "This Python library provides a simple lexer/parser for inline markup based
28937on regular expressions.")
28938 (license license:expat)))
28939
28940(define-public python-retrying
28941 (package
28942 (name "python-retrying")
28943 (version "1.4.1")
28944 (source
28945 (origin
28946 (method git-fetch)
28947 (uri (git-reference
28948 (url "https://github.com/groodt/retrying")
28949 (commit (string-append "v" version))))
28950 (file-name (git-file-name name version))
28951 (sha256
28952 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28953 (build-system pyproject-build-system)
28954 (native-inputs (list python-pytest python-setuptools))
28955 (home-page "https://github.com/groodt/retrying")
28956 (synopsis "Library for adding retry behavior")
28957 (description "Retrying is a general-purpose retrying library to simplify
28958the task of adding retry behavior to just about anything.
28959
28960Features:
28961
28962@itemize
28963@item Generic Decorator API.
28964@item Specify stop condition (i.e. limit by number of attempts).
28965@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28966@item Customize retrying on Exceptions.
28967@item Customize retrying on expected returned result.
28968@end itemize")
28969 (license license:asl2.0)))
28970
28971(define-public python-precis-i18n
28972 (package
28973 (name "python-precis-i18n")
28974 (version "1.1.1")
28975 (source
28976 (origin
28977 (method url-fetch)
28978 (uri (pypi-uri "precis_i18n" version))
28979 (sha256
28980 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28981 (build-system pyproject-build-system)
28982 (native-inputs
28983 (list python-pytest
28984 python-setuptools
28985 python-wheel))
28986 (home-page "https://github.com/byllyfish/precis_i18n")
28987 (synopsis "Implementation of the PRECIS framework")
28988 (description
28989 "This module implements the PRECIS Framework as described in RFC 8264,
28990RFC 8265 and RFC 8266.")
28991 (license license:expat)))
28992
28993(define-public python-absl-py
28994 (package
28995 (name "python-absl-py")
28996 (version "2.3.1")
28997 (source
28998 (origin
28999 (method url-fetch)
29000 (uri (pypi-uri "absl_py" version))
29001 (sha256
29002 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29003 (build-system pyproject-build-system)
29004 (arguments
29005 (list #:tests? #f)) ;tests require bazel
29006 (native-inputs
29007 (list python-hatchling))
29008 (home-page "https://github.com/abseil/abseil-py")
29009 (synopsis "Abseil Python common libraries")
29010 (description
29011 "This package provides the Abseil Python Common Libraries, a collection
29012of Python libraries for building Python applications.")
29013 (license license:asl2.0)))
29014
29015(define-public python-astor
29016 (package
29017 (name "python-astor")
29018 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29019 (revision . "0")))
29020 (version (git-version "0.8.1"
29021 (assoc-ref properties 'revision)
29022 (assoc-ref properties 'commit)))
29023 (source
29024 (origin
29025 (method git-fetch)
29026 (uri (git-reference
29027 (url "https://github.com/berkerpeksag/astor")
29028 (commit (assoc-ref properties 'commit))))
29029 (file-name (git-file-name name version))
29030 (sha256
29031 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29032 (build-system pyproject-build-system)
29033 (arguments
29034 (list
29035 ;; FIXME: Unclear why this test fails.
29036 #:test-flags #~(list "--deselect=\
29037tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29038 (native-inputs (list python-pytest python-setuptools))
29039 (home-page "https://github.com/berkerpeksag/astor")
29040 (synopsis "Read and write Python ASTs")
29041 (description
29042 "Astor is designed to allow easy manipulation of Python source via the
29043Abstract Syntax Tree.")
29044 (license license:bsd-3)))
29045
29046(define-public python-astunparse
29047 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29048 ;; updated.
29049 (package
29050 (name "python-astunparse")
29051 (version "1.6.3")
29052 (source
29053 (origin
29054 (method url-fetch)
29055 (uri (pypi-uri "astunparse" version))
29056 (sha256
29057 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29058 (build-system pyproject-build-system)
29059 (arguments '(#:tests? #f)) ; there are none
29060 (native-inputs
29061 (list python-setuptools))
29062 (propagated-inputs
29063 (list python-six))
29064 (home-page "https://github.com/simonpercivall/astunparse")
29065 (synopsis "AST unparser for Python")
29066 (description "This package provides an AST unparser for Python. It is a
29067factored out version of @code{unparse} found in the Python source
29068distribution.")
29069 (license license:bsd-3)))
29070
29071(define-public python-gast
29072 (package
29073 (name "python-gast")
29074 (version "0.6.0")
29075 (source
29076 (origin
29077 (method url-fetch)
29078 (uri (pypi-uri "gast" version))
29079 (sha256
29080 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
29081 (build-system pyproject-build-system)
29082 (native-inputs
29083 (list python-pytest python-setuptools python-wheel))
29084 (home-page "https://github.com/serge-sans-paille/gast/")
29085 (synopsis "Generic Python AST that abstracts the underlying Python version")
29086 (description
29087 "GAST provides a compatibility layer between the AST of various Python
29088versions, as produced by @code{ast.parse} from the standard @code{ast}
29089module.")
29090 (license license:bsd-3)))
29091
29092;; XXX: Not maintained since 2022, leaf package.
29093(define-public python-attr
29094 (package
29095 (name "python-attr")
29096 (version "0.3.2")
29097 (source
29098 (origin
29099 (method url-fetch)
29100 (uri (pypi-uri "attr" version))
29101 (sha256
29102 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29103 (build-system pyproject-build-system)
29104 (arguments
29105 (list #:test-backend #~'custom
29106 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29107 (native-inputs
29108 (list python-setuptools))
29109 (home-page "https://github.com/denis-ryzhkov/attr")
29110 (synopsis "Decorator for attributes of target function or class")
29111 (description "Simple decorator to set attributes of target function or
29112class in a @acronym{DRY, Don't Repeat Yourself} way.")
29113 (license license:expat)))
29114
29115(define-public python-construct
29116 ;; Fixes not in a release yet.
29117 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29118 (revision "1"))
29119 (package
29120 (name "python-construct")
29121 (version (git-version "2.10.70" revision commit))
29122 (source
29123 (origin
29124 (method git-fetch)
29125 (uri (git-reference
29126 (url "https://github.com/construct/construct")
29127 (commit commit)))
29128 (file-name (git-file-name name version))
29129 (sha256
29130 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29131 (build-system pyproject-build-system)
29132 (arguments
29133 (list
29134 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29135 (native-inputs
29136 (list python-pytest python-setuptools))
29137 (propagated-inputs
29138 (list python-arrow
29139 python-cloudpickle
29140 python-cryptography
29141 python-lz4
29142 python-numpy
29143 python-ruamel.yaml))
29144 (home-page "https://construct.readthedocs.io")
29145 (synopsis "Declarative and symmetrical parser and builder for binary data")
29146 (description
29147 "This package provides both simple, atomic constructs (such as
29148integers of various sizes), as well as composite ones which allow you
29149form hierarchical and sequential structures of increasing complexity.
29150It features bit and byte granularity, easy debugging and testing, an
29151easy-to-extend subclass system, and lots of primitive constructs to
29152make your work easier.")
29153 (license license:expat))))
29154
29155(define-public python-outcome
29156 (package
29157 (name "python-outcome")
29158 (version "1.3.0.post0")
29159 (source
29160 (origin
29161 (method url-fetch)
29162 (uri (pypi-uri "outcome" version))
29163 (sha256
29164 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29165 (build-system pyproject-build-system)
29166 (native-inputs
29167 (list python-pytest
29168 python-pytest-asyncio
29169 python-setuptools))
29170 (propagated-inputs
29171 (list python-attrs))
29172 (home-page "https://github.com/python-trio/outcome")
29173 (synopsis "Capture the outcome of Python function calls")
29174 (description
29175 "Capture the outcome of Python function calls. Extracted from the Trio
29176project.")
29177 ;; Either license applies.
29178 (license (list license:expat license:asl2.0))))
29179
29180(define-public python-humanize
29181 (package
29182 (name "python-humanize")
29183 (version "4.14.0")
29184 (source
29185 (origin
29186 (method url-fetch)
29187 (uri (pypi-uri "humanize" version))
29188 (sha256
29189 (base32
29190 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29191 (build-system pyproject-build-system)
29192 (native-inputs
29193 (list python-freezegun
29194 python-hatch-vcs
29195 python-hatchling
29196 python-pytest))
29197 (home-page "https://github.com/jmoiron/humanize")
29198 (synopsis "Print numerical information in a human-readable form")
29199 (description "This package provides a Python module that displays numbers
29200and dates in \"human readable\" forms. For example, it would display
29201\"12345591313\" as \"12.3 billion\".")
29202 (license license:expat)))
29203
29204(define-public python-annoy
29205 (package
29206 (name "python-annoy")
29207 (version "1.17.3")
29208 (source
29209 (origin
29210 (method git-fetch)
29211 (uri (git-reference
29212 (url "https://github.com/spotify/annoy")
29213 (commit (string-append "v" version))))
29214 (file-name (git-file-name name version))
29215 (sha256
29216 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29217 (build-system pyproject-build-system)
29218 (arguments
29219 (list
29220 #:test-flags
29221 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29222 ;; name resolution>
29223 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29224 "--deselect=test/accuracy_test.py::test_nytimes_16"
29225 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29226 (native-inputs
29227 (list python-h5py
29228 python-numpy
29229 python-pytest
29230 python-setuptools))
29231 (home-page "https://github.com/spotify/annoy/")
29232 (synopsis "Approximate nearest neighbors library")
29233 (description
29234 "Annoy is a C++ library with Python bindings to search for points in
29235space that are close to a given query point. It also creates large read-only
29236file-based data structures that are @code{mmap}ped into memory so that many
29237processes may share the same data.")
29238 (license license:asl2.0)))
29239
29240(define-public python-croniter
29241 (package
29242 (name "python-croniter")
29243 (version "5.0.1")
29244 (source
29245 (origin
29246 (method git-fetch)
29247 (uri (git-reference
29248 (url "https://github.com/kiorky/croniter")
29249 (commit version)))
29250 (file-name (git-file-name name version))
29251 (sha256
29252 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29253 (build-system pyproject-build-system)
29254 (native-inputs (list python-pytest python-setuptools))
29255 (propagated-inputs (list python-dateutil python-pytz))
29256 (home-page "https://github.com/kiorky/croniter")
29257 (synopsis "Iterate datetime objects with cron-like syntax")
29258 (description
29259 "@code{croniter} provides iteration for datetime object with cron-like
29260format.")
29261 (license license:expat)))
29262
29263(define-public python-crontab
29264 (package
29265 (name "python-crontab")
29266 (version "3.3.0")
29267 (source
29268 (origin
29269 (method url-fetch)
29270 (uri (pypi-uri "python_crontab" version))
29271 (sha256
29272 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29273 (build-system pyproject-build-system)
29274 (arguments
29275 (list #:test-flags
29276 ;; This test is made for Windows.
29277 #~(list "-k" "not test_07_non_posix_shell")
29278 #:phases
29279 #~(modify-phases %standard-phases
29280 (add-after 'unpack 'defaults-to-mcron
29281 (lambda* (#:key inputs #:allow-other-keys)
29282 (substitute* "crontab.py"
29283 (("/usr/bin/crontab")
29284 (search-input-file inputs "bin/crontab"))))))))
29285 (inputs
29286 (list mcron python-dateutil))
29287 (native-inputs
29288 (list python-pytest python-setuptools))
29289 (home-page "https://gitlab.com/doctormo/python-crontab/")
29290 (synopsis "Module for reading and writing crontab files")
29291 (description "This Python module can read, write crontab files, and
29292access the system cron automatically and simply using a direct API.")
29293 (license license:lgpl3+)))
29294
29295(define-public python-apscheduler
29296 (package
29297 (name "python-apscheduler")
29298 (version "3.11.2")
29299 (source (origin
29300 (method url-fetch)
29301 (uri (pypi-uri "apscheduler" version))
29302 (sha256
29303 (base32
29304 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29305 (build-system pyproject-build-system)
29306 (arguments
29307 (list
29308 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29309 #:test-flags
29310 ;; XXX: Some tests hang or fail with verity of errors:
29311 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29312 #~(list #$@(map (lambda (test) (string-append "--deselect="
29313 "tests/test_executors.py::"
29314 test))
29315 (list "test_broken_pool"
29316 "test_max_instances[processpool-pytz]"
29317 "test_max_instances[processpool-zoneinfo]"
29318 "test_run_coroutine_job_tornado"
29319 "test_run_job_error[processpool-pytz]"
29320 "test_run_job_error[processpool-zoneinfo]"
29321 "test_submit_job[processpool-pytz-error]"
29322 "test_submit_job[processpool-pytz-executed]"
29323 "test_submit_job[processpool-pytz-missed]"
29324 "test_submit_job[processpool-zoneinfo-error]"
29325 "test_submit_job[processpool-zoneinfo-executed]"
29326 "test_submit_job[processpool-zoneinfo-missed]")))))
29327 (native-inputs
29328 (list python-anyio
29329 python-gevent
29330 python-pyside-6
29331 python-pytest
29332 python-pytest-asyncio
29333 python-pytz
29334 python-setuptools
29335 python-setuptools-scm
29336 python-sqlalchemy
29337 python-tornado
29338 python-twisted))
29339 (propagated-inputs
29340 (list python-tzlocal))
29341 (home-page "https://github.com/agronholm/apscheduler")
29342 (synopsis "Task scheduling library for Python")
29343 (description "Advanced Python Scheduler (APScheduler) is a Python library
29344that lets you schedule your Python code to be executed later, either just once
29345or periodically.
29346
29347You can add new jobs or remove old ones on the fly as you please. If you store
29348your jobs in a database, they will also survive scheduler restarts and maintain
29349their state. When the scheduler is restarted, it will then run all the jobs it
29350should have run while it was offline.")
29351 (license license:expat)))
29352
29353(define-public python-ifaddr
29354 (package
29355 (name "python-ifaddr")
29356 (version "0.2.0")
29357 (source
29358 (origin
29359 (method url-fetch)
29360 (uri (pypi-uri "ifaddr" version))
29361 (sha256
29362 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29363 (snippet #~(delete-file "ifaddr/_win32.py"))))
29364 (build-system pyproject-build-system)
29365 (native-inputs
29366 (list python-pytest python-setuptools python-wheel))
29367 (home-page "https://github.com/pydron/ifaddr")
29368 (synopsis "Network interface and IP address enumeration library")
29369 (description
29370 "This package provides a network interface and IP address enumeration
29371library in Python.")
29372 (license license:expat)))
29373
29374(define-public python-berkeleydb
29375 (package
29376 (name "python-berkeleydb")
29377 (version "18.1.15")
29378 (source
29379 (origin
29380 (method url-fetch)
29381 (uri (pypi-uri "berkeleydb" version))
29382 (sha256
29383 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29384 (build-system pyproject-build-system)
29385 (arguments
29386 (list
29387 #:test-backend #~'custom
29388 #:test-flags #~(list "test.py" "-v")
29389 #:phases
29390 #~(modify-phases %standard-phases
29391 (add-after 'unpack 'configure-locations
29392 (lambda* (#:key inputs #:allow-other-keys)
29393 (setenv "BERKELEYDB_DIR"
29394 (assoc-ref inputs "bdb"))
29395 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29396 "1")))
29397 (add-after 'unpack 'remove-legacy
29398 (lambda _
29399 (substitute* "pyproject.toml"
29400 ((":__legacy__") "")))))))
29401 (native-inputs (list python-setuptools))
29402 (inputs (list bdb))
29403 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29404 (synopsis "Python bindings for Oracle Berkeley DB")
29405 (description
29406 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29407C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29408Transaction objects, and each of these is exposed as a Python type in the
29409bsddb3.db module. The database objects can use various access methods: btree,
29410hash, recno, and queue. Complete support of Berkeley DB distributed
29411transactions. Complete support for Berkeley DB Replication Manager.
29412Complete support for Berkeley DB Base Replication. Support for RPC.")
29413 (license license:bsd-3)))
29414
29415;; Last version before rename to python-berkeleydb.
29416;; This package is close to deprecation.
29417(define-public python-bsddb3
29418 (package
29419 (inherit python-berkeleydb)
29420 (name "python-bsddb3")
29421 (version "6.2.9")
29422 (source
29423 (origin
29424 (method url-fetch)
29425 (uri (pypi-uri "bsddb3" version))
29426 (sha256
29427 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29428 (arguments
29429 (substitute-keyword-arguments arguments
29430 ;; Tests started failing from [email protected].
29431 ;; The package is in a pre-deprecation phase, so I didn't bother
29432 ;; to try and patch them, but sanity-check passes so the package
29433 ;; itself is likely fine.
29434 ((#:tests? tests? #t)
29435 #f)
29436 ((#:phases phases #~%standard-phases)
29437 #~(modify-phases #$phases
29438 (delete 'remove-legacy)))
29439 ((#:test-flags test-flags #~(list))
29440 #~(list "test3.py" "-v"))))))
29441
29442(define-public python-dbfread
29443 (package
29444 (name "python-dbfread")
29445 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29446 (revision . "0")))
29447 (version (git-version "2.0.7"
29448 (assoc-ref properties 'revision)
29449 (assoc-ref properties 'commit)))
29450 (source
29451 (origin
29452 (method git-fetch)
29453 (uri (git-reference
29454 (url "https://github.com/olemb/dbfread")
29455 (commit (assoc-ref properties 'commit))))
29456 (file-name (git-file-name name version))
29457 (sha256
29458 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29459 (build-system pyproject-build-system)
29460 (arguments
29461 (list
29462 #:phases
29463 #~(modify-phases %standard-phases
29464 (add-after 'unpack 'relax-setup.py
29465 (lambda _
29466 (substitute* "setup.py"
29467 (("python_requires.*")
29468 "")))))))
29469 (native-inputs (list python-pytest python-setuptools))
29470 (home-page "https://dbfread.readthedocs.io")
29471 (synopsis "Read DBF Files with Python")
29472 (description
29473 "This library reads DBF files and returns the data as native Python data
29474types for further processing. It is primarily intended for batch jobs and
29475one-off scripts.")
29476 (license license:expat)))
29477
29478(define-public python-cached-property
29479 (package
29480 (name "python-cached-property")
29481 (version "2.0.1")
29482 (source
29483 (origin
29484 (method url-fetch)
29485 (uri (pypi-uri "cached_property" version))
29486 (sha256
29487 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29488 (build-system pyproject-build-system)
29489 (native-inputs
29490 (list python-freezegun
29491 python-pytest
29492 python-setuptools
29493 python-wheel))
29494 (home-page "https://github.com/pydanny/cached-property")
29495 (synopsis "Decorator for caching properties in classes")
29496 (description
29497 "This package provides a decorator which makes caching
29498time-or-computationally-expensive properties quick and easy and works in
29499Python 2 or 3.")
29500 (license license:bsd-3)))
29501
29502(define-public python-folium
29503 (package
29504 (name "python-folium")
29505 (version "0.19.4")
29506 (source
29507 (origin
29508 ;; PyPI has a ".whl" file but not a proper source release.
29509 ;; Thus, fetch code from Git.
29510 (method git-fetch)
29511 (uri (git-reference
29512 (url "https://github.com/python-visualization/folium")
29513 (commit (string-append "v" version))))
29514 (file-name (git-file-name name version))
29515 (sha256
29516 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29517 (build-system pyproject-build-system)
29518 (arguments
29519 (list #:test-flags
29520 ;; This file requires Selenium.
29521 #~(list "--ignore" "tests/selenium/test_selenium.py"
29522 "-k" (string-append
29523 ;; The tests below also require Selenium.
29524 "not test__repr_png_is_bytes"
29525 " and not test_valid_png"
29526 " and not test_valid_png_size"
29527 " and not test_geojson"
29528 " and not test_heat_map_with_weights"
29529 ;; This performs an online request.
29530 " and not test_json_request"
29531 ;; Requires geodatasets package.
29532 " and not test_timedynamic_geo_json"
29533 ;; AssertionError.
29534 " and not test_minimap"))))
29535 (propagated-inputs
29536 (list python-branca
29537 python-jinja2
29538 python-numpy
29539 python-requests
29540 python-xyzservices))
29541 (native-inputs
29542 (list python-geopandas
29543 python-nbconvert
29544 python-pandas
29545 python-pillow
29546 python-pytest
29547 python-selenium
29548 python-setuptools
29549 python-setuptools-scm
29550 python-wheel))
29551 (home-page "https://github.com/python-visualization/folium")
29552 (synopsis "Make beautiful maps with Leaflet.js & Python")
29553 (description "@code{folium} makes it easy to visualize data that’s been
29554manipulated in Python on an interactive leaflet map. It enables both the
29555binding of data to a map for @code{choropleth} visualizations as well as
29556passing rich vector/raster/HTML visualizations as markers on the map.
29557
29558The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29559Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29560supports Image, Video, GeoJSON and TopoJSON overlays.")
29561 (license license:expat)))
29562
29563(define-public python-mercantile
29564 (package
29565 (name "python-mercantile")
29566 (version "1.2.1")
29567 (source
29568 (origin
29569 (method git-fetch)
29570 (uri (git-reference
29571 (url "https://github.com/mapbox/mercantile")
29572 (commit version)))
29573 (file-name (git-file-name name version))
29574 (sha256
29575 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29576 (build-system pyproject-build-system)
29577 (propagated-inputs (list python-click))
29578 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29579 python-setuptools))
29580 (home-page "https://github.com/mapbox/mercantile")
29581 (synopsis "Web mercator XYZ tile utilities")
29582 (description
29583 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29584@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29585left corner and bounding longitudes and latitudes for XYZ tiles, a
29586@code{xy(lng, lat)} function that returns spherical mercator x and y
29587coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29588containing a given point, and quadkey conversion functions
29589@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29590translating between quadkey and tile coordinates.")
29591 (license license:bsd-3)))
29592
29593(define-public jube
29594 (package
29595 ;; This is a command-line tool, so no "python-" prefix.
29596 (name "jube")
29597 (version "2.6.1")
29598 (source
29599 (origin
29600 (method url-fetch)
29601 (uri (string-append
29602 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29603 version))
29604 (sha256
29605 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29606 (file-name (string-append "jube-" version ".tar.gz"))))
29607 (build-system pyproject-build-system)
29608 (arguments
29609 (list
29610 #:tests? #f)) ; No tests.
29611 (propagated-inputs (list python-pyyaml))
29612 (native-inputs (list python-setuptools))
29613 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29614 (synopsis "Benchmarking environment")
29615 (description
29616 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29617benchmarked application, benchmark data is stored in a format that allows JUBE
29618to deduct the desired information. This data can be parsed by automatic pre-
29619and post-processing scripts that draw information and store it more densely
29620for manual interpretation.")
29621 (license license:gpl3+)))
29622
29623(define-public python-pyroutelib3
29624 (package
29625 (name "python-pyroutelib3")
29626 (version "2.0.0")
29627 (source
29628 (origin
29629 (method git-fetch)
29630 (uri (git-reference
29631 (url "https://github.com/MKuranowski/pyroutelib3")
29632 (commit (string-append "v" version))))
29633 (file-name (git-file-name name version))
29634 (sha256
29635 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29636 (build-system pyproject-build-system)
29637 (propagated-inputs (list python-dateutil python-protobuf-5))
29638 (native-inputs (list python-filelock python-flit-core python-pytest))
29639 (home-page "https://github.com/MKuranowski/pyroutelib3")
29640 (synopsis "Library for simple routing on OSM data")
29641 (description "Library for simple routing on OSM data")
29642 (license license:gpl3+)))
29643
29644(define-public python-bibtexparser
29645 (package
29646 (name "python-bibtexparser")
29647 (version "2.0.0b9")
29648 (source
29649 (origin
29650 (method git-fetch)
29651 (uri (git-reference
29652 (url "https://github.com/sciunto-org/python-bibtexparser")
29653 (commit (string-append "v" version))))
29654 (file-name (git-file-name name version))
29655 (sha256
29656 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29657 (build-system pyproject-build-system)
29658 (propagated-inputs (list python-pylatexenc python-pyparsing))
29659 (native-inputs
29660 (list python-pylatexenc python-pytest python-setuptools))
29661 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29662 (synopsis "Python library to parse BibTeX files")
29663 (description "BibtexParser is a Python library to parse BibTeX files.")
29664 (license (list license:bsd-3 license:lgpl3))))
29665
29666(define-public python-bibtexparser-for-cobib
29667 (hidden-package
29668 (package
29669 (inherit python-bibtexparser)
29670 (name "python-bibtexparser")
29671 (version "1.4.0")
29672 (source
29673 (origin
29674 (method git-fetch)
29675 (uri (git-reference
29676 (url "https://github.com/sciunto-org/python-bibtexparser")
29677 (commit (string-append "v" version))))
29678 (file-name (git-file-name name version))
29679 (sha256
29680 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29681
29682(define-public python-distro
29683 (package
29684 (name "python-distro")
29685 (version "1.9.0")
29686 (source
29687 (origin
29688 (method url-fetch)
29689 (uri (pypi-uri "distro" version))
29690 (sha256
29691 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29692 (build-system pyproject-build-system)
29693 (arguments
29694 (list
29695 #:test-flags
29696 #~(list "-k" (string-join
29697 ;; We are not on Ubunto distro:
29698 ;; AssertionError: assert '' == 'ubuntu'.
29699 (list "not test_ubuntu14normal_lsb_release"
29700 "test_trailingblanks_lsb_release"
29701 "test_ubuntu14nomodules_lsb_release")
29702 " and not "))))
29703 (native-inputs
29704 (list python-pytest
29705 python-setuptools))
29706 (home-page "https://github.com/python-distro/distro")
29707 (synopsis "OS platform information API")
29708 (description
29709 "@code{distro} provides information about the OS distribution it runs on,
29710such as a reliable machine-readable ID, or version information.
29711
29712It is the recommended replacement for Python's original
29713`platform.linux_distribution` function (which will be removed in Python 3.8).
29714@code{distro} also provides a command-line interface to output the platform
29715information in various formats.")
29716 (license license:asl2.0)))
29717
29718(define-public python-cairosvg
29719 (package
29720 (name "python-cairosvg")
29721 (version "2.8.2")
29722 (source
29723 (origin
29724 (method url-fetch)
29725 (uri (pypi-uri "cairosvg" version))
29726 (sha256
29727 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29728 (build-system pyproject-build-system)
29729 (arguments
29730 (list #:test-flags #~(list "cairosvg/test_api.py")))
29731 (native-inputs
29732 (list python-pytest
29733 python-setuptools))
29734 (propagated-inputs
29735 (list python-cairocffi
29736 python-cssselect2
29737 python-defusedxml
29738 python-pillow
29739 python-tinycss2))
29740 (home-page "https://cairosvg.org/")
29741 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29742 (description "CairoSVG is a SVG converter based on Cairo. It can export
29743SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29744SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29745parsed, the result is drawn to a Cairo surface that can be exported to
29746qvarious formats: PDF, PostScript, PNG and even SVG.")
29747 (license license:lgpl3+)))
29748
29749(define-public python-pyphen
29750 (package
29751 (name "python-pyphen")
29752 (version "0.17.2")
29753 (source
29754 (origin
29755 (method git-fetch)
29756 (uri (git-reference
29757 (url "https://github.com/Kozea/Pyphen")
29758 (commit version)))
29759 (file-name (git-file-name name version))
29760 (sha256
29761 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29762 (build-system pyproject-build-system)
29763 (native-inputs (list python-flit-core python-pytest))
29764 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29765 ;; embedded set provided by upstream - like Debian does.
29766 (home-page "https://github.com/Kozea/Pyphen")
29767 (synopsis "Pure Python module to hyphenate text")
29768 (description "Pyphen is a pure Python module to hyphenate text using
29769existing Hunspell hyphenation dictionaries.")
29770 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29771
29772(define-public python-intelhex
29773 (package
29774 (name "python-intelhex")
29775 (version "2.3.0")
29776 (source
29777 (origin
29778 (method git-fetch)
29779 (uri (git-reference
29780 (url "https://github.com/python-intelhex/intelhex")
29781 (commit version)))
29782 (file-name (git-file-name name version))
29783 (sha256
29784 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29785 (build-system pyproject-build-system)
29786 (arguments (list #:test-backend #~'unittest))
29787 (native-inputs (list python-setuptools))
29788 (home-page "https://github.com/python-intelhex/intelhex")
29789 (synopsis "Python library for Intel HEX files manipulations")
29790 (description
29791 "The Intel HEX file format is widely used in microprocessors and
29792microcontrollers area (embedded systems etc.) as the de facto standard for
29793representation of code to be programmed into microelectronic devices. This
29794package provides an intelhex Python library to read, write, create from
29795scratch and manipulate data from Intel HEX file format. It also includes
29796several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29797converters and more, those based on the library itself.")
29798 (license license:bsd-3)))
29799
29800(define-public python-interlap
29801 (package
29802 (name "python-interlap")
29803 (version "0.2.7")
29804 (source
29805 (origin
29806 (method git-fetch)
29807 (uri (git-reference
29808 (url "https://github.com/brentp/interlap")
29809 (commit (string-append "v" version))))
29810 (file-name (git-file-name name version))
29811 (sha256
29812 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29813 (build-system pyproject-build-system)
29814 (arguments
29815 (list
29816 #:test-backend #~'custom
29817 #:test-flags #~(list "interlap.py")))
29818 (native-inputs (list python-setuptools))
29819 (home-page "https://brentp.github.io/interlap")
29820 (synopsis "Fast, simple interval overlap testing")
29821 (description
29822 "InterLap does fast interval overlap testing with a simple Python data
29823structure.")
29824 (license license:expat)))
29825
29826(define-public python-pykwalify
29827 (package
29828 (name "python-pykwalify")
29829 (version "1.8.0")
29830 (source
29831 (origin
29832 (method git-fetch)
29833 (uri (git-reference
29834 (url "https://github.com/grokzen/pykwalify")
29835 (commit version)))
29836 (file-name (git-file-name name version))
29837 (sha256
29838 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29839 (build-system pyproject-build-system)
29840 (arguments
29841 (list
29842 #:test-flags
29843 ;; XXX: yaml safe_dump() has been removed.
29844 #~(list "--ignore=tests/test_unicode.py"
29845 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29846 (native-inputs
29847 (list python-pytest python-setuptools python-testfixtures))
29848 (propagated-inputs
29849 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29850 (home-page "https://github.com/grokzen/pykwalify")
29851 (synopsis "Python lib/cli for JSON/YAML schema validation")
29852 (description
29853 "This package provides a parser, schema validator, and data binding tool
29854for YAML and JSON.")
29855 (license license:expat)))
29856
29857(define-public python-pykakasi
29858 (package
29859 (name "python-pykakasi")
29860 (version "2.3.0")
29861 (source
29862 (origin
29863 (method url-fetch)
29864 (uri (pypi-uri "pykakasi" version))
29865 (sha256
29866 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29867 (build-system pyproject-build-system)
29868 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29869 (propagated-inputs (list python-deprecated python-importlib-resources
29870 python-jaconv))
29871 (native-inputs (list python-coverage
29872 python-py-cpuinfo
29873 python-pytest
29874 python-pytest-benchmark
29875 python-setuptools
29876 python-setuptools-scm
29877 python-wheel))
29878 (home-page "https://codeberg.org/miurahr/pykakasi")
29879 (synopsis "Kana kanji simple inversion library")
29880 (description
29881 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29882Language Processing} library to transliterate hiragana, katakana and
29883kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29884characters in NFC form.
29885
29886Its algorithms are based on the kakasi library, which is written in C.")
29887 (license license:gpl3+)))
29888
29889(define-public python-dbus
29890 (package
29891 (name "python-dbus")
29892 (version "1.3.2")
29893 (source
29894 (origin
29895 (method url-fetch)
29896 (uri (pypi-uri "dbus-python" version))
29897 (sha256
29898 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29899 (build-system pyproject-build-system)
29900 (arguments
29901 (list
29902 #:tests? #f ;XXX: Tests require setup
29903 #:phases
29904 #~(modify-phases %standard-phases
29905 (add-after 'unpack 'patch-requirements
29906 (lambda _
29907 (substitute* (list "pyproject.toml" "setup.py")
29908 (("'(ninja|patchelf)',?") ""))
29909 (substitute* "setup.cfg"
29910 (("(ninja|patchelf)") "")))))))
29911 (native-inputs
29912 (list pkg-config
29913 meson
29914 ninja/pinned
29915 patchelf
29916 python-meson
29917 python-setuptools
29918 python-tappy))
29919 (inputs
29920 (list dbus glib))
29921 (propagated-inputs
29922 (list python-pygobject))
29923 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29924 (synopsis "Python bindings for libdbus")
29925 (description
29926 "This package provides Python bindings to libdbus, the reference
29927implementation of the D-Bus protocol.")
29928 (license license:expat)))
29929
29930;; Added on 2026-01-05
29931(define-deprecated-package python-dbus-python python-dbus)
29932
29933(define python-dbusmock-patch-paths-phase
29934 #~(lambda* (#:key inputs #:allow-other-keys)
29935 (substitute* "tests/test_api.py"
29936 (("/usr/bin/python3")
29937 (which "python3")))
29938 (substitute* "dbusmock/testcase.py"
29939 (("\"dbus-daemon\"")
29940 (object->string
29941 (search-input-file inputs "/bin/dbus-daemon"))))))
29942
29943(define-public python-dbusmock
29944 (package
29945 (name "python-dbusmock")
29946 (version "0.37.2")
29947 (source
29948 (origin
29949 (method git-fetch)
29950 (uri (git-reference
29951 (url "https://github.com/martinpitt/python-dbusmock")
29952 (commit version)))
29953 (file-name (git-file-name name version))
29954 (sha256
29955 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29956 (build-system pyproject-build-system)
29957 (arguments
29958 (list
29959 #:modules `((guix build pyproject-build-system)
29960 (guix build utils)
29961 (ice-9 match))
29962 #:phases
29963 #~(modify-phases %standard-phases
29964 (add-after 'unpack 'patch-paths
29965 #$python-dbusmock-patch-paths-phase)
29966 (replace 'check
29967 (lambda* (#:key tests? #:allow-other-keys)
29968 (when tests?
29969 (match (primitive-fork)
29970 (0 ;child process
29971 (execlp "pytest" "pytest" "-vv"))
29972 (pytest-pid
29973 (let loop ()
29974 ;; Reap child processes; otherwise, python-dbusmock
29975 ;; would waste time polling for the dbus processes
29976 ;; it spawns to be reaped, in vain.
29977 (match (waitpid WAIT_ANY)
29978 ((pid . status)
29979 (if (= pid pytest-pid)
29980 (unless (zero? status)
29981 (error "`pytest' exited with status"
29982 status))
29983 (loop)))))))))))))
29984 (native-inputs (list python-pytest python-setuptools upower which))
29985 (inputs (list dbus))
29986 (propagated-inputs (list python-dbus python-pygobject))
29987 (home-page "https://github.com/martinpitt/python-dbusmock")
29988 (synopsis "Python library for mock D-Bus objects")
29989 (description
29990 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29991This is useful for writing tests for software which talks to D-Bus services
29992such as upower, systemd, logind, gnome-session or others, and it is hard (or
29993impossible without root privileges) to set the state of the real services to
29994what you expect in your tests.")
29995 (license license:lgpl3+)))
29996
29997(define-public python-dbusmock-for-tests
29998 (package
29999 (inherit python-dbusmock)
30000 (name "python-dbusmock-for-tests")
30001 (version "0.37.2")
30002 (source
30003 (origin
30004 (method git-fetch)
30005 (uri (git-reference
30006 (url "https://github.com/martinpitt/python-dbusmock")
30007 (commit version)))
30008 (file-name (git-file-name name version))
30009 (sha256
30010 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30011 (arguments
30012 (list
30013 #:tests? #f
30014 #:phases
30015 #~(modify-phases %standard-phases
30016 (add-after 'unpack 'patch-paths
30017 #$python-dbusmock-patch-paths-phase))))
30018 (native-inputs (list python-setuptools which))
30019 (properties '((hidden? . #t)))))
30020
30021;; XXX: Deprecated on <2026-01-21>.
30022(define-deprecated/public-alias python-dbusmock-minimal
30023 python-dbusmock-for-tests)
30024
30025(define-public python-jsonplus
30026 (package
30027 (name "python-jsonplus")
30028 (home-page "https://github.com/randomir/jsonplus")
30029 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30030 (revision . "0")))
30031 (version (git-version "0.8.0"
30032 (assoc-ref properties 'revision)
30033 (assoc-ref properties 'commit)))
30034 (source
30035 (origin
30036 (method git-fetch)
30037 (uri (git-reference
30038 (url home-page)
30039 (commit (assoc-ref properties 'commit))))
30040 (file-name (git-file-name name version))
30041 (sha256
30042 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30043 (build-system pyproject-build-system)
30044 (arguments
30045 (list
30046 ;; XXX: Tests require the additional package moneyed.
30047 #:tests? #f
30048 #:phases
30049 #~(modify-phases %standard-phases
30050 (add-after 'unpack 'chdir
30051 (lambda _
30052 (chdir "python"))))))
30053 (native-inputs (list python-setuptools))
30054 (propagated-inputs
30055 (list python-dateutil python-simplejson python-sortedcontainers))
30056 (synopsis "Serialize Python types to/from JSON")
30057 (description
30058 "This package provides functionality to serialize arbitrary data types
30059to and from JSON. Common data types are implemented and it is easy to
30060register custom encoders and decoders.")
30061 (license license:expat)))
30062
30063(define-public python-ioctl-opt
30064 (package
30065 (name "python-ioctl-opt")
30066 (version "1.3")
30067 (source
30068 (origin
30069 (method url-fetch)
30070 (uri (pypi-uri "ioctl-opt" version))
30071 (sha256
30072 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30073 (build-system pyproject-build-system)
30074 (arguments
30075 (list #:tests? #f)) ;no tests
30076 (native-inputs (list python-setuptools))
30077 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30078 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30079 (description
30080 "This package provides functions to compute fnctl.ioctl's opt argument.")
30081 (license license:gpl2+)))
30082
30083(define-public python-anyio
30084 (package
30085 (name "python-anyio")
30086 (version "4.12.1")
30087 (source
30088 (origin
30089 (method url-fetch)
30090 (uri (pypi-uri "anyio" version))
30091 (sha256
30092 (base32
30093 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30094 (patches
30095 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30096 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30097 (build-system pyproject-build-system)
30098 (arguments
30099 (list
30100 ;; tests:
30101 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30102 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30103 #:test-flags
30104 #~(list "-m" "not network"
30105 ;; Tests are shaky with a lot of DNS lookups.
30106 "--ignore=tests/test_sockets.py"
30107 #$@(map (lambda (ls)
30108 (string-append "--deselect=" (string-join ls "::")))
30109 (append
30110 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30111 ;; timeout expired running: <...>
30112 '(("tests/test_pytest_plugin.py"
30113 "test_keyboardinterrupt_during_test"))
30114 (if (target-aarch64?)
30115 ;; Assertions are not equal on ARM.
30116 '(("tests/streams/test_tls.py"
30117 "TestTLSListener"
30118 "test_handshake_fail")
30119 ("tests/test_taskgroups.py"
30120 "test_shielded_cancel_sleep_time")
30121 ("tests/test_to_thread.py"
30122 "test_run_in_custom_limiter")
30123 ("tests/test_to_thread.py"
30124 "TestBlockingPortalProvider"
30125 "test_single_thread"))
30126 '()))))))
30127 (propagated-inputs
30128 (list python-idna
30129 python-sniffio
30130 python-typing-extensions))
30131 (native-inputs
30132 (list python-blockbuster
30133 python-psutil
30134 python-pytest
30135 python-pytest-mock
30136 python-setuptools
30137 python-setuptools-scm
30138 python-trio
30139 python-trustme
30140 python-truststore
30141 python-uvloop))
30142 (home-page "https://anyio.readthedocs.io")
30143 (synopsis "Compatibility layer for multiple asynchronous event loops")
30144 (description
30145 "AnyIO is an asynchronous networking and concurrency library that works
30146on top of either asyncio or trio. It implements trio-like structured
30147concurrency on top of asyncio, and works in harmony with the native SC of trio
30148itself.")
30149 (license license:expat)))
30150
30151(define-public python-argh
30152 (package
30153 (name "python-argh")
30154 (version "0.31.3")
30155 (source
30156 (origin
30157 (method url-fetch)
30158 (uri (pypi-uri "argh" version))
30159 (sha256
30160 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30161 (build-system pyproject-build-system)
30162 (native-inputs (list python-flit-core python-pytest))
30163 (home-page "https://github.com/neithere/argh/")
30164 (synopsis "Argparse wrapper with natural syntax")
30165 (description
30166 "Argh is a small library that provides several layers of abstraction
30167on top of @code{python-argparse}. The layers can be mixed. It is always
30168possible to declare a command with the highest possible (and least flexible)
30169layer and then tune the behaviour with any of the lower layers including the
30170native API of @code{python-argparse}.")
30171 (license license:lgpl3+)))
30172
30173(define-public python-pox
30174 (package
30175 (name "python-pox")
30176 (version "0.3.6")
30177 (source
30178 (origin
30179 (method url-fetch)
30180 (uri (pypi-uri "pox" version))
30181 (sha256
30182 (base32
30183 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30184 (build-system pyproject-build-system)
30185 (arguments
30186 (list
30187 #:phases
30188 #~(modify-phases %standard-phases
30189 (replace 'check
30190 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30191 (when tests?
30192 (mkdir-p "/tmp/guix")
30193 (setenv "SHELL" "bash")
30194 (setenv "USERNAME" "guix")
30195 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30196 (invoke "python" "./pox/tests/__main__.py")))))))
30197 (native-inputs
30198 (list python-setuptools
30199 which)) ;pox/tests/test_shutils.py
30200 (home-page "https://pypi.org/project/pox/")
30201 (synopsis "Python utilities for file system exploration and automated builds")
30202 (description
30203 "Pox provides a collection of utilities for navigating and manipulating
30204file systems. This module is designed to facilitate some of the low-level
30205operating system interactions that are useful when exploring a file system on a
30206remote host. Pox provides Python equivalents of several shell commands such
30207as @command{which} and @command{find}. These commands allow automated
30208discovery of what has been installed on an operating system, and where the
30209essential tools are located.")
30210 (license license:bsd-3)))
30211
30212(define-public python-flit
30213 (package
30214 (name "python-flit")
30215 (version "3.12.0") ;same as python-flit-core
30216 (source
30217 (origin
30218 (method url-fetch)
30219 (uri (pypi-uri "flit" version))
30220 (sha256
30221 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30222 (build-system pyproject-build-system)
30223 (arguments
30224 (list
30225 #:test-flags
30226 ;; These tests fail when FLIT_NO_NETWORK is set
30227 '(list "-k" "not test_invalid_classifier \
30228and not test_install_requires \
30229and not test_install_requires_extra \
30230and not test_validate_classifiers_private")
30231 #:phases
30232 #~(modify-phases %standard-phases
30233 (add-after 'unpack 'relax-pip-requirement
30234 ;; python -m pip is available by default, no need to
30235 ;; propagate pip.
30236 (lambda _
30237 (substitute* "pyproject.toml"
30238 (("\"pip\",")
30239 ""))))
30240 (add-before 'check 'pre-check
30241 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30242 (when tests?
30243 (setenv "HOME" "/tmp")
30244 (setenv "FLIT_NO_NETWORK" "1")))))))
30245 (propagated-inputs
30246 (list python-tomli-w
30247 python-flit-core
30248 python-docutils
30249 python-requests))
30250 (native-inputs
30251 (list python-responses
30252 python-pytest
30253 python-testpath))
30254 (home-page "https://flit.readthedocs.io/")
30255 (synopsis "Simple packaging tool for simple packages")
30256 (description "Flit is a simple way to put Python packages and modules on
30257PyPI. Flit packages a single importable module or package at a time, using
30258the import name as the name on PyPI. All subpackages and data files within a
30259package are included automatically.")
30260 (license license:bsd-3)))
30261
30262(define-public python-fastentrypoints
30263 (package
30264 (name "python-fastentrypoints")
30265 (home-page "https://github.com/ninjaaron/fast-entry_points")
30266 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30267 (revision . "0")))
30268 (version (git-version "0.12"
30269 (assoc-ref properties 'revision)
30270 (assoc-ref properties 'commit)))
30271 (source
30272 (origin
30273 (method git-fetch)
30274 (uri (git-reference
30275 (url home-page)
30276 (commit (assoc-ref properties 'commit))))
30277 (file-name (git-file-name name version))
30278 (sha256
30279 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30280 (build-system pyproject-build-system)
30281 (arguments
30282 (list
30283 ;; XXX: Testing is non-standard and hardly configurable.
30284 #:tests? #f
30285 #:test-backend #~'custom
30286 #:test-flags #~(list "test/runtest.py")))
30287 (native-inputs (list python-setuptools))
30288 (synopsis "Makes entry_points specified in setup.py load more quickly")
30289 (description
30290 "Using entry_points in your setup.py makes scripts that start really
30291slowly because it imports pkg_resources. This package allows such setup
30292scripts to load entry points more quickly.")
30293 (license license:bsd-3)))
30294
30295(define-public python-funcparserlib
30296 (package
30297 (name "python-funcparserlib")
30298 (version "1.0.1")
30299 (source
30300 (origin
30301 ;; Source tarball on PyPi lacks tests.
30302 (method git-fetch)
30303 (uri (git-reference
30304 (url "https://github.com/vlasovskikh/funcparserlib")
30305 (commit version)))
30306 (file-name (git-file-name name version))
30307 (sha256
30308 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30309 (build-system pyproject-build-system)
30310 (arguments
30311 '(#:phases
30312 (modify-phases %standard-phases
30313 (replace 'check
30314 (lambda* (#:key tests? #:allow-other-keys)
30315 (when tests?
30316 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30317 ;; ModuleNotFoundError: No module named 'poetry'
30318 (native-inputs (list python-poetry-core python-six))
30319 (home-page "https://github.com/vlasovskikh/funcparserlib")
30320 (synopsis
30321 "Recursive descent parsing library based on functional combinators")
30322 (description
30323 "This package is a recursive descent parsing library for Python based on
30324functional combinators. Parser combinators are just higher-order functions
30325that take parsers as their arguments and return them as result values.")
30326 (license license:expat)))
30327
30328(define-public python-cson
30329 (package
30330 (name "python-cson")
30331 (version "0.8")
30332 (source
30333 (origin
30334 (method git-fetch)
30335 (uri (git-reference
30336 (url "https://github.com/avakar/pycson")
30337 (commit version)))
30338 (file-name (git-file-name name version))
30339 (sha256
30340 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30341 (build-system pyproject-build-system)
30342 (native-inputs (list python-pytest python-setuptools python-wheel))
30343 (propagated-inputs (list python-speg))
30344 (home-page "https://github.com/avakar/pycson")
30345 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30346 (description
30347 "This package is a parser for Coffeescript Object Notation (CSON).")
30348 (license license:expat)))
30349
30350(define-public python-aionotify
30351 (package
30352 (name "python-aionotify")
30353 (version "0.3.1")
30354 (source
30355 (origin
30356 ;; Source tarball on PyPi lacks tests
30357 (method git-fetch)
30358 (uri (git-reference
30359 (url "https://github.com/rbarrois/aionotify")
30360 (commit version)))
30361 (file-name (git-file-name name version))
30362 (sha256
30363 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30364 (build-system pyproject-build-system)
30365 (native-inputs
30366 (list python-pytest
30367 python-setuptools
30368 python-wheel))
30369 (home-page "https://github.com/rbarrois/aionotify")
30370 (synopsis "inotify library for Python")
30371 (description
30372 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30373 (license license:bsd-3)))
30374
30375(define-public python-forbiddenfruit
30376 (package
30377 (name "python-forbiddenfruit")
30378 (version "0.1.4")
30379 (source
30380 (origin
30381 (method git-fetch)
30382 (uri (git-reference
30383 (url "https://github.com/clarete/forbiddenfruit")
30384 (commit version)))
30385 (file-name (git-file-name name version))
30386 (sha256
30387 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30388 (build-system pyproject-build-system)
30389 (arguments
30390 (list
30391 #:phases
30392 #~(modify-phases %standard-phases
30393 (replace 'check
30394 (lambda* (#:key tests? #:allow-other-keys)
30395 (when tests?
30396 (invoke "make" "prepare" "SKIP_DEPS=1")
30397 (invoke "nosetests")))))))
30398 (native-inputs (list python-pynose python-setuptools))
30399 (home-page "https://github.com/clarete/forbiddenfruit")
30400 (synopsis "Patch python built-in objects")
30401 (description "This project allows Python code to extend built-in types.")
30402 (license (list license:gpl3+ license:expat))))
30403
30404(define-public python-k5test
30405 (package
30406 (name "python-k5test")
30407 (version "0.10.4")
30408 (source
30409 (origin
30410 (method url-fetch)
30411 (uri (pypi-uri "k5test" version))
30412 (sha256
30413 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30414 (build-system pyproject-build-system)
30415 (arguments
30416 (list #:tests? #f)) ;no tests
30417 (native-inputs
30418 (list python-setuptools))
30419 (inputs
30420 (list mit-krb5))
30421 (home-page "https://github.com/pythongssapi/k5test")
30422 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30423 (description
30424 "@code{k5test} is a library for setting up self-contained Kerberos 5
30425environments, and running Python unit tests inside those environments. It is
30426based on the file of the same name found alongside the MIT Kerberos 5 unit
30427tests.")
30428 (license license:isc)))
30429
30430(define-public python-gssapi
30431 (package
30432 (name "python-gssapi")
30433 (version "1.10.0")
30434 (source
30435 (origin
30436 (method url-fetch)
30437 (uri (pypi-uri "gssapi" version))
30438 (sha256
30439 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30440 (build-system pyproject-build-system)
30441 (arguments
30442 (list #:test-flags #~(list "--pyargs" "gssapi")))
30443 (native-inputs
30444 (list python-cython
30445 python-k5test
30446 python-parameterized
30447 python-pytest
30448 python-setuptools))
30449 (inputs
30450 (list mit-krb5))
30451 (propagated-inputs
30452 (list python-decorator))
30453 (home-page "https://github.com/pythongssapi/python-gssapi")
30454 (synopsis "Python GSSAPI Wrapper")
30455 (description
30456 "Python-GSSAPI provides both low-level and high level wrappers around the
30457GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30458also be usable with other GSSAPI mechanisms.")
30459 (license license:isc)))
30460
30461(define-public python-check-manifest
30462 (package
30463 (name "python-check-manifest")
30464 (version "0.51")
30465 (source
30466 (origin
30467 (method url-fetch)
30468 (uri (pypi-uri "check_manifest" version))
30469 (sha256
30470 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30471 (build-system pyproject-build-system)
30472 (arguments
30473 (list
30474 ;; tests: 127 passed, 20 skipped, 2 deselected
30475 #:test-flags
30476 ;; This tests requires setting up a venv which does not work
30477 ;; properly in the build environment.
30478 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30479 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30480 (native-inputs
30481 (list git-minimal/pinned python-pytest))
30482 (propagated-inputs
30483 (list python-pypa-build python-setuptools))
30484 (home-page "https://github.com/mgedmin/check-manifest")
30485 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30486 (description "Python package can include a MANIFEST.in file to help with
30487sending package files to the Python Package Index. This package checks that
30488file to ensure it completely and accurately describes your project.")
30489 (license license:expat)))
30490
30491(define-public python-android-stringslib
30492 (package
30493 (name "python-android-stringslib")
30494 (version "0.1.2")
30495 (source
30496 (origin
30497 (method git-fetch)
30498 (uri (git-reference
30499 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30500 (commit (string-append "v" version))))
30501 (file-name (git-file-name name version))
30502 (sha256
30503 (base32
30504 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30505 (build-system pyproject-build-system)
30506 (arguments (list #:tests? #f)) ; No tests.
30507 (native-inputs (list python-setuptools))
30508 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30509 (synopsis "Android strings.xml support")
30510 (description
30511 "Android Strings Lib provides support for android's strings.xml files.
30512These files are used to translate strings in android apps.")
30513 (license license:expat)))
30514
30515(define-public offlate
30516 (package
30517 (name "offlate")
30518 (version "0.6.1")
30519 (source
30520 (origin
30521 (method git-fetch)
30522 (uri (git-reference
30523 (url "https://framagit.org/tyreunom/offlate")
30524 (commit version)))
30525 (file-name (git-file-name name version))
30526 (sha256
30527 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
30528 (build-system pyproject-build-system)
30529 (arguments
30530 (list
30531 #:tests? #f ; No tests.
30532 #:phases
30533 #~(modify-phases %standard-phases
30534 (add-before 'build 'generate-fonts
30535 (lambda _
30536 (invoke "make" "fonts")))
30537 (add-before 'build 'generate-translations
30538 (lambda _
30539 (invoke "make" "update-langs"))))))
30540 (propagated-inputs
30541 (list python-android-stringslib
30542 python-dateutil
30543 python-gitlab
30544 python-lxml
30545 python-polib
30546 python-pycountry
30547 python-pyenchant
30548 python-pygit2
30549 python-pygithub
30550 python-pyqt
30551 python-requests
30552 python-ruamel.yaml
30553 python-translate-toolkit-for-offlate
30554 python-translation-finder
30555 python-watchdog))
30556 (native-inputs (list qttools-5 fontforge python-setuptools))
30557 (home-page "https://framagit.org/tyreunom/offlate")
30558 (synopsis "Offline translation interface for online translation tools")
30559 (description
30560 "Offlate offers a unified interface for different translation file
30561formats, as well as many different online translation platforms. You can use
30562it to get work from online platforms, specialized such as the Translation
30563Project, or not such a gitlab instance when your upstream doesn't use any
30564dedicated platform. The tool proposes a unified interface for any format and
30565an upload option to send your work back to the platform.")
30566 (license license:gpl3+)))
30567
30568(define-public python-pypng
30569 (package
30570 (name "python-pypng")
30571 (version "0.20220715.0")
30572 (source
30573 (origin
30574 (method url-fetch)
30575 (uri (pypi-uri "pypng" version))
30576 (sha256
30577 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30578 (build-system pyproject-build-system)
30579 (arguments
30580 (list
30581 #:phases
30582 '(modify-phases %standard-phases
30583 (add-before 'check 'pre-check
30584 (lambda _
30585 (setenv "PYTHONPATH"
30586 (string-append (getcwd) "/code:"
30587 (getenv "GUIX_PYTHONPATH"))))))))
30588 (native-inputs (list python-pytest python-setuptools python-wheel))
30589 (home-page "https://github.com/drj11/pypng")
30590 (synopsis "Pure Python PNG image encoder/decoder")
30591 (description
30592 "The PyPNG module implements support for PNG images. It reads and writes
30593PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30594pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30595LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30596images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30597A number of optional chunks can be specified (when writing) and
30598understood (when reading): tRNS, bKGD, gAMA.
30599
30600PyPNG is not a high level toolkit for image processing (like PIL) and does not
30601aim at being a replacement or competitor. Its strength lies in fine-grained
30602extensive support of PNG features. It can also read and write Netpbm PAM
30603files, with a focus on its use as an intermediate format for implementing
30604custom PNG processing.")
30605 (license license:expat)))
30606
30607(define-public python-fuzzywuzzy
30608 (package
30609 (name "python-fuzzywuzzy")
30610 (version "0.18.0")
30611 (source
30612 (origin
30613 (method git-fetch)
30614 (uri (git-reference
30615 (url "https://github.com/seatgeek/fuzzywuzzy")
30616 (commit version)))
30617 (file-name (git-file-name name version))
30618 (sha256
30619 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30620 (build-system pyproject-build-system)
30621 (arguments
30622 (list
30623 #:test-flags
30624 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30625 (native-inputs
30626 (list python-hypothesis
30627 python-pycodestyle
30628 python-pytest
30629 python-setuptools))
30630 (propagated-inputs (list python-levenshtein))
30631 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30632 (synopsis "Fuzzy string matching in Python")
30633 (description
30634 "Approximate string matching using @emph{Levenshtein Distance} to
30635calculate the differences between sequences.")
30636 (license license:gpl2)))
30637
30638(define-public python-block-tracing
30639 (package
30640 (name "python-block-tracing")
30641 (version "1.0.1")
30642 (source
30643 (origin
30644 (method url-fetch)
30645 (uri (pypi-uri "block_tracing" version))
30646 (sha256
30647 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30648 (build-system pyproject-build-system)
30649 (arguments (list #:tests? #f)) ; No tests.
30650 (native-inputs (list python-setuptools))
30651 (home-page "https://github.com/rianhunter/block_tracing")
30652 (synopsis "Protect process memory")
30653 (description
30654 "@code{block_tracing} is a tiny Python library that can be used to
30655prevent debuggers and other applications from inspecting the memory within
30656your process.")
30657 (license license:expat)))
30658
30659(define-public python-json-e
30660 (package
30661 (name "python-json-e")
30662 (version "4.8.0")
30663 (source
30664 (origin
30665 (method git-fetch) ; no tests in PyPI release
30666 (uri (git-reference
30667 (url "https://github.com/json-e/json-e")
30668 (commit (string-append "v" version))))
30669 (file-name (git-file-name name version))
30670 (sha256
30671 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30672 (build-system pyproject-build-system)
30673 (arguments
30674 (list
30675 #:phases
30676 #~(modify-phases %standard-phases
30677 ;; Git repository provides implementations for JavaScript, Golang,
30678 ;; Python and Rust, pick "py".
30679 (add-before 'build 'chdir-to-py
30680 (lambda _
30681 (chdir "py"))))))
30682 (native-inputs
30683 (list python-freezegun
30684 python-pytest
30685 python-pyyaml
30686 python-setuptools
30687 python-wheel))
30688 (home-page "https://json-e.js.org")
30689 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30690 (description
30691 "This package provides a data-structure parameterization system written
30692for embedding context in JSON objects.")
30693 (license license:mpl2.0)))
30694
30695(define-public python-json-logger
30696 (package
30697 (name "python-json-logger")
30698 (version "4.0.0")
30699 (source
30700 (origin
30701 (method git-fetch)
30702 (uri (git-reference
30703 (url "https://github.com/nhairs/python-json-logger")
30704 (commit (string-append "v" version))))
30705 (file-name (git-file-name name version))
30706 (sha256
30707 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30708 (build-system pyproject-build-system)
30709 (native-inputs
30710 (list python-freezegun
30711 python-mike
30712 python-msgspec
30713 python-orjson
30714 python-pypa-build
30715 python-pytest
30716 python-setuptools
30717 python-tzdata
30718 python-validate-pyproject
30719 python-typing-extensions))
30720 (home-page "https://github.com/nhairs/python-json-logger")
30721 (synopsis "JSON log formatter in Python")
30722 (description "This library allows standard Python logging to output log data
30723as JSON objects. With JSON we can make our logs more readable by machines and
30724we can stop writing custom parsers for syslog-type records.")
30725 (license license:bsd-3)))
30726
30727(define-public python-daiquiri
30728 (package
30729 (name "python-daiquiri")
30730 (version "3.0.1")
30731 (source
30732 (origin
30733 (method git-fetch)
30734 (uri (git-reference
30735 (url "https://github.com/jd/daiquiri")
30736 (commit version)))
30737 (file-name (git-file-name name version))
30738 (sha256
30739 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30740 (build-system pyproject-build-system)
30741 (propagated-inputs (list python-json-logger))
30742 (native-inputs (list python-mock python-pytest python-setuptools
30743 python-setuptools-scm))
30744 (home-page "https://github.com/jd/daiquiri")
30745 (synopsis "Library to configure Python logging easily")
30746 (description
30747 "The daiquiri library provides an easy way to configure logging in
30748Python. It also provides some custom formatters and handlers.")
30749 (license license:asl2.0)))
30750
30751(define-public python-pifpaf
30752 (package
30753 (name "python-pifpaf")
30754 (version "3.4.0")
30755 (source
30756 (origin
30757 (method git-fetch)
30758 (uri (git-reference
30759 (url "https://github.com/jd/pifpaf")
30760 (commit version)))
30761 (file-name (git-file-name name version))
30762 (sha256
30763 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30764 (build-system pyproject-build-system)
30765 (arguments
30766 (list
30767 #:phases
30768 #~(modify-phases %standard-phases
30769 (add-after 'install 'install-drivers
30770 (lambda* (#:key inputs outputs #:allow-other-keys)
30771 (let ((site (site-packages inputs outputs)))
30772 (copy-recursively "pifpaf/drivers"
30773 (string-append site "/pifpaf/drivers/"))))))))
30774 (propagated-inputs
30775 (list python-click
30776 python-daiquiri
30777 python-fixtures
30778 python-jinja2
30779 python-pbr
30780 python-psutil
30781 python-xattr))
30782 (native-inputs
30783 (list python-mock
30784 python-stestr
30785 python-packaging
30786 python-requests
30787 python-testrepository
30788 python-testtools
30789 python-setuptools))
30790 (home-page "https://github.com/jd/pifpaf")
30791 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30792 (description
30793 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30794stops daemons for a quick throw-away usage. This is typically useful when
30795needing these daemons to run integration testing. It originally evolved from
30796its precursor @code{overtest}.")
30797 (license license:asl2.0)))
30798
30799(define-public python-pytest-check-links
30800 (package
30801 (name "python-pytest-check-links")
30802 (version "0.10.1")
30803 (source
30804 (origin
30805 (method url-fetch)
30806 (uri (pypi-uri "pytest_check_links" version))
30807 (sha256
30808 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30809 (build-system pyproject-build-system)
30810 (arguments
30811 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30812 (native-inputs
30813 (list python-hatchling))
30814 (propagated-inputs
30815 (list python-docutils
30816 python-html5lib
30817 python-nbconvert
30818 python-nbformat
30819 python-requests))
30820 (home-page "https://github.com/jupyterlab/pytest-check-links")
30821 (synopsis "Check links in files")
30822 (description "This package provides a pytest plugin that checks URLs for
30823HTML-containing files.")
30824 (license license:bsd-3)))
30825
30826(define-public python-json5
30827 (package
30828 (name "python-json5")
30829 (version "0.9.25")
30830 (source
30831 (origin
30832 ;; sample.json5 is missing from PyPi source tarball
30833 (method git-fetch)
30834 (uri (git-reference
30835 (url "https://github.com/dpranke/pyjson5")
30836 (commit (string-append "v" version))))
30837 (file-name (git-file-name name version))
30838 (sha256
30839 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30840 (build-system pyproject-build-system)
30841 (native-inputs (list python-pytest python-setuptools python-wheel))
30842 (home-page "https://github.com/dpranke/pyjson5")
30843 (synopsis "Python implementation of the JSON5 data format")
30844 (description
30845 "JSON5 extends the JSON data interchange format to make it slightly more
30846usable as a configuration language. This Python package implements parsing and
30847dumping of JSON5 data structures.")
30848 (license license:asl2.0)))
30849
30850(define-public python-farama-notifications
30851 (package
30852 (name "python-farama-notifications")
30853 (version "0.0.4")
30854 (source
30855 ;; The version on pypi does not include tests.
30856 (origin
30857 (method git-fetch)
30858 (uri (git-reference
30859 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30860 (commit version)))
30861 (file-name (git-file-name name version))
30862 (sha256
30863 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30864 (build-system pyproject-build-system)
30865 (arguments
30866 (list
30867 #:phases
30868 '(modify-phases %standard-phases
30869 (replace 'check
30870 (lambda* (#:key tests? #:allow-other-keys)
30871 (when tests?
30872 (invoke "python3" "tests/ci-test.py")))))))
30873 (native-inputs (list python-pytest python-setuptools python-wheel))
30874 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30875 (synopsis "Notifications for all Farama Foundation maintained libraries")
30876 (description
30877 "This package allows for providing notifications for all Farama
30878Foundation maintained libraries.")
30879 (license license:expat)))
30880
30881(define-public python-frontmatter
30882 (package
30883 (name "python-frontmatter")
30884 (version "1.3.0")
30885 (source
30886 (origin
30887 (method git-fetch)
30888 (uri (git-reference
30889 (url "https://github.com/eyeseast/python-frontmatter")
30890 (commit (string-append "v" version))))
30891 (file-name (git-file-name name version))
30892 (sha256
30893 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
30894 (build-system pyproject-build-system)
30895 (arguments
30896 (list
30897 #:build-backend "setuptools.build_meta")) ;requires uv_build
30898 (native-inputs
30899 (list python-hatchling
30900 python-pyaml
30901 python-pytest
30902 python-setuptools
30903 python-toml
30904 python-types-pyyaml
30905 python-types-toml))
30906 (propagated-inputs (list python-pyyaml))
30907 (home-page "https://github.com/eyeseast/python-frontmatter")
30908 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
30909 (description
30910 "This package offers a useful way to add arbitrary, structured metadata
30911to text documents, regardless of type. This is a small package to load and
30912parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
30913 (license license:expat)))
30914
30915(define-public python-frozendict
30916 (package
30917 (name "python-frozendict")
30918 (version "2.4.6")
30919 (source
30920 (origin
30921 (method url-fetch)
30922 (uri (pypi-uri "frozendict" version))
30923 (sha256
30924 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30925 (build-system pyproject-build-system)
30926 (native-inputs
30927 (list python-pytest
30928 python-setuptools
30929 python-wheel))
30930 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30931 (synopsis "Simple immutable mapping for Python")
30932 (description
30933 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30934implements the complete mapping interface. It can be used as a drop-in
30935replacement for dictionaries where immutability is desired.")
30936 (license license:expat)))
30937
30938(define-public python-py-cpuinfo
30939 (package
30940 (name "python-py-cpuinfo")
30941 (version "9.0.0")
30942 (source
30943 (origin
30944 (method git-fetch)
30945 (uri (git-reference
30946 (url "https://github.com/workhorsy/py-cpuinfo")
30947 (commit (string-append "v" version))))
30948 (file-name (git-file-name name version))
30949 (sha256
30950 (base32
30951 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30952 (build-system pyproject-build-system)
30953 (arguments
30954 (list #:test-backend #~'custom
30955 #:test-flags #~(list "test_suite.py")))
30956 (native-inputs
30957 (list python-setuptools))
30958 (home-page "https://github.com/workhorsy/py-cpuinfo")
30959 (synopsis "Get CPU info with Python")
30960 (description
30961 "This Python module returns the CPU info by using the best sources of
30962information for your operating system.")
30963 (license license:expat)))
30964
30965(define-public python-canonicaljson
30966 (package
30967 (name "python-canonicaljson")
30968 (version "2.0.0")
30969 (source
30970 (origin
30971 (method url-fetch)
30972 (uri (pypi-uri "canonicaljson" version))
30973 (sha256
30974 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30975 (build-system pyproject-build-system)
30976 (arguments
30977 (list #:test-backend #~'unittest))
30978 (native-inputs
30979 (list python-setuptools))
30980 (home-page "https://github.com/matrix-org/python-canonicaljson")
30981 (synopsis "Canonical JSON")
30982 (description
30983 "Deterministically encode JSON.
30984
30985@itemize
30986@item Encodes objects and arrays as RFC 7159 JSON.
30987@item Sorts object keys so that you get the same result each time.
30988@item Has no insignificant whitespace to make the output as small as possible.
30989@item Escapes only the characters that must be escaped, U+0000 to
30990 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30991@item Uses the shortest escape sequence for each escaped character.
30992@item Encodes the JSON as UTF-8.
30993@item Can encode frozendict immutable dictionaries.
30994@end itemize")
30995 (license license:asl2.0)))
30996
30997(define-public python-signedjson
30998 (package
30999 (name "python-signedjson")
31000 (version "1.1.4")
31001 (source
31002 (origin
31003 (method git-fetch)
31004 (uri (git-reference
31005 (url "https://github.com/matrix-org/python-signedjson")
31006 (commit (string-append "v" version))))
31007 (file-name (git-file-name name version))
31008 (sha256
31009 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31010 (build-system pyproject-build-system)
31011 (propagated-inputs
31012 (list python-canonicaljson
31013 python-pynacl
31014 python-typing-extensions
31015 python-unpaddedbase64))
31016 (native-inputs
31017 (list python-pytest python-setuptools-scm python-setuptools))
31018 (home-page "https://github.com/matrix-org/python-signedjson")
31019 (synopsis "Sign JSON objects with ED25519 signatures")
31020 (description
31021 "Sign JSON objects with ED25519 signatures.
31022
31023@itemize
31024@item More than one entity can sign the same object.
31025@item Each entity can sign the object with more than one key making it easier to
31026rotate keys
31027@item ED25519 can be replaced with a different algorithm.
31028@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31029key.
31030@end itemize")
31031 (license license:asl2.0)))
31032
31033(define-public python-daemonize
31034 (package
31035 (name "python-daemonize")
31036 (version "2.5.0")
31037 (source
31038 (origin
31039 (method git-fetch)
31040 (uri (git-reference
31041 (url "https://github.com/thesharp/daemonize")
31042 (commit (string-append "v" version))))
31043 (file-name (git-file-name name version))
31044 (sha256
31045 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31046 (build-system pyproject-build-system)
31047 (arguments
31048 (list
31049 #:test-backend #~'custom
31050 #:test-flags #~(list "tests/test.py")
31051 #:phases
31052 #~(modify-phases %standard-phases
31053 (add-before 'check 'fix-tests
31054 (lambda _
31055 ;; XXX: nobody has group nogroup on Guix.
31056 (substitute* "tests/test.py"
31057 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31058 (number->string (passwd:gid (getpw "nobody"))))))))))
31059 (native-inputs (list coreutils-minimal procps python-setuptools))
31060 (home-page "https://github.com/thesharp/daemonize")
31061 (synopsis "Library for writing system daemons in Python")
31062 (description
31063 "Daemonize is a library for writing system daemons in Python.")
31064 (license license:expat)))
31065
31066(define-public python-pymacaroons
31067 (package
31068 (name "python-pymacaroons")
31069 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31070 (revision . "0")))
31071 (version (git-version "0.13.0"
31072 (assoc-ref properties 'revision)
31073 (assoc-ref properties 'commit)))
31074 (source
31075 (origin
31076 (method git-fetch)
31077 (uri (git-reference
31078 (url "https://github.com/ecordell/pymacaroons")
31079 (commit (assoc-ref properties 'commit))))
31080 (file-name (git-file-name name version))
31081 (sha256
31082 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31083 (build-system pyproject-build-system)
31084 (arguments
31085 (list
31086 #:test-flags
31087 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31088 ;; No module named 'hypothesis.specifiers'
31089 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31090 (native-inputs
31091 (list python-hypothesis
31092 python-mock
31093 python-pytest
31094 python-setuptools))
31095 (propagated-inputs (list python-pynacl))
31096 (home-page "https://github.com/ecordell/pymacaroons")
31097 (synopsis "Python Macaroon Library")
31098 (description
31099 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31100tokens, macaroons embed caveats that define specific authorization
31101requirements for the target service, the service that issued the root macaroon
31102and which is capable of verifying the integrity of macaroons it receives.
31103
31104Macaroons allow for delegation and attenuation of authorization. They are
31105simple and fast to verify, and decouple authorization policy from the
31106enforcement of that policy.")
31107 (license license:expat)))
31108
31109(define-public python-ldap3
31110 (package
31111 (name "python-ldap3")
31112 (version "2.9.1")
31113 (home-page "https://github.com/cannatag/ldap3")
31114 (source
31115 (origin
31116 (method git-fetch)
31117 (uri (git-reference (url home-page)
31118 (commit (string-append "v" version))))
31119 (file-name (git-file-name name version))
31120 (sha256
31121 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31122 (build-system pyproject-build-system)
31123 (arguments
31124 (list
31125 #:tests? #f ;TODO: Tests need a real LDAP server to run
31126 #:test-backend #~'nose))
31127 (native-inputs
31128 (list python-pynose python-setuptools))
31129 (propagated-inputs
31130 (list python-gssapi python-pyasn1))
31131 (synopsis "Python LDAP client")
31132 (description
31133 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31134library.")
31135 (license license:lgpl3+)))
31136
31137(define-public python-boltons
31138 (package
31139 (name "python-boltons")
31140 (version "25.0.0")
31141 (source
31142 (origin
31143 (method git-fetch)
31144 (uri (git-reference
31145 (url "https://github.com/mahmoud/boltons")
31146 (commit version)))
31147 (file-name (git-file-name name version))
31148 (sha256
31149 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31150 (build-system pyproject-build-system)
31151 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31152 (home-page "https://github.com/mahmoud/boltons")
31153 (synopsis "Extensions to the Python standard library")
31154 (description
31155 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31156as — and yet conspicuously missing from — the standard library, including:
31157
31158@itemize
31159@item Atomic file saving, bolted on with fileutils
31160@item A highly-optimized OrderedMultiDict, in dictutils
31161@item Two types of PriorityQueue, in queueutils
31162@item Chunked and windowed iteration, in iterutils
31163@item Recursive data structure iteration and merging, with iterutils.remap
31164@item Exponential backoff functionality, including jitter, through
31165iterutils.backoff
31166@item A full-featured TracebackInfo type, for representing stack traces, in
31167tbutils
31168@end itemize")
31169 (license license:bsd-3)))
31170
31171(define-public python-eliot
31172 (package
31173 (name "python-eliot")
31174 (version "1.17.5")
31175 (source
31176 (origin
31177 (method url-fetch)
31178 (uri (pypi-uri "eliot" version))
31179 (sha256
31180 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31181 (build-system pyproject-build-system)
31182 (arguments
31183 (list
31184 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31185 ;; Two tests fail with error: TypeError: Unsupported type.
31186 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31187 #:phases
31188 #~(modify-phases %standard-phases
31189 (add-after 'unpack 'remove-journald-support
31190 (lambda _
31191 (for-each delete-file
31192 '("eliot/tests/test_journald.py"
31193 "eliot/journald.py")))))))
31194 (native-inputs
31195 (list python-pytest
31196 python-setuptools
31197 python-testtools))
31198 (propagated-inputs
31199 (list python-boltons
31200 python-orjson
31201 python-pyrsistent
31202 python-zope-interface))
31203 (home-page "https://github.com/itamarst/eliot/")
31204 (synopsis "Eliot: the logging system that tells you why it happened")
31205 (description
31206 "@dfn{eliot} is a Python logging system that outputs causal chains of
31207actions: actions can spawn other actions, and eventually they either succeed
31208or fail. The resulting logs tell you the story of what your software did: what
31209happened, and what caused it.")
31210 (license license:asl2.0)))
31211
31212(define-public python-pem
31213 (package
31214 (name "python-pem")
31215 (version "23.1.0")
31216 (source
31217 (origin
31218 (method git-fetch)
31219 (uri (git-reference
31220 (url "https://github.com/hynek/pem")
31221 (commit version)))
31222 (file-name (git-file-name name version))
31223 (sha256
31224 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31225 (build-system pyproject-build-system)
31226 (native-inputs
31227 (list nss-certs-for-test
31228 python-certifi
31229 python-hatch-fancy-pypi-readme
31230 python-hatch-vcs
31231 python-hatchling
31232 python-pretend
31233 python-pyopenssl
31234 python-pytest
31235 python-twisted))
31236 (home-page "https://pem.readthedocs.io/")
31237 (synopsis "Easy PEM file parsing in Python")
31238 (description
31239 "This package provides a Python module for parsing and splitting PEM files.")
31240 (license license:expat)))
31241
31242(define-public python-pysaml2
31243 (package
31244 (name "python-pysaml2")
31245 (version "7.5.4")
31246 (source
31247 (origin
31248 (method git-fetch)
31249 (uri (git-reference
31250 (url "https://github.com/IdentityPython/pysaml2")
31251 (commit (string-append "v" version))))
31252 (file-name (git-file-name name version))
31253 (sha256
31254 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31255 (build-system pyproject-build-system)
31256 (arguments
31257 (list
31258 #:test-flags
31259 #~(list "-k"
31260 (string-join
31261 ;; XXX: encryption failures
31262 (list "not test_encrypted_response_6"
31263 "test_validate_cert_chains"
31264 "test_validate_with_root_cert"
31265 ;; XXX: xml parsing error
31266 "test_namespace_processing") " and not "))
31267 #:phases
31268 #~(modify-phases %standard-phases
31269 (add-after 'unpack 'relax-requirements
31270 (lambda _
31271 (substitute* "pyproject.toml"
31272 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31273 (format #f "~s" dep))))))))
31274 (native-inputs (list python-poetry-core python-pytest))
31275 (propagated-inputs
31276 (list python-cryptography
31277 python-dateutil
31278 python-defusedxml
31279 python-pymongo
31280 python-pyopenssl
31281 python-responses
31282 python-requests
31283 python-xmlschema
31284 python-xmlsec))
31285 (home-page "https://idpy.org")
31286 (synopsis "Python implementation of SAML Version 2 Standard")
31287 (description
31288 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31289It contains all necessary pieces for building a SAML2 service provider or
31290an identity provider. The distribution contains examples of both.
31291
31292This package was originally written to work in a WSGI environment, but
31293there are extensions that allow you to use it with other frameworks.")
31294 (license license:asl2.0)))
31295
31296;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31297;; This PyPI package is no longer actively maintained, but the underlying
31298;; library can be vendored.
31299;;
31300;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31301;; pyproject.toml) and can't be used as a common input, do not update this
31302;; package.
31303(define-public python-click-plugins
31304 (package
31305 (name "python-click-plugins")
31306 (version "1.1.1.2")
31307 (source
31308 (origin
31309 (method git-fetch)
31310 (uri (git-reference
31311 (url "https://github.com/click-contrib/click-plugins")
31312 (commit version)))
31313 (file-name (git-file-name name version))
31314 (sha256
31315 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31316 (build-system pyproject-build-system)
31317 (arguments
31318 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31319 (native-inputs
31320 (list python-setuptools))
31321 (propagated-inputs
31322 (list python-click))
31323 (synopsis "Extension for Click to register external CLI commands")
31324 (description
31325 "This package provides n extension module for Click to register external
31326CLI commands via setuptools entry-points.")
31327 (home-page "https://github.com/click-contrib/click-plugins")
31328 (license license:bsd-3)))
31329
31330;; XXX: Deprecated on <2026-03-23>.
31331(define-deprecated-package python-click-plugins-1 python-click-plugins)
31332
31333(define-public python-diceware
31334 (package
31335 (name "python-diceware")
31336 (version "1.0.1")
31337 (source
31338 (origin
31339 (method url-fetch)
31340 (uri (pypi-uri "diceware" version))
31341 (sha256
31342 (base32
31343 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31344 (build-system pyproject-build-system)
31345 (native-inputs
31346 (list python-pytest python-setuptools python-wheel))
31347 (home-page "https://github.com/ulif/diceware/")
31348 (synopsis "Generates memorable passphrases")
31349 (description "This package generates passphrases by concatenating words
31350randomly picked from wordlists. It supports several sources of
31351randomness (including real life dice) and different wordlists (including
31352cryptographically signed ones).")
31353 (license license:gpl3+)))
31354
31355(define-public python-dictdiffer
31356 (package
31357 (name "python-dictdiffer")
31358 (version "0.9.0")
31359 (source
31360 (origin
31361 (method git-fetch)
31362 (uri (git-reference
31363 (url "https://github.com/inveniosoftware/dictdiffer")
31364 (commit (string-append "v" version))))
31365 (file-name (git-file-name name version))
31366 (sha256
31367 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31368 (build-system pyproject-build-system)
31369 (arguments
31370 (list
31371 #:phases
31372 #~(modify-phases %standard-phases
31373 (add-after 'unpack 'relax-requirements
31374 (lambda _
31375 (delete-file "pytest.ini")
31376 (substitute* "setup.py"
31377 (("'pytest-runner.*',")
31378 "'pytest',")))))))
31379 (native-inputs
31380 (list python-pytest python-setuptools python-setuptools-scm))
31381 (home-page "https://github.com/inveniosoftware/dictdiffer")
31382 (synopsis "Diff and patch Python dictionary objects")
31383 (description
31384 "Dictdiffer is a Python module that helps you to diff and patch
31385dictionaries.")
31386 (license license:expat)))
31387
31388(define-public python-osc
31389 (package
31390 (name "python-osc")
31391 (version "1.9.3")
31392 (source
31393 (origin
31394 (method git-fetch)
31395 (uri (git-reference
31396 (url "https://github.com/attwad/python-osc")
31397 (commit (string-append "v" version))))
31398 (file-name (git-file-name name version))
31399 (sha256
31400 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31401 (build-system pyproject-build-system)
31402 (native-inputs (list python-setuptools))
31403 (home-page "https://github.com/attwad/python-osc")
31404 (synopsis "Open Sound Control server and client implementations")
31405 (description
31406 "@code{python-osc} is a pure Python library with no external
31407dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31408Open Sound Control 1.0} specification.")
31409 (license license:unlicense)))
31410
31411(define-public python-cmd2
31412 (package
31413 (name "python-cmd2")
31414 (version "2.5.11")
31415 (source
31416 (origin
31417 (method url-fetch)
31418 (uri (pypi-uri "cmd2" version))
31419 (sha256
31420 (base32
31421 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31422 (build-system pyproject-build-system)
31423 (arguments
31424 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31425and not test_transcript")))
31426 (propagated-inputs
31427 (list python-pyperclip python-wcwidth))
31428 (native-inputs
31429 (list python-pytest
31430 python-pytest-mock
31431 python-setuptools
31432 python-setuptools-scm
31433 python-wheel))
31434 (home-page "https://github.com/python-cmd2/cmd2")
31435 (synopsis "Tool for building interactive command line applications")
31436 (description
31437 "Cmd2 is a tool for building interactive command line applications in
31438Python. Its goal is to make it quick and easy for developers to build
31439feature-rich and user-friendly interactive command line applications. It
31440provides a simple API which is an extension of Python's built-in @code{cmd}
31441module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31442make your life easier and eliminates much of the boilerplate code which would
31443be necessary when using @code{cmd}.")
31444 (license license:expat)))
31445
31446(define-public python-pytidylib
31447 (package
31448 (name "python-pytidylib")
31449 (version "0.3.2")
31450 (source
31451 (origin
31452 (method git-fetch)
31453 (uri (git-reference
31454 (url "https://github.com/countergram/pytidylib")
31455 (commit version)))
31456 (file-name (git-file-name name version))
31457 (sha256
31458 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31459 (build-system pyproject-build-system)
31460 (arguments
31461 (list
31462 #:phases
31463 #~(modify-phases %standard-phases
31464 (add-after 'unpack 'fix-queue-import
31465 (lambda _
31466 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31467 (substitute* "tests/threadsafety.py"
31468 (("from Queue import Queue")
31469 "from queue import Queue"))))
31470 (add-before 'build 'qualify-libtidy
31471 (lambda* (#:key inputs #:allow-other-keys)
31472 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31473 (substitute* "tidylib/tidy.py"
31474 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31475 (format #f "'~a'" libtidy)))))))))
31476 (native-inputs (list python-pytest python-setuptools))
31477 (inputs (list tidy-html))
31478 (home-page "https://github.com/countergram/pytidylib")
31479 (synopsis "Python wrapper for HTML Tidy library")
31480 (description
31481 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31482allows you, from Python code, to “fix” invalid (X)HTML markup.")
31483 (license license:expat)))
31484
31485(define-public python-mujson
31486 (package
31487 (name "python-mujson")
31488 (version "1.4")
31489 (source
31490 (origin
31491 (method git-fetch)
31492 (uri (git-reference
31493 (url "https://github.com/mattgiles/mujson")
31494 (commit version)))
31495 (file-name (git-file-name name version))
31496 (sha256
31497 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31498 (build-system pyproject-build-system)
31499 (arguments (list #:tests? #f)) ;No tests.
31500 (native-inputs (list python-setuptools))
31501 (home-page "https://github.com/mattgiles/mujson")
31502 (synopsis "Use the fastest JSON functions available at import time")
31503 (description
31504 "This module selects the fastest JSON functions available at import time
31505in Python.")
31506 (license license:expat)))
31507
31508(define-public python-bashlex
31509 (package
31510 (name "python-bashlex")
31511 (version "0.18")
31512 (source
31513 (origin
31514 (method git-fetch)
31515 (uri (git-reference
31516 (url "https://github.com/idank/bashlex")
31517 (commit version)))
31518 (file-name (git-file-name name version))
31519 (sha256
31520 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31521 (build-system pyproject-build-system)
31522 (arguments
31523 (list
31524 #:phases
31525 #~(modify-phases %standard-phases
31526 (add-before 'build 'pregenerate-yacc-tables
31527 (lambda _
31528 ;; parser.py caches tables, which attempts to write to site lib
31529 ;; see https://github.com/idank/bashlex/issues/51
31530 (invoke "python" "-c" "import bashlex"))))))
31531 (native-inputs (list python-pytest python-setuptools))
31532 (home-page "https://github.com/idank/bashlex")
31533 (synopsis "Python parser for bash")
31534 (description
31535 "@code{bashlex} is a Python port of the parser used internally by GNU
31536bash.
31537
31538For the most part it's transliterated from C, the major differences are:
31539
31540@itemize
31541@item it does not execute anything
31542@item it is reentrant
31543@item it generates a complete AST
31544@end itemize
31545")
31546 (license license:gpl3+)))
31547
31548(define-public python-jinxed
31549 (package
31550 (name "python-jinxed")
31551 (version "1.3.0")
31552 (source
31553 (origin
31554 (method git-fetch)
31555 (uri (git-reference
31556 (url "https://github.com/Rockhopper-Technologies/jinxed")
31557 (commit version)))
31558 (file-name (git-file-name name version))
31559 (sha256
31560 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31561 (build-system pyproject-build-system)
31562 (arguments
31563 (list
31564 #:tests? #f ;_curses.error: setupterm: could not find terminal
31565 #:phases
31566 #~(modify-phases %standard-phases
31567 (add-before 'check 'set-environment-variables
31568 (lambda* (#:key inputs #:allow-other-keys)
31569 (setenv "TERM" "LINUX")
31570 (setenv "TERMINFO"
31571 (search-input-directory inputs "share/terminfo")))))))
31572 (native-inputs (list ncurses python-setuptools))
31573 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31574 (synopsis "Jinxed Terminal Library")
31575 (description
31576 "Jinxed is an implementation of a subset of the Python curses library.")
31577 (license license:mpl2.0)))
31578
31579(define-public python-blessed
31580 (package
31581 (name "python-blessed")
31582 (version "1.20.0")
31583 (source
31584 (origin
31585 (method url-fetch)
31586 (uri (pypi-uri "blessed" version))
31587 (sha256
31588 (base32
31589 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31590 (snippet
31591 ;; Don't get hung up on Windows test failures.
31592 '(delete-file "blessed/win_terminal.py"))))
31593 (build-system pyproject-build-system)
31594 (propagated-inputs (list python-six python-wcwidth))
31595 (native-inputs (list python-pytest python-setuptools python-wheel))
31596 (home-page "https://github.com/jquast/blessed")
31597 (synopsis "Wrapper around terminal capabilities")
31598 (description
31599 "Blessed is a thin, practical wrapper around terminal styling, screen
31600positioning, and keyboard input.")
31601 (license license:expat)))
31602
31603(define-public python-readme-renderer
31604 (package
31605 (name "python-readme-renderer")
31606 (version "44.0")
31607 (source
31608 (origin
31609 (method url-fetch)
31610 (uri (pypi-uri "readme_renderer" version))
31611 (sha256
31612 (base32
31613 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31614 (build-system pyproject-build-system)
31615 (arguments
31616 (list
31617 #:test-flags
31618 '(list "-k"
31619 (string-append
31620 ;; These tests fail due to slight differences in the generated
31621 ;; vs expected HTML, e.g. because of difference in whitespace or
31622 ;; line breaks. (See also
31623 ;; https://github.com/pypa/readme_renderer/issues/234).
31624 "not test_md_fixtures[test_CommonMark_008.md]"
31625 " and not test_rst_fixtures[test_rst_008.rst]"
31626 " and not GFM"))))
31627 (propagated-inputs
31628 (list python-cmarkgfm
31629 python-docutils
31630 python-nh3
31631 python-pygments))
31632 (native-inputs
31633 (list python-pytest
31634 python-setuptools
31635 python-wheel))
31636 (home-page "https://github.com/pypa/readme_renderer")
31637 (synopsis "Render README files in Warehouse")
31638 (description
31639 "Readme Renderer is a library that will safely render arbitrary README
31640files into HTML. It is designed to be used in Warehouse to render the
31641@code{long_description} for packages. It can handle Markdown,
31642reStructuredText, and plain text.")
31643 (license license:asl2.0)))
31644
31645(define-public python-lazr-delegates
31646 (package
31647 (name "python-lazr-delegates")
31648 (version "2.1.1")
31649 (source
31650 (origin
31651 (method url-fetch)
31652 (uri (pypi-uri "lazr_delegates" version))
31653 (sha256
31654 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31655 (build-system pyproject-build-system)
31656 (arguments
31657 (list
31658 #:test-flags #~(list "-v" #$output)
31659 #:phases
31660 #~(modify-phases %standard-phases
31661 (add-after 'check 'check-cleanup
31662 (lambda* (#:key tests? #:allow-other-keys)
31663 (when tests?
31664 (for-each
31665 delete-file-recursively
31666 (find-files #$output
31667 (lambda (file stat)
31668 (or (member (basename file)
31669 '("tests" ".pytest_cache"))))
31670 #:directories? #t))))))))
31671 (native-inputs
31672 (list python-pytest python-setuptools python-wheel))
31673 (propagated-inputs
31674 (list python-zope-interface))
31675 (home-page "https://launchpad.net/lazr.delegates")
31676 (synopsis "Easily write objects that delegate behavior")
31677 (description
31678 "The @code{lazr.delegates} package makes it easy to write objects that
31679delegate behavior to another object. The new object adds some property or
31680behavior on to the other object, while still providing the underlying interface,
31681and delegating behavior.")
31682 (license license:lgpl3)))
31683
31684(define-public python-lazr-config
31685 (package
31686 (name "python-lazr-config")
31687 (version "3.1")
31688 (source
31689 (origin
31690 (method url-fetch)
31691 (uri (pypi-uri "lazr_config" version))
31692 (sha256
31693 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31694 (build-system pyproject-build-system)
31695 (arguments
31696 (list
31697 #:test-flags #~(list "-v" #$output)
31698 #:phases
31699 #~(modify-phases %standard-phases
31700 (add-after 'check 'check-cleanup
31701 (lambda* (#:key tests? #:allow-other-keys)
31702 (when tests?
31703 (for-each
31704 delete-file-recursively
31705 (find-files #$output
31706 (lambda (file stat)
31707 (or (member (basename file)
31708 '("tests" ".pytest_cache"))))
31709 #:directories? #t))))))))
31710 (native-inputs
31711 (list python-pytest python-setuptools python-wheel))
31712 (propagated-inputs
31713 (list python-lazr-delegates python-zope-interface))
31714 (home-page "https://launchpad.net/lazr.config")
31715 (synopsis "Create configuration schemas and process and validate configurations")
31716 (description
31717 "The LAZR config system is typically used to manage process configuration.
31718Process configuration is for saying how things change when we run systems on
31719different machines, or under different circumstances. This system uses ini-like
31720file format of section, keys, and values. The config file supports inheritance
31721to minimize duplication of information across files. The format supports schema
31722validation.")
31723 (license license:lgpl3)))
31724
31725(define-public python-flufl-bounce
31726 (package
31727 (name "python-flufl-bounce")
31728 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31729 (revision . "0")))
31730 (version (git-version "4.0"
31731 (assoc-ref properties 'revision)
31732 (assoc-ref properties 'commit)))
31733 (source
31734 (origin
31735 (method git-fetch)
31736 (uri (git-reference
31737 (url "https://gitlab.com/flufl/flufl.bounce")
31738 (commit (assoc-ref properties 'commit))))
31739 (file-name (git-file-name name version))
31740 (sha256
31741 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31742 (build-system pyproject-build-system)
31743 (arguments
31744 (list
31745 #:phases
31746 #~(modify-phases %standard-phases
31747 (replace 'check
31748 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31749 (when tests?
31750 (with-directory-excursion
31751 (string-append (site-packages inputs outputs) "/flufl")
31752 (invoke "python" "-m" "nose2" "-v"))))))))
31753 (propagated-inputs
31754 (list python-atpublic python-zope-interface))
31755 (native-inputs
31756 (list python-flufl-testing python-nose2 python-setuptools))
31757 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31758 (synopsis "Email bounce detectors")
31759 (description "The @code{flufl.bounce} library provides a set of heuristics
31760and an API for detecting the original bouncing email addresses from a bounce
31761message. Many formats found in the wild are supported, as are VERP and
31762RFC 3464.")
31763 (license (list license:asl2.0
31764 license:lgpl3)))) ; only for setup_headers.py
31765
31766(define-public python-flufl-i18n
31767 (package
31768 (name "python-flufl-i18n")
31769 (version "5.1.0")
31770 (source
31771 (origin
31772 (method url-fetch)
31773 (uri (pypi-uri "flufl_i18n" version))
31774 (sha256
31775 (base32
31776 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31777 (build-system pyproject-build-system)
31778 (arguments
31779 (list #:test-flags
31780 #~(list "--no-cov" "--ignore-glob=docs/*")
31781 #:phases
31782 #~(modify-phases %standard-phases
31783 ;; This phase add a symlink of dist-info dir for packages
31784 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31785 (add-after 'install 'add-custom-dist-info
31786 (lambda _
31787 (for-each
31788 (lambda (dir)
31789 (with-directory-excursion (dirname dir)
31790 (let ((base (basename dir)))
31791 (symlink base
31792 (string-join (string-split base #\_) ".")))))
31793 (find-files #$output
31794 (lambda (file stat)
31795 (string-suffix? ".dist-info" file))
31796 #:directories? #t)))))))
31797 (propagated-inputs
31798 (list python-atpublic))
31799 (native-inputs
31800 (list python-hatchling python-pytest python-sybil))
31801 (home-page "https://flufli18n.readthedocs.io")
31802 (synopsis "API for Python internationalization")
31803 (description
31804 "This package provides a high-level, convenient API for managing
31805internationalization/translation contexts in Python applications. There is a
31806simple API for single-context applications, such as command line scripts which
31807only need to translate into one language during the entire course of their
31808execution. There is a more flexible, but still convenient API for multi-context
31809applications, such as servers, which may need to switch language contexts for
31810different tasks.")
31811 (license license:asl2.0)))
31812
31813(define-public python-flufl-lock
31814 (package
31815 (name "python-flufl-lock")
31816 (version "8.1.0")
31817 (source
31818 (origin
31819 (method url-fetch)
31820 (uri (pypi-uri "flufl.lock" version))
31821 (sha256
31822 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31823 (build-system pyproject-build-system)
31824 (arguments
31825 (list #:test-flags
31826 #~(list "--no-cov" "--ignore-glob=docs/*")
31827 #:phases
31828 #~(modify-phases %standard-phases
31829 ;; This phase add a symlink of dist-info dir for packages
31830 ;; expecting flufl.lock rather than flufl_lock (mailman).
31831 (add-after 'install 'add-custom-dist-info
31832 (lambda _
31833 (for-each
31834 (lambda (dir)
31835 (with-directory-excursion (dirname dir)
31836 (let ((base (basename dir)))
31837 (symlink base
31838 (string-join (string-split base #\_) ".")))))
31839 (find-files #$output
31840 (lambda (file stat)
31841 (string-suffix? ".dist-info" file))
31842 #:directories? #t)))))))
31843 (native-inputs
31844 (list python-hatchling python-pytest python-sybil))
31845 (propagated-inputs
31846 (list python-atpublic python-psutil))
31847 (home-page "https://flufllock.readthedocs.io")
31848 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31849 (description
31850 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31851timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31852@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31853and have a maximum lifetime built-in.")
31854 (license (list license:asl2.0
31855 license:lgpl3)))) ; only for setup_helpers.py
31856
31857(define-public python-flufl-testing
31858 (package
31859 (name "python-flufl-testing")
31860 (version "0.8")
31861 (source
31862 (origin
31863 (method git-fetch)
31864 (uri (git-reference
31865 (url "https://gitlab.com/warsaw/flufl.testing")
31866 (commit version)))
31867 (file-name (git-file-name name version))
31868 (sha256
31869 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31870 (build-system pyproject-build-system)
31871 (arguments (list #:tests? #f)) ;no tests
31872 (native-inputs (list python-setuptools))
31873 (home-page "https://gitlab.com/warsaw/flufl.testing")
31874 (synopsis "Collection of test tool plugins")
31875 (description
31876 "This package contains a small collection of test tool plugins for
31877@code{nose2} and @code{flake8}.")
31878 (license license:asl2.0)))
31879
31880(define-public python-devtools
31881 (package
31882 (name "python-devtools")
31883 (version "0.12.2")
31884 (source
31885 (origin
31886 (method git-fetch)
31887 (uri (git-reference
31888 (url "https://github.com/samuelcolvin/python-devtools")
31889 (commit (string-append "v" version))))
31890 (file-name (git-file-name name version))
31891 (sha256
31892 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31893 (build-system pyproject-build-system)
31894 (arguments
31895 (list
31896 #:test-flags
31897 ;; Disable some failing tests.
31898 ;;
31899 ;; test_print_subprocess seems to inherit wrong environment, fails with
31900 ;; E + ModuleNotFoundError: No module named 'executing'
31901 ;; Test runs fine from local clone.
31902 ;;
31903 ;; test_executing_failure fails with
31904 ;; E - [1, 2] (list) len=2
31905 ;; E + [x, y]: [1, 2] (list) len=2
31906 ;; unclear why, probably due to a dependency.
31907 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31908 ;; test_insert_assert.py also seems to inherit a bad environment:
31909 ;; E fixture 'pytester_pretty' not found
31910 ;; Test runs fine from local clone.
31911 "--ignore=tests/test_insert_assert.py")))
31912 (native-inputs
31913 (list python-hatchling python-pytest python-pytest-mock))
31914 (propagated-inputs
31915 (list python-asttokens python-executing python-pygments))
31916 (home-page "https://github.com/samuelcolvin/python-devtools")
31917 (synopsis "Debug command and development tools")
31918 (description
31919 "This package provides a debug print command and other development tools.
31920It adds a simple and readable way to print stuff during development.")
31921 (license license:expat)))
31922
31923(define-public python-dateparser
31924 (package
31925 (name "python-dateparser")
31926 (version "1.2.2")
31927 (source
31928 (origin
31929 (method url-fetch)
31930 (uri (pypi-uri "dateparser" version))
31931 (sha256
31932 (base32
31933 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31934 (build-system pyproject-build-system)
31935 (arguments
31936 (list
31937 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
31938 #:test-flags
31939 #~(list (string-join '("--deselect=tests/test_search.py"
31940 "TestTranslateSearch"
31941 "test_search_dates_with_prepositions")
31942 "::"))))
31943 (propagated-inputs
31944 (list python-dateutil
31945 python-pytz
31946 python-regex
31947 python-tzlocal))
31948 (native-inputs
31949 (list python-parameterized
31950 python-pytest
31951 python-setuptools
31952 tzdata-for-tests))
31953 (home-page "https://github.com/scrapinghub/dateparser")
31954 (synopsis
31955 "Date parsing library designed to parse dates from HTML pages")
31956 (description
31957 "@code{python-dateparser} provides modules to easily parse localized
31958dates in almost any string formats commonly found on web pages.")
31959 (license license:bsd-3)))
31960
31961(define-public python-dparse
31962 (package
31963 (name "python-dparse")
31964 (version "0.6.4")
31965 (source
31966 (origin
31967 (method url-fetch)
31968 (uri (pypi-uri "dparse" version))
31969 (sha256
31970 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31971 (build-system pyproject-build-system)
31972 (native-inputs (list python-hatchling python-pytest))
31973 (propagated-inputs (list python-packaging python-toml))
31974 (home-page "https://github.com/pyupio/dparse")
31975 (synopsis "Parser for Python dependency files")
31976 (description "This package provides a parser for Python dependency files.")
31977 (license license:expat)))
31978
31979(define-public python-dpath
31980 (package
31981 (name "python-dpath")
31982 (version "2.2.0")
31983 (source
31984 (origin
31985 (method url-fetch)
31986 (uri (pypi-uri "dpath" version))
31987 (sha256
31988 (base32
31989 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31990 (build-system pyproject-build-system)
31991 (native-inputs
31992 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31993 (home-page "https://github.com/akesterson/dpath-python")
31994 (synopsis "File-system-like pathing and searching for dictionaries")
31995 (description
31996 "@code{python-dpath} is a library for accessing and searching
31997dictionaries via /slashed/paths ala xpath.
31998
31999Basically it lets you glob over a dictionary as if it were a file system. It
32000allows you to specify globs (ala the bash eglob syntax, through some advanced
32001fnmatch.fnmatch magic) to access dictionary elements, and provides some
32002facility for filtering those results.")
32003 (license license:expat)))
32004
32005(define-public python-safety
32006 (package
32007 (name "python-safety")
32008 (version "3.6.2")
32009 (source
32010 (origin
32011 (method url-fetch)
32012 (uri (pypi-uri "safety" version))
32013 (sha256
32014 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
32015 (build-system pyproject-build-system)
32016 (arguments
32017 (list
32018 #:test-flags
32019 #~(list "-k" (string-join
32020 ;; test_announcements fails with AssertionError.
32021 (list "not test_announcements_if_is_not_tty"
32022 ;; Tests below need a network connection.
32023 "test_check_live"
32024 "test_check_live_cached"
32025 "test_get_packages_licenses_without_api_key"
32026 ;; AttributeError: 'PackageInstalledPayload' object
32027 ;; has no attribute 'tool_path'
32028 "test_emit_diff_operations_with_multiple_operations"
32029 "test_emit_diff_operations_with_empty_locations"
32030 "test_emit_diff_operations_with_different_tools"
32031 "test_emit_diff_operations_creates_correct_payload_structure")
32032 " and not "))
32033 #:phases #~(modify-phases %standard-phases
32034 (add-after 'unpack 'disable-telemetry
32035 (lambda _
32036 (substitute* (find-files "." "\\.py$")
32037 (("telemetry: bool = True")
32038 "telemetry: bool = False")
32039 (("telemetry=True")
32040 "telemetry=False"))))
32041 (add-before 'check 'set-home ; some tests run mkdir
32042 (lambda _
32043 (setenv "HOME" "/tmp"))))))
32044 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32045 (propagated-inputs (list python-authlib
32046 python-click
32047 python-dparse
32048 python-filelock
32049 python-httpx
32050 python-jinja2
32051 python-marshmallow
32052 python-nltk
32053 python-packaging
32054 python-psutil
32055 python-pydantic
32056 python-requests
32057 python-ruamel.yaml
32058 python-safety-schemas
32059 python-tenacity
32060 python-tomli
32061 python-tomlkit
32062 python-typer
32063 python-typing-extensions))
32064 (home-page "https://github.com/pyupio/safety")
32065 (synopsis "Check installed dependencies for known vulnerabilities")
32066 (description
32067 "Safety checks installed dependencies for known vulnerabilities.
32068By default it uses the open Python vulnerability database Safety DB.")
32069 (license license:expat)))
32070
32071(define-public python-pypandoc
32072 (package
32073 (name "python-pypandoc")
32074 (version "1.15")
32075 (source
32076 (origin
32077 (method git-fetch)
32078 (uri (git-reference
32079 (url "https://github.com/JessicaTegner/pypandoc")
32080 (commit (string-append "v" version))))
32081 (file-name (git-file-name name version))
32082 (sha256
32083 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32084 (build-system pyproject-build-system)
32085 (arguments
32086 (list
32087 #:test-backend #~'unittest
32088 #:phases
32089 #~(modify-phases %standard-phases
32090 (add-before 'check 'disable-tests
32091 (lambda _
32092 (substitute* "tests.py"
32093 ;; Disable test requiring network access
32094 (("test_basic_conversion_from_http_url")
32095 "skip_test_basic_conversion_from_http_url")
32096 ;; Disable tests with missing files
32097 (("test_basic_conversion_from_file_pattern")
32098 "skip_test_basic_conversion_from_file_pattern")
32099 (("test_conversion_with_data_files")
32100 "skip_test_conversion_with_data_files")))))))
32101 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32102 ;; the missing etoolbox.sty file is added
32103 (native-inputs
32104 (list (texlive-local-tree
32105 (list texlive-etoolbox
32106 texlive-lm
32107 texlive-regexpatch
32108 texlive-xcolor))
32109 python-poetry-core
32110 python-setuptools))
32111 (inputs (list pandoc python-pandocfilters))
32112 (propagated-inputs (list python-wheel))
32113 (home-page "https://github.com/JessicaTegner/pypandoc")
32114 (synopsis "Python wrapper for pandoc")
32115 (description
32116 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32117 (license license:expat)))
32118
32119(define-public python-rnc2rng
32120 (package
32121 (name "python-rnc2rng")
32122 (version "2.7.0")
32123 (source
32124 (origin
32125 (method git-fetch)
32126 (uri (git-reference
32127 (url "https://github.com/djc/rnc2rng")
32128 (commit version)))
32129 (file-name (git-file-name name version))
32130 (sha256
32131 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32132 (build-system pyproject-build-system)
32133 (arguments
32134 (list
32135 #:test-backend #~'custom
32136 #:test-flags #~(list "test.py")))
32137 (native-inputs (list python-setuptools))
32138 (propagated-inputs (list python-rply))
32139 (home-page "https://github.com/djc/rnc2rng")
32140 (synopsis "Convert RELAX NG Compact to regular syntax")
32141 (description
32142 "This package provides the @command{rnc2rng} command-line tool as well as
32143a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32144equivalent schemata in the XML-based default RELAX NG syntax.")
32145 (license license:expat)))
32146
32147(define-public python-citeproc-py
32148 (package
32149 (name "python-citeproc-py")
32150 (version "0.9.0")
32151 (source
32152 (origin
32153 (method git-fetch)
32154 (uri (git-reference
32155 (url "https://github.com/brechtm/citeproc-py")
32156 (commit (string-append "v" version))
32157 (recursive? #t))) ; TODO Unbundle.
32158 (file-name (git-file-name name version))
32159 (sha256
32160 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32161 (build-system pyproject-build-system)
32162 (arguments
32163 (list
32164 #:phases
32165 #~(modify-phases %standard-phases
32166 (add-after 'unpack 'set-version
32167 (lambda _
32168 (delete-file "citeproc/_version.py")
32169 (substitute* "citeproc/__init__.py"
32170 (("from \\. import version")
32171 "")
32172 (("__version__ =.*")
32173 (format #f "__version__ = ~s" #$version))))))))
32174 (native-inputs (list python-pytest python-setuptools))
32175 (propagated-inputs (list python-lxml python-rnc2rng))
32176 (home-page "https://github.com/brechtm/citeproc-py")
32177 (synopsis "Citations and bibliography formatter")
32178 (description
32179 "Citeproc-py is a CSL processor for Python. It aims to implement the
32180CSL 1.0.1 specification. citeproc-py can output styled citations and
32181bibliographies in a number of different output formats. Currently supported
32182are plain text, reStructuredText and HTML.")
32183 (license license:bsd-2)))
32184
32185(define-public python-inform
32186 (package
32187 (name "python-inform")
32188 (version "1.34")
32189 (source
32190 (origin
32191 (method git-fetch) ; no tests in PyPI release
32192 (uri (git-reference
32193 (url "https://github.com/kenkundert/inform")
32194 (commit (string-append "v" version))))
32195 (file-name (git-file-name name version))
32196 (sha256
32197 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32198 (build-system pyproject-build-system)
32199 (arguments
32200 (list
32201 #:test-flags #~(list "-k" (string-append
32202 ;; Test below needs the num2words package
32203 "not test_plural_words"
32204 ;; These last two failed with AssertionError
32205 " and not test_inform"
32206 " and not test_manual"))))
32207 (native-inputs
32208 (list python-flit-core python-pytest))
32209 (propagated-inputs
32210 (list python-arrow))
32211 (home-page "https://inform.readthedocs.io")
32212 (synopsis "Print & logging utilities for communicating with user")
32213 (description
32214 "Inform is designed to display messages from programs that are typically run from
32215a console. It provides a collection of ‘print’ functions that allow you to simply and
32216cleanly print different types of messages.")
32217 (license license:gpl3+)))
32218
32219(define-public python-nestedtext
32220 (package
32221 (name "python-nestedtext")
32222 (version "3.7")
32223 (source
32224 (origin
32225 (method git-fetch) ; no tests in PyPI release
32226 (uri (git-reference
32227 (url "https://github.com/KenKundert/nestedtext")
32228 (commit (string-append "v" version))))
32229 (file-name (git-file-name name version))
32230 (sha256
32231 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32232 (build-system pyproject-build-system)
32233 (arguments
32234 (list
32235 ;; XXX: Tests below need some not yet packaged Python libraries.
32236 #:test-flags #~(list "--ignore" "examples/"
32237 "--ignore" "tests/test_nestedtext.py"
32238 "-k" (string-append
32239 "not techniques.rst"
32240 " and not nestedtext.nestedtext.dumps"))))
32241 (native-inputs (list python-flit-core python-pytest))
32242 (propagated-inputs
32243 (list python-inform))
32244 (home-page "https://nestedtext.org")
32245 (synopsis "Human readable and writable data interchange format")
32246 (description
32247 "NestedText is a file format for holding data that is to be entered, edited, or
32248viewed by people. It allows data to be organized into a nested collection of
32249dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32250without the complexity and risk of YAML and without the syntactic clutter of JSON.
32251NestedText is both simple and natural. Only a small number of concepts and rules must
32252be kept in mind when creating it. It is easily created, modified, or viewed with
32253a text editor and easily understood and used by both programmers and non-programmers.")
32254 (license license:expat))) ; MIT license
32255
32256(define-public python-nest-asyncio
32257 (package
32258 (name "python-nest-asyncio")
32259 (version "1.6.0")
32260 (source
32261 (origin
32262 (method url-fetch)
32263 (uri (pypi-uri "nest_asyncio" version))
32264 (sha256
32265 (base32
32266 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32267 (build-system pyproject-build-system)
32268 (native-inputs
32269 (list python-pytest python-setuptools))
32270 (home-page "https://github.com/erdewit/nest_asyncio")
32271 (synopsis "Patch asyncio to allow nested event loops")
32272 (description
32273 "By design @code{asyncio} does not allow its event loop to be nested.
32274This presents a practical problem: when in an environment where the event loop
32275is already running it's impossible to run tasks and wait for the result. This
32276module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32277@code{loop.run_until_complete}.")
32278 (license license:bsd-3)))
32279
32280(define-public python-simpervisor
32281 (package
32282 (name "python-simpervisor")
32283 (version "1.0.0")
32284 (source
32285 (origin
32286 ;; Tests not included in release.
32287 (method git-fetch)
32288 (uri (git-reference
32289 (url "https://github.com/yuvipanda/simpervisor")
32290 (commit (string-append "v" version))))
32291 (file-name (git-file-name name version))
32292 (sha256
32293 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32294 (build-system pyproject-build-system)
32295 (arguments
32296 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32297 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32298 (native-inputs
32299 (list python-aiohttp
32300 python-hatchling
32301 python-psutil
32302 python-pytest
32303 python-pytest-asyncio))
32304 (home-page "https://github.com/yuvipanda/simpervisor")
32305 (synopsis "Simple async process supervisor")
32306 (description
32307 "This package provides a simple async process supervisor in Python.")
32308 (license license:bsd-3)))
32309
32310(define-public python-parallel
32311 (package
32312 (name "python-parallel")
32313 (version "1.6.4.4")
32314 (source
32315 (origin
32316 (method url-fetch)
32317 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32318 version ".zip"))
32319 (sha256
32320 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32321 (build-system pyproject-build-system)
32322 (arguments (list #:tests? #f)) ;No test suite.
32323 (native-inputs (list python-setuptools unzip))
32324 (propagated-inputs (list python-six))
32325 (home-page "https://www.parallelpython.com")
32326 (synopsis "Parallel and distributed programming for Python")
32327 (description
32328 "Parallel Python module (PP) provides an easy and efficient way to create
32329parallel-enabled applications for SMP computers and clusters. PP module
32330features cross-platform portability and dynamic load balancing. Thus
32331applications written with PP will parallelize efficiently even on
32332heterogeneous and multi-platform clusters (including clusters running other
32333applications with variable CPU loads).")
32334 (license license:bsd-3)))
32335
32336(define-public python-param
32337 (package
32338 (name "python-param")
32339 (version "2.3.3")
32340 (source
32341 (origin
32342 (method git-fetch)
32343 (uri (git-reference
32344 (url "https://github.com/holoviz/param")
32345 (commit (string-append "v" version))))
32346 (file-name (git-file-name name version))
32347 (sha256
32348 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32349 (build-system pyproject-build-system)
32350 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32351 (native-inputs
32352 ;; Project does not require any dependencies, all of the listed
32353 ;; native-inputs are for build/test only.
32354 (list python-cloudpickle
32355 python-hatch-vcs
32356 python-hatchling
32357 python-ipython-minimal
32358 python-jsonschema
32359 python-nbval
32360 python-nest-asyncio
32361 python-numpy
32362 python-odfpy
32363 python-openpyxl
32364 python-pandas
32365 python-pyarrow
32366 python-pytest
32367 python-pytest-asyncio
32368 python-tables
32369 python-xlrd))
32370 (home-page "https://param.holoviz.org/")
32371 (synopsis
32372 "Make your Python code clearer and more reliable by declaring Parameters")
32373 (description
32374 "Param is a library for handling all the user-modifiable parameters,
32375arguments, and attributes that control your code. It provides automatic,
32376robust error-checking while dramatically reducing boilerplate code, letting
32377you focus on what you want your code to do rather than on checking for all the
32378possible ways users could supply inappropriate values to a function or
32379class.")
32380 (license license:bsd-3)))
32381
32382(define-public python-djitellopy
32383 (package
32384 (name "python-djitellopy")
32385 (version "2.5.0")
32386 (source
32387 (origin
32388 (method url-fetch)
32389 (uri (pypi-uri "djitellopy" version))
32390 (sha256
32391 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32392 (build-system pyproject-build-system)
32393 (arguments
32394 (list
32395 #:tests? #f ;no test suite
32396 #:phases
32397 #~(modify-phases %standard-phases
32398 ;; OpenCV does not ship metadata files for its Python library, which
32399 ;; makes it invisible to the sanity_check script (see:
32400 ;; https://github.com/opencv/opencv/issues/24810).
32401 (delete 'sanity-check))))
32402 (propagated-inputs
32403 (list opencv ;for opencv-python
32404 python-av
32405 python-numpy
32406 python-pillow))
32407 (native-inputs (list python-setuptools python-wheel))
32408 (home-page "https://github.com/damiafuentes/DJITelloPy")
32409 (synopsis
32410 "DJI Tello drone video streaming, swarms and state packets library")
32411 (description
32412 "DJI Tello drone Python interface using the official Tello SDK and Tello
32413EDU SDK. This library has the following features:
32414@itemize
32415@item Implementation of all tello commands
32416@item Retrieve a video stream easily
32417@item Receive and parse state packets
32418@item Control a swarm of drones.
32419@end itemize")
32420 (license license:expat)))
32421
32422(define-public python-djvulibre
32423 ;; The original git repository of python-djvulibre is hosted at
32424 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32425 ;; has been archived by its owner in 2022. The most active fork is
32426 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32427 ;; version packaged here (its "python3" branch, the default).
32428 ;;
32429 ;; However, the python-djvulibre PyPI project still refers to the old
32430 ;; repository. The new repository is published as djvulibre-python on PyPI;
32431 ;; that is, with the name in reversed order.The original package name is
32432 ;; used in Guix because it best adheres to the Guix naming scheme.
32433 (package
32434 (name "python-djvulibre")
32435 (version "0.9.3")
32436 (source
32437 (origin
32438 (method git-fetch)
32439 (uri (git-reference
32440 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32441 (commit version)))
32442 (file-name (git-file-name name version))
32443 (sha256
32444 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32445 (build-system pyproject-build-system)
32446 (arguments
32447 (list
32448 #:phases
32449 #~(modify-phases %standard-phases
32450 (replace 'check
32451 (lambda* (#:key tests? #:allow-other-keys)
32452 (when tests?
32453 ;; The tests get confused by the djvu directory.
32454 (delete-file-recursively "djvu")
32455 ;; Tests can't find tools.py otherwise.
32456 (with-directory-excursion "tests"
32457 (invoke "python" "-m" "pytest"))))))))
32458 (native-inputs
32459 (list ghostscript
32460 pkg-config
32461 python-cython
32462 python-pytest
32463 python-setuptools))
32464 (inputs
32465 (list djvulibre))
32466 (synopsis "Python bindings for DjVuLibre")
32467 (description "This is a set of Python bindings for the DjVuLibre library.")
32468 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32469 (license license:gpl2)))
32470
32471(define-public python-gamera
32472 (package
32473 (name "python-gamera")
32474 (version "4.1.0")
32475 (source
32476 (origin
32477 (method git-fetch)
32478 (uri (git-reference
32479 (url "https://github.com/hsnr-gamera/gamera-4")
32480 (commit (string-append "v" version))))
32481 (file-name (git-file-name name version))
32482 (sha256
32483 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32484 (build-system pyproject-build-system)
32485 (arguments
32486 (list
32487 #:phases
32488 #~(modify-phases %standard-phases
32489 (add-after 'unpack 'fix-build
32490 (lambda _
32491 ;; The script to make daily build artifacts fails to compile,
32492 ;; but users don't need that, so ignore it.
32493 (delete-file "misc/daily_build.py")
32494 ;; Prepare tests
32495 (mkdir-p "tmp")
32496 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32497 (native-inputs (list python-docutils python-pytest python-setuptools))
32498 (inputs (list libpng libtiff zlib))
32499 (synopsis "Framework for building document analysis applications")
32500 (description
32501 "Gamera is a toolkit for building document image recognition systems.")
32502 (home-page "https://gamera.informatik.hsnr.de/")
32503 (license license:gpl2+)))
32504
32505(define-public python-aiofiles
32506 (package
32507 (name "python-aiofiles")
32508 (version "24.1.0")
32509 (source
32510 (origin
32511 (method url-fetch)
32512 (uri (pypi-uri "aiofiles" version))
32513 (sha256
32514 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32515 (build-system pyproject-build-system)
32516 (native-inputs
32517 (list python-hatch-vcs
32518 python-hatchling
32519 python-pytest
32520 python-pytest-asyncio))
32521 (home-page "https://github.com/Tinche/aiofiles")
32522 (synopsis "File support for @code{asyncio}")
32523 (description
32524 "@code{python-aiofiles} is a library for handling local disk files in
32525asyncio applications.")
32526 (license license:asl2.0)))
32527
32528(define-public python-pyre-extensions
32529 (package
32530 (name "python-pyre-extensions")
32531 (version "0.0.32")
32532 (source
32533 (origin
32534 (method url-fetch)
32535 (uri (pypi-uri "pyre_extensions" version))
32536 (sha256
32537 (base32
32538 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32539 (build-system pyproject-build-system)
32540 (native-inputs (list python-pytest python-setuptools python-wheel))
32541 (propagated-inputs
32542 (list python-typing-extensions python-typing-inspect))
32543 (home-page "https://pyre-check.org")
32544 (synopsis
32545 "Type system extensions for use with @code{python-pyre}")
32546 (description
32547 "@code{python-pyre-extensions} defines extensions to the standard
32548@code{typing} module that are supported by the Pyre typechecker.")
32549 (license license:expat)))
32550
32551(define-public python-pywatchman
32552 (package
32553 (name "python-pywatchman")
32554 (version "3.0.0")
32555 (source
32556 (origin
32557 (method url-fetch)
32558 (uri (pypi-uri "pywatchman" version))
32559 (sha256
32560 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32561 (build-system pyproject-build-system)
32562 (arguments
32563 (list
32564 #:test-backend #~'custom
32565 #:test-flags #~(list "tests/tests.py")))
32566 (native-inputs (list python-setuptools))
32567 (home-page "https://facebook.github.io/watchman/")
32568 (synopsis "Watchman client for python")
32569 (description
32570 "@code{python-pywatchman} is a library to connect and query Watchman to
32571discover file changes.")
32572 (license license:bsd-3)))
32573
32574(define-public python-roundrobin
32575 (package
32576 (name "python-roundrobin")
32577 (version "0.0.4")
32578 (source
32579 (origin
32580 (method git-fetch)
32581 (uri (git-reference
32582 (url "https://github.com/linnik/roundrobin")
32583 (commit version)))
32584 (file-name (git-file-name name version))
32585 (sha256
32586 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32587 (build-system pyproject-build-system)
32588 (arguments
32589 (list #:test-backend #~'unittest))
32590 (native-inputs (list python-setuptools))
32591 (home-page "https://github.com/linnik/roundrobin")
32592 (synopsis "Collection of roundrobin utilities")
32593 (description
32594 "This package provides a collection of utilities for round-robin
32595distribution in Python.")
32596 (license license:expat)))
32597
32598(define-public python-helpdev
32599 (package
32600 (name "python-helpdev")
32601 (version "0.7.1")
32602 (source
32603 (origin
32604 (method git-fetch)
32605 (uri (git-reference
32606 (url "https://gitlab.com/dpizetta/helpdev")
32607 (commit (string-append "v" version))))
32608 (file-name (git-file-name name version))
32609 (sha256
32610 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32611 (build-system pyproject-build-system)
32612 (native-inputs (list python-pip python-pytest python-setuptools))
32613 (home-page "https://gitlab.com/dpizetta/helpdev")
32614 (synopsis "Extract information about the Python environment easily")
32615 (description
32616 "Helpdev is a library to easily extract information about the Python
32617environment.")
32618 (license license:expat)))
32619
32620(define-public python-loguru
32621 (package
32622 (name "python-loguru")
32623 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32624 ;; covert to git tag when released.
32625 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32626 (revision . "0")))
32627 (version (git-version "0.7.3"
32628 (assoc-ref properties 'revision)
32629 (assoc-ref properties 'commit)))
32630 (source
32631 (origin
32632 (method git-fetch)
32633 (uri (git-reference
32634 (url "https://github.com/Delgan/loguru")
32635 (commit (assoc-ref properties 'commit))))
32636 (file-name (git-file-name name version))
32637 (sha256
32638 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32639 (build-system pyproject-build-system)
32640 ;; tests: x86_64-linux 1598 passed, 28 skipped
32641 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32642 (arguments
32643 (list
32644 #:test-flags
32645 #~(list #$@(if (target-64bit?)
32646 '()
32647 ;; OverflowError
32648 '("--deselect=tests/test_datetime.py::test_formatting"
32649 (string-append "--deselect=tests/test_datetime.py"
32650 "::test_value_of_gmtoff_is_invalid"))))))
32651 (native-inputs
32652 (list python-flit-core
32653 python-freezegun
32654 python-mypy-for-tests
32655 python-pytest
32656 python-setuptools
32657 tzdata-for-tests))
32658 (propagated-inputs
32659 (list python-colorama))
32660 (home-page "https://github.com/Delgan/loguru")
32661 (synopsis "Python logging made (stupidly) simple")
32662 (description "Python logging made (stupidly) simple.")
32663 (license license:expat)))
32664
32665(define-public python-qtsass
32666 (package
32667 (name "python-qtsass")
32668 (version "0.4.0")
32669 (source
32670 (origin
32671 ;; There are no tests in the PyPI tarball.
32672 (method git-fetch)
32673 (uri (git-reference
32674 (url "https://github.com/spyder-ide/qtsass/")
32675 (commit (string-append "v" version))))
32676 (file-name (git-file-name name version))
32677 (sha256
32678 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32679 (build-system pyproject-build-system)
32680 (native-inputs
32681 (list python-flaky python-pytest python-setuptools python-wheel))
32682 (propagated-inputs
32683 (list python-libsass))
32684 (home-page "https://github.com/spyder-ide/qtsass")
32685 (synopsis "Compile SCSS files to valid Qt stylesheets")
32686 (description
32687 "Besides being used in web development, CSS is also the way to stylize
32688Qt-based desktop applications. However, Qt's CSS has a few variations that
32689prevent the direct use of SASS compiler.
32690
32691The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32692handling those variations.")
32693 (license license:expat)))
32694
32695(define-public python-qdarkstyle
32696 (package
32697 (name "python-qdarkstyle")
32698 (version "3.2.3")
32699 (source
32700 (origin
32701 (method url-fetch)
32702 (uri (pypi-uri "QDarkStyle" version))
32703 (sha256
32704 (base32
32705 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32706 (build-system pyproject-build-system)
32707 (native-inputs (list python-pytest
32708 python-qtsass
32709 python-setuptools
32710 python-watchdog
32711 python-wheel))
32712 (propagated-inputs
32713 (list python-qtpy python-pyqt-6))
32714 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32715 (synopsis
32716 "Complete dark stylesheet for Python and Qt applications")
32717 (description "QDarkStyle is the most complete dark stylesheet for Python and
32718Qt applications.")
32719 (license license:expat)))
32720
32721(define-public python-pystray
32722 (package
32723 (name "python-pystray")
32724 (version "0.19.5")
32725 (source
32726 (origin
32727 (method git-fetch)
32728 (uri (git-reference
32729 (url "https://github.com/moses-palmer/pystray")
32730 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32731 (file-name (git-file-name name version))
32732 (sha256
32733 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32734 (build-system pyproject-build-system)
32735 (arguments
32736 (list
32737 ;; The test suite requires user interaction, there are no automated
32738 ;; tests.
32739 #:tests? #false
32740 #:phases #~(modify-phases %standard-phases
32741 (add-before 'sanity-check 'use-dummy-backend
32742 (lambda _
32743 ;; Without setting this, pystray tries to connect to
32744 ;; X11 on import.
32745 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32746 (native-inputs (list python-sphinx python-setuptools))
32747 (propagated-inputs (list python-pillow python-six python-xlib))
32748 (home-page "https://github.com/moses-palmer/pystray")
32749 (synopsis "Create a system tray icon")
32750 (description "This library allows you to create a system tray icon.
32751It makes it possible to specify an icon, a title and a callback for when
32752the icon is activated. The icon and title can be changed after the icon
32753has been created, and the visibility of the icon can be toggled.")
32754 (license license:lgpl3+)))
32755
32756(define-public python-bitstring
32757 (package
32758 (name "python-bitstring")
32759 (version "4.3.1")
32760 (source
32761 (origin
32762 (method url-fetch)
32763 (uri (pypi-uri "bitstring" version))
32764 (sha256
32765 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32766 (build-system pyproject-build-system)
32767 (arguments
32768 (list
32769 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32770 "--ignore=tests/test_fp8.py"
32771 "--ignore=tests/test_mxfp.py")))
32772 (native-inputs
32773 (list python-gfloat python-pytest python-setuptools python-wheel))
32774 (propagated-inputs
32775 (list python-bitarray))
32776 (home-page "https://github.com/scott-griffiths/bitstring")
32777 (synopsis
32778 "Simple construction, analysis and modification of binary data")
32779 (description
32780 "Bitstring is a library for simple construction, analysis and modification
32781 of binary data.")
32782 (license license:expat)))
32783
32784(define-public python-confuse
32785 (package
32786 (name "python-confuse")
32787 (version "2.0.1")
32788 (source
32789 (origin
32790 (method url-fetch)
32791 (uri (pypi-uri "confuse" version))
32792 (sha256
32793 (base32
32794 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32795 (build-system pyproject-build-system)
32796 (native-inputs (list python-flit-core python-pytest))
32797 (propagated-inputs (list python-pyyaml))
32798 (home-page "https://github.com/beetbox/confuse")
32799 (synopsis "Painless YAML configuration")
32800 (description "Confuse is a configuration library for Python that uses
32801YAML. It takes care of defaults, overrides, type checking, command-line
32802integration, human-readable errors, and standard OS-specific locations.")
32803 (license license:expat)))
32804
32805(define-public python-referencing
32806 (package
32807 (name "python-referencing")
32808 (version "0.35.1")
32809 (source
32810 (origin
32811 (method url-fetch)
32812 (uri (pypi-uri "referencing" version))
32813 (sha256
32814 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32815 (build-system pyproject-build-system)
32816 (arguments
32817 (list
32818 #:test-flags
32819 '(list "--pyargs" "referencing/tests")
32820 #:phases
32821 '(modify-phases %standard-phases
32822 (add-after 'unpack 'patch-pyproject
32823 (lambda _
32824 ;; The build system does not like this.
32825 (substitute* "pyproject.toml"
32826 ((" \"Topic :: File Formats.*") "")))))))
32827 (propagated-inputs (list python-attrs python-rpds-py))
32828 (native-inputs
32829 (list python-hatchling
32830 python-hatch-vcs
32831 python-jsonschema
32832 python-pytest
32833 python-pytest-subtests))
32834 (home-page "https://github.com/python-jsonschema/referencing")
32835 (synopsis "JSON Referencing + Python")
32836 (description "This package provides an implementation-agnostic
32837implementation of JSON reference resolution.")
32838 (license license:expat)))
32839
32840(define-public python-referencing-bootstrap
32841 (package
32842 (inherit python-referencing)
32843 (name "python-referencing-bootstrap")
32844 (arguments
32845 (list
32846 #:tests? #false
32847 #:phases
32848 '(modify-phases %standard-phases
32849 (add-after 'unpack 'patch-pyproject
32850 (lambda _
32851 ;; The build system does not like this.
32852 (substitute* "pyproject.toml"
32853 ((" \"Topic :: File Formats.*") "")))))))
32854 (native-inputs (list python-hatchling python-hatch-vcs))))
32855
32856(define-public python-reflink
32857 (package
32858 (name "python-reflink")
32859 (version "0.2.2")
32860 (source
32861 (origin
32862 (method git-fetch)
32863 (uri (git-reference
32864 (url "https://gitlab.com/rubdos/pyreflink")
32865 (commit version)))
32866 (file-name (git-file-name name version))
32867 (sha256
32868 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32869 (build-system pyproject-build-system)
32870 (arguments
32871 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32872 (propagated-inputs (list python-cffi))
32873 (native-inputs (list python-pytest python-setuptools))
32874 (home-page "https://gitlab.com/rubdos/pyreflink")
32875 (synopsis "Python wrapper around reflink system call")
32876 (description
32877 "Python reflink wraps around platform specific @code{reflink}
32878implementations.")
32879 (license license:expat)))
32880
32881(define-public python-retry
32882 (package
32883 (name "python-retry")
32884 (version "0.9.2")
32885 (source
32886 (origin
32887 (method git-fetch)
32888 (uri (git-reference
32889 (url "https://github.com/invl/retry")
32890 (commit version)))
32891 (file-name (git-file-name name version))
32892 (sha256
32893 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32894 (build-system pyproject-build-system)
32895 (native-inputs (list python-pbr python-pytest))
32896 (propagated-inputs (list python-decorator python-py))
32897 (home-page "https://github.com/invl/retry")
32898 (synopsis "Retry decorator")
32899 (description
32900 "@code{retry} is an easy to use retry decorator for Python. It can be
32901used to retry a function a given number of times.")
32902 (license license:asl2.0)))
32903
32904(define-public python-crayons
32905 (package
32906 (name "python-crayons")
32907 (version "0.4.0")
32908 (source
32909 (origin
32910 (method git-fetch)
32911 (uri (git-reference
32912 (url "https://github.com/MasterOdin/crayons")
32913 (commit (string-append "v" version))))
32914 (file-name (git-file-name name version))
32915 (sha256
32916 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32917 (build-system pyproject-build-system)
32918 (arguments
32919 (list
32920 #:test-backend #~'custom
32921 #:test-flags #~(list "test_crayons.py")))
32922 (native-inputs (list python-setuptools))
32923 (propagated-inputs (list python-colorama))
32924 (home-page "https://github.com/MasterOdin/crayons")
32925 (synopsis "TextUI colors for Python")
32926 (description
32927 "This package gives you colored strings for the terminal. Crayons
32928automatically wraps a given string in the foreground color and restores the
32929original state after the string is printed.")
32930 (license license:expat)))
32931
32932(define-public python-sane
32933 (package
32934 (name "python-sane")
32935 (version "2.9.2")
32936 (source
32937 (origin
32938 (method git-fetch)
32939 (uri (git-reference
32940 (url "https://github.com/python-pillow/Sane")
32941 (commit (string-append "v" version))))
32942 (file-name (git-file-name name version))
32943 (sha256
32944 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32945 (build-system pyproject-build-system)
32946 (arguments (list #:tests? #f)) ; No tests.
32947 (native-inputs (list python-setuptools))
32948 (inputs (list sane))
32949 (home-page "https://github.com/python-pillow/Sane")
32950 (synopsis "Python interface to the SANE scanner")
32951 (description
32952 "This package provides Python interface to the SANE scanner and frame
32953grabber interface.")
32954 (license (license:non-copyleft
32955 ;; Yet another variant of the X/MIT license.
32956 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32957
32958(define-public python-scikit-build
32959 (package
32960 (name "python-scikit-build")
32961 (version "0.18.1")
32962 (source
32963 (origin
32964 (method url-fetch)
32965 (uri (pypi-uri "scikit_build" version))
32966 (sha256
32967 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32968 (patches
32969 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32970 (build-system pyproject-build-system)
32971 (arguments
32972 (list
32973 #:phases
32974 #~(modify-phases %standard-phases
32975 (add-after 'unpack 'patch-cmake-executable
32976 (lambda* (#:key inputs #:allow-other-keys)
32977 (substitute* "skbuild/constants.py"
32978 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32979 (format #f "~a ~s~%" head
32980 (search-input-file inputs "bin/cmake"))))))
32981 (add-before 'check 'pre-check
32982 (lambda _
32983 ;; Some tests try to access the network before being skipped.
32984 ;; Skip them by default.
32985 (substitute* "tests/test_setup.py"
32986 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32987 "pytest.mark.isolated()\n"))))
32988 (replace 'check
32989 (lambda* (#:key tests? #:allow-other-keys)
32990 (when tests?
32991 ;; These tests attempt to pull dependencies from the Internet.
32992 (delete-file "tests/test_distribution.py")
32993 (delete-file "tests/test_pep518.py")
32994 ;; The tests marked as "isolate" are tests that require access
32995 ;; to the network.
32996 (invoke "pytest" "-vv" "-m" "not isolated"
32997 "-n" (number->string (parallel-job-count))
32998 "-k" (string-append
32999 ;; These tests attempt to write to read-only
33000 ;; Python install directory.
33001 "not test_install_command "
33002 "and not test_test_command "
33003 "and not test_hello_develop "
33004 ;; These sdist-related tests fail for unknown
33005 ;; reasons (see:
33006 ;; https://github.com/scikit-build/scikit-build/issues/689).
33007 "and not test_hello_sdist_with_base "
33008 "and not test_manifest_in_sdist "
33009 "and not test_hello_sdist "
33010 "and not test_sdist_with_symlinks "
33011 ;; These are not parallel safe and fail
33012 ;; nondeterministically (see:
33013 ;; https://github.com/scikit-build/scikit-build/issues/711).
33014 "and not test_generator_cleanup "
33015 "and not test_generator_selection "
33016 ;; … and there's more of them
33017 "and not test_cxx_compiler "
33018 "and not test_fortran_compiler ")))))
33019 (add-after 'install 'install-cmake
33020 (lambda* (#:key outputs #:allow-other-keys)
33021 (let ((lib (string-append (assoc-ref outputs "out")
33022 "/lib/cmake/modules")))
33023 (mkdir-p lib)
33024 (with-directory-excursion "skbuild/resources/cmake"
33025 (for-each (lambda (file) (install-file file lib))
33026 (find-files "." "\\.cmake")))))))))
33027 (native-inputs
33028 (list cmake-minimal
33029 gfortran
33030 git-minimal/pinned ;for tests
33031 ninja/pinned
33032 python-cython
33033 python-hatch-fancy-pypi-readme
33034 python-hatch-vcs
33035 python-hatchling
33036 python-pytest
33037 python-pytest-mock
33038 python-pytest-xdist
33039 python-requests
33040 python-virtualenv))
33041 (propagated-inputs
33042 (list python-distro
33043 python-packaging
33044 python-wheel))
33045 (home-page "https://github.com/scikit-build/scikit-build")
33046 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33047 (description "Scikit-build is an improved build system generator for
33048CPython C/C++/Fortran/Cython extensions. It has support for additional
33049compilers, build systems, cross compilation, and locating dependencies and
33050determining their build requirements. The scikit-build package is
33051fundamentally just glue between the @code{setuptools} Python module and
33052CMake.")
33053 (license license:expat)))
33054
33055(define-public python-screeninfo
33056 (package
33057 (name "python-screeninfo")
33058 (version "0.8.1")
33059 (source
33060 (origin
33061 (method git-fetch)
33062 (uri (git-reference
33063 (url "https://github.com/rr-/screeninfo")
33064 (commit version)))
33065 (file-name (git-file-name name version))
33066 (sha256
33067 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33068 (build-system pyproject-build-system)
33069 (native-inputs
33070 (list libdrm
33071 python-poetry-core
33072 python-pytest))
33073 (home-page "https://github.com/rr-/screeninfo")
33074 (synopsis "Fetch location and size of physical screens")
33075 (description
33076 "Fetch location and size of physical screens. GNU/Linux has support on
33077following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33078 (license license:expat)))
33079
33080(define-public python-screenkey
33081 (package
33082 (name "python-screenkey")
33083 (version "1.5")
33084 (source
33085 (origin
33086 (method git-fetch)
33087 (uri (git-reference
33088 (url "https://gitlab.com/screenkey/screenkey")
33089 (commit (string-append "v" version))))
33090 (file-name (git-file-name name version))
33091 (sha256
33092 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
33093 (build-system pyproject-build-system)
33094 (arguments
33095 (list
33096 #:tests? #f ; No tests.
33097 #:phases
33098 #~(modify-phases %standard-phases
33099 (add-after 'unpack 'fix-dlopen-paths
33100 (lambda* (#:key inputs #:allow-other-keys)
33101 (substitute* "Screenkey/xlib.py"
33102 (("(libXtst.so.6|libX11.so.6)" lib)
33103 (search-input-file inputs (string-append "/lib/" lib))))))
33104 (add-after 'install 'wrap-screenkey
33105 (lambda _
33106 (wrap-program (string-append #$output "/bin/screenkey")
33107 `("GUIX_PYTHONPATH" ":" prefix
33108 (,(getenv "GUIX_PYTHONPATH")))
33109 `("GI_TYPELIB_PATH" ":" prefix
33110 (,(getenv "GI_TYPELIB_PATH")))))))))
33111 (inputs (list bash-minimal
33112 gtk+
33113 libx11
33114 libxtst
33115 python-babel
33116 python-dbus
33117 python-pycairo
33118 python-pygobject
33119 slop))
33120 (native-inputs (list python-setuptools))
33121 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
33122 (synopsis "Screencast tool to display pressed keys")
33123 (description
33124 "Screenkey is a screencast tool to display your keys inspired by
33125Screenflick.")
33126 (license license:gpl3+)))
33127
33128(define-public python-jinja2-cli
33129 (package
33130 (name "python-jinja2-cli")
33131 (version "0.8.2")
33132 (source
33133 (origin
33134 (method git-fetch)
33135 (uri (git-reference
33136 (url "https://github.com/mattrobenolt/jinja2-cli")
33137 (commit version)))
33138 (file-name (git-file-name name version))
33139 (sha256
33140 (base32
33141 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33142 (build-system pyproject-build-system)
33143 (propagated-inputs
33144 (list python-jinja2))
33145 (native-inputs
33146 (list python-jinja2
33147 python-pytest
33148 python-setuptools
33149 python-wheel))
33150 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33151 (synopsis "Command-line interface to Jinja2")
33152 (description
33153 "This package provides a command-line interface (CLI) to the Jinja2
33154template engine.")
33155 (license license:bsd-3)))
33156
33157(define-public python-readability
33158 (package
33159 (name "python-readability")
33160 (version "0.3.1")
33161 (source
33162 (origin
33163 (method git-fetch)
33164 (uri (git-reference
33165 (url "https://github.com/andreasvc/readability/")
33166 (commit (string-append "v" version))))
33167 (file-name (git-file-name name version))
33168 (sha256
33169 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33170 (build-system pyproject-build-system)
33171 (arguments (list #:tests? #f)) ; No tests.
33172 (native-inputs (list python-setuptools))
33173 (home-page "https://github.com/andreasvc/readability/")
33174 (synopsis "Measure text readability using surface characteristics")
33175 (description
33176 "This package provides a Python library that is an implementation of
33177traditional readability measures based on simple surface characteristics.
33178These measures are basically linear regressions based on the number of words,
33179syllables, and sentences.")
33180 (license license:asl2.0)))
33181
33182(define-public python-readability-lxml
33183 ;; No releases since 2020, see:
33184 ;; <https://github.com/buriy/python-readability/issues/196>.
33185 (package
33186 (name "python-readability-lxml")
33187 (version "0.8.4.1")
33188 (source
33189 (origin
33190 (method git-fetch)
33191 (uri (git-reference
33192 (url "http://github.com/buriy/python-readability")
33193 (commit version)))
33194 (file-name (git-file-name name version))
33195 (sha256
33196 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
33197 (build-system pyproject-build-system)
33198 (native-inputs
33199 (list python-poetry-core
33200 python-pytest))
33201 (propagated-inputs
33202 (list python-chardet
33203 python-cssselect
33204 python-lxml
33205 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33206 (home-page "http://github.com/buriy/python-readability")
33207 (synopsis "HTML to text parser")
33208 (description
33209 "This package provides classes and function that strip gratuitous markup
33210from web pages to make them easier to read.")
33211 (license license:asl2.0)))
33212
33213(define-public python-listparser
33214 (package
33215 (name "python-listparser")
33216 (version "0.20")
33217 (source
33218 (origin
33219 (method git-fetch)
33220 (uri (git-reference
33221 (url "https://github.com/kurtmckee/listparser")
33222 (commit (string-append "v" version))))
33223 (file-name (git-file-name name version))
33224 (sha256
33225 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33226 (build-system pyproject-build-system)
33227 (native-inputs (list python-pytest python-poetry-core))
33228 (home-page "https://github.com/kurtmckee/listparser")
33229 (synopsis "Parse subscription lists in Python")
33230 (description
33231 "This package provides a Python library that can parse OPML, FOAF, and
33232iGoogle subscription lists.")
33233 (license license:expat)))
33234
33235(define-public python-smartypants
33236 (package
33237 (name "python-smartypants")
33238 (version "2.0.2")
33239 (source
33240 (origin
33241 (method url-fetch)
33242 (uri (pypi-uri "smartypants" version))
33243 (sha256
33244 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33245 (build-system pyproject-build-system)
33246 (native-inputs
33247 (list python-docutils python-pygments python-setuptools))
33248 (home-page "https://github.com/justinmayer/smartypants.py")
33249 (synopsis "Translate punctuation characters into smart quotes")
33250 (description
33251 "@command{smartpants} can perform the following transformations:
33252@enumerate
33253@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33254@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33255entities
33256@item Dashes (-- and ---) into en- and em-dash entities
33257@item Three consecutive dots (... or . . .) into an ellipsis entity
33258@end enumerate")
33259 (license license:bsd-3)))
33260
33261(define-public python-ld
33262 (package
33263 (name "python-ld")
33264 (version "1.9.0")
33265 (source
33266 (origin
33267 (method git-fetch)
33268 (uri (git-reference
33269 (url "https://github.com/nir0s/ld")
33270 (commit (string-append "v" version))))
33271 (file-name (git-file-name name version))
33272 (sha256
33273 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33274 (build-system pyproject-build-system)
33275 (arguments
33276 (list
33277 ;; XXX: These tests expect ubuntu distro.
33278 #:test-flags
33279 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33280 "test_ubuntu14nomodules_lsb_release"
33281 "test_trailingblanks_lsb_release")
33282 " and not "))))
33283 (native-inputs (list python-pytest python-setuptools))
33284 (home-page "https://github.com/nir0s/ld")
33285 (synopsis "OS platform information API")
33286 (description
33287 "The ld package provides information about the GNU/Linux distribution it
33288runs on, such as a reliable machine-readable ID, or version information.")
33289 (license license:asl2.0)))
33290
33291(define-public python-quicktions
33292 (package
33293 (name "python-quicktions")
33294 (version "1.22")
33295 (source
33296 (origin
33297 (method git-fetch)
33298 (uri (git-reference
33299 (url "https://github.com/scoder/quicktions")
33300 (commit version)))
33301 (file-name (git-file-name name version))
33302 (sha256
33303 (base32
33304 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33305 (build-system pyproject-build-system)
33306 (native-inputs
33307 (list python-cython python-pytest python-setuptools))
33308 (home-page "https://github.com/scoder/quicktions")
33309 (synopsis "Fast fractions data type for rational numbers")
33310 (description
33311 "This package provides fast fractions data type for rational numbers. It
33312is the cythonized version of @code{fractions.Fraction}.")
33313 (license license:psfl)))
33314
33315(define-public python-pathvalidate
33316 (package
33317 (name "python-pathvalidate")
33318 (version "2.4.1")
33319 (source
33320 (origin
33321 (method git-fetch)
33322 (uri (git-reference
33323 (url "https://github.com/thombashi/pathvalidate")
33324 (commit (string-append "v" version))))
33325 (file-name (git-file-name name version))
33326 (sha256
33327 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
33328 (build-system pyproject-build-system)
33329 (native-inputs (list python-allpairspy python-click python-faker
33330 python-pytest python-setuptools))
33331 (home-page "https://github.com/thombashi/pathvalidate")
33332 (synopsis "Sanitize strings representing paths")
33333 (description
33334 "@code{pathvalidate} is a Python library to sanitize/validate strings
33335representing paths or filenames.")
33336 (license license:expat)))
33337
33338(define-public python-escapism
33339 (package
33340 (name "python-escapism")
33341 (version "1.0.1")
33342 (source
33343 (origin
33344 (method git-fetch)
33345 (uri (git-reference
33346 (url "https://github.com/jupyterhub/escapism")
33347 (commit version)))
33348 (file-name (git-file-name name version))
33349 (sha256
33350 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33351 (build-system pyproject-build-system)
33352 (native-inputs (list python-pytest python-setuptools))
33353 (home-page "https://github.com/jupyterhub/escapism")
33354 (synopsis "Simple, generic library for escaping strings")
33355 (description
33356 "This Python library provides a programming interface to, given a set of
33357safe characters and an escape character, escape safe strings and unescape the
33358result.")
33359 (license license:expat)))
33360
33361(define-public python-recommonmark
33362 (package
33363 (name "python-recommonmark")
33364 (version "0.7.1")
33365 (source
33366 (origin
33367 (method url-fetch)
33368 (uri (pypi-uri "recommonmark" version))
33369 (sha256
33370 (base32
33371 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33372 (build-system pyproject-build-system)
33373 (arguments
33374 (list
33375 ;; XXX: Some of those fail for no good reason.
33376 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33377 (native-inputs (list python-pytest python-setuptools python-wheel))
33378 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33379 (home-page "https://github.com/readthedocs/recommonmark")
33380 (synopsis "Docutils-compatibility bridge to CommonMark")
33381 (description
33382 "This package provides a docutils-compatibility bridge to CommonMark that
33383lets you write CommonMark inside of Docutils & Sphinx projects.")
33384 (license license:expat)))
33385
33386(define-public python-rectangle-packer
33387 (package
33388 (name "python-rectangle-packer")
33389 (version "2.1.0")
33390 (source
33391 (origin
33392 (method git-fetch)
33393 (uri (git-reference
33394 (url "https://github.com/Penlect/rectangle-packer")
33395 (commit version)))
33396 (file-name (git-file-name name version))
33397 (sha256
33398 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33399 (build-system pyproject-build-system)
33400 (arguments
33401 (list
33402 #:phases
33403 #~(modify-phases %standard-phases
33404 ;; Cython extensions have to be built before running the tests.
33405 (add-before 'check 'build-ext
33406 (lambda _
33407 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33408 (native-inputs
33409 (list python-cython python-pytest python-setuptools))
33410 (home-page "https://github.com/Penlect/rectangle-packer")
33411 (synopsis "Pack rectangles into a bounding box")
33412 (description
33413 "Rectangle-packer is a Python library for packing rectangles
33414into a bounding box with minimal wasted space. It is useful for texture
33415atlases, sprite sheets, and bin packing problems.")
33416 (license license:expat)))
33417
33418(define-public python-redo
33419 (package
33420 (name "python-redo")
33421 (version "3.0.0")
33422 (source
33423 (origin
33424 (method git-fetch)
33425 (uri (git-reference
33426 (url "https://github.com/mozilla-releng/redo")
33427 (commit version)))
33428 (file-name (git-file-name name version))
33429 (sha256
33430 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33431 (build-system pyproject-build-system)
33432 (native-inputs
33433 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33434 (home-page "https://github.com/mozilla-releng/redo")
33435 (synopsis "Utilities to retry Python callables")
33436 (description "Redo provides various means to add seamless ability to
33437retry to any Python callable.")
33438 (license license:mpl2.0)))
33439
33440(define-public python-opcodes
33441 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33442 ;; version number, which is what we use here.
33443 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33444 (package
33445 (name "python-opcodes")
33446 (version "0.3.14") ;from 'opcodes/__init__.py'
33447 (home-page "https://github.com/Maratyszcza/Opcodes")
33448 (source
33449 (origin
33450 (method git-fetch)
33451 (uri (git-reference (url home-page) (commit commit)))
33452 (file-name (git-file-name name version))
33453 (sha256
33454 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33455 (build-system pyproject-build-system)
33456 (native-inputs (list python-pytest python-setuptools))
33457 (synopsis "Database of processor instructions and opcodes")
33458 (description
33459 "This project documents instruction sets in a format convenient for
33460tools development. An instruction set is represented by three files:
33461
33462@itemize
33463@item an XML file that describes instructions;
33464@item an XSD file that describes the structure of the XML file;
33465@item a Python module that reads the XML file and represents it as a set of
33466Python objects;
33467@end itemize
33468
33469It currently provides descriptions for most user-mode x86, x86_64, and k1om
33470instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33471and BMI2).")
33472 (license license:bsd-2))))
33473
33474(define-public python-cart
33475 (package
33476 (name "python-cart")
33477 (version "1.2.3")
33478 (source
33479 (origin
33480 (method git-fetch)
33481 (uri (git-reference
33482 (url "https://github.com/CybercentreCanada/cart")
33483 (commit (string-append "v" version))))
33484 (file-name (git-file-name name version))
33485 (sha256
33486 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33487 (build-system pyproject-build-system)
33488 (arguments
33489 (list
33490 #:test-backend #~'unittest))
33491 (native-inputs
33492 (list python-setuptools))
33493 (propagated-inputs
33494 (list python-pycryptodome))
33495 (home-page "https://github.com/CybercentreCanada/cart")
33496 (synopsis "Library for interacting with the CaRT file format")
33497 (description
33498 "This Python library implements the CaRT file format which is commonly
33499used to store and transmit information about computer malware and associated
33500metadata.")
33501 (license license:bsd-2)))
33502
33503(define-public python-cle
33504 (package
33505 (name "python-cle")
33506 ;; Must be the same version as python-angr.
33507 (version "9.2.186")
33508 (source
33509 (origin
33510 (method git-fetch)
33511 (uri (git-reference
33512 (url "https://github.com/angr/cle")
33513 (commit (string-append "v" version))))
33514 (file-name (git-file-name name version))
33515 (sha256
33516 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33517 (build-system pyproject-build-system)
33518 (arguments
33519 (list
33520 ;; tests: 112 passed, 12 skipped, 1 warning
33521 #:phases
33522 #~(modify-phases %standard-phases
33523 (add-before 'check 'check-setup
33524 (lambda _
33525 (copy-recursively
33526 (string-append #$(this-package-native-input "angr-binaries") "/share")
33527 "../binaries"))))))
33528 (native-inputs
33529 (list angr-binaries
33530 python-cffi
33531 python-pytest
33532 python-setuptools))
33533 (propagated-inputs
33534 (list python-archinfo
33535 python-cart
33536 python-pefile
33537 python-pyelftools
33538 python-pyvex
33539 python-sortedcontainers))
33540 (home-page "https://github.com/angr/cle")
33541 (synopsis "Python loader for binaries and their associated libraries")
33542 (description
33543 "CLE loads binaries and their associated libraries, resolves
33544imports and provides an abstraction of process memory the same way as if
33545it was loader by the operating system's loader.")
33546 (license license:bsd-2)))
33547
33548(define-public python-pyvex
33549 (package
33550 (name "python-pyvex")
33551 ;; Must be the same version as python-angr.
33552 (version "9.2.186")
33553 (source
33554 (origin
33555 (method git-fetch)
33556 (uri (git-reference
33557 (url "https://github.com/angr/pyvex")
33558 (commit (string-append "v" version))))
33559 (file-name (git-file-name name version))
33560 (sha256
33561 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33562 (build-system pyproject-build-system)
33563 (arguments
33564 (list
33565 ;; tests: 57 passed
33566 #:phases
33567 #~(modify-phases %standard-phases
33568 (add-after 'unpack 'copy-submodule-package
33569 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33570 ;; symlink: "Read-only file system".
33571 (lambda _
33572 (copy-recursively
33573 #+(package-source (this-package-native-input "vex"))
33574 (string-append (getcwd) "/vex"))))
33575 (add-before 'build 'set-cc
33576 (lambda _
33577 (setenv "AR" #$(ar-for-target))
33578 (setenv "CC" #$(cc-for-target))
33579 (setenv "CC_NATIVE" "gcc"))))))
33580 (native-inputs
33581 (list cmake-minimal
33582 python-pytest
33583 python-scikit-build-core
33584 vex))
33585 (propagated-inputs
33586 (list python-bitstring
33587 python-cffi))
33588 (home-page "https://github.com/angr/pyvex")
33589 (synopsis "Python interface to libVEX and VEX IR")
33590 (description
33591 "This package provides a Python interface the libVEX and VEX IR.
33592VEX is the intermediate representation (also known as intermediate
33593language) used by the Valgrind analysis tool. As such, VEX is designed
33594to enable all kinds of binary analysis tasks.")
33595 (license (list license:bsd-2
33596 license:gpl2))))
33597
33598(define-public python-claripy
33599 (package
33600 (name "python-claripy")
33601 ;; Must be the same version as python-angr.
33602 (version "9.2.186")
33603 (source
33604 (origin
33605 (method git-fetch)
33606 (uri (git-reference
33607 (url "https://github.com/angr/claripy")
33608 (commit (string-append "v" version))))
33609 (file-name (git-file-name name version))
33610 (sha256
33611 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33612 (build-system pyproject-build-system)
33613 (arguments
33614 (list
33615 ;; tests: 329 passed, 1 skipped
33616 #:phases
33617 #~(modify-phases %standard-phases
33618 (add-after 'unpack 'relax-requirements
33619 (lambda _
33620 (substitute* "pyproject.toml"
33621 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33622 ;; failes to detect it (similar like OpenCV), relax the
33623 ;; version constraint, see:
33624 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33625 ((", \"z3-solver==4.13.0.0\"")
33626 "")))))))
33627 (native-inputs
33628 (list python-pytest
33629 python-setuptools))
33630 (propagated-inputs
33631 (list python-cachetools
33632 python-decorator
33633 python-pysmt
33634 z3))
33635 (home-page "https://github.com/angr/claripy")
33636 (synopsis "Abstraction layer for constraint solvers")
33637 (description
33638 "This Python module provides an abstraction layer for interacting
33639with constraint solvers. Specifically, it is intended to be used with
33640SMT solvers and is built on top of the Z3 solver.")
33641 (license license:bsd-2)))
33642
33643(define-public python-pysmt
33644 (package
33645 (name "python-pysmt")
33646 (version "0.9.6")
33647 (source
33648 (origin
33649 ;; Fetching from Git as pypi release doesn't include all test files.
33650 (method git-fetch)
33651 (uri (git-reference
33652 (url "https://github.com/pysmt/pysmt")
33653 (commit (string-append "v" version))))
33654 (file-name (git-file-name name version))
33655 (sha256
33656 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33657 (build-system pyproject-build-system)
33658 (arguments
33659 `(#:phases (modify-phases %standard-phases
33660 (add-before 'check 'set-pysmt-solver
33661 (lambda _
33662 (setenv "PYSMT_SOLVER" "z3"))))))
33663 (native-inputs (list python-pytest python-setuptools python-wheel))
33664 (propagated-inputs (list z3))
33665 (home-page "https://github.com/pysmt/pysmt")
33666 (synopsis
33667 "Solver-agnostic library for SMT formula manipulation and solving")
33668 (description
33669 "This Python module provides a solver-agnostic abstraction for
33670working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33671it allows manipulation and solving such formulas.")
33672 (license license:asl2.0)))
33673
33674(define-public python-rpyc
33675 (package
33676 (name "python-rpyc")
33677 (version "5.3.1")
33678 (source
33679 (origin
33680 ;; Fetching from Git as pypi release doesn't include all test files.
33681 (method git-fetch)
33682 (uri (git-reference
33683 (url "https://github.com/tomerfiliba-org/rpyc")
33684 (commit version)))
33685 (file-name (git-file-name name version))
33686 (sha256
33687 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33688 (snippet '(begin
33689 ;; Disable deploy tests, these rely on OpenSSH and require
33690 ;; configuring the SSH client manually to accept the host key.
33691 (delete-file "tests/test_deploy.py")
33692 ;; Disable tests requiring network access. These tests
33693 ;; presently fail with the error "Network is unreachable".
33694 (delete-file "tests/test_registry.py")))))
33695 (build-system pyproject-build-system)
33696 (arguments
33697 `(#:phases (modify-phases %standard-phases
33698 (replace 'check
33699 (lambda* (#:key tests? #:allow-other-keys)
33700 (when tests?
33701 (with-directory-excursion "tests"
33702 (invoke "python" "-m" "unittest"))))))))
33703 (propagated-inputs (list python-hatchling python-plumbum))
33704 (home-page "https://github.com/tomerfiliba-org/rpyc")
33705 (synopsis
33706 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33707 (description
33708 "This Python module enables remote procedure calls, clustering, and
33709distributed-computing. For this purpose, it makes use of object-proxying, a technique
33710that employs python's dynamic nature, to overcome the physical boundaries between
33711processes and computers, so that remote objects can be manipulated as if they
33712were local.")
33713 (license license:expat)))
33714
33715(define-public python-nampa
33716 (package
33717 (name "python-nampa")
33718 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33719 ;; has 0.1.1 as version. Latest commit is from 2024.
33720 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33721 (revision . "0")))
33722 (version (git-version "1.0.0"
33723 (assoc-ref properties 'revision)
33724 (assoc-ref properties 'commit)))
33725 (source
33726 (origin
33727 (method git-fetch)
33728 (uri (git-reference
33729 (url "https://github.com/thebabush/nampa")
33730 (commit (assoc-ref properties 'commit))))
33731 (file-name (git-file-name name version))
33732 (sha256
33733 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33734 (build-system pyproject-build-system)
33735 (arguments
33736 (list
33737 #:test-flags
33738 #~(list "-k test_random_values")
33739 #:phases
33740 #~(modify-phases %standard-phases
33741 (add-after 'unpack 'patch-tests
33742 (lambda _
33743 ;; Unclear why this top-level __init__.py is here. It seems to
33744 ;; setup a plugin for binaryninja, which Guix does not package.
33745 (delete-file "__init__.py")
33746 ;; Yields tests, which is not allowed anymore.
33747 (substitute* "tests/test_crc.py"
33748 (("yield") "#yield")))))))
33749 (propagated-inputs (list python-future))
33750 (native-inputs (list python-pytest python-setuptools))
33751 (home-page "https://github.com/thebabush/nampa")
33752 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33753 (description
33754 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33755and Recognition Technology}. This technology is useful for identifying
33756common library subroutines in disassembled binaries.")
33757 (license license:lgpl3)))
33758
33759(define-public python-mulpyplexer
33760 (package
33761 (name "python-mulpyplexer")
33762 (version "0.09")
33763 (source
33764 (origin
33765 (method url-fetch)
33766 (uri (pypi-uri "mulpyplexer" version))
33767 (sha256
33768 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33769 (build-system pyproject-build-system)
33770 (arguments
33771 (list
33772 #:phases
33773 '(modify-phases %standard-phases
33774 (replace 'check
33775 (lambda* (#:key tests? #:allow-other-keys)
33776 (when tests?
33777 (invoke "python" "mulpyplexer.py")))))))
33778 (native-inputs (list python-setuptools python-wheel))
33779 (home-page "https://github.com/zardus/mulpyplexer/")
33780 (synopsis "Multiplexes interactions with lists of Python objects")
33781 (description "This module provides utilities for multiplexing
33782interactions with lists of Python objects.")
33783 (license license:bsd-2)))
33784
33785(define-public python-itanium-demangler
33786 (package
33787 (name "python-itanium-demangler")
33788 (version "1.1")
33789 (source
33790 (origin
33791 (method git-fetch)
33792 (uri (git-reference
33793 ;; PyPI only provides wheels and no source code.
33794 (url "https://github.com/whitequark/python-itanium_demangler")
33795 (commit (string-append "v" version))))
33796 (file-name (git-file-name name version))
33797 (sha256
33798 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33799 (build-system pyproject-build-system)
33800 (arguments
33801 (list
33802 #:phases
33803 #~(modify-phases %standard-phases
33804 (replace 'check
33805 (lambda* (#:key tests? #:allow-other-keys)
33806 (when tests?
33807 (with-directory-excursion "tests"
33808 (invoke "python" "-m" "unittest"))))))))
33809 (native-inputs (list python-setuptools python-wheel))
33810 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33811 (synopsis "Pure Python Itanium C++ ABI demangler")
33812 (description
33813"This Python module provides an implementation of the Itanium C++ ABI symbol
33814mangling language. The demangler generates an abstract syntax tree from
33815mangled symbols, which can be used for directly extracting type information.")
33816 (license license:bsd-0)))
33817
33818(define-public python-angr
33819 (package
33820 (name "python-angr")
33821 (version "9.2.186")
33822 (source
33823 (origin
33824 (method git-fetch)
33825 (uri (git-reference
33826 (url "https://github.com/angr/angr")
33827 (commit (string-append "v" version))))
33828 (file-name (git-file-name name version))
33829 (sha256
33830 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
33831 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
33832 "python-angr-check-exec-deps.patch"))))
33833 (build-system pyproject-build-system)
33834 (arguments
33835 (list
33836 #:imported-modules `(,@%cargo-build-system-modules
33837 ,@%pyproject-build-system-modules)
33838 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
33839 (guix build pyproject-build-system)
33840 (guix build utils))
33841 #:test-flags
33842 #~(list "-x"
33843 "--dist" "load"
33844 "--numprocesses" (number->string (parallel-job-count))
33845 "-k"
33846 ;; test_mips32_missing_offset_in_instructions fails
33847 ;; with capstone 5 and passes with capstone 4. Might
33848 ;; be a capstone regressions, needs investigation.
33849 ;;
33850 ;; TODO: test_unsat_core needs investigation.
33851 ;;
33852 ;; test_decompiling_abnormal_switch_case_case3 is broken
33853 ;; when tests modifying global counters are run before it.
33854 ;; See <https://github.com/angr/angr/issues/5715>.
33855 ;;
33856 ;; test_concrete_memset is a non-deterministic benchmark.
33857 ;; test_similarity_fauxware is flaky.
33858 (string-append
33859 "not test_mips32_missing_offset_in_instructions"
33860 " and not test_unsat_core"
33861 " and not test_decompiling_abnormal_switch_case_case3"
33862 " and not test_concrete_memset"
33863 " and not test_similarity_fauxware"))
33864 #:phases
33865 #~(modify-phases %standard-phases
33866 (add-after 'unpack 'use-guix-vendored-dependencies
33867 (lambda _
33868 (substitute* "native/angr/Cargo.toml"
33869 (("^icicle-fuzzing.*$")
33870 "icicle-fuzzing = { version = \"*\" }\n")
33871 (("^icicle-vm.*$")
33872 "icicle-vm = { version = \"*\" }\n")
33873 (("^pcode.*$")
33874 "pcode = { version = \"*\" }\n"))))
33875 (add-after 'unpack 'fix-tests
33876 (lambda _
33877 (substitute* "tests/common.py"
33878 (("\\[\"cc\"\\]")
33879 "[\"gcc\"]"))))
33880 (add-after 'unpack 'relax-protobuf
33881 (lambda _
33882 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
33883 (substitute* "pyproject.toml"
33884 (("protobuf>=6.33.0") "protobuf"))))
33885 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
33886 (lambda args
33887 (for-each (lambda (phase)
33888 (format #t "Running cargo phase: ~a~%" phase)
33889 (apply (assoc-ref cargo:%standard-phases phase)
33890 #:cargo-target #$(cargo-triplet)
33891 args))
33892 '(prepare-rust-crates
33893 unpack-rust-crates
33894 configure
33895 check-for-pregenerated-files
33896 patch-cargo-checksums))))
33897 (add-before 'check 'check-setup
33898 (lambda _
33899 (copy-recursively
33900 (string-append #$(this-package-native-input "angr-binaries") "/share")
33901 "../binaries")))
33902 (add-before 'build 'generate-protobuf-files
33903 ;; Regenerate protobuf files using our utilized protobuf version.
33904 ;; This allows us to relax the version constraint on python-protobuf.
33905 (lambda _
33906 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
33907 (add-before 'build 'set-cc
33908 (lambda _
33909 (setenv "CC" #$(cc-for-target)))))))
33910 (propagated-inputs (list python-archinfo ;sync version with python-angr
33911 python-cachetools
33912 python-cffi
33913 python-claripy ;sync version with python-angr
33914 python-cle ;sync version with python-angr
33915 python-cxxheaderparser
33916 python-gitpython
33917 python-msgspec
33918 python-mulpyplexer
33919 python-networkx
33920 python-protobuf
33921 python-psutil
33922 python-pycparser
33923 python-pydemumble
33924 python-pyformlang
33925 python-pypcode
33926 python-pyvex ;sync version with python-angr
33927 python-rich
33928 python-sortedcontainers
33929 python-sympy
33930 python-sqlalchemy
33931 python-keystone-engine
33932 python-typing-extensions
33933 python-unique-log-filter
33934 unicorn-2.0))
33935 (native-inputs
33936 (append
33937 (list angr-binaries
33938 protobuf
33939 python-pytest
33940 python-pytest-xdist
33941 python-setuptools
33942 python-setuptools-rust
33943 rust
33944 `(,rust "cargo"))
33945 (or (and=> (%current-target-system)
33946 (compose list make-rust-sysroot))
33947 '())))
33948 (inputs
33949 (cons* (cargo-inputs 'python-angr)))
33950 (home-page "https://github.com/angr/angr")
33951 (synopsis "Multi-architecture binary analysis toolkit")
33952 (description
33953 "This package provides a versatile binary analysis platform with the
33954ability to perform dynamic symbolic execution as well as various
33955static analyses directly on binaries. As such, it can be used for all
33956kinds of reverse engineering, vulnerability discovery, exploit
33957generation, and software testing purposes.")
33958 (license license:bsd-2)))
33959
33960(define-public python-peachpy
33961 ;; There is no tag in this repo.
33962 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33963 (version "0.2.0") ;from 'peachpy/__init__.py'
33964 (revision "3"))
33965 (package
33966 (name "python-peachpy")
33967 (version (git-version version revision commit))
33968 (home-page "https://github.com/Maratyszcza/PeachPy")
33969 (source (origin
33970 (method git-fetch)
33971 (uri (git-reference (url home-page) (commit commit)))
33972 (file-name (git-file-name name version))
33973 (sha256
33974 (base32
33975 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33976 (patches (search-patches "python-peachpy-determinism.patch"))))
33977 (build-system pyproject-build-system)
33978 (arguments
33979 ;; The issue is known and the test will probably never be fixed.
33980 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33981 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33982 (native-inputs
33983 (list python-pytest python-setuptools python-wheel))
33984 (propagated-inputs
33985 (list python-six python-opcodes))
33986 (synopsis "Efficient assembly code generation in Python")
33987 (description
33988 "PeachPy is a Python framework for writing high-performance assembly kernels.
33989PeachPy aims to simplify writing optimized assembly kernels while preserving
33990all optimization opportunities of traditional assembly.
33991
33992PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33993for the Go language tool chain; it adapts to different calling conventions and
33994application binary interfaces (ABIs); it takes care of register allocation; it
33995supports x86_64 instructions up to AVX-512 and SHA.")
33996 (supported-systems '("x86_64-linux"))
33997 (license license:bsd-2))))
33998
33999(define-public python-sgmllib3k
34000 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34001 (revision "1"))
34002 (package
34003 (name "python-sgmllib3k")
34004 (version
34005 (git-version "1.0.0" revision commit))
34006 (source
34007 (origin
34008 (method git-fetch)
34009 (uri (git-reference
34010 (url "https://github.com/hsoft/sgmllib")
34011 (commit commit)))
34012 (file-name (git-file-name name version))
34013 (sha256
34014 (base32
34015 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34016 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34017 (build-system pyproject-build-system)
34018 (native-inputs (list python-pytest python-setuptools))
34019 (home-page "https://github.com/hsoft/sgmllib")
34020 (synopsis "Python 3 port of sgmllib")
34021 (description "This package provides an unmaintained port of sgmllib to
34022Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34023Generalized Mark-up Language}.")
34024 (license license:bsd-3))))
34025
34026(define-public python-cwcwidth
34027 (package
34028 (name "python-cwcwidth")
34029 (version "0.1.10")
34030 (source
34031 (origin
34032 (method url-fetch)
34033 (uri (pypi-uri "cwcwidth" version))
34034 (sha256
34035 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34036 (build-system pyproject-build-system)
34037 (arguments
34038 (list
34039 #:phases
34040 #~(modify-phases %standard-phases
34041 (add-before 'check 'remove-local-cwcwidth
34042 (lambda _
34043 ;; This would otherwise interfere with finding the installed
34044 ;; cwcwidth when running tests.
34045 (delete-file-recursively "cwcwidth"))))))
34046 (native-inputs
34047 (list python-cython
34048 python-pytest
34049 python-setuptools
34050 python-setuptools-scm))
34051 (home-page "https://github.com/sebastinas/cwcwidth")
34052 (synopsis "Python bindings for wc(s)width")
34053 (description
34054 "This package provides bindings for wcwidth and wcswidth functions
34055defined in POSIX.1-2001 and POSIX.1-2008.")
34056 (license license:expat)))
34057
34058(define-public python-pyan3
34059 (package
34060 (name "python-pyan3")
34061 (version "1.2.0")
34062 (source
34063 (origin
34064 ;; Source tarball on PyPI lacks tests.
34065 (method git-fetch)
34066 (uri (git-reference
34067 (url "https://github.com/Technologicat/pyan")
34068 (commit (string-append "v" version))))
34069 (file-name (git-file-name name version))
34070 (sha256
34071 (base32
34072 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34073 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34074 "python-pyan3-fix-absolute-path-bug.patch"))))
34075 (build-system pyproject-build-system)
34076 (native-inputs
34077 (list python-pytest python-setuptools python-wheel))
34078 (propagated-inputs
34079 (list python-jinja2))
34080 (home-page "https://github.com/Technologicat/pyan")
34081 (synopsis "Offline call graph generator for Python 3")
34082 (description "Pyan takes one or more Python source files, performs
34083a (rather superficial) static analysis, and constructs a directed graph of the
34084objects in the combined source, and how they define or use each other. The
34085graph can be output for rendering by GraphViz or yEd.")
34086 (license license:gpl2)))
34087
34088(define-public python-multipledispatch
34089 (package
34090 (name "python-multipledispatch")
34091 (version "1.0.0")
34092 (source
34093 (origin
34094 (method git-fetch) ;no tests in PyPI archive
34095 (uri (git-reference
34096 (url "https://github.com/mrocklin/multipledispatch")
34097 (commit version)))
34098 (file-name (git-file-name name version))
34099 (sha256
34100 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34101 (build-system pyproject-build-system)
34102 (native-inputs
34103 (list python-pytest
34104 python-pytest-benchmark
34105 python-setuptools))
34106 (home-page "https://github.com/mrocklin/multipledispatch/")
34107 (synopsis "Multiple dispatch for Python based on pattern matching")
34108 (description
34109 "This library provides an efficient mechanism for overloading function
34110implementations based on the types of the arguments.")
34111 (license license:bsd-3)))
34112
34113(define-public python-multimethod
34114 (package
34115 (name "python-multimethod")
34116 (version "1.10")
34117 (source
34118 (origin
34119 ;; No tests in the PyPI tarball.
34120 (method git-fetch)
34121 (uri (git-reference
34122 (url "https://github.com/coady/multimethod")
34123 (commit (string-append "v" version))))
34124 (file-name (git-file-name name version))
34125 (sha256
34126 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34127 (build-system pyproject-build-system)
34128 (native-inputs (list python-pytest python-setuptools python-wheel))
34129 (home-page "https://github.com/coady/multimethod")
34130 (synopsis "Python support for multiple argument dispatching")
34131 (description
34132 "This package provides a decorator for adding multiple argument
34133dispatching to functions. The decorator creates a multimethod object as
34134needed and registers the function with its annotations.")
34135 (license license:asl2.0)))
34136
34137(define-public python-logical-unification
34138 (package
34139 (name "python-logical-unification")
34140 (version "0.4.7")
34141 (source
34142 (origin
34143 (method git-fetch)
34144 (uri (git-reference
34145 (url "https://github.com/pythological/unification")
34146 (commit (string-append "v" version))))
34147 (file-name (git-file-name name version))
34148 (sha256
34149 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34150 (build-system pyproject-build-system)
34151 (native-inputs
34152 (list python-pytest
34153 python-pytest-benchmark
34154 python-setuptools
34155 python-setuptools-scm))
34156 (propagated-inputs
34157 (list python-multipledispatch
34158 python-toolz))
34159 (home-page "https://github.com/pythological/unification/")
34160 (synopsis "Logical unification in Python for solving symbolic expressions")
34161 (description "This library provides algorithms and data types for solving
34162symbolic expressions in pure Python using the technique of logical unification.")
34163 (license license:bsd-3)))
34164
34165(define-public python-looseversion
34166 (package
34167 (name "python-looseversion")
34168 (version "1.3.0")
34169 (source
34170 (origin
34171 (method url-fetch)
34172 (uri (pypi-uri "looseversion" version))
34173 (sha256
34174 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34175 (build-system pyproject-build-system)
34176 (arguments
34177 (list
34178 ;; No tests provided.
34179 #:tests? #f))
34180 (native-inputs
34181 (list python-hatchling))
34182 (home-page "https://github.com/effigies/looseversion")
34183 (synopsis "Version numbering for anarchists and software realists")
34184 (description
34185 "This package provides a drop-in replacement for the original
34186@code{LooseVersion}. It implements an identical interface and comparison
34187logic to @code{LooseVersion}. The only major change is that a
34188@code{looseversion.LooseVersion} is comparable to a
34189@code{distutils.version.LooseVersion}, which means tools should not need to
34190worry whether all dependencies that use LooseVersion have migrated.")
34191 (license license:psfl)))
34192
34193(define-public python-cons
34194 (package
34195 (name "python-cons")
34196 (version "0.4.7")
34197 (source
34198 (origin
34199 (method git-fetch) ;no tests in PyPI archive
34200 (uri (git-reference
34201 (url "https://github.com/pythological/python-cons")
34202 (commit (string-append "v" version))))
34203 (file-name (git-file-name name version))
34204 (sha256
34205 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34206 (build-system pyproject-build-system)
34207 (native-inputs
34208 (list python-pytest
34209 python-setuptools
34210 python-setuptools-scm
34211 python-wheel))
34212 (propagated-inputs
34213 (list python-logical-unification))
34214 (home-page "https://github.com/pythological/python-cons")
34215 (synopsis "Cons cell data structures and related algorithms for Python")
34216 (description
34217 "This library implements algorithms and data structures for Lisp-style
34218cons cells in Python.")
34219 (license license:lgpl3+)))
34220
34221(define-public python-etuples
34222 (package
34223 (name "python-etuples")
34224 (version "0.3.10")
34225 (source
34226 (origin
34227 (method url-fetch)
34228 (uri (pypi-uri "etuples" version))
34229 (sha256
34230 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34231 (build-system pyproject-build-system)
34232 (arguments
34233 (list
34234 #:test-flags
34235 ;; assert False == {~_1: <built-in function add>}
34236 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34237 (native-inputs
34238 (list python-pytest
34239 python-setuptools
34240 python-setuptools-scm))
34241 (propagated-inputs
34242 (list python-cons
34243 python-multipledispatch))
34244 (home-page "https://github.com/pythological/etuples")
34245 (synopsis "S-expressions in Python")
34246 (description
34247 "This library implements eval'able S-expression in Python using tuple-like objects.")
34248 (license license:asl2.0)))
34249
34250(define-public python-minikanren
34251 (package
34252 (name "python-minikanren")
34253 (version "1.0.5")
34254 (source
34255 (origin
34256 (method git-fetch)
34257 (uri (git-reference
34258 (url "https://github.com/pythological/kanren")
34259 (commit (string-append "v" version))))
34260 (file-name (git-file-name name version))
34261 (sha256
34262 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34263 (build-system pyproject-build-system)
34264 (arguments
34265 (list
34266 ;; 60 passed, 3 skipped, 23 deselected
34267 #:test-flags
34268 #~(list "-k" (string-join
34269 ;; XXX: 16 tests fail with assertion not equal, check why.
34270 (list "not test_basics"
34271 "test_eq_assoc"
34272 "test_eq_assoccomm"
34273 "test_eq_comm"
34274 "test_map_anyo"
34275 "test_map_anyo_misc"
34276 "test_map_anyo_reverse"
34277 "test_reduceo"
34278 "test_walko"
34279 "test_walko_reverse")
34280 " and not "))))
34281 (native-inputs
34282 (list python-pytest
34283 python-setuptools))
34284 (propagated-inputs
34285 (list python-cons
34286 python-etuples
34287 python-logical-unification
34288 python-multipledispatch
34289 python-toolz
34290 python-typing-extensions))
34291 (home-page "https://github.com/pythological/kanren")
34292 (synopsis "Relational logic programming in pure Python")
34293 (description
34294 "The minikanren library provides an algorithmic core for computer algebra
34295systems in Python.")
34296 (license license:bsd-3)))
34297
34298(define-public python-dotenv
34299 (package
34300 (name "python-dotenv")
34301 (version "1.1.1")
34302 (source
34303 (origin
34304 (method url-fetch)
34305 (uri (pypi-uri "python_dotenv" version))
34306 (sha256
34307 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
34308 (build-system pyproject-build-system)
34309 (native-inputs
34310 (list python-pytest
34311 python-setuptools
34312 python-sh))
34313 (propagated-inputs
34314 (list python-click))
34315 (home-page "https://saurabh-kumar.com/python-dotenv/")
34316 (synopsis "Setup environment variables according to .env files")
34317 (description
34318 "This package provides the @code{python-dotenv} Python module to read
34319key-value pairs from a @code{.env} file and set them as environment variables.")
34320 (license license:bsd-3)))
34321
34322;; Old version just for docker-compose; remove once that is updated.
34323(define-public python-dotenv-0.13.0
34324 (package (inherit python-dotenv)
34325 (name "python-dotenv")
34326 (version "0.13.0")
34327 (source
34328 (origin
34329 (method url-fetch)
34330 (uri (pypi-uri "python-dotenv" version))
34331 (sha256
34332 (base32
34333 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34334 (arguments
34335 `(#:phases
34336 (modify-phases %standard-phases
34337 (replace 'check
34338 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34339 (when tests?
34340 (add-installed-pythonpath inputs outputs)
34341 (setenv "PATH" (string-append (getenv "PATH") ":"
34342 (assoc-ref outputs "out") "/bin"))
34343 ;; Skip the ipython tests.
34344 (delete-file "tests/test_ipython.py")
34345 (invoke "python" "-m" "pytest")))))))
34346 (native-inputs
34347 (modify-inputs native-inputs
34348 (append python-mock)
34349 (replace "python-sh" python-sh-1)))))
34350
34351(define-public python-braintree
34352 (package
34353 (name "python-braintree")
34354 (version "4.40.0")
34355 (source
34356 (origin
34357 (method url-fetch)
34358 (uri (pypi-uri "braintree" version))
34359 (sha256
34360 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34361 (build-system pyproject-build-system)
34362 (arguments (list #:tests? #f)) ; No tests.
34363 (native-inputs (list python-setuptools))
34364 (propagated-inputs (list python-requests))
34365 (home-page
34366 "https://developers.braintreepayments.com/python/sdk/server/overview")
34367 (synopsis "Braintree Python Library")
34368 (description
34369 "The Braintree Python SDK provides integration access to the Braintree
34370Gateway. Braintree is a US-based payments service provider.")
34371 (license license:expat)))
34372
34373(define-public python-markuppy
34374 (package
34375 (name "python-markuppy")
34376 (version "1.18")
34377 (source
34378 (origin
34379 (method git-fetch)
34380 (uri (git-reference
34381 (url "https://github.com/tylerbakke/MarkupPy")
34382 (commit (string-append "v" version))))
34383 (file-name (git-file-name name version))
34384 (sha256
34385 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34386 (build-system pyproject-build-system)
34387 (native-inputs (list python-pytest python-setuptools))
34388 (home-page "https://github.com/tylerbakke/MarkupPy")
34389 (synopsis "Pythonic HTML/XML generator")
34390 (description
34391 "This Python module attempts to make it easier to generate HTML/XML from
34392a Python program in an customizable and pythonic way.")
34393 (license license:expat)))
34394
34395(define-public python-csb43
34396 (package
34397 (name "python-csb43")
34398 (version "1.0.0")
34399 (source
34400 (origin
34401 (method git-fetch)
34402 (uri (git-reference
34403 (url "https://bitbucket.org/wmj/csb43")
34404 (commit version)))
34405 (file-name (git-file-name name version))
34406 (sha256
34407 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34408 (build-system pyproject-build-system)
34409 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34410 (arguments
34411 (list
34412 #:phases
34413 #~(modify-phases %standard-phases
34414 (add-after 'unpack 'relax-requirements
34415 (lambda _
34416 (substitute* "pyproject.toml"
34417 (("\"deprecated ~=.*\",")
34418 "\"deprecated\",")))))))
34419 (native-inputs
34420 (list python-lxml
34421 python-pytest
34422 python-setuptools
34423 python-setuptools-scm))
34424 (propagated-inputs
34425 (list python-deprecated
34426 python-pycountry
34427 python-pyyaml
34428 python-tablib))
34429 (home-page "https://bitbucket.org/wmj/csb43")
34430 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3443143 (CSB43)")
34432 (description
34433 "This package provides tools to convert files in the format used by
34434multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34435Spanish Banking Association [AEB43]) to other formats.
34436
34437Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34438spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34439 (license license:lgpl3)))
34440
34441(define-public python-csb43-0.10
34442 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34443 ;; homebank, i18n, ofx, and utils.
34444 (package
34445 (inherit python-csb43)
34446 (name "python-csb43")
34447 (version "0.10.1")
34448 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34449 (source
34450 (origin
34451 (method git-fetch)
34452 (uri (git-reference
34453 (url "https://bitbucket.org/wmj/csb43")
34454 (commit version)))
34455 (file-name (git-file-name name version))
34456 (sha256
34457 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34458
34459(define-public python-febelfin-coda
34460 (package
34461 (name "python-febelfin-coda")
34462 (version "0.3.0")
34463 (source
34464 (origin
34465 (method hg-fetch)
34466 (uri (hg-reference
34467 (url "https://foss.heptapod.net/tryton/coda")
34468 (changeset version)))
34469 (file-name (string-append name "-" version "-checkout"))
34470 (sha256
34471 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34472 (build-system pyproject-build-system)
34473 (arguments
34474 (list
34475 #:test-backend #~'unittest
34476 #:phases
34477 #~(modify-phases %standard-phases
34478 (add-after 'install 'remove-installed-tests
34479 (lambda* (#:key inputs outputs #:allow-other-keys)
34480 (with-directory-excursion (site-packages inputs outputs)
34481 (for-each delete-file
34482 (list "coda/test.py"
34483 "coda/test_readme.py"))))))))
34484 (native-inputs (list python-setuptools))
34485 (home-page "https://coda.b2ck.com/")
34486 (synopsis "Module to parse Belgian CODA files")
34487 (description
34488 "This package provides a module to parse Coded statement of account
34489(CODA) files as defined be the Belgian Febelfin bank standard.")
34490 (license license:bsd-3)))
34491
34492(define-public python-ofxparse
34493 (package
34494 (name "python-ofxparse")
34495 (version "0.21")
34496 (source
34497 (origin
34498 (method url-fetch)
34499 (uri (pypi-uri "ofxparse" version))
34500 (sha256
34501 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34502 (build-system pyproject-build-system)
34503 (native-inputs (list python-pynose python-setuptools))
34504 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34505 (home-page "http://sites.google.com/site/ofxparse")
34506 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34507format")
34508 (description "@code{ofxparse} is a parser for Open Financial
34509Exchange (.ofx) format files. OFX files are available from almost any online
34510banking site, so they work well if you want to pull together your finances
34511from multiple sources. Online trading accounts also often provide account
34512statements in OFX files.")
34513 (license license:expat)))
34514
34515(define-public python-rfc3339-validator
34516 (package
34517 (name "python-rfc3339-validator")
34518 (version "0.1.4")
34519 (source
34520 (origin
34521 (method url-fetch)
34522 (uri (pypi-uri "rfc3339_validator" version))
34523 (sha256
34524 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34525 (build-system pyproject-build-system)
34526 (native-inputs
34527 (list python-pytest
34528 python-setuptools
34529 python-strict-rfc3339))
34530 (propagated-inputs
34531 (list python-six))
34532 (home-page "https://github.com/naimetti/rfc3339-validator")
34533 (synopsis "Python RFC3339 validator")
34534 (description "This package provides a pure Python RFC3339 validator.")
34535 (license license:expat)))
34536
34537(define-public python-platformdirs
34538 ;; Try to update simultaneously with the bootstrap version in
34539 ;; (gnu packages python-build).
34540 (package
34541 (name "python-platformdirs")
34542 (version "4.3.6")
34543 (source
34544 (origin
34545 (method url-fetch)
34546 (uri (pypi-uri "platformdirs" version))
34547 (sha256
34548 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34549 (build-system pyproject-build-system)
34550 (native-inputs
34551 (list python-appdirs
34552 python-hatchling
34553 python-hatch-vcs
34554 python-pytest
34555 python-pytest-mock))
34556 (home-page "https://github.com/platformdirs/platformdirs")
34557 (synopsis "Determine the appropriate platform-specific directories")
34558 (description "When writing applications, finding the right location to
34559store user data and configuration varies per platform. Even for
34560single-platform apps, there may by plenty of nuances in figuring out the right
34561location. This small Python module determines the appropriate
34562platform-specific directories, e.g. the ``user data dir''.")
34563 (license license:expat)))
34564
34565(define-public python-json2html
34566 (package
34567 (name "python-json2html")
34568 (version "1.3.0")
34569 (source
34570 (origin
34571 (method git-fetch)
34572 (uri (git-reference
34573 (url "https://github.com/softvar/json2html")
34574 (commit (string-append "v" version))))
34575 (file-name (git-file-name name version))
34576 (sha256
34577 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34578 (build-system pyproject-build-system)
34579 (arguments
34580 (list
34581 #:test-backend #~'custom
34582 #:test-flags #~(list "test/run_tests.py")))
34583 (native-inputs (list python-setuptools))
34584 (home-page "https://github.com/softvar/json2html")
34585 (synopsis "Convert JSON to HTML table")
34586 (description
34587 "@code{python-json2html} is a python module to convert JSON into a human
34588readable HTML table representation.")
34589 (license license:expat)))
34590
34591(define-public python-face
34592 (package
34593 (name "python-face")
34594 (version "24.0.0")
34595 (source
34596 (origin
34597 (method git-fetch)
34598 (uri (git-reference
34599 (url "https://github.com/mahmoud/face")
34600 (commit (string-append "v" version))))
34601 (file-name (git-file-name name version))
34602 (sha256
34603 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34604 (build-system pyproject-build-system)
34605 (native-inputs (list python-pytest python-setuptools))
34606 (propagated-inputs (list python-boltons))
34607 (home-page "https://github.com/mahmoud/face")
34608 (synopsis "CLI parsing and dispatching microframework")
34609 (description "@code{python-face} is a Pythonic microframework for building
34610command-line applications.
34611
34612@itemize
34613@item First-class subcommand support
34614@item Powerful middleware architecture
34615@item Separate parser layer
34616@item Built-in flagfile support
34617@item Handy testing utilities
34618@item Themeable help display
34619@end itemize")
34620 (license license:bsd-3)))
34621
34622(define-public python-glom
34623 (package
34624 (name "python-glom")
34625 (version "24.11.0")
34626 (source
34627 (origin
34628 (method git-fetch)
34629 (uri (git-reference
34630 (url "https://github.com/mahmoud/glom")
34631 (commit (string-append "v" version))))
34632 (file-name (git-file-name name version))
34633 (sha256
34634 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34635 (build-system pyproject-build-system)
34636 (native-inputs
34637 (list python-pytest
34638 python-pyyaml
34639 python-setuptools))
34640 (propagated-inputs
34641 (list python-attrs
34642 python-boltons
34643 python-face))
34644 (home-page "https://github.com/mahmoud/glom")
34645 (synopsis "Declaratively restructure data")
34646 (description "Real applications have real data, and real data
34647nests---objects inside of objects inside of lists of objects. glom is a new
34648and powerful way to handle real-world data, featuring:
34649
34650@itemize
34651@item Path-based access to nested data structures
34652@item Readable, meaningful error messages
34653@item Declarative data transformation, using lightweight, Pythonic specifications
34654@item Built-in data exploration and debugging features
34655@end itemize")
34656 (license license:bsd-3)))
34657
34658(define-public python-box
34659 (package
34660 (name "python-box")
34661 (version "7.3.2")
34662 (source
34663 (origin
34664 (method git-fetch)
34665 (uri
34666 (git-reference
34667 (url "https://github.com/cdgriffith/Box")
34668 (commit version)))
34669 (file-name (git-file-name name version))
34670 (sha256
34671 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34672 (build-system pyproject-build-system)
34673 (arguments
34674 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34675 (native-inputs
34676 (list python-pytest
34677 python-setuptools))
34678 (propagated-inputs
34679 (list python-msgpack
34680 python-ruamel.yaml
34681 python-tomli-w))
34682 (home-page "https://github.com/cdgriffith/Box")
34683 (synopsis "Advanced Python dictionaries with dot notation access")
34684 (description
34685 "This package provides the @code{python-box} Python module.
34686It implements advanced Python dictionaries with dot notation access.")
34687 (license license:expat)))
34688
34689(define-public python-fields
34690 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34691 (revision "0"))
34692 (package
34693 (name "python-fields")
34694 (version (git-version "5.0.0" revision commit))
34695 (source
34696 (origin
34697 (method git-fetch)
34698 (uri (git-reference
34699 (url "https://github.com/ionelmc/python-fields")
34700 (commit commit)))
34701 (file-name (git-file-name name version))
34702 (sha256
34703 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34704 (build-system pyproject-build-system)
34705 (arguments
34706 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34707 (native-inputs (list python-pytest-8
34708 python-pytest-benchmark
34709 python-setuptools
34710 python-wheel))
34711 (home-page "https://python-fields.readthedocs.io/")
34712 (synopsis "Python container class boilerplate killer")
34713 (description "Avoid repetitive boilerplate code in Python classes.")
34714 (license license:bsd-3))))
34715
34716(define-public python-aspectlib
34717 (package
34718 (name "python-aspectlib")
34719 (version "2.0.0")
34720 (source
34721 (origin
34722 (method git-fetch)
34723 (uri (git-reference
34724 (url "https://github.com/ionelmc/python-aspectlib")
34725 (commit (string-append "v" version))))
34726 (file-name (git-file-name name version))
34727 (sha256
34728 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34729 (build-system pyproject-build-system)
34730 (arguments
34731 (list
34732 #:test-flags
34733 #~(list ;; XXX: Require more dependencies.
34734 "--ignore=tests/test_integrations.py"
34735 "--ignore=tests/test_integrations_py3.py")
34736 #:phases
34737 #~(modify-phases %standard-phases
34738 (add-after 'unpack 'fix-pytest-config
34739 (lambda _
34740 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34741 ;; The (path: py.path.local) argument is deprecated, please
34742 ;; use (collection_path: pathlib.Path).
34743 (delete-file "pytest.ini"))))))
34744 (native-inputs
34745 (list python-pytest-8
34746 python-setuptools
34747 python-tornado))
34748 (propagated-inputs
34749 (list python-fields))
34750 (home-page "https://github.com/ionelmc/python-aspectlib")
34751 (synopsis "Python monkey-patching and decorators")
34752 (description
34753 "This package provides an aspect-oriented programming, monkey-patch
34754and decorators library. It is useful when changing behavior in existing
34755code is desired. It includes tools for debugging and testing:
34756simple mock/record and a complete capture/replay framework.")
34757 (license license:bsd-2)))
34758
34759(define-public python-ijson
34760 (package
34761 (name "python-ijson")
34762 (version "3.5.0")
34763 (source
34764 (origin
34765 (method url-fetch)
34766 (uri (pypi-uri "ijson" version))
34767 (sha256
34768 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34769 (inputs
34770 ;; yajl is optional, but compiling with it makes faster
34771 ;; backends available to ijson:
34772 (list yajl))
34773 (native-inputs
34774 (list python-pytest
34775 python-setuptools))
34776 (build-system pyproject-build-system)
34777 (home-page "https://github.com/ICRAR/ijson")
34778 (synopsis "Iterative JSON parser with Python iterator interfaces")
34779 (description
34780 "Ijson is an iterative JSON parser with standard Python iterator
34781interfaces.")
34782 (license license:bsd-3)))
34783
34784(define-public python-ordered-set
34785 (package
34786 (name "python-ordered-set")
34787 (version "4.1.0")
34788 (source
34789 (origin
34790 (method url-fetch)
34791 (uri (pypi-uri "ordered-set" version))
34792 (sha256
34793 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34794 (build-system pyproject-build-system)
34795 (native-inputs (list python-cython python-flit-core python-pytest))
34796 (home-page "https://github.com/simonpercivall/orderedset")
34797 (synopsis "Ordered Set implementation in Cython")
34798 (description "This library provides an @code{OrderedSet} data type that
34799works like a regular set, but remembers insertion order. It supports the full
34800Python @code{set} interface.")
34801 (license license:asl2.0)))
34802
34803(define-public python-orgparse
34804 (package
34805 (name "python-orgparse")
34806 (version "0.4.20251020")
34807 (source
34808 (origin
34809 (method git-fetch)
34810 (uri (git-reference
34811 (url "https://github.com/karlicoss/orgparse")
34812 (commit (string-append "v" version))))
34813 (file-name (git-file-name name version))
34814 (sha256
34815 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34816 (build-system pyproject-build-system)
34817 (arguments
34818 (list
34819 #:test-flags
34820 #~(list "--ignore-glob=doc/*"
34821 ;; XXX: Unclear why those tests fail.
34822 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34823 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34824 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34825 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
34826 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34827 (home-page "https://github.com/karlicoss/orgparse")
34828 (synopsis "Emacs Org mode parser in Python")
34829 (description
34830 "This package is a Python module for reading Emacs Org mode files.")
34831 (license license:bsd-3)))
34832
34833(define-public dynaconf
34834 (package
34835 (name "dynaconf")
34836 (version "3.2.11")
34837 (source
34838 (origin
34839 (method git-fetch)
34840 (uri
34841 (git-reference
34842 (url "https://github.com/dynaconf/dynaconf")
34843 (commit version)))
34844 (file-name (git-file-name name version))
34845 (sha256
34846 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34847 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34848 (modules '((guix build utils)))
34849 ;; Remove vendored dependencies
34850 (snippet
34851 #~(let ((unvendor '("click" "ruamel" "toml")))
34852 (with-directory-excursion "dynaconf/vendor"
34853 (for-each delete-file-recursively unvendor))
34854 (substitute* (find-files "." "\\.py$")
34855 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34856 _ target rest)
34857 (string-append "import " target rest))
34858 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34859 target))))))
34860 (build-system pyproject-build-system)
34861 (arguments
34862 (list
34863 #:test-flags
34864 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34865 "-k" #$(let ((click-tests '("test_negative_get"
34866 "test_not_found_key_exit_error[get]"
34867 "test_inspect_invalid_format")))
34868 ;; Disable integration tests
34869 (string-append "not integration and not "
34870 ;; These tests fail because we use
34871 ;; Click 8.* instead of Click 7
34872 (string-join click-tests " and not ")))
34873 "tests")
34874 #:phases
34875 #~(modify-phases %standard-phases
34876 (add-after 'unpack 'patch-for-click-8
34877 (lambda _
34878 (substitute* "dynaconf/cli.py"
34879 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34880 "sys.argv[1:]")))))))
34881 (propagated-inputs
34882 (list python-click python-configobj python-ruamel.yaml-0.16
34883 python-toml python-tomli))
34884 (native-inputs
34885 (list python-django
34886 python-flask
34887 python-pytest
34888 python-pytest-mock
34889 python-setuptools))
34890 (home-page "https://www.dynaconf.com/")
34891 (synopsis "The dynamic configurator for your Python project")
34892 (description
34893 "This package provides @code{dynaconf} the dynamic configurator manager for
34894your Python project. It provides features such as:
34895
34896@itemize
34897@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34898@item Settings management (default values, validation, parsing, templating);
34899@item Protection of sensitive information (passwords/tokens);
34900@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34901loaders;
34902@item Full support for environment variables to override existing settings
34903(dotenv support included);
34904@item Optional layered system for multiple environments @code{[default,
34905development, testing, production]};
34906@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34907@item Built-in extensions for Django and Flask web frameworks;
34908@item CLI for common operations such as @code{init, list, write, validate, export}.
34909@end itemize")
34910 (license license:expat)))
34911
34912(define-public python-pudb
34913 ;; TODO: Rename to pudb as it's a final program.
34914 (package
34915 (name "python-pudb")
34916 (version "2025.1.3")
34917 (source
34918 (origin
34919 (method url-fetch)
34920 (uri (pypi-uri "pudb" version))
34921 (sha256
34922 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34923 (build-system pyproject-build-system)
34924 (arguments
34925 (list
34926 #:phases
34927 #~(modify-phases %standard-phases
34928 (add-before 'check 'pre-check
34929 (lambda _
34930 (setenv "HOME" "/tmp"))))))
34931 (native-inputs
34932 (list python-hatchling
34933 python-pytest
34934 python-pytest-mock
34935 python-numpy))
34936 (propagated-inputs
34937 (list python-jedi
34938 python-packaging
34939 python-pygments
34940 python-typing-extensions
34941 python-urwid
34942 python-urwid-readline))
34943 (home-page "https://documen.tician.de/pudb/")
34944 (synopsis "Console-based Python debugger")
34945 (description
34946 "@command{pudb} is a full-screen, console-based Python debugger providing
34947all the niceties of modern GUI-based debuggers in a more lightweight and
34948keyboard-friendly package.")
34949 (license license:expat)))
34950
34951(define-public python-iwlib
34952 (package
34953 (name "python-iwlib")
34954 (version "1.7.0")
34955 (source
34956 (origin
34957 (method git-fetch)
34958 (uri (git-reference
34959 (url "https://github.com/nhoad/python-iwlib")
34960 (commit version)))
34961 (file-name (git-file-name name version))
34962 (sha256
34963 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34964 (build-system pyproject-build-system)
34965 (arguments
34966 (list
34967 #:phases
34968 #~(modify-phases %standard-phases
34969 (add-before 'check 'cleanup
34970 (lambda _
34971 (delete-file-recursively "iwlib"))))))
34972 (native-inputs (list python-pytest python-setuptools))
34973 (inputs (list wireless-tools))
34974 (propagated-inputs (list python-cffi))
34975 (home-page "https://github.com/nhoad/python-iwlib")
34976 (synopsis "Python module to interface with iwlib")
34977 (description
34978 "This package provides a Python interface to iw wireless tools.")
34979 (license license:gpl2)))
34980
34981(define-public python-pdoc3
34982 (package
34983 (name "python-pdoc3")
34984 (version "0.11.6")
34985 (source
34986 (origin
34987 (method url-fetch)
34988 (uri (pypi-uri "pdoc3" version))
34989 (sha256
34990 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34991 (build-system pyproject-build-system)
34992 (arguments
34993 (list #:test-backend #~'unittest
34994 #:test-flags #~(list "-v" "pdoc.test")))
34995 (native-inputs
34996 (list python-setuptools-git
34997 python-setuptools
34998 python-setuptools-scm))
34999 (propagated-inputs
35000 (list python-mako
35001 python-markdown))
35002 (home-page "https://pdoc3.github.io/pdoc/")
35003 (synopsis "Auto-generate API documentation for Python projects")
35004 (description
35005 "This package auto-generates API documentation from Python projects
35006already existing modules and objects docstrings.")
35007 (license license:agpl3+)))
35008
35009(define-public python-piexif
35010 (package
35011 (name "python-piexif")
35012 (version "1.1.3")
35013 (source
35014 (origin
35015 (method git-fetch)
35016 (uri (git-reference
35017 (url "https://github.com/hMatoba/Piexif")
35018 (commit version)))
35019 (file-name (git-file-name name version))
35020 (sha256
35021 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35022 (patches
35023 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35024 (build-system pyproject-build-system)
35025 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35026 (home-page "https://github.com/hMatoba/Piexif")
35027 (synopsis "Simplify exif manipulations with Python")
35028 (description
35029 "Piexif simplifies interacting with EXIF data in Python. It includes the
35030tools necessary for extracting, creating, manipulating, converting and writing
35031EXIF data to JPEG, WebP and TIFF files.")
35032 (license license:expat)))
35033
35034(define-public python-pyrss2gen
35035 (package
35036 (name "python-pyrss2gen")
35037 (version "1.1")
35038 (source
35039 (origin
35040 (method url-fetch)
35041 (uri (pypi-uri "PyRSS2Gen" version))
35042 (sha256
35043 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35044 (build-system pyproject-build-system)
35045 (arguments (list #:tests? #f)) ; No tests.
35046 (native-inputs (list python-setuptools))
35047 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35048 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35049 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35050PyRSS2Gen builds the feed up by using a XML generator.")
35051 (license license:bsd-3)))
35052
35053(define-public python-doit
35054 (package
35055 (name "python-doit")
35056 (version "0.36.0")
35057 (source
35058 (origin
35059 (method url-fetch)
35060 (uri (pypi-uri "doit" version))
35061 (sha256
35062 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35063 (build-system pyproject-build-system)
35064 ;; This is not a serious test failure. It's probably due to the load path
35065 ;; at test time.
35066 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35067 (propagated-inputs
35068 (list python-cloudpickle python-importlib-metadata))
35069 (native-inputs (list python-pytest python-setuptools python-wheel))
35070 (home-page "https://pydoit.org")
35071 (synopsis "Automation tool to execute any kind of task in a build-tools
35072fashion")
35073 (description "doit is an automation tool that brings the power of
35074build-tools to execute any kind of task.
35075
35076A task describes some computation to be done (actions), and contains some
35077extra meta-data. The actions can be external programs or Python functions. A
35078single task may define more than one action. doit uses the task’s meta-data
35079to:
35080
35081@itemize
35082@item cache task results
35083@item correct execution order
35084@item parallel execution
35085@item powerful dependency system
35086@end itemize")
35087 (license license:expat)))
35088
35089(define-public python-phpserialize
35090 (package
35091 (name "python-phpserialize")
35092 (version "1.3")
35093 (source
35094 (origin
35095 (method git-fetch)
35096 (uri (git-reference
35097 (url "https://github.com/mitsuhiko/phpserialize")
35098 (commit version)))
35099 (file-name (git-file-name name version))
35100 (sha256
35101 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35102 (build-system pyproject-build-system)
35103 (arguments
35104 (list
35105 ;; XXX: Unclear why this test fails.
35106 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35107 #:phases
35108 #~(modify-phases %standard-phases
35109 (add-after 'unpack 'patch-tests
35110 (lambda _
35111 (substitute* "tests.py"
35112 (("assert_\\(b'WP_User' in x\\)")
35113 "assertIn(b'WP_User', x)")))))))
35114 (native-inputs (list python-pytest python-setuptools))
35115 (home-page "https://github.com/mitsuhiko/phpserialize")
35116 (synopsis "Python port of the serialize and unserialize functions of PHP")
35117 (description
35118 "This package provides a port of the @code{serialize} and
35119@code{unserialize} functions of PHP for Python.")
35120 (license license:bsd-3)))
35121
35122(define-public python-pycapnp
35123 (package
35124 (name "python-pycapnp")
35125 (version "2.2.4")
35126 (source
35127 (origin
35128 (method git-fetch)
35129 (uri (git-reference
35130 (url "https://github.com/capnproto/pycapnp")
35131 (commit (string-append "v" version))))
35132 (file-name (git-file-name name version))
35133 (sha256
35134 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35135 (build-system pyproject-build-system)
35136 (arguments
35137 (list
35138 #:phases
35139 #~(modify-phases %standard-phases
35140 (add-before 'build 'set-force-system-capnp
35141 (lambda _
35142 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35143 (add-after 'install 'copy-missing-schemas
35144 (lambda _
35145 (let* ((out #$output)
35146 (capnp-clang #$(this-package-input "capnproto-clang"))
35147 (site-pkgs (car (find-files (string-append out "/lib")
35148 "^site-packages$"
35149 #:directories? #t)))
35150 (target-dir (string-append site-pkgs "/capnp"))
35151 (schema-files (find-files
35152 (string-append capnp-clang
35153 "/include/capnp")
35154 "\\.capnp$")))
35155 (for-each (lambda (file)
35156 (install-file file target-dir)) schema-files))))
35157 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35158 ;; module named 'schema_capnp'". This module is generated
35159 ;; dynamically via import hooks at runtime
35160 (delete 'sanity-check))))
35161 (native-inputs (list pkg-config
35162 python-cython
35163 python-jinja2
35164 python-pkgconfig
35165 python-pytest
35166 python-pytest-asyncio
35167 python-setuptools))
35168 (inputs (list capnproto-clang))
35169 (home-page "https://github.com/capnproto/pycapnp")
35170 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35171 (description
35172 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35173 (license license:bsd-2)))
35174
35175(define-public python-pydevtool
35176 (package
35177 (name "python-pydevtool")
35178 (version "0.3.0")
35179 (source
35180 (origin
35181 (method url-fetch)
35182 (uri (pypi-uri "pydevtool" version))
35183 (sha256
35184 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35185 (build-system pyproject-build-system)
35186 (arguments (list #:tests? #false)) ;no tests
35187 (propagated-inputs (list python-doit python-rich-click))
35188 (native-inputs (list python-setuptools python-wheel))
35189 (home-page "https://github.com/pydoit/pydevtool")
35190 (synopsis "CLI dev tools powered by pydoit")
35191 (description "This package provides command line tools, powered by pydoit.
35192It offers integration with @code{click} and @code{rich} for custom CLI and
35193these linters: @code{pycodestlye}, @code{pyflakes}")
35194 (license license:expat)))
35195
35196(define-public nikola
35197 (package
35198 (name "nikola")
35199 (version "8.3.3")
35200 (source
35201 (origin
35202 (method url-fetch)
35203 (uri (pypi-uri "nikola" version))
35204 (sha256
35205 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35206 (build-system pyproject-build-system)
35207 (arguments
35208 (list
35209 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35210 #:test-flags
35211 #~(list "--durations=10"
35212 "--ignore=tests/integration/test_dev_server.py"
35213 "-k" (string-join
35214 ;; Some time difference in example tests.
35215 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35216 "test_serves_root_dir[https://example.org:1234/blog]"
35217 "test_serves_root_dir[https://example.org:3456/blog/]"
35218 "test_serves_root_dir[https://example.org]"
35219 ;; AssertionError: Calls not found.
35220 "test_write_content_does_not_detroy_text"
35221 ;; AssertionError: assert 'January 10, 2006,
35222 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35223 ;; 12:34:56\u202fPM EST'
35224 "test_format_date_timezone")
35225 " and not "))))
35226 (native-inputs
35227 (list nss-certs-for-test
35228 python-feedparser
35229 python-freezegun
35230 python-pytest
35231 python-setuptools))
35232 (inputs
35233 (list python-babel
35234 python-blinker
35235 python-dateutil
35236 python-docutils
35237 python-doit
35238 python-jinja2 ;; for themes
35239 python-lxml
35240 python-mako
35241 python-markdown
35242 python-natsort
35243 python-notebook ;; for ipynb
35244 python-phpserialize ;; for wordpress import
35245 python-piexif
35246 python-pillow
35247 python-pygments
35248 python-pyrss2gen
35249 python-requests
35250 python-ruamel.yaml ;; for YAML metadata
35251 python-toml
35252 python-unidecode
35253 python-yapsy))
35254 (home-page "https://getnikola.com/")
35255 (synopsis "Modular, fast and simple static website and blog generator")
35256 (description "Nikola generates static websites and blogs. Out of the box,
35257it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35258and has plugins for many other formats.")
35259 (license license:expat)))
35260
35261(define-public nbss-upload
35262 (package
35263 (name "nbss-upload")
35264 (version "0.1")
35265 (source
35266 (origin
35267 (method git-fetch)
35268 (uri (git-reference
35269 (url "https://github.com/notebook-sharing-space/nbss-upload")
35270 (commit (string-append "v" version))))
35271 (file-name (git-file-name name version))
35272 (sha256
35273 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35274 (build-system pyproject-build-system)
35275 (arguments (list #:tests? #f)) ;no tests
35276 (native-inputs (list python-setuptools))
35277 (propagated-inputs (list python-requests))
35278 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35279 (synopsis "Upload notebooks to a notebooksharing.space instance")
35280 (description
35281 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35282notebooksharing.space instance.")
35283 (license license:bsd-3)))
35284
35285(define-public python-reedsolo
35286 (package
35287 (name "python-reedsolo")
35288 (version "1.7.0")
35289 (source
35290 (origin
35291 (method git-fetch)
35292 (uri (git-reference
35293 (url "https://github.com/tomerfiliba/reedsolomon")
35294 (commit (string-append "v" version))))
35295 (file-name (git-file-name name version))
35296 (sha256
35297 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35298 (build-system pyproject-build-system)
35299 (native-inputs (list python-pytest python-setuptools))
35300 (home-page "https://github.com/tomerfiliba/reedsolomon")
35301 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35302 (description
35303 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35304the tutorial at Wikiversity. This is a burst-type implementation, so that it
35305supports any Galois field higher than 2^3, but not binary streams.")
35306 (license license:public-domain)))
35307
35308(define-public python-esprima
35309 (package
35310 (name "python-esprima")
35311 (version "4.0.1")
35312 (source
35313 (origin
35314 (method git-fetch)
35315 (uri (git-reference
35316 (url "https://github.com/Kronuz/esprima-python")
35317 (commit (string-append "v" version))))
35318 (file-name (git-file-name name version))
35319 (sha256
35320 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35321 (build-system pyproject-build-system)
35322 (arguments
35323 (list
35324 ;; XXX: pytest fails to collect tests, and a few tests are failing
35325 ;; using unittest backend. In particular, offsets with math characters
35326 ;; and uncompiled regexps.
35327 #:tests? #f
35328 #:test-backend #~'unittest
35329 #:test-flags
35330 #~(list "-k"
35331 (string-join (list
35332 ;; XXX: Character offsets with maths.
35333 "not test_math_alef"
35334 "test_math_dal_part"
35335 "test_math_kaf_lam"
35336 "test_math_zain_start"
35337 ;; XXX: Uncompiled regexps.
35338 "test_yield_arg_regexp1"
35339 "test_yield_arg_regexp2"
35340 "test_migrated_0005_source"
35341 "test_u_flag_valid_range"
35342 "test_migrated_0049"
35343 "test_migrated_0050_source")
35344 " and not "))))
35345 (native-inputs (list python-setuptools))
35346 (home-page "https://github.com/Kronuz/esprima-python")
35347 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35348 (description
35349 "This package provides ECMAScript parsing infrastructure for
35350multipurpose analysis in Python.")
35351 (license license:bsd-3)))
35352
35353(define-public python-psycopg2-binary
35354 (package
35355 (name "python-psycopg2-binary")
35356 (version "2.9.10")
35357 (source
35358 (origin
35359 (method url-fetch)
35360 (uri (pypi-uri "psycopg2-binary" version))
35361 (sha256
35362 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35363 (build-system pyproject-build-system)
35364 (arguments
35365 ;; Tests are disable because they need a live instance of PostgreSQL.
35366 '(#:tests? #f))
35367 (native-inputs (list python-setuptools python-wheel))
35368 (inputs (list postgresql))
35369 (home-page "https://psycopg.org/")
35370 (synopsis "PostgreSQL database adapter for Python")
35371 (description
35372 "Psycopg is a PostgreSQL database adapter for the Python programming
35373language. Its main features are the complete implementation of the Python DB
35374API 2.0 specification and the thread safety (several threads can share the
35375same connection). It was designed for heavily multi-threaded applications
35376that create and destroy lots of cursors and make a large number of concurrent
35377@code{INSERT}s or @code{UPDATE}s.
35378
35379Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35380being both efficient and secure. It features client-side and
35381server-side cursors, asynchronous communication and notifications,
35382@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35383out-of-the-box and adapted to matching PostgreSQL data types;
35384adaptation can be extended and customized thanks to a flexible objects
35385adaptation system.
35386
35387Psycopg 2 is both Unicode and Python 3 friendly.")
35388 (license license:lgpl3+)))
35389
35390(define-public python-pyfuse3
35391 (package
35392 (name "python-pyfuse3")
35393 (version "3.4.2")
35394 (source
35395 (origin
35396 (method git-fetch)
35397 (uri (git-reference
35398 (url "https://github.com/libfuse/pyfuse3")
35399 (commit (string-append "v" version))))
35400 (file-name (git-file-name name version))
35401 (sha256
35402 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35403 (build-system pyproject-build-system)
35404 (arguments
35405 (list
35406 #:test-flags
35407 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35408 #~(list "--deselect=test/test_api.py::test_listdir")))
35409 (native-inputs
35410 (list pkg-config
35411 python-cython
35412 python-pytest
35413 python-setuptools
35414 python-setuptools-scm))
35415 (inputs
35416 (list fuse))
35417 (propagated-inputs
35418 (list python-trio))
35419 (home-page "https://github.com/libfuse/pyfuse3")
35420 (synopsis "Python bindings to FUSE 3")
35421 (description "This package provides Python 3 bindings for libfuse 3 with
35422async I/O support.")
35423 (license license:gpl2+)))
35424
35425(define-public python-ansi-styles
35426 ;; Releases are not tagged in Git:
35427 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35428 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35429 (revision "0"))
35430 (package
35431 (name "python-ansi-styles")
35432 (version (git-version "0.2.2" revision commit))
35433 (source
35434 (origin
35435 (method git-fetch)
35436 (uri (git-reference
35437 (url "https://github.com/shawwn/ansi-styles-python")
35438 (commit commit)))
35439 (file-name (git-file-name name version))
35440 (sha256
35441 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35442 (build-system pyproject-build-system)
35443 (native-inputs (list python-poetry-core python-pytest))
35444 (home-page "https://github.com/shawwn/ansi-styles-python")
35445 (synopsis "ANSI escape codes for styling strings in the terminal")
35446 (description
35447 "This Python package provide ANSI escape codes
35448for styling strings in the terminal.")
35449 (license license:expat))))
35450
35451(define-public python-multipart
35452 (package
35453 (name "python-multipart")
35454 (version "0.0.20")
35455 (source (origin
35456 (method url-fetch)
35457 (uri (pypi-uri "python_multipart" version))
35458 (sha256
35459 (base32
35460 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
35461 (build-system pyproject-build-system)
35462 (native-inputs
35463 (list python-hatchling
35464 python-pytest
35465 python-pyyaml))
35466 (home-page "https://github.com/andrew-d/python-multipart")
35467 (synopsis "Streaming multipart parser for Python")
35468 (description
35469 "This package provides a streaming multipart parser for Python.")
35470 (license license:asl2.0)))
35471
35472(define-public python-aiopg
35473 (package
35474 (name "python-aiopg")
35475 (version "1.4.0")
35476 (source
35477 (origin
35478 (method git-fetch)
35479 (uri (git-reference
35480 (url "https://github.com/aio-libs/aiopg")
35481 (commit (string-append "v" version))))
35482 (file-name (git-file-name name version))
35483 (sha256
35484 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35485 (build-system pyproject-build-system)
35486 (arguments
35487 (list
35488 #:tests? #f ;they need Docker
35489 #:phases
35490 #~(modify-phases %standard-phases
35491 (add-after 'unpack 'use-default-asyncio
35492 ;; async_timeout is deprecated, upstream recommends to use
35493 ;; asyncio, available since Python 3.11.
35494 (lambda _
35495 (substitute* "aiopg/pool.py"
35496 (("async_timeout") "asyncio"))))
35497 (add-after 'unpack 'relax-requirements
35498 (lambda _
35499 (substitute* "setup.py"
35500 (("psycopg2-binary") "psycopg2")
35501 ;; It's a part of Python 3.11+.
35502 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35503 (native-inputs
35504 (list python-setuptools))
35505 (propagated-inputs
35506 (list python-psycopg2))
35507 (home-page "https://aiopg.readthedocs.io")
35508 (synopsis "Postgres integration with asyncio")
35509 (description
35510 "aiopg is a library for accessing a PostgreSQL database from the
35511asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35512Psycopg database driver.")
35513 (license license:bsd-3)))
35514
35515(define-public python-shtab
35516 (package
35517 (name "python-shtab")
35518 (version "1.7.1")
35519 (source
35520 (origin
35521 (method url-fetch)
35522 (uri (pypi-uri "shtab" version))
35523 (sha256
35524 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35525 (build-system pyproject-build-system)
35526 (native-inputs
35527 (list bash
35528 python-pytest
35529 python-pytest-timeout
35530 python-setuptools
35531 python-setuptools-scm
35532 python-wheel))
35533 (home-page "https://github.com/iterative/shtab")
35534 (synopsis "Automagic shell tab completion for Python CLI applications")
35535 (description
35536 "This package automatically generates shell tab completion scripts for
35537Python CLI apps.")
35538 (license license:asl2.0)))
35539
35540(define-public python-pyperf
35541 (package
35542 (name "python-pyperf")
35543 (version "2.10.0")
35544 (source
35545 (origin
35546 (method git-fetch)
35547 (uri (git-reference
35548 (url "https://github.com/psf/pyperf")
35549 (commit version)))
35550 (file-name (git-file-name name version))
35551 (sha256
35552 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35553 (build-system pyproject-build-system)
35554 (arguments
35555 (list
35556 #:test-flags
35557 #~(list "--ignore=pyperf/tests/test_examples.py")))
35558 (native-inputs
35559 (list python-psutil-bootstrap
35560 python-pytest
35561 python-setuptools))
35562 (home-page "https://github.com/psf/pyperf")
35563 (synopsis "Toolkit for running Python benchmarks")
35564 (description
35565 "The Python @code{pyperf} module is a toolkit for writing, running and
35566analyzing benchmarks. It features a simple API that can:
35567
35568@itemize
35569@item automatically calibrate a benchmark for a time budget;
35570@item spawn multiple worker processes;
35571@item compute the mean and standard deviation;
35572@item detect if a benchmark result seems unstable;
35573@item store benchmark results in JSON format;
35574@item support multiple units: seconds, bytes and integer.
35575@end itemize")
35576 (license license:expat)))
35577
35578(define-public python-pydispatcher
35579 (package
35580 (name "python-pydispatcher")
35581 (version "2.0.7")
35582 (source
35583 (origin
35584 (method url-fetch)
35585 (uri (pypi-uri "PyDispatcher" version))
35586 (sha256
35587 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35588 (build-system pyproject-build-system)
35589 (native-inputs (list python-pytest python-setuptools))
35590 (home-page "https://pydispatcher.sourceforge.net")
35591 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35592 (description
35593 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35594@code{dispatcher.py} module. It provides the Python programmer with a robust
35595mechanism for event routing within various application contexts.
35596
35597Included in the package are the robustapply and saferef modules, which
35598provide the ability to selectively apply arguments to callable objects
35599and to reference instance methods using weak-references.")
35600 (license license:bsd-3)))
35601
35602(define-public python-pyee
35603 (package
35604 (name "python-pyee")
35605 (version "13.0.1")
35606 (source
35607 (origin
35608 (method git-fetch)
35609 (uri (git-reference
35610 (url "https://github.com/jfhbrook/pyee")
35611 (commit (string-append "v" version))))
35612 (file-name (git-file-name name version))
35613 (sha256
35614 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35615 (build-system pyproject-build-system)
35616 (propagated-inputs (list python-typing-extensions))
35617 (native-inputs
35618 (list python-mock
35619 python-pytest
35620 python-pytest-asyncio
35621 python-pytest-trio
35622 python-setuptools
35623 python-trio
35624 python-twisted))
35625 (home-page "https://github.com/jfhbrook/pyee")
35626 (synopsis "Emit events with Python")
35627 (description
35628 "This package provides a port of node.js's EventEmitter to
35629python. Additionally, it includes a number of subclasses useful for
35630implementing async and threaded programming in python, such as async/await.")
35631 (license license:expat)))
35632
35633(define-public python-pypubsub
35634 (package
35635 (name "python-pypubsub")
35636 (version "4.0.3")
35637 (source
35638 (origin
35639 (method git-fetch)
35640 (uri (git-reference
35641 (url "https://github.com/schollii/pypubsub")
35642 (commit (string-append "v" version))))
35643 (file-name (git-file-name name version))
35644 (sha256
35645 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35646 (build-system pyproject-build-system)
35647 (arguments
35648 (list
35649 #:phases
35650 #~(modify-phases %standard-phases
35651 (replace 'check
35652 (lambda* (#:key tests? #:allow-other-keys)
35653 (when tests?
35654 (with-directory-excursion "tests/suite"
35655 (invoke "py.test"))))))))
35656 (native-inputs
35657 (list python-pytest
35658 python-setuptools
35659 python-wheel))
35660 (home-page "https://github.com/schollii/pypubsub")
35661 (synopsis "Python publish-subcribe library")
35662 (description
35663 "This library provides a publish-subscribe API to facilitate event-based
35664or message-based architecture in a single-process application. It is centered
35665on the notion of a topic - senders publish messages of a given topic, and
35666listeners subscribe to messages of a given topic, all inside the same
35667process.")
35668 (license license:bsd-2)))
35669
35670(define-public python-queuelib
35671 (package
35672 (name "python-queuelib")
35673 (version "1.8.0")
35674 (source
35675 (origin
35676 (method git-fetch)
35677 (uri (git-reference
35678 (url "https://github.com/scrapy/queuelib")
35679 (commit (string-append "v" version))))
35680 (file-name (git-file-name name version))
35681 (sha256
35682 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35683 (build-system pyproject-build-system)
35684 (native-inputs (list python-hatchling python-pytest))
35685 (home-page "https://github.com/scrapy/queuelib")
35686 (synopsis "Collection of queues for Python")
35687 (description
35688 "Queuelib is a Python library that implements object collections which
35689are stored in memory or persisted to disk, provide a simple API, and run fast.
35690
35691Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35692by priority and queues that are emptied in a round-robin fashion.")
35693 (license license:bsd-3)))
35694
35695(define-public python-posix-ipc
35696 (package
35697 (name "python-posix-ipc")
35698 (version "1.3.2")
35699 (source
35700 (origin
35701 (method git-fetch)
35702 (uri (git-reference
35703 (url "https://github.com/osvenskan/posix_ipc")
35704 (commit (string-append "rel" version))))
35705 (file-name (git-file-name name version))
35706 (sha256
35707 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35708 (build-system pyproject-build-system)
35709 (arguments
35710 (list
35711 #:test-flags
35712 ;; XXX: Collection fails due to stdin configuration.
35713 #~(list "--ignore=tests/test_memory.py")
35714 #:phases
35715 #~(modify-phases %standard-phases
35716 (add-after 'unpack 'set-cc-path
35717 (lambda _
35718 (setenv "CC" #$(cc-for-target)))))))
35719 (native-inputs (list python-pytest python-setuptools))
35720 (home-page "https://semanchuk.com/philip/posix_ipc/")
35721 (synopsis "POSIX IPC primitives for Python")
35722 (description
35723 "This package provides POSIX IPC primitives - semaphores, shared memory and
35724message queues for Python.")
35725 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35726
35727(define-public python-itemadapter
35728 (package
35729 (name "python-itemadapter")
35730 (version "0.12.0")
35731 (source
35732 (origin
35733 (method git-fetch)
35734 (uri (git-reference
35735 (url "https://github.com/scrapy/itemadapter")
35736 (commit (string-append "v" version))))
35737 (file-name (git-file-name name version))
35738 (sha256
35739 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35740 (build-system pyproject-build-system)
35741 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35742 (native-inputs (list python-hatchling))
35743 (home-page "https://github.com/scrapy/itemadapter")
35744 (synopsis "Common interface for data container classes")
35745 (description
35746 "The ItemAdapter class is a wrapper for data container objects, providing
35747a common interface to handle objects of different types in an uniform manner,
35748regardless of their underlying implementation.
35749
35750Currently supported types are:
35751@itemize
35752@item scrapy.item.Item
35753@item dict
35754@item dataclass-based classes
35755@item attrs-based classes
35756@item pydantic-based classes
35757@end itemize
35758
35759Additionally, interaction with arbitrary types is supported by
35760implementing a pre-defined interface.")
35761 (license license:bsd-3)))
35762
35763(define-public python-itemloaders
35764 (package
35765 (name "python-itemloaders")
35766 (version "1.3.2")
35767 (source
35768 (origin
35769 (method url-fetch)
35770 (uri (pypi-uri "itemloaders" version))
35771 (sha256
35772 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35773 (build-system pyproject-build-system)
35774 (native-inputs
35775 (list python-packaging
35776 python-pytest
35777 python-setuptools
35778 python-wheel))
35779 (propagated-inputs
35780 (list python-itemadapter python-jmespath python-parsel))
35781 (home-page "https://github.com/scrapy/itemloaders")
35782 (synopsis "Base library for scrapy's ItemLoader")
35783 (description "Itemloaders is a library that helps you collect data
35784from HTML and XML sources. It comes in handy to extract data from web
35785pages, as it supports data extraction using CSS and XPath Selectors.
35786
35787It’s specially useful when you need to standardize the data from many
35788sources. For example, it allows you to have all your casting and
35789parsing rules in a single place.")
35790 (license license:bsd-3)))
35791
35792(define-public python-iterable-io
35793 (package
35794 (name "python-iterable-io")
35795 (version "1.0.0")
35796 (source
35797 (origin
35798 (method url-fetch)
35799 (uri (pypi-uri "iterable-io" version))
35800 (sha256
35801 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35802 (build-system pyproject-build-system)
35803 (native-inputs (list python-setuptools python-pytest))
35804 (home-page "https://github.com/pR0Ps/iterable-io")
35805 (synopsis "Adapt generators and other iterables to a file-like interface")
35806 (description
35807 "@code{iterable-io} is a small Python library that provides an adapter so
35808that it's possible to read from
35809@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35810in the same way as
35811@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35812objects.")
35813 (license license:lgpl3)))
35814
35815(define-public python-iteround
35816 (package
35817 (name "python-iteround")
35818 (version "1.0.4")
35819 ;; PyPI only has wheels.
35820 (source (origin
35821 (method git-fetch)
35822 (uri (git-reference
35823 (url "https://github.com/cgdeboer/iteround")
35824 (commit (string-append "v" version))))
35825 (file-name (git-file-name name version))
35826 (sha256
35827 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35828 (build-system pyproject-build-system)
35829 (native-inputs
35830 (list python-pytest python-setuptools python-wheel))
35831 (home-page "https://github.com/cgdeboer/iteround")
35832 (synopsis "Sum-safe rounding for Iterables")
35833 (description "Iteround is a standard library sum-safe rounding library for
35834Python iterables (lists, tuples, dicts).")
35835 (license license:expat)))
35836
35837(define-public python-hypy-utils
35838 (package
35839 (name "python-hypy-utils")
35840 (version "1.0.29")
35841 (source
35842 (origin
35843 (method url-fetch)
35844 (uri (pypi-uri "hypy_utils" version))
35845 (sha256
35846 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35847 (build-system pyproject-build-system)
35848 (arguments (list #:tests? #f)) ; No tests upstream.
35849 (native-inputs (list python-setuptools))
35850 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35851 (synopsis "Python utility functions for HyDEV")
35852 (description "This module provides Python utility functions for modifying
35853and setting the color of terminal output, via HyDEV.")
35854 (license license:expat)))
35855
35856(define-public python-mike
35857 (package
35858 (name "python-mike")
35859 (version "2.1.3")
35860 (source
35861 (origin
35862 (method git-fetch) ; no tests data in PyPi package
35863 (uri (git-reference
35864 (url "https://github.com/jimporter/mike")
35865 (commit (string-append "v" version))))
35866 (file-name (git-file-name name version))
35867 (sha256
35868 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35869 (build-system pyproject-build-system)
35870 (arguments
35871 (list
35872 #:test-flags
35873 ;; Most of integration tests hang or fail.
35874 #~(list "--ignore=test/integration/"
35875 ;; AttributeError: 'NoneType' object has no attribute 'group'
35876 "--ignore=test/unit/test_commands.py"
35877 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35878 (native-inputs
35879 (list git-minimal/pinned
35880 python-pytest
35881 python-setuptools
35882 python-shtab
35883 python-wheel))
35884 (propagated-inputs
35885 (list python-importlib-metadata
35886 python-importlib-resources
35887 python-jinja2
35888 python-mkdocs
35889 python-pyparsing
35890 python-pyyaml
35891 python-pyyaml-env-tag
35892 python-verspec))
35893 (home-page "https://github.com/jimporter/mike")
35894 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35895 (description
35896 "This package provides a Python utility to easily deploy multiple
35897versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35898to Github via gh-pages.")
35899 (license license:bsd-3)))
35900
35901(define-public python-arpeggio
35902 (package
35903 (name "python-arpeggio")
35904 (version "2.0.2")
35905 (source
35906 (origin
35907 (method url-fetch)
35908 (uri (pypi-uri "Arpeggio" version))
35909 (sha256
35910 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35911 (build-system pyproject-build-system)
35912 (native-inputs
35913 (list python-pytest
35914 python-setuptools
35915 python-wheel))
35916 (home-page "https://github.com/textX/Arpeggio")
35917 (synopsis "Packrat parser interpreter for Python")
35918 (description
35919 "This Python library provides a recursive descent parser with
35920backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35921based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35922for DSL development but it can be used for all sorts of general purpose
35923parsing.")
35924 (license license:expat)))
35925
35926(define-public python-flatten-json
35927 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35928 ;; the commit associated with 0.1.14 version.
35929 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35930 (revision "0"))
35931 (package
35932 (name "python-flatten-json")
35933 (version (git-version "0.1.14" revision commit))
35934 (source
35935 (origin
35936 (method git-fetch) ; no tests in PyPI release
35937 (uri (git-reference
35938 (url "https://github.com/amirziai/flatten")
35939 (commit commit)))
35940 (file-name (git-file-name name version))
35941 (sha256
35942 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35943 (build-system pyproject-build-system)
35944 (native-inputs
35945 (list python-pytest
35946 python-setuptools
35947 python-wheel))
35948 (propagated-inputs
35949 (list python-six))
35950 (home-page "https://github.com/amirziai/flatten")
35951 (synopsis "Flatten JSON objects")
35952 (description
35953 "The @code{flatten_json} Python library flattens the hierarchy in your
35954object, which can be useful if you want to force your objects into a table.")
35955 (license license:expat))))
35956
35957(define-public python-deepdiff
35958 (package
35959 (name "python-deepdiff")
35960 (version "8.6.1")
35961 (source (origin
35962 (method url-fetch)
35963 (uri (pypi-uri "deepdiff" version))
35964 (sha256
35965 (base32
35966 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35967 (build-system pyproject-build-system)
35968 (arguments
35969 ;; tests: 1028 passed, 10 skipped, 1 deselected
35970 ;; Ignore Polars test (not packaged).
35971 (list #:test-flags #~(list "-k" "not test_polars")))
35972 (propagated-inputs (list python-click ; for CLI
35973 python-pyyaml ; for CLI
35974 python-orderly-set
35975 python-orjson)) ; for optimization
35976 (native-inputs
35977 (list python-flit-core
35978 python-jsonpickle
35979 python-numpy
35980 python-pandas
35981 python-pydantic
35982 python-pytest
35983 python-pytest-benchmark
35984 python-pytz
35985 python-uuid6
35986 python-tomli-w))
35987 (home-page "https://github.com/seperman/deepdiff")
35988 (synopsis "Deep difference and search of any Python object/data")
35989 (description
35990 "This package provides tools for computing deep differences and searching
35991of any Python object/data. Recreate objects by adding adding deltas to each
35992other.")
35993 (license license:expat)))
35994
35995(define-public python-deepmerge
35996 (package
35997 (name "python-deepmerge")
35998 (version "1.0.1")
35999 (source
36000 (origin
36001 (method url-fetch)
36002 (uri (pypi-uri "deepmerge" version))
36003 (sha256
36004 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36005 (build-system pyproject-build-system)
36006 (native-inputs
36007 (list python-setuptools-scm
36008 python-pytest
36009 python-setuptools
36010 python-wheel))
36011 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36012 (synopsis "Merge nested data structures")
36013 (description
36014 "The @code{deep-merge} Python library provides a toolset to deeply merge
36015nested data structures in Python like lists and dictionaries.")
36016 (license license:expat)))
36017
36018(define-public python-durationpy
36019 (package
36020 (name "python-durationpy")
36021 (version "0.10")
36022 (source
36023 (origin
36024 (method git-fetch)
36025 (uri (git-reference
36026 (url "https://github.com/icholy/durationpy")
36027 (commit version)))
36028 (file-name (git-file-name name version))
36029 (sha256
36030 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36031 (build-system pyproject-build-system)
36032 (arguments
36033 (list #:test-backend #~'custom
36034 #:test-flags #~(list "test.py")))
36035 (native-inputs (list python-setuptools))
36036 (home-page "https://github.com/icholy/durationpy")
36037 (synopsis "Python <-> Golang time duration formats converter")
36038 (description
36039 "This package implements a functionality to convert between
36040Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36041 (license license:expat)))
36042
36043(define-public python-murmurhash3
36044 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36045 (revision "0"))
36046 (package
36047 (name "python-murmurhash3")
36048 (version (git-version "2.3.5" revision commit))
36049 (source
36050 (origin
36051 (method git-fetch)
36052 (uri (git-reference
36053 (url "https://github.com/veegee/mmh3")
36054 (commit commit)))
36055 (file-name (git-file-name name version))
36056 (sha256
36057 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36058 (build-system pyproject-build-system)
36059 (arguments
36060 (list
36061 #:phases
36062 #~(modify-phases %standard-phases
36063 (add-after 'unpack 'fix-package
36064 (lambda _
36065 (substitute* "mmh3module.cpp"
36066 (("#include <stdio\\.h>")
36067 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36068 (native-inputs
36069 (list python-cython python-pytest python-setuptools python-wheel))
36070 (home-page "https://github.com/veegee/mmh3")
36071 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36072 (description
36073 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36074of fast and robust hash functions. This library is a Python extension module
36075written in C.")
36076 (license license:public-domain))))
36077
36078(define-public python-scooby
36079 (package
36080 (name "python-scooby")
36081 (version "0.11.0")
36082 (source
36083 (origin
36084 (method git-fetch)
36085 (uri (git-reference
36086 (url "https://github.com/banesullivan/scooby")
36087 (commit (string-append "v" version))))
36088 (file-name (git-file-name name version))
36089 (sha256
36090 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36091 (build-system pyproject-build-system)
36092 (arguments
36093 (list
36094 ;; tests: 19 passed, 5 deselected, 1 warning
36095 #:test-flags
36096 ;; AssertionError: assert 'Module not found' == '0.1.0'
36097 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36098 ;; ModuleNotFoundError: No module named 'no_version'
36099 "--deselect=tests/test_scooby.py::test_tracking"
36100 ;; Failed: DID NOT RAISE <class 'OSError'>
36101 "--deselect=tests/test_scooby.py::test_import_os_error"
36102 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36103 "--deselect=tests/test_scooby.py::test_import_time"
36104 ;; Errored
36105 "--deselect=tests/test_scooby.py::test_cli")))
36106 (native-inputs
36107 (list python-beautifulsoup4
36108 python-numpy
36109 python-pytest
36110 python-pyvips
36111 python-scipy
36112 python-setuptools
36113 python-setuptools-scm))
36114 (propagated-inputs
36115 (list python-psutil))
36116 (home-page "https://github.com/banesullivan/scooby")
36117 (synopsis "Report hardware information and Python package versions")
36118 (description
36119 "The Scooby package reports the following information about the currently
36120running system:
36121
36122@itemize
36123@item operating system name;
36124@item hardware information including machine type (e.g., @samp{i386},
36125@samp{x86_64}, etc.), CPU count and total RAM;
36126@item Python environment (e.g., Python, IPython, etc.);
36127@item file system name;
36128@item Python version;
36129@item versions of specified Python packages.
36130@end itemize
36131
36132It can generate reports as HTML tables or plain text lists.
36133
36134Scooby has no required dependencies, and only few optional dependencies.")
36135 (license license:expat)))
36136
36137(define-public python-cymem
36138 (package
36139 (name "python-cymem")
36140 (version "2.0.6")
36141 (source
36142 (origin
36143 (method git-fetch)
36144 (uri (git-reference
36145 (url "https://github.com/explosion/cymem")
36146 (commit (string-append "v" version))))
36147 (file-name (git-file-name name version))
36148 (sha256
36149 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36150 (build-system pyproject-build-system)
36151 (native-inputs (list python-cython python-pytest python-setuptools))
36152 (inputs (list python))
36153 (home-page "https://github.com/explosion/cymem")
36154 (synopsis "Cython memory pool for RAII-style memory management")
36155 (description
36156 "Cymem provides two small memory-management helpers for Cython. They make it
36157easy to tie memory to a Python object's life-cycle, so that the memory is freed
36158when the object is garbage collected.")
36159 (license license:expat)))
36160
36161(define-public python-preshed
36162 (package
36163 (name "python-preshed")
36164 (version "3.0.6")
36165 (source
36166 (origin
36167 (method git-fetch)
36168 (uri (git-reference
36169 (url "https://github.com/explosion/preshed")
36170 (commit (string-append "v" version))))
36171 (file-name (git-file-name name version))
36172 (sha256
36173 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36174 (build-system pyproject-build-system)
36175 (arguments
36176 (list
36177 #:phases
36178 #~(modify-phases %standard-phases
36179 (add-after 'unpack 'patch-msvccompiler
36180 (lambda _
36181 (substitute* "setup.py"
36182 (("from distutils import ccompiler, msvccompiler")
36183 "from distutils import ccompiler")
36184 (("and msvccompiler.*")
36185 ""))))
36186 (replace 'check
36187 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36188 (with-directory-excursion (site-packages inputs outputs)
36189 (for-each delete-file (find-files "." "\\.pyx$"))
36190 (apply (assoc-ref %standard-phases 'check) args)
36191 (delete-file-recursively "preshed/tests")))))))
36192 (native-inputs
36193 (list python-cython python-cymem python-pytest python-setuptools))
36194 (inputs (list python python-cymem python-murmurhash))
36195 (home-page "https://github.com/explosion/preshed")
36196 (synopsis "Cython hash tables that assume keys are pre-hashed")
36197 (description
36198 "Simple but high performance Cython hash table mapping pre-randomized keys
36199to void* values.")
36200 (license license:expat)))
36201
36202(define-public python-catalogue
36203 (package
36204 (name "python-catalogue")
36205 (version "2.0.10")
36206 (source
36207 (origin
36208 (method git-fetch)
36209 (uri (git-reference
36210 (url "https://github.com/explosion/catalogue")
36211 (commit (string-append "v" version))))
36212 (file-name (git-file-name name version))
36213 (sha256
36214 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36215 (build-system pyproject-build-system)
36216 (native-inputs (list python-pytest python-setuptools))
36217 (home-page "https://github.com/explosion/catalogue")
36218 (synopsis "Lightweight function registries for your library")
36219 (description
36220 "This package is a tiny, zero-dependencies library that makes it easy to
36221add function (or object) registries to your code. Function registries are
36222helpful when you have objects that need to be both easily serializable and
36223fully customizable. Instead of passing a function into your object, you pass
36224in an identifier name, which the object can use to lookup the function from
36225the registry. This makes the object easy to serialize, because the name is a
36226simple string. If you instead saved the function, you'd have to use Pickle
36227for serialization, which has many drawbacks.")
36228 (license license:expat)))
36229
36230(define-public python-gatt
36231 (package
36232 (name "python-gatt")
36233 (version "0.2.7")
36234 (source (origin
36235 (method url-fetch)
36236 (uri (pypi-uri "gatt" version))
36237 (sha256
36238 (base32
36239 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36240 (build-system pyproject-build-system)
36241 (arguments (list #:tests? #f)) ; No tests upstream.
36242 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36243 (native-inputs (list python-setuptools))
36244 (home-page "https://github.com/getsenic/gatt-python")
36245 (synopsis "Bluetooth GATT SDK for Python")
36246 (description
36247 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36248Software Development Kit} for Python helps you implement and communicate with
36249any Bluetooth Low Energy device that has a GATT profile. It supports:
36250
36251@itemize @bullet
36252@item Discovering nearby Bluetooth Low Energy devices
36253@item Connecting and disconnecting devices
36254@item Implementing your custom GATT profile
36255@item Accessing all GATT services
36256@item Accessing all GATT characteristics
36257@item Reading characteristic values
36258@item Writing characteristic values
36259@item Subscribing for characteristic value change notifications
36260@end itemize
36261
36262Currently, Linux is the only platform supported by this library.")
36263 (license license:expat)))
36264
36265(define-public python-dbus-fast
36266 (package
36267 (name "python-dbus-fast")
36268 (version "2.44.3")
36269 (source
36270 (origin
36271 (method git-fetch) ;No tests in PyPI package.
36272 (uri (git-reference
36273 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36274 (commit (string-append "v" version))))
36275 (file-name (git-file-name name version))
36276 (sha256
36277 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36278 (build-system pyproject-build-system)
36279 (arguments
36280 (list
36281 #:test-flags
36282 '(list
36283 ;; These tests need pytest_codspeed.
36284 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36285 ;; These tests all fail with:
36286 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36287 ;; set and could not get DISPLAY environment variable to get bus address
36288 "-m" "not asyncio")))
36289 (native-inputs (list python-cython
36290 python-poetry-core
36291 python-setuptools
36292 python-pytest
36293 python-pytest-asyncio
36294 python-covdefaults))
36295 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36296 (synopsis "Faster version of dbus-next")
36297 (description "This package provides a faster version of dbus-next.")
36298 (license license:expat)))
36299
36300(define-public python-bleak
36301 (package
36302 (name "python-bleak")
36303 (version "2.1.1")
36304 (source
36305 (origin
36306 (method git-fetch)
36307 (uri (git-reference
36308 (url "https://github.com/hbldh/bleak")
36309 (commit (string-append "v" version))))
36310 (file-name (git-file-name name version))
36311 (sha256
36312 (base32 "0vdzx6s5fsgnl3j2k0kn6w1v8mqhb2jjpmpq6vdk9i0bdp1456ff"))))
36313 (build-system pyproject-build-system)
36314 (arguments
36315 (list
36316 ;; Integration tests require unpackaged dependencies.
36317 #:test-flags #~(list "--ignore=tests/integration")))
36318 (propagated-inputs
36319 (list python-async-timeout
36320 python-dbus-fast
36321 python-typing-extensions))
36322 (native-inputs
36323 (list python-coverage
36324 python-packaging
36325 python-poetry-core
36326 python-pytest
36327 python-pytest-asyncio))
36328 (home-page "https://github.com/hbldh/bleak")
36329 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36330 (description "This package provides a Bluetooth Low Energy platform-agnostic
36331client library.")
36332 (license license:expat)))
36333
36334(define-public python-ndeflib
36335 (package
36336 (name "python-ndeflib")
36337 (version "0.3.3")
36338 (source
36339 (origin
36340 (method url-fetch)
36341 (uri (pypi-uri "ndeflib" version))
36342 (sha256
36343 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36344 (build-system pyproject-build-system)
36345 (arguments
36346 (list
36347 ;; tests: 1571 passed, 37 deselected, 1 warning
36348 ;;
36349 ;; Three test fail with assertion not equal:
36350 ;;
36351 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36352 ;; bytes] - AssertionError
36353 ;;
36354 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36355 ;; 1 bytes] - AssertionError
36356 ;;
36357 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36358 ;; AssertionError
36359 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36360 "test_encode_error"))))
36361 (native-inputs (list python-pytest-8 python-setuptools))
36362 (home-page "https://ndeflib.readthedocs.io/")
36363 (synopsis "NFC Data Exchange Format decoder and encoder.")
36364 (description "This package provides a NFC (Near-Field Communication)
36365Data Exchange Format decoder and encoder.")
36366 (license license:isc)))
36367
36368(define-public python-nfcpy
36369 (package
36370 (name "python-nfcpy")
36371 (version "1.0.4")
36372 (source
36373 (origin
36374 (method url-fetch)
36375 (uri (pypi-uri "nfcpy" version))
36376 (sha256
36377 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36378 (build-system pyproject-build-system)
36379 (arguments
36380 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36381 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36382 python-pyserial))
36383 (native-inputs (list python-setuptools python-wheel))
36384 (home-page "https://github.com/nfcpy/nfcpy")
36385 (synopsis "Python module for Near-Field Communication.")
36386 (description "This package provides a Python module for Near-Field
36387Communication.")
36388 (license license:eupl1.1)))
36389
36390(define-public python-clrprint
36391 (package
36392 (name "python-clrprint")
36393 (version "2.0.1")
36394 (source (origin
36395 (method url-fetch)
36396 (uri (pypi-uri "clrprint" version))
36397 (sha256
36398 (base32
36399 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36400 (build-system pyproject-build-system)
36401 (arguments '(#:tests? #f)) ;there are no tests
36402 (native-inputs
36403 (list python-setuptools))
36404 (propagated-inputs (list python-colorama python-termcolor))
36405 (home-page "https://github.com/AbhijithAJ/clrprint")
36406 (synopsis "Print colorful output in the terminal")
36407 (description "@code{clrprint} is developed to print colorful output in the
36408terminal. It has red, blue, green, yellow, purple and black/white (default)
36409colors.")
36410 (license license:expat)))
36411
36412(define-public python-mido
36413 (package
36414 (name "python-mido")
36415 (version "1.3.2")
36416 (source (origin
36417 (method url-fetch)
36418 (uri (pypi-uri "mido" version))
36419 (sha256
36420 (base32
36421 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
36422 (build-system pyproject-build-system)
36423 (arguments
36424 (list #:phases
36425 #~(modify-phases %standard-phases
36426 ;; This package requires python-packaging~=23.1 which is not yet
36427 ;; updated to. As per pyproject.toml, it is required to provide
36428 ;; a nice version_info object.
36429 ;; TODO: After updating python-packaging, fix this.
36430 (delete 'sanity-check))))
36431 (propagated-inputs (list python-importlib-metadata python-packaging))
36432 (native-inputs (list python-pytest python-setuptools python-wheel))
36433 (home-page "https://mido.readthedocs.io/en/stable/")
36434 (synopsis "MIDI Objects for Python")
36435 (description "This library is for working with MIDI 1.0 ports, messages and
36436files.")
36437 (license license:expat)))
36438
36439(define-public python-musical-scales
36440 (package
36441 (name "python-musical-scales")
36442 (version "1.0.1")
36443 (source (origin
36444 (method url-fetch)
36445 (uri (pypi-uri "musical-scales" version))
36446 (sha256
36447 (base32
36448 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
36449 (build-system pyproject-build-system)
36450 (arguments (list #:tests? #f)) ;no tests
36451 (native-inputs (list python-setuptools))
36452 (home-page "https://github.com/hmillerbakewell/musical-scales")
36453 (synopsis "Retrieve a scale based on a given mode and starting note")
36454 (description
36455 "Retrieve a scale based on a given mode and starting note.
36456Information about these scales can be
36457@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36458Wikipedia}.")
36459 (license license:expat)))
36460
36461(define-public python-langcodes
36462 (package
36463 (name "python-langcodes")
36464 (version "3.5.0")
36465 (source (origin
36466 (method url-fetch)
36467 (uri (pypi-uri "langcodes" version))
36468 (sha256
36469 (base32
36470 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36471 (build-system pyproject-build-system)
36472 (native-inputs
36473 (list python-pytest
36474 python-setuptools
36475 python-setuptools-scm))
36476 (propagated-inputs
36477 ;; [optional:data]
36478 (list python-language-data))
36479 (home-page "https://github.com/rspeer/langcodes")
36480 (synopsis "Python library for working with language codes")
36481 (description
36482 "This package provides a Python library for working with and comparing
36483language codes.
36484
36485@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3648647}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3648747 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36488with it, and it also implements recommendations from the
36489@url{http://cldr.unicode.org/, Unicode CLDR}.
36490
36491@code{python-langcodes} can also refer to a database of language properties
36492and names, built from Unicode CLDR and the IANA subtag registry, if you
36493install @code{python-language-data}.")
36494 (license license:expat)))
36495
36496(define-public python-anyascii
36497 (package
36498 (name "python-anyascii")
36499 (version "0.3.3")
36500 (source (origin
36501 (method url-fetch)
36502 (uri (pypi-uri "anyascii" version))
36503 (sha256
36504 (base32
36505 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36506 (build-system pyproject-build-system)
36507 (native-inputs (list python-pytest python-flit-core))
36508 (home-page "https://anyascii.com")
36509 (synopsis "Unicode to ASCII transliteration")
36510 (description "@code{anyascii} converts Unicode characters to their best
36511ASCII representation.")
36512 (license license:isc)))
36513
36514(define-public python-geomet
36515 (package
36516 (name "python-geomet")
36517 (version "1.1.0")
36518 (source
36519 (origin
36520 (method git-fetch)
36521 (uri (git-reference
36522 (url "https://github.com/geomet/geomet")
36523 (commit version)))
36524 (file-name (git-file-name name version))
36525 (sha256
36526 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36527 (build-system pyproject-build-system)
36528 (native-inputs (list python-pytest python-setuptools))
36529 (propagated-inputs (list python-click python-six))
36530 (home-page "https://github.com/geomet/geomet")
36531 (synopsis
36532 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36533 (description
36534 "This package provides utilities and functions for converting
36535GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36536versa. Extended WKB/WKT are also supported.")
36537 (license license:asl2.0)))
36538
36539(define-public python-cogapp
36540 (package
36541 (name "python-cogapp")
36542 (version "3.3.0")
36543 (source (origin
36544 (method url-fetch)
36545 (uri (pypi-uri "cogapp" version))
36546 (sha256
36547 (base32
36548 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36549 (build-system pyproject-build-system)
36550 (native-inputs (list python-pytest python-setuptools python-wheel))
36551 (home-page "https://nedbatchelder.com/code/cog")
36552 (synopsis "Content generation tool that leverages Python")
36553 (description "Cog is a file generation tool. It allows using pieces of
36554Python code as generators in your source files to generate arbitrary text.")
36555 (license license:expat)))
36556
36557(define-public python-cxxheaderparser
36558 (package
36559 (name "python-cxxheaderparser")
36560 (version "1.7.0")
36561 (source
36562 (origin
36563 (method git-fetch)
36564 (uri (git-reference
36565 (url "https://github.com/robotpy/cxxheaderparser")
36566 (commit version)))
36567 (file-name (git-file-name name version))
36568 (sha256
36569 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36570 (build-system pyproject-build-system)
36571 (native-inputs
36572 (list python-hatch-vcs python-pytest))
36573 (home-page "https://github.com/robotpy/cxxheaderparser/")
36574 (synopsis "Python C++ header parser")
36575 (description "Pure python C++ header parser that parses C++ headers in a
36576mildly naive manner that allows it to handle many C constructs, including
36577many (C++11 and beyond) features.")
36578 (license license:bsd-3)))
36579
36580(define-public python-bsdiff4
36581 (package
36582 (name "python-bsdiff4")
36583 (version "1.2.6")
36584 (source
36585 (origin
36586 (method git-fetch)
36587 (uri (git-reference
36588 (url "https://github.com/ilanschnell/bsdiff4")
36589 (commit version)))
36590 (file-name (git-file-name name version))
36591 (sha256
36592 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36593 (build-system pyproject-build-system)
36594 (arguments
36595 (list
36596 #:test-flags #~(list "--pyargs" "bsdiff4")))
36597 (native-inputs
36598 (list python-pytest
36599 python-setuptools
36600 python-wheel))
36601 (home-page "https://github.com/ilanschnell/bsdiff4")
36602 (synopsis "Binary diff and patch using the BSDIFF4 format")
36603 (description
36604 "This package provides a Python library for the @code{bsdiff} binary diff
36605utility. It also provides two command-line tools, @code{bsdiff4} and
36606@code{bspatch4}.")
36607 (license license:bsd-2)))
36608
36609(define-public python-mpv
36610 (package
36611 (name "python-mpv")
36612 (version "1.0.8")
36613 (source
36614 (origin
36615 (method git-fetch)
36616 (uri (git-reference
36617 (url "https://github.com/jaseg/python-mpv")
36618 (commit (string-append "v" version))))
36619 (file-name (git-file-name name version))
36620 (sha256
36621 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36622 (build-system pyproject-build-system)
36623 (arguments
36624 (list #:phases
36625 #~(modify-phases %standard-phases
36626 (add-before 'build 'patch-reference-to-mpv
36627 (lambda* (#:key inputs #:allow-other-keys)
36628 ;; Without an absolute path it is not able find and load libmpv.
36629 (substitute* "mpv.py"
36630 (("sofile = .*")
36631 (format #f "sofile = '~a/lib/libmpv.so'~%"
36632 #$(this-package-input "mpv"))))))
36633 (add-before 'check 'prepare-for-tests
36634 (lambda _
36635 ;; Fontconfig throws errors when it has no cache dir to use.
36636 (setenv "XDG_CACHE_HOME" (getcwd))
36637 ;; Some tests fail without a writable and readable HOME.
36638 (setenv "HOME" (getcwd))
36639 (setenv "PY_MPV_SKIP_TESTS"
36640 "test_wait_for_property_event_overflow"))))))
36641 (native-inputs
36642 (list python-pytest
36643 python-pyvirtualdisplay
36644 python-setuptools
36645 xorg-server-for-tests))
36646 (inputs (list mpv))
36647 (propagated-inputs (list python-pillow)) ;for raw screenshots
36648 (home-page "https://github.com/jaseg/python-mpv")
36649 (synopsis "Python interface to the mpv media player")
36650 (description
36651 "python-mpv is a ctypes-based python interface to the mpv media player.
36652It gives you more or less full control of all features of the player, just
36653as the lua interface does.")
36654 ;; From the project's README:
36655 ;; python-mpv inherits the underlying libmpv's license, which can be either
36656 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36657 ;; copyright page.
36658 (license license:gpl2+)))
36659
36660(define-public python-biblib
36661 (let ((upstream-version "0.1.0")
36662 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36663 (revision "1"))
36664 (package
36665 (name "python-biblib")
36666 (version (git-version upstream-version revision commit))
36667 (source
36668 (origin
36669 (method git-fetch)
36670 (uri (git-reference
36671 (url "https://github.com/aclements/biblib")
36672 (commit commit)))
36673 (sha256
36674 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36675 (file-name (git-file-name name version))))
36676 (build-system pyproject-build-system)
36677 (arguments (list #:tests? #f)) ; No tests upstream.
36678 (native-inputs (list python-setuptools))
36679 (home-page "https://github.com/aclements/biblib")
36680 (synopsis "BibTeX parsing and transformation library")
36681 (description
36682 "Biblib provides a simple, standalone Python 3 package for parsing
36683BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36684entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36685source code for BibTeX and hence (barring bugs in translation) should be fully
36686compatible with BibTeX's own parser.")
36687 ;; N.B. It seems the parser was translated from WEB by hand: this
36688 ;; package does not contain any generated files.
36689 (license license:expat))))
36690
36691(define-public python-cyclic
36692 (package
36693 (name "python-cyclic")
36694 (version "1.0.0")
36695 (source
36696 (origin
36697 (method git-fetch)
36698 (uri (git-reference
36699 (url "https://github.com/neurobin/cyclic")
36700 ;; Release is not tagged on github, see
36701 ;; https://github.com/neurobin/cyclic/issues/2
36702 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36703 (file-name (git-file-name name version))
36704 (sha256
36705 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36706 (build-system pyproject-build-system)
36707 (arguments (list #:test-backend #~'unittest))
36708 (native-inputs (list python-setuptools))
36709 (home-page "https://github.com/neurobin/cyclic")
36710 (synopsis "Handle cyclic relations")
36711 (description "This package handles cyclic relations compared by value.")
36712 (license license:bsd-3)))
36713
36714(define-public python-rcslice
36715 (package
36716 (name "python-rcslice")
36717 (version "1.1.0")
36718 (source
36719 (origin
36720 (method git-fetch)
36721 (uri (git-reference
36722 (url "https://github.com/neurobin/rcslice")
36723 ;; Releases are not tagged on github, see
36724 ;; https://github.com/neurobin/rcslice/issues/2
36725 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36726 (file-name (git-file-name name version))
36727 (sha256
36728 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36729 (build-system pyproject-build-system)
36730 (arguments (list #:test-backend #~'unittest))
36731 (native-inputs (list python-setuptools))
36732 (home-page "https://github.com/neurobin/rcslice")
36733 (synopsis "Slice a list of sliceables")
36734 (description
36735 "This package provides Python module to slice a list of sliceables (1
36736indexed, both start and end index are inclusive). Helps to slice file content
36737line by line or column by column or a combination of both.")
36738 (license license:bsd-3)))
36739
36740(define-public python-rpds-py
36741 (package
36742 (name "python-rpds-py")
36743 (version "0.10.6")
36744 (source (origin
36745 (method url-fetch)
36746 (uri (pypi-uri "rpds_py" version))
36747 (sha256
36748 (base32
36749 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36750 (build-system cargo-build-system)
36751 (arguments
36752 (list
36753 #:imported-modules `(,@%cargo-build-system-modules
36754 ,@%pyproject-build-system-modules)
36755 #:modules '((guix build cargo-build-system)
36756 ((guix build pyproject-build-system) #:prefix py:)
36757 (guix build utils))
36758 #:phases
36759 #~(modify-phases %standard-phases
36760 (add-after 'build 'build-python-module
36761 (assoc-ref py:%standard-phases 'build))
36762 (add-after 'build-python-module 'install-python-module
36763 (assoc-ref py:%standard-phases 'install)))
36764 #:install-source? #false))
36765 (inputs
36766 (cons maturin (cargo-inputs 'python-rpds-py)))
36767 (native-inputs
36768 (list python-wrapper))
36769 (home-page "https://github.com/crate-py/rpds")
36770 (synopsis "Bindings to Rust rpds for persistent data structures")
36771 (description "This package provides Python bindings to the Rust rpds crate
36772for persistent data structures. It was written initially to support replacing
36773@code{python-pyrsistent}.")
36774 (license license:expat)))
36775
36776(define-public python-nanoid
36777 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36778 (revision "0"))
36779 (package
36780 (name "python-nanoid")
36781 (version "2.0.0")
36782 (source
36783 (origin
36784 (method git-fetch)
36785 (uri
36786 (git-reference
36787 (url "https://github.com/puyuan/py-nanoid")
36788 (commit commit)))
36789 (file-name (git-file-name name commit))
36790 (sha256
36791 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36792 (build-system pyproject-build-system)
36793 (native-inputs (list python-pytest python-setuptools))
36794 (home-page "https://github.com/puyuan/py-nanoid")
36795 (synopsis "Unique string ID generator")
36796 (description
36797 "This package provides a tiny, secure, URL-friendly, unique string ID
36798generator for Python.")
36799 (license license:expat))))
36800
36801(define-public python-misc-utils
36802 (package
36803 (name "python-misc-utils")
36804 (version "0.28")
36805 (source
36806 (origin
36807 (method git-fetch)
36808 (uri (git-reference
36809 (url "https://github.com/davidel/py_misc_utils")
36810 (commit version)))
36811 (file-name (git-file-name name version))
36812 (sha256
36813 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
36814 (build-system pyproject-build-system)
36815 (arguments
36816 (list
36817 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
36818 #:test-backend #~'custom
36819 #:test-flags #~(list "test/test_runner.py")))
36820 (propagated-inputs
36821 (list python-numpy python-pandas python-psutil python-pyyaml))
36822 (native-inputs (list python-setuptools))
36823 (home-page "https://github.com/davidel/py_misc_utils")
36824 (synopsis "Collection of Python utilities")
36825 (description "This package provides a collection of Python miscellaneous
36826utility tools mainly used by other projects of the same author.")
36827 (license license:asl2.0)))
36828
36829(define-public python-misskey
36830 (package
36831 (name "python-misskey")
36832 (version "4.1.0")
36833 (source (origin
36834 (method git-fetch)
36835 (uri (git-reference
36836 (url "https://github.com/YuzuRyo61/Misskey.py")
36837 (commit (string-append "v" version))))
36838 (file-name (git-file-name name version))
36839 (sha256
36840 (base32
36841 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36842 (build-system pyproject-build-system)
36843 (arguments (list #:tests? #f)) ;needs network
36844 (native-inputs (list python-setuptools))
36845 (propagated-inputs (list python-requests))
36846 (home-page "https://misskeypy.readthedocs.io")
36847 (synopsis "Python bindings for Misskey's API")
36848 (description
36849 "This package provides access to Misskey's API. Misskey is a SNS
36850platform using the ActivityPub protocol.")
36851 (license license:expat)))
36852
36853(define-public python-lief
36854 (package
36855 (name "python-lief")
36856 (version "1.0.0")
36857 (source
36858 (origin
36859 (method git-fetch)
36860 (uri (git-reference
36861 (url "https://github.com/lief-project/LIEF")
36862 (commit version)))
36863 (file-name (git-file-name name version))
36864 (sha256
36865 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
36866 (build-system pyproject-build-system)
36867 (arguments
36868 (list
36869 ;; TODO: Tests neeed some setup, see:
36870 ;; <.github/workflows/linux-x86-64.yml>.
36871 #:tests? #f
36872 #:phases
36873 #~(modify-phases %standard-phases
36874 (add-before 'build 'change-directory
36875 (lambda _
36876 (chdir "api/python"))))))
36877 (native-inputs
36878 (list ninja
36879 python-pydantic
36880 python-scikit-build-core
36881 python-tomli))
36882 (home-page "https://github.com/lief-project/LIEF")
36883 (synopsis "Library to instrument executable formats")
36884 (description
36885 "@code{python-lief} is a cross platform library which can parse, modify
36886and abstract ELF, PE and MachO formats.")
36887 (license license:asl2.0)))
36888
36889(define-public python-eris
36890 (package
36891 (name "python-eris")
36892 (version "1.0.0")
36893 (source
36894 (origin
36895 (method url-fetch)
36896 (uri (pypi-uri "eris" version))
36897 (sha256
36898 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36899 (build-system pyproject-build-system)
36900 (arguments
36901 ;; No tests in PyPI, tests miss data files in Git:
36902 ;; - tests/test-vectors/test_encode
36903 ;; - tests/test-vectors/test_decode
36904 (list #:tests? #f))
36905 (native-inputs
36906 (list python-setuptools
36907 python-wheel))
36908 (propagated-inputs
36909 (list python-aiocoap
36910 python-pycryptodome))
36911 (home-page "https://codeberg.org/eris/python-eris")
36912 (synopsis "Python implementation of ERIS")
36913 (description
36914 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36915Storage}.")
36916 (license license:lgpl3+)))
36917
36918(define-public python-pymonad
36919 (package
36920 (name "python-pymonad")
36921 (version "2.4.0")
36922 (source
36923 (origin
36924 (method git-fetch)
36925 (uri (git-reference
36926 (url "https://github.com/jasondelaat/pymonad")
36927 (commit (string-append "v" version))))
36928 (file-name (git-file-name name version))
36929 (sha256
36930 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36931 (build-system pyproject-build-system)
36932 (arguments
36933 (list
36934 #:phases
36935 #~(modify-phases %standard-phases
36936 (replace 'check
36937 (lambda* (#:key tests? #:allow-other-keys)
36938 (when tests?
36939 (invoke "./run_tests.sh")))))))
36940 (native-inputs (list python-setuptools))
36941 (home-page "https://github.com/jasondelaat/pymonad")
36942 (synopsis "Monadic style functional programming for Python")
36943 (description "@code{python-pymonad} implements data structures typically
36944available in purely functional or functional first programming languages such
36945as Haskell and F#. Included are
36946
36947@itemize
36948@item Monad and Monoid data types with several common monads such as Maybe and
36949State
36950@item Useful tools such as the @code{@@curry} decorator for defining curried
36951functions
36952@item Type annotations to help ensure correct usage
36953@end itemize")
36954 (license license:bsd-3)))
36955
36956(define-public python-markdown-strings
36957 (package
36958 (name "python-markdown-strings")
36959 (version "3.3.0")
36960 (source
36961 (origin
36962 (method git-fetch)
36963 (uri (git-reference
36964 (url "https://github.com/awesmubarak/markdown_strings.git")
36965 (commit (string-append "v" version))))
36966 (file-name (git-file-name name version))
36967 (sha256
36968 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36969 (build-system pyproject-build-system)
36970 (arguments
36971 (list
36972 #:test-backend #~'custom
36973 #:test-flags #~(list "test.py")))
36974 (native-inputs (list python-setuptools))
36975 (propagated-inputs (list python-lxml python-six))
36976 (home-page "https://github.com/awesmubarak/markdown_strings")
36977 (synopsis "Python library to create markdown-formatted text")
36978 (description "This package allows the programmatic creation of
36979markdown-compliant strings.")
36980 (license license:expat)))
36981
36982(define-public python-icecream
36983 (package
36984 (name "python-icecream")
36985 (version "2.1.9")
36986 (source
36987 (origin
36988 (method git-fetch)
36989 (uri (git-reference
36990 (url "https://github.com/gruns/icecream")
36991 (commit (string-append "v" version))))
36992 (file-name (git-file-name name version))
36993 (sha256
36994 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
36995 (build-system pyproject-build-system)
36996 (native-inputs
36997 (list python-hypothesis
36998 python-pytest
36999 python-setuptools))
37000 (propagated-inputs
37001 (list python-asttokens
37002 python-colorama
37003 python-executing
37004 python-pygments))
37005 (home-page "https://github.com/gruns/icecream")
37006 (synopsis
37007 "Single function call to debug variables, expressions, and program execution")
37008 (description
37009 "This tool lets you debug variables, expressions, and program execution
37010with one function call. IceCream makes print debugging a little sweeter.")
37011 (license license:expat)))
37012
37013;; XXX: Deprecated on <2026-07-12>.
37014(define-deprecated/public-alias python-icegrams
37015 (@ (gnu packages language) python-icegrams))
37016
37017(define-public python-sbsv
37018 (package
37019 (name "python-sbsv")
37020 (version "0.2.3")
37021 (source
37022 (origin
37023 (method git-fetch)
37024 (uri (git-reference
37025 (url "https://github.com/hsh814/sbsv")
37026 (commit (string-append "v" version))))
37027 (file-name (git-file-name name version))
37028 (sha256
37029 (base32 "1xzx0xhikwqvmzdbhprzljfvnxznr3an3jf0v07hwkixvh80s4f5"))
37030 (modules '((guix build utils)))
37031 (snippet #~(delete-file-recursively "libsbsv")))) ;separate C library
37032 (build-system pyproject-build-system)
37033 (native-inputs (list python-hatchling python-pytest))
37034 (home-page "https://github.com/hsh814/sbsv")
37035 (synopsis "Square bracket separated values")
37036 (description
37037 "This Python package provides a schema-driven structured log data format
37038for the ease of writing and parsing.")
37039 (license license:expat)))
37040
37041(define-public python-sqlglot
37042 (package
37043 (name "python-sqlglot")
37044 (version "26.33.0")
37045 (source
37046 (origin
37047 (method url-fetch)
37048 (uri (pypi-uri "sqlglot" version))
37049 (sha256
37050 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37051 (build-system pyproject-build-system)
37052 (arguments
37053 (list
37054 #:test-backend #~'unittest
37055 #:phases
37056 #~(modify-phases %standard-phases
37057 (add-before 'check 'pre-check
37058 (lambda _
37059 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37060 (native-inputs
37061 (list python-duckdb
37062 python-pytz
37063 python-pandas
37064 python-setuptools
37065 python-setuptools-scm
37066 python-tzdata))
37067 (home-page "https://sqlglot.com/")
37068 (synopsis "Python SQL Parser and Transpiler")
37069 (description
37070 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37071engine. It can be used to format SQL or translate between 31 different
37072dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37073BigQuery. It aims to read a wide variety of SQL inputs and output
37074syntactically and semantically correct SQL in the targeted dialects.")
37075 (license license:expat)))
37076
37077(define-public python-sqlglotrs
37078 (package
37079 (inherit python-sqlglot)
37080 (name "python-sqlglotrs")
37081 (version "0.6.1")
37082 (source
37083 (origin
37084 (method url-fetch)
37085 (uri (pypi-uri "sqlglotrs" version))
37086 (sha256
37087 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37088 (build-system cargo-build-system)
37089 (arguments
37090 (list
37091 #:install-source? #false
37092 #:tests? #f ;no tests
37093 #:imported-modules `(,@%cargo-build-system-modules
37094 ,@%pyproject-build-system-modules)
37095 #:modules '((guix build cargo-build-system)
37096 ((guix build pyproject-build-system) #:prefix py:)
37097 (guix build utils))
37098 #:phases
37099 #~(modify-phases %standard-phases
37100 (add-after 'build 'build-python-module
37101 (assoc-ref py:%standard-phases 'build))
37102 (add-after 'build-python-module 'install-python-module
37103 (assoc-ref py:%standard-phases 'install))
37104 (add-after 'install-python-module 'add-install-to-pythonpath
37105 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37106 (native-inputs
37107 (list maturin
37108 python-wrapper))
37109 (inputs
37110 (cargo-inputs 'python-sqlglotrs))))
37111
37112(define-public python-sqltrie
37113 (package
37114 (name "python-sqltrie")
37115 (version "0.11.2")
37116 (home-page "https://github.com/iterative/sqltrie/")
37117 (source
37118 (origin
37119 (method url-fetch)
37120 (uri (pypi-uri "sqltrie" version))
37121 (sha256
37122 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37123 (build-system pyproject-build-system)
37124 (arguments
37125 (list
37126 #:test-flags
37127 #~(list "--ignore=tests/benchmarks/"
37128 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37129 ;; yet in Guix.
37130 "--ignore=src/sqltrie/__pyinstaller")))
37131 (native-inputs
37132 (list python-pytest
37133 python-pytest-mock
37134 python-pytest-sugar
37135 python-setuptools
37136 python-setuptools-scm))
37137 (propagated-inputs
37138 (list python-attrs
37139 python-orjson
37140 python-pygtrie))
37141 (synopsis "SQL-based prefix tree for Python")
37142 (description
37143 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37144python-diskcache.")
37145 (license license:asl2.0)))
37146
37147(define-public python-socksipy-branch
37148 (package
37149 (name "python-socksipy-branch")
37150 (version "1.01")
37151 (source
37152 (origin
37153 (method url-fetch)
37154 (uri (pypi-uri "SocksiPy-branch" version))
37155 (sha256
37156 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37157 (build-system pyproject-build-system)
37158 (arguments (list #:tests? #f)) ; There are no tests
37159 (native-inputs (list python-setuptools))
37160 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37161 (synopsis "Python SOCKS module")
37162 (description
37163 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37164interface that supports connections to any TCP service through the use of a
37165SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37166this is a branch created by Mario Vilas to address some open issues,as the
37167original project seems to have been abandoned circa 2007.")
37168 (license license:bsd-3)))
37169
37170(define-public python-socksipychain
37171 (package
37172 (name "python-socksipychain")
37173 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37174 (revision . "0")))
37175 (version (git-version "2.1.3"
37176 (assoc-ref properties 'revision)
37177 (assoc-ref properties 'commit)))
37178 (source
37179 (origin
37180 (method git-fetch)
37181 (uri (git-reference
37182 (url "https://github.com/pagekite/PySocksipyChain")
37183 (commit (assoc-ref properties 'commit))))
37184 (file-name (git-file-name name version))
37185 (sha256
37186 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37187 (build-system pyproject-build-system)
37188 (arguments (list #:tests? #f)) ; Tests try to access the network.
37189 (native-inputs (list python-setuptools))
37190 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37191 (synopsis "Python SOCKS module with chained proxies support")
37192 (description
37193 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37194adds support for arbitrary chaining of proxy servers and various modes of
37195TLS/SSL encryption. It was developed for use in PageKite, and also includes
37196a simple netcat replacement with chaining support.")
37197 (license license:bsd-3)))
37198
37199(define-public python-sortedcollections
37200 (package
37201 (name "python-sortedcollections")
37202 (version "2.1.0")
37203 (source
37204 (origin
37205 (method git-fetch)
37206 (uri (git-reference
37207 (url "https://github.com/grantjenks/python-sortedcollections")
37208 (commit (string-append "v" version))))
37209 (file-name (git-file-name name version))
37210 (sha256
37211 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37212 (build-system pyproject-build-system)
37213 (native-inputs (list python-setuptools python-pytest python-wheel))
37214 (propagated-inputs (list python-sortedcontainers))
37215 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37216 (synopsis "Python Sorted Collections")
37217 (description "Sorted Collections is a Python sorted collections library.")
37218 (license license:asl2.0)))
37219
37220(define-public python-sortedcontainers
37221 (package
37222 (name "python-sortedcontainers")
37223 (version "2.4.0")
37224 (source
37225 (origin
37226 (method git-fetch) ;no tests in PyPI archive
37227 (uri (git-reference
37228 (url "https://github.com/grantjenks/python-sortedcontainers")
37229 (commit (string-append "v" version))))
37230 (file-name (git-file-name name version))
37231 (sha256
37232 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37233 (build-system pyproject-build-system)
37234 (arguments
37235 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37236 (native-inputs
37237 (list python-pytest-bootstrap python-setuptools))
37238 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37239 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37240 (description
37241 "This package provides a sorted collections library, written in
37242pure-Python.")
37243 (license license:asl2.0)))
37244
37245(define-public python-soupsieve
37246 (package
37247 (name "python-soupsieve")
37248 (version "2.7")
37249 (source
37250 (origin
37251 (method url-fetch)
37252 (uri (pypi-uri "soupsieve" version))
37253 (sha256
37254 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37255 (build-system pyproject-build-system)
37256 (native-inputs
37257 (list python-beautifulsoup4-bootstrap
37258 python-hatchling
37259 python-pytest))
37260 (home-page "https://github.com/facelessuser/soupsieve")
37261 (synopsis "CSS selector library")
37262 (description
37263 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37264Soup 4. It aims to provide selecting, matching, and filtering using modern
37265CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37266specifications up through the latest CSS level 4 drafts and beyond (though
37267some are not yet implemented).")
37268 (license license:expat)))
37269
37270(define-public python-spectra
37271 (package
37272 (name "python-spectra")
37273 (version "0.1.0")
37274 (source
37275 (origin
37276 (method url-fetch)
37277 (uri (pypi-uri "spectra" version))
37278 (sha256
37279 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37280 (build-system pyproject-build-system)
37281 (propagated-inputs
37282 (list python-colormath2))
37283 (native-inputs
37284 (list python-pytest python-setuptools python-wheel))
37285 (home-page "https://github.com/jsvine/spectra")
37286 (synopsis "Color scales and color conversion")
37287 (description
37288 "This package provides a Python library intended to make color math,
37289color scales, and color space conversion easy. It has support for:
37290
37291@enumerate
37292@item Color scales
37293@item Color ranges
37294@item Color blending
37295@item Brightening/darkening colors
37296@item Saturating/desaturating colors
37297@item Conversion to/from multiple color spaces.
37298@end enumerate\n")
37299 (license license:expat)))
37300
37301(define-public python-speedy-antlr-tool
37302 (package
37303 (name "python-speedy-antlr-tool")
37304 (version "1.4.3")
37305 (source
37306 (origin
37307 (method git-fetch)
37308 (uri (git-reference
37309 (url "https://github.com/amykyta3/speedy-antlr-tool")
37310 (commit (string-append "v" version))))
37311 (file-name (git-file-name name version))
37312 (sha256
37313 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37314 (build-system pyproject-build-system)
37315 (arguments '(#:tests? #f)) ;no test
37316 (native-inputs (list python-setuptools python-setuptools-scm))
37317 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37318 (home-page "https://speedy-antlr-tool.readthedocs.io")
37319 (synopsis "Generate ANTLR parser as Python extension module")
37320 (description
37321 "This tool generates a Python extension that runs your parser
37322using ANTLR's C++ target, and then translates the parsed tree
37323back into Python.")
37324 (license license:bsd-3)))
37325
37326(define-public python-speg
37327 (package
37328 (name "python-speg")
37329 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37330 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37331 (revision . "0")))
37332 (version (git-version "0.3"
37333 (assoc-ref properties 'revision)
37334 (assoc-ref properties 'commit)))
37335 (source
37336 (origin
37337 (method git-fetch)
37338 (uri (git-reference
37339 (url "https://github.com/avakar/speg")
37340 (commit (assoc-ref properties 'commit))))
37341 (file-name (git-file-name name version))
37342 (sha256
37343 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37344 (build-system pyproject-build-system)
37345 (native-inputs
37346 (list python-pytest
37347 python-setuptools))
37348 (propagated-inputs
37349 (list python-six))
37350 (home-page "https://github.com/avakar/speg")
37351 (synopsis "PEG-based parser interpreter with memoization")
37352 (description "This package is a PEG-based parser and interpreter with
37353memoization.")
37354 (license license:expat)))
37355
37356(define-public python-spinners
37357 (package
37358 (name "python-spinners")
37359 (version "0.0.24")
37360 (source
37361 (origin
37362 (method url-fetch)
37363 (uri (pypi-uri "spinners" version))
37364 (sha256
37365 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37366 (build-system pyproject-build-system)
37367 (arguments
37368 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37369 (native-inputs
37370 (list python-setuptools))
37371 (home-page "https://github.com/manrajgrover/py-spinners")
37372 (synopsis "Python library with graphical spinners for the terminal")
37373 (description
37374 "Spinners is a Python library that contains graphical spinners that can
37375be displayed terminal.")
37376 (license license:expat)))
37377
37378(define-public python-sre-yield
37379 (package
37380 (name "python-sre-yield")
37381 (version "1.2")
37382 (source
37383 (origin
37384 (method url-fetch)
37385 (uri (pypi-uri "sre_yield" version))
37386 (sha256
37387 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37388 (build-system pyproject-build-system)
37389 (arguments
37390 (list #:test-backend #~'unittest))
37391 (native-inputs
37392 (list python-setuptools))
37393 (home-page "https://github.com/google/sre_yield")
37394 (synopsis "Expands a regular expression to its possible matches")
37395 (description
37396 "The goal of sre_yield is to efficiently generate all values that can
37397match a given regular expression, or count possible matches efficiently. It
37398uses the parsed regular expression, so you get a much more accurate result
37399than trying to just split strings.")
37400 (license license:asl2.0)))
37401
37402(define-public python-srsly
37403 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37404 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37405 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37406 (package
37407 (name "python-srsly")
37408 (version "2.5.3")
37409 (source
37410 (origin
37411 (method git-fetch)
37412 (uri (git-reference
37413 (url "https://github.com/explosion/srsly")
37414 (commit (string-append "release-v" version))))
37415 (file-name (git-file-name name version))
37416 (sha256
37417 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37418 (build-system pyproject-build-system)
37419 (arguments
37420 (list
37421 ;; tests: 741 passed, 4 skipped, 22 xfailed
37422 #:test-flags
37423 #~(list "--pyargs" "srsly")
37424 #:phases
37425 #~(modify-phases %standard-phases
37426 (add-after 'unpack 'remove-broken-tests
37427 (lambda _
37428 ;; Tests depend on removed in 2.5.3 module
37429 ;; "srsly/cloudpickle/compat.py".
37430 ;; See: <https://github.com/explosion/srsly/issues/121>.
37431 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37432 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37433 (add-before 'check 'remove-local-source
37434 (lambda _
37435 (delete-file-recursively "srsly"))))))
37436 (native-inputs
37437 (list python-cython
37438 python-mock
37439 python-numpy
37440 python-psutil
37441 python-pytest
37442 python-pytest-timeout
37443 python-setuptools))
37444 (propagated-inputs
37445 (list python-catalogue))
37446 (home-page "https://github.com/explosion/srsly")
37447 (synopsis "Serialization utilities for Python")
37448 (description "This package bundles some of the best Python serialization
37449libraries into one standalone package, with a high-level API that makes it
37450easy to write code that's correct across platforms and Pythons.")
37451 (license license:expat)))
37452
37453(define-public python-srt
37454 (package
37455 (name "python-srt")
37456 (version "3.5.3")
37457 (source
37458 (origin
37459 (method url-fetch)
37460 (uri (pypi-uri "srt" version))
37461 (sha256
37462 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37463 (build-system pyproject-build-system)
37464 (native-inputs
37465 (list python-pytest
37466 python-setuptools
37467 python-wheel))
37468 (home-page "https://github.com/cdown/srt")
37469 (synopsis "SRT parsing library")
37470 (description
37471 "This package provides a Python library for parsing, modifying, and
37472composing subtitles in the SRT file format.")
37473 (license license:expat)))
37474
37475(define-public python-sshpubkeys
37476 (package
37477 (name "python-sshpubkeys")
37478 (version "3.2.0")
37479 (source
37480 (origin
37481 (method git-fetch)
37482 (uri (git-reference
37483 (url "https://github.com/ojarva/python-sshpubkeys")
37484 (commit (string-append "v" version))))
37485 (file-name (git-file-name name version))
37486 (sha256
37487 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37488 (build-system pyproject-build-system)
37489 (arguments
37490 (list #:tests? #f)) ; XXX: All tests fail
37491 (native-inputs
37492 (list python-setuptools
37493 python-wheel))
37494 (propagated-inputs
37495 (list python-cryptography
37496 python-ecdsa))
37497 (home-page "https://github.com/ojarva/python-sshpubkeys")
37498 (synopsis "OpenSSH public key parser")
37499 (description
37500 "This package provides a library for parsing and validating OpenSSH
37501public key files.")
37502 (license license:bsd-3)))
37503
37504(define-public python-sshtunnel
37505 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37506 (revision "0"))
37507 (package
37508 (name "python-sshtunnel")
37509 (version (git-version "0.4.0" revision commit))
37510 (source
37511 (origin
37512 (method git-fetch)
37513 (uri (git-reference
37514 (url "https://github.com/pahaz/sshtunnel")
37515 (commit commit)))
37516 (file-name (git-file-name name version))
37517 (sha256
37518 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37519 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37520 (build-system pyproject-build-system)
37521 (arguments
37522 (list
37523 #:phases
37524 #~(modify-phases %standard-phases
37525 (add-after 'unpack 'remove-deprecated-dsskey
37526 (lambda _
37527 (substitute* "sshtunnel.py"
37528 (("'dsa': paramiko\\.DSSKey,")
37529 "")
37530 (("paramiko\\.DSSKey, ")
37531 "")))))))
37532 (propagated-inputs (list python-paramiko))
37533 (native-inputs
37534 (list openssh python-mock python-pytest python-setuptools))
37535 (home-page "https://github.com/pahaz/sshtunnel")
37536 (synopsis "Python SSH tunnels library")
37537 (description
37538 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37539in the background, using Python.")
37540 (license license:expat))))
37541
37542(define-public python-stack-data
37543 (package
37544 (name "python-stack-data")
37545 (version "0.6.3")
37546 (source
37547 (origin
37548 (method url-fetch)
37549 (uri (pypi-uri "stack_data" version))
37550 (sha256
37551 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37552 (build-system pyproject-build-system)
37553 (arguments
37554 (list
37555 #:test-flags
37556 #~(list "-k" (string-join
37557 ;; XXX: Tests fail with HTML diff.
37558 (list "not test_executing_style_defs"
37559 "test_pygments_example"
37560 "test_example")
37561 " and not "))
37562 #:phases
37563 #~(modify-phases %standard-phases
37564 (add-after 'unpack 'set-home-env
37565 (lambda _
37566 (setenv "HOME" "/tmp"))))))
37567 (native-inputs
37568 (list python-cython
37569 python-littleutils
37570 python-pygments
37571 python-pytest
37572 python-setuptools
37573 python-setuptools-scm
37574 python-typeguard
37575 python-wheel))
37576 (propagated-inputs
37577 (list python-asttokens
37578 python-executing
37579 python-pure-eval))
37580 (home-page "https://github.com/alexmojaki/stack_data")
37581 (synopsis "Python stack frame and traceback manipulation library")
37582 (description
37583 "The @code{stack_data} Python library extracts data from stack frames and
37584tracebacks. Is can be used to display more useful tracebacks
37585than the default.")
37586 (license license:expat)))
37587
37588;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37589;; from the standard library, <https://peps.python.org/pep-0594/>.
37590(define %python-standard-pep-594-version "3.13.0")
37591(define %python-standard-pep-594-source
37592 (origin
37593 (method git-fetch)
37594 (uri (git-reference
37595 (url "https://github.com/youknowone/python-deadlib")
37596 (commit (string-append "v" %python-standard-pep-594-version))))
37597 (file-name (git-file-name "python-standard-pep-594"
37598 %python-standard-pep-594-version))
37599 (sha256
37600 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37601
37602(define-public python-standard-asynchat
37603 (package
37604 (name "python-standard-asynchat")
37605 (version %python-standard-pep-594-version)
37606 (source %python-standard-pep-594-source)
37607 (build-system pyproject-build-system)
37608 (arguments
37609 (list
37610 #:phases
37611 #~(modify-phases %standard-phases
37612 (add-after 'unpack 'chdir
37613 (lambda _
37614 (chdir "asynchat"))))))
37615 (native-inputs
37616 (list python-setuptools))
37617 (propagated-inputs
37618 (list python-standard-asyncore))
37619 (home-page "https://github.com/youknowone/python-deadlib")
37620 (synopsis "Backport of asynchat from Python 3.11")
37621 (description
37622 "Standard library @code{asynchat} redistribution. Deprecated since
37623version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37624@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37625standard library}.")
37626 (license license:psfl)))
37627
37628(define-public python-standard-asyncore
37629 (package
37630 (name "python-standard-asyncore")
37631 (version %python-standard-pep-594-version)
37632 (source %python-standard-pep-594-source)
37633 (build-system pyproject-build-system)
37634 (arguments
37635 (list
37636 #:phases
37637 #~(modify-phases %standard-phases
37638 (add-after 'unpack 'chdir
37639 (lambda _
37640 (chdir "asyncore"))))))
37641 (native-inputs
37642 (list python-setuptools))
37643 (home-page "https://github.com/youknowone/python-deadlib")
37644 (synopsis "Backport of asyncore from Python 3.11")
37645 (description
37646 "Standard library @code{asyncore} redistribution. Deprecated since
37647version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37648@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37649standard library}.")
37650 (license license:psfl)))
37651
37652(define-public python-standard-smtpd
37653 (package
37654 (name "python-standard-smtpd")
37655 (version %python-standard-pep-594-version)
37656 (source %python-standard-pep-594-source)
37657 (build-system pyproject-build-system)
37658 (arguments
37659 (list
37660 ;; ImportError: cannot import name 'mock_socket' from 'test'
37661 #:tests? #f
37662 #:phases
37663 #~(modify-phases %standard-phases
37664 (add-after 'unpack 'chdir
37665 (lambda _
37666 (chdir "smtpd"))))))
37667 (native-inputs
37668 (list python-setuptools))
37669 (propagated-inputs
37670 (list
37671 python-standard-asynchat
37672 python-standard-asyncore))
37673 (home-page "https://github.com/youknowone/python-deadlib")
37674 (synopsis "Backport of smtpd from Python 3.11")
37675 (description
37676 "Standard library @code{smtpd} redistribution. Deprecated since version
376773.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37678replacement for this module, based on @code{asyncio}. See:
37679@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37680standard library}.")
37681 (license license:psfl)))
37682
37683(define-public python-stdio-mgr
37684 (package
37685 (name "python-stdio-mgr")
37686 (version "1.0.1")
37687 (source
37688 (origin
37689 (method git-fetch)
37690 (uri (git-reference
37691 (url "https://github.com/bskinn/stdio-mgr")
37692 (commit (string-append "v" version))))
37693 (file-name (git-file-name name version))
37694 (sha256
37695 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
37696 (build-system pyproject-build-system)
37697 (arguments
37698 (list
37699 ;; Do not run doctests requiring sphinx.
37700 #:test-flags #~(list "--ignore=README.rst")))
37701 (native-inputs
37702 (list python-pytest
37703 python-setuptools
37704 python-wheel))
37705 (propagated-inputs
37706 (list python-attrs))
37707 (home-page "https://github.com/bskinn/stdio-mgr")
37708 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37709 (description
37710 "This package contains a context manager for mocking/wrapping
37711stdin/stdout/stderr.")
37712 (license license:expat)))
37713
37714;; TODO: This package is not necessary in Guix. It should be replaced by a
37715;; trivial python package providing the same functionality.
37716(define-public python-stdlib-list
37717 (package
37718 (name "python-stdlib-list")
37719 (version "0.11.1")
37720 (source
37721 (origin
37722 (method git-fetch)
37723 (uri (git-reference
37724 (url "https://github.com/jackmaney/python-stdlib-list")
37725 (commit (string-append "v" version))))
37726 (file-name (git-file-name name version))
37727 (sha256
37728 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
37729 (build-system pyproject-build-system)
37730 (native-inputs
37731 (list python-flit-core
37732 python-pytest
37733 python-sphinx))
37734 (home-page "https://github.com/jackmaney/python-stdlib-list")
37735 (synopsis "Python Standard Libraries")
37736 (description
37737 "This package contains a list of Python Standard Libraries.")
37738 (license license:expat)))
37739
37740(define-public python-stem
37741 ;; python-stem is mostly unmaintained, but still has occasional commits
37742 ;; added.
37743 (package
37744 (name "python-stem")
37745 (version "1.8.3")
37746 (source
37747 (origin
37748 (method git-fetch)
37749 (uri (git-reference
37750 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
37751 (commit version)))
37752 (file-name (git-file-name name version))
37753 (sha256
37754 (base32
37755 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
37756 (build-system pyproject-build-system)
37757 (arguments
37758 (list
37759 #:test-backend #~'custom
37760 #:test-flags #~(list "run_tests.py" "--unit")
37761 #:phases
37762 #~(modify-phases %standard-phases
37763 (add-after 'unpack 'fix-python-312
37764 (lambda _
37765 (substitute* (find-files "." "\\.py$")
37766 (("assertRaisesRegexp") "assertRaisesRegex")))))))
37767 (native-inputs
37768 (list python-setuptools
37769 python-wheel))
37770 (home-page "https://stem.torproject.org/")
37771 (synopsis
37772 "Python controller library that allows applications to interact with Tor")
37773 (description
37774 "Stem is a Python controller library for Tor. With it you can use Tor's
37775 control protocol to script against the Tor process and read descriptor data
37776 relays publish about themselves.")
37777 (license license:lgpl3)))
37778
37779(define-public python-stltools
37780 (package
37781 (name "python-stltools")
37782 (version "2022.01.20")
37783 (source
37784 (origin
37785 (method git-fetch)
37786 (uri (git-reference
37787 (url "https://github.com/rsmith-nl/stltools")
37788 (commit version)))
37789 (file-name (git-file-name name version))
37790 (sha256
37791 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
37792 (build-system pyproject-build-system)
37793 (arguments
37794 (list
37795 #:phases
37796 #~(modify-phases %standard-phases
37797 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
37798 (delete 'build)
37799 (replace 'install
37800 (lambda* (#:key inputs outputs #:allow-other-keys)
37801 (let ((moddir (string-append (site-packages inputs outputs)
37802 "/stltools"))
37803 (bindir (string-append #$output "/bin")))
37804 (copy-recursively "stltools" moddir)
37805 (mkdir-p bindir)
37806 (for-each
37807 (lambda (script)
37808 (let ((source (string-append script ".py"))
37809 (target (string-append bindir "/" script)))
37810 (copy-file source target)
37811 (chmod target #o555)))
37812 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
37813 (native-inputs
37814 (list python-pytest
37815 python-setuptools))
37816 (propagated-inputs
37817 (list python-pycairo))
37818 (home-page "https://github.com/rsmith-nl/stltools")
37819 (synopsis "Python modules and scripts for handling STL files")
37820 (description
37821 "This package consists of Python modules and scripts for manipulating
37822stereolithography (STL) files. It can convert STL files into POV-ray meshes,
37823PDF and PostScript. The Python modules allow for reading and writing STL
37824files. It supports both the text and binary forms of STL.")
37825 (license license:expat)))
37826
37827(define-public python-stone
37828 (package
37829 (name "python-stone")
37830 (version "3.3.9")
37831 (source
37832 (origin
37833 (method git-fetch)
37834 (uri (git-reference
37835 (url "https://github.com/dropbox/stone")
37836 (commit (string-append "v" version))))
37837 (file-name (git-file-name name version))
37838 (sha256
37839 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
37840 (build-system pyproject-build-system)
37841 (native-inputs
37842 (list python-pytest
37843 python-setuptools))
37844 (propagated-inputs
37845 (list python-jinja2
37846 python-packaging
37847 python-ply
37848 python-six)) ;hard requirement, still
37849 (home-page "https://github.com/dropbox/stone")
37850 (synopsis "Official Api Spec Language for Dropbox")
37851 (description
37852 "Stone is an interface description language (IDL) for APIs.")
37853 (license license:expat)))
37854
37855(define-public python-stopit
37856 (package
37857 (name "python-stopit")
37858 (version "1.1.2")
37859 (source
37860 (origin
37861 (method git-fetch)
37862 (uri (git-reference
37863 (url "https://github.com/glenfant/stopit")
37864 (commit version)))
37865 (file-name (git-file-name name version))
37866 (sha256
37867 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
37868 (build-system pyproject-build-system)
37869 (arguments
37870 (list #:test-backend #~'custom
37871 #:test-flags #~(list "tests.py")))
37872 (native-inputs (list python-setuptools))
37873 (home-page "https://pypi.python.org/pypi/stopit")
37874 (synopsis "Timeout control decorator and context managers")
37875 (description
37876 "Raise asynchronous exceptions in other threads, control the timeout of
37877blocks or callables with two context managers and two decorators.")
37878 (license license:expat)))
37879
37880(define-public python-straight-plugin
37881 (package
37882 (name "python-straight-plugin")
37883 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
37884 (revision . "0")))
37885 (version (git-version "1.4.1"
37886 (assoc-ref properties 'revision)
37887 (assoc-ref properties 'commit)))
37888 (source
37889 (origin
37890 (method git-fetch)
37891 (uri (git-reference
37892 (url "https://github.com/ironfroggy/straight.plugin")
37893 (commit (assoc-ref properties 'commit))))
37894 (file-name (git-file-name name version))
37895 (sha256
37896 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
37897 (build-system pyproject-build-system)
37898 (arguments
37899 (list
37900 ;; XXX: Some tests started failing with the move to [email protected].
37901 ;; Consider removing this leaf unmaintained package.
37902 #:tests? #f
37903 #:test-backend #~'custom
37904 #:test-flags #~(list "tests.py")
37905 #:phases
37906 #~(modify-phases %standard-phases
37907 (add-after 'unpack 'fix-python-3.12-incompatibility
37908 (lambda _
37909 (substitute* "straight/plugin/loaders.py"
37910 (("from imp import find_module")
37911 "")))))))
37912 (native-inputs (list python-mock python-setuptools))
37913 (home-page "https://github.com/ironfroggy/straight.plugin")
37914 (synopsis "Simple namespaced plugin facility")
37915 (description
37916 "Straight Plugin provides a type of plugin you can create from almost any
37917existing Python modules, and an easy way for outside developers to add
37918functionality and customization to your projects with their own plugins.")
37919 (license license:expat)))
37920
37921(define-public python-streamtracer
37922 (package
37923 (name "python-streamtracer")
37924 (version "2.4.0")
37925 (source
37926 (origin
37927 (method url-fetch)
37928 (uri (pypi-uri "streamtracer" version))
37929 (sha256
37930 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
37931 (build-system pyproject-build-system)
37932 (arguments
37933 (list
37934 #:imported-modules `(,@%cargo-build-system-modules
37935 ,@%pyproject-build-system-modules)
37936 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
37937 (guix build pyproject-build-system)
37938 (guix build utils))
37939 #:test-flags
37940 #~(list "--pyargs" "streamtracer")
37941 #:phases
37942 #~(modify-phases %standard-phases
37943 (add-after 'unpack 'prepare-cargo-build-system
37944 (lambda args
37945 (for-each (lambda (phase)
37946 (format #t "Running cargo phase: ~a~%" phase)
37947 (apply (assoc-ref cargo:%standard-phases phase)
37948 #:cargo-target #$(cargo-triplet)
37949 args))
37950 '(unpack-rust-crates
37951 configure
37952 check-for-pregenerated-files
37953 patch-cargo-checksums)))))))
37954 (native-inputs
37955 (append
37956 (list maturin
37957 python-pytest
37958 python-pytest-doctestplus
37959 rust
37960 `(,rust "cargo"))
37961 (or (and=> (%current-target-system)
37962 (compose list make-rust-sysroot))
37963 '())))
37964 (propagated-inputs
37965 (list python-numpy
37966 python-packaging))
37967 (inputs (cargo-inputs 'python-streamtracer))
37968 (home-page "https://github.com/sunpy/streamtracer")
37969 (synopsis "Rapid streamline tracing in Python")
37970 (description
37971 "streamtracer is a Python package for rapid streamline tracing on
37972regularly spaced grids. The actual streamline tracing is done at a low level
37973in Rust, with a nice Python API provided on top.")
37974 (license license:gpl3+)))
37975
37976(define-public python-strenum
37977 (package
37978 (name "python-strenum")
37979 (version "0.4.15")
37980 (source
37981 (origin
37982 (method git-fetch)
37983 (uri (git-reference
37984 (url "https://github.com/irgeek/StrEnum")
37985 (commit (string-append "v" version))))
37986 (file-name (git-file-name name version))
37987 (sha256
37988 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
37989 (snippet #~(delete-file "versioneer.py"))))
37990 (build-system pyproject-build-system)
37991 (arguments
37992 (list #:test-flags #~(list "tests")))
37993 (native-inputs
37994 (list python-pytest
37995 python-pytest-pylint
37996 python-setuptools
37997 python-versioneer))
37998 (home-page "https://github.com/irgeek/StrEnum")
37999 (synopsis "Enum that inherits from str")
38000 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38001@code{str} to complement @code{enum.IntEnum} in the standard library.")
38002 (license license:expat)))
38003
38004(define-public python-structlog
38005 (package
38006 (name "python-structlog")
38007 (version "25.5.0")
38008 (source
38009 (origin
38010 (method url-fetch)
38011 (uri (pypi-uri "structlog" version))
38012 (sha256
38013 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38014 (build-system pyproject-build-system)
38015 (native-inputs
38016 (list python-hatch-fancy-pypi-readme
38017 python-hatch-vcs
38018 python-hatchling
38019 python-pytest
38020 python-pytest-asyncio
38021 python-time-machine))
38022 (home-page "https://www.structlog.org/")
38023 (synopsis "Structured Logging for Python")
38024 (description "@code{structlog} changes logging in Python by adding structure
38025to your log entries.")
38026 (license (list license:asl2.0 license:expat))))
38027
38028(define-public python-style
38029 (package
38030 (name "python-style")
38031 (version "1.1.6")
38032 (source
38033 (origin
38034 (method url-fetch)
38035 (uri (pypi-uri "style" version))
38036 (sha256
38037 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38038 (build-system pyproject-build-system)
38039 (arguments
38040 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38041 (native-inputs
38042 (list python-setuptools))
38043 (home-page "https://github.com/lmittmann/style")
38044 (synopsis "Terminal string styling")
38045 (description
38046"@code{python-style} is a simple terminal string styling package. Its API is
38047a port of the chalk package for javascript.")
38048 (license license:expat)))
38049
38050(define-public python-svgelements
38051 (package
38052 (name "python-svgelements")
38053 (version "1.9.6")
38054 (source
38055 (origin
38056 (method git-fetch)
38057 (uri (git-reference
38058 (url "https://github.com/meerk40t/svgelements")
38059 (commit version)))
38060 (file-name (git-file-name name version))
38061 (sha256
38062 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38063 (build-system pyproject-build-system)
38064 (arguments
38065 (list
38066 #:phases
38067 #~(modify-phases %standard-phases
38068 (add-after 'unpack 'fix-python-incompatibilities
38069 (lambda _
38070 (substitute* (find-files "test" "\\.py$")
38071 (("(assert(|NotAlmost)Equal)s" all out in)
38072 out)))))))
38073 (native-inputs
38074 (list python-anyio
38075 python-pytest
38076 python-numpy
38077 python-pillow
38078 python-scipy
38079 python-setuptools))
38080 (home-page "https://github.com/meerk40t/svgelements")
38081 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38082 (description
38083 "This module does high fidelity SVG parsing and geometric rendering.
38084The goal is to successfully and correctly process SVG for use with any scripts
38085that may need or want to use SVG files as geometric data.")
38086 (license license:expat)))
38087
38088(define-public python-svgutils
38089 (package
38090 (name "python-svgutils")
38091 (version "0.3.4")
38092 (source
38093 (origin
38094 (method url-fetch)
38095 (uri (pypi-uri "svgutils" version))
38096 (sha256
38097 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38098 (build-system pyproject-build-system)
38099 (arguments
38100 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38101 (native-inputs
38102 (list python-setuptools))
38103 (propagated-inputs
38104 (list python-lxml))
38105 (home-page "https://svgutils.readthedocs.io")
38106 (synopsis "Python SVG editor")
38107 (description "This is an utility package that helps with editing and
38108concatenating SVG files. It is especially directed at scientists preparing
38109final figures for submission to journals. So far it supports arbitrary
38110placement and scaling of SVG figures and adding markers, such as labels.")
38111 (license license:expat)))
38112
38113(define-public python-svgwrite
38114 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38115 (package
38116 (name "python-svgwrite")
38117 (version "1.4.3")
38118 (source
38119 (origin
38120 (method git-fetch)
38121 (uri (git-reference
38122 (url "https://github.com/mozman/svgwrite")
38123 (commit (string-append "v" version))))
38124 (file-name (git-file-name name version))
38125 (sha256
38126 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38127 (build-system pyproject-build-system)
38128 (arguments
38129 (list
38130 ;; Disable test which wants internet.
38131 #:test-flags
38132 #~(list "-k" "not test_embed_google_web_font")))
38133 (native-inputs (list python-pytest python-setuptools))
38134 (home-page "https://github.com/mozman/svgwrite")
38135 (synopsis "Python library to create SVG drawings")
38136 (description
38137 "This package provides a Python library to create SVG drawings.")
38138 (license license:expat)))
38139
38140(define-public python-swagger-spec-validator
38141 (package
38142 (name "python-swagger-spec-validator")
38143 (version "3.0.4")
38144 (source
38145 (origin
38146 (method git-fetch)
38147 (uri (git-reference
38148 (url "https://github.com/Yelp/swagger_spec_validator")
38149 (commit (string-append "v" version))))
38150 (file-name (git-file-name name version))
38151 (sha256
38152 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38153 (build-system pyproject-build-system)
38154 (native-inputs
38155 (list python-pytest
38156 python-setuptools))
38157 (propagated-inputs
38158 (list python-importlib-resources
38159 python-jsonschema
38160 python-pyyaml
38161 python-typing-extensions))
38162 (home-page "https://github.com/Yelp/swagger_spec_validator")
38163 (synopsis "Validation of Swagger specifications")
38164 (description
38165 "@code{swagger_spec_validator} provides a library for validating Swagger
38166API specifications.")
38167 (license license:asl2.0)))
38168
38169(define-public python-syllables
38170 (package
38171 (name "python-syllables")
38172 (version "1.0.3")
38173 (source
38174 (origin
38175 (method git-fetch)
38176 (uri (git-reference
38177 (url "https://github.com/prosegrinder/python-syllables")
38178 (commit (string-append "v" version))))
38179 (file-name (git-file-name name version))
38180 (sha256
38181 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38182 (build-system pyproject-build-system)
38183 (native-inputs
38184 (list python-cmudict
38185 python-pytest
38186 python-setuptools))
38187 (home-page "https://github.com/prosegrinder/python-syllables")
38188 (synopsis "Package for estimating the number of syllables in a word")
38189 (description
38190 "This package provides a Python package for estimating the number of
38191syllables in a word.")
38192 (license license:gpl3)))
38193
38194(define-public python-sympy
38195 (package
38196 (name "python-sympy")
38197 (version "1.13.3")
38198 (source
38199 (origin
38200 (method url-fetch)
38201 (uri (pypi-uri "sympy" version))
38202 (sha256
38203 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38204 (build-system pyproject-build-system)
38205 (arguments
38206 '(#:phases
38207 (modify-phases %standard-phases
38208 (replace 'check
38209 (lambda* (#:key tests? #:allow-other-keys)
38210 (if tests?
38211 (invoke "python3" "-c"
38212 "import sympy; sympy.test(\"/core\")")))))))
38213 (propagated-inputs (list python-mpmath))
38214 (native-inputs
38215 (list python-hypothesis
38216 python-pytest
38217 python-setuptools
38218 python-wheel))
38219 (home-page "https://www.sympy.org/")
38220 (synopsis "Python library for symbolic mathematics")
38221 (description
38222 "SymPy is a Python library for symbolic mathematics. It aims to become a
38223full-featured computer algebra system (CAS) while keeping the code as simple
38224as possible in order to be comprehensible and easily extensible.")
38225 (license license:bsd-3)))
38226
38227(define-public python-tables
38228 (package
38229 (name "python-tables")
38230 ;; XXX: Compatibility fix for numexpr 2.13.0, see:
38231 ;; <https://github.com/PyTables/PyTables/pull/1256>.
38232 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
38233 (revision . "0")))
38234 (version (git-version "3.10.2"
38235 (assoc-ref properties 'revision)
38236 (assoc-ref properties 'commit)))
38237 (source
38238 (origin
38239 (method git-fetch)
38240 (uri (git-reference
38241 (url "https://github.com/PyTables/PyTables")
38242 (commit (assoc-ref properties 'commit))))
38243 (file-name (git-file-name name version))
38244 (sha256
38245 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
38246 (snippet '(begin
38247 (use-modules (guix build utils))
38248 (delete-file-recursively "hdf5-blosc")
38249 (delete-file-recursively "c-blosc")))))
38250 (build-system pyproject-build-system)
38251 (arguments
38252 (list
38253 #:phases
38254 #~(modify-phases %standard-phases
38255 (add-after 'unpack 'disable-tuning
38256 (lambda _
38257 (substitute* "setup.py"
38258 (("cpu_flags = .*")
38259 "cpu_flags = ['sse2']\n"))))
38260 (add-after 'unpack 'fix-reference-to-blosc2
38261 (lambda* (#:key inputs #:allow-other-keys)
38262 (substitute* "tables/__init__.py"
38263 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
38264 m indent)
38265 (string-append indent
38266 "\""
38267 (search-input-file inputs "/lib/libblosc2.so")
38268 "\",\n" m)))))
38269 (add-before 'build 'pre-build
38270 (lambda _
38271 (substitute* "setup.py"
38272 (("hdf5-blosc/src")
38273 (format #f "~a/src"
38274 #$(package-source (this-package-input "hdf5-blosc")))))
38275 (invoke "make" "distclean") ;Regenerate C code with Cython
38276 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38277 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38278 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38279 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
38280 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38281 (add-before 'check 'pre-check
38282 (lambda _
38283 (setenv "HOME" "/tmp")))
38284 (replace 'check
38285 (lambda* (#:key tests? #:allow-other-keys)
38286 (when tests?
38287 (with-directory-excursion "/tmp"
38288 ;; Performing only a light (yet comprehensive) subset of the
38289 ;; test suite. If you want a more complete test, try
38290 ;; passing the --heavy flag to this script (or set the
38291 ;; 'heavy' parameter in case you are using tables.test()
38292 ;; call). The whole suite will take more than 4 hours to
38293 ;; complete on a relatively modern CPU and around 512 MB of
38294 ;; main memory.
38295 (invoke "python" "-m" "tables.tests.test_all"))))))))
38296 (native-inputs
38297 (list pkg-config
38298 python-cython
38299 python-pytest
38300 python-setuptools
38301 python-sphinx))
38302 (inputs
38303 (list bzip2
38304 c-blosc
38305 c-blosc2
38306 hdf5
38307 hdf5-blosc
38308 lzo))
38309 (propagated-inputs
38310 (list python-blosc2
38311 python-numexpr
38312 python-numpy
38313 python-packaging
38314 python-py-cpuinfo
38315 python-typing-extensions))
38316 (home-page "https://www.pytables.org/")
38317 (synopsis "Hierarchical datasets for Python")
38318 (description "PyTables is a package for managing hierarchical datasets and
38319designed to efficiently cope with extremely large amounts of data.")
38320 (license license:bsd-3)))
38321
38322(define-public python-tablib
38323 (package
38324 (name "python-tablib")
38325 (version "3.9.0")
38326 (source
38327 (origin
38328 (method url-fetch)
38329 (uri (pypi-uri "tablib" version))
38330 (sha256
38331 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38332 (build-system pyproject-build-system)
38333 (native-inputs
38334 (list python-pytest python-setuptools python-setuptools-scm))
38335 (inputs ;; [cli]
38336 (list python-tabulate))
38337 (propagated-inputs
38338 (list python-markuppy
38339 python-odfpy
38340 python-openpyxl
38341 python-pyyaml
38342 python-xlrd
38343 python-xlwt))
38344 (home-page "https://tablib.readthedocs.io")
38345 (synopsis "Format agnostic tabular data library")
38346 (description
38347 "@code{tablib} is a format-agnostic tabular dataset library,
38348written in Python. Supported output formats are Excel (Sets + Books),
38349JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38350TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38351
38352@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38353quite huge, this Guix package doesn't depend on pandas. In case, just also
38354install @code{python-pandas}.")
38355 (license license:expat)))
38356
38357(define-public python-tabulate
38358 (package
38359 (name "python-tabulate")
38360 (version "0.9.0")
38361 (source
38362 (origin
38363 (method url-fetch)
38364 (uri (pypi-uri "tabulate" version))
38365 (sha256
38366 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38367 (build-system pyproject-build-system)
38368 (native-inputs
38369 (list python-pytest
38370 python-setuptools-scm
38371 python-setuptools))
38372 (propagated-inputs
38373 (list python-wcwidth))
38374 (home-page "https://github.com/astanin/python-tabulate")
38375 (synopsis "Pretty-print tabular data")
38376 (description
38377 "Tabulate is a library and command-line utility to pretty-print tabular
38378data in Python.")
38379 (license license:expat)))
38380
38381(define-public python-takethetime
38382 (package
38383 (name "python-takethetime")
38384 (version "0.3.1")
38385 (source
38386 (origin
38387 (method url-fetch)
38388 (uri (pypi-uri "TakeTheTime" version))
38389 (sha256
38390 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38391 (build-system pyproject-build-system)
38392 (arguments
38393 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38394 (native-inputs
38395 (list python-setuptools
38396 python-wheel))
38397 (home-page "https://github.com/ErikBjare/TakeTheTime")
38398 (synopsis "Timing chunks of code")
38399 (description
38400 "This package implements a functionality for time taking using context
38401managers.")
38402 (license license:expat)))
38403
38404(define-public python-targ
38405 (package
38406 (name "python-targ")
38407 (version "0.6.0")
38408 (source
38409 (origin
38410 (method git-fetch)
38411 (uri (git-reference
38412 (url "https://github.com/piccolo-orm/targ/")
38413 (commit version)))
38414 (file-name (git-file-name name version))
38415 (sha256
38416 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38417 (build-system pyproject-build-system)
38418 (native-inputs
38419 (list python-pytest
38420 python-setuptools))
38421 (propagated-inputs
38422 (list python-colorama
38423 python-docstring-parser))
38424 (home-page "https://github.com/piccolo-orm/targ/")
38425 (synopsis "Python CLI builder using type hints and docstrings")
38426 (description
38427 "Targ is a package to build a Python @acronym{Command Line Interface,
38428CLI} for applications by using type hints and docstrings.")
38429 (license license:expat)))
38430
38431(define-public python-tasklib
38432 (package
38433 (name "python-tasklib")
38434 (version "2.5.1")
38435 (source
38436 (origin
38437 (method git-fetch)
38438 (uri (git-reference
38439 (url "https://github.com/GothenburgBitFactory/tasklib")
38440 (commit version)))
38441 (file-name (git-file-name name version))
38442 (sha256
38443 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38444 (build-system pyproject-build-system)
38445 (arguments
38446 (list
38447 #:test-backend
38448 #~'unittest))
38449 (inputs (list taskwarrior))
38450 (native-inputs (list python-setuptools tzdata-for-tests))
38451 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38452 (synopsis "Official Taskwarrior library for Python")
38453 (description "@code{tasklib} is a Python library for interacting with
38454Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38455 (license license:bsd-3)))
38456
38457(define-public python-tasklogger
38458 (package
38459 (name "python-tasklogger")
38460 (version "1.2.0")
38461 (source
38462 (origin
38463 (method url-fetch)
38464 (uri (pypi-uri "tasklogger" version))
38465 (sha256
38466 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38467 (build-system pyproject-build-system)
38468 (native-inputs
38469 (list python-pytest
38470 python-numpy
38471 python-setuptools))
38472 (propagated-inputs
38473 (list python-deprecated))
38474 (home-page "https://github.com/scottgigante/tasklogger")
38475 (synopsis "Extension to the core Python logging library")
38476 (description "This package provides an extension to the core Python
38477logging library for logging the beginning and completion of tasks and
38478subtasks.")
38479 (license license:gpl2)))
38480
38481(define-public python-tatsu
38482 (package
38483 (name "python-tatsu")
38484 (version "5.13.2")
38485 (source
38486 (origin
38487 (method git-fetch)
38488 (uri (git-reference
38489 (url "https://github.com/neogeny/TatSu")
38490 (commit (string-append "v" version))))
38491 (file-name (git-file-name name version))
38492 (sha256
38493 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38494 (build-system pyproject-build-system)
38495 (native-inputs
38496 (list python-pytest
38497 python-setuptools))
38498 (home-page "https://tatsu.readthedocs.io/en/stable/")
38499 (synopsis "PEG/Packrat Parser generator for Python")
38500 (description
38501 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38502Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38503or Packrat parser in Python.")
38504 (license license:bsd-2)))
38505
38506(define-public python-tblib
38507 (package
38508 (name "python-tblib")
38509 (version "3.1.0")
38510 (source
38511 (origin
38512 (method url-fetch)
38513 (uri (pypi-uri "tblib" version))
38514 (sha256
38515 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38516 (build-system pyproject-build-system)
38517 (arguments
38518 (list
38519 ;; Don't run benchmark tests.
38520 #:test-flags #~(list "--ignore=tests/test_perf.py")
38521 #:phases
38522 #~(modify-phases %standard-phases
38523 (add-after 'unpack 'fix-pytest-config
38524 (lambda _
38525 (substitute* "pytest.ini"
38526 (("--benchmark-disable") "")))))))
38527 (native-inputs
38528 (list python-pytest
38529 python-setuptools))
38530 (home-page "https://github.com/ionelmc/python-tblib")
38531 (synopsis "Traceback serialization library")
38532 (description
38533 "Traceback serialization allows you to:
38534
38535@enumerate
38536@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38537different processes. This allows better error handling when running code over
38538multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38539
38540@item Parse traceback strings and raise with the parsed tracebacks.
38541@end enumerate\n")
38542 (license license:bsd-3)))
38543
38544(define-public python-telethon
38545 (package
38546 (name "python-telethon")
38547 (version "1.42.0")
38548 (source
38549 (origin
38550 (method git-fetch)
38551 (uri (git-reference
38552 (url "https://codeberg.org/Lonami/Telethon")
38553 (commit (string-append "v" version))))
38554 (file-name (git-file-name name version))
38555 (sha256
38556 (base32 "16xp5cwfv1ly25zcnnn0jgrmzpsl3yqzf92dfbnpyiy64j8wkh9l"))))
38557 (build-system pyproject-build-system)
38558 (native-inputs
38559 (list python-pytest
38560 python-pytest-asyncio
38561 python-pytest-trio
38562 python-setuptools))
38563 (propagated-inputs
38564 (list python-rsa python-pyaes))
38565 (home-page "https://docs.telethon.dev")
38566 (synopsis "Full-featured Telegram client library for Python 3")
38567 (description "This library is designed to make it easy to write Python
38568programs that can interact with Telegram.")
38569 (license license:expat)))
38570
38571(define-public python-tempdir
38572 (package
38573 (name "python-tempdir")
38574 (version "0.7.1")
38575 (source
38576 (origin
38577 (method url-fetch)
38578 (uri (pypi-uri "tempdir" version))
38579 (sha256
38580 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
38581 (build-system pyproject-build-system)
38582 (arguments (list #:tests? #f)) ; No tests.
38583 (native-inputs (list python-setuptools))
38584 (home-page "https://pypi.org/project/tempdir/")
38585 (synopsis "Python library for managing temporary directories")
38586 (description
38587 "This library manages temporary directories that are automatically
38588deleted with all their contents when they are no longer needed. It is
38589particularly convenient for use in tests.")
38590 (license license:expat)))
38591
38592(define-public python-tempora
38593 (package
38594 (name "python-tempora")
38595 (version "5.8.1")
38596 (source
38597 (origin
38598 (method url-fetch)
38599 (uri (pypi-uri "tempora" version))
38600 (sha256
38601 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38602 (build-system pyproject-build-system)
38603 (arguments
38604 (list
38605 ;; Do not test the myproject.toml build as it tries to pull dependencies
38606 ;; from the Internet.
38607 #:test-flags #~(list "-k" "not project"
38608 "tests")))
38609 (native-inputs
38610 (list python-freezegun
38611 python-pytest
38612 python-setuptools
38613 python-setuptools-scm
38614 python-tzdata))
38615 (propagated-inputs (list python-dateutil python-jaraco-functools))
38616 (home-page "https://github.com/jaraco/tempora")
38617 (synopsis "Python date and time objects and routines")
38618 (description
38619 "The @code{tempora} Python library contains miscellaneous date and time
38620related utilities and constants, routines for measuring, profiling, and
38621getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38622well as an event scheduler.")
38623 (license license:expat)))
38624
38625(define-public python-tenacity
38626 (package
38627 (name "python-tenacity")
38628 (version "9.0.0")
38629 (source
38630 (origin
38631 (method url-fetch)
38632 (uri (pypi-uri "tenacity" version))
38633 (sha256
38634 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
38635 (build-system pyproject-build-system)
38636 (native-inputs
38637 (list python-pytest
38638 python-setuptools
38639 python-setuptools-scm
38640 python-tornado
38641 python-typeguard
38642 python-wheel))
38643 (home-page "https://github.com/jd/tenacity")
38644 (synopsis "Retrying library for python")
38645 (description
38646 "Tenacity is a general-purpose python library to simplify the task of
38647adding retry behavior to just about anything.")
38648 (license license:asl2.0)))
38649
38650(define-public python-term-background
38651 (package
38652 (name "python-term-background")
38653 (version "1.0.2")
38654 (source
38655 (origin
38656 (method url-fetch)
38657 (uri (pypi-uri "term_background" version))
38658 (sha256
38659 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
38660 (arguments
38661 (list
38662 #:phases
38663 '(modify-phases %standard-phases
38664 (add-after 'unpack 'fix-build
38665 (lambda _ (delete-file "setup.py"))))))
38666 (build-system pyproject-build-system)
38667 (native-inputs
38668 (list python-pytest
38669 python-setuptools
38670 python-setuptools-scm
38671 python-wrapper
38672 python-wheel))
38673 (home-page "http://github.com/rocky/shell-term-background")
38674 (synopsis "Determine if shell has a light or dark background")
38675 (description "This package determines if shell has a light or dark
38676background.")
38677 (license license:gpl2+)))
38678
38679(define-public python-term-image
38680 (package
38681 (name "python-term-image")
38682 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
38683 (revision . "0")))
38684 (version (git-version "0.7.2"
38685 (assoc-ref properties 'revision)
38686 (assoc-ref properties 'commit)))
38687 (source
38688 (origin
38689 (method git-fetch)
38690 (uri (git-reference
38691 (url "https://github.com/AnonymouX47/term-image")
38692 (commit (assoc-ref properties 'commit))))
38693 (file-name (git-file-name name version))
38694 (sha256
38695 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
38696 (build-system pyproject-build-system)
38697 (arguments
38698 (list
38699 #:test-flags
38700 #~(list "tests"
38701 ;; These tests require network access.
38702 "-k" (string-append "not test_from_url"
38703 " and not test_source"
38704 " and not test_close"))
38705 #:phases
38706 #~(modify-phases %standard-phases
38707 (add-after 'unpack 'bump-pillow-requirement
38708 (lambda _
38709 (substitute* "src/term_image/image/common.py"
38710 (("\\.getdata")
38711 ".get_flattened_data"))
38712 (let* ((major #$(version-major
38713 (package-version
38714 (this-package-input "python-pillow"))))
38715 (next (number->string (+ 1 (string->number major)))))
38716 (substitute* "pyproject.toml"
38717 (("pillow>=9.1,<12")
38718 (string-append "pillow>=9.1,<" next)))))))))
38719 (propagated-inputs (list python-pillow python-requests))
38720 (native-inputs
38721 (list python-pytest
38722 python-setuptools
38723 python-urwid))
38724 (home-page "https://github.com/AnonymouX47/term-image")
38725 (synopsis "Display images in the terminal")
38726 (description "term-image is a library and program to display images on
38727compatible terminals.
38728
38729Features:
38730@enumerate
38731@item Multiple image formats (basically all formats supported by
38732@code{PIL.Image.open()})
38733@item Multiple image source types: PIL image instance, local file, URL
38734@item Multiple image render styles (with automatic support detection)
38735@item Support for multiple terminal graphics protocols, including Kitty
38736@item Transparency support (with multiple options)
38737@item Animated image support (including transparent ones)
38738@item Integration into various TUI / terminal-based output libraries
38739@item Terminal size awareness
38740@item Automatic and manual image sizing
38741@item Horizontal and vertical alignment
38742@item Automatic and manual font ratio adjustment (to preserve image aspect
38743ratio)
38744@end enumerate")
38745 (license license:expat)))
38746
38747(define-public python-termcolor
38748 (package
38749 (name "python-termcolor")
38750 (version "2.5.0")
38751 (source
38752 (origin
38753 (method url-fetch)
38754 (uri (pypi-uri "termcolor" version))
38755 (sha256
38756 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
38757 (build-system pyproject-build-system)
38758 (arguments
38759 (list
38760 #:phases
38761 #~(modify-phases %standard-phases
38762 (add-after 'unpack 'relax-coverage-requirements
38763 (lambda _
38764 (substitute* "pyproject.toml"
38765 ((".*coverage.*") "")))))))
38766 (native-inputs
38767 (list python-hatch-vcs python-hatchling python-pytest))
38768 (home-page "https://pypi.org/project/termcolor/")
38769 (synopsis "ANSII Color formatting for terminal output")
38770 (description
38771 "This package provides ANSII Color formatting for output in terminals.")
38772 (license license:expat)))
38773
38774(define-public python-termcolor-1
38775 (package
38776 (inherit python-termcolor)
38777 (version "1.1.0")
38778 (source
38779 (origin
38780 (method url-fetch)
38781 (uri (pypi-uri "termcolor" version))
38782 (sha256
38783 (base32
38784 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
38785 ;; There are no tests
38786 (arguments (list #:tests? #false))
38787 (native-inputs
38788 (list python-setuptools
38789 python-wheel))))
38790
38791(define-public python-termcolor-next
38792 (package
38793 (inherit python-termcolor)
38794 (name "python-termcolor-next")
38795 (version "3.1.0")
38796 (source
38797 (origin
38798 (method url-fetch)
38799 (uri (pypi-uri "termcolor" version))
38800 (sha256
38801 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
38802 (arguments '())))
38803
38804(define-public python-terminaltables
38805 (package
38806 (name "python-terminaltables")
38807 (version "3.1.0")
38808 (source
38809 (origin
38810 (method git-fetch)
38811 (uri (git-reference
38812 (url "https://github.com/Robpol86/terminaltables")
38813 (commit (string-append "v" version))))
38814 (file-name (git-file-name name version))
38815 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
38816 (build-system pyproject-build-system)
38817 ;; XXX: A lot of test fail with flaky behavior.
38818 (arguments (list #:tests? #f))
38819 (native-inputs
38820 (list python-colorclass
38821 python-colorama
38822 python-pytest
38823 python-setuptools
38824 python-termcolor))
38825 (home-page "https://github.com/Robpol86/terminaltables")
38826 (synopsis
38827 "Generate simple tables in terminals from a nested list of strings")
38828 (description
38829 "This package makes it easy to draw tables in terminal/console
38830applications from a list of lists of strings. It supports multi-line rows.")
38831 (license license:expat)))
38832
38833(define-public python-termstyle
38834 (package
38835 (name "python-termstyle")
38836 (version "0.1.11")
38837 (source
38838 (origin
38839 (method url-fetch)
38840 (uri (pypi-uri "termstyle" version))
38841 (sha256
38842 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
38843 (build-system pyproject-build-system)
38844 (arguments
38845 (list #:test-backend #~'custom
38846 #:test-flags #~(list "test3.py")))
38847 (native-inputs
38848 (list python-setuptools))
38849 (home-page "https://github.com/gfxmonk/termstyle")
38850 (synopsis "Console text coloring for Python")
38851 (description "This package provides console text coloring for Python.")
38852 (license license:bsd-3)))
38853
38854(define-public python-text-unidecode
38855 (package
38856 (name "python-text-unidecode")
38857 (version "1.3")
38858 (source
38859 (origin
38860 (method url-fetch)
38861 (uri (pypi-uri "text-unidecode" version))
38862 (sha256
38863 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
38864 (build-system pyproject-build-system)
38865 (native-inputs
38866 (list python-pytest
38867 python-setuptools))
38868 (home-page "https://github.com/kmike/text-unidecode/")
38869 (synopsis "Decode Unicode data")
38870 (description
38871 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
38872Perl library. It can create ASCII representations of Unicode data. In general
38873users should prefer the @code{python-unidecode} package which offers better
38874memory usage and transliteration quality.")
38875 ;; The user can choose either license.
38876 (license (list license:clarified-artistic license:gpl2+))))
38877
38878(define-public python-textdistance
38879 (package
38880 (name "python-textdistance")
38881 (version "4.6.3")
38882 (source
38883 (origin
38884 (method git-fetch)
38885 (uri (git-reference
38886 (url "https://github.com/life4/textdistance")
38887 (commit version)))
38888 (file-name (git-file-name name version))
38889 (sha256
38890 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
38891 (build-system pyproject-build-system)
38892 ;; tests: 430 passed, 1446 warnings
38893 (native-inputs
38894 (list python-numpy
38895 python-pytest
38896 python-setuptools))
38897 (propagated-inputs
38898 (list python-jellyfish
38899 python-distance
38900 python-levenshtein
38901 python-pylev
38902 python-pyxdameraulevenshtein
38903 python-rapidfuzz))
38904 (home-page "https://github.com/life4/textdistance")
38905 (synopsis "Compute distance between the two texts")
38906 (description "@code{textdistance} is a pure Python library for comparing
38907distance between two or more sequences by many algorithms.")
38908 (license license:expat)))
38909
38910(define-public python-textparser
38911 (package
38912 (name "python-textparser")
38913 (version "0.24.0")
38914 (source
38915 (origin
38916 (method url-fetch)
38917 (uri (pypi-uri "textparser" version))
38918 (sha256
38919 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
38920 (build-system pyproject-build-system)
38921 (arguments
38922 (list #:test-backend #~'unittest))
38923 (native-inputs (list python-setuptools))
38924 (home-page "https://github.com/eerimoq/textparser")
38925 (synopsis "Fast text parser for Python")
38926 (description "This library provides a text parser written in the Python
38927language. It aims to be fast.")
38928 (license license:expat)))
38929
38930(define-public python-texttable
38931 (package
38932 (name "python-texttable")
38933 (version "1.7.0")
38934 (source
38935 (origin
38936 (method git-fetch)
38937 (uri (git-reference
38938 (url "https://github.com/foutaise/texttable/")
38939 (commit (string-append "v" version))))
38940 (file-name (git-file-name name version))
38941 (sha256
38942 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
38943 (build-system pyproject-build-system)
38944 (arguments (list #:test-flags #~(list "tests.py")))
38945 (native-inputs (list python-pytest python-setuptools))
38946 (home-page "https://github.com/foutaise/texttable/")
38947 (synopsis "Create simple ASCII tables in Python")
38948 (description
38949 "This package provides a Python module for creating simple ASCII
38950tables.")
38951 (license license:expat)))
38952
38953(define-public python-textual
38954 (package
38955 (name "python-textual")
38956 (version "7.4.0")
38957 (source
38958 (origin
38959 (method git-fetch)
38960 (uri (git-reference
38961 (url "https://github.com/Textualize/textual")
38962 (commit (string-append "v" version))))
38963 (file-name (git-file-name name version))
38964 (sha256
38965 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
38966 (build-system pyproject-build-system)
38967 (arguments
38968 (list
38969 #:test-flags
38970 ;; Snapshot tests require python-pytest-textual-snapshot which
38971 ;; in turn depends on python-textual.
38972 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
38973 "-k" (string-append
38974 ;; Broken for unknown reason.
38975 "not test_textual_env_var"
38976 ;; Tests that require python-treesitter-languages.
38977 " and not test_widget_construct"
38978 " and not test_setting_builtin_language_via_constructor"
38979 " and not test_setting_builtin_language_via_attribute"
38980 " and not test_setting_language_to_none"
38981 " and not test_setting_unknown_language"
38982 " and not test_register_language"
38983 " and not test_update_highlight_query"
38984 " and not test_default_theme"
38985 " and not test_setting_builtin_themes"
38986 " and not test_setting_unknown_theme_raises_exception"
38987 " and not test_registering_and_setting_theme"
38988 " and not test_progress_bar_width_1fr"))
38989 #:phases
38990 #~(modify-phases %standard-phases
38991 (add-after 'unpack 'relax-requirements
38992 (lambda _
38993 (substitute* "pyproject.toml"
38994 (("pygments =.*")
38995 "pygments = \"*\"\n")))))))
38996 (propagated-inputs
38997 (list python-markdown-it-py
38998 python-mdit-py-plugins
38999 python-platformdirs
39000 python-rich
39001 python-tree-sitter
39002 ;; python-tree-sitter-languages ; optional, not packed yet
39003 python-typing-extensions))
39004 (native-inputs
39005 (list python-poetry-core
39006 python-pytest
39007 python-pytest-asyncio
39008 python-pytest-xdist))
39009 (home-page "https://github.com/Textualize/textual")
39010 (synopsis "Build text user interfaces in Python")
39011 (description "Textual is a @acronym{TUI, Text User Interface} framework
39012for Python inspired by modern web development.")
39013 (license license:expat)))
39014
39015(define-public python-tftpy
39016 (package
39017 (name "python-tftpy")
39018 (version "0.8.6")
39019 (source
39020 (origin
39021 (method git-fetch)
39022 (uri (git-reference
39023 (url "https://github.com/msoulier/tftpy")
39024 (commit version)))
39025 (file-name (git-file-name name version))
39026 (sha256
39027 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39028 (build-system pyproject-build-system)
39029 (arguments
39030 (list
39031 #:test-backend #~'unittest
39032 #:test-flags #~(list "tests/test.py")
39033 #:phases
39034 #~(modify-phases %standard-phases
39035 (add-before 'check 'configure-tests
39036 (lambda* (#:key tests? #:allow-other-keys)
39037 (when tests?
39038 ;; The default DEBUG logging level is way too verbose.
39039 (substitute* "tests/test.py"
39040 (("logging\\.DEBUG")
39041 "logging.INFO"))))))))
39042 (native-inputs (list python-setuptools))
39043 (home-page "https://tftpy.sourceforge.net/")
39044 (synopsis "Python trivial file transfer protocol (TFTP) library")
39045 (description
39046 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39047be used to act both as a TFTP client or TFTP server.")
39048 (license license:expat)))
39049
39050(define-public python-thefuzz
39051 (package
39052 (name "python-thefuzz")
39053 (version "0.22.1")
39054 (source
39055 (origin
39056 (method git-fetch)
39057 (uri (git-reference
39058 (url "https://github.com/seatgeek/thefuzz")
39059 (commit version)))
39060 (file-name (git-file-name name version))
39061 (sha256
39062 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39063 (build-system pyproject-build-system)
39064 (arguments
39065 (list #:test-flags #~'("-k" "not TestCodeFormat")
39066 #:phases #~(modify-phases %standard-phases
39067 ;; pycodestyle is only used in TestCodeFormat.
39068 (add-after 'unpack 'unrequire-pycodestyle
39069 (lambda _
39070 (substitute* "test_thefuzz.py"
39071 (("import pycodestyle.*") "")))))))
39072 (propagated-inputs (list python-rapidfuzz))
39073 (native-inputs (list python-hypothesis
39074 python-pytest
39075 python-setuptools))
39076 (home-page "https://github.com/seatgeek/thefuzz")
39077 (synopsis "Fuzzy string matching in Python")
39078 (description
39079 "This Python package implements fuzzing string matching
39080using Levenshtein distance.")
39081 (license license:expat)))
39082
39083(define-public python-three-merge
39084 (package
39085 (name "python-three-merge")
39086 (version "0.1.1")
39087 (source
39088 (origin
39089 ;; There are no tests in the PyPI tarball.
39090 (method git-fetch)
39091 (uri (git-reference
39092 (url "https://github.com/spyder-ide/three-merge")
39093 (commit (string-append "v" version))))
39094 (file-name (git-file-name name version))
39095 (sha256
39096 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39097 (build-system pyproject-build-system)
39098 (propagated-inputs
39099 (list python-diff-match-patch))
39100 (native-inputs
39101 (list python-pytest python-setuptools python-wheel))
39102 (home-page "https://github.com/spyder-ide/three-merge")
39103 (synopsis "Library for merging two strings with respect to a base one")
39104 (description
39105 "This package provides a Python library to perform a 3-way merge between
39106strings, based on @code{diff-match-patch}. This library performs merges at a
39107character level, as opposed to most VCS systems, which opt for a line-based
39108approach.")
39109 (license license:expat)))
39110
39111(define-public python-throttler
39112 (package
39113 (name "python-throttler")
39114 (version "1.2.2")
39115 (source
39116 (origin
39117 (method git-fetch)
39118 (uri (git-reference
39119 (url "https://github.com/uburuntu/throttler")
39120 (commit (string-append "v" version))))
39121 (sha256
39122 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
39123 (build-system pyproject-build-system)
39124 (native-inputs
39125 (list python-aiohttp
39126 python-codecov
39127 python-flake8
39128 python-pytest
39129 python-pytest-asyncio
39130 python-setuptools
39131 python-wheel))
39132 (home-page "https://github.com/uburuntu/throttler")
39133 (synopsis "Throttling with asyncio support")
39134 (description
39135 "This is a Python package for easy throttling with asyncio support.")
39136 (license license:expat)))
39137
39138(define-public python-tifffile
39139 (package
39140 (name "python-tifffile")
39141 (version "2025.10.4")
39142 (source
39143 (origin
39144 (method url-fetch)
39145 (uri (pypi-uri "tifffile" version))
39146 (sha256
39147 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39148 (build-system pyproject-build-system)
39149 ;; Tests require lfdfiles, which depends on tifffile
39150 (arguments (list #:tests? #f))
39151 (propagated-inputs
39152 (list python-numpy))
39153 (native-inputs
39154 (list python-setuptools))
39155 (home-page "https://www.lfd.uci.edu/~gohlke/")
39156 (synopsis "Read and write TIFF(r) files")
39157 (description
39158 "This package lets you read image and metadata from many bio-scientific
39159formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39160MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39161to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39162 (license license:bsd-3)))
39163
39164(define-public python-tiktoken
39165 (package
39166 (name "python-tiktoken")
39167 (version "0.9.0")
39168 (source
39169 (origin
39170 (method url-fetch)
39171 (uri (pypi-uri "tiktoken" version))
39172 (sha256
39173 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39174 (build-system cargo-build-system)
39175 (arguments
39176 (list
39177 #:install-source? #false
39178 #:imported-modules
39179 (append %pyproject-build-system-modules
39180 %cargo-build-system-modules)
39181 #:modules
39182 '((guix build cargo-build-system)
39183 ((guix build pyproject-build-system) #:prefix py:)
39184 (guix build utils))
39185 #:phases
39186 #~(modify-phases %standard-phases
39187 (replace 'build
39188 (assoc-ref py:%standard-phases 'build))
39189 (add-after 'install 'wrap
39190 (lambda _
39191 ;; Collection of python- and pyproject-build-system phases
39192 ;; between 'install and 'check.
39193 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39194 (assoc-ref py:%standard-phases 'add-install-to-path)
39195 (assoc-ref py:%standard-phases 'wrap)
39196 (assoc-ref py:%standard-phases 'create-entrypoints)
39197 (assoc-ref py:%standard-phases 'compile-bytecode)))
39198 (replace 'install
39199 (assoc-ref py:%standard-phases 'install)))))
39200 (propagated-inputs (list python-regex python-requests))
39201 (inputs (cargo-inputs 'python-tiktoken))
39202 (native-inputs
39203 (list python-setuptools
39204 python-setuptools-rust
39205 python-wheel
39206 python-wrapper))
39207 (home-page "https://github.com/openai/tiktoken/")
39208 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39209 (description
39210 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39211@code{OpenAI's} models.")
39212 (license license:expat)))
39213
39214(define-public python-timeout-decorator
39215 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39216 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39217 (package
39218 (name "python-timeout-decorator")
39219 (version "0.5.0")
39220 (source
39221 (origin
39222 (method url-fetch)
39223 (uri (pypi-uri "timeout-decorator" version))
39224 (sha256
39225 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39226 (build-system pyproject-build-system)
39227 (arguments (list #:tests? #f))
39228 (native-inputs (list python-setuptools python-wheel))
39229 (home-page "https://github.com/pnpnpn/timeout-decorator")
39230 (synopsis "Timeout decorator")
39231 (description "This package provides a decorator that raises an error
39232when an operation takes longer than expected.")
39233 (license license:expat)))
39234
39235(define-public python-titlecase
39236 (package
39237 (name "python-titlecase")
39238 (version "2.4.1")
39239 (source
39240 (origin
39241 (method url-fetch)
39242 (uri (pypi-uri "titlecase" version))
39243 (sha256
39244 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39245 (build-system pyproject-build-system)
39246 (arguments
39247 (list
39248 #:test-backend #~'unittest))
39249 (native-inputs
39250 (list python-setuptools))
39251 (home-page "https://github.com/ppannuto/python-titlecase")
39252 (synopsis "Capitalize strings similar to book titles")
39253 (description
39254 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39255It capitalizes (predominantly English) strings in a way that is similar to
39256book titles, using the New York Times Manual of Style to leave certain words
39257lowercase.")
39258 (license license:expat)))
39259
39260(define-public python-tlsh
39261 (package
39262 (name "python-tlsh")
39263 (version "4.11.2")
39264 (home-page "https://github.com/trendmicro/tlsh")
39265 (source
39266 (origin
39267 (method git-fetch)
39268 (uri (git-reference (url home-page) (commit version)))
39269 (file-name (git-file-name name version))
39270 (sha256
39271 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39272 (build-system pyproject-build-system)
39273 (arguments
39274 (list
39275 #:phases
39276 #~(modify-phases %standard-phases
39277 (add-before 'build 'configure
39278 (lambda _
39279 (invoke "cmake" "."))) ;to generate tlsh_version.h
39280 (add-after 'configure 'chdir
39281 (lambda _
39282 (chdir "py_ext")))
39283 (replace 'check
39284 (lambda* (#:key tests? #:allow-other-keys)
39285 (when tests?
39286 (with-directory-excursion "../Testing"
39287 (invoke "./python_test.sh"))))))))
39288 (native-inputs (list cmake-minimal python-setuptools))
39289 (synopsis "Fuzzy matching library for Python")
39290 (description
39291 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39292Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39293value which can be used for similarity comparisons. Similar objects have
39294similar hash values, which allows for the detection of similar objects by
39295comparing their hash values. The byte stream should have a sufficient amount
39296of complexity; for example, a byte stream of identical bytes will not generate
39297a hash value.")
39298 (license license:asl2.0)))
39299
39300(define-public python-tlv8
39301 (package
39302 (name "python-tlv8")
39303 (version "0.10.0")
39304 (source
39305 (origin
39306 (method git-fetch)
39307 (uri (git-reference
39308 (url "https://github.com/jlusiardi/tlv8_python")
39309 (commit (string-append "v" version))))
39310 (file-name (git-file-name name version))
39311 (sha256
39312 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39313 (build-system pyproject-build-system)
39314 (native-inputs (list python-setuptools python-pytest))
39315 (home-page "https://github.com/jlusiardi/tlv8_python")
39316 (synopsis
39317 "Python library for @acronym{TLV, type-length-value} encoded data")
39318 (description
39319 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39320Represents type and length by one byte each, hence the name @code{tlv8}.")
39321 (license license:asl2.0)))
39322
39323(define-public python-tokenize-rt
39324 (package
39325 (name "python-tokenize-rt")
39326 (version "6.2.0")
39327 (source
39328 (origin
39329 (method git-fetch)
39330 (uri (git-reference
39331 (url "https://github.com/asottile/tokenize-rt")
39332 (commit (string-append "v" version))))
39333 (file-name (git-file-name name version))
39334 (sha256
39335 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39336 (build-system pyproject-build-system)
39337 (native-inputs (list python-pytest python-setuptools))
39338 (home-page "https://github.com/asottile/tokenize-rt")
39339 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39340 (description
39341 "This Python library is a wrapper around @code{tokenize} from the Python
39342standard library. It provides two additional tokens @code{ESCAPED_NL} and
39343@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39344and @code{tokens_to_src} to roundtrip.")
39345 (license license:expat)))
39346
39347(define-public python-tomlkit
39348 (package
39349 (name "python-tomlkit")
39350 (version "0.13.3")
39351 (source
39352 (origin
39353 (method url-fetch)
39354 (uri (pypi-uri "tomlkit" version))
39355 (sha256
39356 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
39357 (build-system pyproject-build-system)
39358 (native-inputs
39359 (list python-poetry-core
39360 python-pytest
39361 python-pyyaml))
39362 (home-page "https://github.com/sdispater/tomlkit")
39363 (synopsis "Style-preserving TOML library")
39364 (description
39365 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39366preserves all comments, indentations, whitespace and internal element ordering,
39367and makes them accessible and editable via an intuitive API. It can also
39368create new TOML documents from scratch using the provided helpers. Part of the
39369implementation has been adapted, improved, and fixed from Molten.")
39370 (license license:expat)))
39371
39372(define-public python-toolrack
39373 (package
39374 (name "python-toolrack")
39375 (version "4.0.3")
39376 (source
39377 (origin
39378 (method git-fetch)
39379 (uri (git-reference
39380 (url "https://github.com/albertodonato/toolrack")
39381 (commit (string-append "v" version))))
39382 (file-name (git-file-name name version))
39383 (sha256
39384 (base32
39385 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39386 (build-system pyproject-build-system)
39387 (arguments
39388 (list
39389 #:phases
39390 #~(modify-phases %standard-phases
39391 (add-after 'unpack 'patch-/bin/sh
39392 (lambda _
39393 (substitute* "tests/aio/process_test.py"
39394 (("/bin/sh")
39395 (which "sh"))))))))
39396 (native-inputs
39397 (list python-pytest
39398 python-pytest-asyncio
39399 python-pytest-mock
39400 python-setuptools))
39401 (home-page "https://github.com/albertodonato/toolrack")
39402 (synopsis "Collection of Python utility functions and classes")
39403 (description "This package provides a collection of miscellaneous utility
39404functions and classes.")
39405 (license license:lgpl3+)))
39406
39407(define-public python-toolshed
39408 (package
39409 (name "python-toolshed")
39410 (version "0.4.8")
39411 (source
39412 (origin
39413 (method git-fetch)
39414 (uri (git-reference
39415 (url "https://github.com/brentp/toolshed")
39416 (commit (string-append "v" version))))
39417 (file-name (git-file-name name version))
39418 (sha256
39419 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39420 (build-system pyproject-build-system)
39421 (native-inputs
39422 (list python-pytest
39423 python-setuptools))
39424 (home-page "https://github.com/brentp/toolshed/")
39425 (synopsis "Collection of modules and functions for working with data")
39426 (description "This is a collection of well-tested, simple modules and
39427functions that aim to reduce boilerplate when working with data.")
39428 (license license:bsd-2)))
39429
39430(define-public python-toolz
39431 (package
39432 (name "python-toolz")
39433 (version "1.1.0")
39434 (source
39435 (origin
39436 (method git-fetch)
39437 (uri (git-reference
39438 (url "https://github.com/pytoolz/toolz")
39439 (commit version)))
39440 (file-name (git-file-name name version))
39441 (sha256
39442 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39443 (build-system pyproject-build-system)
39444 (arguments
39445 (list
39446 #:phases
39447 #~(modify-phases %standard-phases
39448 (add-after 'unpack 'set-version
39449 (lambda _
39450 (substitute* "pyproject.toml"
39451 (("\\[tool.setuptools-git-versioning\\]" all)
39452 (string-append "[tool.setuptools_scm]\n"
39453 "write_to = \"toolz/_version.py\"\n"
39454 all))))))))
39455 (native-inputs
39456 (list python-pytest
39457 python-setuptools
39458 ;; Project expects setuptools-git-versioning to build version, but
39459 ;; it does not support envar override as seuptools-scm.
39460 python-setuptools-scm))
39461 (home-page "https://github.com/pytoolz/toolz/")
39462 (synopsis "List processing tools and functional utilities")
39463 (description
39464 "This package provides a set of utility functions for iterators,
39465functions, and dictionaries.")
39466 (license license:bsd-3)))
39467
39468(define-public python-toposort
39469 (package
39470 (name "python-toposort")
39471 (version "1.10")
39472 (source
39473 (origin
39474 (method url-fetch)
39475 (uri (pypi-uri "toposort" version))
39476 (sha256
39477 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39478 (build-system pyproject-build-system)
39479 (arguments
39480 (list #:test-backend #~'custom
39481 #:test-flags #~(list "-m" "test.test_toposort")))
39482 (native-inputs (list python-setuptools))
39483 (home-page "https://gitlab.com/ericvsmith/toposort")
39484 (synopsis "Topological sort algorithm")
39485 (description
39486 "This package provides an implementation of a topological sort
39487algorithm.")
39488 (license license:asl2.0)))
39489
39490(define-public python-towncrier
39491 (package
39492 (name "python-towncrier")
39493 (version "25.8.0")
39494 (source
39495 (origin
39496 (method url-fetch)
39497 (uri (pypi-uri "towncrier" version))
39498 (sha256
39499 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39500 (build-system pyproject-build-system)
39501 (native-inputs
39502 (list git-minimal/pinned ;tests create git repositories
39503 python-hatchling
39504 python-pytest
39505 python-twisted))
39506 (propagated-inputs
39507 (list python-click
39508 python-jinja2))
39509 (home-page "https://towncrier.readthedocs.io/en/stable/")
39510 (synopsis "Manage release notes")
39511 (description
39512 "@code{towncrier} is a utility to produce useful, summarized news files
39513 (also known as changelogs) for a project.")
39514 (license license:expat)))
39515
39516(define-public python-tqdm
39517 (package
39518 (name "python-tqdm")
39519 (version "4.67.1")
39520 (source
39521 (origin
39522 (method url-fetch)
39523 (uri (pypi-uri "tqdm" version))
39524 (sha256
39525 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39526 (build-system pyproject-build-system)
39527 (arguments
39528 (list #:test-flags
39529 '(list "-o" "asyncio_mode=auto"
39530 "-k" "not perf and not test_rlock_creation")))
39531 (native-inputs
39532 (list python-pytest
39533 python-pytest-asyncio
39534 python-pytest-timeout
39535 python-setuptools
39536 python-setuptools-scm
39537 python-toml
39538 python-wheel))
39539 (home-page "https://github.com/tqdm/tqdm")
39540 (synopsis "Fast, extensible progress meter")
39541 (description
39542 "Make loops show a progress bar on the console by just wrapping any
39543iterable with @code{|tqdm(iterable)|}. Offers many options to define
39544design and layout.")
39545 (license (list license:mpl2.0 license:expat))))
39546
39547(define-public python-traitlets
39548 (package
39549 (name "python-traitlets")
39550 (version "5.14.3")
39551 (source
39552 (origin
39553 (method url-fetch)
39554 (uri (pypi-uri "traitlets" version))
39555 (sha256
39556 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39557 (build-system pyproject-build-system)
39558 ;; tests: 566 passed, 3 skipped, 1 warning
39559 (native-inputs
39560 (list python-hatchling
39561 python-pytest))
39562 (home-page "https://ipython.org")
39563 (synopsis "Configuration system for Python applications")
39564 (description
39565 "Traitlets is a framework that lets Python classes have attributes with
39566type checking, dynamically calculated default values, and ‘on change’
39567callbacks. The package also includes a mechanism to use traitlets for
39568configuration, loading values from files or from command line arguments. This
39569is a distinct layer on top of traitlets, so you can use traitlets in your code
39570without using the configuration machinery.")
39571 (license license:bsd-3)))
39572
39573(define-public python-translate-toolkit
39574 (package
39575 (name "python-translate-toolkit")
39576 (version "3.15.6")
39577 (source
39578 (origin
39579 (method url-fetch)
39580 (uri (pypi-uri "translate_toolkit" version))
39581 (sha256
39582 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39583 (build-system pyproject-build-system)
39584 (arguments
39585 (list
39586 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39587 #:test-flags
39588 ;; TODO: Some of the optional inputs are not packaged yet.
39589 #~(list #$@(map (lambda (file) (string-append "--ignore="
39590 "tests/translate/"
39591 file))
39592 (list "convert/test_ini2po.py"
39593 "convert/test_php2po.py"
39594 "convert/test_po2ini.py"
39595 "convert/test_po2php.py"
39596 "storage/test_cpo.py"
39597 "storage/test_fluent.py"
39598 "storage/test_ini.py"
39599 "storage/test_php.py"
39600 "storage/test_po.py"
39601 "storage/test_pypo.py"
39602 "storage/test_subtitles.py"))
39603 #$@(map (lambda (test) (string-append "--deselect="
39604 "tests/translate/storage/"
39605 test))
39606 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39607 ;; 0xff in position 0: invalid start byte
39608 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39609 ;; FileNotFoundError: [Errno 2] No such file or
39610 ;; directory: 'msgfmt'
39611 "test_mo.py::TestMOFile::test_output"
39612 ;; assert 0 == -16200
39613 "test_poheader.py::test_timezones"))
39614 #$@(map (lambda (test) (string-append "--deselect="
39615 "tests/translate/tools/"
39616 test))
39617 ;; XXX: Some issues with XML parsing.
39618 (list "test_junitmsgfmt.py::test_output"
39619 "test_pocount.py::test_output"
39620 "test_pocount.py::test_cases"))
39621 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
39622 (native-inputs
39623 (list python-pytest
39624 python-setuptools
39625 python-setuptools-scm))
39626 (propagated-inputs
39627 (list python-cwcwidth
39628 python-cheroot
39629 ;; python-aeidon
39630 ;; python-fluent
39631 python-iniparse
39632 python-lxml
39633 python-mistletoe
39634 python-phply
39635 python-pyparsing
39636 python-ruamel.yaml
39637 python-vobject))
39638 (home-page "https://toolkit.translatehouse.org")
39639 (synopsis "Tools and API for translation and localization engineering")
39640 (description
39641 "Tools and API for translation and localization engineering. It contains
39642several utilities, as well as an API for building localization tools.")
39643 (license license:gpl2+)))
39644
39645;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
39646(define-public python-translate-toolkit-for-offlate
39647 (hidden-package
39648 (package
39649 (inherit python-translate-toolkit)
39650 (version "3.6.2")
39651 (source
39652 (origin
39653 (method url-fetch)
39654 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
39655 (sha256
39656 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
39657 (arguments
39658 (list #:tests? #f)))))
39659
39660(define-public python-translitcodec
39661 (package
39662 (name "python-translitcodec")
39663 (version "0.7.0")
39664 (source
39665 (origin
39666 (method git-fetch)
39667 (uri (git-reference
39668 (url "https://github.com/claudep/translitcodec")
39669 (commit (string-append "version-" version))))
39670 (file-name (git-file-name name version))
39671 (sha256
39672 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
39673 (build-system pyproject-build-system)
39674 (native-inputs (list python-pytest python-setuptools))
39675 (home-page "https://github.com/claudep/translitcodec")
39676 (synopsis "Unicode to 8-bit charset transliteration codec")
39677 (description
39678 "This package contains codecs for transliterating ISO 10646 texts into
39679best-effort representations using smaller coded character sets (ASCII,
39680ISO 8859, etc.).")
39681 (license license:expat)))
39682
39683(define-public python-treelib
39684 (package
39685 (name "python-treelib")
39686 (version "1.8.0")
39687 (source
39688 (origin
39689 (method git-fetch)
39690 (uri (git-reference
39691 (url "https://github.com/caesar0301/treelib")
39692 (commit (string-append "v" version))))
39693 (file-name (git-file-name name version))
39694 (sha256
39695 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
39696 (patches
39697 (search-patches "python-treelib-remove-python2-compat.patch"))))
39698 (build-system pyproject-build-system)
39699 (native-inputs (list python-poetry-core python-pytest))
39700 (home-page "https://github.com/caesar0301/treelib")
39701 (synopsis "Implementation of a tree structure in Python")
39702 (description
39703 "This package provides a Python implementation of a tree structure.")
39704 (license license:asl2.0)))
39705
39706(define-public python-trio
39707 (package
39708 (name "python-trio")
39709 (version "0.32.0")
39710 (source
39711 (origin
39712 (method url-fetch)
39713 (uri (pypi-uri "trio" version))
39714 (sha256
39715 (base32 "0sw04md83splkb0x37bmd1yj8rbf033p2k0x3qim3k9vjbn2j3qm"))))
39716 (build-system pyproject-build-system)
39717 (arguments
39718 (list
39719 #:test-flags
39720 #~(list
39721 #$@(if (package? (this-package-native-input "python-trustme"))
39722 #~()
39723 #~("--ignore=src/trio/_tests/test_dtls.py"
39724 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
39725 "--ignore=src/trio/_tests/test_ssl.py"))
39726 ;; Skip tests for the upstream repository's tooling.
39727 "--ignore=src/trio/_tests/tools"
39728 "-k" (string-join
39729 (list
39730 ;; Keyboard interrupts misbehave in the build sandbox.
39731 "not test_ki_in_repl"
39732 "test_KI_interrupts"
39733 "test_run_in_trio_thread_ki"
39734 ;; Somehow f'{check_errno_is_5!r}' evaluates
39735 ;; to "'check_errno_is_5'" instead of "<function ...>",
39736 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
39737 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
39738 ;; will probably be removed in version 0.35.
39739 "test_Matcher_check"
39740 "test_matcher_tostring"
39741 "test_raisesgroup_tostring"
39742 ;; Failure in name resolution.
39743 "test_SocketType_resolve"
39744 ;; OSError: protocol not found.
39745 "test_getprotobyname")
39746 " and not ")
39747 "src/trio/_tests")
39748 #:phases
39749 #~(modify-phases %standard-phases
39750 (add-after 'unpack 'patch-pthread-path
39751 (lambda* (#:key inputs #:allow-other-keys)
39752 (substitute* '("src/trio/_core/_thread_cache.py"
39753 "src/trio/_tests/test_threads.py")
39754 (("ctypes.util.find_library\\(\"pthread\"\\)")
39755 (simple-format #f "~s"
39756 (search-input-file inputs "lib/libpthread.so.0"))))))
39757 (add-before 'check 'set-env
39758 (lambda _
39759 ;; Tests require a writable home.
39760 (setenv "HOME" "/tmp"))))))
39761 (native-inputs
39762 (append
39763 (if (supported-package? python-pyopenssl)
39764 (list python-pyopenssl)
39765 '())
39766 (if (supported-package? python-trustme)
39767 (list python-trustme)
39768 '())
39769 (list python-async-generator)
39770 (if (supported-package? python-cryptography)
39771 (list python-cryptography)
39772 '())
39773 (list python-jedi
39774 python-pylint
39775 python-pytest
39776 python-setuptools)))
39777 (propagated-inputs
39778 (list python-attrs
39779 python-idna
39780 python-outcome
39781 python-sniffio
39782 python-sortedcontainers))
39783 (home-page "https://trio.readthedocs.io")
39784 (synopsis "Friendly Python library for async concurrency and I/O")
39785 (description
39786 "Trio strives to be a production-quality, async/await-native I/O library
39787for Python. Like all async libraries, its main purpose is to help you write
39788programs that do multiple things at the same time with parallelized I/O.")
39789 ;; Either license applies.
39790 (license (list license:expat license:asl2.0))))
39791
39792(define-public python-trio-typing
39793 (package
39794 (name "python-trio-typing")
39795 (version "0.10.0")
39796 (source
39797 (origin
39798 (method url-fetch)
39799 (uri (pypi-uri "trio-typing" version))
39800 (sha256
39801 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
39802 (build-system pyproject-build-system)
39803 (native-inputs (list python-pytest python-setuptools python-wheel))
39804 (propagated-inputs
39805 (list python-async-generator
39806 python-importlib-metadata
39807 python-mypy-extensions
39808 python-packaging
39809 python-trio
39810 python-typing-extensions))
39811 (home-page "https://github.com/python-trio/trio-typing")
39812 (synopsis "Static type checking support for Trio and related projects")
39813 (description
39814 "This package provides:
39815
39816@itemize
39817@item PEP 561 typing stubs packages for the Trio project packages:
39818
39819@itemize
39820@item trio (@code{trio-stubs})
39821@item outcome (@code{outcome-stubs})
39822@item async_generator (@code{async_generator-stubs})
39823@end itemize
39824
39825@item A package @code{trio_typing} containing types that Trio programs often
39826want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
39827a mypy plugin that smooths over some limitations in the basic type hints.
39828@end itemize")
39829 ;; Either license applies.
39830 (license (list license:expat license:asl2.0))))
39831
39832(define-public python-trubar
39833 (package
39834 (name "python-trubar")
39835 (version "0.3.4")
39836 (source
39837 (origin
39838 (method url-fetch)
39839 (uri (pypi-uri "trubar" version))
39840 (sha256
39841 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
39842 (build-system pyproject-build-system)
39843 (arguments
39844 (list
39845 #:test-flags
39846 #~(list "-k" (string-join
39847 ;; AttributeError: module 'libcst' has no attribute
39848 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
39849 (list "not test_import_from_future"
39850 "test_inport_after_docstring"
39851 ;; AssertionError: Items in the second set but not
39852 ;; the first
39853 "test_walk_files")
39854 " and not "))))
39855 (native-inputs
39856 (list python-pytest
39857 python-setuptools
39858 python-wheel))
39859 (propagated-inputs
39860 (list python-libcst
39861 python-pyyaml))
39862 (home-page "https://github.com/janezd/trubar")
39863 (synopsis "Utility for translation of Python sources")
39864 (description
39865 "This package provides a tool for translation and localization of Python
39866programs via modification of source files. Trubar supports f-strings and does
39867not require any changes to the original source code, such as marking strings
39868for translation.")
39869 (license license:expat)))
39870
39871(define-public python-twine
39872 (package
39873 (name "python-twine")
39874 (version "6.2.0")
39875 (source
39876 (origin
39877 (method url-fetch)
39878 (uri (pypi-uri "twine" version))
39879 (sha256
39880 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
39881 (build-system pyproject-build-system)
39882 (arguments
39883 (list
39884 ;; tests: 228 passed, 1 deselected
39885 #:test-flags
39886 ;; Assertion is not equal for one tests.
39887 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
39888 (native-inputs
39889 (list python-pretend
39890 python-pytest
39891 python-pytest-socket
39892 python-setuptools
39893 python-setuptools-scm))
39894 (propagated-inputs
39895 (list python-id
39896 python-keyring
39897 python-packaging
39898 python-readme-renderer
39899 python-requests
39900 python-requests-toolbelt
39901 python-rfc3986
39902 python-rich
39903 python-urllib3))
39904 (home-page "https://github.com/pypa/twine")
39905 (synopsis "Collection of utilities for interacting with PyPI")
39906 (description
39907 "@code{twine} currently supports registering projects and uploading
39908distributions. It authenticates the user over HTTPS, allows them to pre-sign
39909their files and supports any packaging format (including wheels).")
39910 (license license:asl2.0)))
39911
39912(define-public python-twisted
39913 (package
39914 (name "python-twisted")
39915 (version "25.5.0")
39916 (source
39917 (origin
39918 (method git-fetch)
39919 (uri (git-reference
39920 (url "https://github.com/twisted/twisted")
39921 (commit (string-append "twisted-" version))))
39922 (file-name (git-file-name name version))
39923 (sha256
39924 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
39925 (build-system pyproject-build-system)
39926 (arguments
39927 (list
39928 ;; tests: skips=638, successes=9759
39929 #:test-backend #~'custom
39930 #:test-flags
39931 #~(list "-m" "twisted.trial"
39932 "--temp-directory=/tmp/_trial_temp"
39933 (string-append "-j" (number->string (min 8 (parallel-job-count))))
39934 "twisted")
39935 #:phases
39936 #~(modify-phases %standard-phases
39937 (add-after 'unpack 'disable-broken-tests
39938 (lambda _
39939 (for-each delete-file
39940 (list
39941 ;; No idea why they fail
39942 "src/twisted/test/test_log.py"
39943 ;; Network tests
39944 "src/twisted/conch/test/test_cftp.py"
39945 "src/twisted/internet/test/test_endpoints.py"
39946 "src/twisted/protocols/test/test_tls.py"
39947 "src/twisted/test/test_sslverify.py"
39948 "src/twisted/web/test/test_agent.py"
39949 "src/twisted/web/test/test_tap.py"
39950 ;; These need a git executable
39951 "src/twisted/python/test/test_release.py"
39952 ;; These leave behind a socket file, which breaks the
39953 ;; build with "...has an unsupported type"
39954 "src/twisted/internet/test/test_unix.py"
39955 "src/twisted/test/test_unix.py"
39956 ;; These complain about missing test modules.
39957 "src/twisted/test/test_failure.py"
39958 "src/twisted/web/test/test_http2.py"
39959 "src/twisted/conch/test/test_forwarding.py")))))))
39960 (propagated-inputs
39961 (list python-attrs
39962 python-automat
39963 python-bcrypt
39964 python-constantly
39965 python-hyperlink
39966 python-incremental
39967 python-typing-extensions
39968 python-zope-interface
39969 ;; [conch]
39970 (list python "tk")
39971 python-appdirs
39972 python-bcrypt
39973 python-cryptography
39974 ;; [http2]
39975 python-h2
39976 python-priority
39977 ;; [tls]
39978 python-idna
39979 python-pyopenssl
39980 python-service-identity
39981 ;; [serial]
39982 python-pyserial))
39983 (native-inputs
39984 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
39985 python-hatch-fancy-pypi-readme
39986 python-hatchling
39987 python-httpx
39988 python-hypothesis
39989 python-incremental
39990 python-pyhamcrest
39991 python-pytest))
39992 (home-page "https://twistedmatrix.com/")
39993 (synopsis "Asynchronous networking framework written in Python")
39994 (description
39995 "Twisted is an extensible framework for Python programming, with special
39996focus on event-based network programming and multiprotocol integration.")
39997 (license license:expat)))
39998
39999(define-public python-txredisapi
40000 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40001 ;; The latest version is 1.4.11, but it contains a bug:
40002 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40003 ;; patched in commit d2259a3.
40004 (revision "0"))
40005 (package
40006 (name "python-txredisapi")
40007 (version (git-version "1.4.11" revision commit))
40008 (source
40009 (origin
40010 (method git-fetch)
40011 ;; The source distribution on PyPi is missing test files:
40012 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40013 (uri (git-reference
40014 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40015 (commit commit)))
40016 (file-name (git-file-name name version))
40017 (sha256
40018 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40019 (build-system pyproject-build-system)
40020 (arguments
40021 (list #:test-backend #~'custom
40022 #:test-flags #~(list "-m" "twisted.trial" "tests")
40023 #:phases
40024 #~(modify-phases %standard-phases
40025 ;; The tests require a running Redis server.
40026 (add-before 'check 'start-redis
40027 (lambda _
40028 (invoke "redis-server" "--daemonize" "yes"))))))
40029 (propagated-inputs (list python-twisted))
40030 (native-inputs (list python-mock python-setuptools redis))
40031 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40032 (synopsis "Non-blocking Redis client for Python")
40033 (description "txredisapi is a non-blocking client driver for the Redis
40034database, written in Python. It uses Twisted for asynchronous communication
40035with Redis.")
40036 (license license:asl2.0))))
40037
40038(define-public python-typeapi
40039 (package
40040 (name "python-typeapi")
40041 (version "2.2.4")
40042 (source
40043 (origin
40044 (method url-fetch)
40045 (uri (pypi-uri "typeapi" version))
40046 (sha256
40047 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40048 (build-system pyproject-build-system)
40049 (arguments
40050 (list
40051 #:tests? #false)) ;there are none
40052 (propagated-inputs (list python-typing-extensions))
40053 (native-inputs (list python-hatchling))
40054 (home-page "https://pypi.org/project/typeapi/")
40055 (synopsis "Type hints")
40056 (description "The typeapi package provides an object-oriented interface
40057for introspecting PEP484 type hints at runtime, including forward references
40058that make use of the more recent PEP585 and PEP604 type hint features in
40059Python versions that don't natively support them.")
40060 (license license:expat)))
40061
40062(define-public python-typer
40063 (package
40064 (name "python-typer")
40065 (version "0.22.0")
40066 (source
40067 (origin
40068 (method git-fetch)
40069 (uri (git-reference
40070 (url "https://github.com/fastapi/typer")
40071 (commit version)))
40072 (file-name (git-file-name name version))
40073 (sha256
40074 (base32 "17gxqqiafrp5dvqfm6k39zbanvnwb8b9kr7dvnkah17js0rfy1sz"))))
40075 (build-system pyproject-build-system)
40076 (arguments
40077 (list
40078 #:phases
40079 #~(modify-phases %standard-phases
40080 (add-before 'check 'pre-check
40081 (lambda _
40082 (setenv "HOME" "/tmp"))))
40083 #:test-flags
40084 #~(list "-k" "not test_cli"
40085 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40086 (native-inputs
40087 (list python-coverage ;this is required in tests
40088 python-pdm-backend
40089 python-pytest
40090 python-pytest-xdist))
40091 (propagated-inputs
40092 (list python-click
40093 python-typing-extensions
40094 python-annotated-doc
40095 ;; [optional]
40096 python-rich
40097 python-shellingham))
40098 (home-page "https://github.com/fastapi/typer")
40099 (synopsis "Typer builds CLI based on Python type hints")
40100 (description
40101 "Typer is a library for building CLI applications. It's based on Python
401023.6+ type hints.")
40103 (license license:expat)))
40104
40105(define-public python-types-aiofiles
40106 (package
40107 (name "python-types-aiofiles")
40108 (version "25.1.0.20251011")
40109 (source
40110 (origin
40111 (method url-fetch)
40112 (uri (pypi-uri "types_aiofiles" version))
40113 (sha256
40114 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40115 (build-system pyproject-build-system)
40116 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40117 (native-inputs (list python-setuptools))
40118 (home-page "https://github.com/python/typeshed")
40119 (synopsis "Typing stubs for python-aiofiles")
40120 (description "This package providis typing stubs for python-aiofiles.")
40121 (license license:asl2.0)))
40122
40123(define-public python-types-colorama
40124 (package
40125 (name "python-types-colorama")
40126 (version "0.4.15.20250801")
40127 (source
40128 (origin
40129 (method url-fetch)
40130 (uri (pypi-uri "types_colorama" version))
40131 (sha256
40132 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40133 (build-system pyproject-build-system)
40134 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40135 (native-inputs
40136 (list python-setuptools))
40137 (home-page "https://github.com/python/typeshed")
40138 (synopsis "Typing stubs for colorama")
40139 (description "This package provides typing stubs for colorama.")
40140 (license license:asl2.0)))
40141
40142(define-public python-types-dataclasses
40143 (package
40144 (name "python-types-dataclasses")
40145 (version "0.6.6")
40146 (source
40147 (origin
40148 (method url-fetch)
40149 (uri (pypi-uri "types-dataclasses" version))
40150 (sha256
40151 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
40152 (build-system pyproject-build-system)
40153 (arguments (list #:tests? #f)) ;no tests
40154 (native-inputs (list python-setuptools))
40155 (home-page "https://github.com/python/typeshed")
40156 (synopsis "Typing stubs for dataclasses")
40157 (description
40158 "This package provides a collection of library stubs for Python, with
40159static types.")
40160 (license license:asl2.0)))
40161
40162(define-public python-types-dateutil
40163 (package
40164 (name "python-types-dateutil")
40165 (version "2.9.0.20240316")
40166 (source
40167 (origin
40168 (method url-fetch)
40169 (uri (pypi-uri "types-python-dateutil" version))
40170 (sha256
40171 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40172 (build-system pyproject-build-system)
40173 (arguments (list #:tests? #f)) ; no tests
40174 (native-inputs
40175 (list python-pytest python-setuptools python-wheel))
40176 (home-page "https://github.com/python/typeshed")
40177 (synopsis "Typing stubs for python-dateutil")
40178 (description
40179 "This is a PEP 561 type stub package for the @code{python-dateutil}
40180package.")
40181 (license license:asl2.0)))
40182
40183(define-public python-types-docutils
40184 (package
40185 (name "python-types-docutils")
40186 (version "0.22.2.20251006")
40187 (source
40188 (origin
40189 (method url-fetch)
40190 (uri (pypi-uri "types_docutils" version))
40191 (sha256
40192 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40193 (build-system pyproject-build-system)
40194 (arguments (list #:tests? #f)) ;no tests
40195 (native-inputs (list python-setuptools))
40196 (home-page "https://github.com/python/typeshed")
40197 (synopsis "Typing stubs for docutils")
40198 (description "This package provides a collection of library stubs for
40199Python, with static types.")
40200 (license license:asl2.0)))
40201
40202(define-public python-types-freezegun
40203 (package
40204 (name "python-types-freezegun")
40205 (version "1.1.8")
40206 (source
40207 (origin
40208 (method url-fetch)
40209 (uri (pypi-uri "types-freezegun" version))
40210 (sha256
40211 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40212 (build-system pyproject-build-system)
40213 (arguments
40214 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40215 ;; right files from source, so ignore them for now.
40216 (list #:tests? #f))
40217 (native-inputs (list python-setuptools python-wheel))
40218 (home-page "https://github.com/python/typeshed")
40219 (synopsis "Typing stubs for @code{freezegun}")
40220 (description "This package contains typing stubs for for @code{freezegun}, a
40221very small subset the Python stubs contained in the complete @code{typeshed}
40222collection.")
40223 (license license:asl2.0)))
40224
40225(define-public python-types-orjson
40226 (package
40227 (name "python-types-orjson")
40228 (version "3.6.2")
40229 (source
40230 (origin
40231 (method url-fetch)
40232 (uri (pypi-uri "types-orjson" version))
40233 (sha256
40234 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40235 (build-system pyproject-build-system)
40236 (arguments (list #:tests? #f)) ;no tests
40237 (native-inputs (list python-setuptools))
40238 (home-page "https://github.com/python/typeshed")
40239 (synopsis "Typing stubs for orjson")
40240 (description "This is a PEP 561 type stub package for the @code{orjson}
40241package. It can be used by type-checking tools like mypy, PyCharm, pytype
40242etc. to check code that uses @code{orjson}.")
40243 (license license:asl2.0)))
40244
40245(define-public python-types-protobuf
40246 (package
40247 (name "python-types-protobuf")
40248 (version "3.20.1")
40249 (source (origin
40250 (method url-fetch)
40251 (uri (pypi-uri "types-protobuf" version))
40252 (sha256
40253 (base32
40254 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40255 (build-system pyproject-build-system)
40256 (arguments
40257 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40258 ;; right files from source, so ignore them for now.
40259 (list #:tests? #f))
40260 (native-inputs (list python-setuptools python-wheel))
40261 (home-page "https://github.com/python/typeshed")
40262 (synopsis "Typing stubs for @code{protobuf}")
40263 (description "This package contains typing stubs for @code{protobuf}, a
40264very small subset the Python stubs contained in the complete @code{typeshed}
40265collection.")
40266 (license license:asl2.0)))
40267
40268(define-public python-types-pyside6
40269 (package
40270 (name "python-types-pyside6")
40271 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40272 ;; variant.
40273 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40274 (revision . "0")))
40275 (version (git-version "6.10.1.1"
40276 (assoc-ref properties 'revision)
40277 (assoc-ref properties 'commit)))
40278 (source
40279 (origin
40280 (method git-fetch)
40281 (uri (git-reference
40282 (url "https://github.com/LumaPictures/cg-stubs")
40283 (commit (assoc-ref properties 'commit))))
40284 (file-name (git-file-name name version))
40285 (sha256
40286 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40287 (build-system pyproject-build-system)
40288 (arguments
40289 (list
40290 #:tests? #f ;XXX: all tests failed
40291 #:phases
40292 #~(modify-phases %standard-phases
40293 (add-after 'unpack 'select-pyside6
40294 (lambda _
40295 (chdir "pyside6"))))))
40296 (native-inputs
40297 (list python-hatchling))
40298 (home-page "https://github.com/LumaPictures/cg-stubs")
40299 (synopsis "Accurate stubs for PySide6")
40300 (description
40301 "This package provides PySide6 stubs produced with @code{mypy}'s official
40302stubgen tool to directly generate stubs, with a set of corrections applied.")
40303 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40304 ;; v2.1 . See file LICENSE for more details.
40305 ;;
40306 ;; MIT in pyproject.toml
40307 (license (list license:lgpl2.1+
40308 license:expat))))
40309
40310(define-public python-types-python-dateutil
40311 (package
40312 (name "python-types-python-dateutil")
40313 (version "2.9.0.20250708")
40314 (source
40315 (origin
40316 (method url-fetch)
40317 (uri (pypi-uri "types_python_dateutil" version))
40318 (sha256
40319 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40320 (build-system pyproject-build-system)
40321 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40322 (native-inputs (list python-setuptools))
40323 (home-page "https://github.com/python/typeshed")
40324 (synopsis "Typing stubs for python-dateutil")
40325 (description "This package providis typing stubs for python-dateutil.")
40326 (license license:asl2.0)))
40327
40328(define-public python-types-pytz
40329 (package
40330 (name "python-types-pytz")
40331 (version "2025.2.0.20250809")
40332 (source
40333 (origin
40334 (method url-fetch)
40335 (uri (pypi-uri "types_pytz" version))
40336 (sha256
40337 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40338 (build-system pyproject-build-system)
40339 (arguments
40340 (list #:tests? #f)) ;no tests provided
40341 (native-inputs (list python-setuptools))
40342 (home-page "https://github.com/python/typeshed")
40343 (synopsis "Typing stubs for pytz")
40344 (description "This package contains typing stubs for @code{pytz}, a very
40345small subset the Python stubs contained in the complete @code{typeshed}
40346collection.")
40347 (license license:asl2.0)))
40348
40349(define-public python-types-pyyaml
40350 (package
40351 (name "python-types-pyyaml")
40352 (version "6.0.12.20250915")
40353 (source
40354 (origin
40355 (method url-fetch)
40356 (uri (pypi-uri "types_pyyaml" version))
40357 (sha256
40358 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40359 (build-system pyproject-build-system)
40360 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40361 (native-inputs
40362 (list python-setuptools))
40363 (home-page " https://github.com/python/typeshed")
40364 (synopsis "Typing stubs for PyYAML")
40365 (description "This package provides typing stubs for @code{PyYAML}.")
40366 (license license:asl2.0)))
40367
40368(define-public python-types-regex
40369 (package
40370 (name "python-types-regex")
40371 (version "2025.9.18.20250921")
40372 (source
40373 (origin
40374 (method url-fetch)
40375 (uri (pypi-uri "types_regex" version))
40376 (sha256
40377 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40378 (build-system pyproject-build-system)
40379 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40380 (native-inputs (list python-setuptools))
40381 (home-page "https://github.com/python/typeshed")
40382 (synopsis "Typing stubs for regex")
40383 (description "This package provides typing stubs for regex.")
40384 (license license:asl2.0)))
40385
40386(define-public python-types-requests
40387 (package
40388 (name "python-types-requests")
40389 (version "2.32.4.20250611")
40390 (source
40391 (origin
40392 (method url-fetch)
40393 (uri (pypi-uri "types_requests" version))
40394 (sha256
40395 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40396 (build-system pyproject-build-system)
40397 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40398 (native-inputs
40399 (list python-setuptools))
40400 (propagated-inputs
40401 (list python-urllib3))
40402 (home-page "https://github.com/python/typeshed")
40403 (synopsis "Typing stubs for requests")
40404 (description "This package provides typing stubs for requests.")
40405 (license license:asl2.0)))
40406
40407(define-public python-types-setuptools
40408 (package
40409 (name "python-types-setuptools")
40410 (version "80.9.0.20250529")
40411 (source
40412 (origin
40413 (method url-fetch)
40414 (uri (pypi-uri "types_setuptools" version))
40415 (sha256
40416 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40417 (build-system pyproject-build-system)
40418 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40419 (native-inputs
40420 (list python-setuptools))
40421 (home-page "https://github.com/python/typeshed")
40422 (synopsis "Typing stubs for setuptools")
40423 (description "This package provides typing stubs for setuptools.")
40424 (license license:asl2.0)))
40425
40426(define-public python-types-simplejson
40427 (package
40428 (name "python-types-simplejson")
40429 (version "3.19.0.20241221")
40430 (source
40431 (origin
40432 (method url-fetch)
40433 (uri (pypi-uri "types_simplejson" version))
40434 (sha256
40435 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40436 (build-system pyproject-build-system)
40437 (arguments
40438 (list
40439 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40440 (native-inputs
40441 (list python-setuptools python-wheel))
40442 (home-page "https://github.com/python/typeshed")
40443 (synopsis "Typing stubs for simplejson")
40444 (description "Typing stubs for simplejson.")
40445 (license license:asl2.0)))
40446
40447(define-public python-types-toml
40448 (package
40449 (name "python-types-toml")
40450 (version "0.10.8.20240310")
40451 (source
40452 (origin
40453 (method url-fetch)
40454 (uri (pypi-uri "types-toml" version))
40455 (sha256
40456 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40457 (build-system pyproject-build-system)
40458 (arguments
40459 (list #:tests? #f)) ;no tests provided
40460 (native-inputs (list python-setuptools))
40461 (home-page "https://github.com/python/typeshed")
40462 (synopsis "Typing stubs for TOML")
40463 (description
40464 "This package contains typing stubs for TOML, a very small subset the
40465Python stubs contained in the complete @code{typeshed} collection.")
40466 (license license:asl2.0)))
40467
40468(define-public python-types-tqdm
40469 (package
40470 (name "python-types-tqdm")
40471 (version "4.67.0.20250809")
40472 (source
40473 (origin
40474 (method url-fetch)
40475 (uri (pypi-uri "types_tqdm" version))
40476 (sha256
40477 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40478 (build-system pyproject-build-system)
40479 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40480 (native-inputs (list python-setuptools))
40481 (propagated-inputs (list python-types-requests))
40482 (home-page "https://github.com/python/typeshed")
40483 (synopsis "Typing stubs for python-tqdm")
40484 (description "This package providis typing stubs for python-tqdm.")
40485 (license license:asl2.0)))
40486
40487(define-public python-types-ujson
40488 (package
40489 (name "python-types-ujson")
40490 (version "5.10.0.20250822")
40491 (source
40492 (origin
40493 (method url-fetch)
40494 (uri (pypi-uri "types_ujson" version))
40495 (sha256
40496 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40497 (build-system pyproject-build-system)
40498 (arguments
40499 (list #:tests? #f)) ;no tests provided
40500 (native-inputs (list python-setuptools))
40501 (home-page "https://github.com/python/typeshed")
40502 (synopsis "Typing stubs for ujson")
40503 (description
40504 "This is a PEP 561 type stub package for the ujson package. It can be
40505used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40506uses ujson.")
40507 (license license:asl2.0)))
40508
40509(define-public python-types-urllib3
40510 (package
40511 (name "python-types-urllib3")
40512 (version "1.26.25.14")
40513 (source
40514 (origin
40515 (method url-fetch)
40516 (uri (pypi-uri "types-urllib3" version))
40517 (sha256
40518 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40519 (build-system pyproject-build-system)
40520 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40521 (native-inputs
40522 (list python-setuptools))
40523 (home-page "https://github.com/python/typeshed")
40524 (synopsis "Typing stubs for urllib3")
40525 (description "This package provides typing stubs for urllib3.")
40526 (license license:asl2.0)))
40527
40528(define-public python-typeshed-client
40529 (package
40530 (name "python-typeshed-client")
40531 (version "2.8.2")
40532 (source
40533 (origin
40534 (method git-fetch)
40535 (uri (git-reference
40536 (url "https://github.com/JelleZijlstra/typeshed_client")
40537 (commit (string-append "v" version))))
40538 (file-name (git-file-name name version))
40539 (sha256
40540 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40541 (build-system pyproject-build-system)
40542 (arguments
40543 (list #:test-backend #~'custom
40544 #:test-flags #~(list "tests/test.py")))
40545 (native-inputs
40546 (list python-setuptools))
40547 (propagated-inputs
40548 (list python-importlib-resources
40549 python-typing-extensions))
40550 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40551 (synopsis "Library for accessing stubs in typeshed")
40552 (description
40553 "This package provides a library for accessing stubs in typeshed.")
40554 (license license:expat)))
40555
40556(define-public python-typing-inspect
40557 (package
40558 (name "python-typing-inspect")
40559 (version "0.9.0")
40560 (source
40561 (origin
40562 (method url-fetch)
40563 (uri (pypi-uri "typing_inspect" version))
40564 (sha256
40565 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40566 (build-system pyproject-build-system)
40567 (native-inputs
40568 (list python-pytest
40569 python-setuptools
40570 python-wheel))
40571 (propagated-inputs
40572 (list python-mypy-extensions
40573 python-typing-extensions))
40574 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40575 (synopsis "API for inspection of types in the Python @code{typing} module")
40576 (description
40577 "The @code{typing_inspect} module defines experimental API for runtime
40578inspection of types defined in the Python standard typing module.")
40579 (license license:expat)))
40580
40581(define-public python-typing-inspection
40582 (package
40583 (name "python-typing-inspection")
40584 (version "0.4.2")
40585 (source
40586 (origin
40587 (method git-fetch)
40588 (uri (git-reference
40589 (url "https://github.com/pydantic/typing-inspection")
40590 (commit (string-append "v" version))))
40591 (file-name (git-file-name name version))
40592 (sha256
40593 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
40594 (build-system pyproject-build-system)
40595 ;; tests: 89 passed, 3 skipped
40596 (native-inputs
40597 (list python-pytest
40598 python-hatchling))
40599 (propagated-inputs
40600 (list python-typing-extensions))
40601 (home-page "https://github.com/pydantic/typing-inspection")
40602 (synopsis "Runtime typing introspection tools")
40603 (description
40604 "@code{typing-inspection} provides tools to inspect type annotations at
40605runtime.")
40606 (license license:expat)))
40607
40608(define-public python-typogrify
40609 (package
40610 (name "python-typogrify")
40611 (version "2.1.0")
40612 (source
40613 (origin
40614 (method url-fetch)
40615 (uri (pypi-uri "typogrify" version))
40616 (sha256
40617 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
40618 (build-system pyproject-build-system)
40619 (arguments
40620 (list
40621 #:test-flags
40622 #~(list "--doctest-modules"
40623 "typogrify/filters.py"
40624 "typogrify/packages/titlecase/tests.py")))
40625 (native-inputs
40626 (list python-pytest
40627 python-hatchling))
40628 (propagated-inputs
40629 (list python-smartypants))
40630 (home-page "https://github.com/justinmayer/typogrify")
40631 (synopsis "Filters to transform text into typographically-improved HTML")
40632 (description
40633 "@code{typogrify} provides a set of custom filters that automatically
40634apply various transformations to plain text in order to yield
40635typographically-improved HTML. While often used in conjunction with Jinja and
40636Django template systems, the filters can be used in any environment.")
40637 (license license:bsd-3)))
40638
40639(define-public python-ua-parser
40640 (package
40641 (name "python-ua-parser")
40642 (version "0.10.0")
40643 (source
40644 (origin
40645 (method url-fetch)
40646 (uri (pypi-uri "ua-parser" version))
40647 (sha256
40648 (base32
40649 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
40650 (build-system pyproject-build-system)
40651 (arguments
40652 `(#:tests? #f)) ;no test suite in release
40653 (native-inputs
40654 (list python-pyyaml
40655 python-setuptools))
40656 (home-page "https://github.com/ua-parser/uap-python")
40657 (synopsis "User agent parser")
40658 (description
40659 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
40660 (license license:asl2.0)))
40661
40662(define-public python-ubelt
40663 (package
40664 (name "python-ubelt")
40665 (version "1.3.6")
40666 (source
40667 (origin
40668 (method git-fetch)
40669 (uri (git-reference
40670 (url "https://github.com/Erotemic/ubelt")
40671 (commit (string-append "v" version))))
40672 (file-name (git-file-name name version))
40673 (sha256
40674 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
40675 (build-system pyproject-build-system)
40676 (arguments
40677 (list
40678 ;; The builder user home doesn't match HOME, which causes this test to
40679 ;; fail.
40680 #:test-flags #~(list "-k" "not userhome")
40681 #:phases
40682 #~(modify-phases %standard-phases
40683 (add-before 'check 'pre-check
40684 (lambda _
40685 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
40686 (native-inputs
40687 (list python-pytest
40688 python-requests
40689 python-setuptools
40690 python-wheel
40691 python-xdoctest))
40692 (propagated-inputs
40693 (list python-ordered-set))
40694 (home-page "https://github.com/Erotemic/ubelt")
40695 (synopsis "Python library for hashing, caching, timing and more")
40696 (description
40697 "Ubelt is a small library of simple functions that extend the Python
40698standard library. It includes an @acronym{API, Application Programming
40699Interface} to simplify common problems such as caching, timing, computing
40700progress, among other things.")
40701 (license license:asl2.0)))
40702
40703(define-public python-uc-micro-py
40704 (package
40705 (name "python-uc-micro-py")
40706 (version "1.0.1")
40707 (source (origin
40708 (method git-fetch) ;for tests
40709 (uri (git-reference
40710 (url "https://github.com/tsutsu3/uc.micro-py")
40711 (commit (string-append "v" version))))
40712 (file-name (git-file-name name version))
40713 (sha256
40714 (base32
40715 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
40716 (build-system pyproject-build-system)
40717 (native-inputs (list python-pytest python-setuptools python-wheel))
40718 (home-page "https://github.com/tsutsu3/uc.micro-py")
40719 (synopsis "Unicode data files for linkify-it-py projects")
40720 (description "This package contains a micro subset of Unicode data files
40721for linkify-it-py projects.")
40722 (license license:expat)))
40723
40724(define-public python-udapi
40725 (package
40726 (name "python-udapi")
40727 (version "0.5.2")
40728 (source
40729 (origin
40730 (method git-fetch)
40731 (uri (git-reference
40732 (url "https://github.com/udapi/udapi-python")
40733 (commit version)))
40734 (file-name (git-file-name name version))
40735 (sha256
40736 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
40737 (build-system pyproject-build-system)
40738 (native-inputs
40739 (list python-pytest python-setuptools))
40740 (propagated-inputs
40741 (list python-colorama python-termcolor))
40742 (home-page "http://udapi.readthedocs.io")
40743 (synopsis "Framework for processing Universal Dependencies data")
40744 (description
40745 "This package is a Python library providing an API for processing
40746Universal Dependencies data.")
40747 (license license:gpl3+)))
40748
40749(define-public python-ujson
40750 (package
40751 (name "python-ujson")
40752 (version "5.10.0")
40753 (source
40754 (origin
40755 (method url-fetch)
40756 (uri (pypi-uri "ujson" version))
40757 (sha256
40758 (base32
40759 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
40760 (modules '((guix build utils)))
40761 (snippet
40762 #~(begin (delete-file-recursively "deps")))))
40763 (build-system pyproject-build-system)
40764 (arguments
40765 (list
40766 #:phases
40767 #~(modify-phases %standard-phases
40768 (add-after 'unpack 'link-to-system-double-conversion
40769 (lambda* (#:key inputs #:allow-other-keys)
40770 (let ((d-c (assoc-ref inputs "double-conversion")))
40771 (substitute* "setup.py"
40772 (("./deps/double-conversion/double-conversion\"")
40773 (string-append d-c "/include/double-conversion\""))
40774 (("-lstdc++" stdc)
40775 (string-append "-L" d-c "/lib\","
40776 " \"-ldouble-conversion\","
40777 " \"" stdc)))))))))
40778 (native-inputs
40779 (list double-conversion
40780 python-pytest
40781 python-setuptools
40782 python-setuptools-scm
40783 python-wheel))
40784 (home-page "https://github.com/ultrajson/ultrajson")
40785 (synopsis "Ultra fast JSON encoder and decoder for Python")
40786 (description
40787 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
40788bindings for Python 3.")
40789 (license license:bsd-3)))
40790
40791(define-public python-ukkonen
40792 (package
40793 (name "python-ukkonen")
40794 (version "1.0.1")
40795 (source
40796 (origin
40797 ;; There are no tests in the PyPI tarball.
40798 (method git-fetch)
40799 (uri (git-reference
40800 (url "https://github.com/asottile/ukkonen")
40801 (commit (string-append "v" version))))
40802 (file-name (git-file-name name version))
40803 (sha256
40804 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
40805 (build-system pyproject-build-system)
40806 (native-inputs (list python-pytest python-setuptools python-wheel))
40807 (propagated-inputs (list python-cffi))
40808 (home-page "https://github.com/asottile/ukkonen")
40809 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
40810 (description "This package is an implementation of of bounded Levenshtein
40811distance (Ukkonen).")
40812 (license license:expat)))
40813
40814(define-public python-ulid
40815 (package
40816 (name "python-ulid")
40817 (version "3.1.0")
40818 (source
40819 (origin
40820 (method git-fetch)
40821 (uri (git-reference
40822 (url "https://github.com/mdomke/python-ulid")
40823 (commit version)))
40824 (file-name (git-file-name name version))
40825 (sha256
40826 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
40827 (build-system pyproject-build-system)
40828 (arguments
40829 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
40830 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
40831 ;; 68 passed, 1 deselected in 2.55s
40832 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
40833 (native-inputs
40834 (list python-freezegun
40835 python-hatch-fancy-pypi-readme
40836 python-hatch-vcs
40837 python-hatchling
40838 python-pytest))
40839 (propagated-inputs
40840 (list python-pydantic))
40841 (home-page "https://github.com/mdomke/python-ulid")
40842 (synopsis "Universally unique lexicographically sortable identifier")
40843 (description
40844 "ULID is a universally unique lexicographically sortable identifier.
40845It is:
40846@itemize
40847@item 128-bit compatible with UUID
40848@item 1.21e+24 unique ULIDs per millisecond
40849@item lexicographically sortable!
40850@item canonically encoded as a 26 character string, as opposed to the 36
40851character UUID
40852@item uses Crockford's base32 for better efficiency and readability (5 bits
40853per character)
40854@item case insensitive
40855@item no special characters (URL safe)
40856@item monotonic sort order (correctly detects and handles the same
40857millisecond)
40858@end itemize")
40859 (license license:expat)))
40860
40861(define-public python-uncertainties
40862 (package
40863 (name "python-uncertainties")
40864 (version "3.2.3")
40865 (source
40866 (origin
40867 (method url-fetch)
40868 (uri (pypi-uri "uncertainties" version))
40869 (sha256
40870 (base32
40871 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
40872 (build-system pyproject-build-system)
40873 (native-inputs
40874 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
40875 (propagated-inputs (list python-numpy))
40876 (home-page "https://uncertainties.readthedocs.io/en/latest/")
40877 (synopsis "Calculations with uncertainties")
40878 (description
40879 "The uncertainties package transparently handles calculations with
40880numbers with uncertainties. It can also yield the derivatives of any
40881expression.")
40882 (license license:bsd-3)))
40883
40884(define-public python-unicode-linebreak
40885 (package
40886 (name "python-unicode-linebreak")
40887 (version "0.0.2")
40888 (source
40889 (origin
40890 (method git-fetch)
40891 (uri (git-reference
40892 (url "https://github.com/mondeja/py-unicode-linebreak")
40893 (commit (string-append "v" version))))
40894 (file-name (git-file-name name version))
40895 (sha256
40896 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
40897 (build-system pyproject-build-system)
40898 (arguments
40899 (list
40900 #:imported-modules `(,@%cargo-build-system-modules
40901 ,@%pyproject-build-system-modules)
40902 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40903 (guix build pyproject-build-system)
40904 (guix build utils))
40905 #:test-backend #~'unittest
40906 #:phases
40907 #~(modify-phases %standard-phases
40908 (add-after 'unpack 'prepare-cargo-build-system
40909 (lambda args
40910 (for-each
40911 (lambda (phase)
40912 (format #t "Running cargo phase: ~a~%" phase)
40913 (apply (assoc-ref cargo:%standard-phases phase)
40914 #:cargo-target #$(cargo-triplet)
40915 args))
40916 '(unpack-rust-crates
40917 configure
40918 check-for-pregenerated-files
40919 patch-cargo-checksums)))))))
40920 (native-inputs
40921 (append
40922 (list maturin
40923 rust
40924 `(,rust "cargo"))
40925 (or (and=> (%current-target-system)
40926 (compose list make-rust-sysroot))
40927 '())))
40928 (inputs (cargo-inputs 'unicode_linebreak))
40929 (home-page "https://github.com/mondeja/py-unicode-linebreak")
40930 (synopsis "Markdown paragraph wrapper")
40931 (description
40932 "This package provides a Markdown paragraph wrapper using Unicode Line
40933Breaking Algorithm written in Rust with Python bindings.")
40934 (license license:expat)))
40935
40936(define-public python-unicodedata2
40937 (package
40938 (name "python-unicodedata2")
40939 (version "16.0.0")
40940 (source
40941 (origin
40942 (method url-fetch)
40943 (uri (pypi-uri "unicodedata2" version))
40944 (sha256
40945 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
40946 (build-system pyproject-build-system)
40947 (native-inputs
40948 (list python-pytest
40949 python-setuptools))
40950 (home-page "https://github.com/fonttools/unicodedata2")
40951 (synopsis "Python unicodedata backport")
40952 (description "This package corresponds to the latest @code{unicodedata}
40953standard Python module.")
40954 (license license:asl2.0)))
40955
40956(define-public python-unicodeitplus
40957 (package
40958 (name "python-unicodeitplus")
40959 (version "0.3.1")
40960 (source
40961 (origin
40962 (method url-fetch)
40963 (uri (pypi-uri "unicodeitplus" version))
40964 (sha256
40965 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
40966 (build-system pyproject-build-system)
40967 (native-inputs
40968 (list python-pytest
40969 python-setuptools
40970 python-setuptools-scm))
40971 (propagated-inputs
40972 (list python-lark))
40973 (home-page "https://github.com/HDembinski/unicodeitplus")
40974 (synopsis "Convert simple LaTeX to an Unicode approximation")
40975 (description
40976 "This package provides a more complete LaTeX to Unicode converter than
40977@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
40978Backus-Naur Form} with the Lark library.")
40979 (license license:bsd-3)))
40980
40981(define-public python-unidecode
40982 (package
40983 (name "python-unidecode")
40984 (version "1.4.0")
40985 (source
40986 (origin
40987 (method url-fetch)
40988 (uri (pypi-uri "Unidecode" version))
40989 (sha256
40990 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
40991 (build-system pyproject-build-system)
40992 (native-inputs
40993 (list python-pytest python-setuptools))
40994 (home-page "https://pypi.org/project/Unidecode/")
40995 (synopsis "ASCII transliterations of Unicode text")
40996 (description
40997 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
40998useful when integrating with legacy code that doesn't support Unicode, or for
40999ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41000machine identifiers from human-readable Unicode strings that should still be
41001somewhat intelligible.")
41002 (license license:gpl2+)))
41003
41004(define-public python-unique-log-filter
41005 (package
41006 (name "python-unique-log-filter")
41007 (version "0.1.0")
41008 (source
41009 (origin
41010 (method git-fetch)
41011 (uri (git-reference
41012 (url "https://github.com/twizmwazin/unique_log_filter")
41013 (commit (string-append "v" version))))
41014 (file-name (git-file-name name version))
41015 (sha256
41016 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41017 (build-system pyproject-build-system)
41018 (arguments
41019 (list #:test-backend #~'custom
41020 #:test-flags #~(list "test_unique_log_filter.py")))
41021 (native-inputs (list python-flit-core))
41022 (home-page "https://github.com/twizmwazin/unique_log_filter")
41023 (synopsis "Log filter that removes duplicate log messages")
41024 (description
41025 "This library provides a filter for the @code{logging} module
41026from the Python standard library which allows removing duplicate log
41027messages.")
41028 (license license:bsd-2)))
41029
41030(define-public python-uniseg
41031 (package
41032 (name "python-uniseg")
41033 (version "0.10.0")
41034 (source
41035 (origin
41036 (method url-fetch)
41037 (uri (pypi-uri "uniseg" version))
41038 (sha256
41039 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41040 (build-system pyproject-build-system)
41041 (native-inputs
41042 (list python-pytest
41043 python-setuptools
41044 python-setuptools-scm))
41045 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41046 (synopsis "Python library to determine Unicode text segmentations")
41047 (description
41048 "Uniseg is a Python package used to determine Unicode text segmentations.
41049Supported segmentations include:
41050@enumerate
41051@item @dfn{Code point} (any value in the Unicode codespace)
41052@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41053multiple Unicode code points, e.g. \"G\" + acute-accent)
41054@item Word break
41055@item Sentence break
41056@item Line break
41057@end enumerate")
41058 (license license:expat)))
41059
41060(define-public python-universal-pathlib
41061 (package
41062 (name "python-universal-pathlib")
41063 (version "0.2.6")
41064 (source
41065 (origin
41066 (method git-fetch)
41067 (uri (git-reference
41068 (url "https://github.com/fsspec/universal_pathlib")
41069 (commit (string-append "v" version))))
41070 (file-name (git-file-name name version))
41071 (sha256
41072 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41073 (build-system pyproject-build-system)
41074 (arguments
41075 (list
41076 #:tests? #f)) ;requires network
41077 (native-inputs
41078 (list python-setuptools
41079 python-setuptools-scm))
41080 (propagated-inputs
41081 (list python-fsspec
41082 python-pathlib-abc))
41083 (home-page "https://github.com/fsspec/universal_pathlib")
41084 (synopsis
41085 "@code{pathlib} API extended to use @code{fsspec} backends")
41086 (description
41087 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41088API to support a variety of backend filesystems via filesystem_spec.")
41089 (license license:expat)))
41090
41091(define-public python-unpaddedbase64
41092 (package
41093 (name "python-unpaddedbase64")
41094 (version "2.1.0")
41095 (source
41096 (origin
41097 (method git-fetch)
41098 (uri (git-reference
41099 (url "https://github.com/matrix-org/python-unpaddedbase64")
41100 (commit (string-append "v" version))))
41101 (file-name (git-file-name name version))
41102 (sha256
41103 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41104 (build-system pyproject-build-system)
41105 (native-inputs (list python-poetry-core
41106 python-pytest
41107 python-setuptools
41108 python-wheel))
41109 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41110 (synopsis "Encode and decode Base64 without “=” padding")
41111 (description
41112 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41113using “=” characters. However this conveys no benefit so many protocols
41114choose to use Base64 without the “=” padding.")
41115 (license license:asl2.0)))
41116
41117(define-public python-update-checker
41118 (package
41119 (name "python-update-checker")
41120 (version "0.18.0")
41121 (source
41122 (origin
41123 (method url-fetch)
41124 (uri (pypi-uri "update-checker" version))
41125 (sha256
41126 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41127 (build-system pyproject-build-system)
41128 (native-inputs
41129 (list python-pytest
41130 python-setuptools))
41131 (propagated-inputs
41132 (list python-requests))
41133 (home-page "https://github.com/bboe/update_checker")
41134 (synopsis "Python module that will check for package updates")
41135 (description "This package provides a Python module that will check for
41136package updates.")
41137 (license license:bsd-2)))
41138
41139(define-public python-uri-template
41140 (package
41141 (name "python-uri-template")
41142 (version "1.3.0")
41143 (source
41144 (origin
41145 (method url-fetch)
41146 (uri (pypi-uri "uri-template" version))
41147 (sha256
41148 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
41149 (build-system pyproject-build-system)
41150 (arguments
41151 (list
41152 #:phases
41153 '(modify-phases %standard-phases
41154 (replace 'check
41155 (lambda* (#:key tests? #:allow-other-keys)
41156 (when tests?
41157 (invoke "python3" "test.py")))))))
41158 (native-inputs
41159 (list python-setuptools
41160 python-setuptools-scm
41161 python-wheel))
41162 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41163 (synopsis "RFC 6570 URI Template Processor")
41164 (description "This package implements URI Template expansion in strict
41165adherence to RFC 6570, but adds a few extensions.")
41166 (license license:expat)))
41167
41168(define-public python-uritools
41169 (package
41170 (name "python-uritools")
41171 (version "6.0.1")
41172 (source
41173 (origin
41174 (method git-fetch)
41175 (uri (git-reference
41176 (url "https://github.com/tkem/uritools/")
41177 (commit (string-append "v" version))))
41178 (file-name (git-file-name name version))
41179 (sha256
41180 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41181 (build-system pyproject-build-system)
41182 (native-inputs
41183 (list python-pytest
41184 python-setuptools))
41185 (home-page "https://github.com/tkem/uritools/")
41186 (synopsis "URI parsing, classification and composition")
41187 (description
41188 "This package provides RFC 3986 compliant functions for parsing,
41189classifying and composing URIs and URI references, largely replacing the
41190Python Standard Library's urllib.parse module.")
41191 (license license:expat)))
41192
41193(define-public python-urwid
41194 (package
41195 (name "python-urwid")
41196 (version "3.0.3")
41197 (source
41198 (origin
41199 (method url-fetch)
41200 (uri (pypi-uri "urwid" version))
41201 (sha256
41202 (base32
41203 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41204 (build-system pyproject-build-system)
41205 (arguments
41206 (list
41207 #:test-flags
41208 #~(list "tests"
41209 ;; According to Debian these tests are cursed.
41210 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41211 "--ignore=tests/test_vterm.py")))
41212 (native-inputs
41213 (list python-pytest python-setuptools python-setuptools-scm))
41214 (propagated-inputs
41215 (list python-wcwidth
41216 ;; [optional]
41217 python-pygobject
41218 python-pyzmq
41219 python-tornado
41220 python-pyserial
41221 python-twisted))
41222 (home-page "https://urwid.org")
41223 (synopsis "Console user interface library for Python")
41224 (description
41225 "Urwid is a curses-based UI/widget library for Python. It includes many
41226features useful for text console applications.")
41227 (license license:lgpl2.1+)))
41228
41229(define-public python-urwid-2
41230 (package
41231 (inherit python-urwid)
41232 (name "python-urwid")
41233 (version "2.6.16")
41234 (source
41235 (origin
41236 (method url-fetch)
41237 (uri (pypi-uri "urwid" version))
41238 (sha256
41239 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41240
41241(define-deprecated/public-alias python-urwid-3
41242 python-urwid) ;may be removed after 2025-11-12
41243
41244(define-public python-urwid-for-zulip-term
41245 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41246 ;; to pass, remove when no longer required.
41247 (hidden-package
41248 (package
41249 (inherit python-urwid)
41250 (version "2.1.2")
41251 (source
41252 (origin
41253 (method url-fetch)
41254 (uri (pypi-uri "urwid" version))
41255 (sha256
41256 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41257 (arguments
41258 (list #:tests? #f)))))
41259
41260(define-public python-urwid-readline
41261 (package
41262 (name "python-urwid-readline")
41263 (version "0.15.1")
41264 (source
41265 (origin
41266 (method git-fetch)
41267 (uri (git-reference
41268 (url "https://github.com/rr-/urwid_readline")
41269 (commit version)))
41270 (file-name (git-file-name name version))
41271 (sha256
41272 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41273 (build-system pyproject-build-system)
41274 (native-inputs
41275 (list python-pytest
41276 python-setuptools))
41277 (propagated-inputs
41278 (list python-urwid))
41279 (home-page "https://github.com/rr-/urwid_readline")
41280 (synopsis "Text input widget for urwid that supports readline shortcuts")
41281 (description
41282 "This package provides a textbox edit widget for @code{python-urwid} that
41283supports @code{readline} shortcuts.")
41284 (license license:expat)))
41285
41286(define-public python-urwidgets
41287 (package
41288 (name "python-urwidgets")
41289 (version "0.2.1")
41290 (source
41291 (origin
41292 (method url-fetch)
41293 (uri (pypi-uri "urwidgets" version))
41294 (sha256
41295 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41296 (build-system pyproject-build-system)
41297 (arguments
41298 (list #:tests? #f)) ;no tests
41299 (native-inputs
41300 (list python-setuptools))
41301 (propagated-inputs
41302 (list python-urwid-2))
41303 (home-page "https://github.com/AnonymouX47/urwidgets")
41304 (synopsis "Collection of widgets for urwid")
41305 (description
41306 "This package provides a collection of widgets for urwid.")
41307 (license license:expat)))
41308
41309(define-public python-urwidtrees
41310 (package
41311 (name "python-urwidtrees")
41312 (version "1.0.4")
41313 (source
41314 (origin
41315 (method git-fetch)
41316 ;; package author intends on distributing via github rather than pypi:
41317 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41318 (uri (git-reference
41319 (url "https://github.com/pazz/urwidtrees")
41320 (commit version)))
41321 (file-name (git-file-name name version))
41322 (sha256
41323 (base32
41324 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41325 (build-system pyproject-build-system)
41326 (arguments
41327 '(#:tests? #f)) ; no tests
41328 (propagated-inputs (list python-urwid))
41329 (native-inputs (list python-mock python-setuptools python-wheel))
41330 (home-page "https://github.com/pazz/urwidtrees")
41331 (synopsis "Tree widgets for urwid")
41332 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41333toolkit. Use it to build trees of widgets.")
41334 (license license:gpl3+)))
41335
41336(define-public python-user-agents
41337 (package
41338 (name "python-user-agents")
41339 (version "2.2.0")
41340 (source
41341 (origin
41342 (method git-fetch)
41343 (uri (git-reference
41344 (url "https://github.com/selwin/python-user-agents")
41345 (commit (string-append "v" version))))
41346 (file-name (git-file-name name version))
41347 (sha256
41348 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41349 (build-system pyproject-build-system)
41350 (arguments
41351 (list #:test-backend #~'unittest))
41352 (native-inputs
41353 (list python-setuptools))
41354 (propagated-inputs
41355 (list python-ua-parser))
41356 (home-page "https://github.com/selwin/python-user-agents")
41357 (synopsis "User Agent strings parsing library")
41358 (description
41359 "A library to identify devices (phones, tablets) and their capabilities by
41360parsing (browser/HTTP) user agent strings.")
41361 (license license:expat)))
41362
41363(define-public python-userpath
41364 (package
41365 (name "python-userpath")
41366 (version "1.9.2")
41367 (source
41368 (origin
41369 (method url-fetch)
41370 (uri (pypi-uri "userpath" version))
41371 (sha256
41372 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41373 (build-system pyproject-build-system)
41374 (arguments
41375 ;; See https://github.com/ofek/userpath/issues/43.
41376 ;; In Guix, tests try to find the temporary build directory in PATH, but
41377 ;; only the store output is present.
41378 (list #:tests? #f))
41379 (native-inputs (list python-hatchling python-pytest))
41380 (propagated-inputs (list python-click))
41381 (home-page "https://github.com/ofek/userpath")
41382 (synopsis "Add locations to the user's PATH")
41383 (description "This package provides a tool for modifying a user's PATH.")
41384 (license license:expat)))
41385
41386(define-public python-userspacefs
41387 (package
41388 (name "python-userspacefs")
41389 (version "3.2.1")
41390 (source
41391 (origin
41392 (method url-fetch)
41393 (uri (pypi-uri "userspacefs" version))
41394 (sha256
41395 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41396 (build-system pyproject-build-system)
41397 (arguments
41398 (list #:tests? #f ;no tests
41399 #:phases
41400 #~(modify-phases %standard-phases
41401 (add-after 'unpack 'hardcode-libfuse
41402 (lambda* (#:key inputs #:allow-other-keys)
41403 (substitute* "userspacefs/fusepy.py"
41404 (("^_libfuse_path.*")
41405 (string-append "_libfuse_path = '"
41406 (search-input-file inputs "lib/libfuse3.so")
41407 "'\n"))))))))
41408 (inputs (list fuse))
41409 (native-inputs (list python-setuptools))
41410 (propagated-inputs (list python-aiohttp python-typing-extensions))
41411 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41412 (synopsis "User-space file systems for Python")
41413 (description
41414 "@code{userspacefs} is a library that allows you to easily write
41415user-space file systems in Python.")
41416 (license license:gpl3+)))
41417
41418(define-public python-utils
41419 (package
41420 (name "python-utils")
41421 (version "3.9.1")
41422 (source
41423 (origin
41424 (method url-fetch)
41425 (uri (pypi-uri "python_utils" version))
41426 (sha256
41427 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41428 (build-system pyproject-build-system)
41429 (native-inputs
41430 (list python-pytest
41431 python-pytest-asyncio
41432 python-setuptools))
41433 (propagated-inputs
41434 (list python-loguru
41435 python-typing-extensions))
41436 (home-page "https://github.com/WoLpH/python-utils")
41437 (synopsis "Convenient utilities not included with the standard Python install")
41438 (description
41439 "Python Utils is a collection of small Python functions and classes
41440which make common patterns shorter and easier.")
41441 (license license:bsd-2)))
41442
41443(define-public python-uuid6
41444 (package
41445 (name "python-uuid6")
41446 (version "2025.0.1")
41447 (source
41448 (origin
41449 (method git-fetch)
41450 (uri (git-reference
41451 (url "https://github.com/oittaa/uuid6-python")
41452 (commit version)))
41453 (file-name (git-file-name name version))
41454 (sha256
41455 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41456 (build-system pyproject-build-system)
41457 (arguments
41458 (list
41459 #:test-flags
41460 ;; Test is time based: AssertionError: 13987034766.015247 !=
41461 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41462 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41463 (native-inputs
41464 (list python-pytest
41465 python-setuptools
41466 python-setuptools-scm))
41467 (home-page "https://github.com/oittaa/uuid6-python")
41468 (synopsis "Time-based UUID formats which are suited for use as a database key")
41469 (description
41470 "This module extends immutable UUID objects (the UUID class) with the
41471functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41472@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41473 (license license:expat)))
41474
41475(define-public python-validate-email
41476 (package
41477 (name "python-validate-email")
41478 (version "1.3")
41479 (source
41480 (origin
41481 (method url-fetch)
41482 (uri (pypi-uri "validate_email" version))
41483 (sha256
41484 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41485 (build-system pyproject-build-system)
41486 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41487 (native-inputs
41488 (list python-setuptools))
41489 (home-page "https://github.com/syrusakbary/validate_email")
41490 (synopsis "Verifies if an email address is valid and really exists")
41491 (description
41492 "@code{validate_email} can be used to verify if an email address is
41493valid and really exists.")
41494 (license license:lgpl3+)))
41495
41496(define-public python-validators
41497 (package
41498 (name "python-validators")
41499 (version "0.34.0")
41500 (source
41501 (origin
41502 (method url-fetch)
41503 (uri (pypi-uri "validators" version))
41504 (sha256
41505 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
41506 (build-system pyproject-build-system)
41507 (arguments
41508 (list
41509 ;; python-eth-hash is not packed yet.
41510 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
41511 (native-inputs
41512 (list python-pytest
41513 python-setuptools
41514 python-wheel))
41515 (propagated-inputs
41516 (list python-decorator
41517 ;; python-eth-hash ; optional, not packed yet.
41518 python-six))
41519 (home-page "https://github.com/kvesteri/validators")
41520 (synopsis "Data validation library")
41521 (description
41522 "This package contains validators for different things such as email
41523addresses, IP addresses, URLs, hashes and more. It has been designed to be
41524easy to use and not require defining a schema or form just to validate some
41525input.")
41526 (license license:expat)))
41527
41528(define-public python-valkey
41529 (package
41530 (name "python-valkey")
41531 (version "6.1.1")
41532 (source
41533 (origin
41534 (method git-fetch)
41535 (uri (git-reference
41536 (url "https://github.com/valkey-io/valkey-py")
41537 (commit (string-append "v" version))))
41538 (file-name (git-file-name name version))
41539 (sha256
41540 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41541 (build-system pyproject-build-system)
41542 (arguments
41543 ;; XXX: A lot of tests fail with ConnectionError
41544 ;; Maybe we need to spawn a valkey server?
41545 (list #:tests? #f))
41546 (native-inputs
41547 (list python-setuptools))
41548 (home-page "https://github.com/valkey-io/valkey-py")
41549 (synopsis "Python client for Valkey")
41550 (description
41551 "This package provides a python client for the @code{Valkey} key-value
41552store, forked from redis-py.")
41553 (license license:expat)))
41554
41555;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41556;; package.
41557(define-public python-vcversioner
41558 (package
41559 (name "python-vcversioner")
41560 (version "2.16.0.0")
41561 (source
41562 (origin
41563 (method url-fetch)
41564 (uri (pypi-uri "vcversioner" version))
41565 (sha256
41566 (base32
41567 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41568 (build-system pyproject-build-system)
41569 (arguments
41570 (list #:tests? #f)) ;no tests in PyPI archive
41571 (native-inputs
41572 (list python-setuptools))
41573 (home-page "https://github.com/habnabit/vcversioner")
41574 (synopsis "Python library for version number discovery")
41575 (description
41576 "Vcversioner is a Python library that inspects tagging information in a
41577variety of version control systems in order to discover version numbers.")
41578 (license license:isc)))
41579
41580(define-public python-vdf
41581 (package
41582 (name "python-vdf")
41583 (version "3.4")
41584 (source
41585 (origin
41586 (method git-fetch) ; no tests in PyPI release
41587 (uri (git-reference
41588 (url "https://github.com/ValvePython/vdf")
41589 (commit (string-append "v" version))))
41590 (file-name (git-file-name name version))
41591 (sha256
41592 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
41593 (build-system pyproject-build-system)
41594 (native-inputs
41595 (list python-pytest python-setuptools))
41596 (home-page "https://github.com/ValvePython/vdf")
41597 (synopsis "Work with Valve's VDF text format")
41598 (description
41599 "This package provides @code{python-vdf}, a library for working with
41600 Valve's VDF text format.")
41601 (license license:expat)))
41602
41603(define-public python-vendetect
41604 (package
41605 (name "python-vendetect")
41606 (version "0.0.3")
41607 (source
41608 (origin
41609 (method url-fetch)
41610 (uri (pypi-uri "vendetect" version))
41611 (sha256
41612 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
41613 (build-system pyproject-build-system)
41614 (propagated-inputs (list python-copydetect python-rich))
41615 (native-inputs (list python-hatchling python-pytest))
41616 (home-page "https://github.com/trailofbits/vendetect")
41617 (synopsis "Detect vendored and copy-pasted code")
41618 (description
41619 "Vendetect helps identify copied or vendored code between repositories,
41620making it easier to detect when code has been copied with or without
41621attribution. It uses similarity detection algorithms to compare code files
41622and highlight matching sections.")
41623 (license license:agpl3+)))
41624
41625;; XXX: No updates since 2017.
41626(define-public python-verboselogs
41627 (package
41628 (name "python-verboselogs")
41629 (version "1.7")
41630 (source
41631 (origin
41632 (method url-fetch)
41633 (uri (pypi-uri "verboselogs" version))
41634 (sha256
41635 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
41636 (build-system pyproject-build-system)
41637 (arguments
41638 (list
41639 #:test-flags
41640 ;; Do not run pylint plugin test, as astroid is an old unsupported
41641 ;; version.
41642 #~(list "-k" "not test_pylint_plugin"
41643 "verboselogs/tests.py")))
41644 (native-inputs
41645 (list python-mock
41646 python-pytest
41647 python-setuptools))
41648 (home-page "https://verboselogs.readthedocs.io")
41649 (synopsis "Verbose logging level for Python's logging module")
41650 (description
41651 "The @code{verboselogs} package extends Python's @code{logging} module to
41652add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
41653 (license license:expat)))
41654
41655(define-public python-verlib2
41656 (package
41657 (name "python-verlib2")
41658 (version "0.3.1")
41659 (source
41660 (origin
41661 (method git-fetch)
41662 (uri (git-reference
41663 (url "https://github.com/pyveci/verlib2")
41664 (commit (string-append "v" version))))
41665 (file-name (git-file-name name version))
41666 (sha256
41667 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
41668 (build-system pyproject-build-system)
41669 (native-inputs
41670 (list python-pretend python-pytest python-setuptools))
41671 (home-page "https://github.com/pyveci/verlib2")
41672 (synopsis "Python versioning utilities")
41673 (description
41674 "This package provides a standalone variant of @code{distutils.version} and
41675@code{packaging.version}, without anything else.")
41676 (license license:bsd-2)))
41677
41678;; XXX: No updates since 2018, consider to remove when fails to build, it's a
41679;; leaf package.
41680(define-public python-version
41681 ;; No version tags available in the git repo; just using bare commit instead.
41682 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
41683 (revision "1"))
41684 (package
41685 (name "python-version")
41686 (version (git-version "0.0.2" revision commit))
41687 (source
41688 (origin
41689 (method git-fetch)
41690 (uri (git-reference
41691 (url "https://gitlab.com/halfak/python_version")
41692 (commit commit)))
41693 (file-name (git-file-name name version))
41694 (sha256
41695 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
41696 (build-system pyproject-build-system)
41697 (arguments
41698 (list #:tests? #f)) ;no tests
41699 (native-inputs
41700 (list python-setuptools))
41701 (home-page "https://gitlab.com/halfak/python_version")
41702 (synopsis "Python version checking utility")
41703 (description
41704 "This package provides a simple utility for checking the python version.")
41705 (license license:expat))))
41706
41707(define-public python-versioneer
41708 (package
41709 (name "python-versioneer")
41710 (version "0.29")
41711 (source
41712 (origin
41713 (method url-fetch)
41714 (uri (pypi-uri "versioneer" version))
41715 (sha256
41716 (base32
41717 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
41718 (patches (search-patches "python-versioneer-guix-support.patch"))))
41719 (build-system pyproject-build-system)
41720 (arguments
41721 (list
41722 ;; Minimize test requirements.
41723 #:test-flags
41724 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
41725 "--ignore=test/git/test_invocations.py"
41726 "--ignore=test/test_render.py")
41727 #:phases
41728 #~(modify-phases %standard-phases
41729 (add-before 'check 'pre-check
41730 (lambda _
41731 (invoke "python" "setup.py" "make_versioneer"
41732 "make_long_version_py_git"))))))
41733 (native-inputs
41734 (list git-minimal/pinned
41735 python-pytest
41736 python-setuptools
41737 python-wheel))
41738 (propagated-inputs
41739 (list python-tomli))
41740 (home-page "https://github.com/python-versioneer/python-versioneer")
41741 (synopsis "Version-string management for VCS-controlled trees")
41742 (description
41743 "@code{versioneer} is a tool for managing a recorded version number in
41744distutils-based python projects. The goal is to remove the tedious and
41745error-prone \"update the embedded version string\" step from your release
41746process.")
41747 (license license:unlicense)))
41748
41749(define-public python-verspec
41750 (package
41751 (name "python-verspec")
41752 (version "0.1.0")
41753 (source
41754 (origin
41755 (method url-fetch)
41756 (uri (pypi-uri "verspec" version))
41757 (sha256
41758 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
41759 (build-system pyproject-build-system)
41760 (arguments
41761 (list
41762 #:phases
41763 #~(modify-phases %standard-phases
41764 (add-before 'check 'pre-check
41765 (lambda _
41766 (invoke "touch" "test/__init__.py"))))))
41767 (native-inputs
41768 (list python-pretend
41769 python-pytest
41770 python-setuptools))
41771 (home-page "https://github.com/jimporter/verspec")
41772 (synopsis "Flexible version handling for Python")
41773 (description
41774 "This Python library handles software versions and specifiers. It is
41775adapted from the @code{packaging} package.")
41776 (license (list license:bsd-2 license:asl2.0))))
41777
41778(define-public python-vine
41779 (package
41780 (name "python-vine")
41781 (version "5.1.0")
41782 (source
41783 (origin
41784 (method url-fetch)
41785 (uri (pypi-uri "vine" version))
41786 (sha256
41787 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
41788 (build-system pyproject-build-system)
41789 (arguments
41790 (list
41791 #:test-flags
41792 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
41793 #~(list "-k" (string-join
41794 (list "not test_evaluate"
41795 "test_reverse"
41796 "test_cancel"
41797 "test_throw")
41798 " and not "))))
41799 (native-inputs
41800 (list python-pytest python-setuptools python-wheel))
41801 (home-page "https://github.com/celery/vine")
41802 (synopsis "Promises for Python")
41803 (description
41804 "@code{vine} provides a special implementation of promises in that it can
41805be used both for \"promise of a value\" and lazy evaluation. The biggest
41806upside for this is that everything in a promise can also be a promise,
41807e.g. filters, callbacks and errbacks can all be promises.")
41808 (license license:bsd-3)))
41809
41810(define-public python-virtualenv
41811 (package
41812 (name "python-virtualenv")
41813 (version "20.35.4")
41814 (source
41815 (origin
41816 (method git-fetch)
41817 (uri (git-reference
41818 (url "https://github.com/pypa/virtualenv")
41819 (commit version)))
41820 (file-name (git-file-name name version))
41821 (sha256
41822 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
41823 (build-system pyproject-build-system)
41824 (arguments
41825 (list
41826 ;; tests: 347 passed, 43 skipped, 8 deselected
41827 #:test-flags
41828 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
41829 (string-join ls "::")))
41830 '(("discovery/py_info/test_py_info.py"
41831 "test_fallback_existent_system_executable")
41832 ("discovery/test_discovery.py"
41833 "test_get_paths_no_path_env")
41834 ("create/via_global_ref/test_build_c_ext.py"
41835 "test_can_build_c_extensions[cpython3-posix]")
41836 ("create/via_global_ref/test_build_c_ext.py"
41837 "test_can_build_c_extensions[venv]")
41838 ("create/test_creator.py"
41839 "test_create_distutils_cfg[cpython3-posix]")
41840 ("create/test_creator.py"
41841 "test_create_distutils_cfg[venv]")
41842 ("seed/embed/test_bootstrap_link_via_app_data.py"
41843 "test_seed_link_via_app_data[True]")
41844 ("seed/embed/test_bootstrap_link_via_app_data.py"
41845 "test_seed_link_via_app_data[False]"))))))
41846 (native-inputs
41847 (list python-flaky
41848 python-hatch-vcs
41849 python-hatchling
41850 python-packaging
41851 python-pytest
41852 python-pytest-env
41853 python-pytest-freezer
41854 python-pytest-mock
41855 python-pytest-timeout
41856 python-setuptools
41857 python-time-machine))
41858 (propagated-inputs
41859 (list python-distlib
41860 python-filelock
41861 python-platformdirs))
41862 (home-page "https://virtualenv.pypa.io/")
41863 (synopsis "Virtual Python environment builder")
41864 (description
41865 "Virtualenv is a tool to create isolated Python environments.")
41866 (license license:expat)))
41867
41868(define-public python-vncdotool
41869 (package
41870 (name "python-vncdotool")
41871 (version "1.2.0")
41872 (source
41873 (origin
41874 (method git-fetch)
41875 (uri (git-reference
41876 (url "http://github.com/sibson/vncdotool")
41877 (commit (string-append "v" version))))
41878 (file-name (git-file-name name version))
41879 (sha256
41880 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
41881 (build-system pyproject-build-system)
41882 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
41883 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
41884 python-setuptools python-wheel))
41885 (home-page "http://github.com/sibson/vncdotool")
41886 (synopsis "Command line VNC client")
41887 (description
41888 "This package provides a Python command line VNC client. It can be
41889useful to automating interactions with virtual machines or hardware devices
41890that are otherwise difficult to control.")
41891 (license license:expat)))
41892
41893(define-public python-vncdotool-bootstrap
41894 (hidden-package
41895 (package/inherit python-vncdotool
41896 (arguments (list #:tests? #f))
41897 (native-inputs (list python-pexpect python-pytest python-setuptools
41898 python-wheel)))))
41899
41900(define-public python-vobject
41901 (package
41902 (name "python-vobject")
41903 (version "0.9.9")
41904 (source (origin
41905 (method url-fetch)
41906 (uri (pypi-uri "vobject" version))
41907 (sha256
41908 (base32
41909 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
41910 (build-system pyproject-build-system)
41911 (arguments
41912 '(;; The test suite relies on some non-portable Windows interfaces. Tests
41913 ;; are rewokred on master's HEAD.
41914 #:tests? #f))
41915 (native-inputs
41916 (list python-setuptools))
41917 (propagated-inputs
41918 (list python-dateutil
41919 python-pytz
41920 python-six)) ;it's dropped on master's HEAD
41921 (home-page "https://py-vobject.github.io/")
41922 (synopsis "Parse and generate vCard and vCalendar files")
41923 (description
41924 "Vobject is intended to be a full featured Python package for parsing
41925and generating vCard and vCalendar files. Currently, iCalendar files are
41926supported and well tested. vCard 3.0 files are supported, and all data should
41927be imported, but only a few components are understood in a sophisticated way.")
41928 (license license:asl2.0)))
41929
41930(define-public python-voluptuous
41931 (package
41932 (name "python-voluptuous")
41933 (version "0.15.2")
41934 (source
41935 (origin
41936 (method url-fetch)
41937 (uri (pypi-uri "voluptuous" version))
41938 (sha256
41939 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
41940 (build-system pyproject-build-system)
41941 (native-inputs
41942 (list python-pytest
41943 python-setuptools))
41944 (home-page "https://github.com/alecthomas/voluptuous")
41945 (synopsis "Python data validation library")
41946 (description
41947 "Voluptuous is a Python data validation library. It is primarily
41948intended for validating data coming into Python as JSON, YAML, etc.")
41949 (license license:bsd-3)))
41950
41951(define-public python-wadler-lindig
41952 (package
41953 (name "python-wadler-lindig")
41954 (version "0.1.7")
41955 (source
41956 (origin
41957 ;; GitHub includes the tests, unlike the PyPI tarball
41958 (method git-fetch)
41959 (uri (git-reference
41960 (url "https://github.com/patrick-kidger/wadler_lindig")
41961 (commit (string-append "v" version))))
41962 (file-name (git-file-name name version))
41963 (sha256
41964 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
41965 (build-system pyproject-build-system)
41966 (native-inputs (list python-hatchling python-pytest python-numpy))
41967 (home-page "https://docs.kidger.site/wadler_lindig")
41968 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
41969 (description
41970 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
41971library for Python that implements a simplified version of the Wadler-Lindig
41972algorithm. Designed to consume less horizontal space than Python's
41973built-in pprint.pprint, it produces compact, well-formatted representations
41974even for complex custom types.")
41975 (license license:asl2.0)))
41976
41977(define-public python-wait-for2
41978 (package
41979 (name "python-wait-for2")
41980 (version "0.4.1")
41981 (source
41982 (origin
41983 (method git-fetch)
41984 (uri (git-reference
41985 (url "https://github.com/Traktormaster/wait-for2")
41986 (commit (string-append "v" version))))
41987 (file-name (git-file-name name version))
41988 (sha256
41989 (base32 "08911yby18sw2y6njn1fqlwvf9j2aay0p5d3wykdlcj36nyxfv1w"))))
41990 (build-system pyproject-build-system)
41991 (native-inputs
41992 (list python-pytest
41993 python-pytest-asyncio
41994 python-setuptools))
41995 (home-page "https://github.com/Traktormaster/wait-for2")
41996 (synopsis "Asyncio wait_for handling simultaneous cancellation and future completion")
41997 (description
41998 "This package provide an alternate implementation of @code{asyncio.wait_for()}
41999introduced in Python 3.12. It handles several edge cases like simultaneous
42000cancellation of wait and completion of future differently and consistently
42001across Python versions 3.7+.")
42002 (license license:asl2.0)))
42003
42004(define-public python-wand
42005 (package
42006 (name "python-wand")
42007 (version "0.7.1")
42008 (source
42009 (origin
42010 (method git-fetch)
42011 (uri (git-reference
42012 (url "https://github.com/emcconville/wand")
42013 (commit version)))
42014 (file-name (git-file-name name version))
42015 (sha256
42016 (base32 "0yzv3jwbfg0h2n102718cw392gx2dkrbpj4b54khszrcgrsifa2a"))))
42017 (build-system pyproject-build-system)
42018 (arguments
42019 (list
42020 #:phases
42021 #~(modify-phases %standard-phases
42022 (add-after 'unpack 'hardcode-lib-path
42023 (lambda _
42024 (substitute* "wand/api.py"
42025 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42026 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42027 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42028 "\".Q16\"")))))))
42029 (native-inputs
42030 (list python-setuptools python-pytest))
42031 (inputs
42032 (list imagemagick))
42033 (home-page "https://docs.wand-py.org/")
42034 (synopsis "MagickWand API binding for Python")
42035 (description
42036 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42037 (license license:expat)))
42038
42039(define-public python-wasabi
42040 (package
42041 (name "python-wasabi")
42042 (version "1.1.3")
42043 (source
42044 (origin
42045 (method url-fetch)
42046 (uri (pypi-uri "wasabi" version))
42047 (sha256
42048 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42049 (build-system pyproject-build-system)
42050 (arguments
42051 (list
42052 #:test-flags
42053 ;; Test requires nbconvert which is huge.
42054 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42055 (native-inputs
42056 (list python-pytest
42057 python-setuptools))
42058 (propagated-inputs
42059 (list python-colorama))
42060 (home-page "https://github.com/ines/wasabi")
42061 (synopsis "Console printing and formatting toolkit")
42062 (description
42063 "This package provides a lightweight console printing and formatting
42064toolkit for Python.")
42065 (license license:expat)))
42066
42067(define-public python-watchdog
42068 (package
42069 (name "python-watchdog")
42070 (version "6.0.0")
42071 (source
42072 (origin
42073 (method url-fetch)
42074 (uri (pypi-uri "watchdog" version))
42075 (sha256
42076 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42077 (build-system pyproject-build-system)
42078 (arguments
42079 (list
42080 #:test-flags
42081 #~(list "-k" (string-join
42082 (list "not test_kill_auto_restart"
42083 "test_auto_restart_on_file_change_debounce"
42084 ;; Fails with too many open files.
42085 "test_select_fd")
42086 " and not "))))
42087 (native-inputs
42088 (list python-pytest python-setuptools))
42089 (propagated-inputs
42090 (list python-pyyaml))
42091 (home-page "https://github.com/gorakhargosh/watchdog")
42092 (synopsis "File system events monitoring")
42093 (description
42094 "This package provides a way to monitor file system events such as a file
42095modification and trigger an action. This is similar to inotify, but
42096portable.")
42097 (license license:asl2.0)))
42098
42099(define-public python-watchfiles
42100 (package
42101 (name "python-watchfiles")
42102 (version "1.1.1")
42103 (source
42104 (origin
42105 (method git-fetch)
42106 (uri (git-reference
42107 (url "https://github.com/samuelcolvin/watchfiles")
42108 (commit (string-append "v" version))))
42109 (file-name (git-file-name name version))
42110 (sha256
42111 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42112 (build-system pyproject-build-system)
42113 (arguments
42114 (list
42115 ;; Missing file in source.
42116 #:test-flags ''("-k" "not test_docs_examples")
42117 #:imported-modules `(,@%cargo-build-system-modules
42118 ,@%pyproject-build-system-modules)
42119 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42120 (guix build pyproject-build-system)
42121 (guix build utils))
42122 #:phases
42123 #~(modify-phases %standard-phases
42124 (add-after 'unpack 'prepare-cargo-build-system
42125 (lambda args
42126 (for-each
42127 (lambda (phase)
42128 (format #t "Running cargo phase: ~a~%" phase)
42129 (apply (assoc-ref cargo:%standard-phases phase)
42130 #:cargo-target #$(cargo-triplet)
42131 args))
42132 '(unpack-rust-crates
42133 configure
42134 check-for-pregenerated-files
42135 patch-cargo-checksums))))
42136 (add-after 'build 'install-rust-library
42137 (lambda _
42138 (copy-file "target/release/lib_rust_notify.so"
42139 "watchfiles/_rust_notify.so"))))))
42140 (native-inputs
42141 (append
42142 (list maturin
42143 python-anyio
42144 python-dirty-equals
42145 python-pytest
42146 python-pytest-mock
42147 python-pytest-timeout
42148 rust
42149 `(,rust "cargo"))
42150 (or (and=> (%current-target-system)
42151 (compose list make-rust-sysroot))
42152 '())))
42153 (inputs
42154 (cargo-inputs 'python-watchfiles))
42155 (propagated-inputs
42156 (list python-anyio))
42157 (home-page "https://github.com/samuelcolvin/watchfiles")
42158 (synopsis "Simple, modern file watching and code reload in Python")
42159 (description
42160 "Simple, modern file watching and code reload in Python inspired by
42161@code{watchdog}. Among the differences are a unified approach for each
42162operating systems and an elegant approach to concurrency using threading.")
42163 (license license:expat)))
42164
42165(define-public python-wcmatch
42166 (package
42167 (name "python-wcmatch")
42168 (version "10.1")
42169 (source
42170 (origin
42171 (method git-fetch)
42172 (uri (git-reference
42173 (url "https://github.com/facelessuser/wcmatch")
42174 (commit version)))
42175 (file-name (git-file-name name version))
42176 (sha256
42177 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42178 (build-system pyproject-build-system)
42179 (arguments
42180 (list #:test-flags
42181 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42182 ;; the build directory which the sandbox does not permit.
42183 #~(list "-k" "not test_glob_match_real_outside_curdir")
42184 #:phases
42185 #~(modify-phases %standard-phases
42186 (add-before 'check 'set-home
42187 (lambda _
42188 (setenv "HOME" (getcwd)))))))
42189 (native-inputs
42190 (list python-hatchling
42191 python-pytest))
42192 (propagated-inputs
42193 (list python-bracex))
42194 (home-page "https://facelessuser.github.io/wcmatch/")
42195 (synopsis "Wildcard and glob file name matcher")
42196 (description
42197 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42198@code{pathlib} library. It adds features such as brace expansion,extended
42199glob patterns, and recursive globbing with configurable behavior.")
42200 (license license:expat)))
42201
42202(define-public python-wcwidth
42203 (package
42204 (name "python-wcwidth")
42205 (version "0.2.13")
42206 (source (origin
42207 (method url-fetch)
42208 (uri (pypi-uri "wcwidth" version))
42209 (sha256
42210 (base32
42211 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42212 (build-system pyproject-build-system)
42213 (native-inputs (list python-pytest python-setuptools))
42214 (home-page "https://github.com/jquast/wcwidth")
42215 (synopsis "Measure number of terminal column cells of wide-character codes")
42216 (description
42217 "Wcwidth measures the number of terminal column cells of wide-character
42218codes. It is useful for those implementing a terminal emulator, or programs
42219that carefully produce output to be interpreted by one. It is a Python
42220implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42221in POSIX.1-2001 and POSIX.1-2008.")
42222 (license license:expat)))
42223
42224(define-public python-whatever
42225 (package
42226 (name "python-whatever")
42227 (version "0.7")
42228 (source
42229 (origin
42230 (method git-fetch)
42231 (uri (git-reference
42232 (url "https://github.com/Suor/whatever")
42233 (commit version)))
42234 (file-name (git-file-name name version))
42235 (sha256
42236 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42237 (build-system pyproject-build-system)
42238 (native-inputs
42239 (list python-pytest python-setuptools python-wheel))
42240 (home-page "https://github.com/Suor/whatever")
42241 (synopsis "Make anonymous functions by partial application of operators")
42242 (description "@code{whatever} provides an easy way to make anonymous
42243functions by partial application of operators.")
42244 (license license:bsd-3)))
42245
42246(define-public python-whatthepatch
42247 (package
42248 (name "python-whatthepatch")
42249 (version "1.0.7")
42250 (source
42251 (origin
42252 (method url-fetch)
42253 (uri (pypi-uri "whatthepatch" version))
42254 (sha256
42255 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42256 (build-system pyproject-build-system)
42257 (native-inputs (list python-pytest python-setuptools))
42258 (home-page "https://github.com/cscorley/whatthepatch")
42259 (synopsis "Patch parsing and application library")
42260 (description
42261 "This package provides a patch parsing and application library.")
42262 (license license:expat)))
42263
42264(define-public python-wheel-filename
42265 (package
42266 (name "python-wheel-filename")
42267 (version "1.4.2")
42268 (source
42269 (origin
42270 (method url-fetch)
42271 (uri (pypi-uri "wheel_filename" version))
42272 (sha256
42273 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42274 (build-system pyproject-build-system)
42275 (native-inputs (list python-hatchling python-pytest))
42276 (home-page "https://github.com/wheelodex/wheel-filename")
42277 (synopsis "Parse wheel filenames")
42278 (description
42279 "This software allows you to verify
42280@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42281filenames and parse them into their component fields.
42282
42283This package adheres strictly to the standard, with the following
42284exceptions:
42285
42286@itemize @bullet
42287@item
42288Version components may be any sequence of the relevant set of
42289characters; they are not verified for PEP 440 compliance.
42290@item
42291The @file{.whl} file extension is matched case-insensitively.
42292@end itemize")
42293 (license license:expat)))
42294
42295(define-public python-whenever
42296 (package
42297 (name "python-whenever")
42298 (version "0.9.2")
42299 (source
42300 (origin
42301 (method url-fetch)
42302 (uri (pypi-uri "whenever" version))
42303 (sha256
42304 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42305 (build-system pyproject-build-system)
42306 (arguments
42307 (list
42308 ;; tests: 2170 passed, 3 skipped, 2 warnings
42309 #:phases
42310 #~(modify-phases %standard-phases
42311 ;; Use the pure python version
42312 (add-before 'build 'setenv
42313 (lambda _
42314 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42315 (add-before 'check 'set-check-environment
42316 (lambda* (#:key inputs #:allow-other-keys)
42317 (setenv "TZ" "UTC")
42318 (setenv "TZDIR"
42319 (search-input-directory inputs
42320 "share/zoneinfo")))))))
42321 (propagated-inputs
42322 (list python-time-machine python-tzdata python-tzlocal))
42323 (native-inputs
42324 (list python-pytest
42325 python-setuptools
42326 tzdata-for-tests))
42327 (home-page "https://whenever.readthedocs.io/")
42328 (synopsis "Modern datetime library for Python")
42329 (description "Modern datetime library for Python. Supports:
42330@itemize
42331@item DST-safe arithmetic
42332@item Nanosecond precision
42333@item Date arithmetic
42334@end itemize")
42335 (license license:expat)))
42336
42337;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42338(define-public python-whichcraft
42339 (package
42340 (name "python-whichcraft")
42341 (version "0.6.1")
42342 (source
42343 (origin
42344 (method url-fetch)
42345 (uri (pypi-uri "whichcraft" version))
42346 (sha256
42347 (base32
42348 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42349 (build-system pyproject-build-system)
42350 (native-inputs
42351 (list python-pytest python-setuptools))
42352 (home-page "https://github.com/pydanny/whichcraft")
42353 (synopsis "Cross-platform cross-python shutil.which functionality")
42354 (description
42355 "This package provides a shim of the shutil.which function that's
42356designed to work across multiple versions of Python.")
42357 (license license:bsd-3)))
42358
42359(define-public python-widgetsnbextension
42360 (package
42361 (name "python-widgetsnbextension")
42362 (version "4.0.14")
42363 (source
42364 (origin
42365 (method url-fetch)
42366 (uri (pypi-uri "widgetsnbextension" version))
42367 (sha256
42368 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42369 (build-system pyproject-build-system)
42370 (arguments
42371 (list #:tests? #f)) ;no tests in PyPI or git
42372 (native-inputs
42373 (list python-jupyter-packaging
42374 python-setuptools))
42375 (home-page "https://ipython.org")
42376 (synopsis "IPython HTML widgets for Jupyter")
42377 (description "This package provides interactive HTML widgets for Jupyter
42378notebooks.")
42379 (license license:bsd-3)))
42380
42381(define-public python-wrapt
42382 (package
42383 (name "python-wrapt")
42384 (version "2.0.1")
42385 (source
42386 (origin
42387 (method url-fetch)
42388 (uri (pypi-uri "wrapt" version))
42389 (sha256
42390 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42391 (build-system pyproject-build-system)
42392 (arguments
42393 (list
42394 ;; tests: 562 passed, 1 deselected
42395 #:test-flags
42396 ;; AssertionError: Output did not match expected for
42397 ;; mypy_function_wrapper_fn_t6.py
42398 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42399 (native-inputs
42400 (list python-mypy-for-tests ;hard dependencies in tests
42401 python-pytest
42402 python-setuptools))
42403 (home-page "https://github.com/GrahamDumpleton/wrapt")
42404 (synopsis "Module for decorators, wrappers and monkey patching")
42405 (description
42406 "The aim of the wrapt module is to provide a transparent object proxy for
42407 Python, which can be used as the basis for the construction of function
42408 wrappers and decorator functions.")
42409 (license license:bsd-2)))
42410
42411(define-public python-wurlitzer
42412 (package
42413 (name "python-wurlitzer")
42414 (version "3.1.1")
42415 (source
42416 (origin
42417 (method url-fetch)
42418 (uri (pypi-uri "wurlitzer" version))
42419 (sha256
42420 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42421 (build-system pyproject-build-system)
42422 (arguments
42423 (list #:test-flags #~(list "test.py")))
42424 (native-inputs
42425 (list python-pytest
42426 python-setuptools))
42427 (home-page "https://github.com/minrk/wurlitzer")
42428 (synopsis "Capture C-level output in context managers")
42429 (description
42430 "This library helps to redirect @code{sys.stdout} to a stream or a file
42431while executing some piece of code, including C code running within a Python
42432process.")
42433 (license license:expat)))
42434
42435(define-public python-xattr
42436 (package
42437 (name "python-xattr")
42438 (version "1.2.0")
42439 (source
42440 (origin
42441 (method url-fetch)
42442 (uri (pypi-uri "xattr" version))
42443 (sha256
42444 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42445 (build-system pyproject-build-system)
42446 (native-inputs
42447 (list python-pytest
42448 python-setuptools))
42449 (propagated-inputs
42450 (list python-cffi))
42451 (home-page "https://github.com/xattr/xattr")
42452 (synopsis "Python wrapper for extended file system attributes")
42453 (description "This package provides a Python wrapper for using extended
42454file system attributes. Extended attributes extend the basic attributes of files
42455and directories in the file system. They are stored as name:data pairs
42456associated with file system objects (files, directories, symlinks, etc).")
42457 (license license:expat)))
42458
42459(define-public python-xdg-base-dirs
42460 (package
42461 (name "python-xdg-base-dirs")
42462 (version "6.0.2")
42463 (source
42464 (origin
42465 (method git-fetch)
42466 (uri (git-reference
42467 (url "https://github.com/srstevenson/xdg-base-dirs")
42468 (commit version)))
42469 (file-name (git-file-name name version))
42470 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42471 (modules '((guix build utils)))
42472 ;; All pytest options are for coverage; remove snippet in next release:
42473 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42474 (snippet #~(substitute* "pyproject.toml"
42475 (("^addopts = .*") "")))))
42476 (build-system pyproject-build-system)
42477 (native-inputs
42478 (list python-poetry-core python-pytest))
42479 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42480 (synopsis "Variables defined by the XDG Base Directory Specification")
42481 (description "xdg-base-dirs is a Python module that provides functions to
42482return paths to the directories defined by the XDG Base Directory
42483Specification, to save you from duplicating the same snippet of logic in every
42484Python utility you write that deals with user cache, configuration, or data
42485files.")
42486 (license license:isc)))
42487
42488;; XXX: Deprecated on <2026-02-19>.
42489(define-deprecated-package python-xdg
42490 python-xdg-base-dirs)
42491
42492(define-public python-xkbcommon
42493 (package
42494 (name "python-xkbcommon")
42495 (version "1.0.1")
42496 (source
42497 (origin
42498 (method git-fetch)
42499 (uri (git-reference
42500 (url "https://github.com/sde1000/python-xkbcommon")
42501 (commit (string-append "v" version))))
42502 (file-name (git-file-name name version))
42503 (sha256
42504 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42505 (build-system pyproject-build-system)
42506 (propagated-inputs (list python-cffi))
42507 (native-inputs (list libxkbcommon python-setuptools))
42508 (arguments
42509 (list
42510 #:test-backend
42511 #~'unittest
42512 #:phases
42513 #~(modify-phases %standard-phases
42514 (add-before 'check 'cleanup
42515 (lambda _
42516 (delete-file-recursively "xkbcommon"))))))
42517 (home-page "https://github.com/sde1000/python-xkbcommon")
42518 (synopsis "Bindings for libxkbcommon using cffi")
42519 (description "Bindings for libxkbcommon using cffi.")
42520 (license license:expat)))
42521
42522(define-public python-xlib
42523 (package
42524 (name "python-xlib")
42525 (version "0.33")
42526 (source
42527 (origin
42528 (method git-fetch)
42529 (uri (git-reference
42530 (url "https://github.com/python-xlib/python-xlib")
42531 (commit version)))
42532 (file-name (git-file-name name version))
42533 (sha256
42534 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42535 (build-system pyproject-build-system)
42536 (arguments
42537 `(#:phases
42538 (modify-phases %standard-phases
42539 (add-before 'check 'start-xserver
42540 (lambda* (#:key inputs #:allow-other-keys)
42541 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42542 ;; There must be a running X server and make check doesn't
42543 ;; start one. Therefore we must do it.
42544 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42545 (setenv "DISPLAY" ":1")))))))
42546 (native-inputs
42547 (list python-mock
42548 python-pytest
42549 python-setuptools
42550 xorg-server))
42551 (propagated-inputs
42552 (list python-six))
42553 (home-page "https://github.com/python-xlib/python-xlib")
42554 (synopsis "Python X11 client library")
42555 (description
42556 "The Python X Library is intended to be a fully functional
42557X client library for Python programs. It is useful to implement
42558low-level X clients. It is written entirely in Python.")
42559 (license license:gpl2+)))
42560
42561(define-public python-xlrd
42562 (package
42563 (name "python-xlrd")
42564 (version "2.0.2")
42565 (source
42566 (origin
42567 (method git-fetch) ;no tests in PyPI archive
42568 (uri (git-reference
42569 (url "https://github.com/python-excel/xlrd")
42570 (commit version)))
42571 (file-name (git-file-name name version))
42572 (sha256
42573 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42574 (build-system pyproject-build-system)
42575 (native-inputs
42576 (list python-pytest
42577 python-setuptools))
42578 (home-page "https://www.python-excel.org/")
42579 (synopsis "Library for extracting data from Excel files")
42580 (description "This package provides a library to extract data from
42581spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42582@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42583Unicode-aware. It is not intended as an end-user tool.")
42584 (license license:bsd-3)))
42585
42586(define-public python-xlsxwriter
42587 (package
42588 (name "python-xlsxwriter")
42589 (version "3.2.0")
42590 (source
42591 (origin
42592 ;; There are no tests in the PyPI tarball.
42593 (method git-fetch)
42594 (uri (git-reference
42595 (url "https://github.com/jmcnamara/XlsxWriter")
42596 (commit (string-append "RELEASE_" version))))
42597 (file-name (git-file-name name version))
42598 (sha256
42599 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42600 (build-system pyproject-build-system)
42601 (native-inputs
42602 (list python-setuptools
42603 python-wheel))
42604 (home-page "https://github.com/jmcnamara/XlsxWriter")
42605 (synopsis "Python module for creating Excel XLSX files")
42606 (description
42607 "XlsxWriter is a Python module that can be used to write text, numbers,
42608formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
42609 (license license:bsd-2)))
42610
42611;;; Note: this package is unmaintained since 2018 (archived on GitHub).
42612(define-public python-xlwt
42613 (package
42614 (name "python-xlwt")
42615 (version "1.3.0")
42616 (source
42617 (origin
42618 (method url-fetch)
42619 (uri (pypi-uri "xlwt" version))
42620 (sha256
42621 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
42622 (build-system pyproject-build-system)
42623 (native-inputs (list python-pytest python-setuptools python-wheel))
42624 (home-page "https://www.python-excel.org/")
42625 (synopsis "Library for creating spreadsheet Excel files")
42626 (description
42627 "@code{xlwt} is a library for writing data and formatting information to
42628older Excel files (i.e. .xls). The package itself is pure Python with no
42629dependencies on modules or packages outside the standard Python distribution.
42630It is not intended as an end-user tool.")
42631 (license license:bsd-3)))
42632
42633(define-public python-xmldiff
42634 (package
42635 (name "python-xmldiff")
42636 (version "3.0b1")
42637 (source
42638 (origin
42639 (method git-fetch)
42640 (uri (git-reference
42641 (url "https://github.com/Shoobx/xmldiff")
42642 (commit version)))
42643 (file-name (git-file-name name version))
42644 (sha256
42645 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
42646 (build-system pyproject-build-system)
42647 (native-inputs (list python-pytest python-setuptools))
42648 (propagated-inputs (list python-lxml))
42649 (home-page "https://github.com/Shoobx/xmldiff")
42650 (synopsis "Creates diffs of XML files")
42651 (description "This Python tool figures out the differences between two
42652similar XML files, in the same way the @command{diff} utility does it.")
42653 (license license:expat)))
42654
42655(define-public python-xmlsec
42656 (package
42657 (name "python-xmlsec")
42658 (version "1.3.17")
42659 (source
42660 (origin
42661 (method git-fetch)
42662 (uri (git-reference
42663 (url "https://github.com/xmlsec/python-xmlsec")
42664 (commit version)))
42665 (file-name (git-file-name name version))
42666 (sha256
42667 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
42668 (build-system pyproject-build-system)
42669 (arguments
42670 (list
42671 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
42672 #:test-flags #~(list "-n" "1")))
42673 (inputs (list openssl libltdl libxslt libxml2))
42674 (propagated-inputs (list python-lxml xmlsec-openssl))
42675 (native-inputs (list pkg-config
42676 python-lxml
42677 python-pkgconfig
42678 python-pytest
42679 python-pytest-xdist
42680 python-setuptools
42681 python-setuptools-scm
42682 python-wheel))
42683 (home-page "https://github.com/xmlsec/python-xmlsec")
42684 (synopsis "Python bindings for the XML Security Library")
42685 (description "This package provides Python bindings for the XML Security
42686Library.")
42687 (license license:expat)))
42688
42689(define-public python-xmp-toolkit
42690 (package
42691 (name "python-xmp-toolkit")
42692 (version "2.1.0")
42693 (source
42694 (origin
42695 (method url-fetch)
42696 (uri (pypi-uri "python_xmp_toolkit" version))
42697 (sha256
42698 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
42699 (build-system pyproject-build-system)
42700 (arguments
42701 (list
42702 #:phases
42703 #~(modify-phases %standard-phases
42704 (add-after 'unpack 'patch-source
42705 (lambda* (#:key inputs #:allow-other-keys)
42706 (substitute* "libxmp/exempi.py"
42707 (("ctypes.util.find_library\\('exempi'\\)")
42708 (format #f "~s" (search-input-file
42709 inputs "lib/libexempi.so")))))))))
42710 (native-inputs
42711 (list python-pytest
42712 python-flit-core))
42713 (inputs
42714 (list exempi))
42715 (propagated-inputs
42716 (list python-pytz))
42717 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
42718 (synopsis "Python XMP Toolkit for working with metadata")
42719 (description "Python XMP Toolkit is a library for working with XMP
42720metadata, as well as reading/writing XMP metadata stored in many different
42721file formats.
42722
42723Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
42724based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
42725are easily incorporated into the library with a minimum amount of work.")
42726 (license license:bsd-3)))
42727
42728(define-public python-yamlcore
42729 (package
42730 (name "python-yamlcore")
42731 (version "0.0.4")
42732 (source
42733 (origin
42734 (method git-fetch)
42735 (uri (git-reference
42736 (url "https://github.com/perlpunk/pyyaml-core")
42737 (commit (string-append "v" version))))
42738 (file-name (git-file-name name version))
42739 (sha256
42740 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
42741 (build-system pyproject-build-system)
42742 (arguments
42743 (list
42744 #:phases
42745 #~(modify-phases %standard-phases
42746 (add-after 'unpack 'fix-test-file-names
42747 (lambda _
42748 (rename-file "tests/test-schema.py" "tests/test_schema.py")
42749 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
42750 (native-inputs (list python-pytest python-setuptools))
42751 (inputs (list python-pyyaml))
42752 (home-page "https://github.com/perlpunk/pyyaml-core")
42753 (synopsis "YAML 1.2 support for PyYAML")
42754 (description "This module can be used on top of PyYAML to load YAML 1.2
42755files.")
42756 (license license:expat)))
42757
42758(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
42759
42760(define-public python-yamllint
42761 (package
42762 (name "python-yamllint")
42763 (version "1.37.1")
42764 (source
42765 (origin
42766 (method url-fetch)
42767 (uri (pypi-uri "yamllint" version))
42768 (sha256
42769 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
42770 (build-system pyproject-build-system)
42771 (arguments
42772 (list #:test-backend #~'unittest))
42773 (native-inputs
42774 (list python-setuptools))
42775 (propagated-inputs
42776 (list python-pathspec python-pyyaml))
42777 (home-page "https://github.com/adrienverge/yamllint")
42778 (synopsis "Linter for YAML files")
42779 (description
42780 "Yamllint is a linter for YAML files. yamllint does not only check for
42781syntax validity, but for weirdnesses like key repetition and cosmetic problems
42782such as lines length, trailing spaces, indentation, etc.")
42783 (license license:gpl3+)))
42784
42785(define-public python-yamlloader
42786 (package
42787 (name "python-yamlloader")
42788 (version "1.6.0")
42789 (source
42790 (origin
42791 (method url-fetch)
42792 (uri (pypi-uri "yamlloader" version))
42793 (sha256
42794 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
42795 (build-system pyproject-build-system)
42796 (arguments
42797 (list #:test-backend #~'unittest
42798 #:test-flags #~(list "discover" "-v")))
42799 (native-inputs
42800 (list python-hatch-vcs
42801 python-hatchling
42802 python-hypothesis
42803 python-pytest))
42804 (propagated-inputs
42805 (list python-pyyaml))
42806 (home-page "https://github.com/Phynix/yamlloader")
42807 (synopsis "Ordered YAML loader and dumper for PyYAML")
42808 (description
42809 "This package provides loaders and dumpers for PyYAML. Currently, an
42810OrderedDict loader/dumper is implemented, allowing to keep items order when
42811loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
42812dicts are supported and are the default items to be loaded to. As of Python
428133.7 preservation of insertion order is a language feature of regular dicts.)
42814It was originally mirrored from
42815@url{https://github.com/fmenabe/python-yamlordereddictloader,
42816yamlordereddict}.")
42817 (license license:expat)))
42818
42819;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
42820;; an improved version of this library with unit tests, performance
42821;; improvements (by providing access to the C implementation of PyYAML) and is
42822;; more actively developed.
42823(define-public python-yamlordereddictloader
42824 (package
42825 (name "python-yamlordereddictloader")
42826 (version "0.4.2")
42827 (source
42828 (origin
42829 (method git-fetch)
42830 (uri (git-reference
42831 (url "https://github.com/fmenabe/python-yamlordereddictloader")
42832 (commit version)))
42833 (file-name (git-file-name name version))
42834 (sha256
42835 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
42836 (build-system pyproject-build-system)
42837 (arguments
42838 (list #:tests? #f)) ;no tests
42839 (native-inputs
42840 (list python-setuptools))
42841 (propagated-inputs
42842 (list python-pyyaml))
42843 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
42844 (synopsis "Loader and a dumper for PyYAML")
42845 (description
42846 "yamlordereddictloader is a Python package that provides a loader and a
42847dumper for PyYAML allowing to keep items order when loading a file (by putting
42848them in OrderedDict objects) and to manage OrderedDict objects when dumping to
42849a file.")
42850 (license license:expat)))
42851
42852(define-public python-yapf
42853 (package
42854 (name "python-yapf")
42855 (version "0.43.0")
42856 (source
42857 (origin
42858 (method url-fetch)
42859 (uri (pypi-uri "yapf" version))
42860 (sha256
42861 (base32
42862 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
42863 (build-system pyproject-build-system)
42864 (propagated-inputs
42865 (list python-platformdirs python-tomli))
42866 (native-inputs
42867 (list python-pytest python-setuptools python-wheel))
42868 (home-page "https://github.com/google/yapf")
42869 (synopsis "Formatter for Python code")
42870 (description "YAPF is a formatter for Python code. It's based off of
42871@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
42872takes the code and reformats it to the best formatting that conforms to the
42873style guide, even if the original code didn't violate the style guide.")
42874 (license license:asl2.0)))
42875
42876(define-public python-yapsy
42877 (package
42878 (name "python-yapsy")
42879 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
42880 ;; 3.12+; move back to git tag when released.
42881 (properties '((commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
42882 (revision . "0")))
42883 (version (git-version "1.12.2"
42884 (assoc-ref properties 'revision)
42885 (assoc-ref properties 'commit)))
42886 (source
42887 (origin
42888 (method git-fetch)
42889 (uri (git-reference
42890 (url "https://github.com/tibonihoo/yapsy")
42891 (commit (assoc-ref properties 'commit))))
42892 (file-name (git-file-name name version))
42893 (sha256
42894 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
42895 (build-system pyproject-build-system)
42896 (native-inputs
42897 (list python-pytest python-setuptools))
42898 (home-page "https://yapsy.sourceforge.net")
42899 (synopsis "Simple plugin system for Python applications")
42900 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
42901implementing the core mechanisms needed to build a plugin system into a wider
42902application.
42903
42904The main purpose is to depend only on Python's standard libraries and to
42905implement only the basic functionalities needed to detect, load and keep track
42906of several plugins.")
42907 (license license:bsd-3)))
42908
42909(define-public python-yaspin
42910 (package
42911 (name "python-yaspin")
42912 (version "3.2.0")
42913 (source
42914 (origin
42915 (method url-fetch)
42916 (uri
42917 (pypi-uri "yaspin" version))
42918 (sha256
42919 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
42920 (build-system pyproject-build-system)
42921 ;; tests: 3007 passed, 1758 skipped
42922 (native-inputs
42923 (list python-poetry-core
42924 python-pytest
42925 python-pytest-mock))
42926 (propagated-inputs
42927 (list python-termcolor-next))
42928 (home-page "https://github.com/pavdmyt/yaspin")
42929 (synopsis "Yet Another Terminal Spinner")
42930 (description "Yaspin provides a terminal spinner to indicate the progress
42931during long operations.")
42932 (license license:expat)))
42933
42934(define-public python-yattag
42935 (package
42936 (name "python-yattag")
42937 (version "1.16.1")
42938 (source
42939 (origin
42940 (method url-fetch)
42941 (uri (pypi-uri "yattag" version))
42942 (sha256
42943 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
42944 (build-system pyproject-build-system)
42945 (native-inputs
42946 (list python-pytest
42947 python-setuptools
42948 python-wheel))
42949 (home-page "https://www.yattag.org/")
42950 (synopsis "HTML or XML generator for Python")
42951 (description
42952 "Yattag is a Python library for generating HTML or XML in a pythonic
42953way.")
42954 (license license:lgpl2.1)))
42955
42956(define-public python-yq
42957 (package
42958 (name "python-yq")
42959 (version "3.4.3")
42960 (source
42961 (origin
42962 (method url-fetch)
42963 (uri (pypi-uri "yq" version))
42964 (sha256
42965 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
42966 (build-system pyproject-build-system)
42967 (arguments
42968 (list
42969 #:test-backend #~'custom
42970 #:test-flags #~(list "test/test.py" "-v")
42971 #:phases
42972 #~(modify-phases %standard-phases
42973 (add-after 'unpack 'patch
42974 (lambda _
42975 (substitute* "yq/__init__.py"
42976 (("Popen\\(\\[\"jq")
42977 (string-append
42978 "Popen([\""
42979 #$(this-package-input "jq") "/bin/jq"))))))))
42980 (native-inputs
42981 (list python-hatchling
42982 python-hatch-vcs))
42983 (inputs
42984 (list jq))
42985 (propagated-inputs
42986 (list python-argcomplete
42987 python-pyyaml
42988 python-tomlkit
42989 python-xmltodict))
42990 (home-page "https://github.com/kislyuk/yq")
42991 (synopsis "Command-line YAML/XML processor")
42992 (description
42993 "This package provides @command{yq} and @command{xq} for processing YAML
42994and XML respectively. The processing is done through @command{jq},
42995@command{jq} filters can be used to process the data as it passes through.")
42996 (license license:asl2.0)))
42997
42998(define-public python-yte
42999 (package
43000 (name "python-yte")
43001 (version "1.8.1") ;TODO higher versions depend on uv_build
43002 (source
43003 (origin
43004 (method git-fetch)
43005 (uri (git-reference
43006 (url "https://github.com/koesterlab/yte")
43007 (commit (string-append "v" version))))
43008 (sha256
43009 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43010 (build-system pyproject-build-system)
43011 (arguments
43012 (list
43013 #:test-flags #~(list "tests.py")
43014 #:phases
43015 '(modify-phases %standard-phases
43016 (add-after 'unpack 'set-HOME
43017 (lambda _ (setenv "HOME" "/tmp"))))))
43018 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43019 (native-inputs (list python-numpy python-poetry-core python-pytest))
43020 (home-page "https://github.com/koesterlab/yte")
43021 (synopsis "YAML template engine with Python expressions")
43022 (description
43023 "This package provides a YAML template engine with Python expressions.")
43024 (license license:expat)))
43025
43026(define-public python-zarr
43027 (package
43028 (name "python-zarr")
43029 (version "2.18.7")
43030 (source
43031 (origin
43032 (method url-fetch)
43033 (uri (pypi-uri "zarr" version))
43034 (sha256
43035 (base32
43036 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
43037 (build-system pyproject-build-system)
43038 (arguments
43039 (list
43040 #:test-flags
43041 #~(list "--numprocesses" (number->string (parallel-job-count))
43042 ;; This tests are flaky. The pass several times on my laptop
43043 ;; but occasionally fail. They fail pretty reliably on the
43044 ;; build farm.
43045 "-k" (string-append "not test_lazy_loader and not open_array"
43046 ;; File not found.
43047 " and not test_filesystem_path"))
43048 #:phases
43049 #~(modify-phases %standard-phases
43050 (add-before 'build 'set-version
43051 (lambda _
43052 (substitute* "pyproject.toml"
43053 (("^version_file.*") "")
43054 (("dynamic = \\[\"version\"\\]")
43055 (string-append "version = \"" #$version "\"")))))
43056 (add-after 'unpack 'disable-service-tests
43057 (lambda _
43058 (setenv "ZARR_TEST_ABS" "0")
43059 (setenv "ZARR_TEST_MONGO" "0")
43060 (setenv "ZARR_TEST_REDIS" "0"))))))
43061 (propagated-inputs
43062 (list python-asciitree
43063 python-fasteners
43064 python-numcodecs
43065 python-numpy))
43066 (native-inputs
43067 (list python-pytest
43068 python-pytest-xdist
43069 python-setuptools
43070 python-wheel))
43071 (home-page "https://github.com/zarr-developers/zarr-python")
43072 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43073 (description
43074 "This package provides an implementation of chunked, compressed,
43075N-dimensional arrays for Python.")
43076 (license license:expat)))
43077
43078(define-public python-zeroc-ice
43079 (package
43080 (name "python-zeroc-ice")
43081 (version "3.7.10.1")
43082 (source (origin
43083 (method url-fetch)
43084 (uri (pypi-uri "zeroc-ice" version))
43085 (sha256
43086 (base32
43087 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43088 (build-system pyproject-build-system)
43089 (arguments
43090 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43091 ;; tag.
43092 ;;
43093 ;; See:
43094 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43095 ;; - File: <ice/refs/heads/main/python/allTests.py>
43096 (list #:tests? #f))
43097 (inputs (list openssl))
43098 (native-inputs (list python-setuptools))
43099 (home-page "https://zeroc.com")
43100 (synopsis "RPC framework")
43101 (description
43102 "Ice is a comprehensive RPC framework. Ice helps you network your
43103software by taking care of all interactions with low-level network programming
43104interfaces.")
43105 (license license:gpl2)))
43106
43107;; Package variant to build [email protected]
43108(define-public python-zeroc-ice-3.6
43109 (package
43110 (inherit python-zeroc-ice)
43111 (version "3.6.5")
43112 (source (origin
43113 (method url-fetch)
43114 (uri (pypi-uri "zeroc-ice" version))
43115 (sha256
43116 (base32
43117 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43118 (patches
43119 (search-patches
43120 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43121 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43122 (arguments
43123 (substitute-keyword-arguments arguments
43124 ((#:phases phases #~%standard-phases)
43125 #~(modify-phases #$phases
43126 (add-before 'build 'relax-gcc-14-strictness
43127 (lambda _
43128 (setenv "CFLAGS"
43129 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43130
43131(define-public python-zeroconf
43132 (package
43133 (name "python-zeroconf")
43134 (version "0.38.1")
43135 (source
43136 (origin
43137 (method git-fetch)
43138 (uri (git-reference
43139 (url "https://github.com/jstasiak/python-zeroconf")
43140 (commit version)))
43141 (file-name (git-file-name name version))
43142 (sha256
43143 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43144 (build-system pyproject-build-system)
43145 (arguments
43146 (list
43147 #:test-flags
43148 #~(list
43149 "-k" (string-append
43150 ;; XXX: Despite asyncio, this test fails.
43151 "not test_run_coro_with_timeout and not "
43152 ;; XXX: Networking isn't available.
43153 (string-join
43154 (list "test_integration_with_listener_ipv6"
43155 "test_launch_and_close_v4_v6"
43156 "test_launch_and_close_context_manager"
43157 "test_launch_and_close"
43158 "test_close_multiple_times")
43159 " and not ")))))
43160 (native-inputs
43161 (list python-pytest python-pytest-asyncio python-setuptools))
43162 (propagated-inputs
43163 (list python-ifaddr))
43164 (home-page "https://github.com/jstasiak/python-zeroconf")
43165 (synopsis "Pure Python mDNS service discovery")
43166 (description "Pure Python multicast DNS (mDNS) service discovery library
43167(Bonjour/Avahi compatible).")
43168 (license license:lgpl2.1+)))
43169
43170(define-public python-zict
43171 (package
43172 (name "python-zict")
43173 (version "3.0.0")
43174 (source
43175 (origin
43176 (method url-fetch)
43177 (uri (pypi-uri "zict" version))
43178 (sha256
43179 (base32
43180 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43181 (build-system pyproject-build-system)
43182 (arguments
43183 (list
43184 #:test-flags
43185 ;; This uses "importorskip", but it won't skip.
43186 '(list "--ignore=tests/test_lmdb.py")))
43187 (propagated-inputs
43188 (list python-heapdict))
43189 (native-inputs
43190 (list python-pytest
43191 python-pytest-asyncio
43192 python-pytest-repeat
43193 python-pytest-timeout
43194 python-setuptools
43195 python-wheel))
43196 (home-page "https://zict.readthedocs.io/en/latest/")
43197 (synopsis "Composable mutable mapping tools")
43198 (description "This package provides abstract @code{MutableMapping} classes
43199that consume and build on other @code{MutableMappings}. Several of these can
43200be composed with one another to form intuitive interfaces over complex storage
43201systems policies.")
43202 (license license:bsd-3)))
43203
43204(define-public python-zipfly
43205 (package
43206 (name "python-zipfly")
43207 (version "6.0.5")
43208 (source
43209 (origin
43210 (method url-fetch)
43211 (uri (pypi-uri "zipfly" version))
43212 (sha256
43213 (base32
43214 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43215 (build-system pyproject-build-system)
43216 (arguments
43217 (list #:test-backend #~'unittest))
43218 (native-inputs (list python-setuptools))
43219 (home-page "https://github.com/sandes/zipfly")
43220 (synopsis "Zip archive generator")
43221 (description "ZipFly is a zip archive generator. It was created to
43222generate very large zip archives for immediate sending out to clients, or
43223for writing large zip archives without memory inflation.")
43224 (license license:expat)))
43225
43226(define-public python-zipstream-new
43227 (package
43228 (name "python-zipstream-new")
43229 (version "1.1.8")
43230 (source
43231 (origin
43232 (method git-fetch) ; no tests in PyPI release
43233 (uri (git-reference
43234 (url "https://github.com/arjan-s/python-zipstream")
43235 (commit (string-append "v" version))))
43236 (file-name (git-file-name name version))
43237 (sha256
43238 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43239 (build-system pyproject-build-system)
43240 (arguments
43241 (list #:test-backend #~'unittest))
43242 (native-inputs (list python-setuptools))
43243 (home-page "https://github.com/arjan-s/python-zipstream")
43244 (synopsis "Zipfile generator that takes input files as well as streams")
43245 (description "@code{zipstream.py} is a zip archive generator based on
43246@code{zipfile.py}. It was created to generate a zip file generator for
43247streaming. This is beneficial for when you want to provide a downloadable
43248archive of a large collection of regular files, which would be infeasible
43249to generate the archive prior to downloading or of a very large file that
43250you do not want to store entirely on disk or on memory.")
43251 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43252 (license license:gpl3)))
43253
43254(define-public shrinkwrap
43255 (package
43256 (name "shrinkwrap")
43257 (version "0.1.0")
43258 (source
43259 (origin
43260 (method git-fetch)
43261 (uri (git-reference
43262 (url "https://github.com/fzakaria/shrinkwrap")
43263 (commit (string-append "v" version))))
43264 (file-name (git-file-name name version))
43265 (sha256
43266 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43267 (build-system pyproject-build-system)
43268 (native-inputs
43269 (list python-click
43270 python-poetry-core
43271 python-pypa-build
43272 python-pytest))
43273 (inputs (list python-lief python-sh))
43274 (home-page "https://github.com/fzakaria/shrinkwrap")
43275 (synopsis "Emboss needed dependencies on the top level executable")
43276 (description
43277 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43278shared objects, and lift them up to the executable referenced by absolute
43279path.")
43280 (license license:expat)))
43281
43282(define-public staticsite
43283 (package
43284 (name "staticsite")
43285 (version "2.5")
43286 (source
43287 (origin
43288 (method git-fetch)
43289 (uri (git-reference
43290 (url "https://github.com/spanezz/staticsite")
43291 (commit (string-append "v" version))))
43292 (file-name (git-file-name name version))
43293 (sha256
43294 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43295 (build-system pyproject-build-system)
43296 (arguments
43297 (list
43298 #:phases
43299 #~(modify-phases %standard-phases
43300 (add-after 'unpack 'use-themes-in-output
43301 (lambda _
43302 (substitute* "staticsite/global_settings.py"
43303 (("/usr/share/staticsite") #$output))))
43304 (add-after 'install 'install-themes
43305 (lambda _
43306 (let ((themedir (string-append #$output "/themes")))
43307 (copy-recursively "themes" themedir)))))))
43308 (native-inputs
43309 (list python-hatchling
43310 python-pytest))
43311 (inputs
43312 (list perl-image-exiftool
43313 python-dateutil
43314 python-docutils
43315 python-jinja2
43316 python-markdown
43317 python-pillow
43318 python-pytz
43319 python-pyyaml
43320 python-ruamel.yaml
43321 python-slugify
43322 python-toml
43323 tzdata-for-tests))
43324 (home-page "https://github.com/spanezz/staticsite")
43325 (synopsis "Static site generator")
43326 (description
43327 "Statistic is a static site generator based on Markdown and Jinja2.")
43328 (license (list license:gpl3+ license:expat))))
43329
43330;;;
43331;;; Avoid adding new packages to the end of this file. To reduce the chances
43332;;; of a merge conflict, place them above in alphabetic order:
43333;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43334;;;