projects/guix·blob libreoffice · refs

43417 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 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-catalogus
753 (package
754 (name "python-catalogus")
755 (version "0.1.0")
756 (source
757 (origin
758 (method git-fetch)
759 (uri (git-reference
760 (url "https://github.com/breezy-team/catalogus")
761 (commit (string-append "v" version))))
762 (file-name (git-file-name name version))
763 (sha256
764 (base32 "0l34anf0h4rcsimq78q6y1s2m91605pxwpzfzxr2vh2hl45sy4w5"))))
765 (build-system pyproject-build-system)
766 (native-inputs
767 (list python-pytest
768 python-setuptools
769 python-setuptools-scm))
770 (home-page "https://github.com/breezy-team/catalogus")
771 (synopsis "Classes to provide name-to-object registry-like support")
772 (description
773 "This package provides classes to provide name-to-object registry-like
774support.")
775 (license license:gpl2+)))
776
777(define-public python-catppuccin
778 (package
779 (name "python-catppuccin")
780 (version "2.5.0")
781 (source
782 (origin
783 (method url-fetch)
784 (uri (pypi-uri "catppuccin" version))
785 (sha256
786 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
787 (build-system pyproject-build-system)
788 (native-inputs
789 (list python-hatchling python-pytest
790 ;; These are optional dependencies but required for tests.
791 python-matplotlib python-pygments python-rich))
792 (home-page "https://github.com/catppuccin/python")
793 (synopsis "Pastel palette for Python libraries")
794 (description "Catppuccin for Python is a soothing pastel palette for Python
795libraries. It aims to be the middle ground between low and high contrast
796themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
797 (license license:expat)))
798
799(define-public python-calmjs-parse
800 (package
801 (name "python-calmjs-parse")
802 (version "1.3.3")
803 (source
804 (origin
805 (method git-fetch)
806 (uri (git-reference
807 (url "https://github.com/calmjs/calmjs.parse/")
808 (commit version)))
809 (file-name (git-file-name name version))
810 (sha256
811 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
812 (build-system pyproject-build-system)
813 ;; tests: 797 passed, 1 warning
814 (native-inputs (list python-pytest python-setuptools))
815 (propagated-inputs (list python-ply))
816 (home-page "https://github.com/calmjs/calmjs.parse/")
817 (synopsis "Parsers for ECMA standards")
818 (description
819 "@code{Calmjs-parse} is a collection of helper libraries for
820understanding ECMA script.")
821 (license license:expat)))
822
823(define-public python-chameleon
824 (package
825 (name "python-chameleon")
826 (version "4.6.0")
827 (source
828 (origin
829 (method url-fetch)
830 (uri (pypi-uri "Chameleon" version))
831 (sha256
832 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
833 (build-system pyproject-build-system)
834 (native-inputs
835 (list python-pytest
836 python-setuptools))
837 (home-page "https://chameleon.readthedocs.io")
838 (synopsis "Fast HTML/XML Template Compiler")
839 (description
840 "Chameleon is an HTML/XML template engine for Python. It uses the page
841templates language.")
842 ;; Project is duo licensed, see: LICENSE.txt.
843 (license (list license:zpl2.1
844 license:psfl))))
845
846(define-public python-click-extra
847 (package
848 (name "python-click-extra")
849 (version "8.1.4")
850 (source
851 (origin
852 (method git-fetch)
853 (uri (git-reference
854 (url "https://github.com/kdeldycke/click-extra")
855 (commit (string-append "v" version))))
856 (file-name (git-file-name name version))
857 (sha256
858 (base32 "1mglhfrmwq616irga69vv206bf3d20kp1jm8fvhgcidj53cxygj7"))))
859 (build-system pyproject-build-system)
860 ;; Upstream uses uv-build which is not yet available in Guix.
861 (arguments
862 (list
863 #:build-backend "setuptools.build_meta"
864 #:test-flags
865 ;; Skip the network tests.
866 #~(list "-m" "not network")
867 #:phases
868 ;; The setuptools backend used here (in place of upstream's
869 ;; uv-build) installs only ``*.py``; declare the data files loaded
870 ;; at import time as package data.
871 #~(modify-phases %standard-phases
872 (add-after 'unpack 'declare-package-data
873 (lambda _
874 (substitute* "pyproject.toml"
875 (("^\\[build-system\\]")
876 (string-append
877 "[tool.setuptools.package-data]\n"
878 "click_extra = [\"*.toml\", \"py.typed\"]\n"
879 "\n[build-system]"))))))))
880
881 (native-inputs
882 ;; Optional libraries imported at module level by the test suite.
883 (list python-hjson
884 python-jsonschema
885 python-pygments
886 python-pytest
887 python-pytest-httpserver
888 python-pyyaml
889 python-requests
890 python-setuptools
891 python-tomlkit
892 python-xmltodict))
893 (propagated-inputs
894 (list python-boltons
895 python-click
896 python-cloup
897 python-deepmerge
898 python-extra-platforms
899 python-tabulate
900 python-wcmatch
901 python-wcwidth))
902 (home-page "https://kdeldycke.github.io/click-extra/")
903 (synopsis "Drop-in replacement for Click to build colorful CLIs")
904 (description
905 "Click Extra extends the Click framework with colored help screens,
906configuration file support, table rendering, and platform detection. It
907serves as a drop-in replacement adding features for user-friendly command-line
908interfaces.")
909 (license license:gpl2+)))
910
911(define-public python-conda-content-trust
912 (package
913 (name "python-conda-content-trust")
914 (version "0.2.0")
915 (source
916 (origin
917 (method git-fetch)
918 (uri (git-reference
919 (url "https://github.com/conda/conda-content-trust")
920 (commit version)))
921 (file-name (git-file-name name version))
922 (sha256
923 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
924 (build-system pyproject-build-system)
925 (arguments
926 (list
927 #:test-flags
928 ;; XXX: Not packaged yet:
929 ;; <https://github.com/secure-systems-lab/securesystemslib>.
930 ;;
931 ;; ImportError: The securesystemslib library is required, which appears
932 ;; to be unavailable.
933 #~(list #$@(map (lambda (test) (string-append "--deselect="
934 "tests/test_root.py::"
935 test))
936 (list "test_sign_root_metadata_dict_via_gpg"
937 "test_sign_root_metadata_via_gpg"
938 "test_gpg_pubkey_in_ssl_format")))))
939 (native-inputs
940 (list python-hatch-vcs
941 python-hatchling
942 python-pytest))
943 (propagated-inputs
944 (list python-cryptography))
945 (home-page "https://github.com/conda/conda-content-trust")
946 (synopsis "Signing and verification tools for Conda")
947 (description
948 "This package implements a functionalit of signing and verification tools
949for Conda. @url{https://theupdateframework.io/, Based on The Update
950Framework (TUF)}, conda-content-trust is intended to ensure that when users in
951the conda ecosystem obtain a package or data about that package, they can know
952whether or not it is trustworthy (e.g. originally comes from a reliable source
953and has not been tampered with). A basic library and basic CLI are included
954to provide signing, verification, and trust delegation functionality.")
955 (license license:bsd-3)))
956
957(define-public python-conda-inject
958 (package
959 (name "python-conda-inject")
960 (version "1.3.2")
961 (source
962 (origin
963 (method git-fetch)
964 (uri (git-reference
965 (url "https://github.com/koesterlab/conda-inject")
966 (commit (string-append "v" version))))
967 (file-name (git-file-name name version))
968 (sha256
969 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
970 (build-system pyproject-build-system)
971 (arguments
972 (list #:tests? #f)) ; tests require setting up Conda
973 (native-inputs
974 (list python-poetry-core))
975 (propagated-inputs
976 (list python-pyyaml))
977 (home-page "https://github.com/koesterlab/conda-inject")
978 (synopsis "Inject a conda environment into the current python environment")
979 (description
980 "This package provides helper functions for injecting a conda
981environment into the current python environment (by modifying @code{sys.path},
982without actually changing the current python environment).")
983 (license license:expat)))
984
985(define-public python-copydetect
986 (package
987 (name "python-copydetect")
988 (version "0.5.0")
989 (source
990 (origin
991 (method git-fetch)
992 (uri (git-reference
993 (url "https://github.com/blingenf/copydetect")
994 (commit version)))
995 (sha256
996 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
997 (build-system pyproject-build-system)
998 (propagated-inputs (list python-jinja2
999 python-matplotlib
1000 python-numpy
1001 python-pygments
1002 python-tqdm))
1003 (native-inputs (list python-setuptools
1004 python-pytest
1005 python-wheel))
1006 (home-page "https://github.com/blingenf/copydetect")
1007 (synopsis "Code plagiarism detection tool")
1008 (description "Copydetect is a tool to detect likely instances of plagiarism
1009based on the winnowing algorithm. It takes a list of directories as input and
1010generates an HTML report displaying copied slices as output.")
1011 (license license:expat)))
1012
1013(define-public python-couleur
1014 (package
1015 (name "python-couleur")
1016 (version "0.7.4")
1017 (source
1018 (origin
1019 (method url-fetch)
1020 (uri (pypi-uri "couleur" version))
1021 (sha256
1022 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
1023 (build-system pyproject-build-system)
1024 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
1025 (native-inputs
1026 (list python-setuptools
1027 python-wheel))
1028 (home-page "https://github.com/gabrielfalcao/couleur")
1029 (synopsis "ANSI terminal tool for Python")
1030 (description
1031 "This package provides an ANSI terminal tool for Python, colored shell
1032and other handy fancy features.")
1033 (license license:lgpl3+)))
1034
1035(define-public python-crc
1036 (package
1037 (name "python-crc")
1038 (version "7.1.0")
1039 (source
1040 (origin
1041 (method git-fetch)
1042 (uri (git-reference
1043 (url "https://github.com/Nicoretti/crc/")
1044 (commit version)))
1045 (file-name (git-file-name name version))
1046 (sha256
1047 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
1048 (build-system pyproject-build-system)
1049 (native-inputs
1050 (list python-poetry-core
1051 python-pytest
1052 python-wheel))
1053 (home-page "https://nicoretti.github.io/crc/")
1054 (synopsis "Pure Python CRC library")
1055 (description
1056 "This library computes and verifies @acronym{Cyclic Redundancy Check,
1057CRC} checksums, using predefined and custom CRC configurations.
1058
1059Configurations:
1060@table @asis
1061@item CRC8
1062 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
1063@item CRC16
1064 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
1065@item CRC32
1066 CRC32 AUTOSAR BZIP2 POSIX
1067@item CRC64
1068 CRC64
1069@end table")
1070 (license license:bsd-2)))
1071
1072(define-public python-cron-converter
1073 (package
1074 (name "python-cron-converter")
1075 (version "1.3.1")
1076 (source
1077 (origin
1078 (method git-fetch)
1079 (uri (git-reference
1080 (url "https://github.com/Sonic0/cron-converter")
1081 (commit (string-append "v" version))))
1082 (file-name (git-file-name name version))
1083 (sha256
1084 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
1085 (build-system pyproject-build-system)
1086 (arguments
1087 (list #:test-backend #~'unittest
1088 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
1089 (native-inputs
1090 (list python-dateutil
1091 python-setuptools))
1092 (propagated-inputs
1093 (list python-dateutil))
1094 (home-page "https://github.com/Sonic0/cron-converter")
1095 (synopsis "Cron string parser and scheduler for Python")
1096 (description
1097 "Cron-converter provides a Cron string parser (from string/lists to
1098string/lists) and iteration for the datetime object with a cron like format.")
1099 (license license:expat)))
1100
1101(define-public python-curtsies
1102 (package
1103 (name "python-curtsies")
1104 (version "0.4.3")
1105 (source
1106 (origin
1107 (method url-fetch)
1108 (uri (pypi-uri "curtsies" version))
1109 (sha256
1110 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
1111 (build-system pyproject-build-system)
1112 (native-inputs
1113 (list python-pyte
1114 python-pytest
1115 python-setuptools
1116 python-wheel))
1117 (propagated-inputs
1118 (list python-blessed
1119 python-cwcwidth))
1120 (home-page "https://github.com/bpython/curtsies")
1121 (synopsis "Library for curses-like terminal interaction with colored strings")
1122 (description
1123 "Curtsies is a Python library for interacting with the terminal. It
1124features string-like objects which carry formatting information, per-line
1125fullscreen terminal rendering, and keyboard input event reporting.")
1126 (license license:expat)))
1127
1128(define-public python-customtkinter
1129 (package
1130 (name "python-customtkinter")
1131 (version "5.2.2")
1132 (source
1133 (origin
1134 (method git-fetch)
1135 (uri (git-reference
1136 (url "https://github.com/TomSchimansky/CustomTkinter")
1137 (commit (string-append "v" version))))
1138 (file-name (git-file-name name version))
1139 (sha256
1140 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
1141 (build-system pyproject-build-system)
1142 (arguments
1143 (list
1144 #:phases
1145 #~(modify-phases %standard-phases
1146 (add-before 'check 'start-xorg-server
1147 (lambda _
1148 (setenv "HOME" "/tmp")
1149 ;; The test suite requires a running X server.
1150 (system "Xvfb :99 -screen 0 1024x768x24 &")
1151 (setenv "DISPLAY" ":99.0")))
1152 (replace 'check
1153 (lambda* (#:key tests? #:allow-other-keys)
1154 (when tests?
1155 (with-directory-excursion "test"
1156 (invoke "python" "unit_tests/test_all.py"))))))))
1157 (propagated-inputs
1158 (list (list python "tk")
1159 python-darkdetect
1160 python-packaging))
1161 (native-inputs
1162 (list python-setuptools
1163 xorg-server-for-tests))
1164 (home-page "https://customtkinter.tomschimansky.com")
1165 (synopsis
1166 "Python @acronym{User Interface, UI} library based on Tkinter")
1167 (description
1168 "CustomTkinter provides fully customizable widgets, created and used
1169like normal Tkinter widgets, which can also be used in combination with normal
1170Tkinter elements.")
1171 (license license:expat)))
1172
1173(define-public python-cyclopts
1174 (package
1175 (name "python-cyclopts")
1176 (version "4.14.0")
1177 (source
1178 (origin
1179 (method git-fetch)
1180 (uri (git-reference
1181 (url "https://github.com/BrianPugh/cyclopts")
1182 (commit (string-append "v" version))))
1183 (file-name (git-file-name name version))
1184 (sha256
1185 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1186 (build-system pyproject-build-system)
1187 (arguments
1188 (list
1189 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1190 #:test-flags
1191 #~(list #$@(map (lambda (test) (string-append "--deselect="
1192 "tests/completion/"
1193 "test_bash.py::"
1194 test))
1195 (list "test_list_path_multi_positional_default_case"
1196 "test_eq_form_path_completion"
1197 "test_bash_path_completion_reflects_caller_cwd"))
1198 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1199 (native-inputs
1200 (list python-docutils
1201 python-hatch-vcs
1202 python-hatchling
1203 python-mkdocs
1204 python-pexpect
1205 python-pydantic
1206 python-pytest
1207 python-pytest-mock
1208 python-pyyaml
1209 python-sphinx
1210 python-syrupy
1211 python-toml
1212 python-trio))
1213 (propagated-inputs
1214 (list python-attrs
1215 python-docstring-parser
1216 python-rich
1217 python-rich-rst
1218 python-tomli
1219 python-typing-extensions))
1220 (home-page "https://github.com/BrianPugh/cyclopts")
1221 (synopsis "Intuitive, easy CLIs based on type hints")
1222 (description
1223 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1224that aims to provide an intuitive & efficient developer experience.")
1225 (license license:asl2.0)))
1226
1227(define-public python-darkdetect
1228 (package
1229 (name "python-darkdetect")
1230 (version "0.8.0")
1231 (source
1232 (origin
1233 (method url-fetch)
1234 (uri (pypi-uri "darkdetect" version))
1235 (sha256
1236 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1237 (build-system pyproject-build-system)
1238 (arguments
1239 (list
1240 #:tests? #f)) ;no tests in PyPI or Git.
1241 (native-inputs (list python-setuptools))
1242 (home-page "https://github.com/albertosottile/darkdetect")
1243 (synopsis "Detect OS dark mode from Python")
1244 (description
1245 "This package allows to detect if the user is using Dark Mode.")
1246 (license license:bsd-3)))
1247
1248(define-public python-decopatch
1249 (package
1250 (name "python-decopatch")
1251 (version "1.4.10")
1252 (source
1253 (origin
1254 (method url-fetch)
1255 (uri (pypi-uri "decopatch" version))
1256 (sha256
1257 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1258 (build-system pyproject-build-system)
1259 (arguments
1260 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1261 (native-inputs
1262 (list python-setuptools
1263 python-setuptools-scm))
1264 (propagated-inputs
1265 (list python-makefun))
1266 (home-page "https://github.com/smarie/python-decopatch")
1267 (synopsis "Create decorators easily in Python")
1268 (description
1269 "This package provide implements a functionality to simplify writing
1270decorators in Python.")
1271 (license license:bsd-3)))
1272
1273(define-public python-discovery
1274 (package
1275 (name "python-discovery")
1276 (version "1.2.1")
1277 (source
1278 (origin
1279 (method git-fetch)
1280 (uri (git-reference
1281 (url "https://github.com/tox-dev/python-discovery")
1282 (commit version)))
1283 (file-name (git-file-name name version))
1284 (sha256
1285 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1286 (build-system pyproject-build-system)
1287 (arguments
1288 (list
1289 #:test-flags
1290 ;; assert []
1291 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1292 (native-inputs
1293 (list python-pytest
1294 python-pytest-mock
1295 python-hatchling
1296 python-hatch-vcs))
1297 (propagated-inputs
1298 (list python-filelock
1299 python-platformdirs))
1300 (home-page "https://github.com/tox-dev/python-discovery")
1301 (synopsis "Python interpreter discovery")
1302 (description
1303 "@code{python-discovery} is a library for discovering Python interpreters
1304installed on the current machine which may have multiple Python versions from
1305system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1306Windows registry (PEP 514). This library finds the right one.")
1307 (license license:expat)))
1308
1309(define-public python-distance
1310 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1311 (revision "0"))
1312 (package
1313 (name "python-distance")
1314 (version (git-version "0.1.3" revision commit))
1315 (source
1316 (origin
1317 (method git-fetch)
1318 (uri (git-reference
1319 (url "https://github.com/doukremt/distance")
1320 (commit commit)))
1321 (file-name (git-file-name name version))
1322 (sha256
1323 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1324 (build-system pyproject-build-system)
1325 (arguments
1326 (list #:test-backend #~'custom
1327 #:test-flags #~(list "tests/tests.py")))
1328 (native-inputs (list python-setuptools))
1329 (home-page "https://github.com/doukremt/distance")
1330 (synopsis "Utilities for comparing sequences")
1331 (description
1332 "This package provides helpers for computing similarities between
1333arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1334Sorensen distance, plus some bonuses. All distance computations are
1335implemented in pure Python, and most of them are also implemented in C.")
1336 (license license:gpl2+))))
1337
1338(define-public python-docopt-ng
1339 (package
1340 (name "python-docopt-ng")
1341 (version "0.9.0")
1342 (source
1343 (origin
1344 (method git-fetch)
1345 (uri (git-reference
1346 (url "https://github.com/jazzband/docopt-ng")
1347 (commit version)))
1348 (file-name (git-file-name name version))
1349 (sha256
1350 (base32 "1vdh1amh8jkhll0ym1r72q1ddg8ds3pyx37kyw9abg1w3abh6ih8"))))
1351 (build-system pyproject-build-system)
1352 (native-inputs
1353 (list python-pdm-backend
1354 python-pytest-8))
1355 (home-page "https://github.com/jazzband/docopt-ng")
1356 (synopsis "Humane command line arguments parser")
1357 (description
1358 "This package provides Jazzband-maintained fork of docopt, the humane
1359command line arguments parser.")
1360 (license license:expat)))
1361
1362(define-public python-doi
1363 (package
1364 (name "python-doi")
1365 (version "0.2.0")
1366 (source
1367 (origin
1368 (method url-fetch)
1369 (uri (pypi-uri "python-doi" version))
1370 (sha256
1371 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1372 (build-system pyproject-build-system)
1373 (arguments
1374 (list #:test-flags
1375 #~(list "-vv"
1376 (string-append "-k not (test_validate_doi "
1377 "or test_get_real_url_from_doi)"))))
1378 (native-inputs
1379 (list python-pytest
1380 python-pytest-xdist
1381 python-setuptools
1382 python-sphinx
1383 python-sphinx-autobuild
1384 python-sphinx-rtd-theme))
1385 (home-page "https://github.com/papis/python-doi")
1386 (synopsis "Python package to work with Document Object Identifier (doi)")
1387 (description
1388 "Python package to work with Document Object Identifier (doi).")
1389 (license license:gpl3)))
1390
1391(define-public python-domdf-python-tools
1392 (package
1393 (name "python-domdf-python-tools")
1394 (version "3.10.0")
1395 (source
1396 (origin
1397 (method url-fetch)
1398 (uri (pypi-uri "domdf_python_tools" version))
1399 (sha256
1400 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1401 (build-system pyproject-build-system)
1402 (native-inputs (list python-hatch-requirements-txt))
1403 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1404 (propagated-inputs
1405 (list python-natsort
1406 python-typing-extensions))
1407 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1408 (synopsis "Helpful functions for Python")
1409 (description
1410 "This package provide helpful functions for Python's testing and
1411packaging tasks.")
1412 (license license:expat)))
1413
1414(define-public python-donfig
1415 (package
1416 (name "python-donfig")
1417 (version "0.8.1.post1")
1418 (source
1419 (origin
1420 (method git-fetch)
1421 (uri (git-reference
1422 (url "https://github.com/pytroll/donfig")
1423 (commit (string-append "v" version))))
1424 (file-name (git-file-name name version))
1425 (sha256
1426 (base32 "0hp6v9lh4gaym48ljvpb00cgcwssj306ypyszha2rlwb7mkknmj6"))))
1427 (build-system pyproject-build-system)
1428 (native-inputs
1429 (list python-cloudpickle
1430 python-pytest
1431 python-setuptools
1432 python-versioneer))
1433 (propagated-inputs
1434 (list python-pyyaml))
1435 (home-page "https://github.com/pytroll/donfig")
1436 (synopsis "Python package for configuring a python package")
1437 (description
1438 "Donfig is a Python library meant to make configuration easier for other
1439python packages. Donfig can be configured programmatically, by environment
1440variables, or from YAML files in standard locations. The below examples show
1441the basics of using donfig.")
1442 (license license:expat)))
1443
1444(define-public python-duet
1445 (package
1446 (name "python-duet")
1447 (version "0.2.9")
1448 (source
1449 (origin
1450 (method git-fetch)
1451 (uri (git-reference
1452 (url "https://github.com/google/duet")
1453 (commit (string-append "v" version))))
1454 (file-name (git-file-name name version))
1455 (sha256
1456 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1457 (build-system pyproject-build-system)
1458 (native-inputs (list python-pytest python-setuptools))
1459 (home-page "https://github.com/google/duet")
1460 (synopsis "Simple future-based async library for Python")
1461 (description
1462 "This package provides a simple @code{Future}-based async library for
1463Python. Duet uses a structured concurrency approach to async programming,
1464relying on the @code{Future} interface for parallelism. Duet also provides
1465a way to run async/await coroutines around those @code{Future}s. Unlike most
1466async libraries, duet is re-entrant.")
1467 (license license:asl2.0)))
1468
1469(define-public python-envs
1470 (package
1471 (name "python-envs")
1472 (version "1.4")
1473 (source
1474 (origin
1475 (method url-fetch)
1476 (uri (pypi-uri "envs" version))
1477 (sha256
1478 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1479 (build-system pyproject-build-system)
1480 (arguments
1481 (list #:test-backend #~'unittest))
1482 (native-inputs
1483 (list python-packaging python-poetry-core))
1484 (propagated-inputs
1485 (list python-click python-jinja2 python-terminaltables))
1486 (home-page "https://github.com/capless/envs")
1487 (synopsis "Easy access of environment variables from Python")
1488 (description
1489 "This package implements a functionality to access of environment
1490variables from Python with support for strings, booleans, list, tuples, and
1491dicts.")
1492 (license license:asl2.0)))
1493
1494(define-public python-exitcode
1495 (package
1496 (name "python-exitcode")
1497 (version "0.1.0")
1498 (source
1499 (origin
1500 (method url-fetch)
1501 (uri (pypi-uri "exitcode" version))
1502 (sha256
1503 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1504 (build-system pyproject-build-system)
1505 (arguments
1506 (list #:tests? #f)) ; no tests in PyPI or Git
1507 (native-inputs
1508 (list python-poetry-core
1509 python-setuptools))
1510 (home-page "https://github.com/rumpelsepp/exitcode")
1511 (synopsis "Preferred system exit codes as defined by sysexits.h")
1512 (description
1513 "This package implements a preferred system exit codes as defined by
1514@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1515Rust's @url{https://docs.rs/exitcode, exitcode}.")
1516 (license license:expat)))
1517
1518(define-public python-exrex
1519 (package
1520 (name "python-exrex")
1521 (version "0.12.0")
1522 (source
1523 (origin
1524 (method git-fetch)
1525 (uri (git-reference
1526 (url "https://github.com/asciimoo/exrex")
1527 (commit (string-append "v" version))))
1528 (file-name (git-file-name name version))
1529 (sha256
1530 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1531 (build-system pyproject-build-system)
1532 (arguments (list #:test-backend #~'custom
1533 #:test-flags #~'("tests.py")))
1534 (native-inputs (list python-setuptools))
1535 (home-page "https://github.com/asciimoo/exrex")
1536 (synopsis "Irregular methods for regular expressions")
1537 (description
1538 "Exrex is a command line tool and Python module that generates all,
1539or random, matching strings to a given regular expression.")
1540 (license license:agpl3+)))
1541
1542(define-public python-extra-platforms
1543 (package
1544 (name "python-extra-platforms")
1545 (version "13.0.1")
1546 (source
1547 (origin
1548 (method git-fetch)
1549 (uri (git-reference
1550 (url "https://github.com/kdeldycke/extra-platforms")
1551 (commit (string-append "v" version))))
1552 (file-name (git-file-name name version))
1553 (sha256
1554 (base32 "0mqyz6m1sdy6y7iz9yf63hljpbjvzcw16vda394b0w2pb41s5sv1"))))
1555 (build-system pyproject-build-system)
1556 (arguments
1557 (list
1558 #:build-backend "setuptools.build_meta"
1559 ;; Skip network tests and one that shells out to ``uv``.
1560 #:test-flags #~(list "-m" "not network"
1561 "--ignore=tests/test_sphinx_crossrefs.py")))
1562 (native-inputs
1563 (list python-pytest
1564 python-requests
1565 python-setuptools))
1566 (home-page "https://kdeldycke.github.io/extra-platforms/")
1567 (synopsis "Detection of architectures, platforms, and OS families")
1568 (description
1569 "Extra Platforms detects and identifies operating systems, platforms,
1570architectures, and OS families. It groups them by family for conditional
1571logic in cross-platform applications.")
1572 (license license:asl2.0)))
1573
1574(define-public python-ezdxf
1575 (package
1576 (name "python-ezdxf")
1577 (version "1.3.5")
1578 (source
1579 (origin
1580 (method git-fetch)
1581 (uri (git-reference
1582 (url "https://github.com/mozman/ezdxf")
1583 (commit (string-append "v" version))))
1584 (sha256
1585 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1586 (build-system pyproject-build-system)
1587 (native-inputs (list python-cython python-pillow python-pytest
1588 python-setuptools unzip))
1589 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1590 python-typing-extensions))
1591 (home-page "https://ezdxf.mozman.at/")
1592 (synopsis "Python library to read and write DXF drawings")
1593 (description "ezdxf is a Python package to create new DXF files and
1594read/modify/write existing DXF files.")
1595 (license license:expat)))
1596
1597(define-public python-fastnumbers
1598 (package
1599 (name "python-fastnumbers")
1600 (version "5.1.1")
1601 (source
1602 (origin
1603 (method url-fetch)
1604 (uri (pypi-uri "fastnumbers" version))
1605 (sha256
1606 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1607 (build-system pyproject-build-system)
1608 (native-inputs
1609 (list python-numpy
1610 python-pytest
1611 python-setuptools
1612 python-setuptools-scm))
1613 (home-page "https://github.com/SethMMorton/fastnumbers")
1614 (synopsis "Super-fast and clean conversions to numbers")
1615 (description
1616 "This package provides provides drop-in replacements for the Python
1617built-in @code{int} and @code{float} that are on par or faster with the Python
1618equivalents.")
1619 (license license:expat)))
1620
1621(define-public python-findpython
1622 (package
1623 (name "python-findpython")
1624 (version "0.7.0")
1625 (source
1626 (origin
1627 (method url-fetch)
1628 (uri (pypi-uri "findpython" version))
1629 (sha256
1630 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1631 (build-system pyproject-build-system)
1632 (native-inputs
1633 (list python-pdm-backend
1634 python-pytest))
1635 (propagated-inputs
1636 (list python-packaging
1637 python-platformdirs))
1638 (home-page "https://github.com/frostming/findpython")
1639 (synopsis "Find Python versions the system")
1640 (description
1641 "This package provides a utility to find Python versions on the current
1642system.")
1643 (license license:expat)))
1644
1645(define-public python-flexcache
1646 (package
1647 (name "python-flexcache")
1648 (version "0.3")
1649 (source
1650 (origin
1651 (method url-fetch)
1652 (uri (pypi-uri "flexcache" version))
1653 (sha256
1654 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1655 (build-system pyproject-build-system)
1656 (native-inputs
1657 (list python-pytest
1658 python-pytest-mpl
1659 python-pytest-subtests
1660 python-setuptools
1661 python-setuptools-scm
1662 python-wheel))
1663 (propagated-inputs
1664 (list python-typing-extensions))
1665 (home-page "https://github.com/hgrecco/flexcache")
1666 (synopsis "Caching transformed versions of a source object")
1667 (description
1668 "This package implements a functionality to cache on disk the result of
1669expensive calculations. It was started as part of
1670@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1671 (license license:bsd-3)))
1672
1673(define-public python-flexparser
1674 (package
1675 (name "python-flexparser")
1676 (version "0.4")
1677 (source
1678 (origin
1679 (method url-fetch)
1680 (uri (pypi-uri "flexparser" version))
1681 (sha256
1682 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1683 (build-system pyproject-build-system)
1684 (native-inputs
1685 (list python-pytest
1686 python-pytest-mpl
1687 python-pytest-subtests
1688 python-setuptools
1689 python-setuptools-scm
1690 python-wheel))
1691 (propagated-inputs
1692 (list python-typing-extensions))
1693 (home-page "https://github.com/hgrecco/flexparser")
1694 (synopsis "Parsing made fun ... using typing")
1695 (description "This project provides a typed parser. It was started as
1696part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1697package. ")
1698 (license license:bsd-3)))
1699
1700(define-public python-fortranformat
1701 (package
1702 (name "python-fortranformat")
1703 (version "2.0.3")
1704 (source
1705 (origin
1706 (method git-fetch)
1707 (uri (git-reference
1708 (url "https://github.com/brendanarnold/py-fortranformat")
1709 (commit (string-append "v" version))))
1710 (file-name (git-file-name name version))
1711 (sha256
1712 (base32 "0k4lpj72a6zy1m5855w6b127q8h20c1xfr0x3gasqbkqqz65kli6"))))
1713 (build-system pyproject-build-system)
1714 (native-inputs
1715 (list python-poetry-core
1716 python-pytest))
1717 (home-page "https://github.com/brendanarnold/py-fortranformat")
1718 (synopsis "FORTRAN format interpreter for Python")
1719 (description
1720 "This package mimics FORTRAN textual IO in Python - generates text from a
1721Python list of variables or will read a line of text into Python variables
1722according to the FORTRAN format statement passed.")
1723 (license license:expat)))
1724
1725(define-public python-gest-api
1726 (package
1727 (name "python-gest-api")
1728 (version "0.1")
1729 (source
1730 (origin
1731 (method url-fetch)
1732 (uri (pypi-uri "gest_api" version))
1733 (sha256
1734 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1735 (build-system pyproject-build-system)
1736 (native-inputs
1737 (list python-pytest
1738 python-setuptools))
1739 (propagated-inputs
1740 (list python-pydantic))
1741 (home-page "https://github.com/campa-consortium/gest-api")
1742 (synopsis "Standardization for generators")
1743 (description
1744 "This package provides a standard for generating test points and
1745exchanging variables, objectives, and constraints in optimization problems.
1746
1747It is an effort to standardize the interface of the generators in optimization
1748libraries such as:
1749@itemize
1750@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1751high-level optimization in Python
1752@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1753scale, powered by @code{libEnsemble}
1754@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1755toolkit for coordinating asynchronous and dynamic ensembles of calculations
1756@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1757and execution of large, black-box optimization problems
1758@end itemize")
1759 (license license:bsd-3)))
1760
1761(define-public python-grapheme
1762 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1763 ;; branch.
1764 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1765 (revision "0"))
1766 (package
1767 (name "python-grapheme")
1768 (version (git-version "0.6.0" revision commit))
1769 (source
1770 (origin
1771 (method git-fetch)
1772 (uri (git-reference
1773 (url "https://github.com/alvinlindstam/grapheme")
1774 (commit commit)))
1775 (file-name (git-file-name name version))
1776 (sha256
1777 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1778 (build-system pyproject-build-system)
1779 (native-inputs
1780 (list python-pytest
1781 python-setuptools))
1782 (home-page "https://github.com/alvinlindstam/grapheme")
1783 (synopsis "Unicode grapheme helpers")
1784 (description
1785 "This package provides a functionality for working with user perceived
1786characters. More specifically, string manipulation and calculation functions
1787for working with grapheme cluster groups (graphemes) as defined by the
1788@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1789 (license license:expat))))
1790
1791(define-public python-halo
1792 (package
1793 (name "python-halo")
1794 (version "0.0.31")
1795 (source
1796 (origin
1797 (method url-fetch)
1798 (uri (pypi-uri "halo" version))
1799 (sha256
1800 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1801 (build-system pyproject-build-system)
1802 (arguments
1803 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1804 (native-inputs
1805 (list python-setuptools))
1806 (propagated-inputs
1807 (list python-colorama
1808 python-log-symbols
1809 python-six
1810 python-spinners
1811 python-termcolor))
1812 (home-page "https://github.com/manrajgrover/halo")
1813 (synopsis "Python library to display graphical spinners in the terminal")
1814 (description
1815 "Halo is a Python library to display graphical spinners in the terminal.
1816It also supports IPython/Jupyter.")
1817 (license license:expat)))
1818
1819(define-public python-hatch-argparse-manpage
1820 (package
1821 (name "python-hatch-argparse-manpage")
1822 (version "1.0.0")
1823 (source
1824 (origin
1825 (method git-fetch)
1826 (uri (git-reference
1827 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1828 (commit (string-append "v" version))))
1829 (file-name (git-file-name name version))
1830 (sha256
1831 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
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-argparse-manpage python-rich))
1836 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1837 (synopsis "Hatch build hook plugin to generate manual pages")
1838 (description
1839 "This package provides a build hook plugin for Hatch to automatically
1840 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1841by Pavel Raiskup.")
1842 (license license:gpl3+)))
1843
1844(define-public python-hatch-gettext
1845 (package
1846 (name "python-hatch-gettext")
1847 (version "1.1.0")
1848 (source
1849 (origin
1850 (method git-fetch)
1851 (uri (git-reference
1852 (url "https://github.com/damonlynch/hatch-gettext")
1853 (commit (string-append "v" version))))
1854 (file-name (git-file-name name version))
1855 (sha256
1856 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1857 (build-system pyproject-build-system)
1858 (arguments (list #:tests? #f)) ; No tests upstream.
1859 (native-inputs (list python-hatchling))
1860 (propagated-inputs (list python-rich))
1861 (home-page "https://github.com/damonlynch/hatch-gettext")
1862 (synopsis "Hatch build hook plugin for GNU gettext")
1863 (description
1864 "This package provides a build hook plugin for Hatch that compiles
1865 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1866 (license license:gpl3+)))
1867
1868(define-public python-hatch-nodejs-version
1869 (package
1870 (name "python-hatch-nodejs-version")
1871 (version "0.4.0")
1872 (source
1873 (origin
1874 (method git-fetch)
1875 (uri (git-reference
1876 (url "https://github.com/agoose77/hatch-nodejs-version")
1877 (commit (string-append "v" version))))
1878 (file-name (git-file-name name version))
1879 (sha256
1880 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
1881 (build-system pyproject-build-system)
1882 (propagated-inputs (list python-hatchling))
1883 (native-inputs (list python-hatchling python-pytest))
1884 (home-page "https://github.com/agoose77/hatch-nodejs-version")
1885 (synopsis "Hatch plugin for versioning from a package.json file")
1886 (description "This package provides a hatch plugin for fetching a version
1887from a @code{package.json} file.")
1888 (license license:expat)))
1889
1890(define-public python-hatch-regex-commit
1891 (package
1892 (name "python-hatch-regex-commit")
1893 (version "0.0.4")
1894 (source
1895 (origin
1896 (method git-fetch)
1897 (uri (git-reference
1898 (url "https://github.com/frankie567/hatch-regex-commit")
1899 (commit (string-append "v" version))))
1900 (file-name (git-file-name name version))
1901 (sha256
1902 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
1903 (build-system pyproject-build-system)
1904 (arguments (list #:tests? #f)) ;test directory is empty
1905 (propagated-inputs (list python-hatchling))
1906 (native-inputs (list python-hatchling))
1907 (home-page "https://github.com/frankie567/hatch-regex-commit")
1908 (synopsis "Hatch plugin to create a commit and tag when bumping version")
1909 (description
1910 "This provides a plugin for Hatch that automatically creates a Git commit
1911and tag after version bumping.")
1912 (license license:expat)))
1913
1914;; TODO: Move to ci or task-runners, see:
1915;; <https://codeberg.org/guix/guix/issues/3096>.
1916(define-public python-huey
1917 (package
1918 (name "python-huey")
1919 (version "2.5.3")
1920 (source
1921 (origin
1922 (method git-fetch)
1923 (uri (git-reference
1924 (url "https://github.com/coleifer/huey")
1925 (commit version)))
1926 (file-name (git-file-name name version))
1927 (sha256
1928 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1929 (build-system pyproject-build-system)
1930 (arguments
1931 (list
1932 #:phases
1933 #~(modify-phases %standard-phases
1934 (add-after 'unpack 'remove-which
1935 (lambda _
1936 (substitute* "huey/tests/test_kt_huey.py"
1937 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1938 "has_ktserver = False"))))
1939 (replace 'check
1940 (lambda* (#:key tests? #:allow-other-keys)
1941 (when tests?
1942 (spawn "redis-server" '("redis-server"))
1943 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1944 (native-inputs (list python-setuptools redis tzdata-for-tests))
1945 (propagated-inputs (list python-redis))
1946 (home-page "https://huey.readthedocs.io")
1947 (synopsis "Lightweight task queue for Python")
1948 (description
1949 "Huey is a lightweight task queue for Python applications. Huey
1950supports:
1951@itemize
1952@item Redis, SQLite, file-system, or in-memory storage
1953@item multi-process, multi-thread or greenlet task execution models
1954@item scheduling tasks to execute at a given time, or after a given delay
1955@item scheduling recurring tasks, like a crontab
1956@item automatically retrying tasks that fail
1957@item task prioritization
1958@item task result storage
1959@item task expiration
1960@item task locking
1961@item task pipelines and chains
1962@end itemize")
1963 (license license:expat)))
1964
1965(define-public python-id
1966 (package
1967 (name "python-id")
1968 (version "1.5.0")
1969 (source
1970 (origin
1971 (method url-fetch)
1972 (uri (pypi-uri "id" version))
1973 (sha256
1974 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1975 (build-system pyproject-build-system)
1976 (native-inputs
1977 (list python-flit-core
1978 python-pretend
1979 python-pytest))
1980 (propagated-inputs
1981 (list python-requests))
1982 (home-page "https://github.com/di/id")
1983 (synopsis "Tool for generating OIDC identities")
1984 (description
1985 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1986identities.")
1987 (license license:asl2.0)))
1988
1989(define-public python-iniparse
1990 (package
1991 (name "python-iniparse")
1992 (version "0.5.1")
1993 (source
1994 (origin
1995 (method git-fetch)
1996 (uri (git-reference
1997 (url "https://github.com/candlepin/python-iniparse")
1998 (commit version)))
1999 (file-name (git-file-name name version))
2000 (sha256
2001 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
2002 (build-system pyproject-build-system)
2003 (arguments
2004 (list
2005 #:test-backend #~'custom
2006 #:test-flags #~(list "runtests.py")
2007 #:phases
2008 #~(modify-phases %standard-phases
2009 (add-before 'check 'disable-tests
2010 (lambda _
2011 ;; XXX: Three tests failed to compare lists.
2012 (substitute* "tests/test_compat.py"
2013 (("test_read_returns_file_list")
2014 "disabled_test_read_returns_file_list")))))))
2015 (native-inputs
2016 (list python-setuptools))
2017 (home-page "https://github.com/candlepin/python-iniparse")
2018 (synopsis "Accessing and Modifying INI files")
2019 (description
2020 "iniparse is a INI parser for Python which is:
2021@itemize
2022@item Compatible with ConfigParser: Backward compatible implementations of
2023ConfigParser, RawConfigParser, and SafeConfigParser are included that are
2024API-compatible with the Python standard library.
2025@item Preserves structure of INI files: Order of sections & options,
2026indentation, comments, and blank lines are preserved as far as possible when
2027data is updated.
2028@item More convenient: Values can be accessed using dotted notation
2029(@code{cfg.user.name}), or using container syntax
2030(@code{cfg['user']['name']}).
2031@end itemize")
2032 (license license:expat)))
2033
2034(define-public python-inotify
2035 (package
2036 (name "python-inotify")
2037 (version "0.2.12")
2038 (source
2039 (origin
2040 (method git-fetch)
2041 (uri (git-reference
2042 (url "https://github.com/dsoprea/PyInotify")
2043 (commit version)))
2044 (file-name (git-file-name name version))
2045 (sha256
2046 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
2047 (build-system pyproject-build-system)
2048 (arguments
2049 (list
2050 #:phases
2051 #~(modify-phases %standard-phases
2052 (add-after 'unpack 'fix-requirements
2053 (lambda _
2054 (substitute* "inotify/resources/requirements.txt"
2055 (("build")
2056 "")))))))
2057 (native-inputs (list python-pytest python-setuptools))
2058 (propagated-inputs (list python-pyasyncore))
2059 (home-page "https://github.com/dsoprea/PyInotify")
2060 (synopsis "Linux filesystem activity monitor library for Python")
2061 (description
2062 "This package provides an efficient and elegant inotify (Linux filesystem
2063activity monitor) library for Python.")
2064 (license license:gpl2)))
2065
2066(define-public python-intervaltree
2067 (package
2068 (name "python-intervaltree")
2069 (version "3.1.0")
2070 (source
2071 (origin
2072 (method url-fetch)
2073 (uri (pypi-uri "intervaltree" version))
2074 (sha256
2075 (base32
2076 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
2077 (build-system pyproject-build-system)
2078 (arguments
2079 `(#:phases
2080 (modify-phases %standard-phases
2081 ;; pytest seems to have a check to make sure the user is testing
2082 ;; their checked-out code and not an installed, potentially
2083 ;; out-of-date copy. This is harmless here, since we just installed
2084 ;; the package, so we disable the check to avoid skipping tests
2085 ;; entirely.
2086 (add-before 'check 'import-mismatch-error-workaround
2087 (lambda _
2088 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
2089 #t)))))
2090 (propagated-inputs
2091 (list python-sortedcontainers))
2092 (native-inputs
2093 (list python-setuptools python-pytest))
2094 (home-page "https://github.com/chaimleib/intervaltree")
2095 (synopsis "Editable interval tree data structure")
2096 (description
2097 "This package provides a mutable, self-balancing interval tree
2098implementation for Python. Queries may be by point, by range overlap, or by
2099range envelopment. This library was designed to allow tagging text and time
2100intervals, where the intervals include the lower bound but not the upper
2101bound.")
2102 (license license:asl2.0)))
2103
2104(define-public python-jschon
2105 (package
2106 (name "python-jschon")
2107 (version "0.11.1")
2108 (source
2109 (origin
2110 (method git-fetch)
2111 (uri (git-reference
2112 (url "https://github.com/marksparkza/jschon/")
2113 (commit (string-append "v" version))
2114 (recursive? #t))) ;required for tests
2115 (sha256
2116 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
2117 (file-name (git-file-name name version))))
2118 (build-system pyproject-build-system)
2119 (propagated-inputs
2120 (list python-rfc3986))
2121 (native-inputs
2122 (list python-coverage
2123 python-hypothesis
2124 python-pytest
2125 python-pytest-benchmark
2126 python-pytest-httpserver
2127 python-requests
2128 python-setuptools))
2129 (home-page "https://jschon.readthedocs.io/")
2130 (synopsis "Object-oriented JSON Schema implementation for Python")
2131 (description
2132 "This package provides a JSON toolkit for Python developers.")
2133 (license license:expat)))
2134
2135(define-public python-jsonpath-ng
2136 (package
2137 (name "python-jsonpath-ng")
2138 (version "1.7.0" )
2139 (source
2140 (origin
2141 (method url-fetch)
2142 (uri (pypi-uri "jsonpath-ng" version))
2143 (sha256
2144 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
2145 (build-system pyproject-build-system)
2146 (native-inputs
2147 (list python-pytest
2148 python-setuptools
2149 python-wheel))
2150 (propagated-inputs
2151 (list python-ply))
2152 (home-page "https://github.com/h2non/jsonpath-ng")
2153 (synopsis "JSONPath Next-Generation")
2154 (description
2155 "This package provides a final implementation of @code{JSONPath} for
2156Python that aims to be standard compliant, including arithmetic and binary
2157comparison operators, as defined in the original
2158@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
2159 (license license:asl2.0)))
2160
2161(define-public python-json-log-formatter
2162 (package
2163 (name "python-json-log-formatter")
2164 (version "1.1.1")
2165 (source
2166 (origin
2167 (method git-fetch)
2168 (uri (git-reference
2169 (url "https://github.com/marselester/json-log-formatter")
2170 (commit (string-append "v" version))))
2171 (file-name (git-file-name name version))
2172 (sha256
2173 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
2174 (build-system pyproject-build-system)
2175 (arguments
2176 (list
2177 #:phases
2178 #~(modify-phases %standard-phases
2179 (replace 'check
2180 (lambda* (#:key tests? #:allow-other-keys)
2181 (when tests?
2182 (invoke "pytest" "-s" "tests.py")))))))
2183 (native-inputs (list python-django
2184 python-pytest
2185 python-setuptools
2186 python-simplejson
2187 python-ujson
2188 python-wheel))
2189 (home-page "https://github.com/marselester/json-log-formatter")
2190 (synopsis "JSON log formatter")
2191 (description "The library helps you to store logs in JSON format.")
2192 (license license:expat)))
2193
2194(define-public python-keeper-secrets-manager-core
2195 ;; released from a monorepo with other packages following various versioning
2196 ;; schemes. This commit was selected because some failing tests were fixed
2197 ;; since the most recent release of the Python SDK packages.
2198 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2199 (revision "0"))
2200 (package
2201 (name "python-keeper-secrets-manager-core")
2202 (version (git-version "17.0.0" revision commit))
2203 (source
2204 (origin
2205 (method git-fetch)
2206 (uri (git-reference
2207 (url "https://github.com/Keeper-Security/secrets-manager")
2208 (commit commit)))
2209 (file-name (git-file-name name version))
2210 (sha256
2211 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2212 (build-system pyproject-build-system)
2213 (arguments
2214 (list
2215 #:phases
2216 #~(modify-phases %standard-phases
2217 (add-after 'unpack 'chdir
2218 (lambda _
2219 (chdir "sdk/python/core"))))))
2220 (propagated-inputs
2221 (list python-cryptography
2222 python-importlib-metadata
2223 python-requests))
2224 (native-inputs
2225 (list python-pytest
2226 python-setuptools))
2227 (home-page "https://github.com/Keeper-Security/secrets-manager")
2228 (synopsis "Keeper Secrets Manager for Python SDK")
2229 (description
2230 "The Keeper Secrets Manager Python SDK provides access to
2231@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
2232Management} services.")
2233 (license license:expat))))
2234
2235(define-public python-keeper-secrets-manager-helper
2236 ;; released alongside keeper-secrets-manager-core, but with a different
2237 ;; versioning scheme.
2238 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
2239 (revision "0"))
2240 (package
2241 (name "python-keeper-secrets-manager-helper")
2242 (version (git-version "1.0.6" revision commit))
2243 (source
2244 (origin
2245 (method git-fetch)
2246 (uri (git-reference
2247 (url "https://github.com/Keeper-Security/secrets-manager")
2248 (commit commit)))
2249 (file-name (git-file-name name version))
2250 (sha256
2251 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
2252 (build-system pyproject-build-system)
2253 (arguments
2254 (list
2255 #:phases
2256 #~(modify-phases %standard-phases
2257 (add-after 'unpack 'chdir
2258 (lambda _
2259 (chdir "sdk/python/helper"))))))
2260 (propagated-inputs
2261 (list python-iso8601
2262 python-keeper-secrets-manager-core
2263 python-pyyaml))
2264 (native-inputs
2265 (list python-pytest
2266 python-setuptools))
2267 (home-page "https://github.com/Keeper-Security/secrets-manager")
2268 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2269 (description
2270 "Keeper Secrets Manager SDK helper is for creating and managing secret
2271records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2272 (license license:expat))))
2273
2274(define-public python-language-data
2275 (package
2276 (name "python-language-data")
2277 (version "1.3.0")
2278 (source
2279 (origin
2280 (method url-fetch)
2281 (uri (pypi-uri "language_data" version))
2282 (sha256
2283 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2284 (build-system pyproject-build-system)
2285 (native-inputs
2286 (list python-pytest
2287 python-setuptools
2288 python-setuptools-scm))
2289 (propagated-inputs
2290 (list python-marisa-trie))
2291 (home-page "https://github.com/georgkrause/language_data")
2292 (synopsis "Supplementary data about languages used by the langcodes module")
2293 (description
2294 "language_data is a supplement to the langcodes module, for working with
2295standardized codes for human languages. It stores the more bulky and
2296hard-to-index data about languages, particularly what they are named in
2297various languages.")
2298 (license license:expat)))
2299
2300(define-public python-log-symbols
2301 (package
2302 (name "python-log-symbols")
2303 (version "0.0.14")
2304 (source
2305 (origin
2306 (method url-fetch)
2307 (uri (pypi-uri "log_symbols" version))
2308 (sha256
2309 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2310 (build-system pyproject-build-system)
2311 (arguments
2312 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2313 (native-inputs
2314 (list python-setuptools))
2315 (propagated-inputs
2316 (list python-colorama))
2317 (home-page "https://github.com/manrajgrover/py-log-symbols")
2318 (synopsis "Python library with graphical symbols for logging on the terminal")
2319 (description
2320 "This package provides a Python library with graphical symbols that can
2321be displayed on the terminal, with color if possible, for logging purposes.")
2322 (license license:expat)))
2323
2324(define-public python-lsprotocol
2325 (package
2326 (name "python-lsprotocol")
2327 (version "2025.0.0")
2328 (source
2329 (origin
2330 (method git-fetch)
2331 (uri (git-reference
2332 (url "https://github.com/microsoft/lsprotocol")
2333 (commit version)))
2334 (file-name (git-file-name name version))
2335 (sha256
2336 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2337 (build-system pyproject-build-system)
2338 (arguments
2339 (list
2340 #:tests? #f ;no tests for Python package
2341 #:phases
2342 #~(modify-phases %standard-phases
2343 (add-after 'unpack 'cd-packages-python
2344 (lambda _
2345 (chdir "packages/python"))))))
2346 (native-inputs
2347 (list python-flit-core))
2348 (propagated-inputs
2349 (list python-attrs
2350 python-cattrs))
2351 (home-page "https://github.com/microsoft/lsprotocol")
2352 (synopsis "Python types for Language Server Protocol.")
2353 (description
2354 "@code{lsprotocol} is a Python implementation of object types used in
2355the Language Server Protocol (LSP). This repository contains the code
2356generator and the generated types for LSP.")
2357 (license license:expat)))
2358
2359(define-public python-marisa-trie
2360 (package
2361 (name "python-marisa-trie")
2362 (version "1.3.1")
2363 (source
2364 (origin
2365 (method url-fetch)
2366 (uri (pypi-uri "marisa_trie" version))
2367 (sha256
2368 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2369 (build-system pyproject-build-system)
2370 (native-inputs
2371 (list python-cython
2372 python-hypothesis
2373 python-pytest
2374 python-readme-renderer
2375 python-setuptools))
2376 (home-page "https://github.com/pytries/marisa-trie")
2377 (synopsis "Static memory-efficient Trie-like structures for Python")
2378 (description
2379 "This package provides static memory-efficient and fast Trie-like structures
2380for Python.")
2381 (license license:expat)))
2382
2383(define-public python-materialyoucolor
2384 (package
2385 (name "python-materialyoucolor")
2386 (version "3.0.2")
2387 (source
2388 (origin
2389 (method git-fetch)
2390 (uri (git-reference
2391 (url "https://github.com/T-Dynamos/materialyoucolor-python")
2392 (commit (string-append "v" version))))
2393 (file-name (git-file-name name version))
2394 (sha256
2395 (base32 "1yxz05g681zpvxzfcvp4dwayq8hjvw773n4lixkhgxkvvan5hah8"))))
2396 (build-system pyproject-build-system)
2397 (arguments
2398 (list #:test-backend #~'custom
2399 #:test-flags #~(list "tests/test_all.py")))
2400 (propagated-inputs (list python-pillow))
2401 (native-inputs (list pybind11 python-psutil python-rich python-setuptools))
2402 (home-page "https://github.com/T-Dynamos/materialyoucolor-python")
2403 (synopsis "Material You color generation algorithms")
2404 (description
2405 "@code{python-materialyoucolor} provides a tool that generates harmonious
2406color palettes from the dominant colors of an image, based on the
2407@uref{https://m3.material.io/styles/color/system/overview, Material color
2408system}.")
2409 (license license:expat)))
2410
2411(define-public python-menuinst
2412 (package
2413 (name "python-menuinst")
2414 (version "2.4.1")
2415 (source
2416 (origin
2417 (method git-fetch)
2418 (uri (git-reference
2419 (url "https://github.com/conda/menuinst")
2420 (commit version)))
2421 (file-name (git-file-name name version))
2422 (sha256
2423 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2424 (build-system pyproject-build-system)
2425 (arguments
2426 (list
2427 #:tests? #f)) ;tests need conda
2428 (native-inputs
2429 (list python-setuptools
2430 python-setuptools-scm))
2431 (home-page "https://conda.github.io/menuinst/")
2432 (synopsis "Cross platform menu item installation")
2433 (description
2434 "This package provides cross platform menu item installation for conda
2435packages.")
2436 (license license:bsd-3)))
2437
2438(define-public python-multiplex
2439 (package
2440 (name "python-multiplex")
2441 (version "0.6.1")
2442 (source
2443 (origin
2444 (method git-fetch) ;no tests in PyPI archive
2445 (uri (git-reference
2446 (url "https://github.com/dankilman/multiplex")
2447 (commit version)))
2448 (file-name (git-file-name name version))
2449 (sha256
2450 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2451 (build-system pyproject-build-system)
2452 (native-inputs
2453 (list python-poetry-core
2454 python-pytest
2455 python-pytest-asyncio))
2456 (propagated-inputs
2457 (list python-aiofiles
2458 python-aiostream
2459 python-click
2460 python-easy-ansi-0.3
2461 python-pyte))
2462 (home-page "https://github.com/dankilman/multiplex")
2463 (synopsis "Parallel stream of outputs from multiple processes")
2464 (description
2465 "This package provides a functionality to view output of multiple
2466processes, in parallel, in the console, with an interactive TUI.")
2467 (license license:expat)))
2468
2469(define-public python-nrepl
2470 (package
2471 (name "python-nrepl")
2472 (version "0.3.1")
2473 (source
2474 (origin
2475 (method git-fetch)
2476 (uri (git-reference
2477 (url "https://git.sr.ht/~ngraves/nrepl-python")
2478 (commit version)))
2479 (file-name (git-file-name name version))
2480 (sha256
2481 (base32 "1ns8c5d29vi11qma1nnazsja5nibknp97ig0lg45wfpjbb5ngl2b"))))
2482 (build-system pyproject-build-system)
2483 (arguments
2484 (list
2485 #:test-flags
2486 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2487 (native-inputs
2488 (list python-flit-core
2489 python-pytest
2490 python-pytest-asyncio
2491 python-pytest-xdist))
2492 (propagated-inputs
2493 (list python-fastbencode
2494 python-gevent
2495 python-ipython))
2496 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2497 (synopsis "NREPL server for Python")
2498 (description
2499 "This package provides an implementation of the @url{https://nrepl.org,
2500NREPL} protocol for Python.")
2501 (license license:gpl3+)))
2502
2503(define-public python-num2words
2504 (package
2505 (name "python-num2words")
2506 (version "0.5.14")
2507 (source
2508 (origin
2509 (method git-fetch)
2510 (uri (git-reference
2511 (url "https://github.com/savoirfairelinux/num2words")
2512 (commit (string-append "v" version))))
2513 (file-name (git-file-name name version))
2514 (sha256
2515 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2516 (build-system pyproject-build-system)
2517 (arguments
2518 (list
2519 #:test-flags
2520 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2521 (native-inputs (list python-pytest python-setuptools))
2522 (propagated-inputs (list python-docopt))
2523 (home-page "https://github.com/savoirfairelinux/num2words")
2524 (synopsis "Convert numbers to words in multiple languages")
2525 (description
2526 "@code{num2words} is a library that converts numbers like 42 to words like
2527forty-two. It supports multiple languages, and can even generate ordinal
2528numbers like forty-second.")
2529 (license license:lgpl2.1)))
2530
2531(define-public python-orderly-set
2532 (package
2533 (name "python-orderly-set")
2534 (version "5.5.0")
2535 (source
2536 (origin
2537 (method url-fetch)
2538 (uri (pypi-uri "orderly_set" version))
2539 (sha256
2540 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2541 (build-system pyproject-build-system)
2542 (native-inputs (list python-flit-core python-pytest))
2543 (home-page "https://github.com/seperman/orderly-set")
2544 (synopsis "Multiple implementations of Ordered Set")
2545 (description "Orderly Set is a package containing multiple implementations
2546of Ordered Set.")
2547 (license license:expat)))
2548
2549(define-public python-packageurl
2550 (package
2551 (name "python-packageurl")
2552 (version "0.17.6")
2553 (source
2554 (origin
2555 (method git-fetch)
2556 (uri (git-reference
2557 (url "https://github.com/package-url/packageurl-python")
2558 (commit (string-append "v" version))))
2559 (file-name (git-file-name name version))
2560 (sha256
2561 (base32 "03b6nf6jxzcbgkmqdp3bsl2lvzszqiaiqfwk88cnpvqbgq67lafb"))
2562 (modules '((guix build utils)))
2563 ;; Remove bundled virtualenv and license files used only for
2564 ;; development; not needed at build or runtime.
2565 (snippet '(delete-file-recursively "thirdparty"))))
2566 (build-system pyproject-build-system)
2567 (arguments
2568 (list #:test-flags
2569 ;; test_purl_spec.py reads JSON fixtures from the 'spec' git
2570 ;; submodule at import time; skip it when the submodule is absent.
2571 #~(list "--ignore=tests/test_purl_spec.py")))
2572 (native-inputs
2573 (list python-pytest
2574 python-setuptools))
2575 (home-page "https://www.packageurl.org")
2576 (synopsis "Package URL parser and builder")
2577 (description
2578 "This library parses and builds Package URLs (purls) as defined in the
2579purl specification. It provides a @code{PackageURL} class for creating,
2580parsing, and normalizing package URL strings across different package
2581management ecosystems.")
2582 (license license:expat)))
2583
2584(define-public python-pandocfilters
2585 (package
2586 (name "python-pandocfilters")
2587 (version "1.5.1")
2588 (source
2589 (origin
2590 (method url-fetch)
2591 (uri (pypi-uri "pandocfilters" version))
2592 (sha256
2593 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2594 (build-system pyproject-build-system)
2595 (arguments
2596 (list #:tests? #f)) ;require pandoc to run tests
2597 (native-inputs
2598 (list python-setuptools))
2599 (home-page "https://github.com/jgm/pandocfilters")
2600 (synopsis "Python module for writing Pandoc filters")
2601 (description "Pandoc is a powerful utility to transform various
2602input formats into a wide range of output formats. To alter the
2603exported output document, Pandoc allows the usage of filters, which
2604are pipes that read a JSON serialization of the Pandoc AST from stdin,
2605transform it in some way, and write it to stdout. It allows therefore
2606to alter the processing of Pandoc's supported input formats, for
2607instance one can add new syntax elements to markdown, etc.
2608
2609This package provides Python bindings.")
2610 (license license:bsd-3)))
2611
2612(define-public python-panflute
2613 (package
2614 (name "python-panflute")
2615 (version "2.3.1")
2616 (source
2617 (origin
2618 (method url-fetch)
2619 (uri (pypi-uri "panflute" version))
2620 (sha256
2621 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2622 (build-system pyproject-build-system)
2623 (arguments
2624 (list #:tests? #f)) ;require pandoc to run tests
2625 (native-inputs
2626 (list python-setuptools))
2627 (propagated-inputs
2628 (list python-click
2629 python-pyyaml))
2630 (home-page "http://scorreia.com/software/panflute/")
2631 (synopsis "Pythonic Pandoc filters")
2632 (description
2633 "Panflute is a Python package that makes Pandoc filters fun to write.
2634It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2635is heavily inspired.")
2636 (license license:bsd-3)))
2637
2638(define-public python-pastel
2639 (package
2640 (name "python-pastel")
2641 (version "0.2.1")
2642 (source
2643 (origin
2644 (method git-fetch)
2645 (uri (git-reference
2646 (url "https://github.com/sdispater/pastel")
2647 (commit version)))
2648 (file-name (git-file-name name version))
2649 (sha256
2650 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2651 (build-system pyproject-build-system)
2652 (arguments
2653 (list
2654 #:test-flags
2655 #~(list "pastel" "tests/")
2656 #:phases
2657 #~(modify-phases %standard-phases
2658 (add-after 'unpack 'use-poetry-core
2659 (lambda _
2660 ;; Patch to use the core poetry API.
2661 (substitute* "pyproject.toml"
2662 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2663 (native-inputs (list python-poetry-core python-pytest))
2664 (home-page "https://github.com/sdispater/pastel")
2665 (synopsis "Library to colorize strings in your terminal")
2666 (description
2667 "Pastel is a simple library to help you colorize strings in your
2668terminal.")
2669 (license license:expat)))
2670
2671(define-public python-pathlib-abc
2672 (package
2673 (name "python-pathlib-abc")
2674 (version "0.5.0")
2675 (source
2676 (origin
2677 (method url-fetch)
2678 (uri (pypi-uri "pathlib_abc" version))
2679 (sha256
2680 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2681 (build-system pyproject-build-system)
2682 (native-inputs (list python-pytest python-hatchling))
2683 (home-page "https://github.com/barneygale/pathlib-abc")
2684 (synopsis "Python base classes for rich path objects")
2685 (description
2686 "This package is a preview of pathlib functionality planned for a future
2687release of Python; specifically, it provides three ABCs that can be used to
2688implement path classes for non-local filesystems")
2689 (license license:psfl)))
2690
2691;; XXX: It's for [email protected], remove when no longer required.
2692(define-public python-pathlib-abc-for-python-pathy
2693 (hidden-package
2694 (package
2695 (inherit python-pathlib-abc)
2696 (version "0.1.1")
2697 (source
2698 (origin
2699 (method url-fetch)
2700 (uri (pypi-uri "pathlib_abc" version))
2701 (sha256
2702 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2703
2704(define-public python-pbs-installer
2705 (package
2706 (name "python-pbs-installer")
2707 (version "2025.09.18")
2708 (source
2709 (origin
2710 (method git-fetch)
2711 (uri (git-reference
2712 (url "https://github.com/frostming/pbs-installer")
2713 (commit version)))
2714 (file-name (git-file-name name version))
2715 (sha256
2716 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2717 (build-system pyproject-build-system)
2718 (arguments
2719 (list
2720 #:tests? #f ;no tests provided
2721 #:phases
2722 #~(modify-phases %standard-phases
2723 (add-before 'build 'set-version
2724 (lambda _
2725 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2726 (native-inputs
2727 (list python-pdm-backend
2728 python-pytest))
2729 (propagated-inputs
2730 (list python-httpx
2731 python-zstandard))
2732 (home-page "https://github.com/frostming/pbs-installer")
2733 (synopsis "Installer for Python Build Standalone")
2734 (description
2735 "This package implements an installer for
2736@url{https://github.com/astral-sh/python-build-standalone, Python Build
2737Standalone}.")
2738 (license license:expat)))
2739
2740(define-public python-phply
2741 (package
2742 (name "python-phply")
2743 (version "1.2.6")
2744 (source
2745 (origin
2746 (method url-fetch)
2747 (uri (pypi-uri "phply" version))
2748 (sha256
2749 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2750 (build-system pyproject-build-system)
2751 (native-inputs
2752 (list python-pytest
2753 python-setuptools))
2754 (propagated-inputs
2755 (list python-ply))
2756 (home-page "https://github.com/viraptor/phply")
2757 (synopsis "PHP parser written in Python using PLY")
2758 (description
2759 "@code{phply} is a parser for the PHP programming language written using
2760PLY,a Lex/YACC-style parser generator toolkit for Python.")
2761 (license license:bsd-3)))
2762
2763(define-public python-puccinialin
2764 (package
2765 (name "python-puccinialin")
2766 (version "0.1.5")
2767 (source
2768 (origin
2769 (method url-fetch)
2770 (uri (pypi-uri "puccinialin" version))
2771 (sha256
2772 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2773 (build-system pyproject-build-system)
2774 (arguments
2775 (list #:tests? #f)) ;no tests in PyPI or Git
2776 (native-inputs
2777 (list python-hatchling))
2778 (propagated-inputs
2779 (list python-httpx
2780 python-platformdirs
2781 python-tqdm))
2782 (home-page "https://github.com/konstin/puccinialin")
2783 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2784 (description
2785 "This tool helps to install Rust into a temporary directory, allowing
2786support of Rust-based Python builds. Cargo and rustc are installed into a
2787cache directory, to avoid modifying the host's environment, and further
2788activated using a set of environment variables.")
2789 (license (list license:expat license:asl2.0))))
2790
2791(define-public python-py010parser
2792 (package
2793 (name "python-py010parser")
2794 (version "0.1.18")
2795 (source
2796 (origin
2797 (method git-fetch)
2798 (uri (git-reference
2799 (url "https://github.com/d0c-s4vage/py010parser")
2800 (commit (string-append "v" version))))
2801 (file-name (git-file-name name version))
2802 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2803 (modules '((guix build utils)))
2804 (snippet #~(begin
2805 ;; Unbundle ply.
2806 (substitute* "requirements.txt"
2807 (("^six\\>.*") ""))
2808 (substitute* "setup.py"
2809 (("(packages += \\['py010parser').*\\]" all first)
2810 (string-append first "]")))
2811 (delete-file-recursively "py010parser/ply")
2812 (substitute* (find-files "py010parser" "\\.py$")
2813 ((" .*\\.ply\\>") " ply"))
2814 ;; Avoid regenerating the lex table.
2815 (substitute* '("py010parser/__init__.py"
2816 "py010parser/c_parser.py")
2817 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2818 (string-append open "False" close)))
2819 (substitute* '("py010parser/__init__.py"
2820 "setup.py")
2821 (("\\{\\{VERSION\\}\\}") #$version))
2822 (substitute* "setup.cfg"
2823 (("description-file") "description_file"))))))
2824 (build-system pyproject-build-system)
2825 (arguments (list #:test-backend #~'unittest
2826 #:test-flags #~'("discover" "tests")))
2827 (propagated-inputs (list python-regex python-ply))
2828 (native-inputs (list python-setuptools))
2829 (home-page "https://github.com/d0c-s4vage/py010parser")
2830 (synopsis "Parser of 010 editor's template")
2831 (description
2832 "@code{py010parser} is a Python library for parsing templates
2833for the Sweetscape 010 binary-format editor.")
2834 (license license:bsd-3)))
2835
2836(define-public python-pyasynchat
2837 (package
2838 (name "python-pyasynchat")
2839 (version "1.0.5")
2840 (source
2841 (origin
2842 (method git-fetch)
2843 (uri (git-reference
2844 (url "https://github.com/simonrob/pyasynchat")
2845 (commit (string-append "v" version))))
2846 (file-name (git-file-name name version))
2847 (sha256
2848 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2849 (build-system pyproject-build-system)
2850 (native-inputs
2851 (list python-pytest
2852 python-setuptools))
2853 (propagated-inputs
2854 (list python-pyasyncore))
2855 (home-page "https://github.com/simonrob/pyasynchat")
2856 (synopsis "Make asynchat available for Python 3.12 onwards")
2857 (description
2858 "This package contains the
2859@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2860found in Python versions prior to 3.12. It is provided so that existing code
2861relying on @code{import asynchat} is able to continue being used without
2862significant refactoring.")
2863 (license license:psfl)))
2864
2865(define-public python-pyasyncore
2866 (package
2867 (name "python-pyasyncore")
2868 (version "1.0.5")
2869 (source
2870 (origin
2871 (method git-fetch)
2872 (uri (git-reference
2873 (url "https://github.com/simonrob/pyasyncore")
2874 (commit (string-append "v" version))))
2875 (file-name (git-file-name name version))
2876 (sha256
2877 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
2878 (build-system pyproject-build-system)
2879 (native-inputs (list python-pytest python-setuptools))
2880 (home-page "https://github.com/simonrob/pyasyncore")
2881 (synopsis "Make asyncore available for Python 3.12 onwards")
2882 (description
2883 "This package contains the
2884@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
2885found in Python versions prior to 3.12. It is provided so that existing code
2886relying on @code{import asyncore} is able to continue being used without
2887significant refactoring.")
2888 (license license:psfl)))
2889
2890(define-public python-pyconify
2891 (package
2892 (name "python-pyconify")
2893 (version "0.2.1")
2894 (source
2895 (origin
2896 (method git-fetch)
2897 (uri (git-reference
2898 (url "https://github.com/pyapp-kit/pyconify")
2899 (commit (string-append "v" version))))
2900 (file-name (git-file-name name version))
2901 (sha256
2902 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
2903 (build-system pyproject-build-system)
2904 (arguments
2905 (list #:tests? #f)) ;require netwok access
2906 (native-inputs
2907 (list python-hatch-vcs
2908 python-hatchling))
2909 (propagated-inputs
2910 (list python-requests))
2911 (home-page "https://github.com/pyapp-kit/pyconify")
2912 (synopsis "Python wrapper for the Iconify API")
2913 (description
2914 "This packge provides a Python wrapper for the
2915@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
2916framework that includes 100+ icon sets with more than 100,000 icons from
2917FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
2918Emoji and many other open source icon sets.")
2919 (license license:bsd-3)))
2920
2921(define-public python-pygls
2922 (package
2923 (name "python-pygls")
2924 (version "2.0.0")
2925 (source
2926 (origin
2927 (method git-fetch)
2928 (uri (git-reference
2929 (url "https://github.com/openlawlibrary/pygls")
2930 (commit (string-append "v" version))))
2931 (file-name (git-file-name name version))
2932 (sha256
2933 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2934 (build-system pyproject-build-system)
2935 ;; tests: 265 passed, 8 skipped
2936 (native-inputs
2937 (list python-pytest
2938 python-pytest-asyncio
2939 python-poetry-core))
2940 (propagated-inputs
2941 (list python-attrs
2942 python-cattrs
2943 python-lsprotocol))
2944 (home-page "https://github.com/openlawlibrary/pygls")
2945 (synopsis "Pythonic generic language server")
2946 (description
2947 "This package provides a pythonic generic language server (pronounced
2948like pie glass').")
2949 (license license:asl2.0)))
2950
2951(define-public python-pyls-spyder
2952 (package
2953 (name "python-pyls-spyder")
2954 (version "0.4.0")
2955 (source
2956 (origin
2957 (method git-fetch)
2958 (uri (git-reference
2959 (url "https://github.com/spyder-ide/pyls-spyder")
2960 (commit (string-append "v" version))))
2961 (file-name (git-file-name name version))
2962 (sha256
2963 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
2964 (build-system pyproject-build-system)
2965 (propagated-inputs (list python-lsp-server))
2966 (native-inputs (list python-pytest python-setuptools))
2967 (home-page "https://github.com/spyder-ide/pyls-spyder")
2968 (synopsis "Spyder extensions for @code{python-lsp-server}")
2969 (description "This package provides Spyder-specific extras for the
2970Language Server Protocol (LSP) on Python, such as document symbol searching
2971and others.")
2972 (license license:expat)))
2973
2974(define-public python-pylsp-rope
2975 (package
2976 (name "python-pylsp-rope")
2977 (version "0.1.17")
2978 (source
2979 (origin
2980 (method git-fetch)
2981 (uri (git-reference
2982 (url "https://github.com/python-rope/pylsp-rope")
2983 (commit version)))
2984 (file-name (git-file-name name version))
2985 (sha256
2986 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
2987 (build-system pyproject-build-system)
2988 (native-inputs
2989 (list python-pytest
2990 python-setuptools))
2991 (propagated-inputs
2992 (list python-lsp-server
2993 python-rope))
2994 (home-page "https://github.com/python-rope/pylsp-rope")
2995 (synopsis
2996 "Extended refactoring capabilities for Python LSP Server using Rope")
2997 (description
2998 "This plugs in to Python LSP Server, adding code actions that refactor
2999using Rope.")
3000 (license license:expat)))
3001
3002(define-public python-pypydispatcher
3003 (package
3004 (name "python-pypydispatcher")
3005 (version "2.1.2")
3006 (source
3007 (origin
3008 (method url-fetch)
3009 (uri (pypi-uri "PyPyDispatcher" version))
3010 (sha256
3011 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
3012 (build-system pyproject-build-system)
3013 (native-inputs
3014 (list python-pytest
3015 python-setuptools
3016 python-setuptools-scm))
3017 (home-page "https://github.com/scrapy/pypydispatcher")
3018 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
3019 (description
3020 "This package implements a functionality of pulti-producer-multi-consumer
3021signal dispatching mechanism. It's a fork of
3022http://pydispatcher.sourceforge.net/ with PyPy support.")
3023 (license license:bsd-3)))
3024
3025(define-public python-pyread-eagle
3026 (package
3027 (name "python-pyread-eagle")
3028 (version "1.0.3")
3029 (source
3030 (origin
3031 (method git-fetch)
3032 (uri (git-reference
3033 (url "https://github.com/kyleaoman/pyread_eagle")
3034 (commit version)))
3035 (file-name (git-file-name name version))
3036 (sha256
3037 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
3038 (build-system pyproject-build-system)
3039 (arguments
3040 ;; TODO: Tests need additional test data, see tests/test_regions.py.
3041 (list #:tests? #f))
3042 (native-inputs
3043 (list python-setuptools))
3044 (propagated-inputs
3045 (list python-h5py
3046 python-numpy))
3047 (home-page "https://github.com/kyleaoman/pyread_eagle")
3048 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
3049 (description
3050 "This package provides a pure-python port of
3051@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
3052 (license license:gpl3)))
3053
3054(define-public python-pyte
3055 (package
3056 (name "python-pyte")
3057 (version "0.8.2")
3058 (source
3059 (origin
3060 (method git-fetch)
3061 (uri (git-reference
3062 (url "https://github.com/selectel/pyte")
3063 (commit version)))
3064 (file-name (git-file-name name version))
3065 (sha256
3066 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
3067 (build-system pyproject-build-system)
3068 (propagated-inputs (list python-wcwidth))
3069 (native-inputs (list python-pytest python-setuptools python-wheel))
3070 (home-page "https://pyte.readthedocs.io/")
3071 (synopsis "Simple VTXXX-compatible terminal emulator")
3072 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
3073emulator. @var{VTxxx} stands for a series of video terminals, developed by
3074DEC between 1970 and 1995. The first and probably most famous one was the
3075VT100 terminal, which is now a de-facto standard for all virtual terminal
3076emulators.
3077
3078pyte is a fork of vt102, which was an incomplete pure Python implementation
3079of VT100 terminal.")
3080 (license license:lgpl3+)))
3081
3082(define-public python-pytokens
3083 (package
3084 (name "python-pytokens")
3085 (version "0.4.1")
3086 (source
3087 (origin
3088 (method git-fetch)
3089 (uri (git-reference
3090 (url "https://github.com/tusharsadhwani/pytokens")
3091 (commit version)))
3092 (file-name (git-file-name name version))
3093 (sha256
3094 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
3095 (build-system pyproject-build-system)
3096 (arguments
3097 (list
3098 #:phases
3099 #~(modify-phases %standard-phases
3100 (add-before 'build 'build-with-cython
3101 (lambda _
3102 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
3103 (native-inputs
3104 (list python-cython
3105 python-pytest
3106 python-setuptools))
3107 (home-page "https://github.com/tusharsadhwani/pytokens")
3108 (synopsis "Spec compliant Python 3.14+ tokenizer")
3109 (description
3110 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
3111runs on older Pythons.")
3112 (license license:expat)))
3113
3114(define-public python-pyuca
3115 (package
3116 (name "python-pyuca")
3117 (version "1.2")
3118 (source
3119 (origin
3120 (method git-fetch)
3121 (uri (git-reference
3122 (url "https://github.com/jtauber/pyuca")
3123 (commit (string-append "v" version))))
3124 (file-name (git-file-name name version))
3125 (sha256
3126 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
3127 (build-system pyproject-build-system)
3128 (arguments
3129 (list #:tests? #f)) ; there are no tests
3130 (native-inputs (list python-setuptools))
3131 (home-page "https://github.com/jtauber/pyuca")
3132 (synopsis "Python implementation of the Unicode Collation Algorithm")
3133 (description "This package provides a Python implementation of the
3134@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
3135 (license license:expat)))
3136
3137(define-public python-pyxdameraulevenshtein
3138 (package
3139 (name "python-pyxdameraulevenshtein")
3140 (version "1.8.0")
3141 (source
3142 (origin
3143 (method git-fetch)
3144 (uri (git-reference
3145 (url "https://github.com/lanl/pyxDamerauLevenshtein")
3146 (commit (string-append "v" version))))
3147 (file-name (git-file-name name version))
3148 (sha256
3149 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
3150 (build-system pyproject-build-system)
3151 (native-inputs (list python-cython python-pytest python-setuptools))
3152 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
3153 (synopsis "Damerau-Levenshtein edit distance algorithm")
3154 (description
3155 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
3156edit distance algorithm for Python in Cython for high performance.")
3157 (license license:bsd-3)))
3158
3159(define-public python-qrcodegen
3160 (package
3161 (name "python-qrcodegen")
3162 (version "1.8.0")
3163 (source
3164 (origin
3165 (method git-fetch)
3166 (uri (git-reference
3167 (url "https://github.com/nayuki/QR-Code-generator")
3168 (commit (string-append "v" version))))
3169 (sha256
3170 (base32 "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39"))))
3171 (build-system pyproject-build-system)
3172 (arguments
3173 (list
3174 #:tests? #f ;no tests
3175 #:phases
3176 #~(modify-phases %standard-phases
3177 (add-before 'build 'chdir
3178 (lambda _
3179 (chdir "python"))))))
3180 (native-inputs (list python-setuptools))
3181 (home-page "https://www.nayuki.io/page/qr-code-generator-library")
3182 (synopsis "QR Code generator")
3183 (description
3184 "@code{python-qrcodegen} is a QR code generator library in Python.")
3185 (license license:expat)))
3186
3187(define-public python-represent
3188 (package
3189 (name "python-represent")
3190 (version "2.1")
3191 (source
3192 (origin
3193 (method url-fetch)
3194 (uri (pypi-uri "Represent" version))
3195 (sha256
3196 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
3197 (build-system pyproject-build-system)
3198 (native-inputs
3199 ;; XXX This might be too much for testing, maybe switch them off as it's
3200 ;; a simple middleware library.
3201 (list python-ipython
3202 python-pytest
3203 python-rich
3204 python-setuptools))
3205 (home-page "https://github.com/RazerM/represent")
3206 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
3207 (description
3208 "This package implements a functionality to generate Python
3209@code{__repr__} methods automatically or declaratively.")
3210 (license license:expat)))
3211
3212(define-public python-rich-argparse
3213 (package
3214 (name "python-rich-argparse")
3215 (version "1.8.0")
3216 (source
3217 (origin
3218 (method git-fetch)
3219 (uri (git-reference
3220 (url "https://github.com/hamdanal/rich-argparse")
3221 (commit (string-append "v" version))))
3222 (file-name (git-file-name name version))
3223 (sha256
3224 (base32
3225 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
3226 (build-system pyproject-build-system)
3227 (native-inputs
3228 (list python-pytest
3229 python-hatchling))
3230 (propagated-inputs
3231 (list python-rich))
3232 (home-page "https://github.com/hamdanal/rich-argparse")
3233 (synopsis "Format argparse and optparse help using rich")
3234 (description
3235 "This package improves the look and readability of argparse's help while
3236requiring minimal changes to the code.")
3237 (license license:expat)))
3238
3239(define-public python-rich-rst
3240 (package
3241 (name "python-rich-rst")
3242 (version "2.0.1")
3243 (source
3244 (origin
3245 (method git-fetch)
3246 (uri (git-reference
3247 (url "https://github.com/wasi-master/rich-rst")
3248 (commit (string-append "v" version))))
3249 (file-name (git-file-name name version))
3250 (sha256
3251 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
3252 (build-system pyproject-build-system)
3253 (native-inputs
3254 (list python-pytest
3255 python-setuptools))
3256 (propagated-inputs
3257 (list python-pygments
3258 python-rich))
3259 (home-page "https://wasi-master.github.io/rich-rst")
3260 (synopsis "Beautiful reStructuredText renderer for Rich")
3261 (description
3262 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
3263documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
3264renderables.")
3265 (license license:expat)))
3266
3267(define-public python-roman-numerals
3268 (package
3269 (name "python-roman-numerals")
3270 (version "3.1.0")
3271 (source
3272 (origin
3273 (method url-fetch)
3274 (uri (pypi-uri "roman_numerals" version))
3275 (sha256
3276 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
3277 (build-system pyproject-build-system)
3278 (native-inputs (list python-flit-core python-pytest))
3279 (home-page "https://pypi.org/project/roman-numbers/")
3280 (synopsis "Python library to manipulate Roman numerals")
3281 (description "This package provides a Python library to manipulate
3282well-formed Roman numerals.")
3283 (license license:expat)))
3284
3285(define-public python-rush
3286 (package
3287 (name "python-rush")
3288 (version "2021.04.0")
3289 (source
3290 (origin
3291 (method git-fetch)
3292 (uri (git-reference
3293 (url "https://github.com/sigmavirus24/rush")
3294 (commit version)))
3295 (file-name (git-file-name name version))
3296 (sha256
3297 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
3298 (build-system pyproject-build-system)
3299 (arguments
3300 (list
3301 #:test-flags
3302 ;; E ValueError: Redis URL must specify one of the following schemes
3303 ;; (redis://, rediss://, unix://)
3304 #~(list "-k" (string-append "not test_valid_url[redis://]"
3305 " and not test_valid_url[rediss://]"))))
3306 (native-inputs
3307 (list python-mock
3308 python-redis
3309 python-rfc3986
3310 python-pytest
3311 python-setuptools))
3312 (propagated-inputs
3313 (list python-attrs))
3314 (home-page "https://github.com/sigmavirus24/rush")
3315 (synopsis "Throttling and rate-limiting algorithms for Python")
3316 (description
3317 "This package provides is a small collection of algorithms that can be
3318reused when throttling user interactions with a resource (e.g., an API).")
3319 (license license:expat)))
3320
3321(define-public python-rustworkx
3322 (package
3323 (name "python-rustworkx")
3324 (version "0.17.1")
3325 (source
3326 (origin
3327 (method git-fetch)
3328 (uri (git-reference
3329 (url "https://github.com/Qiskit/rustworkx")
3330 (commit version)))
3331 (file-name (git-file-name name version))
3332 (sha256
3333 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
3334 (build-system pyproject-build-system)
3335 (arguments
3336 (list
3337 #:test-flags #~(list "--test-path" "tests")
3338 #:imported-modules (append %cargo-build-system-modules
3339 %pyproject-build-system-modules)
3340 #:modules '(((guix build cargo-build-system)
3341 #:prefix cargo:)
3342 (guix build pyproject-build-system)
3343 (guix build utils))
3344 #:phases
3345 #~(modify-phases %standard-phases
3346 (add-after 'unpack 'prepare-cargo-build-system
3347 (lambda args
3348 (for-each
3349 (lambda (phase)
3350 (format #t "Running cargo phase: ~a~%" phase)
3351 (apply (assoc-ref cargo:%standard-phases phase)
3352 #:cargo-target #$(cargo-triplet) args))
3353 '(unpack-rust-crates
3354 configure
3355 check-for-pregenerated-files
3356 patch-cargo-checksums))))
3357 (add-before 'check 'pre-check
3358 (lambda _
3359 ;; Delete the source directory to avoid interference.
3360 (delete-file-recursively "rustworkx")
3361 ;; Matplotlib needs to be able to write its configuration file
3362 ;; somewhere.
3363 (setenv "MPLCONFIGDIR" "/tmp")
3364 ;; For fontconfig.
3365 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3366 (propagated-inputs (list python-numpy))
3367 (native-inputs
3368 (append (list graphviz
3369 python-matplotlib
3370 python-networkx
3371 python-pillow
3372 python-setuptools
3373 python-setuptools-rust
3374 python-stestr
3375 rust
3376 `(,rust "cargo"))
3377 (or (and=> (%current-target-system)
3378 (compose list make-rust-sysroot))
3379 '())))
3380 (inputs (cargo-inputs 'python-rustworkx))
3381 (home-page "https://www.rustworkx.org")
3382 (synopsis "High performance graph library for Python")
3383 (description
3384 "@code{rustworkx} is a Python package for working with graphs and complex
3385networks. It enables the creation, interaction with, and study of graphs and
3386networks.")
3387 (license license:asl2.0)))
3388
3389(define-public python-safety-schemas
3390 (package
3391 (name "python-safety-schemas")
3392 (version "0.0.14")
3393 (source
3394 (origin
3395 (method url-fetch)
3396 (uri (pypi-uri "safety_schemas" version))
3397 (sha256
3398 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
3399 (build-system pyproject-build-system)
3400 (arguments
3401 (list
3402 #:test-flags
3403 #~(list "-k" (string-join
3404 ;; These tests are failing for unknown reasons.
3405 ;; (AssertionError).
3406 (list "not test_model[ConfigModel-ConfigModel]"
3407 "test_model[MetadataModel-MetadataModel]"
3408 "test_model[PolicyFileModel-PolicyFileModel]"
3409 "test_model[ProjectModel-ProjectModel]"
3410 "test_model[ReportModel-ReportModel]")
3411 " and not "))))
3412 (propagated-inputs (list python-dparse
3413 python-packaging
3414 python-pydantic
3415 python-ruamel.yaml
3416 python-typing-extensions))
3417 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3418 ;; Source code is not yet published outside of PyPI:
3419 ;; https://github.com/pyupio/safety/issues/494
3420 (home-page "https://pypi.org/project/safety-schemas/")
3421 (synopsis "Schemas for Safety tools")
3422 (description "This package contains models and schemas used by Safety.")
3423 (license license:expat)))
3424
3425(define-public python-scverse-misc
3426 (package
3427 (name "python-scverse-misc")
3428 (version "0.1.1")
3429 (source
3430 (origin
3431 (method git-fetch)
3432 (uri (git-reference
3433 (url "https://github.com/scverse/scverse-misc")
3434 (commit (string-append "v" version))))
3435 (file-name (git-file-name name version))
3436 (sha256
3437 (base32 "14gqrafilfzlc9rydz90rifs48icqvdqa80qsfsmhrwv25mwwjry"))))
3438 (build-system pyproject-build-system)
3439 (arguments
3440 (list
3441 #:test-flags
3442 ;; Optinal tests, Pydantic fails to validate inputs.
3443 #~(list "--deselect=tests/settings/test_runtime.py::test_dotenv[2]"
3444 "--deselect=tests/settings/test_runtime.py::test_dotenv[4]")))
3445 (native-inputs
3446 (list python-hatch-vcs
3447 python-hatchling
3448 python-pytest
3449 python-pyyaml))
3450 (propagated-inputs
3451 (list python-session-info2
3452 python-typing-extensions
3453 ;; [optional]
3454 python-dotenv
3455 python-pydantic-settings))
3456 (home-page "https://github.com/scverse/scverse-misc")
3457 (synopsis "Miscellaneous utility code used by scverse packages")
3458 (description
3459 "This package provides miscellaneous utility code used by scverse
3460packages.")
3461 (license license:bsd-3)))
3462
3463(define-public python-senf
3464 (package
3465 (name "python-senf")
3466 (version "1.5.1")
3467 (source
3468 (origin
3469 (method git-fetch)
3470 (uri (git-reference
3471 (url "https://github.com/quodlibet/senf")
3472 (commit (string-append "v" version))))
3473 (file-name (git-file-name name version))
3474 (sha256
3475 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3476 (build-system pyproject-build-system)
3477 (arguments
3478 (list
3479 #:test-flags
3480 ;; These tests fail due to various home fetching methods during build.
3481 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3482 "--deselect" "tests/test_api.py::test_expanduser_user")))
3483 (native-inputs (list python-pytest python-setuptools))
3484 (home-page "https://github.com/quodlibet/senf")
3485 (synopsis "Text, bytes and paths conversion functions for Python")
3486 (description "Senf introduces a new platform native string type called
3487fsnative. It adds functions to convert text, bytes and paths to and from that
3488new type and helper functions to integrate it nicely with the Python
3489stdlib.")
3490 (license license:expat)))
3491
3492(define-public python-session-info2
3493 (package
3494 (name "python-session-info2")
3495 (version "0.2")
3496 (source
3497 (origin
3498 (method url-fetch)
3499 (uri (pypi-uri "session_info2" version))
3500 (sha256
3501 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3502 (build-system pyproject-build-system)
3503 (arguments
3504 (list
3505 #:test-flags
3506 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3507 ;; Tests require Jupyter Client.
3508 "--ignore=tests/test_subprocess.py")))
3509 (native-inputs
3510 (list python-hatch-docstring-description
3511 python-hatch-vcs
3512 python-hatchling
3513 python-pytest
3514 python-pytest-asyncio))
3515 (home-page "https://session-info2.readthedocs.io/")
3516 (synopsis "Print versions of imported packages")
3517 (description
3518 "This package implements a functionality to print versions of imported
3519Python packages.")
3520 (license license:mpl2.0)))
3521
3522(define-public python-show-in-file-manager
3523 (package
3524 (name "python-show-in-file-manager")
3525 (version "1.1.6")
3526 (source
3527 (origin
3528 (method git-fetch)
3529 (uri (git-reference
3530 (url "https://github.com/damonlynch/showinfilemanager")
3531 (commit (string-append "v" version))))
3532 (file-name (git-file-name name version))
3533 (sha256
3534 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3535 (build-system pyproject-build-system)
3536 (arguments (list #:tests? #f)) ;no tests upstream
3537 (native-inputs
3538 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3539 (propagated-inputs
3540 (list python-packaging python-pyxdg))
3541 (home-page "https://github.com/damonlynch/showinfilemanager")
3542 (synopsis "Open the system file manager and select files in it")
3543 (description
3544 "Show in File Manager is a Python package to open the system file manager
3545and optionally select files in it. The point is not to open the files, but to
3546select them in the file manager, thereby highlighting the files and allowing
3547the user to quickly do something with them.")
3548 (license license:expat)))
3549
3550(define-public python-shxparser
3551 (package
3552 (name "python-shxparser")
3553 (version "0.0.2")
3554 (source
3555 (origin
3556 (method url-fetch)
3557 (uri (pypi-uri "shxparser" version))
3558 (sha256
3559 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3560 (build-system pyproject-build-system)
3561 (arguments (list #:test-backend #~'unittest))
3562 (native-inputs
3563 (list python-svgelements python-setuptools))
3564 (home-page "https://github.com/tatarize/shxparser")
3565 (synopsis "SHX line font parser")
3566 (description
3567 "This is a pure python parser for SHX Hershey font files that are an
3568AutoCad format which can encode single line fonts. This format is used for
3569many CNC and laser operations.")
3570 (license license:expat)))
3571
3572(define-public python-simplify-polyline
3573 (package
3574 (name "python-simplify-polyline")
3575 (version "0.1.0")
3576 (source
3577 (origin
3578 (method url-fetch)
3579 (uri (pypi-uri "simplify_polyline" version))
3580 (sha256
3581 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3582 (build-system pyproject-build-system)
3583 (native-inputs
3584 (list python-pytest
3585 python-setuptools
3586 python-setuptools-scm
3587 python-wheel))
3588 (propagated-inputs
3589 (list python-numpy))
3590 (home-page "https://github.com/ShayHill/simplify_polyline")
3591 (synopsis "Simplify an open or closed polyline")
3592 (description
3593 "This package implements functionality to work with plyline.
3594Features:
3595@itemize
3596@item Visvalingham-Whyatt - removes the smallest triangles formed by
3597three consecutive points in a polyline or polygon
3598@item Douglas-Peucker - gives a better representation of the convex hull
3599@end itemize")
3600 (license license:expat)))
3601
3602(define-public python-siphash24
3603 (package
3604 (name "python-siphash24")
3605 (version "1.8")
3606 (source
3607 (origin
3608 (method git-fetch)
3609 (uri (git-reference
3610 (url "https://github.com/dnicolodi/python-siphash24/")
3611 (commit (string-append "v" version))))
3612 (file-name (git-file-name name version))
3613 (sha256
3614 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3615 (build-system pyproject-build-system)
3616 (arguments
3617 (list
3618 #:test-backend #~'custom
3619 #:test-flags #~(list "test.py")
3620 #:phases
3621 #~(modify-phases %standard-phases
3622 (add-after 'unpack 'patch-pyproject
3623 (lambda _
3624 (substitute* "pyproject.toml"
3625 ;; meson-python: error: Field `project.license` has an invalid
3626 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3627 ;; LGPL-2.1-or-later`)
3628 (("^license = .*")
3629 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3630 (native-inputs
3631 (list pkg-config
3632 python-meson
3633 python-pytest))
3634 (inputs
3635 (list c-siphash))
3636 (home-page "https://github.com/dnicolodi/python-siphash24/")
3637 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3638 (description
3639 "This package provides a C-based implementation of
3640@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3641compatible with the hash functions provided by the hashlib standard library
3642module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3643 ;; They are in LICENSES directory:
3644 (license (list license:asl2.0
3645 license:lgpl2.1+))))
3646
3647(define-public python-snakesay
3648 (package
3649 (name "python-snakesay")
3650 (version "0.10.4")
3651 (source
3652 (origin
3653 (method git-fetch)
3654 (uri (git-reference
3655 (url "https://github.com/pythonanywhere/snakesay")
3656 (commit (string-append "v" version))))
3657 (file-name (git-file-name name version))
3658 (sha256
3659 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3660 (build-system pyproject-build-system)
3661 (arguments
3662 ;; XXX: We don't have python-uv-build yet.
3663 (list #:build-backend "setuptools.build_meta"))
3664 (native-inputs (list python-pytest python-setuptools))
3665 (home-page "https://github.com/pythonanywhere/snakesay")
3666 (synopsis "Like @command{cowsay} but with Python flavor")
3667 (description
3668 "This package provides a simple ASCII art pictures generator of a
3669Snake with a message.")
3670 (license license:expat)))
3671
3672(define-public python-jaconv
3673 (package
3674 (name "python-jaconv")
3675 ;; Last release is not tagged.
3676 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3677 (revision . "0")))
3678 (version (git-version "0.4.0"
3679 (assoc-ref properties 'revision)
3680 (assoc-ref properties 'commit)))
3681 (source
3682 (origin
3683 (method git-fetch)
3684 (uri (git-reference
3685 (url "https://github.com/ikegami-yukino/jaconv")
3686 (commit (assoc-ref properties 'commit))))
3687 (file-name (git-file-name name version))
3688 (sha256
3689 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3690 (build-system pyproject-build-system)
3691 (native-inputs (list python-setuptools python-pynose))
3692 (home-page "https://github.com/ikegami-yukino/jaconv")
3693 (synopsis
3694 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3695Hankaku, Zenkaku")
3696 (description
3697 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3698Hankaku (half-width character) and Zenkaku (full-width character)")
3699 (license license:expat)))
3700
3701(define-public python-janus
3702 (package
3703 (name "python-janus")
3704 (version "1.0.0")
3705 (source
3706 (origin
3707 (method url-fetch)
3708 (uri (pypi-uri "janus" version))
3709 (sha256
3710 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3711 (build-system pyproject-build-system)
3712 (native-inputs
3713 (list python-pytest python-pytest-asyncio
3714 python-setuptools python-wheel))
3715 (propagated-inputs (list python-typing-extensions))
3716 (home-page "https://github.com/aio-libs/janus/")
3717 (synopsis
3718 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3719 (description
3720 "Mixed sync-async queue, supposed to be used for communicating between
3721classic synchronous (threaded) code and asynchronous (in terms of
3722@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3723@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3724library has two faces: synchronous and asynchronous interface. Synchronous is
3725fully compatible with
3726@url{https://docs.python.org/3/library/queue.html,standard queue},
3727asynchronous one follows
3728@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3729design}.")
3730 (license license:asl2.0)))
3731
3732(define-public python-concurrent-log-handler
3733 (package
3734 (name "python-concurrent-log-handler")
3735 (version "0.9.25")
3736 ;; No tests in the PyPI tarball.
3737 (source
3738 (origin
3739 (method git-fetch)
3740 (uri (git-reference
3741 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3742 (commit version)))
3743 (file-name (git-file-name name version))
3744 (sha256
3745 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3746 (build-system pyproject-build-system)
3747 (arguments
3748 (list
3749 ;; XXX: Tests are broken, no new version fixing them yet.
3750 #:tests? #f))
3751 (native-inputs
3752 (list python-hatchling))
3753 (propagated-inputs
3754 (list python-portalocker))
3755 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3756 (synopsis
3757 "Additional log handler for Python's standard @code{logging} package")
3758 (description
3759 "This package provides an additional log handler for Python's standard
3760@code{logging} package (PEP 282). This handler will write log events to a log
3761file which is rotated when the log file reaches a certain size. Multiple
3762processes can safely write to the same log file concurrently and rotated logs
3763can be gzipped if desired. An optional threaded queue logging handler is
3764provided to perform logging in the background.")
3765 (license license:asl2.0)))
3766
3767(define-public python-lazy
3768 (package
3769 (name "python-lazy")
3770 (version "1.6")
3771 (source
3772 (origin
3773 (method url-fetch)
3774 (uri (pypi-uri "lazy" version))
3775 (sha256
3776 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3777 (build-system pyproject-build-system)
3778 (native-inputs (list python-pytest python-setuptools python-wheel))
3779 (home-page "https://github.com/stefanholek/lazy")
3780 (synopsis "Lazy attributes for Python objects")
3781 (description "This package provides a decorator to create lazy
3782attributes.")
3783 (license license:bsd-2)))
3784
3785(define-public python-logfury
3786 (package
3787 (name "python-logfury")
3788 (version "1.0.1")
3789 (source
3790 (origin
3791 (method url-fetch)
3792 (uri (pypi-uri "logfury" version))
3793 (sha256
3794 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3795 (build-system pyproject-build-system)
3796 (native-inputs
3797 (list python-pytest
3798 python-setuptools
3799 python-setuptools-scm
3800 python-testfixtures
3801 python-wheel))
3802 (home-page "https://github.com/reef-technologies/logfury/")
3803 (synopsis "Logging of method calls for python libraries")
3804 (description
3805 "Logfury is a tool for python library maintainers. It allows for
3806responsible, low-boilerplate logging of method calls.")
3807 (license license:bsd-3)))
3808
3809(define-public python-logzero
3810 (package
3811 (name "python-logzero")
3812 (version "1.7.0")
3813 (source
3814 (origin
3815 (method git-fetch)
3816 (uri (git-reference
3817 (url "https://github.com/metachris/logzero")
3818 (commit (string-append "v" version))))
3819 (file-name (git-file-name name version))
3820 (sha256
3821 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
3822 (build-system pyproject-build-system)
3823 (native-inputs (list python-pytest python-setuptools))
3824 (home-page "https://github.com/metachris/logzero")
3825 (synopsis "Robust and effective logging for Python")
3826 (description
3827 "@code{logzero} provides a fully configured Python logger object for
3828easy logging and rotating to a console or a file.")
3829 (license license:expat)))
3830
3831(define-public python-logbook
3832 (package
3833 (name "python-logbook")
3834 (version "1.8.2")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "logbook" version))
3839 (sha256
3840 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
3841 (build-system pyproject-build-system)
3842 (native-inputs
3843 (list python-brotli
3844 python-cython
3845 python-pytest
3846 python-setuptools
3847 python-wheel))
3848 (home-page "https://github.com/getlogbook/logbook")
3849 (synopsis "Logbook is a logging replacement for Python")
3850 (description
3851 "Logbook is a logging system for Python that replaces the standard
3852library’s logging module. It was designed with both complex and simple
3853applications in mind and the idea to make logging fun.")
3854 (license license:bsd-3)))
3855
3856(define-public python-databind-core
3857 (package
3858 (name "python-databind-core")
3859 (version "4.4.2")
3860 (source
3861 (origin
3862 (method url-fetch)
3863 (uri (pypi-uri "databind.core" version))
3864 (sha256
3865 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
3866 (snippet
3867 #~(begin (use-modules (guix build utils))
3868 ;; The problem with python-typing-extensions >= 4.7 is only
3869 ;; with python-3.7.
3870 (substitute* "pyproject.toml"
3871 ((",<4.7.*") "\"\n"))))))
3872 (build-system pyproject-build-system)
3873 (arguments
3874 (list
3875 #:phases
3876 #~(modify-phases %standard-phases
3877 (add-after 'install 'fix-name
3878 (lambda* (#:key inputs outputs #:allow-other-keys)
3879 (let* ((sitedir (site-packages inputs outputs))
3880 (dist-info
3881 (string-append sitedir "/databind_core-" #$version ".dist-info")))
3882 (substitute* (string-append dist-info "/METADATA")
3883 (("Name: databind-core")
3884 "Name: databind.core"))
3885 (substitute* (string-append dist-info "/RECORD")
3886 (("databind_core") "databind.core"))
3887 (rename-file dist-info
3888 (string-append sitedir
3889 "/databind.core-"
3890 #$version ".dist-info"))))))))
3891 (propagated-inputs
3892 (list python-deprecated
3893 python-nr-date
3894 python-nr-stream
3895 python-typeapi
3896 python-typing-extensions))
3897 (native-inputs
3898 (list python-poetry-core python-pytest))
3899 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
3900 (synopsis
3901 "Library for de-/serializing Python dataclasses")
3902 (description
3903 "Databind is a library inspired by jackson-databind to de-/serialize
3904Python dataclasses.")
3905 (license license:expat)))
3906
3907(define-public python-databind-json
3908 (package
3909 (name "python-databind-json")
3910 (version "4.4.2")
3911 (source
3912 (origin
3913 (method url-fetch)
3914 (uri (pypi-uri "databind.json" version))
3915 (sha256
3916 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
3917 (snippet
3918 #~(begin (use-modules (guix build utils))
3919 ;; The problem with python-typing-extensions >= 4.7 is only
3920 ;; with python-3.7.
3921 (substitute* "pyproject.toml"
3922 ((",<4.7.*") "\"\n"))))))
3923 (build-system pyproject-build-system)
3924 (arguments
3925 (list
3926 #:phases
3927 #~(modify-phases %standard-phases
3928 (add-after 'install 'fix-name
3929 (lambda* (#:key inputs outputs #:allow-other-keys)
3930 (let* ((sitedir (site-packages inputs outputs))
3931 (dist-info
3932 (string-append sitedir "/databind_json-" #$version ".dist-info")))
3933 (substitute* (string-append dist-info "/METADATA")
3934 (("Name: databind-json")
3935 "Name: databind.json"))
3936 (substitute* (string-append dist-info "/RECORD")
3937 (("databind_json") "databind.json"))
3938 (rename-file dist-info
3939 (string-append sitedir
3940 "/databind.json-"
3941 #$version ".dist-info"))))))))
3942 (propagated-inputs
3943 (list python-databind-core python-nr-date
3944 python-typeapi python-typing-extensions))
3945 (native-inputs (list python-poetry-core python-pytest))
3946 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
3947 (synopsis
3948 "De-/serialize Python dataclasses to or from JSON payloads")
3949 (description
3950 "The @code{databind.json} package implements the de-/serialization to or
3951from JSON payloads using the @code{databind.core} framework.")
3952 (license license:expat)))
3953
3954(define-public python-docspec
3955 (package
3956 (name "python-docspec")
3957 (version "2.2.1")
3958 (source
3959 (origin
3960 (method url-fetch)
3961 (uri (pypi-uri "docspec" version))
3962 (sha256
3963 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
3964 (build-system pyproject-build-system)
3965 (arguments (list #:tests? #false)) ;there are none
3966 (propagated-inputs
3967 (list python-databind-core
3968 python-databind-json
3969 python-deprecated))
3970 (native-inputs
3971 (list python-poetry-core))
3972 (home-page "https://github.com/NiklasRosenstein/python-docspec")
3973 (synopsis "Represent API documentation of programming languages")
3974 (description
3975 "Docspec is a JSON object specification for representing API
3976documentation of programming languages.")
3977 (license license:expat)))
3978
3979(define-public python-docspec-python
3980 (package
3981 (name "python-docspec-python")
3982 (version "2.2.1")
3983 (source
3984 (origin
3985 (method url-fetch)
3986 (uri (pypi-uri "docspec_python" version))
3987 (sha256
3988 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
3989 (build-system pyproject-build-system)
3990 (arguments
3991 (list #:tests? #false)) ;there are none
3992 (propagated-inputs (list python-docspec python-nr-util))
3993 (native-inputs (list python-poetry-core))
3994 (home-page "https://github.com/NiklasRosenstein/docspec/")
3995 (synopsis "Produce docspec data from Python source code")
3996 (description
3997 "This package provides a parser based on @code{lib2to3} producing
3998@code{docspec} data from Python source code.")
3999 (license license:expat)))
4000
4001(define-public python-fqdn
4002 (package
4003 (name "python-fqdn")
4004 (version "1.5.1")
4005 (source
4006 (origin
4007 (method url-fetch)
4008 (uri (pypi-uri "fqdn" version))
4009 (sha256
4010 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
4011 (build-system pyproject-build-system)
4012 (arguments (list #:tests? #false)) ;there are none
4013 (propagated-inputs (list python-cached-property))
4014 (native-inputs (list python-setuptools python-wheel))
4015 (home-page "https://github.com/ypcrts/fqdn")
4016 (synopsis "Validate domain names against RFC 1123")
4017 (description
4018 "This package validates fully-qualified domain names against RFC 1123, so
4019that they are acceptable to modern bowsers")
4020 (license license:mpl2.0)))
4021
4022(define-public python-fire
4023 (package
4024 (name "python-fire")
4025 (version "0.7.0")
4026 (source
4027 (origin
4028 (method url-fetch)
4029 (uri (pypi-uri "fire" version))
4030 (sha256
4031 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
4032 (build-system pyproject-build-system)
4033 (propagated-inputs (list python-termcolor))
4034 (native-inputs (list python-pytest python-setuptools python-wheel))
4035 (synopsis "Library for automatically generating command line interfaces")
4036 (description
4037 "Fire is a library for automatically generating command line interfaces
4038from absolutely any Python object. The following are the advantages:
4039@itemize
4040@item A simple way to create a CLI in Python.
4041@item A helpful tool for developing and debugging Python code.
4042@item Helps with exploring existing code or turning other people's code into a
4043command line interface.
4044@item Makes transitioning between Bash and Python easier.
4045@item Makes using a Python REPL easier by setting up the REPL with the modules
4046and variables you'll need already imported and created.
4047@end itemize")
4048 (home-page "https://github.com/google/python-fire")
4049 (license license:asl2.0)))
4050
4051(define-public python-fit-nbinom
4052 (package
4053 (name "python-fit-nbinom")
4054 (version "1.1")
4055 (source (origin
4056 (method url-fetch)
4057 (uri (pypi-uri "fit_nbinom" version))
4058 (sha256
4059 (base32
4060 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
4061 (build-system pyproject-build-system)
4062 (arguments
4063 (list
4064 #:tests? #false ;there are none
4065 #:phases
4066 '(modify-phases %standard-phases
4067 (add-after 'unpack 'remove-invalid-syntax
4068 (lambda _
4069 (substitute* "setup.py"
4070 ((".\\*\"") "\"")))))))
4071 (propagated-inputs (list python-numpy python-scipy))
4072 (native-inputs (list python-setuptools python-wheel))
4073 (home-page "https://github.com/joachimwolff/fit_nbinom")
4074 (synopsis "Negative binomial maximum likelihood estimator")
4075 (description "This package provides an implementation in Python using
4076scipy and numpy of negative binomial maximum likelihood estimation.")
4077 (license license:gpl3+)))
4078
4079(define-public python-docrep
4080 (package
4081 (name "python-docrep")
4082 (version "0.3.2")
4083 (source (origin
4084 (method url-fetch)
4085 (uri (pypi-uri "docrep" version))
4086 (sha256
4087 (base32
4088 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
4089 (build-system pyproject-build-system)
4090 (propagated-inputs (list python-six))
4091 (native-inputs (list python-pytest python-setuptools python-wheel))
4092 (home-page "https://github.com/Chilipp/docrep")
4093 (synopsis "Python package for docstring repetition")
4094 (description "Docrep is the documentation repetition module. This module
4095targets developers that develop complex and nested Python APIs and helps them
4096to create a well-documented piece of software.")
4097 (license license:asl2.0)))
4098
4099(define-public python-dotmap
4100 (package
4101 (name "python-dotmap")
4102 (version "1.3.30")
4103 (source
4104 (origin
4105 (method url-fetch)
4106 (uri (pypi-uri "dotmap" version))
4107 (sha256
4108 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
4109 (build-system pyproject-build-system)
4110 (arguments (list #:test-backend #~'unittest))
4111 (native-inputs (list python-setuptools))
4112 (home-page "https://github.com/drgrib/dotmap")
4113 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
4114 (description
4115 "DotMap is a dot-access dictionary subclass that has dynamic
4116hierarchy creation, can be initialized with keys, can be initialized from a
4117dictionary, can be convert to a dictionary, and is ordered by insertion.")
4118 (license license:expat)))
4119
4120(define-public python-dotty-dict
4121 (package
4122 (name "python-dotty-dict")
4123 (version "1.3.1")
4124 (source
4125 (origin
4126 (method git-fetch)
4127 (uri (git-reference
4128 (url "https://github.com/pawelzny/dotty_dict")
4129 (commit (string-append "v" version))))
4130 (sha256
4131 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
4132 (build-system pyproject-build-system)
4133 (native-inputs
4134 (list python-poetry-core
4135 python-pytest
4136 python-setuptools))
4137 (home-page "https://github.com/pawelzny/dotty_dict")
4138 (synopsis "Python library for accessing dictionaries using a dot syntax")
4139 (description "This package provides a library that wraps the traditional
4140Python dictionaries and provides a syntax to access nested dictionaries values
4141using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
4142 (license license:expat)))
4143
4144(define-public python-affine
4145 (package
4146 (name "python-affine")
4147 (version "2.4.0")
4148 (source (origin
4149 (method url-fetch)
4150 (uri (pypi-uri "affine" version))
4151 (sha256
4152 (base32
4153 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
4154 (build-system pyproject-build-system)
4155 (propagated-inputs (list python-flake8
4156 python-pytest python-pytest-cov))
4157 (native-inputs (list python-flit-core))
4158 (home-page "https://github.com/rasterio/affine")
4159 (synopsis "Matrices describing affine transformation of the plane")
4160 (description "This is a package for matrices describing the affine
4161transformation of the plane.")
4162 (license license:bsd-3)))
4163
4164(define-public python-argopt
4165 (package
4166 (name "python-argopt")
4167 (version "0.9.1")
4168 (source
4169 (origin
4170 (method url-fetch)
4171 (uri (pypi-uri "argopt" version))
4172 (sha256
4173 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
4174 (build-system pyproject-build-system)
4175 (native-inputs
4176 (list python-pytest
4177 python-pytest-timeout
4178 python-setuptools
4179 python-setuptools-scm
4180 python-wheel))
4181 (home-page "https://github.com/casperdcl/argopt")
4182 (synopsis "Generate a command-line interface from a docstring")
4183 (description
4184 "This package provides tools to define a command line interface
4185from a docstring rather than the other way around.")
4186 (license license:mpl2.0)))
4187
4188(define-public python-array-api-compat
4189 (package
4190 (name "python-array-api-compat")
4191 (version "1.12.0")
4192 (source
4193 (origin
4194 (method url-fetch)
4195 (uri (pypi-uri "array_api_compat" version))
4196 (sha256
4197 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
4198 (build-system pyproject-build-system)
4199 ;; Tests would require all supported array libraries, including pytorch
4200 (arguments (list #:tests? #false))
4201 (native-inputs
4202 (list python-setuptools))
4203 (home-page "https://data-apis.org/array-api-compat/")
4204 (synopsis "Array API compatibility wrapper for NumPy et al")
4205 (description
4206 "This package provides a wrapper around @code{NumPy} and other array
4207libraries to make them compatible with the Array API standard")
4208 (license license:expat)))
4209
4210(define-public python-array-api-strict
4211 (package
4212 (name "python-array-api-strict")
4213 (version "2.4.1")
4214 (source
4215 (origin
4216 (method url-fetch)
4217 (uri (pypi-uri "array_api_strict" version))
4218 (sha256
4219 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
4220 (build-system pyproject-build-system)
4221 (arguments
4222 (list
4223 ;; tests: 584 passed, 1 skipped, 2 deselected
4224 #:test-flags
4225 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
4226 #~(list "-k" (string-append "not test_disabled_extensions"
4227 " and not test_environment_variables"))))
4228 (native-inputs
4229 (list python-pytest
4230 python-setuptools
4231 python-setuptools-scm))
4232 (propagated-inputs
4233 (list python-numpy))
4234 (home-page "https://data-apis.org/array-api-strict/")
4235 (synopsis "Strict implementation of the Python array API")
4236 (description
4237 "@code{array_api_strict} is a strict, minimal implementation of the
4238@url{https://data-apis.org/array-api/latest/, Python array API}.
4239
4240The purpose of array-api-strict is to provide an implementation of the array
4241API for consuming libraries to test against so they can be completely sure
4242their usage of the array API is portable.")
4243 (license license:bsd-3)))
4244
4245(define-public python-cachedir-tag
4246 (package
4247 (name "python-cachedir-tag")
4248 (version "0.0.4")
4249 (source
4250 (origin
4251 (method git-fetch)
4252 (uri (git-reference
4253 (url "https://github.com/moreati/python-cachedir-tag")
4254 (commit (string-append "v" version))))
4255 (file-name (git-file-name name version))
4256 (sha256
4257 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
4258 (build-system pyproject-build-system)
4259 (arguments '(#:tests? #f)) ;no test
4260 (native-inputs (list python-setuptools))
4261 (home-page "https://github.com/moreati/python-cachedir-tag")
4262 (synopsis
4263 "Handle @file{CACHEDIR.TAG} in cache directories")
4264 (description
4265 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
4266a file llowing any arbitrary directory to be marked as a cache directory.")
4267 (license license:expat)))
4268
4269(define-public python-cachetools
4270 (package
4271 (name "python-cachetools")
4272 (version "6.1.0")
4273 (source
4274 (origin
4275 (method url-fetch)
4276 (uri (pypi-uri "cachetools" version))
4277 (sha256
4278 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
4279 (build-system pyproject-build-system)
4280 (native-inputs
4281 (list python-pytest
4282 python-setuptools
4283 python-wheel))
4284 (home-page "https://github.com/tkem/cachetools/")
4285 (synopsis "Extensible memoizing collections and decorators")
4286 (description "This module provides various memoizing collections and
4287decorators, including variants of the Python standard library's
4288@code{lru_cache} function decorator.")
4289 (license license:expat)))
4290
4291(define-public python-cachetools-5
4292 (package
4293 (inherit python-cachetools)
4294 (version "5.5.2")
4295 (source
4296 (origin
4297 (method url-fetch)
4298 (uri (pypi-uri "cachetools" version))
4299 (sha256
4300 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
4301
4302(define-public python-colorclass
4303 (package
4304 (name "python-colorclass")
4305 (version "2.2.2")
4306 (source
4307 (origin
4308 (method git-fetch)
4309 (uri (git-reference
4310 (url "https://github.com/matthewdeanmartin/colorclass")
4311 (commit (string-append "v" version))))
4312 (file-name (git-file-name name version))
4313 (sha256
4314 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
4315 (build-system pyproject-build-system)
4316 (arguments
4317 (list
4318 #:test-flags
4319 #~(list "-k" "not test_piped") ; Unclear why this test fails.
4320 #:phases
4321 #~(modify-phases %standard-phases
4322 (add-after 'unpack 'use-poetry-core
4323 (lambda _
4324 ;; Patch to use the core poetry API.
4325 (substitute* "pyproject.toml"
4326 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
4327 (native-inputs (list python-poetry-core python-pytest))
4328 (home-page "https://github.com/matthewdeanmartin/colorclass")
4329 (synopsis "Colorful console applications with Python")
4330 (description
4331 "This package provides an ANSI color text library for Python. It
4332provides automatic coloring for dark or light terminals.")
4333 (license license:expat)))
4334
4335(define-public python-colorcet
4336 (package
4337 (name "python-colorcet")
4338 (version "3.1.1a1")
4339 (source
4340 (origin
4341 (method url-fetch)
4342 (uri (pypi-uri "colorcet" version))
4343 (sha256
4344 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
4345 (build-system pyproject-build-system)
4346 (native-inputs (list python-nbval
4347 python-packaging
4348 python-pytest
4349 python-pytest-mpl
4350 python-setuptools
4351 python-setuptools-scm))
4352 (home-page "https://colorcet.holoviz.org/")
4353 (synopsis "Collection of perceptually uniform colormaps")
4354 (description "Colorcet is a collection of perceptually accurate 256-color
4355colormaps for use with Python plotting programs like Bokeh, Matplotlib,
4356HoloViews, and Datashader.")
4357 (license license:cc-by4.0)))
4358
4359(define-public python-colored
4360 (package
4361 (name "python-colored")
4362 (version "2.3.0")
4363 (source (origin
4364 (method git-fetch)
4365 (uri (git-reference
4366 (url "https://gitlab.com/dslackw/colored")
4367 (commit version)))
4368 (file-name (git-file-name name version))
4369 (sha256
4370 (base32
4371 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
4372 (build-system pyproject-build-system)
4373 (arguments
4374 (list
4375 #:phases
4376 #~(modify-phases %standard-phases
4377 (add-before 'check 'pre-check
4378 (lambda _
4379 ;; Tests expect ANSI escape codes for colors.
4380 (setenv "FORCE_COLOR" "1"))))))
4381 (native-inputs (list python-flit-core python-pytest))
4382 (home-page "https://gitlab.com/dslackw/colored")
4383 (synopsis "Simple library for color and formatting to terminal")
4384 (description "This is a very simple Python library for color and
4385formatting in the terminal. It comes with a collection of color codes and
4386names for 256 color terminal setups.")
4387 (license license:expat)))
4388
4389(define-public python-colored-traceback
4390 ;; No tags in upstream repository.
4391 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
4392 (revision "0"))
4393 (package
4394 (name "python-colored-traceback")
4395 (version (git-version "0.4.2" revision commit))
4396 (source
4397 (origin
4398 (method git-fetch)
4399 (uri (git-reference
4400 (url "https://github.com/staticshock/colored-traceback.py")
4401 (commit commit)))
4402 (file-name (git-file-name name version))
4403 (sha256
4404 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4405 (build-system pyproject-build-system)
4406 (arguments
4407 ;; Tests are incompatible with current python version.
4408 (list #:tests? #f))
4409 (propagated-inputs (list python-colorama python-pygments))
4410 (native-inputs (list python-setuptools python-wheel))
4411 (home-page "https://github.com/staticshock/colored-traceback.py")
4412 (synopsis "Automatically color uncaught exception tracebacks")
4413 (description "This package provides python utilities to automatically
4414color uncaught exception tracebacks.")
4415 (license license:isc))))
4416
4417(define-public python-colorful
4418 (package
4419 (name "python-colorful")
4420 (version "0.5.8")
4421 (source
4422 (origin
4423 (method git-fetch)
4424 (uri (git-reference
4425 (url "https://github.com/timofurrer/colorful")
4426 (commit (string-append "v" version))))
4427 (file-name (git-file-name name version))
4428 (sha256
4429 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4430 (build-system pyproject-build-system)
4431 (native-inputs
4432 (list python-pytest
4433 python-setuptools))
4434 (propagated-inputs
4435 (list python-colorama))
4436 (home-page "http://github.com/timofurrer/colorful")
4437 (synopsis "Terminal string styling")
4438 (description "Colorful provides an array of text styles, that can be used
4439as functions or string constants to form colored terminal output.")
4440 (license license:expat)))
4441
4442(define-public python-colorthief
4443 (package
4444 (name "python-colorthief")
4445 (version "0.2.1")
4446 (source
4447 (origin
4448 (method url-fetch)
4449 (uri (pypi-uri "colorthief" version))
4450 (sha256
4451 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4452 (build-system pyproject-build-system)
4453 (arguments
4454 (list #:tests? #f)) ;no tests in PyPI or Git
4455 (native-inputs (list python-setuptools))
4456 (propagated-inputs (list python-pillow))
4457 (home-page "https://github.com/fengsp/color-thief-py")
4458 (synopsis "Grab the color palette of an image")
4459 (description
4460 "This package provides methods to determine the dominant color
4461of an image, as well as constructing a representative color palette.")
4462 (license license:bsd-3)))
4463
4464(define-public python-construct-classes
4465 (package
4466 (name "python-construct-classes")
4467 (version "0.1.2")
4468 (source
4469 (origin
4470 (method git-fetch)
4471 (uri (git-reference
4472 (url "https://github.com/matejcik/construct-classes")
4473 (commit (string-append "v" version))))
4474 (file-name (git-file-name name version))
4475 (sha256
4476 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4477 (build-system pyproject-build-system)
4478 (propagated-inputs
4479 (list python-construct))
4480 (native-inputs
4481 (list python-poetry-core
4482 python-pytest))
4483 (home-page "https://github.com/matejcik/construct-classes")
4484 (synopsis "Parse binary structs into dataclasses")
4485 (description "This package provides a parser to parse binary structs
4486into dataclasses.")
4487 (license license:expat)))
4488
4489(define-public python-contourpy
4490 (package
4491 (name "python-contourpy")
4492 (version "1.3.3")
4493 (source
4494 (origin
4495 (method url-fetch)
4496 (uri (pypi-uri "contourpy" version))
4497 (sha256
4498 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4499 (build-system pyproject-build-system)
4500 (arguments
4501 (list
4502 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4503 #:test-flags
4504 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4505 #~(list "-m" "not image"
4506 ;; Tests that pass but avoided for load reasons.
4507 "-k" "not test_filled_random_big and not test_lines_random_big")))
4508 (native-inputs
4509 (list pybind11-2
4510 python-meson
4511 python-pytest
4512 python-wurlitzer))
4513 (propagated-inputs
4514 (list python-numpy))
4515 (home-page "https://contourpy.readthedocs.io/")
4516 (synopsis
4517 "Python library for calculating contours of 2D quadrilateral grids")
4518 (description
4519 "ContourPy is a Python library for calculating contours of 2D
4520quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4521 (license license:bsd-3)))
4522
4523(define-public python-lunr
4524 (package
4525 (name "python-lunr")
4526 (version "0.8.0")
4527 (source
4528 (origin
4529 (method url-fetch)
4530 (uri
4531 (pypi-uri "lunr" version))
4532 (sha256
4533 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4534 (build-system pyproject-build-system)
4535 (arguments
4536 (list
4537 #:test-flags
4538 '(list "-k" "not TestLanguageSupport"
4539 "--ignore-glob=tests/acceptance_tests/*")))
4540 (native-inputs
4541 (list python-hatch-fancy-pypi-readme
4542 python-hatchling
4543 python-pytest
4544 python-pytest-timeout))
4545 (propagated-inputs
4546 (list python-nltk))
4547 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4548 (synopsis "Full-text search library")
4549 (description "This package provides python library for full-text search.
4550It indexes documents and provides a search interface for retrieving documents
4551that best match text queries.")
4552 (license license:expat)))
4553
4554(define-public python-mdit-py-plugins
4555 (package
4556 (name "python-mdit-py-plugins")
4557 (version "0.5.0")
4558 (source (origin
4559 (method git-fetch) ;for tests
4560 (uri (git-reference
4561 (url "https://github.com/executablebooks/mdit-py-plugins")
4562 (commit (string-append "v" version))))
4563 (file-name (git-file-name name version))
4564 (sha256
4565 (base32
4566 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4567 (build-system pyproject-build-system)
4568 (propagated-inputs
4569 (list python-markdown-it-py
4570 python-attrs))
4571 (native-inputs
4572 (list python-flit-core
4573 python-pytest
4574 python-pytest-regressions))
4575 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4576 (synopsis "Collection of plugins for markdown-it-py")
4577 (description "This package contains a collection of plugins for
4578@code{markdown-it-py} like:
4579@enumerate
4580@item amsmath,
4581@item attrs,
4582@item container,
4583@item definition list,
4584@item dollarmath,
4585@item field list,
4586@item footnote,
4587@item textmath, and
4588@item wordcount.
4589@end enumerate")
4590 (license license:expat)))
4591
4592(define-public python-mdurl
4593 (package
4594 (name "python-mdurl")
4595 (version "0.1.2")
4596 (source
4597 (origin
4598 (method git-fetch) ; no tests data in PyPi package
4599 (uri (git-reference
4600 (url "https://github.com/executablebooks/mdurl")
4601 (commit version)))
4602 (file-name (git-file-name name version))
4603 (sha256
4604 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4605 (build-system pyproject-build-system)
4606 (native-inputs (list python-flit python-pytest))
4607 (home-page "https://github.com/executablebooks/mdurl")
4608 (synopsis "Markdown URL utilities")
4609 (description
4610 "This package implements a Python port of the JavaScript @code{mdurl}.")
4611 (license license:expat)))
4612
4613(define-public python-mkdocs
4614 (package
4615 (name "python-mkdocs")
4616 (version "1.6.1")
4617 (source
4618 (origin
4619 (method git-fetch)
4620 (uri (git-reference
4621 (url "https://github.com/mkdocs/mkdocs")
4622 (commit version)))
4623 (file-name (git-file-name name version))
4624 (sha256
4625 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4626 (build-system pyproject-build-system)
4627 (arguments
4628 (list
4629 ;; tests: 687 passed
4630 #:test-backend #~'unittest
4631 #:test-flags
4632 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4633 #:phases
4634 #~(modify-phases %standard-phases
4635 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4636 ;; to run tests with pytest (and thus ignore them selectively).
4637 (add-before 'check 'delete-failing-tests
4638 (lambda _
4639 (delete-file "mkdocs/tests/cli_tests.py"))))))
4640 (native-inputs
4641 (list python-hatchling
4642 python-setuptools))
4643 (propagated-inputs
4644 (list python-click
4645 python-ghp-import
4646 python-jinja2
4647 python-markdown
4648 python-markupsafe
4649 python-mergedeep
4650 python-mkdocs-get-deps
4651 python-packaging
4652 python-pathspec
4653 python-pyyaml
4654 python-pyyaml-env-tag
4655 python-watchdog
4656 ;; [optional]
4657 python-babel))
4658 (home-page "https://www.mkdocs.org")
4659 (synopsis "Project documentation with Markdown")
4660 (description
4661 "MkDocs is a static site generator geared towards building project
4662documentation. Documentation source files are written in Markdown, and
4663configured with a single YAML configuration file.")
4664 (license license:bsd-3)))
4665
4666(define-public python-mkdocs-get-deps
4667 (package
4668 (name "python-mkdocs-get-deps")
4669 (version "0.2.0")
4670 (source
4671 (origin
4672 (method git-fetch)
4673 (uri (git-reference
4674 (url "https://github.com/mkdocs/get-deps")
4675 (commit (string-append "v" version))))
4676 (file-name (git-file-name name version))
4677 (sha256
4678 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4679 (build-system pyproject-build-system)
4680 (native-inputs
4681 (list python-pytest
4682 python-hatchling))
4683 (propagated-inputs
4684 (list python-mergedeep
4685 python-platformdirs
4686 python-pyyaml))
4687 (home-page "https://github.com/mkdocs/get-deps")
4688 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4689 (description
4690 "This package provides an @code{MkDocs} extension that lists all dependencies
4691according to a mkdocs.yml file. This command guesses the Python dependencies
4692that a MkDocs site requires in order to build. It simply prints the PyPI
4693packages that need to be installed.")
4694 (license license:expat)))
4695
4696(define-public python-mkdocs-markdownextradata-plugin
4697 (package
4698 (name "python-mkdocs-markdownextradata-plugin")
4699 (version "0.2.5")
4700 (source
4701 (origin
4702 (method git-fetch)
4703 (uri (git-reference
4704 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4705 (commit version)))
4706 (file-name (git-file-name name version))
4707 (sha256
4708 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4709 (build-system pyproject-build-system)
4710 (native-inputs (list python-pytest python-setuptools))
4711 (propagated-inputs (list python-mkdocs python-pyyaml))
4712 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4713 (synopsis "Inject extra variables into the MkDocs markdown template")
4714 (description
4715 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4716variables into the markdown template.")
4717 (license license:expat)))
4718
4719(define-public python-docstring-to-markdown
4720 (package
4721 (name "python-docstring-to-markdown")
4722 (version "0.15")
4723 (source
4724 (origin
4725 (method url-fetch)
4726 (uri (pypi-uri "docstring-to-markdown" version))
4727 (sha256
4728 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4729 (build-system pyproject-build-system)
4730 (native-inputs
4731 (list python-pytest
4732 python-setuptools))
4733 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4734 (synopsis "On the fly conversion of Python docstrings to markdown")
4735 (description
4736 "This module can convert Python docstrings to Markdown. It can recognise
4737reStructuredText inside docstrings and convert multiple of its features to
4738Markdown. It also includes initial support for Google-formatted docstrings.")
4739 (license license:lgpl2.1+)))
4740
4741(define-public python-pdoc
4742 (package
4743 (name "python-pdoc")
4744 (version "13.0.1")
4745 (source (origin
4746 (method git-fetch)
4747 (uri (git-reference
4748 (url "https://github.com/mitmproxy/pdoc")
4749 (commit (string-append "v" version))))
4750 (file-name (git-file-name name version))
4751 (sha256
4752 (base32
4753 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4754 (build-system pyproject-build-system)
4755 (native-inputs (list python-pytest python-jinja2 python-pygments
4756 python-setuptools python-wheel))
4757 (arguments
4758 (list
4759 ;; Some tests fail, presumably because of slight version mismatches of
4760 ;; the dependencies.
4761 #:test-flags
4762 '(list "-k" (string-append "not test_var_with_raising_repr and "
4763 "not test_smoke[mock] and "
4764 "not test_snapshots[html"))))
4765 (home-page "https://pdoc.dev/")
4766 (synopsis "API documentation for Python projects")
4767 (description "pdoc auto-generates API documentation that follows your
4768project's Python module hierarchy. It requires no configuration, has
4769first-class support for type annotations, cross-links between identifiers,
4770comes with an integrated live-reloading web server, uses customizable HTML
4771templates, understands numpydoc and Google-style docstrings.")
4772 (license license:unlicense)))
4773
4774(define-public python-py4j
4775 (package
4776 (name "python-py4j")
4777 (version "0.10.9.7")
4778 (source (origin
4779 (method url-fetch)
4780 (uri (pypi-uri "py4j" version))
4781 (sha256
4782 (base32
4783 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4784 (build-system pyproject-build-system)
4785 (arguments (list #:tests? #f)) ; Requires a running JVM?
4786 (native-inputs (list python-setuptools))
4787 (home-page "https://www.py4j.org/")
4788 (synopsis "Dynamically access arbitrary Java objects from Python")
4789 (description
4790 "This package enables Python programs to dynamically access arbitrary
4791Java objects.")
4792 (license license:bsd-3)))
4793
4794(define-public python-pymdown-extensions
4795 (package
4796 (name "python-pymdown-extensions")
4797 (version "10.16.1")
4798 (source
4799 (origin
4800 (method git-fetch)
4801 (uri (git-reference
4802 (url "https://github.com/facelessuser/pymdown-extensions")
4803 (commit version)))
4804 (file-name (git-file-name name version))
4805 (sha256
4806 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
4807 (build-system pyproject-build-system)
4808 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
4809 (arguments
4810 (list #:tests? #f))
4811 (native-inputs (list python-hatchling python-pytest python-pyyaml))
4812 (propagated-inputs (list python-markdown))
4813 (home-page "https://github.com/facelessuser/pymdown-extensions")
4814 (synopsis "Extension pack for Python Markdown")
4815 (description
4816 "PyMdown Extensions is a collection of extensions for Python Markdown.
4817All extensions are found under the module namespace of pymdownx.")
4818 (license license:expat)))
4819
4820(define-public python-plotext
4821 (package
4822 (name "python-plotext")
4823 (version "5.2.8")
4824 (source (origin
4825 (method url-fetch)
4826 (uri (pypi-uri "plotext" version))
4827 (sha256
4828 (base32
4829 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
4830 (build-system pyproject-build-system)
4831 (arguments (list #:tests? #false)) ;there are none
4832 (native-inputs (list python-setuptools python-wheel))
4833 (home-page "https://github.com/piccolomo/plotext")
4834 (synopsis "Plots in the terminal")
4835 (description "Plotext lets you plot directly to the terminal.")
4836 (license license:expat)))
4837
4838(define-public python-plotille
4839 (package
4840 (name "python-plotille")
4841 (version "5.0.0")
4842 (source
4843 (origin
4844 (method git-fetch)
4845 (uri (git-reference
4846 (url "https://github.com/tammoippen/plotille")
4847 (commit (string-append "v" version))))
4848 (file-name (git-file-name name version))
4849 (sha256
4850 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
4851 (modules '((guix build utils)))
4852 (snippet
4853 #~(begin
4854 ;; Without deleting ./imgs setuptools complains as follows: error:
4855 ;; Multiple top-level packages discovered in a flat-layout:
4856 ;; ['imgs', 'plotille'].
4857 (delete-file-recursively "./imgs")))))
4858 (build-system pyproject-build-system)
4859 (native-inputs
4860 (list python-pytest
4861 python-mock
4862 python-pendulum
4863 python-pytest-mock
4864 python-setuptools
4865 python-wheel))
4866 (home-page "https://github.com/tammoippen/plotille")
4867 (synopsis "Plot in the terminal using braille dots")
4868 (description
4869 "Plotille provides a figure class and graphing functions to create plots,
4870scatter plots, histograms and heatmaps in the terminal using braille dots.")
4871 (license license:expat)))
4872
4873(define-public python-poetry-dynamic-versioning
4874 (package
4875 (name "python-poetry-dynamic-versioning")
4876 (version "1.9.1")
4877 (source
4878 (origin
4879 (method url-fetch)
4880 (uri (pypi-uri "poetry_dynamic_versioning" version))
4881 (sha256
4882 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
4883 (build-system pyproject-build-system)
4884 (arguments
4885 (list
4886 #:test-flags
4887 #~(list "--ignore=tests/test_integration.py"
4888 "-k" (string-join
4889 ;; Tests searching for VCS back end.
4890 (list "not test__get_version__defaults"
4891 "test__enable_in_doc__project_with_dynamic"
4892 "test__enable_in_doc__project_with_version"
4893 "test__get_version__format_jinja"
4894 "test__get_version__format_jinja_imports_with_module_and_item"
4895 "test__get_version__format_jinja_imports_with_module_only"
4896 "test__get_version__format_jinja_with_enforced_style")
4897 " and not "))))
4898 (native-inputs
4899 (list python-poetry-core
4900 python-pytest))
4901 (propagated-inputs
4902 (list python-dunamai
4903 python-jinja2
4904 python-tomlkit))
4905 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
4906 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
4907 (description
4908 "This package provides a build backend that patches Poetry Core to enable
4909the versioning system in PEP 517 build frontends.")
4910 (license license:expat)))
4911
4912(define-public python-poetry-plugin-export
4913 (package
4914 (name "python-poetry-plugin-export")
4915 (version "1.10.0")
4916 (source
4917 (origin
4918 (method url-fetch)
4919 (uri (pypi-uri "poetry_plugin_export" version))
4920 (sha256
4921 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
4922 (build-system pyproject-build-system)
4923 (arguments
4924 (list
4925 #:tests? #f)) ;tests cycle with poetry
4926 (native-inputs
4927 (list python-poetry-core))
4928 (propagated-inputs
4929 (list python-cachy
4930 python-pendulum
4931 python-poetry-core
4932 python-tomlkit))
4933 (home-page "https://python-poetry.org/")
4934 (synopsis "Poetry plugin to export the dependencies to various formats")
4935 (description
4936 "Poetry plugin to export the dependencies to various formats.")
4937 (license license:expat)))
4938
4939(define-public python-portpicker
4940 (package
4941 (name "python-portpicker")
4942 (version "1.6.0")
4943 (source
4944 (origin
4945 (method url-fetch)
4946 (uri (pypi-uri "portpicker" version))
4947 (sha256
4948 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
4949 (build-system pyproject-build-system)
4950 (arguments
4951 (list
4952 #:test-flags
4953 ;; This fails because portserver ends up in bin, not site-packages
4954 '(list "--ignore=src/tests/portserver_test.py")))
4955 (propagated-inputs (list python-psutil))
4956 (native-inputs (list python-pytest python-setuptools python-wheel
4957 net-tools))
4958 (home-page "https://github.com/google/python_portpicker")
4959 (synopsis "Choose unique available network ports")
4960 (description
4961 "This package provides a library to choose unique available network
4962ports.")
4963 (license license:asl2.0)))
4964
4965(define-public python-md-ulb-pwrap
4966 (package
4967 (name "python-md-ulb-pwrap")
4968 (version "0.1.3")
4969 (source
4970 (origin
4971 (method git-fetch)
4972 (uri (git-reference
4973 (url "https://github.com/mondeja/md-ulb-pwrap")
4974 (commit (string-append "v" version))))
4975 (file-name (git-file-name name version))
4976 (sha256
4977 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
4978 (build-system pyproject-build-system)
4979 (arguments
4980 (list
4981 #:imported-modules `(,@%cargo-build-system-modules
4982 ,@%pyproject-build-system-modules)
4983 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4984 (guix build pyproject-build-system)
4985 (guix build utils))
4986 #:test-backend #~'custom
4987 #:test-flags #~(list "test.py")
4988 #:phases
4989 #~(modify-phases %standard-phases
4990 (add-after 'unpack 'prepare-cargo-build-system
4991 (lambda args
4992 (for-each
4993 (lambda (phase)
4994 (format #t "Running cargo phase: ~a~%" phase)
4995 (apply (assoc-ref cargo:%standard-phases phase)
4996 #:cargo-target #$(cargo-triplet)
4997 args))
4998 '(unpack-rust-crates
4999 configure
5000 check-for-pregenerated-files
5001 patch-cargo-checksums))))
5002 (add-after 'prepare-cargo-build-system 'chdir
5003 (lambda _
5004 (chdir "python"))))))
5005 (native-inputs
5006 (append
5007 (list maturin
5008 python-pytest
5009 python-unicode-linebreak
5010 rust
5011 `(,rust "cargo"))
5012 (or (and=> (%current-target-system)
5013 (compose list make-rust-sysroot))
5014 '())))
5015 (inputs (cargo-inputs 'md_ulb_pwrap))
5016 (home-page "https://github.com/mondeja/md-ulb-pwrap")
5017 (synopsis "Markdown paragraph wrapper")
5018 (description
5019 "This package provides a Markdown paragraph wrapper using Unicode Line
5020Breaking Algorithm written in Rust with Python bindings.")
5021 (license license:expat)))
5022
5023(define-public python-mdx-gh-links
5024 (package
5025 (name "python-mdx-gh-links")
5026 (version "0.4")
5027 (source
5028 (origin
5029 (method url-fetch)
5030 (uri (pypi-uri "mdx_gh_links" version))
5031 (sha256
5032 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
5033 (build-system pyproject-build-system)
5034 (arguments (list #:tests? #f)) ;tests connect github
5035 (native-inputs (list python-setuptools))
5036 (propagated-inputs (list python-markdown))
5037 (home-page "https://github.com/Python-Markdown/github-links/")
5038 (synopsis "Python-Markdown extension adding support for shorthand links")
5039 (description "This package is an extension to Python-Markdown which adds
5040support for shorthand links to GitHub users, repositories, issues and
5041commits.")
5042 (license license:bsd-3)))
5043
5044(define-public python-mkdocs-material
5045 (package
5046 (name "python-mkdocs-material")
5047 (version "7.3.6")
5048 (source
5049 (origin
5050 (method git-fetch)
5051 (uri (git-reference
5052 (url "https://github.com/squidfunk/mkdocs-material")
5053 (commit version)))
5054 (file-name (git-file-name name version))
5055 (sha256
5056 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
5057 (modules '((guix build utils)))
5058 (snippet
5059 ;; TODO There are still bundled assets and minified JS.
5060 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
5061 (build-system pyproject-build-system)
5062 (arguments
5063 (list
5064 #:tests? #f ; No tests.
5065 #:phases
5066 #~(let ((symlink-js
5067 (lambda (inputs)
5068 (for-each
5069 (lambda (lang)
5070 (let* ((filename (string-append "lunr." lang ".min.js"))
5071 (file (string-append "share/javascript/" filename)))
5072 (symlink (search-input-file inputs file) filename)))
5073 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
5074 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
5075 "vi")))))
5076 (modify-phases %standard-phases
5077 ;; Requirement mkdocs-material-extensions
5078 ;; in-turn requires mkdocs-material. This causes
5079 ;; circular dependency, so we remove this requirement.
5080 (add-after 'unpack 'patch-requirements
5081 (lambda _
5082 (substitute* "requirements.txt"
5083 (("mkdocs-material-extensions.*$")
5084 ""))))
5085 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
5086 (lambda* (#:key inputs #:allow-other-keys)
5087 (mkdir-p "material/assets/javascripts/lunr/min")
5088 (with-directory-excursion "material/assets/javascripts/lunr/min"
5089 (symlink-js inputs))))
5090 (add-after 'wrap 'replace-javascript-assets
5091 (lambda* (#:key inputs outputs #:allow-other-keys)
5092 (let* ((site (site-packages inputs outputs))
5093 (js-assets (string-append site "/material/"
5094 "assets/javascripts")))
5095 (with-directory-excursion js-assets
5096 (delete-file-recursively "lunr/min")
5097 (mkdir-p "lunr/min")
5098 (with-directory-excursion "lunr/min"
5099 (symlink-js inputs))))))))))
5100 (native-inputs (list python-setuptools))
5101 (inputs (list js-lunr-ar
5102 js-lunr-da
5103 js-lunr-de
5104 js-lunr-es
5105 js-lunr-fi
5106 js-lunr-fr
5107 js-lunr-hu
5108 js-lunr-it
5109 js-lunr-ja
5110 js-lunr-nl
5111 js-lunr-no
5112 js-lunr-pt
5113 js-lunr-ro
5114 js-lunr-ru
5115 js-lunr-sv
5116 js-lunr-tr
5117 js-lunr-vi
5118 js-lunr-multi
5119 js-lunr-stemmer-support))
5120 (propagated-inputs
5121 (list python-markdown python-mkdocs python-pygments
5122 python-pymdown-extensions))
5123 (home-page "https://squidfunk.github.io/mkdocs-material/")
5124 (synopsis "Material Design theme for MkDocs")
5125 (description "This package provides a theme plugin for the static site
5126generator MkDocs.")
5127 (license license:expat)))
5128
5129(define-public python-nanobind
5130 (package
5131 (name "python-nanobind")
5132 (version "2.10.2")
5133 (source
5134 (origin
5135 (method url-fetch)
5136 (uri (pypi-uri "nanobind" version))
5137 (sha256
5138 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
5139 (build-system pyproject-build-system)
5140 (arguments
5141 (list
5142 ;; tests: 466 passed, 27 skipped
5143 #:phases
5144 #~(modify-phases %standard-phases
5145 (add-before 'build 'configure-cmake
5146 (lambda _
5147 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
5148 (add-after 'configure-cmake 'build-c++
5149 (lambda _
5150 (invoke "cmake" "--build" "build" "-j" "2")))
5151 (add-before 'check 'pre-check
5152 (lambda _ (chdir "build"))))))
5153 (native-inputs
5154 (list cmake-minimal
5155 python-numpy
5156 python-pathspec
5157 python-pytest
5158 python-scikit-build-core
5159 python-scipy))
5160 (inputs
5161 (list eigen))
5162 (home-page "https://github.com/wjakob/nanobind/")
5163 (synopsis "Tiny and efficient C++/Python bindings")
5164 (description "Nanobind is a small binding library that exposes C++ types
5165in Python and vice versa. It is reminiscent of @code{Boost.Python} and
5166@code{pybind11} and uses near-identical syntax. In contrast to these existing
5167tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
5168of time, produce smaller binaries, and have better runtime performance.")
5169 (license license:bsd-3)))
5170
5171(define-public python-nr-date
5172 (package
5173 (name "python-nr-date")
5174 (version "2.1.0")
5175 (source
5176 (origin
5177 (method url-fetch)
5178 (uri (pypi-uri "nr_date" version))
5179 (sha256
5180 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
5181 (build-system pyproject-build-system)
5182 (arguments (list #:tests? #false)) ;there are none
5183 (native-inputs (list python-poetry-core))
5184 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
5185 (synopsis "Fast, regex-based date parsing library in plain Python")
5186 (description "This package provides a fast, regex-based date parsing
5187library in pure Python.")
5188 (license license:expat)))
5189
5190(define-public python-nr-stream
5191 (package
5192 (name "python-nr-stream")
5193 (version "1.1.5")
5194 (source
5195 (origin
5196 (method url-fetch)
5197 (uri (pypi-uri "nr_stream" version))
5198 (sha256
5199 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
5200 (build-system pyproject-build-system)
5201 (arguments (list #:tests? #false)) ;there are none
5202 (native-inputs (list python-poetry-core))
5203 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
5204 (synopsis "Stream and Optional classes for Python")
5205 (description "This package provides a @code{Stream} and @code{Optional}
5206class.")
5207 (license license:expat)))
5208
5209(define-public python-nr-util
5210 (package
5211 (name "python-nr-util")
5212 (version "0.8.12")
5213 (source
5214 (origin
5215 (method url-fetch)
5216 (uri (pypi-uri "nr.util" version))
5217 (sha256
5218 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
5219 (build-system pyproject-build-system)
5220 (arguments
5221 (list
5222 #:tests? #false ;there are none
5223 #:phases
5224 #~(modify-phases %standard-phases
5225 (add-after 'unpack 'patch-build-system
5226 (lambda _
5227 (substitute* "pyproject.toml"
5228 (("^config =.*") "config = []\n"))))
5229 (add-after 'install 'fix-name
5230 (lambda* (#:key inputs outputs #:allow-other-keys)
5231 (let* ((sitedir (site-packages inputs outputs))
5232 (dist-info
5233 (string-append sitedir "/nr_util-" #$version ".dist-info")))
5234 (substitute* (string-append dist-info "/METADATA")
5235 (("Name: nr-util")
5236 "Name: nr.util"))
5237 (substitute* (string-append dist-info "/RECORD")
5238 (("nr_util") "nr.util"))
5239 (rename-file dist-info
5240 (string-append sitedir
5241 "/nr.util-"
5242 #$version ".dist-info"))))))))
5243 (propagated-inputs (list python-deprecated python-typing-extensions))
5244 (native-inputs (list python-poetry-core))
5245 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
5246 (synopsis "General purpose Python utility library")
5247 (description "This package provides a general purpose Python utility
5248library.")
5249 (license license:expat)))
5250
5251(define-public python-slicerator
5252 (package
5253 (name "python-slicerator")
5254 (version "1.1.0")
5255 (source
5256 (origin
5257 (method url-fetch)
5258 (uri (pypi-uri "slicerator" version))
5259 (sha256
5260 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
5261 (build-system pyproject-build-system)
5262 (native-inputs
5263 (list python-numpy
5264 python-pytest
5265 python-setuptools))
5266 (home-page "https://github.com/soft-matter/slicerator")
5267 (synopsis "Lazy-loading, fancy-sliceable iterable")
5268 (description
5269 "This package provides a lazy-loading, fancy-sliceable iterable. Think
5270of it like a generator that is \"reusable\" and has a length.")
5271 (license license:bsd-3)))
5272
5273(define-public python-pytelegrambotapi
5274 (package
5275 (name "python-pytelegrambotapi")
5276 (version "4.22.0")
5277 (source
5278 (origin
5279 (method git-fetch)
5280 (uri (git-reference
5281 (url "https://github.com/eternnoir/pyTelegramBotAPI")
5282 (commit version)))
5283 (file-name (git-file-name name version))
5284 (sha256
5285 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
5286 (build-system pyproject-build-system)
5287 (arguments
5288 (list
5289 #:phases
5290 #~(modify-phases %standard-phases
5291 (replace 'check
5292 (lambda* (#:key tests? #:allow-other-keys)
5293 (when tests?
5294 (with-directory-excursion "tests"
5295 (invoke "py.test"))))))))
5296 (propagated-inputs
5297 (list python-requests))
5298 (native-inputs
5299 (list python-hatchling python-pytest))
5300 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
5301 (synopsis "Python Telegram bot api")
5302 (description "This package provides a simple, but extensible Python
5303implementation for the Telegram Bot API.")
5304 (license license:gpl2)))
5305
5306(define-public python-pytoolconfig
5307 (package
5308 (name "python-pytoolconfig")
5309 (version "1.3.1")
5310 (source
5311 (origin
5312 (method url-fetch)
5313 (uri (pypi-uri "pytoolconfig" version))
5314 (sha256
5315 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
5316 (build-system pyproject-build-system)
5317 (arguments
5318 (list
5319 #:test-flags
5320 ;; Requires Sphinx.
5321 #~(list "--ignore=tests/test_documentation.py")))
5322 (native-inputs
5323 (list python-pdm-backend
5324 python-pytest))
5325 (propagated-inputs
5326 (list python-tomli
5327 python-packaging
5328 python-platformdirs))
5329 (home-page "https://pypi.org/project/pytoolconfig/")
5330 (synopsis "Python tool configuration")
5331 (description "The goal of this project is to manage configuration for
5332Python tools, such as rope and add support for a @file{pyproject.toml}
5333configuration file.")
5334 (license license:lgpl3+)))
5335
5336(define-public python-pytooling
5337 (package
5338 (name "python-pytooling")
5339 (version "8.19.0")
5340 (source
5341 (origin
5342 (method git-fetch)
5343 (uri (git-reference
5344 (url "https://github.com/pyTooling/pyTooling/")
5345 (commit (string-append "v" version))))
5346 (file-name (git-file-name name version))
5347 (sha256
5348 (base32 "0bg8n4cxsirlckkcamxsyiy40hddihg6mxyjhhng07xkjkyqrhpz"))))
5349 (build-system pyproject-build-system)
5350 (arguments
5351 (list
5352 ;; Tests do not support linux-i686 system: Exception: Unknown
5353 ;; architecture 'linux-i686' for a native Linux.
5354 #:tests? (not (or (%current-target-system)
5355 (target-x86-32?)))
5356 #:test-flags
5357 #~(list
5358 "tests/unit"
5359 ;; These tests try to access the network.
5360 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
5361 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
5362 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
5363 #:phases
5364 #~(modify-phases %standard-phases
5365 (add-after 'unpack 'patch-git-bin-for-tests
5366 (lambda* (#:key inputs #:allow-other-keys)
5367 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
5368 "tests/unit/CLIAbstraction/Program.py")
5369 (("/usr/bin")
5370 (dirname (search-input-file inputs "/bin/git")))))))))
5371 (native-inputs
5372 (list git-minimal/pinned
5373 python-aiohttp
5374 python-colorama
5375 python-pytest
5376 python-requests
5377 python-ruamel.yaml
5378 python-setuptools))
5379 (home-page "https://pytooling.github.io/pyTooling/")
5380 (synopsis "Miscellaneous Python tools")
5381 (description
5382 "pyTooling is a collection of (abstract) data models, lacking classes,
5383decorators, a new performance boosting meta-class, and enhanced exceptions.
5384It also provides lots of helper functions---e.g., to ease the handling of
5385package descriptions or to unify multiple existing APIs into a single API.")
5386 (license license:asl2.0)))
5387
5388(define-public python-colorlog
5389 (package
5390 (name "python-colorlog")
5391 (version "6.9.0")
5392 (source
5393 (origin
5394 (method url-fetch)
5395 (uri (pypi-uri "colorlog" version))
5396 (sha256
5397 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5398 (build-system pyproject-build-system)
5399 (native-inputs
5400 (list python-pytest
5401 python-setuptools))
5402 (home-page "https://github.com/borntyping/python-colorlog")
5403 (synopsis "Log formatting with colors for python")
5404 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5405with Python's logging module that outputs records using terminal colors.")
5406 (license license:expat)))
5407
5408(define-public python-pyprind
5409 (package
5410 (name "python-pyprind")
5411 (version "2.11.3")
5412 (source
5413 (origin
5414 (method url-fetch)
5415 (uri (pypi-uri "PyPrind" version))
5416 (sha256
5417 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5418 (build-system pyproject-build-system)
5419 (native-inputs (list python-pytest python-setuptools))
5420 (propagated-inputs (list python-psutil))
5421 (home-page "https://github.com/rasbt/pyprind")
5422 (synopsis "Python Progress Bar and Percent Indicator Utility")
5423 (description
5424 "The PyPrind (Python Progress Indicator) module provides a progress bar
5425and a percentage indicator object that let you track the progress of a loop
5426structure or other iterative computation.")
5427 (license license:bsd-3)))
5428
5429(define-public python-gh-md-to-html
5430 (package
5431 (name "python-gh-md-to-html")
5432 (version "1.21.2")
5433 (source
5434 (origin
5435 (method url-fetch)
5436 (uri (pypi-uri "gh_md_to_html" version))
5437 (sha256
5438 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5439 (build-system pyproject-build-system)
5440 (arguments
5441 (list
5442 #:tests? #false ;there are none
5443 #:phases
5444 #~(modify-phases %standard-phases
5445 (add-after 'unpack 'relax-shellescape-requirement
5446 (lambda _
5447 (substitute* "src/__init__.py"
5448 (("import shellescape")
5449 "import shlex")
5450 (("shellescape\\.quote")
5451 "shlex.quote"))
5452 (substitute* "setup.py"
5453 (("\"shellescape\",")
5454 "")))))))
5455 (propagated-inputs
5456 (list python-beautifulsoup4
5457 python-emoji-for-gh-md-to-html
5458 python-pillow
5459 python-requests
5460 python-webcolors))
5461 (native-inputs (list python-setuptools))
5462 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5463 (synopsis "Github-flavored Markdown")
5464 (description
5465 "This package provides a feature-rich Github-flavored Markdown to HTML
5466Python library and command line interface.")
5467 (license license:expat)))
5468
5469(define-public python-gfloat
5470 (package
5471 (name "python-gfloat")
5472 (version "0.5.2")
5473 (source
5474 (origin
5475 (method url-fetch)
5476 (uri (pypi-uri "gfloat" version))
5477 (sha256
5478 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5479 (build-system pyproject-build-system)
5480 (arguments
5481 (list
5482 #:test-flags
5483 #~(list
5484 "--ignore=test/test_array_api.py" ;requires array_api_strict
5485 "--ignore=test/test_jax.py" ;requires python-jax
5486 "--ignore=test/test_microxcaling.py" ;requires torchao
5487 ;; Jupyter.
5488 "--ignore-glob=docs/source/*.ipynb")))
5489 (propagated-inputs
5490 (list python-array-api-compat python-more-itertools python-numpy))
5491 (native-inputs (list python-nbval
5492 python-ml-dtypes
5493 python-pytest
5494 python-pytorch
5495 python-setuptools
5496 openssl))
5497 (home-page "https://github.com/graphcore-research/gfloat")
5498 (synopsis "Generic floating point handling in Python")
5499 (description
5500 "This package provides an implementation of generic floating point encode
5501and decode logic in Python. It handles various current and proposed floating
5502point types:
5503
5504@itemize
5505@item IEEE 754: Binary16, Binary32
5506@item OCP Float8: E5M2, E4M3
5507@item IEEE WG P3109
5508@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5509@end itemize")
5510 (license license:expat)))
5511
5512(define-public python-glymur
5513 (package
5514 (name "python-glymur")
5515 (version "0.14.8")
5516 (source
5517 (origin
5518 (method git-fetch)
5519 (uri (git-reference
5520 (url "https://github.com/quintusdias/glymur")
5521 (commit (string-append "v" version))))
5522 (file-name (git-file-name name version))
5523 (sha256
5524 (base32 "0jhnr5p8lrycf9bn9p429rkc82aayc0bjf0pivk870a954br268h"))))
5525 (build-system pyproject-build-system)
5526 (arguments
5527 (list
5528 #:test-flags
5529 #~(list "--numprocesses" (number->string (parallel-job-count))
5530 ;; Failing test due to inability of ctypes.util.find_library()
5531 ;; to determine library path, which is patched above.
5532 "--ignore=tests/test_config.py")
5533 #:phases
5534 #~(modify-phases %standard-phases
5535 (add-after 'unpack 'patch-library-locations
5536 (lambda* (#:key inputs #:allow-other-keys)
5537 ;; XXX: It's a workaround for Python inability to find the
5538 ;; .so libraries with ctypes.util.find_library()
5539 (substitute* '("glymur/config.py")
5540 (("path = find_library\\(libname\\)")
5541 (string-append
5542 "if libname == \"openjp2\":\n"
5543 " path = \""
5544 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5545 " elif libname == \"tiff\":\n"
5546 " path = \""
5547 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5548 " elif libname == \"c\":\n"
5549 " path = \""
5550 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5551 (native-inputs
5552 (list python-pytest
5553 python-pytest-xdist
5554 python-scikit-image
5555 python-setuptools))
5556 (inputs
5557 (list openjpeg ; glymur/lib/openjp2.py
5558 libtiff)) ; glymur/lib/tiff.py
5559 (propagated-inputs
5560 (list python-lxml
5561 python-numpy
5562 python-pillow ))
5563 (home-page "https://github.com/quintusdias/glymur")
5564 (synopsis "Python interface to OpenJPEG and LibTIFF")
5565 (description
5566 "This package provides Python interface to the OpenJPEG library which
5567allows one to read and write JPEG 2000 files")
5568 (license license:expat)))
5569
5570(define-public python-gphoto2
5571 (package
5572 (name "python-gphoto2")
5573 (version "2.6.1")
5574 (source
5575 (origin
5576 (method git-fetch) ; no tests in PyPI
5577 (uri (git-reference
5578 (url "https://github.com/jim-easterbrook/python-gphoto2")
5579 (commit (string-append "v" version))))
5580 (file-name (git-file-name name version))
5581 (sha256
5582 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5583 (build-system pyproject-build-system)
5584 (native-inputs
5585 (list pkg-config python-pytest python-setuptools python-wheel))
5586 (inputs
5587 (list libgphoto2))
5588 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5589 (synopsis "Python interface to libgphoto2")
5590 (description "@code{python-gphoto2} is a comprehensive Python interface
5591(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5592automatically generate the interface code.")
5593 (license license:lgpl3+)))
5594
5595(define-public python-colour
5596 (package
5597 (name "python-colour")
5598 (version "0.1.5")
5599 (source
5600 (origin
5601 (method git-fetch)
5602 (uri (git-reference
5603 (url "https://github.com/vaab/colour")
5604 (commit version)))
5605 (file-name (git-file-name name version))
5606 (sha256
5607 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5608 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5609 (build-system pyproject-build-system)
5610 (arguments
5611 (list
5612 #:tests? #f ; No tests.
5613 #:phases
5614 #~(modify-phases %standard-phases
5615 (add-after 'unpack 'set-version
5616 (lambda _
5617 (substitute* "autogen.sh"
5618 (("if ! \"\\$git\".*")
5619 "if false ; then\n")
5620 (("depends git grep")
5621 "depends grep")
5622 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5623 (format #f "version=~s" #$version))))))))
5624 (native-inputs (list python-setuptools))
5625 (home-page "https://github.com/vaab/colour")
5626 (synopsis "Convert and manipulate various color representations")
5627 (description
5628 "This package provides a pythonic way to manipulate color representations
5629(HSL, RVB,web, X11, ...).")
5630 (license license:expat)))
5631
5632(define-public python-rapidfuzz
5633 (package
5634 (name "python-rapidfuzz")
5635 (version "3.14.3")
5636 (source
5637 (origin
5638 (method git-fetch)
5639 (uri (git-reference
5640 (url "https://github.com/rapidfuzz/RapidFuzz")
5641 (commit (string-append "v" version))))
5642 (file-name (git-file-name name version))
5643 (sha256
5644 (base32 "1vnm1yx12am0ffbh0fj4nd8l1h0m299hdsw6kcp0pmgnl1jxxr8c"))))
5645 (build-system pyproject-build-system)
5646 (native-inputs
5647 (list cmake-minimal
5648 python-cython
5649 python-numpy
5650 python-pandas
5651 python-pytest
5652 python-scikit-build-core
5653 rapidfuzz-cpp
5654 taskflow))
5655 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5656 (synopsis "Rapid fuzzy string matching")
5657 (description
5658 "RapidFuzz is a fast string matching library for Python and
5659C++, which is using the string similarity calculations from FuzzyWuzzy.")
5660 (license license:expat)))
5661
5662(define-public python-easygui
5663 (package
5664 (name "python-easygui")
5665 (version "0.98.1")
5666 (source
5667 (origin
5668 (method git-fetch)
5669 (uri (git-reference
5670 (url "https://github.com/robertlugg/easygui")
5671 (commit version)))
5672 (file-name (git-file-name name version))
5673 (sha256
5674 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5675 (build-system pyproject-build-system)
5676 (arguments
5677 ;; XXX: There seem to be no tests upstream, although the package itself
5678 ;; seems to provide a lot of demo elements.
5679 (list #:tests? #f))
5680 (native-inputs (list python-pytest python-setuptools))
5681 (propagated-inputs (list `(,python "tk")))
5682 (home-page "https://github.com/robertlugg/easygui")
5683 (synopsis "GUI programming module for Python")
5684 (description
5685 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5686different from other GUI generators in that EasyGUI is NOT event-driven.
5687Instead, all GUI interactions are invoked by simple function calls.")
5688 (license license:bsd-3)))
5689
5690(define-public python-echo
5691 (package
5692 (name "python-echo")
5693 (version "0.12.1")
5694 (source
5695 (origin
5696 (method url-fetch)
5697 (uri (pypi-uri "echo" version))
5698 (sha256
5699 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5700 (build-system pyproject-build-system)
5701 (arguments
5702 (list
5703 #:phases
5704 #~(modify-phases %standard-phases
5705 (add-before 'check 'start-xorg-server
5706 (lambda _
5707 ;; The test suite requires a running X server.
5708 (system "Xvfb :99 -screen 0 1024x768x24 &")
5709 (setenv "DISPLAY" ":99.0"))))))
5710 (propagated-inputs
5711 (list python-numpy
5712 python-qtpy
5713 python-pyqt-6))
5714 (native-inputs
5715 (list python-pytest
5716 python-setuptools
5717 python-setuptools-scm
5718 xorg-server-for-tests))
5719 (home-page "https://github.com/glue-viz/echo")
5720 (synopsis "Callback Properties in Python")
5721 (description
5722 "Echo is a small library for attaching callback functions to property
5723state changes.")
5724 (license license:expat)))
5725
5726(define-public python-pymd4c
5727 (package
5728 (name "python-pymd4c")
5729 (version "1.3.0")
5730 (source
5731 (origin
5732 (method git-fetch)
5733 (uri (git-reference
5734 (url "https://github.com/dominickpastore/pymd4c")
5735 (commit (string-append "v" version))))
5736 (file-name (git-file-name name version))
5737 (sha256
5738 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5739 (build-system pyproject-build-system)
5740 (arguments (list #:test-flags #~(list "test")))
5741 (inputs (list md4c))
5742 (native-inputs
5743 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5744 (home-page "https://github.com/dominickpastore/pymd4c")
5745 (synopsis "Python bindings for MD4C")
5746 (description
5747 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5748to CommonMark.")
5749 (license license:expat)))
5750
5751(define-public python-pymediainfo
5752 (package
5753 (name "python-pymediainfo")
5754 (version "4.1")
5755 (source
5756 (origin
5757 (method url-fetch)
5758 (uri (pypi-uri "pymediainfo" version))
5759 (sha256
5760 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5761 (build-system pyproject-build-system)
5762 (arguments
5763 (list
5764 ;; The only failing test requires internet access.
5765 #:test-flags
5766 #~(list "-k" "not test_parse_url")
5767 #:phases
5768 #~(modify-phases %standard-phases
5769 (add-after 'unpack 'patch-libmediainfo
5770 (lambda* (#:key inputs #:allow-other-keys)
5771 (substitute* "pymediainfo/__init__.py"
5772 (("libmediainfo.so.0")
5773 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5774 (native-inputs (list python-pytest python-setuptools))
5775 (inputs (list libmediainfo))
5776 (home-page "https://github.com/sbraz/pymediainfo")
5777 (synopsis "Python wrapper for the mediainfo library")
5778 (description
5779 "This package provides a Python wrapper for the mediainfo library to
5780access the technical and tag data for video and audio files.")
5781 (license license:expat)))
5782
5783(define-public python-psutil
5784 (package
5785 (name "python-psutil")
5786 (version "7.2.2")
5787 (source
5788 (origin
5789 (method git-fetch)
5790 (uri (git-reference
5791 (url "https://github.com/giampaolo/psutil")
5792 (commit (string-append "release-" version))))
5793 (file-name (git-file-name name version))
5794 (sha256
5795 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
5796 (build-system pyproject-build-system)
5797 (arguments
5798 (list
5799 ;; tests: X86_64-linux 414 passed, 278 skipped
5800 ;; i686-linux 410 passed, 278 skipped
5801 #:test-flags
5802 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
5803 "--dist" "loadgroup"
5804 #$@(map (lambda (ls) (string-append "--deselect=tests/"
5805 (string-join ls "::")))
5806 ;; assert None is not None
5807 '(("test_linux.py" "TestRootFsDeviceFinder"
5808 "test_comparisons")
5809 ;; FileNotFoundError: [Errno 2] No such file or
5810 ;; directory: '/sys/class/net/lo/mtu'
5811 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
5812 ;; AssertionError: assert '/dev/root' != '/dev/root'
5813 ("test_linux.py" "TestRootFsDeviceFinder"
5814 "test_disk_partitions_mocked")
5815 ;; psutil.AccessDenied: (pid=426)
5816 ("test_process.py" "TestProcess" "test_weird_environ")
5817 ;; assert []
5818 ("test_system.py" "TestMiscAPIs" "test_users")
5819 ;; ModuleNotFoundError: No module named '_common'
5820 ("test_scripts.py" "TestSetupScript"
5821 "test_invocation")
5822 ;; AssertionError: assert ''
5823 ("test_scripts.py" "TestExampleScripts" "test_who")
5824 ;; AssertionError: no disks on this system? assert
5825 ;; None is not None
5826 ("test_system.py" "TestDiskAPIs"
5827 "test_disk_io_counters")
5828 ;; psutil.NoSuchProcess: process no longer exists
5829 ;; (pid=247))
5830 ("test_process_all.py" "TestFetchAllProcesses"
5831 "test_all")
5832 ;; ModuleNotFoundError: No module named 'pypinfo'
5833 ("test_scripts.py" "TestInternalScripts"
5834 "test_import_all")
5835 ;; FileNotFoundError: [Errno 2] No such file or
5836 ;; directory: '/sys/class/power_supply'
5837 ("test_misc.py" "TestMisc" "test_serialization")))
5838 #$@(if (target-32bit?)
5839 (map (lambda (ls) (string-append "--deselect=tests/"
5840 (string-join ls "::")))
5841 ;; assert 12884901915 < 500 where 12884901915 =
5842 ;; abs((2596570605 - 15481472520))
5843 '(("test_linux.py" "TestSystemCPUStats"
5844 "test_interrupts")
5845 ;; OSError: [Errno 22] Invalid argument
5846 ("test_process.py" "TestProcess"
5847 "test_zombie_process")))
5848 '()))
5849 #:phases
5850 #~(modify-phases %standard-phases
5851 (add-before 'check 'pre-check
5852 (lambda _
5853 (delete-file-recursively "psutil")
5854 (substitute* "tests/test_linux.py"
5855 (("\"(free|vmstat)\"" _ cmd)
5856 (format #f "~s" (which cmd))))
5857 (setenv "PYTHONWARNINGS" "always")
5858 (setenv "PYTHONUNBUFFERED" "1")
5859 (setenv "PSUTIL_DEBUG" "1")
5860 (setenv "PSUTIL_TESTING" "1"))))))
5861 (native-inputs
5862 (list procps
5863 python-packaging
5864 python-psleak
5865 python-pyperf
5866 python-pytest
5867 python-pytest-instafail
5868 python-pytest-xdist
5869 python-setuptools))
5870 (home-page "https://github.com/giampaolo/psutil")
5871 (synopsis "Library for retrieving information on running processes")
5872 (description
5873 "@code{psutil} (Python system and process utilities) is a library for
5874retrieving information on running processes and system utilization (CPU,
5875memory, disks, network) in Python. It is useful mainly for system monitoring,
5876profiling and limiting process resources and management of running processes.
5877It implements many functionalities offered by command line tools such as: ps,
5878top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
5879iotop, uptime, pidof, tty, taskset, pmap.")
5880 (license license:bsd-3)))
5881
5882(define-public python-psutil-bootstrap
5883 (hidden-package
5884 (package/inherit python-psutil
5885 (name "python-psutil-bootstrap")
5886 (arguments
5887 (list #:tests? #f))
5888 (propagated-inputs '())
5889 (native-inputs
5890 (list python-setuptools)))))
5891
5892(define-public python-scapy
5893 (package
5894 (name "python-scapy")
5895 (version "2.6.1")
5896 (source (origin
5897 (method url-fetch)
5898 (uri (pypi-uri "scapy" version))
5899 (sha256
5900 (base32
5901 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
5902 (arguments
5903 '(#:tests? #f)) ; There is a test directory, but apparently no
5904 ; automatic testing framework.
5905 ;; The package has more optional dependencies such as ipython and
5906 ;; matplotlib. If functionality is missing, these should be added.
5907 ;; See
5908 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
5909 (build-system pyproject-build-system)
5910 (native-inputs (list python-setuptools python-wheel))
5911 (home-page "https://scapy.net")
5912 (synopsis "Python network packet crafting library")
5913 (description
5914 "Scapy is a Python library and executable for interactively
5915manipulating network packets. It can forge or decode packets of a number
5916of protocols, send them on the wire, capture them, store or read them
5917using pcap files, match requests and replies, and so on.
5918It can handle tasks such as scanning, tracerouting, probing, unit tests,
5919attacks or network discovery.")
5920 (license license:gpl2)))
5921
5922(define-public python-icmplib
5923 (package
5924 (name "python-icmplib")
5925 (version "3.0.4")
5926 (source
5927 (origin
5928 (method git-fetch)
5929 (uri (git-reference
5930 (url "https://github.com/ValentinBELYN/icmplib")
5931 (commit (string-append "v" version))))
5932 (file-name (git-file-name name version))
5933 (sha256
5934 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
5935 (build-system pyproject-build-system)
5936 (arguments (list #:tests? #f)) ; No tests.
5937 (native-inputs (list python-setuptools))
5938 (home-page "https://github.com/ValentinBELYN/icmplib")
5939 (synopsis
5940 "Python implementation of the Internet Control Message Protocol (ICMP)")
5941 (description
5942 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
5943ICMP is typically used for diagnostic or control purposes - well known from
5944utilities such as ping(1).")
5945 (license license:lgpl3)))
5946
5947(define-public python-iron-core
5948 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
5949 (revision "0"))
5950 (package
5951 (name "python-iron-core")
5952 (version (git-version "1.2.1" revision commit))
5953 (source
5954 (origin
5955 (method git-fetch)
5956 (uri (git-reference
5957 (url "https://www.github.com/iron-io/iron_core_python")
5958 (commit commit)))
5959 (file-name (git-file-name name version))
5960 (sha256
5961 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
5962 (build-system pyproject-build-system)
5963 (arguments
5964 (list
5965 ;; XXX: Tests are run, but they seem too old/not updated.
5966 #:tests? #f
5967 #:test-backend #~'unittest))
5968 (propagated-inputs (list python-dateutil python-requests))
5969 (native-inputs (list python-setuptools))
5970 (home-page "https://www.github.com/iron-io/iron_core_python")
5971 (synopsis "Universal classes and methods for Iron.io API wrappers")
5972 (description
5973 "This package provides universal classes and methods for the Iron.io
5974API wrappers to build on.")
5975 (license license:bsd-2))))
5976
5977(define-public python-iron-mq
5978 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
5979 (revision "0"))
5980 (package
5981 (name "python-iron-mq")
5982 (version (git-version "0.9" revision commit))
5983 (source
5984 (origin
5985 (method git-fetch)
5986 (uri (git-reference
5987 (url "https://github.com/iron-io/iron_mq_python")
5988 (commit commit)))
5989 (file-name (git-file-name name version))
5990 (sha256
5991 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
5992 (build-system pyproject-build-system)
5993 (arguments
5994 (list
5995 ;; XXX: Tests are broken and require network access.
5996 #:tests? #f
5997 #:test-backend #~'unittest))
5998 (propagated-inputs (list python-iron-core))
5999 (native-inputs (list python-setuptools))
6000 (home-page "https://github.com/iron-io/iron_mq_python")
6001 (synopsis "Client library for IronMQ, a message queue in the cloud")
6002 (description
6003 "This package provides Python language bindings for IronMQ. IronMQ is an
6004elastic message queue for managing data and event flow within cloud
6005applications and between systems.")
6006 (license license:bsd-2))))
6007
6008(define-public python-rasterio
6009 (package
6010 (name "python-rasterio")
6011 (version "1.3.7")
6012 (source (origin
6013 (method url-fetch)
6014 (uri (pypi-uri "rasterio" version))
6015 (sha256
6016 (base32
6017 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
6018 (properties
6019 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
6020 (build-system pyproject-build-system)
6021 (arguments
6022 (list
6023 #:tests? #false ;test data not present
6024 #:phases
6025 '(modify-phases %standard-phases
6026 (add-before 'check 'build-extensions
6027 (lambda _
6028 ;; Cython extensions have to be built before running the tests.
6029 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6030 (propagated-inputs (list python-affine
6031 python-attrs
6032 python-certifi
6033 python-click
6034 python-click-plugins
6035 python-cligj
6036 python-numpy
6037 python-setuptools ; For pkg_resources.
6038 python-snuggs))
6039 (native-inputs (list gdal
6040 python-boto3
6041 python-cython
6042 python-hypothesis
6043 python-packaging
6044 python-pytest
6045 python-shapely
6046 python-wheel))
6047 (home-page "https://github.com/rasterio/rasterio")
6048 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
6049 (description "This package implements fast and direct raster I/O for use
6050with Numpy and SciPy.")
6051 (license license:bsd-3)))
6052
6053(define-public python-rich-tables
6054 (package
6055 (name "python-rich-tables")
6056 (version "0.8.0")
6057 (source
6058 (origin
6059 (method git-fetch) ; no tests data in PyPi package
6060 (uri (git-reference
6061 (url "https://github.com/snejus/rich-tables")
6062 (commit version)))
6063 (file-name (git-file-name name version))
6064 (sha256
6065 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
6066 (build-system pyproject-build-system)
6067 (arguments
6068 (list
6069 #:test-flags
6070 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
6071 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
6072 (native-inputs
6073 (list python-freezegun
6074 python-poetry-core
6075 python-pytest))
6076 (propagated-inputs
6077 (list python-funcy
6078 python-humanize
6079 python-multimethod
6080 python-platformdirs
6081 python-rgbxy
6082 python-rich
6083 python-sqlparse))
6084 (home-page "https://github.com/snejus/rich-tables")
6085 (synopsis "Ready-made rich tables for various purposes")
6086 (description
6087 "This package implements rich tables for various purposes, it's JSON
6088human-prettifier based on the @code{rich} Python library.")
6089 (license license:expat)))
6090
6091(define-public python-rich-toolkit
6092 (package
6093 (name "python-rich-toolkit")
6094 (version "0.12.0")
6095 (source
6096 (origin
6097 (method url-fetch)
6098 (uri (pypi-uri "rich_toolkit" version))
6099 (sha256
6100 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
6101 (build-system pyproject-build-system)
6102 (propagated-inputs (list python-click python-rich python-typing-extensions))
6103 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
6104 (home-page "https://pypi.org/project/rich-toolkit/")
6105 (synopsis "Rich toolkit for building command-line applications")
6106 (description "This package provides the Rich toolkit for building
6107command-line applications.")
6108 (license license:expat)))
6109
6110(define-public python-shapely
6111 (package
6112 (name "python-shapely")
6113 (version "2.1.1")
6114 (source
6115 (origin
6116 (method url-fetch)
6117 (uri (pypi-uri "shapely" version))
6118 (sha256
6119 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
6120 (build-system pyproject-build-system)
6121 (arguments
6122 (list
6123 #:phases
6124 '(modify-phases %standard-phases
6125 (add-before 'check 'build-extensions
6126 (lambda _
6127 ;; Cython extensions have to be built before running the tests.
6128 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
6129 (native-inputs
6130 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
6131 (inputs
6132 (list geos))
6133 (propagated-inputs
6134 (list python-numpy))
6135 (home-page "https://github.com/shapely/shapely")
6136 (synopsis "Library for the manipulation and analysis of geometric objects")
6137 (description "Shapely is a Python package for manipulation and analysis of
6138planar geometric objects. It is based on the @code{GEOS} library.")
6139 (license license:bsd-3)))
6140
6141(define-public python-shortuuid
6142 (package
6143 (name "python-shortuuid")
6144 (version "1.0.13")
6145 (source
6146 (origin
6147 (method url-fetch)
6148 (uri (pypi-uri "shortuuid" version))
6149 (sha256
6150 (base32
6151 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
6152 (build-system pyproject-build-system)
6153 (native-inputs
6154 (list python-poetry-core python-pytest))
6155 (home-page "https://github.com/skorokithakis/shortuuid")
6156 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
6157 (description
6158 "@code{shortuuid} is a Python library for generating concise, unambiguous
6159and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
6160module and then similar looking characters are removed.")
6161 (license license:bsd-3)))
6162
6163(define-public python-logwrap
6164 (package
6165 (name "python-logwrap")
6166 (version "11.1.1")
6167 (source
6168 (origin
6169 (method git-fetch) ; no tests in PyPI release
6170 (uri (git-reference
6171 (url "https://github.com/python-useful-helpers/logwrap")
6172 (commit version)))
6173 (file-name (git-file-name name version))
6174 (sha256
6175 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
6176 (build-system pyproject-build-system)
6177 (native-inputs (list python-pytest
6178 python-setuptools
6179 python-setuptools-scm
6180 python-wheel))
6181 (home-page "https://github.com/python-useful-helpers/logwrap")
6182 (synopsis "Decorator for logging function arguments")
6183 (description "This package provides a decorator to log function arguments
6184and function call return values in a human-readable way.")
6185 (license license:asl2.0)))
6186
6187(define-public python-babel
6188 (package
6189 (name "python-babel")
6190 (version "2.16.0")
6191 (source
6192 (origin
6193 (method url-fetch)
6194 (uri (pypi-uri "babel" version))
6195 (sha256
6196 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
6197 (build-system pyproject-build-system)
6198 (native-inputs
6199 (list python-freezegun
6200 python-pytest
6201 python-setuptools
6202 tzdata-for-tests))
6203 (propagated-inputs
6204 (list python-pytz))
6205 (home-page "https://babel.pocoo.org/")
6206 (synopsis
6207 "Tools for internationalizing Python applications")
6208 (description
6209 "Babel is composed of two major parts:
6210- tools to build and work with gettext message catalogs
6211- a Python interface to the CLDR (Common Locale Data Repository), providing
6212access to various locale display names, localized number and date formatting,
6213etc.")
6214 (license license:bsd-3)))
6215
6216(define-public python-bidict
6217 (package
6218 (name "python-bidict")
6219 (version "0.23.1")
6220 (source
6221 (origin
6222 (method git-fetch) ; no tests in PyPI.
6223 (uri (git-reference
6224 (url "https://github.com/jab/bidict")
6225 (commit (string-append "v" version))))
6226 (file-name (git-file-name name version))
6227 (sha256
6228 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
6229 (build-system pyproject-build-system)
6230 (native-inputs
6231 (list python-pytest
6232 python-pytest-benchmark
6233 python-pytest-xdist
6234 python-setuptools
6235 python-sortedcollections
6236 python-wheel))
6237 (home-page "https://bidict.readthedocs.io")
6238 (synopsis "Bidirectional mapping library")
6239 (description "The @code{bidict} library provides several data structures
6240for working with bidirectional mappings in Python.")
6241 (license license:mpl2.0)))
6242
6243(define-public python-bip39
6244 (package
6245 (name "python-bip39")
6246 (version "0.0.2")
6247 (source
6248 (origin
6249 (method url-fetch)
6250 (uri (pypi-uri "bip39" version))
6251 (sha256
6252 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
6253 (build-system pyproject-build-system)
6254 (native-inputs (list python-pytest python-setuptools))
6255 (home-page "https://github.com/de-centralized-systems/python-bip39/")
6256 (synopsis "Self-contained and simple BIP39 implementation in Python")
6257 (description
6258 "This package provides a self-contained and simple BIP39
6259implementation written in Python. It includes a @code{bip39.py} executable.
6260
6261BIP39 is a standardized mapping between binary data (the @emph{entropy}),
6262and a list of words that are easier to remember for humans (the
6263@emph{mnemonic}).")
6264 (license license:expat)))
6265
6266(define-public python-bitarray
6267 (package
6268 (name "python-bitarray")
6269 (version "3.4.3")
6270 (source (origin
6271 (method url-fetch)
6272 (uri (pypi-uri "bitarray" version))
6273 (sha256
6274 (base32
6275 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
6276 (build-system pyproject-build-system)
6277 (arguments
6278 (list #:phases
6279 #~(modify-phases %standard-phases
6280 (replace 'check
6281 (lambda* (#:key tests? #:allow-other-keys)
6282 (when tests?
6283 ;; Step out of the source directory to avoid interference.
6284 (with-directory-excursion "/tmp"
6285 (invoke "python" "-c"
6286 "import bitarray; bitarray.test()"))))))))
6287 (native-inputs (list python-setuptools python-wheel))
6288 (home-page "https://github.com/ilanschnell/bitarray")
6289 (synopsis "Efficient arrays of booleans")
6290 (description "This package provides an object type which efficiently
6291represents an array of booleans. Bitarrays are sequence types and behave very
6292much like usual lists. Eight bits are represented by one byte in a contiguous
6293block of memory. The user can select between two representations:
6294little-endian and big-endian. All of the functionality is implemented in C.
6295Methods for accessing the machine representation are provided. This can be
6296useful when bit level access to binary files is required, such as portable
6297bitmap image files. Also, when dealing with compressed data which uses
6298variable bit length encoding, you may find this module useful.")
6299 (license license:psfl)))
6300
6301(define-public python-bitarray-2
6302 (package
6303 (inherit python-bitarray)
6304 (version "2.8.1")
6305 (source (origin
6306 (method url-fetch)
6307 (uri (pypi-uri "bitarray" version))
6308 (sha256
6309 (base32
6310 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
6311
6312(define-public python-boolean.py
6313 (package
6314 (name "python-boolean.py")
6315 (version "5.0")
6316 (source
6317 (origin
6318 (method url-fetch)
6319 (uri (pypi-uri "boolean_py" version))
6320 (sha256
6321 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
6322 (build-system pyproject-build-system)
6323 (native-inputs (list python-pytest python-setuptools python-wheel))
6324 (home-page "https://github.com/bastikr/boolean.py")
6325 (synopsis "Boolean algebra in one Python module")
6326 (description
6327 "This is a small Python library that implements boolean algebra.
6328It defines two base elements, @code{TRUE} and @code{FALSE}, and a
6329@code{Symbol} class that can take on one of these two values. Calculations
6330are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
6331compositions like @code{XOR} and @code{NAND} are emulated on top of them.
6332Expressions are constructed from parsed strings or directly in Python.")
6333 (license license:bsd-2)))
6334
6335(define-public python-h5netcdf
6336 (package
6337 (name "python-h5netcdf")
6338 (version "1.3.0")
6339 (source
6340 (origin
6341 (method url-fetch)
6342 (uri (pypi-uri "h5netcdf" version))
6343 (sha256
6344 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
6345 (build-system pyproject-build-system)
6346 (native-inputs
6347 (list python-netcdf4
6348 python-pytest
6349 python-setuptools
6350 python-setuptools-scm
6351 python-wheel))
6352 (propagated-inputs
6353 (list python-h5py python-packaging))
6354 (home-page "https://h5netcdf.org")
6355 (synopsis "Python interface for the netCDF4 file-format based on h5py")
6356 (description "This package provides a Python interface for the netCDF4
6357file-format that reads and writes local or remote HDF5 files directly via
6358@url{h5py, https://www.h5py.org/} or @url{h5pyd,
6359https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
6360library.")
6361 (license license:bsd-3)))
6362
6363(define-public python-h5py
6364 (package
6365 (name "python-h5py")
6366 (version "3.15.1")
6367 (source
6368 (origin
6369 (method url-fetch)
6370 (uri (pypi-uri "h5py" version))
6371 (sha256
6372 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
6373 (build-system pyproject-build-system)
6374 (arguments
6375 (list
6376 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
6377 #:test-flags
6378 ;; Tests requiring the build with MPI.
6379 #~(list "-k" (string-append "not test_mpio"
6380 " and not test_mpio_append"
6381 " and not test_mpi_atomic"
6382 " and not test_close_multiple_mpio_driver"))
6383 #:phases
6384 #~(modify-phases %standard-phases
6385 (add-after 'unpack 'fix-hdf5-paths
6386 (lambda _
6387 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
6388 (replace 'check
6389 (lambda* (#:key tests? test-flags #:allow-other-keys)
6390 (when tests?
6391 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
6392 (with-directory-excursion #$output
6393 (apply invoke "pytest" "-vv" test-flags))))))))
6394 (native-inputs
6395 (list pkg-config
6396 python-cython
6397 python-pkgconfig
6398 python-pytest
6399 python-setuptools))
6400 (inputs
6401 (list hdf5))
6402 (propagated-inputs
6403 (list python-numpy))
6404 (home-page "https://www.h5py.org/")
6405 (synopsis "Read and write HDF5 files from Python")
6406 (description
6407 "The h5py package provides both a high- and low-level interface to the
6408HDF5 library from Python. The low-level interface is intended to be a
6409complete wrapping of the HDF5 API, while the high-level component supports
6410access to HDF5 files, datasets and groups using established Python and NumPy
6411concepts.")
6412 (license license:bsd-3)))
6413
6414(define-public python-hdf5storage
6415 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6416 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6417 ;;
6418 ;; This package probably is sun setting, consider to remove when stops
6419 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6420 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6421 (revision "0"))
6422 (package
6423 (name "python-hdf5storage")
6424 (version (git-version "0.1.19" revision commit))
6425 (source
6426 (origin
6427 (method git-fetch)
6428 (uri (git-reference
6429 (url "https://github.com/frejanordsiek/hdf5storage")
6430 (commit commit)))
6431 (file-name (git-file-name name version))
6432 (sha256
6433 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6434 (build-system pyproject-build-system)
6435 (arguments
6436 ;; Started failing with the move to [email protected], due to modules changes.
6437 (list
6438 #:test-flags
6439 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6440 (native-inputs
6441 (list python-pytest
6442 python-setuptools))
6443 (propagated-inputs
6444 (list python-h5py
6445 python-numpy-1))
6446 (home-page "https://github.com/frejanordsiek/hdf5storage")
6447 (synopsis "Read and write Python data types from and to HDF5 files")
6448 (description
6449 "This Python package provides high-level utilities to read and write a
6450variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6451formatted files. This package also provides support for MATLAB MAT v7.3
6452formatted files, which are HDF5 files with a different extension and some
6453extra metadata. Because HDF5 and MAT files might need to be read from
6454untrusted sources, pickling is avoided in this package.")
6455 (license license:bsd-2))))
6456
6457(define-public python-prctl
6458 (package
6459 (name "python-prctl")
6460 (version "1.8.1")
6461 (source (origin
6462 (method url-fetch)
6463 (uri (pypi-uri "python-prctl" version))
6464 (sha256
6465 (base32
6466 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6467 (build-system pyproject-build-system)
6468 (arguments
6469 (list #:test-backend ''custom
6470 #:test-flags ''("test_prctl.py")
6471 #:phases
6472 #~(modify-phases %standard-phases
6473 (add-after 'unpack 'patch-tests
6474 (lambda _
6475 (substitute* "test_prctl.py"
6476 ;; actual suffix used in cpython build output dir name
6477 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6478 ;; test_no_new_privs assumes existence of /bin/ping, but
6479 ;; can never run anyway due to it requiring setuid ping.
6480 ;; just short circuit it instead.
6481 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6482 (inputs (list libcap))
6483 (native-inputs (list python-setuptools))
6484 (supported-systems (filter target-linux? %supported-systems))
6485 (home-page "https://pythonhosted.org/python-prctl")
6486 (synopsis "Linux capabilities library")
6487 (description "This package provides a Python library for controlling Linux
6488capabilities and attributes, similar to the prctl syscall.")
6489 (license license:gpl3+)))
6490
6491(define-public python-pyhimitsu
6492 (package
6493 (name "python-pyhimitsu")
6494 (version "0.0.9")
6495 (source (origin
6496 (method url-fetch)
6497 (uri (pypi-uri "py_himitsu" version))
6498 (sha256
6499 (base32
6500 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6501 (build-system pyproject-build-system)
6502 (arguments
6503 (list
6504 #:phases
6505 #~(modify-phases %standard-phases
6506 (replace 'check
6507 (lambda _
6508 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6509 (invoke "make" "check"))))))
6510 (native-inputs (list python-hatchling))
6511 (propagated-inputs (list python-pyxdg))
6512 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6513 (synopsis "Himitsu client protocol implementation in Python")
6514 (description "This package provides a library for writing Himitsu client
6515programs in Python.")
6516 (license license:expat)))
6517
6518(define-public python-hjson
6519 ;; Using commit from master branch as the PyPI version does not contain
6520 ;; the hjson/tests/ directory.
6521 (let ((revision "0")
6522 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6523 (package
6524 (name "python-hjson")
6525 (version (git-version "3.1.0" revision commit))
6526 (source (origin
6527 (method git-fetch)
6528 (uri (git-reference
6529 (url "https://github.com/hjson/hjson-py")
6530 (commit commit)))
6531 (file-name (git-file-name name version))
6532 (sha256
6533 (base32
6534 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6535 (modules '((guix build utils)))
6536 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6537 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6538 (snippet #~(substitute* "hjson/__init__.py"
6539 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6540 "{'foo': 'a', 'bar': 1}")))))
6541 (build-system pyproject-build-system)
6542 (native-inputs (list python-setuptools python-wheel))
6543 (home-page "https://github.com/hjson/hjson-py")
6544 (synopsis "Python package to parse HJSON documents")
6545 (description "This package provides a Python library and a command-line
6546interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6547 (license license:expat))))
6548
6549(define-public python-hnswlib
6550 (package
6551 (name "python-hnswlib")
6552 (version "0.8.0")
6553 (source
6554 (origin
6555 (method git-fetch)
6556 (uri (git-reference
6557 (url "https://github.com/nmslib/hnswlib")
6558 (commit (string-append "v" version))))
6559 (file-name (git-file-name name version))
6560 (sha256
6561 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6562 (build-system pyproject-build-system)
6563 (arguments
6564 (list
6565 #:phases
6566 #~(modify-phases %standard-phases
6567 (add-after 'unpack 'disable-native-optimization
6568 (lambda _
6569 (substitute* "setup.py"
6570 ((", '-march=native'")
6571 "")))))))
6572 (native-inputs
6573 (list pybind11-2
6574 python-pytest
6575 python-setuptools))
6576 (propagated-inputs
6577 (list python-numpy))
6578 (home-page "https://github.com/nmslib/hnswlib")
6579 (synopsis "Fast approximate nearest neighbor search")
6580 (description "Hnswlib is a header-only C++ implementation of fast
6581approximate nearest neighbor search with Python bindings.")
6582 (license license:asl2.0)))
6583
6584(define-public python-pylatex
6585 (package
6586 (name "python-pylatex")
6587 (version "1.4.2")
6588 (source
6589 (origin
6590 (method git-fetch)
6591 (uri (git-reference
6592 (url "https://github.com/JelteF/PyLaTeX")
6593 (commit (string-append "v" version))))
6594 (file-name (git-file-name name version))
6595 (sha256
6596 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6597 (build-system pyproject-build-system)
6598 (arguments
6599 (list #:phases
6600 #~(modify-phases %standard-phases
6601 ;; some tests attempt to create directories
6602 (add-before 'check 'set-home-directory
6603 (lambda _
6604 (setenv "HOME" "/tmp"))))))
6605 (propagated-inputs (list python-ordered-set))
6606 (native-inputs (list python-matplotlib
6607 python-pytest
6608 python-quantities
6609 python-setuptools
6610 (texlive-local-tree
6611 (list texlive-lastpage
6612 texlive-latexmk
6613 texlive-parskip))))
6614 (home-page "https://github.com/JelteF/PyLaTeX")
6615 (synopsis "Library for creating LaTeX files and snippets")
6616 (description
6617 "This package provides a Python library for creating LaTeX files and
6618snippets.")
6619 (license license:expat)))
6620
6621(define-public python-pylatexenc
6622 (package
6623 (name "python-pylatexenc")
6624 (version "2.10")
6625 (source
6626 (origin
6627 (method url-fetch)
6628 (uri (pypi-uri "pylatexenc" version))
6629 (sha256
6630 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6631 (build-system pyproject-build-system)
6632 (native-inputs (list python-pytest python-setuptools python-wheel))
6633 (home-page "https://github.com/phfaist/pylatexenc")
6634 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6635 (description
6636 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6637Unicode-to-LaTeX conversion.")
6638 (license license:expat)))
6639
6640(define-public python-lsp-black
6641 (package
6642 (name "python-lsp-black")
6643 (version "2.0.0")
6644 (source
6645 (origin
6646 (method git-fetch)
6647 (uri (git-reference
6648 (url "https://github.com/python-lsp/python-lsp-black")
6649 (commit (string-append "v" version))))
6650 (file-name (git-file-name name version))
6651 (sha256
6652 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6653 (build-system pyproject-build-system)
6654 (arguments
6655 ;; The python version is too old for these tests to pass properly.
6656 (list #:test-flags
6657 `'("-k" ,(string-append
6658 "not test_pylsp_format_document_syntax_error"
6659 " and not test_pylsp_format_range_syntax_error"
6660 " and not test_load_config_defaults"
6661 " and not test_load_config_with_skip_options"))))
6662 (propagated-inputs
6663 (list python-black python-lsp-server python-tomli))
6664 (native-inputs
6665 (list python-pytest python-setuptools python-wheel))
6666 (home-page "https://github.com/python-lsp/python-lsp-black")
6667 (synopsis "Black plugin for the Python LSP Server")
6668 (description "This package provides a plugin with support for the
6669@code{python-black} formatter for the Python LSP Server.")
6670 (license license:expat)))
6671
6672(define-public python-pylsp-mypy
6673 (package
6674 (name "python-pylsp-mypy")
6675 (version "0.7.1")
6676 (source
6677 (origin
6678 ;; "The newest version on PyPI is indeed not published on GitHub."
6679 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6680 (method url-fetch)
6681 (uri (pypi-uri "pylsp_mypy" version))
6682 (sha256
6683 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6684 (build-system pyproject-build-system)
6685 (native-inputs (list python-pytest python-setuptools))
6686 (propagated-inputs (list python-mypy python-lsp-server))
6687 (home-page "https://github.com/python-lsp/pylsp-mypy")
6688 (synopsis "Mypy linter for the Python LSP Server")
6689 (description
6690 "Mypy linter integration for use with @code{python-lsp-server}.")
6691 (license license:expat)))
6692
6693(define-public python-sh
6694 (package
6695 (name "python-sh")
6696 (version "2.2.2")
6697 (source
6698 (origin
6699 (method url-fetch)
6700 (uri (pypi-uri "sh" version))
6701 (sha256
6702 (base32
6703 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6704 (build-system pyproject-build-system)
6705 (arguments
6706 (list
6707 #:test-flags
6708 #~(list "-k" (string-join
6709 ;; These tests are shaky.
6710 (list "not test_bad_sig_raise_exception"
6711 "test_doesnt_execute_directories"
6712 "test_environment"
6713 "test_ok_code_ignores_bad_sig_exception"
6714 "test_unicode_path")
6715 " and not ")
6716 "tests")
6717 #:phases
6718 #~(modify-phases %standard-phases
6719 (add-before 'check 'pre-check
6720 (lambda _
6721 (setenv "HOME" "/tmp"))))))
6722 (native-inputs
6723 (list python-poetry-core python-pytest))
6724 (home-page "https://github.com/amoffat/sh")
6725 (synopsis "Python subprocess replacement")
6726 (description "This package provides a replacement for Python's
6727@code{subprocess} feature.")
6728 (license license:expat)))
6729
6730;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6731;; that is updated.
6732(define-public python-sh-1
6733 (package
6734 (inherit python-sh)
6735 (version "1.14.2")
6736 (source
6737 (origin
6738 (method url-fetch)
6739 (uri (pypi-uri "sh" version))
6740 (sha256
6741 (base32
6742 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6743 (arguments
6744 '(#:phases
6745 (modify-phases %standard-phases
6746 (replace 'check
6747 (lambda _
6748 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6749 (setenv "HOME" "/tmp")
6750 (invoke "python" "sh.py" "test"))))))
6751 (native-inputs
6752 (list python-setuptools))))
6753
6754(define-public python-cftime
6755 (package
6756 (name "python-cftime")
6757 (version "1.6.5")
6758 (source
6759 (origin
6760 (method url-fetch)
6761 (uri (pypi-uri "cftime" version))
6762 (sha256
6763 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6764 (build-system pyproject-build-system)
6765 (propagated-inputs
6766 (list python-numpy))
6767 (native-inputs
6768 (list python-cython
6769 python-pytest
6770 python-setuptools
6771 python-wheel))
6772 (home-page "https://unidata.github.io/cftime/")
6773 (synopsis "Library for time handling")
6774 (description
6775 "This package provides time-handling functionality that used to be part
6776of the netcdf4 package before.")
6777 (license license:expat)))
6778
6779(define-public python-netcdf4
6780 (package
6781 (name "python-netcdf4")
6782 (version "1.7.2")
6783 (source
6784 (origin
6785 (method git-fetch)
6786 (uri (git-reference
6787 (url "https://github.com/Unidata/netcdf4-python")
6788 (commit (string-append "v" version "rel"))))
6789 (file-name (git-file-name name version))
6790 (sha256
6791 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
6792 (build-system pyproject-build-system)
6793 (arguments
6794 (list
6795 ;; tests: Ran 113 tests; skipped=7
6796 #:phases
6797 #~(modify-phases %standard-phases
6798 (add-before 'build 'set-configure-flags
6799 (lambda _
6800 (setenv "CFLAGS" (string-join
6801 (list "-g -O2"
6802 "-Wno-error=incompatible-pointer-types"
6803 "-Wno-error=implicit-function-declaration"
6804 "-Wno-error=int-conversion")
6805 " "))
6806 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
6807 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
6808 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
6809 (setenv "USE_NCCONFIG" "0")))
6810 (replace 'check
6811 (lambda* (#:key tests? #:allow-other-keys)
6812 (when tests?
6813 (with-directory-excursion "test"
6814 (setenv "NO_NET" "1")
6815 (setenv "NO_CDL" "1")
6816 (invoke "python" "run_all.py"))))))))
6817 (native-inputs
6818 (list python-cython
6819 python-packaging
6820 python-pytest
6821 python-setuptools
6822 python-setuptools-scm
6823 python-typing-extensions))
6824 (inputs
6825 (list netcdf
6826 hdf5
6827 zlib))
6828 (propagated-inputs
6829 (list python-certifi
6830 python-cftime
6831 python-numpy))
6832 (home-page "https://github.com/Unidata/netcdf4-python")
6833 (synopsis "Python/numpy interface to the netCDF library")
6834 (description "Netcdf4-python is a Python interface to the netCDF C
6835library. netCDF version 4 has many features not found in earlier
6836versions of the library and is implemented on top of HDF5. This module
6837can read and write files in both the new netCDF 4 and the old netCDF 3
6838format, and can create files that are readable by HDF5 clients. The
6839API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
6840to users of that module.")
6841 ;; The software is mainly ISC, but includes some files covered
6842 ;; by the Expat license.
6843 (license (list license:isc license:expat))))
6844
6845(define-public python-ncclient
6846 (package
6847 (name "python-ncclient")
6848 (version "0.6.19")
6849 (source
6850 (origin
6851 (method git-fetch) ;no tests in PyPI release
6852 (uri (git-reference
6853 (url "https://github.com/ncclient/ncclient")
6854 (commit (string-append "v" version))))
6855 (file-name (git-file-name name version))
6856 (sha256
6857 (base32
6858 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
6859 (build-system pyproject-build-system)
6860 (native-inputs
6861 (list python-pytest
6862 python-setuptools
6863 python-wheel))
6864 (propagated-inputs
6865 (list python-lxml
6866 python-paramiko))
6867 (home-page "https://github.com/ncclient/ncclient")
6868 (synopsis "Python library for NETCONF clients")
6869 (description "@code{ncclient} is a Python library that facilitates
6870client-side scripting and application development around the NETCONF
6871protocol.")
6872 (license license:asl2.0)))
6873
6874(define-public python-ncls
6875 (package
6876 (name "python-ncls")
6877 (version "0.0.68")
6878 (source (origin
6879 (method url-fetch)
6880 (uri (pypi-uri "ncls" version))
6881 (sha256
6882 (base32
6883 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
6884 (build-system pyproject-build-system)
6885 (arguments
6886 ;; Those tests fail with warnings (not errors) for the Numpy update.
6887 ;; Remove it at next python-team iteration.
6888 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
6889 "--ignore=examples/test_find_overlap_list.py")))
6890 (native-inputs (list python-cython
6891 python-pandas
6892 python-pytest
6893 python-setuptools
6894 python-wheel))
6895 (propagated-inputs (list python-numpy))
6896 (home-page "https://github.com/endrebak/ncls")
6897 (synopsis "Nested containment list data structure")
6898 (description
6899 "This package provides a wrapper for the nested containment list data
6900structure. It is a static interval-tree that is fast for both construction
6901and lookups.")
6902 (license license:bsd-3)))
6903
6904(define-public python-license-expression
6905 (package
6906 (name "python-license-expression")
6907 (version "30.1.0")
6908 (source
6909 (origin
6910 (method url-fetch)
6911 (uri (pypi-uri "license-expression" version))
6912 (sha256
6913 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
6914 (build-system pyproject-build-system)
6915 (native-inputs
6916 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
6917 (propagated-inputs
6918 (list python-boolean.py))
6919 (home-page "https://github.com/nexB/license-expression")
6920 (synopsis "Apply boolean logic to license expressions")
6921 (description
6922 "This Python module defines a tiny language to evaluate and compare
6923license expressions using boolean logic. Logical combinations of licenses can
6924be tested for equality, containment, and equivalence. They can be normalised
6925and simplified. It supports SPDX license expressions as well as other naming
6926conventions and aliases in the same expression.")
6927 (license license:gpl2+)))
6928
6929(define-public python-limits
6930 (package
6931 (name "python-limits")
6932 (version "5.8.0")
6933 (source
6934 (origin
6935 (method git-fetch)
6936 (uri (git-reference
6937 (url "https://github.com/alisaifee/limits")
6938 (commit version)))
6939 (file-name (git-file-name name version))
6940 (sha256
6941 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
6942 (build-system pyproject-build-system)
6943 (arguments
6944 (list
6945 ;; tests: 155 passed, 620 deselected
6946 #:test-flags
6947 #~(list
6948 ;; The test suite spawns storages in Docker.
6949 "-k" (simple-format #f "not (~a)"
6950 (string-join
6951 '("lazy_dependency" ;importing redis
6952 "memcache"
6953 "mongo"
6954 "redis"
6955 "valkey")
6956 " or "))
6957 "--ignore=tests/benchmarks")
6958 #:phases
6959 #~(modify-phases %standard-phases
6960 (add-before 'check 'adjust-tests
6961 (lambda _
6962 (substitute* "pytest.ini"
6963 ((".*--cov=.*") "")
6964 ((".*-K.*") ""))
6965 (substitute* (find-files "tests" "\\.py$")
6966 (("import pymemcache.*") "")
6967 (("import pymongo.*") "")
6968 (("import redis.*") "")
6969 (("import valkey.*") "")
6970 ;; Lazy fixtures are only used for storages.
6971 (("from pytest_lazy_fixtures import lf.*") "")
6972 (("lf\\((.+)\\)" all fixture) fixture))
6973 (substitute* "tests/test_storage.py"
6974 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
6975 (propagated-inputs (list python-deprecated python-packaging))
6976 (native-inputs
6977 (list python-flaky
6978 python-hatch-vcs
6979 python-hatchling
6980 python-pytest
6981 python-pytest-asyncio))
6982 (home-page "https://limits.readthedocs.io/")
6983 (synopsis "Rate limiting utilities")
6984 (description
6985 "This package provides a Python library to perform rate limiting with
6986commonly used storage backends.")
6987 (license license:expat)))
6988
6989(define-public python-fb-re2
6990 (package
6991 (name "python-fb-re2")
6992 (version "1.0.7")
6993 (source
6994 (origin
6995 (method git-fetch)
6996 (uri (git-reference
6997 (url "https://github.com/facebook/pyre2")
6998 (commit (string-append "v" version))))
6999 (file-name (git-file-name name version))
7000 (sha256
7001 (base32
7002 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
7003 (build-system pyproject-build-system)
7004 (arguments
7005 (list
7006 #:phases
7007 #~(modify-phases %standard-phases
7008 (add-after 'unpack 'fix-tests
7009 (lambda _
7010 (substitute* "tests/test_match.py"
7011 (("assertRaisesRegexp")
7012 "assertRaisesRegex")))))))
7013 (native-inputs
7014 (list python-pytest python-setuptools))
7015 (inputs
7016 (list re2))
7017 (home-page "https://github.com/facebook/pyre2")
7018 (synopsis "Python wrapper for RE2")
7019 (description "This package provides a Python extension that wraps Google's
7020RE2 regular expression library. It implements many of the features of
7021Python's built-in @code{re} module with compatible interfaces.")
7022 (license license:bsd-3)))
7023
7024(define-public python-filelock
7025 ;; Try to update simultaneously with the bootstrap version in
7026 ;; (gnu packages python-build).
7027 (package
7028 (name "python-filelock")
7029 (version "3.16.1")
7030 (source
7031 (origin
7032 (method url-fetch)
7033 (uri (pypi-uri "filelock" version))
7034 (sha256
7035 (base32
7036 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
7037 (build-system pyproject-build-system)
7038 (arguments
7039 (list
7040 ;; Break cycle with virtualenv.
7041 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
7042 (native-inputs
7043 (list python-hatch-vcs
7044 python-hatchling
7045 python-pytest
7046 python-pytest-asyncio
7047 python-pytest-mock
7048 python-setuptools-scm))
7049 (home-page "https://github.com/tox-dev/py-filelock")
7050 (synopsis "Platform independent file lock")
7051 (description "@code{filelock} contains a single module implementing
7052a platform independent file lock in Python, which provides a simple way of
7053inter-process communication.")
7054 (license license:unlicense)))
7055
7056(define-public python-filelock-next
7057 (package
7058 (inherit python-filelock)
7059 (name "python-filelock")
7060 (version "3.20.0")
7061 (source
7062 (origin
7063 (method url-fetch)
7064 (uri (pypi-uri "filelock" version))
7065 (sha256
7066 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
7067 (native-inputs
7068 (list python-hatch-vcs
7069 python-hatchling
7070 python-pytest
7071 python-pytest-asyncio
7072 python-pytest-mock
7073 python-pytest-timeout))))
7074
7075(define-public python-seedir
7076 (package
7077 (name "python-seedir")
7078 (version "0.5.0")
7079 (source
7080 (origin
7081 (method url-fetch)
7082 (uri (pypi-uri "seedir" version))
7083 (sha256
7084 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
7085 (build-system pyproject-build-system)
7086 (propagated-inputs (list python-natsort))
7087 (native-inputs (list python-pytest python-setuptools python-wheel))
7088 (home-page "https://github.com/earnestt1234/seedir")
7089 (synopsis
7090 "Package for creating, editing, and reading folder tree diagrams.")
7091 (description
7092 "This is a package for creating, editing, and reading folder tree
7093diagrams.")
7094 (license license:expat)))
7095
7096(define-public python-semantic-version
7097 (package
7098 (name "python-semantic-version")
7099 (version "2.10.0")
7100 (source
7101 (origin
7102 (method url-fetch)
7103 (uri (pypi-uri "semantic_version" version))
7104 (sha256
7105 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
7106 (build-system pyproject-build-system)
7107 (arguments (list #:test-backend #~'nose2))
7108 (native-inputs
7109 (list python-nose2
7110 python-setuptools))
7111 (home-page "https://github.com/rbarrois/python-semanticversion")
7112 (synopsis "Semantic versioning module for Python")
7113 (description
7114 "The @code{semantic_version} class is a small library for handling
7115@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
7116
7117It can compare versions, generate a new version that represents a bump in one
7118of the version levels, and check whether any given string is a proper semantic
7119version identifier.")
7120 (license license:bsd-3)))
7121
7122(define-public python-serpent
7123 (package
7124 (name "python-serpent")
7125 (version "1.41")
7126 (source
7127 (origin
7128 (method git-fetch)
7129 (uri (git-reference
7130 (url "https://github.com/irmen/Serpent")
7131 (commit (string-append "serpent-" version))))
7132 (file-name (git-file-name name version))
7133 (sha256
7134 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
7135 (build-system pyproject-build-system)
7136 (arguments (list #:test-backend #~'unittest
7137 #:test-flags #~(list "discover" "-s" "tests")))
7138 (native-inputs
7139 (list python-attrs python-pytz python-setuptools))
7140 (home-page "https://github.com/irmen/Serpent")
7141 (synopsis "Serializer for literal Python expressions")
7142 (description
7143 "Serpent provides @code{ast.literal_eval()}-compatible object tree
7144serialization. It serializes an object tree into bytes (an utf-8 encoded
7145string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
7146to rebuild the original object tree.
7147
7148Because only safe literals are encoded, it is safe to send serpent data to
7149other machines, such as over the network.")
7150 (license license:expat)))
7151
7152(define-public python-setuptools-declarative-requirements
7153 (package
7154 (name "python-setuptools-declarative-requirements")
7155 (version "1.3.0")
7156 (source
7157 (origin
7158 (method url-fetch)
7159 (uri (pypi-uri "setuptools-declarative-requirements" version))
7160 (sha256
7161 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
7162 (build-system pyproject-build-system)
7163 (arguments
7164 (list #:tests? #f)) ;require dated inputs
7165 (native-inputs
7166 (list python-setuptools-scm))
7167 (propagated-inputs
7168 (list python-setuptools))
7169 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
7170 (synopsis "File support for setuptools declarative setup.cfg")
7171 (description
7172 "This package provides file support for setuptools declarative
7173@code{setup.cfg}.")
7174 (license license:asl2.0)))
7175
7176(define-public python-humanfriendly
7177 (package
7178 (name "python-humanfriendly")
7179 (version "10.0")
7180 (source
7181 (origin
7182 (method git-fetch)
7183 (uri (git-reference
7184 (url "https://github.com/xolox/python-humanfriendly")
7185 (commit version)))
7186 (file-name (git-file-name name version))
7187 (sha256
7188 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
7189 (build-system pyproject-build-system)
7190 (arguments
7191 (list
7192 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
7193 #:tests? #f))
7194 (native-inputs (list python-setuptools))
7195 (home-page "https://humanfriendly.readthedocs.io")
7196 (synopsis "Human-friendly input and output in Python")
7197 (description
7198 "The functions and classes in @code{humanfriendly} can be used to make
7199text interfaces more user-friendly. It includes tools to parse and format
7200numbers, file sizes, and timespans, timers for long-running operations, menus
7201to allow the user to choose from a list of options, and terminal interaction
7202helpers.")
7203 (license license:expat)))
7204
7205(define-public python-calver
7206 (package
7207 (name "python-calver")
7208 (version "2022.06.26")
7209 (source
7210 (origin
7211 (method git-fetch)
7212 (uri (git-reference
7213 (url "https://github.com/di/calver")
7214 (commit version)))
7215 (file-name (git-file-name name version))
7216 (sha256
7217 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
7218 (build-system pyproject-build-system)
7219 (native-inputs
7220 (list python-pretend
7221 python-pytest
7222 python-setuptools
7223 python-wheel))
7224 (home-page "https://github.com/di/calver")
7225 (synopsis "Setuptools extension for CalVer package versions")
7226 (description
7227 "The calver package is a setuptools extension for automatically defining
7228your Python package version as a calendar version.")
7229 (license license:asl2.0)))
7230
7231(define-public python-can
7232 (package
7233 (name "python-can")
7234 (version "4.6.1")
7235 (source
7236 (origin
7237 (method git-fetch)
7238 (uri (git-reference
7239 (url "https://github.com/hardbyte/python-can")
7240 (commit (string-append "v" version))))
7241 (file-name (git-file-name name version))
7242 (sha256
7243 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
7244 (build-system pyproject-build-system)
7245 (arguments
7246 (list
7247 #:test-flags
7248 #~(list
7249 ;; TODO: Check if it could be packed:
7250 ;; https://github.com/projectgus/python-canalystii
7251 ;;
7252 ;; Disable tests which require specific CAN drivers we have no
7253 ;; package for in Guix.
7254 "--ignore=test/test_interface_canalystii.py"
7255 ;; These tests fail with "OSError: [Errno 19] No such device".
7256 "-k" "not BasicTestUdpMulticastBusIPv")
7257 #:phases
7258 #~(modify-phases %standard-phases
7259 (add-after 'unpack 'relax-requirements
7260 (lambda _
7261 (substitute* "pyproject.toml"
7262 (("\"wrapt~=.*\"")
7263 "\"wrapt\"")))))))
7264 (propagated-inputs (list python-packaging python-wrapt))
7265 (native-inputs
7266 (list ;; python-canalystii ; Not packed yet
7267 python-hypothesis
7268 python-mock
7269 python-parameterized
7270 python-pyserial
7271 python-pytest
7272 python-pytest-timeout
7273 python-setuptools
7274 python-setuptools-scm))
7275 (home-page "https://github.com/hardbyte/python-can")
7276 (synopsis "Controller Area Network (CAN) interface module for Python")
7277 (description
7278 "This package defines the @code{can} module, which provides controller
7279area network (CAN) support for Python developers; providing common
7280abstractions to different hardware devices, and a suite of utilities for
7281sending and receiving messages on a CAN bus.")
7282 (license license:lgpl3+)))
7283
7284(define-public python-canmatrix
7285 (package
7286 (name "python-canmatrix")
7287 (version "1.2")
7288 (source
7289 (origin
7290 (method git-fetch) ; no tests data in PyPi package
7291 (uri (git-reference
7292 (url "https://github.com/ebroecker/canmatrix")
7293 (commit version)))
7294 (file-name (git-file-name name version))
7295 (sha256
7296 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
7297 (build-system pyproject-build-system)
7298 (native-inputs
7299 (list python-pytest
7300 python-pytest-timeout
7301 python-setuptools
7302 python-wheel))
7303 (propagated-inputs
7304 (list python-attrs
7305 python-canopen
7306 python-click
7307 ;; python-ldfparser
7308 python-lxml
7309 python-openpyxl
7310 python-pyyaml
7311 python-xlrd
7312 python-xlwt))
7313 (home-page "https://github.com/ebroecker/canmatrix")
7314 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
7315 (description
7316 "This package implements a @acronym{CAN, Controller Area Network} matrix
7317object in Python which describes the CAN-communication and its needed objects
7318such as board units, frames, signals, and values. It also includes two
7319command-line tools (@command{canconvert} and @command{cancompare}) for
7320converting and comparing CAN databases.")
7321 (license license:bsd-2)))
7322
7323(define-public python-canopen
7324 (package
7325 (name "python-canopen")
7326 (version "2.4.1")
7327 (source
7328 (origin
7329 (method git-fetch)
7330 (uri (git-reference
7331 (url "https://github.com/canopen-python/canopen")
7332 (commit (string-append "v" version))))
7333 (file-name (git-file-name name version))
7334 (sha256
7335 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
7336 (build-system pyproject-build-system)
7337 (native-inputs (list python-pytest python-setuptools))
7338 (propagated-inputs (list python-can))
7339 (home-page "https://github.com/canopen-python/canopen")
7340 (synopsis "CANopen stack implementation")
7341 (description
7342 "This package provides a Python implementation of the
7343@uref{https://www.can-cia.org/canopen/,CANopen standard} for
7344@acronym{CANs, controller-area networks}. The aim of the project is to
7345support the most common parts of the CiA 301 standard in a simple
7346Pythonic interface. It is mainly targeted for testing and automation
7347tasks rather than a standard compliant master implementation.")
7348 (license license:expat)))
7349
7350(define-public python-diskcache
7351 (package
7352 (name "python-diskcache")
7353 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
7354 ;; Django fixing failing tests.
7355 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
7356 (revision . "0")))
7357 (version (git-version "5.6.3"
7358 (assoc-ref properties 'revision)
7359 (assoc-ref properties 'commit)))
7360 (source
7361 (origin
7362 (method git-fetch)
7363 (uri (git-reference
7364 (url "https://github.com/grantjenks/python-diskcache")
7365 (commit (assoc-ref properties 'commit))))
7366 (file-name (git-file-name name version))
7367 (sha256
7368 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
7369 (build-system pyproject-build-system)
7370 (arguments
7371 (list
7372 #:phases
7373 #~(modify-phases %standard-phases
7374 (add-after 'unpack 'fix-pytest-config
7375 (lambda _
7376 ;; Prevent full threads utilization.
7377 (substitute* "tox.ini"
7378 (("-n auto") "")))))))
7379 (native-inputs
7380 (list python-django
7381 python-pytest
7382 python-setuptools))
7383 (home-page "https://www.grantjenks.com/docs/diskcache/")
7384 (synopsis "Disk and file backed cache library")
7385 (description "DiskCache is a disk and file backed persistent cache.")
7386 (license license:asl2.0)))
7387
7388(define-public python-optparse-pretty
7389 (package
7390 (name "python-optparse-pretty")
7391 (version "0.1.1")
7392 (source
7393 (origin
7394 (method url-fetch)
7395 (uri (pypi-uri "optparse-pretty" version))
7396 (sha256
7397 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7398 (build-system pyproject-build-system)
7399 (arguments (list #:tests? #false)) ;There are none
7400 (native-inputs (list python-setuptools python-wheel))
7401 (home-page "https://github.com/gvalkov/optparse-pretty")
7402 (synopsis "Compact help formatter for optparse")
7403 (description
7404 "This module provides two help formatters for optparse. They provide
7405terser and more customizable option formatting in comparison to the default
7406help formatter.")
7407 (license license:bsd-3)))
7408
7409(define-public python-orjson
7410 (package
7411 (name "python-orjson")
7412 (version "3.9.7")
7413 (source (origin
7414 (method url-fetch)
7415 (uri (pypi-uri "orjson" version))
7416 (sha256
7417 (base32
7418 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7419 (build-system cargo-build-system)
7420 (arguments
7421 (list
7422 #:imported-modules `(,@%cargo-build-system-modules
7423 ,@%pyproject-build-system-modules)
7424 #:modules '((guix build cargo-build-system)
7425 ((guix build pyproject-build-system) #:prefix py:)
7426 (guix build utils))
7427 #:phases
7428 #~(modify-phases %standard-phases
7429 (add-after 'build 'build-python-module
7430 (assoc-ref py:%standard-phases 'build))
7431 (add-after 'build-python-module 'install-python-module
7432 (assoc-ref py:%standard-phases 'install)))
7433 #:install-source? #false))
7434 (inputs
7435 (cons maturin (cargo-inputs 'python-orjson)))
7436 (native-inputs
7437 (list python-wrapper))
7438 (home-page "https://github.com/ijl/orjson")
7439 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7440 (description "Orjson is a fast, correct JSON library for Python. It
7441benchmarks as the fastest Python library for JSON and is more correct than the
7442standard @code{json} library or other third-party libraries. It serializes
7443dataclass, datetime, numpy, and UUID instances natively.")
7444 ;; Either of these licenses
7445 (license (list license:asl2.0 license:expat))))
7446
7447(define-public python-overrides
7448 (package
7449 (name "python-overrides")
7450 (version "7.7.0")
7451 (source
7452 (origin
7453 (method url-fetch)
7454 (uri (pypi-uri "overrides" version))
7455 (sha256
7456 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7457 (build-system pyproject-build-system)
7458 (native-inputs (list python-pytest python-setuptools python-wheel))
7459 (home-page "https://github.com/mkorpela/overrides")
7460 (synopsis "Decorator to detect mismatch when overriding a method")
7461 (description
7462 "This package provides a decorator to automatically detect mismatch when
7463overriding a method.")
7464 (license license:asl2.0)))
7465
7466(define-public python-argparse-addons
7467 (package
7468 (name "python-argparse-addons")
7469 (version "0.12.0")
7470 (source
7471 (origin
7472 (method url-fetch)
7473 (uri (pypi-uri "argparse_addons" version))
7474 (sha256
7475 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7476 (build-system pyproject-build-system)
7477 (native-inputs
7478 (list python-pytest python-setuptools))
7479 (home-page "https://github.com/eerimoq/argparse_addons")
7480 (synopsis "Extensions for Python's @code{argparse} library")
7481 (description "This Python library provides additional types and actions
7482for the standard @code{argparse} library.")
7483 (license license:expat)))
7484
7485(define-public python-bitstruct
7486 (package
7487 (name "python-bitstruct")
7488 (version "8.21.0")
7489 (source
7490 (origin
7491 (method url-fetch)
7492 (uri (pypi-uri "bitstruct" version))
7493 (sha256
7494 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7495 (build-system pyproject-build-system)
7496 (native-inputs
7497 (list python-pytest
7498 python-setuptools
7499 python-wheel))
7500 (home-page "https://github.com/eerimoq/bitstruct")
7501 (synopsis "Python values to and C bit field structs converter")
7502 (description
7503 "This module performs conversions between Python values and C bit field
7504structs represented as Python byte strings. It is intended to have a similar
7505interface as the @code{struct} module from Python, but working on bits instead
7506of primitive data types like @code{char}, @code{int}, etc.")
7507 (license license:expat)))
7508
7509(define-public python-cantools
7510 (package
7511 (name "python-cantools")
7512 (version "40.5.0")
7513 (source
7514 (origin
7515 (method git-fetch)
7516 (uri (git-reference
7517 (url "https://github.com/eerimoq/cantools")
7518 (commit version)))
7519 (file-name (git-file-name name version))
7520 (sha256
7521 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7522 (build-system pyproject-build-system)
7523 (native-inputs
7524 (list python-freezegun
7525 python-parameterized
7526 python-pytest
7527 python-setuptools
7528 python-setuptools-scm))
7529 (propagated-inputs
7530 (list python-argparse-addons
7531 python-bitstruct
7532 python-can
7533 python-crccheck
7534 python-diskcache
7535 python-matplotlib
7536 python-textparser))
7537 (home-page "https://github.com/eerimoq/cantools")
7538 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7539 (description
7540 "This package includes Controller Area Network (CAN) related tools that
7541can be used to:
7542@itemize
7543@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7544@item encode and decode CAN messages
7545@item multiplex simple and extended signals
7546@item diagnose DID encoding and decoding
7547@item dump the CAN decoder output
7548@item test CAN nodes
7549@item generate C source code
7550@item monitor the CAN bus
7551@end itemize")
7552 (license license:expat)))
7553
7554(define-public python-capturer
7555 (package
7556 (name "python-capturer")
7557 (version "3.0")
7558 (source
7559 (origin
7560 (method git-fetch)
7561 (uri (git-reference
7562 (url "https://github.com/xolox/python-capturer")
7563 (commit version)))
7564 (file-name (git-file-name name version))
7565 (sha256
7566 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7567 (build-system pyproject-build-system)
7568 (native-inputs (list python-pytest python-setuptools))
7569 (propagated-inputs (list python-humanfriendly))
7570 (home-page "https://capturer.readthedocs.io")
7571 (synopsis "Capture stdout and stderr streams of the current process")
7572 (description
7573 "The capturer package makes it easy to capture the stdout and stderr
7574streams of the current process and subprocesses. Output can be relayed
7575to the terminal in real time but is also available to the Python program
7576for additional processing.")
7577 (license license:expat)))
7578
7579(define-public python-fastprogress
7580 (package
7581 (name "python-fastprogress")
7582 (version "1.0.3")
7583 (source (origin
7584 (method git-fetch)
7585 (uri (git-reference
7586 (url "https://github.com/fastai/fastprogress")
7587 (commit version)))
7588 (file-name (git-file-name name version))
7589 (sha256
7590 (base32
7591 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7592 (build-system pyproject-build-system)
7593 (arguments
7594 (list #:tests? #f ;there are no tests
7595 #:phases #~(modify-phases %standard-phases
7596 ;; XXX: Fails with: "In procedure utime: No such file
7597 ;; or directory".
7598 (delete 'ensure-no-mtimes-pre-1980))))
7599 (native-inputs (list python-setuptools python-wheel))
7600 (home-page "https://github.com/fastai/fastprogress")
7601 (synopsis "Progress bar for Jupyter Notebook and console")
7602 (description
7603 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7604 (license license:asl2.0)))
7605
7606(define-public python-coloredlogs
7607 (package
7608 (name "python-coloredlogs")
7609 (version "15.0.1")
7610 (source
7611 (origin
7612 (method git-fetch)
7613 (uri (git-reference
7614 (url "https://github.com/xolox/python-coloredlogs")
7615 (commit version)))
7616 (file-name (git-file-name name version))
7617 (sha256
7618 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7619 (build-system pyproject-build-system)
7620 (arguments
7621 (list
7622 #:test-flags
7623 #~(list "-k"
7624 (string-join
7625 (list "not test_auto_install" ; Unclear why this fails.
7626 ;; XXX: Require a "script" executable.
7627 "test_cli_conversion"
7628 "test_empty_conversion"
7629 "test_output_interception")
7630 " and not "))))
7631 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7632 (propagated-inputs (list python-capturer))
7633 (home-page "https://coloredlogs.readthedocs.io")
7634 (synopsis "Colored stream handler for Python's logging module")
7635 (description
7636 "The @code{coloredlogs} package enables colored terminal output for
7637Python's logging module. The @code{ColoredFormatter} class inherits from
7638@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7639messages in color.")
7640 (license license:expat)))
7641
7642(define-public python-editorconfig
7643 (package
7644 (name "python-editorconfig")
7645 (version "0.17.1")
7646 (source
7647 (origin
7648 (method git-fetch)
7649 (uri (git-reference
7650 (url "https://github.com/editorconfig/editorconfig-core-py")
7651 (commit (string-append "v" version))
7652 (recursive? #t)))
7653 (file-name (git-file-name name version))
7654 (sha256
7655 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7656 (build-system pyproject-build-system)
7657 (arguments
7658 (list
7659 #:phases
7660 #~(modify-phases %standard-phases
7661 (replace 'check
7662 (lambda _
7663 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7664 (invoke "cmake" ".")
7665 (invoke "ctest" "."))))))
7666 (native-inputs (list cmake python-setuptools python-wheel))
7667 (home-page "https://editorconfig.org/")
7668 (synopsis "EditorConfig bindings for python")
7669 (description "The EditorConfig project consists of a file format for
7670defining coding styles and a collection of text editor plugins that enable
7671editors to read the file format and adhere to defined styles. EditorConfig
7672files are easily readable and they work nicely with version control systems.")
7673 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7674 (license (list license:bsd-2 license:psfl))))
7675
7676(define-public dosage
7677 (package
7678 (name "dosage")
7679 (version "3.2")
7680 (source
7681 (origin
7682 (method url-fetch)
7683 (uri (pypi-uri "dosage" version))
7684 (sha256
7685 (base32
7686 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
7687 (build-system pyproject-build-system)
7688 (arguments
7689 ;; It requires additional modules for integration tests.
7690 (list #:test-flags #~(list "--ignore=tests/modules/")))
7691 (native-inputs
7692 (list python-pytest
7693 python-responses
7694 python-setuptools
7695 python-setuptools-scm))
7696 (inputs
7697 (list python-imagesize
7698 python-importlib-resources
7699 python-lxml
7700 python-platformdirs
7701 python-requests
7702 python-rich))
7703 (home-page "https://github.com/webcomics/dosage")
7704 (synopsis "Comic strip downloader and archiver")
7705 (description
7706 "Dosage is designed to keep a local copy of specific webcomics and other
7707picture-based content such as Picture of the Day sites. With the
7708@command{dosage} command-line script you can get the latest strip of a
7709webcomic, catch-up to the last strip downloaded, or download a strip for a
7710particular date or index, if possible.")
7711 (license license:expat)))
7712
7713(define-public python-etcd3
7714 (package
7715 (name "python-etcd3")
7716 (version "0.12.0")
7717 (source
7718 (origin
7719 (method git-fetch)
7720 (uri (git-reference
7721 (url "https://github.com/kragniz/python-etcd3")
7722 (commit (string-append "v" version))))
7723 (file-name (git-file-name name version))
7724 (sha256
7725 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7726 (build-system pyproject-build-system)
7727 (arguments
7728 (list
7729 ;; XXX: Tests require the etcd package.
7730 #:tests? #f
7731 #:test-backend #~'custom
7732 #:test-flags ; Taken from tox.ini.
7733 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7734 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
7735 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
7736 (home-page "https://github.com/kragniz/python-etcd3")
7737 (synopsis "Python client for the etcd3 API")
7738 (description
7739 "This package provide a Python client for the @code{etcd3} API.")
7740 (license license:asl2.0)))
7741
7742(define-public python-et-xmlfile
7743 (package
7744 (name "python-et-xmlfile")
7745 (version "2.0.0")
7746 (source
7747 (origin
7748 ;; Use a checkout because the PyPI archive does not contain tests.
7749 (method hg-fetch)
7750 (uri (hg-reference
7751 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7752 (changeset version)))
7753 (file-name (string-append name "-" version "-checkout"))
7754 (sha256
7755 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7756 (build-system pyproject-build-system)
7757 (native-inputs
7758 (list python-pytest
7759 python-lxml
7760 python-setuptools))
7761 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7762 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7763 (description "This Python library is based upon the @code{xmlfile} module
7764from @code{lxml}. It aims to provide a low memory, compatible implementation
7765of @code{xmlfile}.")
7766 (license license:expat)))
7767
7768(define-public python-omero-py
7769 (let ((omero-blitz-version "5.8.2"))
7770 (package
7771 (name "python-omero-py")
7772 (version "5.20.0")
7773 (source
7774 (origin
7775 (method git-fetch)
7776 (uri (git-reference
7777 (url "https://github.com/ome/omero-py")
7778 (commit (string-append "v" version))))
7779 (file-name (git-file-name name version))
7780 (sha256
7781 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
7782 (build-system pyproject-build-system)
7783 (arguments
7784 (list
7785 #:test-flags
7786 #~(list
7787 "-m" "not broken" "-rf" "test" "-s"
7788 ;; TestImport tries to download Java things; TestSessions
7789 ;; and TestBuildQuery require networking.
7790 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
7791 #:modules '((guix build pyproject-build-system)
7792 (guix build utils)
7793 (ice-9 match)
7794 (srfi srfi-1)
7795 (srfi srfi-26))
7796 #:phases
7797 #~(modify-phases %standard-phases
7798 (add-after 'unpack 'find-artifacts
7799 (lambda* (#:key inputs #:allow-other-keys)
7800 (let ((zip-file
7801 (match inputs
7802 (((labels . files) ...)
7803 (find (cut string-suffix?
7804 (string-append "omero-blitz-"
7805 #$omero-blitz-version
7806 "-python.zip")
7807 <>)
7808 files)))))
7809 (setenv "ZIP_FILE"
7810 (or zip-file (error "failed to find artifact file"))))))
7811 ;; Some tests need this, such as TestTempFileManager
7812 (add-after 'build 'set-HOME
7813 (lambda _ (setenv "HOME" "/tmp")))
7814 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
7815 ;; module to load.
7816 (delete 'sanity-check)
7817 ;; The argument parser is picky and interprets the "-real" part as
7818 ;; the first argument.
7819 (add-after 'wrap 'rename-executable
7820 (lambda _
7821 (with-directory-excursion (string-append #$output "/bin")
7822 (rename-file ".omero-real" ".omero")
7823 (substitute* "omero"
7824 (("bin/.omero-real") "bin/.omero"))))))))
7825 (propagated-inputs
7826 (list python-appdirs
7827 python-future
7828 python-numpy
7829 python-pillow
7830 python-pyyaml
7831 python-requests
7832 python-tables
7833 python-zeroc-ice-3.6))
7834 (native-inputs
7835 (list python-portalocker
7836 python-pytest
7837 python-pytest-mock
7838 python-pytest-rerunfailures
7839 python-pytest-xdist
7840 python-setuptools
7841 python-wheel
7842 unzip
7843 (origin
7844 (method url-fetch)
7845 (uri (format #f "\
7846https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
7847openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
7848 omero-blitz-version
7849 omero-blitz-version))
7850 (sha256
7851 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
7852 (home-page "https://github.com/ome/omero-py")
7853 (synopsis "Python bindings to the OMERO.blitz server")
7854 (description "This package provides Python bindings to the OMERO.blitz
7855server.")
7856 (license license:gpl2))))
7857
7858(define-public python-openpyxl
7859 (package
7860 (name "python-openpyxl")
7861 (version "3.1.5")
7862 (source
7863 (origin
7864 ;; We use the upstream repository, as the tests are not included in the
7865 ;; PyPI releases.
7866 (method hg-fetch)
7867 (uri (hg-reference
7868 (url "https://foss.heptapod.net/openpyxl/openpyxl")
7869 (changeset version)))
7870 (file-name (string-append name "-" version "-checkout"))
7871 (sha256
7872 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
7873 (build-system pyproject-build-system)
7874 (arguments
7875 (list
7876 ;; XXX: The workbook writer doesn't respect SOURCE_DATE_EPOCH
7877 ;; https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2268
7878 ;; It makes a few tests fail.
7879 #:test-flags
7880 #~(list "--ignore=openpyxl/worksheet/tests/test_read_only.py"
7881 "-k" (string-join
7882 (list "not test_unsupport_drawing"
7883 "test_broken_sheet_ref"
7884 "test_no_default_style"
7885 "test_ctor"
7886 "test_force_dimension"
7887 "test_get_max_cell"
7888 "test_read_hyperlinks_read_only"
7889 "test_read_with_missing_cells"
7890 "test_read_empty_rows")
7891 " and not "))))
7892 (native-inputs
7893 (list python-lxml-4.9
7894 python-pillow
7895 python-pytest
7896 python-setuptools))
7897 (propagated-inputs
7898 (list python-et-xmlfile))
7899 (home-page "https://openpyxl.readthedocs.io")
7900 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
7901 (description
7902 "This Python library allows reading and writing to the Excel XLSX, XLSM,
7903XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
7904standard.")
7905 (license license:expat)))
7906
7907(define-public python-sinfo
7908 (package
7909 (name "python-sinfo")
7910 (version "1.0.1")
7911 (source
7912 (origin
7913 (method git-fetch)
7914 (uri (git-reference
7915 (url "https://gitlab.com/joelostblom/session_info")
7916 (commit (string-append "v" version))))
7917 (file-name (git-file-name name version))
7918 (sha256
7919 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
7920 (build-system pyproject-build-system)
7921 (arguments
7922 (list #:tests? #f)) ; no tests in PyPI or Git
7923 (native-inputs
7924 (list python-setuptools))
7925 (propagated-inputs
7926 (list python-stdlib-list))
7927 (home-page "https://gitlab.com/joelostblom/session_info")
7928 (synopsis "Output module version information loaded in a Python session")
7929 (description "This package outputs version information for modules loaded
7930in the current session, Python, and the OS.")
7931 (license license:bsd-3)))
7932
7933(define-public python-schedule
7934 (package
7935 (name "python-schedule")
7936 (version "1.2.2")
7937 (source
7938 (origin
7939 (method url-fetch)
7940 (uri (pypi-uri "schedule" version))
7941 (sha256
7942 (base32
7943 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
7944 (build-system pyproject-build-system)
7945 (native-inputs
7946 (list python-pytest python-setuptools python-wheel))
7947 (home-page "https://github.com/dbader/schedule")
7948 (synopsis "Schedule periodic function calls in Python")
7949 (description
7950 "Schedule is an in-process scheduler for periodic jobs that uses the
7951builder pattern for configuration. Schedule lets you run Python functions (or
7952any other callable) periodically at pre-determined intervals using a simple,
7953human-friendly syntax.")
7954 (license license:expat)))
7955
7956;; XXX: This project is unmaintained since 2020, see:
7957;; <https://github.com/scour-project/scour/issues/321>.
7958;;
7959;; The only user is Inkscape, see:
7960;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
7961(define-public python-scour
7962 (package
7963 (name "python-scour")
7964 (version "0.38.2")
7965 (source
7966 (origin
7967 (method git-fetch)
7968 (uri
7969 (git-reference
7970 (url "https://gitlab.com/inkscape/extras/scour")
7971 (commit
7972 (string-append "v" version))))
7973 (file-name (git-file-name name version))
7974 (sha256
7975 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
7976 (build-system pyproject-build-system)
7977 (arguments
7978 (list #:test-backend #~'custom
7979 #:test-flags #~(list "test_scour.py")))
7980 (native-inputs
7981 (list python-setuptools))
7982 (propagated-inputs
7983 (list python-six))
7984 (home-page "https://gitlab.com/inkscape/extras/scour")
7985 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
7986 (description
7987 "The goal of Scour is to output a file that renders identically at a
7988fraction of the size by removing a lot of redundant information created by
7989most SVG editors. Optimization options are typically lossless but can be
7990tweaked for more aggressive cleaning.")
7991 (license license:asl2.0)))
7992
7993(define-public python-mechanize
7994 (package
7995 (name "python-mechanize")
7996 (version "0.4.10")
7997 (source
7998 (origin
7999 (method url-fetch)
8000 (uri (pypi-uri "mechanize" version))
8001 (sha256
8002 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
8003 (build-system pyproject-build-system)
8004 (arguments
8005 ;; XXX: Unclear why tests are failing.
8006 (list #:tests? #f
8007 #:phases
8008 #~(modify-phases %standard-phases
8009 (add-before 'check 'configure-tests
8010 (lambda _
8011 (setenv "GUIX_PYTHONPATH"
8012 (string-append (getcwd) "/test-tools:"
8013 (getenv "GUIX_PYTHONPATH"))))))))
8014 (native-inputs
8015 (list python-html5-parser
8016 python-html5lib
8017 python-lxml
8018 python-service-identity
8019 python-setuptools
8020 python-six
8021 python-twisted
8022 python-wheel))
8023 (propagated-inputs
8024 (list python-html5lib))
8025 (home-page "https://github.com/python-mechanize/mechanize")
8026 (synopsis
8027 "Stateful programmatic web browsing in Python")
8028 (description
8029 "Mechanize implements stateful programmatic web browsing in Python,
8030after Andy Lester’s Perl module WWW::Mechanize.")
8031 (license license:bsd-3)))
8032
8033(define-public python-mediapy
8034 (package
8035 (name "python-mediapy")
8036 (version "1.2.6")
8037 (source
8038 (origin
8039 (method git-fetch)
8040 (uri (git-reference
8041 (url "https://github.com/google/mediapy")
8042 (commit (string-append "v" version))))
8043 (file-name (git-file-name name version))
8044 (sha256
8045 (base32 "0gpbn1bqm6sp692fg7acs3l46xjr70frh3jv4cp3lbixfqmfb3lc"))))
8046 (build-system pyproject-build-system)
8047 (arguments
8048 (list
8049 #:phases
8050 '(modify-phases %standard-phases
8051 (add-after 'unpack 'fix-references
8052 (lambda _
8053 (substitute* "mediapy_test.py"
8054 (("'/bin/bash")
8055 (string-append "'" (which "bash")))))))))
8056 (inputs (list ffmpeg-6))
8057 (propagated-inputs (list python-absl-py
8058 python-ipython
8059 python-matplotlib
8060 python-numpy
8061 python-pillow))
8062 (native-inputs
8063 (list python-flit-core
8064 python-pytest
8065 python-pytest-xdist))
8066 (home-page "https://github.com/google/mediapy")
8067 (synopsis "Read/write/show images and videos in an IPython notebook")
8068 (description "This Python library makes it easy to display images and
8069videos in a notebook.")
8070 (license license:asl2.0)))
8071
8072(define-public python-simpleaudio
8073 (package
8074 (name "python-simpleaudio")
8075 (version "1.0.4")
8076 (source
8077 (origin
8078 (method git-fetch)
8079 (uri (git-reference
8080 (url "https://github.com/hamiltron/py-simple-audio")
8081 (commit version)))
8082 (file-name (git-file-name name version))
8083 (sha256
8084 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
8085 (build-system pyproject-build-system)
8086 (arguments
8087 (list
8088 #:test-backend #~'unittest
8089 #:phases
8090 #~(modify-phases %standard-phases
8091 (add-before 'check 'fix-test-run
8092 (lambda _
8093 (delete-file-recursively "simpleaudio"))))))
8094 (native-inputs (list python-setuptools))
8095 (inputs (list alsa-lib))
8096 (home-page "https://github.com/hamiltron/py-simple-audio")
8097 (synopsis "Simple, asynchronous audio playback for Python 3")
8098 (description
8099 "The @code{simplaudio} package provides cross-platform, dependency-free
8100audio playback capability for Python 3 on OSX, Windows, and Linux.")
8101 (license license:expat))) ; MIT license
8102
8103(define-public python-jsonalias
8104 (package
8105 (name "python-jsonalias")
8106 (version "0.1.2")
8107 (source (origin
8108 (method url-fetch)
8109 (uri (pypi-uri "jsonalias" version))
8110 (sha256
8111 (base32
8112 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
8113 (build-system pyproject-build-system)
8114 (arguments
8115 (list #:tests? #f)) ; no tests in PyPI or Git
8116 (native-inputs
8117 (list python-poetry-core))
8118 (home-page "https://github.com/kevinheavey/jsonalias/")
8119 (synopsis "JSON type alias for Python")
8120 (description
8121 "This package provides a microlibrary that defines a JSON type alias for
8122Python.")
8123 (license license:expat)))
8124
8125(define-public python-jsonargparse
8126 (package
8127 (name "python-jsonargparse")
8128 (version "4.49.0")
8129 (source
8130 (origin
8131 (method git-fetch)
8132 (uri (git-reference
8133 (url "https://github.com/omni-us/jsonargparse/")
8134 (commit (string-append "v" version))))
8135 (file-name (git-file-name name version))
8136 (sha256
8137 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
8138 (build-system pyproject-build-system)
8139 (propagated-inputs
8140 (list python-pyyaml))
8141 (native-inputs
8142 (list python-attrs
8143 python-pydantic
8144 python-pytest
8145 python-pytest-subtests
8146 python-requests
8147 python-responses
8148 python-setuptools
8149 python-types-pyyaml
8150 python-types-requests))
8151 (home-page "https://github.com/omni-us/jsonargparse/")
8152 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
8153 (description
8154 "This package lets you implement minimal boilerplate CLIs derived from
8155type hints and parse from command line, config files and environment
8156variables.")
8157 (license license:expat)))
8158
8159(define-public python-pymarshal
8160 (package
8161 (name "python-pymarshal")
8162 (version "2.2.3")
8163 (source (origin
8164 (method url-fetch)
8165 (uri (pypi-uri "pymarshal" version))
8166 (sha256
8167 (base32
8168 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
8169 (build-system pyproject-build-system)
8170 (arguments
8171 ;; Test fails with this error:
8172 ;; "CovReportWarning: Failed to generate report: No data to report."
8173 (list #:tests? #f))
8174 (native-inputs
8175 (list python-pytest python-setuptools python-wheel))
8176 (propagated-inputs (list python-bson python-pyyaml))
8177 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
8178 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
8179 (description "PyMarshal replicates the feature of (un)marshalling structs
8180in Golang.")
8181 (license license:bsd-2)))
8182
8183(define-public python-simplejson
8184 (package
8185 (name "python-simplejson")
8186 (version "3.20.1")
8187 (source
8188 (origin
8189 (method url-fetch)
8190 (uri (pypi-uri "simplejson" version))
8191 (sha256
8192 (base32
8193 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
8194 (build-system pyproject-build-system)
8195 (native-inputs
8196 (list python-pytest python-setuptools))
8197 (home-page "https://simplejson.readthedocs.io/en/latest")
8198 (synopsis
8199 "Json library for Python")
8200 (description
8201 "JSON (JavaScript Object Notation) is a subset of JavaScript
8202syntax (ECMA-262 3rd edition) used as a lightweight data interchange
8203format.
8204
8205Simplejson exposes an API familiar to users of the standard library marshal
8206and pickle modules. It is the externally maintained version of the json
8207library contained in Python 2.6, but maintains compatibility with Python 2.5
8208and (currently) has significant performance advantages, even without using
8209the optional C extension for speedups. Simplejson is also supported on
8210Python 3.3+.")
8211 (license license:x11)))
8212
8213(define-public python-simple-rlp
8214 (package
8215 (name "python-simple-rlp")
8216 (version "0.1.3")
8217 (source
8218 (origin
8219 (method git-fetch)
8220 (uri (git-reference
8221 (url "https://github.com/SamuelHaidu/simple-rlp")
8222 ;; Upstream doesn't tag the git repo.
8223 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
8224 (file-name (git-file-name name version))
8225 (sha256
8226 (base32
8227 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
8228 (build-system pyproject-build-system)
8229 (native-inputs
8230 (list
8231 python-pytest
8232 python-setuptools))
8233 (home-page "https://github.com/SamuelHaidu/simple-rlp")
8234 (synopsis
8235 "Python implementation of RLP (Recursive Length Prefix) encoding")
8236 (description
8237 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
8238Prefix) - Encode and decode data structures.")
8239 (license license:expat)))
8240
8241(define-public python-pyicu
8242 (package
8243 (name "python-pyicu")
8244 (version "2.15.2")
8245 (source
8246 (origin
8247 (method url-fetch)
8248 (uri (pypi-uri "pyicu" version))
8249 (sha256
8250 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
8251 (build-system pyproject-build-system)
8252 (native-inputs
8253 (list pkg-config
8254 python-pytest
8255 python-setuptools
8256 python-six))
8257 (inputs
8258 (list icu4c))
8259 (home-page "https://gitlab.pyicu.org/main/pyicu")
8260 (synopsis "Python extension wrapping the ICU C++ API")
8261 (description
8262 "PyICU is a python extension wrapping the ICU C++ API.")
8263 (license license:x11)))
8264
8265(define-public python-dogtail
8266 (package
8267 (name "python-dogtail")
8268 (version "0.9.11")
8269 (source
8270 (origin
8271 (method url-fetch)
8272 (uri (string-append
8273 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
8274 version ".tar.gz"))
8275 (sha256
8276 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
8277 (build-system pyproject-build-system)
8278 (arguments
8279 (list
8280 #:tests? #f ;TODO Launching dbus for the tests fails
8281 #:phases
8282 #~(modify-phases %standard-phases
8283 (replace 'check
8284 (lambda* (#:key tests? #:allow-other-keys)
8285 (when tests?
8286 (system "Xvfb :1 &")
8287 (setenv "DISPLAY" ":1")
8288 (invoke "dbus-run-session" "--"
8289 "nosetests" "-v" "tests/")))))))
8290 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
8291 (native-inputs
8292 (list python-pynose
8293 gtk+
8294 xorg-server-for-tests
8295 dbus
8296 gsettings-desktop-schemas
8297 gobject-introspection
8298 python-setuptools))
8299 (home-page "https://gitlab.com/dogtail/dogtail/")
8300 (synopsis "GUI test tool and automation framework written in Python")
8301 (description
8302 "Dogtail is a GUI test tool and automation framework written in Python.
8303It uses Accessibility (a11y) technologies to communicate with desktop
8304applications. dogtail scripts are written in Python and executed like any
8305other Python program.")
8306 (license license:gpl2+)))
8307
8308(define-public python-doxyqml
8309 (package
8310 (name "python-doxyqml")
8311 (version "0.5.3")
8312 (source (origin
8313 (method url-fetch)
8314 (uri (pypi-uri "doxyqml" version))
8315 (sha256
8316 (base32
8317 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
8318 (build-system pyproject-build-system)
8319 (arguments
8320 (list #:test-backend #~'custom
8321 #:test-flags #~(list "tests/functional/tests.py")))
8322 (native-inputs
8323 (list python-setuptools))
8324 (home-page "https://agateau.com/projects/doxyqml")
8325 (synopsis "Doxygen input filter for QML files")
8326 (description
8327 "This package provides a Doxygen input filter for QML files.")
8328 (license license:bsd-3)))
8329
8330(define-public python-doxypypy
8331 (package
8332 (name "python-doxypypy")
8333 (version "0.8.8.7")
8334 (source (origin
8335 (method url-fetch)
8336 (uri (pypi-uri "doxypypy" version))
8337 (sha256
8338 (base32
8339 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
8340 (build-system pyproject-build-system)
8341 (arguments
8342 (list
8343 #:test-flags
8344 #~(list "-k" (string-join
8345 ;; Test files are not in UTF-8 format and attmet to
8346 ;; substitute shebang fails, while tests fail with error:
8347 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
8348 ;; File w[387 chars]g.')" !=
8349 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
8350 ;; chars]g.')"
8351 (list "not test_utf16be_bom"
8352 "test_utf16le_bom"
8353 "test_utf32be_bom"
8354 "test_utf32le_bom"
8355 "test_utf8_bom")
8356 " and not "))
8357 #:phases
8358 #~(modify-phases %standard-phases
8359 ;; compile-bytecode phases fails with error: SyntaxError: source
8360 ;; code string cannot contain null bytes.
8361 (add-after 'unpack 'fix-setup.py
8362 (lambda _
8363 (substitute* "setup.py"
8364 (("packages=.*") "packages=['doxypypy'],\n")))))))
8365 (native-inputs
8366 (list python-pytest
8367 python-setuptools
8368 python-wheel))
8369 (propagated-inputs
8370 (list python-chardet))
8371 (home-page "https://github.com/Feneric/doxypypy")
8372 (synopsis "Doxygen filter for Python")
8373 (description
8374 "This package provides a Doxygen filter for Python.")
8375 (license license:gpl2+)))
8376
8377(define-public python-empy
8378 (package
8379 (name "python-empy")
8380 (version "3.3.4")
8381 (source
8382 (origin
8383 (method url-fetch)
8384 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
8385 version ".tar.gz"))
8386 (sha256
8387 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
8388 (build-system pyproject-build-system)
8389 (arguments
8390 (list
8391 #:phases
8392 #~(modify-phases %standard-phases
8393 (replace 'check
8394 (lambda* (#:key tests? #:allow-other-keys)
8395 (when tests?
8396 (invoke "./test.sh")))))))
8397 (native-inputs (list python-setuptools))
8398 (home-page "http://www.alcyone.com/software/empy/")
8399 (synopsis "Templating system for Python")
8400 (description
8401 "EmPy is a system for embedding Python expressions and statements in
8402template text; it takes an EmPy source file, processes it, and produces
8403output. This is accomplished via expansions, which are special signals to the
8404EmPy system and are set off by a special prefix (by default the at sign, @@).
8405EmPy can expand arbitrary Python expressions and statements in this way, as
8406well as a variety of special forms. Textual data not explicitly delimited in
8407this way is sent unaffected to the output, allowing Python to be used in
8408effect as a markup language. Also supported are callbacks via hooks,
8409recording and playback via diversions, and dynamic, chainable filters. The
8410system is highly configurable via command line options and embedded
8411commands.")
8412 (license license:lgpl2.1+)))
8413
8414(define-public python-palettable
8415 (package
8416 (name "python-palettable")
8417 (version "3.3.3")
8418 (source (origin
8419 (method url-fetch)
8420 (uri (pypi-uri "palettable" version))
8421 (sha256
8422 (base32
8423 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8424 (build-system pyproject-build-system)
8425 (native-inputs (list python-pytest python-setuptools python-wheel))
8426 (home-page "https://jiffyclub.github.io/palettable/")
8427 (synopsis "Color palettes for Python")
8428 (description "Palettable (formerly brewer2mpl) is a library of color
8429palettes for Python. It’s written in pure Python with no dependencies, but it
8430can supply color maps for matplotlib. You can use Palettable to customize
8431matplotlib plots or supply colors for a web application.")
8432 (license license:expat)))
8433
8434(define-public python-parse-type
8435 (package
8436 (name "python-parse-type")
8437 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8438 ;; 3.12+; move back to git tag when released.
8439 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8440 (revision . "0")))
8441 (version (git-version "0.6.6"
8442 (assoc-ref properties 'revision)
8443 (assoc-ref properties 'commit)))
8444 (source
8445 (origin
8446 (method git-fetch)
8447 (uri (git-reference
8448 (url "https://github.com/jenisys/parse_type")
8449 (commit (assoc-ref properties 'commit))))
8450 (file-name (git-file-name name version))
8451 (sha256
8452 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8453 (build-system pyproject-build-system)
8454 (arguments
8455 (list
8456 ;; tests: 332 passed, 2 skipped
8457 #:phases
8458 #~(modify-phases %standard-phases
8459 (add-after 'unpack 'fix-pytest-config
8460 ;; To bypass options: --metadata, --html and --junit-xml.
8461 (lambda _
8462 (delete-file "pytest.ini"))))))
8463 (native-inputs
8464 (list python-pytest
8465 python-setuptools
8466 python-setuptools-scm))
8467 (propagated-inputs
8468 (list python-six ;hard dependency
8469 python-parse))
8470 (home-page "https://github.com/jenisys/parse_type")
8471 (synopsis "Extended parse module")
8472 (description "Parse_type extends the python parse module.")
8473 (license license:expat)))
8474
8475(define-public python-parse
8476 (package
8477 (name "python-parse")
8478 (version "1.20.2")
8479 (source
8480 (origin
8481 (method git-fetch)
8482 (uri (git-reference
8483 (url "https://github.com/r1chardj0n3s/parse")
8484 (commit version)))
8485 (file-name (git-file-name name version))
8486 (sha256
8487 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8488 (build-system pyproject-build-system)
8489 (native-inputs (list python-pytest python-setuptools))
8490 (home-page "https://github.com/r1chardj0n3s/parse")
8491 (synopsis "Parse strings")
8492 (description
8493 "Parse strings using a specification based on the Python @code{format()}
8494syntax.")
8495 (license license:x11)))
8496
8497(define-public python-parsley
8498 (package
8499 (name "python-parsley")
8500 (version "1.3")
8501 (source
8502 (origin
8503 (method git-fetch)
8504 (uri (git-reference
8505 (url "https://github.com/pyga/parsley")
8506 (commit version)))
8507 (file-name (git-file-name name version))
8508 (sha256
8509 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8510 (patches
8511 (list
8512 (origin
8513 (method url-fetch)
8514 (uri
8515 (string-append "https://github.com/pyga/parsley/commit/"
8516 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8517 (sha256
8518 (base32
8519 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8520 (build-system pyproject-build-system)
8521 (arguments
8522 (list
8523 #:test-flags #~(list "ometa/test" "terml/test")))
8524 (native-inputs
8525 (list python-pytest
8526 python-setuptools
8527 python-twisted))
8528 (home-page "https://launchpad.net/parsley")
8529 (synopsis "Parsing and pattern matching Python library")
8530 (description
8531 "Parsley is a parsing library using PEG algorithm, so each expression in
8532the grammar rules works like a Python expression. In particular, alternatives
8533are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8534Parsley is an implementation of OMeta, an object-oriented pattern-matching
8535language.")
8536 (license license:expat)))
8537
8538(define-public python-petl
8539 (package
8540 (name "python-petl")
8541 (version "1.7.16")
8542 (source
8543 (origin
8544 (method url-fetch)
8545 (uri (pypi-uri "petl" version))
8546 (sha256
8547 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8548 (build-system pyproject-build-system)
8549 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8550 python-pytest))
8551 (home-page "https://github.com/petl-developers/petl")
8552 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8553processing pipelines.")
8554 (description
8555 "This package provides a library for extracting, transforming and loading
8556tables of data. It can read from and write to databases or files in multiple
8557formats, including:
8558@itemize @bullet
8559@item python objects
8560@item delimited files
8561@item pickle files
8562@item text/XML/JSON/HTML files
8563@item python I/O streams
8564@item Excel XLS/XLSX files
8565@item HDF5 files
8566@end itemize")
8567 (license license:expat)))
8568
8569(define-public python-polib
8570 (package
8571 (name "python-polib")
8572 (version "1.2.0")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/izimobil/polib/")
8578 (commit version)))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8582 (build-system pyproject-build-system)
8583 (arguments
8584 (list #:test-backend #~'custom
8585 #:test-flags #~(list "tests/tests.py")))
8586 (native-inputs (list python-setuptools))
8587 (home-page "https://github.com/izimobil/polib/")
8588 (synopsis "Manipulate, create and modify gettext files")
8589 (description
8590 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8591be used to create po files from scratch or to modify existing ones.")
8592 (license license:expat)))
8593
8594(define-public python-polling2
8595 (package
8596 (name "python-polling2")
8597 (version "0.5.0")
8598 (source
8599 (origin
8600 (method git-fetch)
8601 (uri (git-reference
8602 (url "https://github.com/ddmee/polling2")
8603 (commit (string-append "v" version))))
8604 (file-name (git-file-name name version))
8605 (sha256
8606 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8607 (build-system pyproject-build-system)
8608 (arguments
8609 ;; XXX: Additional , in string comparison.
8610 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8611 (native-inputs (list python-mock python-pytest python-setuptools))
8612 (home-page "https://github.com/ddmee/polling2")
8613 (synopsis "Polling utility with many configurable options")
8614 (description "Polling2 is a utility used to wait for a function to return
8615a certain expected condition.")
8616 (license license:expat)))
8617
8618(define-public python-daft
8619 (package
8620 (name "python-daft")
8621 (version "0.1.2")
8622 (source (origin
8623 (method url-fetch)
8624 (uri (pypi-uri "daft" version))
8625 (sha256
8626 (base32
8627 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8628 (build-system pyproject-build-system)
8629 (arguments
8630 (list
8631 #:test-flags
8632 '(list "-k"
8633 (string-append
8634 ;; The following tests compare matplotlib output with
8635 ;; previously generated images. They fail due to minor
8636 ;; differences in where matplotlib places labels.
8637 "not test_bca[png]"
8638 " and not test_classic[png]"
8639 " and not test_deconvolution[png]"
8640 " and not test_exoplanets[png]"
8641 " and not test_fixed[png]"
8642 " and not test_gaia[png]"
8643 " and not test_galex[png]"
8644 " and not test_huey_p_newton[png]"
8645 " and not test_logo[png]"
8646 " and not test_no_circles[png]"
8647 " and not test_no_gray[png]"
8648 " and not test_recursive[png]"
8649 " and not test_thick_lines[png]"
8650 " and not test_weaklensing[png]"
8651 " and not test_wordy[png]"))))
8652 (native-inputs
8653 (list python-pytest
8654 python-setuptools
8655 python-wheel))
8656 (propagated-inputs (list python-matplotlib python-numpy))
8657 (home-page "https://docs.daft-pgm.org/")
8658 (synopsis "PGM rendering library")
8659 (description "Daft is a Python package that uses matplotlib to
8660render pixel-perfect probabilistic graphical models for publication in
8661a journal or on the internet. With a short Python script and an
8662intuitive model-building syntax you can design directed (Bayesian
8663Networks, directed acyclic graphs) and undirected (Markov random fields)
8664models and save them in any formats that matplotlib supports (including
8665PDF, PNG, EPS and SVG).")
8666 (license license:expat)))
8667
8668(define-public python-portalocker
8669 (package
8670 (name "python-portalocker")
8671 (version "2.7.0")
8672 (source (origin
8673 (method url-fetch)
8674 (uri (pypi-uri "portalocker" version))
8675 (sha256
8676 (base32
8677 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8678 (build-system pyproject-build-system)
8679 (native-inputs (list python-pytest
8680 python-pytest-timeout
8681 python-redis
8682 python-setuptools
8683 python-wheel))
8684 (home-page "https://github.com/WoLpH/portalocker")
8685 (synopsis "Python library for file locking")
8686 (description "Portalocker is a library to provide an easy API to file
8687locking..")
8688 (license license:bsd-3)))
8689
8690(define-public python-poyo
8691 (package
8692 (name "python-poyo")
8693 (version "0.5.0")
8694 (source
8695 (origin
8696 (method url-fetch)
8697 (uri (pypi-uri "poyo" version))
8698 (sha256
8699 (base32
8700 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8701 (build-system pyproject-build-system)
8702 (native-inputs
8703 (list python-pytest python-setuptools))
8704 (home-page "https://github.com/hackebrot/poyo")
8705 (synopsis "Lightweight YAML Parser for Python")
8706 (description
8707 "This package provides a lightweight YAML Parser for Python. It supports
8708only a chosen subset of the YAML format that is required to parse cookiecutter
8709user configuration files. It does not have support for serializing into YAML
8710and is not compatible with JSON.")
8711 (license license:expat)))
8712
8713(define-public python-expandvars
8714 (package
8715 (name "python-expandvars")
8716 (version "1.1.2")
8717 (source
8718 (origin
8719 (method url-fetch)
8720 (uri (pypi-uri "expandvars" version))
8721 (sha256
8722 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8723 (build-system pyproject-build-system)
8724 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8725 (native-inputs
8726 (list python-hatchling python-pytest))
8727 (home-page "https://pypi.org/project/expandvars/")
8728 (synopsis "Expand system variables Unix style")
8729 (description "This module is inspired by GNU bash's variable expansion
8730features. It can be used as an alternative to Python's
8731@code{os.path.expandvars} function. A good use case is reading config files
8732with the flexibility of reading values from environment variables using
8733advanced features like returning a default value if some variable is not
8734defined.")
8735 (license license:expat)))
8736
8737(define-public python-expiringdict
8738 (package
8739 (name "python-expiringdict")
8740 (version "1.2.2")
8741 (source
8742 (origin
8743 (method git-fetch)
8744 (uri (git-reference
8745 (url "https://github.com/mailgun/expiringdict")
8746 (commit (string-append "v" version))))
8747 (file-name (git-file-name name version))
8748 (sha256
8749 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8750 (build-system pyproject-build-system)
8751 (arguments
8752 ;; Started failing with [email protected], but it's only repr not functionality
8753 ;; so we should be fine.
8754 (list #:test-flags #~'("-v" "-e" "test_repr")))
8755 (native-inputs
8756 (list python-dill python-mock python-pynose python-setuptools))
8757 (home-page "https://github.com/mailgun/expiringdict")
8758 (synopsis "Dictionary with auto-expiring values for caching purposes")
8759 (description
8760 "This Python library provides an ordered dictionary
8761with a maximum capacity and auto-expiring values for caching purposes.
8762Expiration happens on any access, object is locked during cleanup
8763from expired values.")
8764 (license license:asl2.0)))
8765
8766(define-public python-extension-helpers
8767 (package
8768 (name "python-extension-helpers")
8769 (version "1.4.0")
8770 (source
8771 (origin
8772 (method git-fetch) ; no tests in the PyPI tarball
8773 (uri (git-reference
8774 (url "https://github.com/astropy/extension-helpers")
8775 (commit (string-append "v" version))))
8776 (file-name (git-file-name name version))
8777 (sha256
8778 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8779 (build-system pyproject-build-system)
8780 (arguments
8781 (list
8782 #:test-flags
8783 #~(list "--pyargs" "extension_helpers"
8784 "-k" (string-join
8785 ;; XXX: Tests try to check various compilation options and
8786 ;; fail with some incomparability or trying to download
8787 ;; missing modules.
8788 (list "not test_only_pyproject"
8789 "test_no_setup_py"
8790 "test_limited_api")
8791 " and not "))))
8792 (native-inputs
8793 (list python-pytest
8794 python-setuptools-scm))
8795 (propagated-inputs
8796 (list python-setuptools))
8797 (home-page "https://extension-helpers.readthedocs.io")
8798 (synopsis "Astropy ecosystem utilities for building and installing packages")
8799 (description
8800 "The extension-helpers package includes convenience helpers to assist
8801with building Python packages with compiled C/Cython extensions. It is
8802developed by the Astropy project but is intended to be general and usable by
8803any Python package.")
8804 (license license:bsd-3)))
8805
8806(define-public python-milc
8807 (package
8808 (name "python-milc")
8809 (version "1.9.1")
8810 (source
8811 (origin
8812 (method git-fetch) ;no tests in PyPI archive
8813 (uri (git-reference
8814 (url "https://github.com/clueboard/milc")
8815 (commit version)))
8816 (file-name (git-file-name name version))
8817 (sha256
8818 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
8819 (build-system pyproject-build-system)
8820 (native-inputs
8821 (list python-pytest
8822 python-semver
8823 python-setuptools))
8824 (propagated-inputs
8825 (list python-argcomplete
8826 python-colorama
8827 python-halo
8828 python-platformdirs
8829 python-spinners
8830 python-types-colorama))
8831 (home-page "https://github.com/clueboard/milc")
8832 (synopsis "Python library for command line interface programs")
8833 (description "MILC is a Python library for developing command line
8834interface programs. This library provides features to parse arguments,
8835automatic tab-completion, color support, logging to @code{std}, etc.")
8836 (license license:expat)))
8837
8838(define-public python-extract-dtb
8839 (package
8840 (name "python-extract-dtb")
8841 (version "1.2.3")
8842 (source
8843 (origin
8844 (method git-fetch)
8845 (uri (git-reference
8846 (url "https://github.com/PabloCastellano/extract-dtb/")
8847 (commit version)))
8848 (file-name (git-file-name name version))
8849 (sha256
8850 (base32
8851 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
8852 (build-system pyproject-build-system)
8853 (arguments
8854 (list #:tests? #f)) ;no tests
8855 (native-inputs
8856 (list python-setuptools))
8857 (home-page "https://github.com/PabloCastellano/extract-dtb/")
8858 (synopsis "Extract device tree blobs (DTB) from kernel images")
8859 (description
8860 "This package provides a tool to split a kernel image with appended
8861@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
8862 (license license:gpl3+)))
8863
8864(define-public python-mimeparse
8865 (package
8866 (name "python-mimeparse")
8867 (version "2.0.0")
8868 (source
8869 (origin
8870 (method url-fetch)
8871 (uri (pypi-uri "python_mimeparse" version))
8872 (sha256
8873 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
8874 (build-system pyproject-build-system)
8875 (native-inputs
8876 (list python-pytest
8877 python-setuptools))
8878 (home-page "https://github.com/falconry/python-mimeparse")
8879 (synopsis "Python library for parsing MIME types")
8880 (description
8881 "Mimeparse provides basic functions for parsing MIME type names and
8882matching them against a list of media-ranges.")
8883 (license license:expat)))
8884
8885(define-public python-miniboa
8886 (package
8887 (name "python-miniboa")
8888 (version "1.0.9")
8889 (source
8890 (origin
8891 (method git-fetch) ;no tests in PyPI archive
8892 (uri (git-reference
8893 (url "https://github.com/shmup/miniboa")
8894 (commit (string-append "v" version))))
8895 (file-name (git-file-name name version))
8896 (sha256
8897 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
8898 (build-system pyproject-build-system)
8899 (native-inputs
8900 (list python-pytest
8901 python-setuptools
8902 python-wheel))
8903 (home-page "https://github.com/shmup/miniboa")
8904 (synopsis "Simple, single-threaded Telnet server")
8905 (description
8906 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
8907server.")
8908 (license license:asl2.0)))
8909
8910(define-public python-mir-eval
8911 (package
8912 (name "python-mir-eval")
8913 (version "0.8.2")
8914 (source (origin
8915 (method git-fetch)
8916 (uri (git-reference
8917 (url "https://github.com/mir-evaluation/mir_eval")
8918 (commit version)))
8919 (file-name (git-file-name name version))
8920 (sha256
8921 (base32
8922 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
8923 (build-system pyproject-build-system)
8924 (arguments
8925 (list
8926 #:phases
8927 #~(modify-phases %standard-phases
8928 (add-before 'check 'cd-tests
8929 (lambda _
8930 ;; Move to 'tests' directory because tests read data files from
8931 ;; a relative path.
8932 (chdir "tests"))))))
8933 (propagated-inputs (list python-decorator python-numpy python-scipy))
8934 (native-inputs (list python-matplotlib
8935 python-pytest
8936 python-pytest-mpl
8937 python-setuptools
8938 python-wheel))
8939 (home-page "https://github.com/mir-evaluation/mir_eval")
8940 (synopsis "Common metrics for common audio/music processing tasks")
8941 (description "This is a Python library for computing common heuristic
8942accuracy scores for various music/audio information retrieval/signal
8943processing tasks.")
8944 (license license:expat)))
8945
8946(define-public python-mizani
8947 (package
8948 (name "python-mizani")
8949 (version "0.13.1")
8950 (source (origin
8951 (method git-fetch)
8952 (uri (git-reference
8953 (url "https://github.com/has2k1/mizani")
8954 (commit (string-append "v" version))))
8955 (file-name (git-file-name name version))
8956 (sha256
8957 (base32
8958 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
8959 (build-system pyproject-build-system)
8960 (propagated-inputs
8961 (list python-matplotlib python-numpy python-pandas python-scipy))
8962 (native-inputs
8963 (list python-setuptools
8964 python-setuptools-scm
8965 python-pytest
8966 python-wheel
8967 tzdata))
8968 (home-page "https://github.com/has2k1/mizani")
8969 (synopsis "Create data visualizations in Python")
8970 (description
8971 "Mizani is a Python package for creating data visualizations. It
8972provides functions and tools to help with the creation of visually appealing
8973and informative visualizations, including scales, transformations and color
8974palettes.")
8975 (license license:bsd-3)))
8976
8977(define-public python-miniupnpc
8978 (package
8979 (name "python-miniupnpc")
8980 (version "2.3.3")
8981 (source
8982 (origin
8983 (method git-fetch)
8984 (uri
8985 (git-reference
8986 ;; The project tags miniupnpd_ as well but with a different version,
8987 ;; where updater may select a wrong version.
8988 (url "https://github.com/miniupnp/miniupnp")
8989 (commit
8990 (string-append
8991 "miniupnpc_" (string-replace-substring version "." "_")))))
8992 (file-name
8993 (git-file-name name version))
8994 (sha256
8995 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
8996 (build-system pyproject-build-system)
8997 (arguments
8998 (list
8999 #:phases
9000 #~(modify-phases %standard-phases
9001 (add-after 'unpack 'subdir
9002 (lambda* (#:key inputs #:allow-other-keys)
9003 (chdir "miniupnpc")
9004 (setenv "CC" #$(cc-for-target))
9005 (substitute* "Makefile"
9006 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
9007 (add-before 'subdir 'remove-kernel-version
9008 ;; Avoid embedding the running kernel version for reproducible builds
9009 (lambda _
9010 (substitute*
9011 "miniupnpc/updateminiupnpcstrings.sh"
9012 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
9013 (replace 'check
9014 (lambda* (#:key tests? #:allow-other-keys)
9015 (when tests?
9016 (invoke "make" "check")))))))
9017 (native-inputs
9018 (list python-setuptools
9019 python-wheel))
9020 (inputs (list python)) ;we are building a Python extension
9021 (synopsis "UPnP client for Python")
9022 (description "Miniupnpc is a client library for Python programs to set up
9023port forwards using @acronym{UPnP, Universal Plug and Play}.")
9024 (home-page "http://miniupnp.free.fr")
9025 (license license:bsd-3)))
9026
9027;; NOTE: As taken from upstram: "this library is in maintenance mode and
9028;; should not be used in new code."
9029(define-public python-py
9030 (package
9031 (name "python-py")
9032 (version "1.11.0")
9033 (source
9034 (origin
9035 (method url-fetch)
9036 (uri (pypi-uri "py" version))
9037 (sha256
9038 (base32
9039 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
9040 (build-system pyproject-build-system)
9041 (arguments
9042 '(#:tests? #f)) ;cycle with python-pytest
9043 (native-inputs
9044 (list python-setuptools
9045 python-setuptools-scm
9046 python-wheel))
9047 (home-page "https://github.com/pytest-dev/py")
9048 (synopsis "Python library for parsing, I/O, introspection, and logging")
9049 (description
9050 "Py is a Python library for file name parsing, .ini file parsing, I/O,
9051code introspection, and logging.")
9052 (license license:expat)))
9053
9054(define-public python-pyrsistent
9055 (package
9056 (name "python-pyrsistent")
9057 (version "0.20.0")
9058 (home-page "https://github.com/tobgu/pyrsistent")
9059 (source (origin
9060 (method url-fetch)
9061 (uri (pypi-uri "pyrsistent" version))
9062 (sha256
9063 (base32
9064 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
9065 (build-system pyproject-build-system)
9066 (native-inputs
9067 (list python-pytest python-setuptools python-wheel))
9068 (synopsis "Persistent data structures for Python")
9069 (description
9070 "Pyrsistent is a number of persistent collections (by some referred to as
9071functional data structures). Persistent in the sense that they are immutable.
9072
9073All methods on a data structure that would normally mutate it instead return a
9074new copy of the structure containing the requested updates. The original
9075structure is left untouched.")
9076 (license license:expat)))
9077
9078(define-public python-exif-read
9079 (package
9080 (name "python-exif-read")
9081 (version "3.3.2")
9082 (source
9083 (origin
9084 (method git-fetch) ;PyPI doesn't contain the test images
9085 (uri (git-reference
9086 (url "https://github.com/ianare/exif-py")
9087 (commit version)))
9088 (file-name (git-file-name name version))
9089 (sha256
9090 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
9091 (build-system pyproject-build-system)
9092 (native-inputs (list python-pytest python-setuptools python-wheel))
9093 (home-page "https://github.com/ianare/exif-py")
9094 (synopsis "Python library to extract EXIF data from image files")
9095 (description
9096 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
9097files.")
9098 (license license:bsd-3)))
9099
9100(define-public python-pyld
9101 (package
9102 (name "python-pyld")
9103 (version "2.0.4")
9104 (source
9105 (origin
9106 (method git-fetch)
9107 (uri (git-reference
9108 (url "https://github.com/digitalbazaar/pyld")
9109 ;; Not all tags have the 'v' prefix.
9110 (commit (string-append "v" version))))
9111 (file-name (git-file-name name version))
9112 (sha256
9113 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
9114 (build-system pyproject-build-system)
9115 (arguments
9116 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
9117 (list #:tests? #f))
9118 (native-inputs
9119 (list python-lxml
9120 python-setuptools))
9121 (propagated-inputs
9122 (list python-aiohttp
9123 python-cachetools
9124 python-frozendict
9125 python-requests))
9126 (home-page "https://github.com/digitalbazaar/pyld")
9127 (synopsis "Python implementation of the JSON-LD specification")
9128 (description "PyLD is an implementation of the JSON-LD specification.")
9129 (license license:bsd-3)))
9130
9131(define-public python-cli-helpers
9132 (package
9133 (name "python-cli-helpers")
9134 (version "2.7.0")
9135 (source
9136 (origin
9137 (method url-fetch)
9138 (uri (pypi-uri "cli_helpers" version))
9139 (sha256
9140 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
9141 (build-system pyproject-build-system)
9142 (native-inputs
9143 (list python-pytest
9144 python-setuptools))
9145 (propagated-inputs
9146 (list python-configobj
9147 python-tabulate))
9148 (home-page "https://github.com/dbcli/cli_helpers")
9149 (synopsis "Helpers for building command-line apps")
9150 (description
9151 "CLI Helpers is a Python package that makes it easy to perform common
9152tasks when building command-line apps. It's a helper library for command-line
9153interfaces.")
9154 (license license:bsd-3)))
9155
9156(define-public python-click
9157 (package
9158 (name "python-click")
9159 (version "8.3.1")
9160 (source
9161 (origin
9162 (method git-fetch)
9163 (uri (git-reference
9164 (url "https://github.com/pallets/click")
9165 (commit version)))
9166 (file-name (git-file-name name version))
9167 (sha256
9168 (base32 "041w6s8w11za2jlws7sxvrcfmi0bvr354nq74wyb66gsk908idii"))))
9169 (build-system pyproject-build-system)
9170 (native-inputs
9171 (list less
9172 python-flit-core
9173 python-pytest))
9174 (home-page "https://palletsprojects.com/p/click/")
9175 (synopsis "Command line library for Python")
9176 (description
9177 "Click is a Python package for creating command line interfaces in a
9178composable way with as little code as necessary. Its name stands for
9179\"Command Line Interface Creation Kit\". It's highly configurable but comes
9180with sensible defaults out of the box.")
9181 (license license:bsd-3)))
9182
9183(define-public python-click-7
9184 (package (inherit python-click)
9185 (name "python-click")
9186 (version "7.1.2")
9187 (source
9188 (origin
9189 (method url-fetch)
9190 (uri (pypi-uri "click" version))
9191 (sha256
9192 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
9193 (arguments (list #:tests? #f)) ;no tests in PyPI
9194 (native-inputs
9195 (list python-setuptools))))
9196
9197(define-public python-click-8.1
9198 (package
9199 (inherit python-click)
9200 (name "python-click")
9201 (version "8.1.7")
9202 (source
9203 (origin
9204 (method git-fetch)
9205 (uri (git-reference
9206 (url "https://github.com/pallets/click")
9207 (commit version)))
9208 (file-name (git-file-name name version))
9209 (sha256
9210 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
9211 (native-inputs
9212 (list less
9213 python-pytest
9214 python-setuptools))))
9215
9216(define-public python-click-aliases
9217 (package
9218 (name "python-click-aliases")
9219 (version "1.0.6")
9220 (source
9221 (origin
9222 (method git-fetch)
9223 (uri (git-reference
9224 (url "https://github.com/click-contrib/click-aliases")
9225 (commit (string-append "v" version))))
9226 (file-name (git-file-name name version))
9227 (sha256
9228 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
9229 (build-system pyproject-build-system)
9230 (native-inputs
9231 (list python-pytest
9232 python-poetry-core))
9233 (propagated-inputs
9234 (list python-click))
9235 (home-page "https://github.com/click-contrib/click-aliases")
9236 (synopsis "Enable aliases for Click")
9237 (description
9238 "This package helps to add (mutiple) aliases to a click group or command.")
9239 (license license:expat)))
9240
9241(define-public python-click-option-group
9242 (package
9243 (name "python-click-option-group")
9244 (version "0.5.9")
9245 (source
9246 (origin
9247 (method git-fetch)
9248 (uri (git-reference
9249 (url "https://github.com/click-contrib/click-option-group")
9250 (commit (string-append "v" version))))
9251 (file-name (git-file-name name version))
9252 (sha256
9253 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
9254 (build-system pyproject-build-system)
9255 (native-inputs
9256 (list python-hatch-vcs
9257 python-hatchling
9258 python-pytest))
9259 (propagated-inputs
9260 (list python-click))
9261 (home-page "https://click-option-group.readthedocs.io/")
9262 (synopsis "Option groups missing in Click")
9263 (description
9264 "Click is a package for creating powerful and beautiful command line
9265interfaces (CLI) in Python, but it has no the functionality for creating option
9266groups. The aim of this package is to provide group options with extensible
9267functionality using canonical and clean API (Click-like API as far as
9268possible).")
9269 (license license:bsd-3)))
9270
9271(define-public python-clickgen
9272 (package
9273 (name "python-clickgen")
9274 (version "2.2.5")
9275 (source (origin
9276 (method git-fetch)
9277 (uri (git-reference
9278 (url "https://github.com/ful1e5/clickgen")
9279 (commit (string-append "v" version))))
9280 (file-name (git-file-name name version))
9281 (sha256
9282 (base32
9283 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
9284 (build-system pyproject-build-system)
9285 (arguments
9286 (list
9287 #:test-flags
9288 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
9289 '(list "-k" "not test_clickgen_raises")))
9290 (native-inputs
9291 (list python-pytest
9292 python-setuptools))
9293 (propagated-inputs
9294 (list python-attrs
9295 python-numpy
9296 python-pillow
9297 python-pyyaml
9298 python-toml))
9299 (home-page "https://github.com/ful1e5/clickgen")
9300 (synopsis "The hassle-free cursor building toolbox")
9301 (description
9302 "Clickgen is an API for building X11 and Windows cursors from .png files.
9303clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
9304 (license license:expat)))
9305
9306(define-public python-clickhouse-connect
9307 (package
9308 (name "python-clickhouse-connect")
9309 (version "0.6.1")
9310 (source (origin
9311 (method git-fetch)
9312 (uri (git-reference
9313 (url "https://github.com/ClickHouse/clickhouse-connect")
9314 (commit (string-append "v" version))))
9315 (file-name (git-file-name name version))
9316 (sha256
9317 (base32
9318 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
9319 (build-system pyproject-build-system)
9320 (arguments
9321 (list
9322 #:test-flags
9323 ;; All these tests require docker-compose
9324 '(list "--ignore-glob=tests/integration_tests/*")
9325 #:phases
9326 '(modify-phases %standard-phases
9327 (add-after 'unpack 'patch-pyproject
9328 (lambda _
9329 ;; Our version of pytest is confused by this field.
9330 (substitute* "pyproject.toml"
9331 (("^env_files.*") ""))))
9332 (add-before 'check 'build-extensions
9333 (lambda _
9334 ;; Cython extensions have to be built before running the tests.
9335 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
9336 (propagated-inputs
9337 (list python-arrow
9338 python-certifi
9339 python-lz4
9340 python-numpy
9341 python-orjson
9342 python-pandas
9343 python-pytz
9344 python-setuptools ; For pkg_resources.
9345 python-sqlalchemy
9346 python-urllib3
9347 python-zstandard))
9348 (native-inputs
9349 (list python-cython
9350 python-pytest
9351 python-wheel))
9352 (home-page "https://github.com/ClickHouse/clickhouse-connect")
9353 (synopsis
9354 "ClickHouse database core driver for Python, Pandas, and Superset")
9355 (description
9356 "This package provides a high performance core database driver for
9357connecting ClickHouse to Python, Pandas, and Superset.")
9358 (license license:asl2.0)))
9359
9360(define-public python-cligj
9361 (package
9362 (name "python-cligj")
9363 (version "0.7.2")
9364 (source
9365 (origin
9366 (method url-fetch)
9367 (uri (pypi-uri "cligj" version))
9368 (sha256
9369 (base32
9370 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
9371 (build-system pyproject-build-system)
9372 (native-inputs
9373 (list python-pytest
9374 python-setuptools))
9375 (propagated-inputs
9376 (list python-click))
9377 (home-page "https://github.com/mapbox/cligj")
9378 (synopsis "Click params for command line interfaces to GeoJSON")
9379 (description
9380 "cligj is for Python developers who create command line interfaces
9381for geospatial data. cligj allows you to quickly build consistent,
9382well-tested and interoperable CLIs for handling GeoJSON.")
9383 (license license:bsd-3)))
9384
9385(define-public python-cloup
9386 (package
9387 (name "python-cloup")
9388 (version "3.0.8")
9389 (source (origin
9390 (method url-fetch)
9391 (uri (pypi-uri "cloup" version))
9392 (sha256
9393 (base32
9394 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
9395 (build-system pyproject-build-system)
9396 (propagated-inputs (list python-click))
9397 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9398 (home-page "https://github.com/janLuke/cloup")
9399 (synopsis "Extension library for python-click")
9400 (description
9401 "Cloup enriches Click with several features that make it more expressive
9402and configurable such as option groups, constraints, subcommand aliases,
9403subcommands sections and a themeable HelpFormatter.")
9404 (license license:bsd-3)))
9405
9406(define-public python-jsondiff
9407 (package
9408 (name "python-jsondiff")
9409 (version "2.2.1")
9410 (source
9411 (origin
9412 (method url-fetch)
9413 (uri (pypi-uri "jsondiff" version))
9414 (sha256
9415 (base32
9416 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9417 (build-system pyproject-build-system)
9418 (arguments
9419 (list
9420 #:phases
9421 #~(modify-phases %standard-phases
9422 (add-before 'build 'set-version
9423 (lambda _
9424 (substitute* "pyproject.toml"
9425 (("^version_file.*") "")
9426 (("dynamic = \\[\"version\"\\]")
9427 (string-append "version = \"" #$version "\""))))))))
9428 (propagated-inputs (list python-pyyaml))
9429 (native-inputs
9430 (list python-hypothesis
9431 python-pytest
9432 python-setuptools
9433 python-setuptools-scm
9434 python-wheel))
9435 (home-page "https://github.com/fzumstein/jsondiff")
9436 (synopsis "Compare JSON and JSON-like structures in Python")
9437 (description "@code{jsondiff} is a Python library which lets you compare,
9438diff, and patch JSON and JSON-like structures in Python.")
9439 (license license:expat)))
9440
9441(define-public python-ddlparse
9442 (package
9443 (name "python-ddlparse")
9444 (version "1.10.0")
9445 (source
9446 (origin
9447 (method url-fetch)
9448 (uri (pypi-uri "ddlparse" version))
9449 (sha256
9450 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9451 (build-system pyproject-build-system)
9452 (native-inputs
9453 (list python-pytest python-setuptools))
9454 (propagated-inputs (list python-pyparsing))
9455 (home-page "https://github.com/shinichi-takii/ddlparse")
9456 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9457 (description "This package provides @code{ddlparse}, a Python library to parse
9458and convert DDL to BigQuery JSON schema.")
9459 (license license:bsd-3)))
9460
9461(define-public python-jsonschema
9462 (package
9463 (name "python-jsonschema")
9464 (version "4.23.0")
9465 (source
9466 (origin
9467 (method url-fetch)
9468 (uri (pypi-uri "jsonschema" version))
9469 (sha256
9470 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
9471 (build-system pyproject-build-system)
9472 (arguments
9473 (list
9474 #:phases
9475 #~(modify-phases %standard-phases
9476 (add-before 'check 'pre-check
9477 (lambda _
9478 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9479 (native-inputs
9480 (list python-hatchling
9481 python-hatch-fancy-pypi-readme
9482 python-hatch-vcs
9483 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
9484 python-pip
9485 python-pytest))
9486 (propagated-inputs
9487 (list python-attrs
9488 python-fqdn
9489 python-idna
9490 python-importlib-resources
9491 python-isoduration
9492 python-jsonpointer
9493 python-jsonschema-specifications
9494 python-rfc3339-validator
9495 python-rfc3986-validator
9496 python-referencing-bootstrap
9497 python-rpds-py
9498 python-uri-template
9499 python-webcolors))
9500 (home-page "https://github.com/Julian/jsonschema")
9501 (synopsis "Implementation of JSON Schema for Python")
9502 (description
9503 "Jsonschema is an implementation of JSON Schema for Python.")
9504 (license license:expat)))
9505
9506;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9507;; version.
9508(define-public python-jsonschema-3
9509 (package
9510 (inherit python-jsonschema)
9511 (version "3.2.0")
9512 (source (origin
9513 (method url-fetch)
9514 (uri (pypi-uri "jsonschema" version))
9515 (sha256
9516 (base32
9517 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9518 (arguments
9519 (substitute-keyword-arguments arguments
9520 ((#:tests? _ #t) #f)))
9521 (propagated-inputs
9522 (list python-attrs
9523 python-pyrsistent
9524 python-typing-extensions))
9525 (native-inputs
9526 (list python-setuptools-scm python-twisted
9527 python-setuptools python-wheel))))
9528
9529(define-public python-jsonschema-path
9530 (package
9531 (name "python-jsonschema-path")
9532 (version "0.3.2")
9533 (source
9534 (origin
9535 (method url-fetch)
9536 (uri (pypi-uri "jsonschema_path" version))
9537 (sha256
9538 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9539 (build-system pyproject-build-system)
9540 (arguments
9541 (list
9542 #:tests? #false ;there are none
9543 #:phases
9544 '(modify-phases %standard-phases
9545 (add-after 'unpack 'relax-requirements
9546 (lambda _
9547 (substitute* "pyproject.toml"
9548 (("referencing = \">=0.28.0,<0.32.0\"")
9549 "referencing = \">=0.28.0\"")))))))
9550 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9551 python-requests))
9552 (native-inputs (list python-poetry-core))
9553 (home-page "https://github.com/p1c2u/jsonschema-path")
9554 (synopsis "JSONSchema Spec with object-oriented paths")
9555 (description "This package implements object-oriented JSONSchema. It lets
9556you traverse a schema like paths and access a schema on demand with separate
9557dereferencing accessor layer.")
9558 (license license:asl2.0)))
9559
9560(define-public python-jsonschema-objects
9561 (package
9562 (name "python-jsonschema-objects")
9563 (version "0.5.7")
9564 (source
9565 (origin
9566 (method git-fetch)
9567 (uri (git-reference
9568 (url "https://github.com/cwacek/python-jsonschema-objects/")
9569 (commit version)))
9570 (file-name (git-file-name name version))
9571 (sha256
9572 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9573 (build-system pyproject-build-system)
9574 (native-inputs
9575 (list python-pytest
9576 python-pytest-mock
9577 python-setuptools))
9578 (propagated-inputs
9579 (list python-inflection
9580 python-jsonschema
9581 python-markdown))
9582 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9583 (synopsis "Automatic Python binding generation from JSON schemas")
9584 (description
9585 "This package provides an automatic class-based binding to JSON
9586Schemas for use in python.")
9587 (license license:expat)))
9588
9589(define-public python-jsonschema-specifications
9590 (package
9591 (name "python-jsonschema-specifications")
9592 (version "2024.10.1")
9593 (source
9594 (origin
9595 (method url-fetch)
9596 (uri (pypi-uri "jsonschema_specifications" version))
9597 (sha256
9598 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
9599 (build-system pyproject-build-system)
9600 (native-inputs
9601 (list python-hatch-vcs
9602 python-hatchling
9603 python-pytest))
9604 (propagated-inputs
9605 (list python-importlib-resources
9606 python-referencing-bootstrap))
9607 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9608 (synopsis
9609 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9610 (description
9611 "This package provides JSON support files from the JSON Schema
9612Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9613from Python as a referencing-based Schema Registry.")
9614 (license license:expat)))
9615
9616(define-public python-schema
9617 (package
9618 (name "python-schema")
9619 (version "0.7.8")
9620 (source
9621 (origin
9622 (method git-fetch)
9623 (uri (git-reference
9624 (url "https://github.com/keleshev/schema")
9625 (commit (string-append "v" version))))
9626 (file-name (git-file-name name version))
9627 (sha256
9628 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9629 (build-system pyproject-build-system)
9630 (native-inputs
9631 (list python-pytest python-setuptools))
9632 (home-page "https://github.com/keleshev/schema")
9633 (synopsis "Simple data validation library")
9634 (description
9635 "@code{python-schema} is a library for validating Python data
9636structures, such as those obtained from config-files, forms, external
9637services or command-line parsing, converted from JSON/YAML (or
9638something else) to Python data-types.")
9639 (license license:psfl)))
9640
9641(define-public python-kitchen
9642 (package
9643 (name "python-kitchen")
9644 (version "1.2.6")
9645 (source
9646 (origin
9647 (method git-fetch)
9648 (uri (git-reference
9649 (url "https://github.com/fedora-infra/kitchen")
9650 (commit version)))
9651 (file-name (git-file-name name version))
9652 (sha256
9653 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9654 (build-system pyproject-build-system)
9655 (arguments
9656 (list
9657 #:test-flags
9658 #~(list "kitchen3"
9659 ;; XXX: Unclear why these tests fail.
9660 "-e" "test_invalid_fallback_no_raise"
9661 "-e" "test_internal_generate_combining_table"
9662 "-e" "test_lgettext"
9663 "-e" "test_lngettext"
9664 "-e" "test_easy_gettext_setup_non_unicode")
9665 #:phases
9666 #~(modify-phases %standard-phases
9667 (add-before 'check 'delete-broken-test-files
9668 (lambda _
9669 (delete-file "kitchen3/tests/test__all__.py")
9670 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9671 (native-inputs (list python-pynose python-setuptools))
9672 (home-page "https://github.com/fedora-infra/kitchen")
9673 (synopsis "Python API for snippets")
9674 (description
9675 "@code{kitchen} module provides a python API for all sorts of little
9676useful snippets of code that everybody ends up writing for their projects but
9677never seem big enough to build an independent release. Use kitchen and stop
9678cutting and pasting that code over and over.")
9679 (license (list license:lgpl2.1+
9680 ;; subprocess.py, test_subprocess.py,
9681 ;; kitchen/pycompat25/defaultdict.py:
9682 license:psfl))))
9683
9684(define-public python-roman
9685 (package
9686 (name "python-roman")
9687 (version "5.2")
9688 (source
9689 (origin
9690 (method git-fetch)
9691 (uri (git-reference
9692 (url "https://github.com/zopefoundation/roman")
9693 (commit version)))
9694 (file-name (git-file-name name version))
9695 (sha256
9696 (base32
9697 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9698 (build-system pyproject-build-system)
9699 (arguments
9700 (list
9701 #:test-backend #~'unittest
9702 #:test-flags #~(list "discover" "-s" "src")))
9703 (native-inputs (list python-setuptools))
9704 (home-page "https://github.com/zopefoundation/roman")
9705 (synopsis "Integer to Roman numerals converter")
9706 (description
9707 "This package provides a small helper library to convert Arabic Numbers
9708to Roman Numerals.")
9709 (license license:zpl2.1)))
9710
9711(define-public python-rollbar
9712 (package
9713 (name "python-rollbar")
9714 (version "1.3.0")
9715 (source (origin
9716 (method url-fetch)
9717 (uri (pypi-uri "rollbar" version))
9718 (sha256
9719 (base32
9720 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9721 (build-system pyproject-build-system)
9722 (native-inputs (list python-httpx
9723 python-pytest
9724 python-setuptools
9725 python-webob
9726 python-wheel))
9727 (inputs (list python-requests))
9728 (home-page "https://github.com/rollbar/pyrollbar")
9729 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9730 (description
9731 "Python SDK for reporting exceptions, errors, and log messages
9732to @url{https://rollbar.com/, Rollbar}.
9733
9734Capabilities include:
9735
9736@itemize @bullet
9737@item Sending messages and exceptions with arbitrary context
9738@item Getting back aggregates
9739@item Debugging production issues
9740@end itemize")
9741 (license license:expat)))
9742
9743(define-public python-pyjwt
9744 (package
9745 (name "python-pyjwt")
9746 (version "2.10.1")
9747 (source
9748 (origin
9749 (method url-fetch)
9750 (uri (pypi-uri "pyjwt" version))
9751 (sha256
9752 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9753 (build-system pyproject-build-system)
9754 (arguments
9755 (list
9756 ;; tests: 286 passed, 4 skipped, 1 deselected
9757 ;;
9758 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9759 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9760 ;; resolution>"
9761 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9762 (native-inputs
9763 (list python-pytest
9764 python-setuptools))
9765 (propagated-inputs
9766 (if (supported-package? python-cryptography)
9767 (list python-cryptography)
9768 '()))
9769 (home-page "https://github.com/progrium/pyjwt")
9770 (synopsis "JSON Web Token implementation in Python")
9771 (description
9772 "PyJWT is a JSON Web Token implementation written in Python.")
9773 (license license:expat)))
9774
9775(define-public python-pymsgbox
9776 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9777 (revision "1"))
9778 (package
9779 (name "python-pymsgbox")
9780 (version (git-version "1.0.6" revision commit))
9781 (source
9782 (origin
9783 (method git-fetch)
9784 (uri (git-reference
9785 (url "https://github.com/asweigart/PyMsgBox")
9786 (commit commit)))
9787 (file-name (git-file-name name version))
9788 (sha256
9789 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
9790 (build-system pyproject-build-system)
9791 (arguments
9792 ;; Circular dependency to run tests:
9793 ;; Tests need pyautogui, which depends on pymsgbox.
9794 '(#:tests? #f))
9795 (native-inputs (list python-setuptools python-wheel))
9796 (home-page "https://github.com/asweigart/PyMsgBox")
9797 (synopsis "Python module for JavaScript-like message boxes")
9798 (description
9799 "PyMsgBox is a simple, cross-platform, pure Python module for
9800JavaScript-like message boxes. Types of dialog boxes include:
9801@enumerate
9802@item alert
9803@item confirm
9804@item prompt
9805@item password
9806@end enumerate
9807")
9808 (license license:bsd-3))))
9809
9810(define-public python-pympler
9811 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
9812 (revision "0"))
9813 (package
9814 (name "python-pympler")
9815 (version (git-version "1.1" revision commit))
9816 (source
9817 (origin
9818 (method git-fetch)
9819 (uri (git-reference
9820 (url "https://github.com/pympler/pympler")
9821 (commit commit)))
9822 (file-name (git-file-name name version))
9823 (sha256
9824 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
9825 (build-system pyproject-build-system)
9826 (arguments
9827 (list
9828 #:tests? #f ;FIXME: tests timeout.
9829 #:test-flags
9830 #~(list
9831 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
9832 ;; != 'function (muppy.test_summary.func)'.
9833 ;; See <https://github.com/pympler/pympler/issues/134>.
9834 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
9835 ;; This test times out.
9836 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback")))
9837 (native-inputs
9838 (list python-pytest python-setuptools))
9839 (home-page "https://pythonhosted.org/Pympler/")
9840 (synopsis "Measure, monitor and analyze memory behavior")
9841 (description
9842 "Pympler is a development tool to measure, monitor and analyze
9843the memory behavior of Python objects in a running Python application.
9844
9845By pympling a Python application, detailed insight in the size and the
9846lifetime of Python objects can be obtained. Undesirable or unexpected
9847runtime behavior like memory bloat and other @samp{pymples} can easily
9848be identified.
9849
9850A web profiling frontend exposes process statistics, garbage
9851visualisation and class tracker statistics.")
9852 (license license:asl2.0))))
9853
9854(define-public python-itsdangerous
9855 (package
9856 (name "python-itsdangerous")
9857 (version "2.2.0")
9858 (source
9859 (origin
9860 (method url-fetch)
9861 (uri (pypi-uri "itsdangerous" version))
9862 (sha256
9863 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
9864 (build-system pyproject-build-system)
9865 (native-inputs
9866 (list python-flit-core
9867 python-freezegun
9868 python-pytest))
9869 (home-page "https://palletsprojects.com/p/itsdangerous/")
9870 (synopsis "Python library for passing data to/from untrusted environments")
9871 (description
9872 "Itsdangerous provides various helpers to pass trusted data to untrusted
9873environments and back.")
9874 (license license:bsd-3)))
9875
9876;; WARNING: This package is a dependency of mesa.
9877(define-public python-pyyaml
9878 (package
9879 (name "python-pyyaml")
9880 (version "6.0.2")
9881 (source
9882 (origin
9883 (method url-fetch)
9884 (uri (pypi-uri "PyYAML" version))
9885 (sha256
9886 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
9887 (build-system pyproject-build-system)
9888 (native-inputs
9889 (list python-cython
9890 python-pytest
9891 python-setuptools
9892 python-wheel))
9893 (inputs
9894 (list libyaml))
9895 (home-page "https://pyyaml.org")
9896 (synopsis "YAML parser and emitter for Python")
9897 (description
9898 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
9899complete YAML 1.1 parser, Unicode support, pickle support, capable extension
9900API, and sensible error messages. PyYAML supports standard YAML tags and
9901provides Python-specific tags that represent an arbitrary Python object.")
9902 (license license:expat)))
9903
9904(define-public python-crossenv
9905 (package
9906 (name "python-crossenv")
9907 (version "1.6.1")
9908 (source
9909 (origin
9910 (method git-fetch)
9911 (uri (git-reference
9912 (url "https://github.com/benfogle/crossenv")
9913 (commit (string-append "v" version))))
9914 (file-name (git-file-name name version))
9915 (sha256
9916 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
9917 (build-system pyproject-build-system)
9918 (arguments
9919 (list
9920 ;; XXX: Running test require setting environment variables for
9921 ;; architectures.
9922 #:tests? #f))
9923 (native-inputs (list python-hatchling))
9924 (home-page "https://github.com/benfogle/crossenv")
9925 (synopsis "Cross-compiling virtualenv for Python")
9926 (description
9927 "This package is a tool for cross-compiling extension modules. It
9928creates a special virtual environment such that @command{pip} or
9929@file{setup.py} will cross compile packages for you, usually with no further
9930work on your part.")
9931 (license license:expat)))
9932
9933(define-public python-linkify-it-py
9934 (package
9935 (name "python-linkify-it-py")
9936 (version "2.0.0")
9937 (source (origin
9938 (method git-fetch) ;for tests
9939 (uri (git-reference
9940 (url "https://github.com/tsutsu3/linkify-it-py")
9941 (commit (string-append "v" version))))
9942 (file-name (git-file-name name version))
9943 (sha256
9944 (base32
9945 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
9946 (build-system pyproject-build-system)
9947 (propagated-inputs (list python-uc-micro-py))
9948 (native-inputs (list python-pytest python-setuptools python-wheel))
9949 (home-page "https://github.com/tsutsu3/linkify-it-py")
9950 (synopsis "Links recognition library with full Unicode support")
9951 (description "This is Python port of
9952@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
9953recognition library with full Unicode support. It has features like:
9954@itemize
9955@item Full unicode support, with @i{astral} characters
9956@item International domains support
9957@item Allows rules extension and custom normalizers.
9958@end itemize")
9959 (license license:expat)))
9960
9961(define-public python-makefun
9962 (package
9963 (name "python-makefun")
9964 ;; Released version fails tests in Python 3.12 due to asyncio
9965 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
9966 (revision . "0")))
9967 (version (git-version "1.16.0"
9968 (assoc-ref properties 'revision)
9969 (assoc-ref properties 'commit)))
9970 (source
9971 (origin
9972 (method git-fetch)
9973 (uri (git-reference
9974 (url "https://github.com/smarie/python-makefun")
9975 (commit (assoc-ref properties 'commit))))
9976 (file-name (git-file-name name version))
9977 (sha256
9978 (base32
9979 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
9980 (build-system pyproject-build-system)
9981 (native-inputs
9982 (list python-pytest
9983 python-pytest-asyncio
9984 python-setuptools
9985 python-setuptools-scm))
9986 (home-page "https://github.com/smarie/python-makefun")
9987 (synopsis "Library to dynamically create python functions")
9988 (description "@code{makefun} helps create functions dynamically with a
9989given signature. It was largely inspired by @code{python-decorator} and
9990@code{functools}.")
9991 (license license:bsd-3)))
9992
9993(define-public python-markdown-it-py
9994 (package
9995 (name "python-markdown-it-py")
9996 (version "4.0.0")
9997 (source
9998 (origin
9999 (method git-fetch)
10000 (uri (git-reference
10001 (url "https://github.com/executablebooks/markdown-it-py")
10002 (commit (string-append "v" version))))
10003 (file-name (git-file-name name version))
10004 (sha256
10005 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
10006 (build-system pyproject-build-system)
10007 (arguments (list #:test-flags #~(list "--benchmark-disable")))
10008 (native-inputs
10009 (list python-flit-core
10010 python-pytest
10011 python-pytest-benchmark
10012 python-pytest-regressions
10013 python-requests))
10014 (propagated-inputs
10015 (list python-commonmark
10016 python-linkify-it-py
10017 python-markdown
10018 python-mdurl
10019 python-mistletoe
10020 python-mistune
10021 python-panflute
10022 python-pyyaml))
10023 (home-page "https://github.com/executablebooks/markdown-it-py")
10024 (synopsis "Python port of markdown-it")
10025 (description
10026 "This is a Python port of @code{markdown-it}, and some of its associated
10027plugins. The driving design philosophy of the port has been to change as
10028little of the fundamental code structure (file names, function name, etc) as
10029possible.")
10030 (license license:expat)))
10031
10032(define-public python-markupsafe
10033 (package
10034 (name "python-markupsafe")
10035 (version "3.0.3")
10036 (source
10037 (origin
10038 (method url-fetch)
10039 (uri (pypi-uri "markupsafe" version))
10040 (sha256
10041 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
10042 (build-system pyproject-build-system)
10043 ;; tests: 79 passed, 1 skipped
10044 (native-inputs
10045 (list python-pytest
10046 python-setuptools))
10047 (home-page "https://markupsafe.palletsprojects.com")
10048 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
10049 (description
10050 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
10051for Python.")
10052 (license license:bsd-3)))
10053
10054(define-public python-jinja2
10055 (package
10056 (name "python-jinja2")
10057 (version "3.1.2")
10058 (source
10059 (origin
10060 (method url-fetch)
10061 (uri (pypi-uri "Jinja2" version))
10062 (sha256
10063 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
10064 (build-system pyproject-build-system)
10065 (native-inputs (list python-pytest python-setuptools python-wheel))
10066 (propagated-inputs (list python-markupsafe))
10067 (home-page "https://jinja.palletsprojects.com/")
10068 (synopsis "Python template engine")
10069 (description
10070 "Jinja2 is a small but fast and easy to use stand-alone template engine
10071written in pure Python.")
10072 (license license:bsd-3)))
10073
10074(define-public python-jinja2-fragments
10075 (package
10076 (name "python-jinja2-fragments")
10077 (version "1.11.0")
10078 (source
10079 (origin
10080 (method git-fetch)
10081 (uri (git-reference
10082 (url "https://github.com/sponsfreixes/jinja2-fragments")
10083 (commit version)))
10084 (file-name (git-file-name name version))
10085 (sha256
10086 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
10087 (patches
10088 ;; Remove test setup code related to `litestar` and `sanic`
10089 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
10090 (build-system pyproject-build-system)
10091 (arguments
10092 (list
10093 #:test-flags
10094 #~(list "--ignore=tests/test_litestar.py"
10095 "--ignore=tests/test_sanic.py")))
10096 (native-inputs
10097 (list python-fastapi
10098 python-flask
10099 python-pytest
10100 python-pytest-asyncio
10101 python-quart
10102 python-setuptools))
10103 (propagated-inputs
10104 (list python-jinja2))
10105 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
10106 (synopsis "Jinja2 extension for template fragments")
10107 (description
10108 "Render Jinja2 template block as HTML page fragments on Python web
10109frameworks.")
10110 (license license:expat)))
10111
10112(define-public python-pypugjs
10113 (package
10114 (name "python-pypugjs")
10115 (version "5.12.0")
10116 (source
10117 (origin
10118 (method git-fetch)
10119 (uri (git-reference
10120 (url "https://github.com/kakulukia/pypugjs")
10121 (commit (string-append "v" version))))
10122 (file-name (git-file-name name version))
10123 (sha256
10124 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
10125 (build-system pyproject-build-system)
10126 (native-inputs (list python-django
10127 python-jinja2
10128 python-flask
10129 python-mako
10130 python-poetry-core
10131 python-pytest
10132 python-tornado))
10133 (propagated-inputs (list python-charset-normalizer python-six))
10134 (home-page "https://github.com/kakulukia/pypugjs")
10135 (synopsis "Convert Pug source files into different template languages")
10136 (description
10137 "PyPugJS is a high-performance port of PugJS for Python, that converts
10138any @file{.pug} source into different template languages: Django, Jinja2,
10139Mako, and Tornado.")
10140 (license license:expat))) ;; MIT
10141
10142(define-public python-pysrt
10143 (package
10144 (name "python-pysrt")
10145 (version "1.1.2")
10146 (source
10147 (origin
10148 (method git-fetch)
10149 (uri (git-reference
10150 (url "https://github.com/byroot/pysrt")
10151 (commit (string-append "v" version))))
10152 (file-name (git-file-name name version))
10153 (sha256
10154 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
10155 (build-system pyproject-build-system)
10156 (arguments
10157 (list
10158 #:test-backend #~'unittest
10159 #:phases
10160 #~(modify-phases %standard-phases
10161 (add-after 'unpack 'fix-python-incompatibilities
10162 (lambda _
10163 (substitute* (find-files "tests" "\\.py$")
10164 (("assertEquals") "assertEqual")))))))
10165 (propagated-inputs (list python-chardet))
10166 (native-inputs (list python-setuptools))
10167 (home-page "https://github.com/byroot/pysrt")
10168 (synopsis "SubRip Text subtitle parser and writer")
10169 (description
10170 "This package provides a Python library to edit or create
10171SubRip Text files, and additionally a command-line program @command{srt}
10172to shift, split or rescale them.")
10173 (license license:gpl3+)))
10174
10175(define-public python-pystache
10176 (package
10177 (name "python-pystache")
10178 (version "0.6.8")
10179 (source (origin
10180 (method url-fetch)
10181 (uri (pypi-uri "pystache" version))
10182 (sha256
10183 (base32
10184 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
10185 (build-system pyproject-build-system)
10186 (native-inputs (list python-pytest python-setuptools python-wheel))
10187 (home-page "http://defunkt.io/pystache/")
10188 (synopsis "Python logic-less template engine")
10189 (description
10190 "Pystache is a Python implementation of the framework agnostic,
10191logic-free templating system Mustache.")
10192 (license license:expat)))
10193
10194(define-public python-pystack
10195 (package
10196 (name "python-pystack")
10197 (version "1.5.1")
10198 (source
10199 (origin
10200 (method git-fetch)
10201 (uri (git-reference
10202 (url "https://github.com/bloomberg/pystack")
10203 (commit (string-append "v" version))))
10204 (file-name (git-file-name name version))
10205 (sha256
10206 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
10207 (build-system pyproject-build-system)
10208 (arguments
10209 (list
10210 ;; Integration tests need ptrace and gcore (gdb).
10211 #:test-flags #~(list "tests/unit")))
10212 (native-inputs
10213 (list python-cython
10214 python-pkgconfig
10215 python-pytest
10216 python-setuptools))
10217 (inputs
10218 (list elfutils))
10219 (home-page "https://github.com/bloomberg/pystack")
10220 (synopsis "Python stack trace analyzer for core dumps and live processes")
10221 (description
10222 "PyStack analyzes stack frames of running Python processes or Python core
10223dumps. It can inspect what a process is doing or what it was doing when it
10224crashed, without modifying any memory or executing code in the target process.")
10225 (license license:asl2.0)))
10226
10227(define-public python-pystitcher
10228 (package
10229 (name "python-pystitcher")
10230 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
10231 (revision . "0")
10232 (upstream-version . "1.0.5")))
10233 (version (git-version (assoc-ref properties 'upstream-version)
10234 (assoc-ref properties 'revision)
10235 (assoc-ref properties 'commit)))
10236 (source
10237 (origin
10238 (method git-fetch)
10239 (uri (git-reference
10240 (url "https://github.com/captn3m0/pystitcher")
10241 (commit (assoc-ref properties 'commit))))
10242 (file-name (git-file-name name version))
10243 (sha256
10244 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
10245 (build-system pyproject-build-system)
10246 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
10247 (inputs (list python-html5lib
10248 python-markdown
10249 python-pypdf
10250 python-validators))
10251 (home-page "https://github.com/captn3m0/pystitcher")
10252 (synopsis "Declaratively stitch together a PDF file from multiple sources")
10253 (description
10254 "This package stitches your PDF files together, generating customizable
10255bookmarks using a declarative input in the form of a markdown file.")
10256 (license license:expat)))
10257
10258(define-public python-joblib
10259 (package
10260 (name "python-joblib")
10261 (version "1.5.2")
10262 (source
10263 (origin
10264 (method url-fetch)
10265 (uri (pypi-uri "joblib" version))
10266 (sha256
10267 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
10268 (build-system pyproject-build-system)
10269 (arguments
10270 (list
10271 #:test-flags
10272 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10273 ;; Disabled to avoid having to depend on ipython/jupyter.
10274 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
10275 (native-inputs
10276 (list python-pytest
10277 python-pytest-asyncio
10278 python-pytest-xdist
10279 python-setuptools
10280 python-wheel))
10281 (home-page "https://joblib.readthedocs.io/")
10282 (synopsis "Using Python functions as pipeline jobs")
10283 (description
10284 "Joblib is a set of tools to provide lightweight pipelining in Python.
10285In particular, joblib offers: transparent disk-caching of the output values
10286and lazy re-evaluation (memoize pattern), easy simple parallel computing
10287logging and tracing of the execution.")
10288 (license license:bsd-3)))
10289
10290(define-public python-daemon
10291 (package
10292 (name "python-daemon")
10293 (version "3.1.2")
10294 (source
10295 (origin
10296 (method git-fetch)
10297 (uri (git-reference
10298 (url "https://pagure.io/python-daemon")
10299 (commit (string-append "release/" version))))
10300 (file-name (git-file-name name version))
10301 (sha256
10302 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
10303 (patches
10304 (search-patches "python-daemon-relax-lockfile.patch"))))
10305 (build-system pyproject-build-system)
10306 (arguments
10307 (list
10308 #:phases
10309 #~(modify-phases %standard-phases
10310 (add-after 'unpack 'discard-dynamic-metadata
10311 (lambda _
10312 (substitute* "pyproject.toml"
10313 (("^dynamic = " all)
10314 (format #f "version = ~s~%~a" #$version all))
10315 (("\"(description|readme|version|maintainers)\",")
10316 ""))
10317 (for-each delete-file
10318 '("setup.py"
10319 "test/test_util_metadata.py"
10320 "test/test_setup.py")))))))
10321 (propagated-inputs (list python-filelock))
10322 (native-inputs (list python-testscenarios python-setuptools))
10323 (home-page "https://pagure.io/python-daemon/")
10324 (synopsis "Python library for making a Unix daemon process")
10325 (description
10326 "Python-daemon is a library that assists a Python program to turn itself
10327into a well-behaved Unix daemon process, as specified in PEP 3143.
10328
10329This library provides a @code{DaemonContext} class that manages the following
10330important tasks for becoming a daemon process:
10331@enumerate
10332@item Detach the process into its own process group.
10333@item Set process environment appropriate for running inside a chroot.
10334@item Renounce suid and sgid privileges.
10335@item Close all open file descriptors.
10336@item Change the working directory, uid, gid, and umask.
10337@item Set appropriate signal handlers.
10338@item Open new file descriptors for stdin, stdout, and stderr.
10339@item Manage a specified PID lock file.
10340@item Register cleanup functions for at-exit processing.
10341@end enumerate")
10342 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
10343 (license (list license:asl2.0 license:gpl3+))))
10344
10345(define-public python-annotated-types
10346 (package
10347 (name "python-annotated-types")
10348 (version "0.7.0")
10349 (source
10350 (origin
10351 (method url-fetch)
10352 (uri (pypi-uri "annotated_types" version))
10353 (sha256
10354 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
10355 (build-system pyproject-build-system)
10356 (native-inputs
10357 (list python-hatchling
10358 python-pytest))
10359 (propagated-inputs (list python-typing-extensions))
10360 (home-page "https://github.com/annotated-types/annotated-types")
10361 (synopsis "Reusable constraint types to use with typing.Annotated")
10362 (description "This package provides metadata objects which can be used to
10363represent common constraints such as upper and lower bounds on scalar values and
10364collection sizes, a Predicate marker for runtime checks, and descriptions of how
10365we intend these metadata to be interpreted. In some cases, we also note
10366alternative representations which do not require this package.")
10367 (license license:expat)))
10368
10369(define-public python-anytree
10370 (package
10371 (name "python-anytree")
10372 (version "2.13.0")
10373 (source
10374 (origin
10375 (method git-fetch) ; no tests data in PyPi package
10376 (uri (git-reference
10377 (url "https://github.com/c0fec0de/anytree")
10378 (commit version)))
10379 (file-name (git-file-name name version))
10380 (sha256
10381 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
10382 (build-system pyproject-build-system)
10383 (arguments
10384 (list
10385 #:phases
10386 #~(modify-phases %standard-phases
10387 (add-before 'check 'pre-check
10388 (lambda _
10389 ;; Tests need to write to that direcroty.
10390 (mkdir-p "tests/dotexport/"))))))
10391 (native-inputs
10392 (list graphviz ;for 'dot'
10393 python-pdm-backend
10394 python-pytest
10395 python-pyyaml
10396 python-test2ref))
10397 (home-page "https://github.com/c0fec0de/anytree")
10398 (synopsis "Lightweight tree data library")
10399 (description
10400 "@code{anytree} is a simple, lightweight, and extensible tree data
10401structure for Python.")
10402 (license license:asl2.0)))
10403
10404(define-public kalamine
10405 (package
10406 (name "kalamine")
10407 (version "0.38")
10408 (source
10409 (origin
10410 (method url-fetch)
10411 (uri (pypi-uri "kalamine" version))
10412 (sha256
10413 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10414 (build-system pyproject-build-system)
10415 (arguments
10416 (list
10417 #:phases
10418 #~(modify-phases %standard-phases
10419 (add-before 'check 'make-test-layouts
10420 (lambda _
10421 (apply invoke
10422 (cons* "python" "-m" "kalamine.cli" "build"
10423 (find-files "layouts" "\\.toml")))
10424 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10425 (propagated-inputs
10426 (list python-click
10427 python-livereload
10428 python-lxml
10429 python-progress
10430 python-pyyaml
10431 python-tomli))
10432 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10433 ;; packaged.
10434 (native-inputs
10435 (list python-hatchling python-pytest))
10436 (home-page "https://github.com/OneDeadKey/kalamine")
10437 (synopsis "Keyboard layout maker")
10438 (description
10439 "Kalamine provides a CLI to create advanced keyboard layout from a
10440textual portable description. It also supports layout emulation via web
10441browser.")
10442 (license license:expat)))
10443
10444(define-public python-dm-tree
10445 (package
10446 (name "python-dm-tree")
10447 (version "0.1.9")
10448 (source
10449 (origin
10450 (method url-fetch)
10451 (uri (pypi-uri "dm_tree" version))
10452 (sha256
10453 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10454 (build-system pyproject-build-system)
10455 (arguments
10456 (list #:tests? #f
10457 #:phases
10458 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10459 ;; and USE_SYSTEM_PYBIND11=true.
10460 #~(modify-phases %standard-phases
10461 (add-before 'build 'build-shared-lib
10462 (lambda _
10463 (let* ((pybind11 #$(this-package-input "pybind11"))
10464 (python #$(this-package-input "python"))
10465 (version (python-version python))
10466 (abseil-cpp #$(this-package-input "abseil-cpp")))
10467 ;; Delete default cmake build.
10468 (substitute* "setup.py"
10469 (("ext_modules.*") "")
10470 (("cmdclass.*") ""))
10471 ;; Actual build phase.
10472 (mkdir-p "build/temp/tree/")
10473 (invoke
10474 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10475 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10476 "-fno-semantic-interposition" "-fPIC"
10477 "-I" (string-append pybind11
10478 "/lib/python" version
10479 "/site-packages/pybind11/include")
10480 "-I" (string-append python "/include/python"
10481 version)
10482 "-I" (string-append abseil-cpp "/include")
10483 "-c" "tree/tree.cc"
10484 "-o" "build/temp/tree/tree.o"
10485 "-fvisibility=hidden" "-g0")
10486 (mkdir-p "build/lib/tree")
10487 (invoke
10488 "g++" "-pthread" "-shared"
10489 (string-append "-Wl," "-rpath=" python "/lib")
10490 "-fno-semantic-interposition"
10491 "build/temp/tree/tree.o"
10492 "-L" (string-append python "/lib")
10493 (string-append abseil-cpp "/lib/libabsl_int128.a")
10494 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10495 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10496 (string-append abseil-cpp "/lib/libabsl_strings.a")
10497 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10498 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10499 "-o" "build/lib/tree/_tree.so")))))))
10500 ;; We link the static abseil libraries here to avoid problems in
10501 ;; downstream libraries using potentially different variants of
10502 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10503 (native-inputs
10504 (list python-setuptools))
10505 (inputs
10506 (list pybind11-2
10507 static-abseil-cpp
10508 python))
10509 (propagated-inputs
10510 (list python-absl-py
10511 python-attrs
10512 python-numpy
10513 python-wrapt))
10514 (home-page "https://github.com/deepmind/tree")
10515 (synopsis "Work with nested data structures in Python")
10516 (description "Tree is a python library for working with nested data
10517structures. In a way, @code{tree} generalizes the builtin @code{map} function
10518which only supports flat sequences, and allows you to apply a function to each
10519leaf preserving the overall structure.")
10520 (license license:asl2.0)))
10521
10522(define-public python-pyment
10523 (package
10524 (name "python-pyment")
10525 (version "0.3.4")
10526 (source
10527 (origin
10528 (method git-fetch)
10529 (uri
10530 (git-reference
10531 (url "https://github.com/dadadel/pyment")
10532 (commit (string-append "v" version))))
10533 (file-name (git-file-name name version))
10534 (sha256
10535 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10536 (build-system pyproject-build-system)
10537 (native-inputs (list python-pytest python-setuptools))
10538 (home-page "https://github.com/dadadel/pyment/")
10539 (synopsis "Convert Python docstrings automatically")
10540 (description "Pyment is a command line tool and library that can be
10541used to convert between several docstring styles.")
10542 (license license:gpl3+)))
10543
10544(define-public python-docstring-parser
10545 (package
10546 (name "python-docstring-parser")
10547 (version "0.15")
10548 (source (origin
10549 (method url-fetch)
10550 (uri (pypi-uri "docstring_parser" version))
10551 (sha256
10552 (base32
10553 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10554 (build-system pyproject-build-system)
10555 (native-inputs (list python-poetry-core python-pytest))
10556 (home-page "https://github.com/rr-/docstring_parser")
10557 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10558 (description "This package lets you parse Python docstrings in reST,
10559Google and Numpydoc format.")
10560 (license license:expat)))
10561
10562(define-public python-docutils
10563 (package
10564 (name "python-docutils")
10565 (version "0.21.2")
10566 (source
10567 (origin
10568 (method url-fetch)
10569 (uri (pypi-uri "docutils" version))
10570 (sha256
10571 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
10572 (build-system pyproject-build-system)
10573 (arguments
10574 (list
10575 #:test-backend #~'custom
10576 #:test-flags #~(list "test/alltests.py")
10577 #:phases
10578 (if (target-hurd?)
10579 #~(modify-phases %standard-phases
10580 (add-before 'check 'fix-errno
10581 (lambda _
10582 ;; Some tests check for an exact error message
10583 ;; Expecting ENOENT == 2.
10584 (substitute* (find-files "test" "\\.py$")
10585 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10586 #~%standard-phases)))
10587 (native-inputs
10588 (list python-flit-core))
10589 (home-page "https://docutils.sourceforge.net/")
10590 (synopsis "Python Documentation Utilities")
10591 (description
10592 "Docutils is a modular system for processing documentation into useful
10593formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10594easy to use markup language, for input.
10595
10596This package provides tools for converting @file{.rst} files to other formats
10597via commands such as @command{rst2man}, as well as supporting Python code.")
10598 ;; Most of the source code is public domain, but some source files are
10599 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10600 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10601
10602(define-public python-docutils-0.19
10603 (hidden-package
10604 (package
10605 (inherit python-docutils)
10606 (version "0.19")
10607 (source (origin
10608 (method url-fetch)
10609 (uri (pypi-uri "docutils" version))
10610 (sha256
10611 (base32
10612 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10613 (native-inputs
10614 (list python-setuptools python-wheel)))))
10615
10616(define-public python-docx
10617 (package
10618 (name "python-docx")
10619 (version "1.2.0")
10620 (source (origin
10621 (method url-fetch)
10622 (uri (pypi-uri "python_docx" version))
10623 (sha256
10624 (base32
10625 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10626 (build-system pyproject-build-system)
10627 (native-inputs
10628 (list behave
10629 python-pyparsing
10630 python-pytest
10631 python-setuptools
10632 python-wheel))
10633 (propagated-inputs
10634 (list python-lxml python-typing-extensions))
10635 (home-page "https://github.com/python-openxml/python-docx/")
10636 (synopsis "Python library to create and modify Microsoft Word documents")
10637 (description "This Python library can be used to create and update
10638Microsoft Word (.docx) documents.")
10639 (license license:expat)))
10640
10641(define-public python-repoze-lru
10642 (package
10643 (name "python-repoze-lru")
10644 (version "0.7")
10645 (source
10646 (origin
10647 (method url-fetch)
10648 (uri (pypi-uri "repoze.lru" version))
10649 (sha256
10650 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10651 (build-system pyproject-build-system)
10652 (arguments
10653 (list
10654 #:test-backend #~'unittest
10655 #:test-flags #~(list "discover" "repoze")))
10656 (native-inputs
10657 (list python-setuptools))
10658 (home-page "https://www.repoze.org")
10659 (synopsis "Tiny LRU cache implementation and decorator")
10660 (description
10661 "This package provides a tiny LRU cache implementation and decorator.")
10662 (license license:bsd-4)))
10663
10664(define-public python-reretry
10665 (package
10666 (name "python-reretry")
10667 (version "0.11.8")
10668 (source
10669 (origin
10670 (method git-fetch)
10671 (uri (git-reference
10672 (url "https://github.com/leshchenko1979/reretry")
10673 (commit version)))
10674 (file-name (git-file-name name version))
10675 (sha256
10676 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10677 (build-system pyproject-build-system)
10678 (native-inputs
10679 (list python-pytest python-pytest-asyncio python-setuptools))
10680 (home-page "https://github.com/leshchenko1979/reretry")
10681 (synopsis "Functional decorator for retrying on exceptions")
10682 (description
10683 "This package is a fork from the retry package, but with some of added
10684community-sourced features. It provides an easy to use, but functional
10685decorator for retrying on exceptions.")
10686 (license license:asl2.0)))
10687
10688(define-public python-restructuredtext-lint
10689 (package
10690 (name "python-restructuredtext-lint")
10691 (version "1.4.0")
10692 (source
10693 (origin
10694 (method git-fetch)
10695 (uri (git-reference
10696 (url "https://github.com/twolfson/restructuredtext-lint")
10697 (commit version)))
10698 (file-name (git-file-name name version))
10699 (sha256
10700 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
10701 (build-system pyproject-build-system)
10702 (arguments (list #:test-backend #~'unittest))
10703 (propagated-inputs (list python-docutils))
10704 (native-inputs (list python-setuptools))
10705 (home-page "https://github.com/twolfson/restructuredtext-lint")
10706 (synopsis "Linter")
10707 (description
10708 "This package provides a linter for the reStructuredText format.")
10709 (license license:unlicense)))
10710
10711(define-public python-click-repl
10712 (package
10713 (name "python-click-repl")
10714 ;; To support Python 3.12, see:
10715 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10716 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10717 (revision . "1")))
10718 (version (git-version "0.3.0"
10719 (assoc-ref properties 'revision)
10720 (assoc-ref properties 'commit)))
10721 (source
10722 (origin
10723 (method git-fetch)
10724 (uri (git-reference
10725 (url "https://github.com/click-contrib/click-repl")
10726 (commit (assoc-ref properties 'commit))))
10727 (file-name (git-file-name name version))
10728 (sha256
10729 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10730 (build-system pyproject-build-system)
10731 (native-inputs
10732 (list python-pytest
10733 python-setuptools))
10734 (propagated-inputs
10735 (list python-click
10736 python-prompt-toolkit))
10737 (home-page "https://github.com/click-contrib/click-repl")
10738 (synopsis "REPL plugin for Click")
10739 (description "This package provides a REPL plugin for Click.")
10740 (license license:expat)))
10741
10742(define-public python-pygdbmi
10743 (package
10744 (name "python-pygdbmi")
10745 (version "0.11.0.0")
10746 (source
10747 (origin
10748 (method url-fetch)
10749 (uri (pypi-uri "pygdbmi" version))
10750 (sha256
10751 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10752 (build-system pyproject-build-system)
10753 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10754 (native-inputs (list python-setuptools python-wheel))
10755 (home-page "https://github.com/cs01/pygdbmi")
10756 (synopsis "Parse gdb machine interface output with Python")
10757 (description "This package provides a parse gdb machine interface output
10758with Python.")
10759 (license license:expat)))
10760
10761(define-public python-pygtrie
10762 (package
10763 (name "python-pygtrie")
10764 (version "2.5.0")
10765 (source
10766 (origin
10767 (method git-fetch)
10768 (uri (git-reference
10769 (url "https://github.com/mina86/pygtrie")
10770 (commit (string-append "v" version))))
10771 (file-name (git-file-name name version))
10772 (sha256
10773 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10774 (build-system pyproject-build-system)
10775 (arguments
10776 (list
10777 #:test-backend #~'unittest
10778 #:phases
10779 #~(modify-phases %standard-phases
10780 (add-after 'unpack 'set-version
10781 (lambda _
10782 (delete-file "version.py")
10783 (substitute* "setup.py"
10784 (("import version")
10785 "")
10786 (("version\\.get_version\\(\\)")
10787 (format #f "~s" #$version))))))))
10788 (native-inputs (list python-setuptools))
10789 (home-page "https://github.com/mina86/pygtrie")
10790 (synopsis "Pure Python trie data structure implementation")
10791 (description
10792 "This package provides a pure Python trie data structure implementation.")
10793 (license license:asl2.0)))
10794
10795(define-public python-bump2version
10796 (package
10797 (name "python-bump2version")
10798 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
10799 (revision . "1")))
10800 (version (git-version "1.0.1"
10801 (assoc-ref properties 'revision)
10802 (assoc-ref properties 'commit)))
10803 (source
10804 (origin
10805 (method git-fetch)
10806 (uri (git-reference
10807 (url "https://github.com/c4urself/bump2version")
10808 (commit (assoc-ref properties 'commit))))
10809 (file-name (git-file-name name version))
10810 (sha256
10811 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
10812 (build-system pyproject-build-system)
10813 (arguments
10814 ;; XXX: Single flaky failing test.
10815 (list #:test-flags #~(list "-k" "not test_usage_string")))
10816 (native-inputs (list python-pytest python-setuptools python-testfixtures))
10817 (home-page "https://github.com/c4urself/bump2version")
10818 (synopsis "Version-bump your software with a single command!")
10819 (description
10820 "This package provides a small command line tool to simplify releasing
10821software by updating all version strings in your source code by the correct
10822increment. It also creates commits and tags.")
10823 (license license:expat)))
10824
10825(define-public python-deprecated
10826 (package
10827 (name "python-deprecated")
10828 (version "1.3.1")
10829 (source
10830 (origin
10831 (method git-fetch)
10832 (uri (git-reference
10833 (url "https://github.com/tantale/deprecated")
10834 (commit (string-append "v" version))))
10835 (file-name (git-file-name name version))
10836 (sha256
10837 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
10838 (build-system pyproject-build-system)
10839 (native-inputs
10840 (list python-pytest
10841 python-setuptools))
10842 (propagated-inputs
10843 (list python-wrapt))
10844 (home-page "https://github.com/tantale/deprecated")
10845 (synopsis "Python decorator to deprecate classes, functions or methods")
10846 (description
10847 "The @code{deprecated} decorator provides a convenient way to deprecate
10848to deprecate classes, functions or methods.")
10849 (license license:expat)))
10850
10851(define-public python-pygithub
10852 (package
10853 (name "python-pygithub")
10854 (version "2.8.1")
10855 (source
10856 (origin
10857 (method git-fetch)
10858 (uri (git-reference
10859 (url "https://github.com/PyGithub/PyGithub")
10860 (commit (string-append "v" version))))
10861 (file-name (git-file-name name version))
10862 (sha256
10863 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
10864 (build-system pyproject-build-system)
10865 (propagated-inputs
10866 (list python-pyjwt
10867 python-pynacl
10868 python-requests
10869 python-typing-extensions
10870 python-urllib3))
10871 (native-inputs
10872 (list python-responses
10873 python-pytest
10874 python-setuptools
10875 python-setuptools-scm))
10876 (home-page "https://pygithub.readthedocs.io/en/latest/")
10877 (synopsis "Python library for the GitHub API")
10878 (description "This library allows managing GitHub resources such as
10879repositories, user profiles, and organizations in your Python applications,
10880using version 3 of the GitHub application programming interface (API).")
10881 (license license:lgpl3+)))
10882
10883(define-public python-rellu
10884 (package
10885 (name "python-rellu")
10886 (version "0.7")
10887 (source
10888 (origin
10889 (method git-fetch)
10890 (uri (git-reference
10891 (url "https://github.com/robotframework/rellu")
10892 (commit (string-append "v" version))))
10893 (file-name (git-file-name name version))
10894 (sha256
10895 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
10896 (build-system pyproject-build-system)
10897 (native-inputs (list python-pytest python-setuptools))
10898 (propagated-inputs (list python-invoke python-pygithub))
10899 (home-page "https://github.com/robotframework/rellu")
10900 (synopsis "Utilities to create PyPI releases")
10901 (description
10902 "This collection of utilities contains tooling and templates to assist in
10903creating releases on GitHub and publishing them on PyPI. It is designed to be
10904used by Robot Framework and tools and libraries in its ecosystem, but can
10905naturally be used also by other projects.")
10906 (license license:asl2.0)))
10907
10908(define-public python-robotframework
10909 (package
10910 (name "python-robotframework")
10911 (version "7.3.2")
10912 (source
10913 (origin
10914 (method git-fetch) ; no tests in the PyPI archive
10915 (uri (git-reference
10916 (url "https://github.com/robotframework/robotframework")
10917 (commit (string-append "v" version))))
10918 (file-name (git-file-name name version))
10919 (sha256
10920 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
10921 (outputs '("out" "doc"))
10922 (build-system pyproject-build-system)
10923 (arguments
10924 (list
10925 #:modules '((guix build pyproject-build-system)
10926 (guix build utils)
10927 (ice-9 ftw)
10928 (ice-9 match)
10929 (srfi srfi-26))
10930 #:phases
10931 #~(modify-phases %standard-phases
10932 (add-before 'build 'build-and-install-doc
10933 (lambda* (#:key outputs #:allow-other-keys)
10934 (let ((doc (string-append #$output:doc
10935 "/share/doc/robotframework")))
10936 (invoke "invoke" "library-docs" "all")
10937 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
10938 (mkdir-p doc)
10939 (with-directory-excursion "dist"
10940 (define user-guide-dir
10941 (match (scandir "." (cut string-prefix?
10942 "robotframework-userguide-" <>))
10943 ((dir) dir)
10944 (_ (error "could not find the user guide directory"))))
10945 (copy-recursively user-guide-dir doc)))))
10946 (replace 'check
10947 (lambda* (#:key tests? #:allow-other-keys)
10948 (when tests?
10949 ;; TODO: Some acceptance failed and took near 30min to
10950 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
10951 ;; to skip failing ones.
10952 (format #t "Running unit tests...~%")
10953 (invoke "utest/run.py")))))))
10954 (native-inputs
10955 (list python-docutils
10956 python-invoke
10957 python-jsonschema
10958 python-pygments
10959 python-rellu
10960 python-typing-extensions
10961 python-setuptools
10962 `(,python "tk") ;used when building the HTML doc
10963 python-wheel))
10964 (home-page "https://robotframework.org")
10965 (synopsis "Generic automation framework")
10966 (description "Robot Framework is a generic automation framework for
10967acceptance testing, acceptance test driven development (ATDD), and robotic
10968process automation (RPA).")
10969 (license license:asl2.0)))
10970
10971(define-public python-robotframework-datadriver
10972 (package
10973 (name "python-robotframework-datadriver")
10974 (version "1.11.2")
10975 (source
10976 (origin
10977 (method git-fetch) ; no tests in PyPI release
10978 (uri (git-reference
10979 (url "https://github.com/Snooz82/robotframework-datadriver")
10980 (commit version)))
10981 (file-name (git-file-name name version))
10982 (sha256
10983 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
10984 (build-system pyproject-build-system)
10985 (arguments
10986 (list
10987 #:phases
10988 #~(modify-phases %standard-phases
10989 (add-before 'check 'skip-problematic-tests
10990 (lambda _
10991 (for-each delete-file-recursively
10992 (list
10993 ;; The test file 'tab-csv-file-name.tsv' contains
10994 ;; special characters for which there is no locale
10995 ;; in the build environment, causing one test to
10996 ;; fail.
10997 "atest/TestCases/csv_reader_config"
10998 ;; Error in file on line 6: Non-existing setting
10999 ;; 'Test Tags'.
11000 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
11001 (replace 'check
11002 (lambda* (#:key tests? #:allow-other-keys)
11003 (when tests?
11004 (with-directory-excursion "atest"
11005 (invoke "sh" "run_atest.sh"))))))))
11006 (native-inputs
11007 (list python-docutils
11008 python-robotframework-stacktrace
11009 python-setuptools
11010 python-xlrd))
11011 (propagated-inputs
11012 (list python-openpyxl
11013 python-pandas
11014 python-pygments
11015 python-robotframework))
11016 (home-page "https://github.com/Snooz82/robotframework-datadriver")
11017 (synopsis "Data-driven test extension for Robot Framework")
11018 (description "DataDriver is a data-driven extension for Robot Framework.
11019DataDriver uses the Listener Interface of Robot Framework to create new test
11020cases based on a data file that contains the test data. DataDriver supports
11021data files in the CSV, XLS or XLSX formats.")
11022 (license license:asl2.0)))
11023
11024(define-public python-robotframework-pabot
11025 (package
11026 (name "python-robotframework-pabot")
11027 (version "4.2.0")
11028 (source
11029 (origin
11030 ;; There are no tests in the PyPI archive.
11031 (method git-fetch)
11032 (uri (git-reference
11033 (url "https://github.com/mkorpela/pabot")
11034 (commit version)))
11035 (file-name (git-file-name name version))
11036 (sha256
11037 (base32
11038 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
11039 (build-system pyproject-build-system)
11040 (arguments
11041 (list
11042 #:test-flags
11043 #~(list "-k" (string-join
11044 ;; XXX: Maybe it's a bad idea to skip these tests which
11045 ;; failing assertions highlight incomparability issues.
11046 ;;
11047 ;; 93 passed, 23 deselected, 11 warnings
11048 (list "not test_argumentfile_outputs"
11049 "test_dependency_ok"
11050 "test_longnames_in_tests"
11051 "test_multiple_dependencies_ok"
11052 "test_orders"
11053 "test_pabotprerunmodifier"
11054 "test_pabotprerunmodifier_with_prerunmodifier"
11055 "test_pabotprerunmodifier_with_testlevelsplit"
11056 "test_pabotprerunmodifier_with_testlevelsplit_and_"
11057 "test_parallel_execution"
11058 "test_parallel_execution_with_testlevelsplit"
11059 "test_pre_run_with_new_name"
11060 "test_pre_run_with_new_tag"
11061 "test_run_dir_2_then_dir_3"
11062 "test_run_dir_3_then_dir_2"
11063 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
11064 "test_sleep_test_cases_and_group"
11065 "test_stdout_should_display_passed_test"
11066 "test_stdout_should_display_passed_test"
11067 "test_stdout_should_display_passed_test_and_not_"
11068 "test_testlevelsplit_output_task_order"
11069 "test_too_big_testname"
11070 "test_two_orders")
11071 " and not "))
11072 #:phases
11073 #~(modify-phases %standard-phases
11074 (add-after 'unpack 'relax-requirements
11075 (lambda _
11076 (substitute* "setup.cfg"
11077 ;; natsort>=8.2.0
11078 ((">=8.2.0") "")))))))
11079 (native-inputs
11080 (list python-pytest
11081 python-setuptools
11082 python-wheel))
11083 (propagated-inputs
11084 (list python-natsort
11085 python-robotframework
11086 python-robotframework-stacktrace))
11087 (home-page "https://pabot.org")
11088 (synopsis "Parallel test runner for Robot Framework")
11089 (description "Pabot is a parallel executor for Robot Framework tests.")
11090 (license license:asl2.0)))
11091
11092(define-public python-robotframework-stacktrace
11093 (package
11094 (name "python-robotframework-stacktrace")
11095 (version "0.4.1")
11096 (source
11097 (origin
11098 (method git-fetch)
11099 (uri (git-reference
11100 (url "https://github.com/MarketSquare/robotframework-stacktrace")
11101 (commit version)))
11102 (file-name (git-file-name name version))
11103 (sha256
11104 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
11105 (build-system pyproject-build-system)
11106 (arguments
11107 ;; XXX: The test suite fails (see:
11108 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
11109 (list
11110 #:tests? #f
11111 #:phases
11112 #~(modify-phases %standard-phases
11113 (add-after 'unpack 'set-version
11114 (lambda _
11115 (substitute* "setup.py"
11116 (("VERSION =.*")
11117 (string-append "VERSION = '" #$version "'"))))))))
11118 (native-inputs (list python-setuptools))
11119 (propagated-inputs (list python-robotframework))
11120 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
11121 (synopsis "Robot Framework listener to print a stack trace on error")
11122 (description "StackTrace is a Robot Framework listener that prints a stack
11123trace directly to the terminal to ease debugging.")
11124 (license license:asl2.0)))
11125
11126(define-public python-robotframework-sshlibrary
11127 (package
11128 (name "python-robotframework-sshlibrary")
11129 (version "3.8.0")
11130 ;; There are no tests in the PyPI archive.
11131 (source
11132 (origin
11133 (method git-fetch)
11134 (uri (git-reference
11135 (url "https://github.com/robotframework/SSHLibrary")
11136 (commit (string-append "v" version))))
11137 (file-name (git-file-name name version))
11138 (sha256
11139 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
11140 (patches (search-patches
11141 "python-robotframework-sshlibrary-rf5-compat.patch"))))
11142 (build-system pyproject-build-system)
11143 (arguments
11144 (list
11145 #:phases
11146 #~(modify-phases %standard-phases
11147 (add-after 'unpack 'fix-python-incompatibilities
11148 (lambda _
11149 (substitute* (find-files "utest" "\\.py$")
11150 (("assertEquals") "assertEqual"))))
11151 (add-before 'build 'build-and-install-doc
11152 (lambda _
11153 (let ((doc (string-append #$output:doc
11154 "/share/doc/robotframework-sshlibrary")))
11155 (invoke "chmod" "-R" "+w" "docs")
11156 (invoke "invoke" "kw-docs" "project-docs")
11157 (mkdir-p doc)
11158 (for-each delete-file
11159 (find-files "docs" "\\.rst"))
11160 (copy-recursively "docs" doc))))
11161 (replace 'check
11162 (lambda* (#:key tests? #:allow-other-keys)
11163 (when tests?
11164 ;; Some tests require an SSH server; we remove them.
11165 (delete-file "utest/test_client_api.py")
11166 (delete-file "utest/test_scp.py")
11167 (invoke "python" "utest/run.py")))))))
11168 (propagated-inputs
11169 (list python-robotframework python-paramiko python-scp))
11170 (native-inputs
11171 (list openssh
11172 which
11173 ;; To generate the documentation
11174 python-docutils
11175 python-invoke
11176 python-pygments
11177 python-rellu
11178 python-setuptools))
11179 (outputs '("out" "doc"))
11180 (home-page "https://github.com/robotframework/SSHLibrary")
11181 (synopsis "Robot Framework library for SSH and SFTP")
11182 (description
11183 "SSHLibrary is a Robot Framework library providing support for SSH and
11184SFTP. It has the following main usages:
11185@itemize @bullet
11186@item Executing commands on the remote machine, either blocking or non-blocking.
11187@item Writing and reading in an interactive shell.
11188@item Transferring files and directories over SFTP.
11189@item Ensuring that files and directories exist on the remote machine.
11190@end itemize")
11191 (license license:asl2.0)))
11192
11193(define-public python-robotframework-pythonlibcore
11194 (package
11195 (name "python-robotframework-pythonlibcore")
11196 (version "4.4.1")
11197 (source
11198 (origin
11199 (method git-fetch) ;no tests in pypi archive
11200 (uri (git-reference
11201 (url "https://github.com/robotframework/PythonLibCore")
11202 (commit (string-append "v" version))))
11203 (file-name (git-file-name name version))
11204 (sha256
11205 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
11206 (build-system pyproject-build-system)
11207 (arguments
11208 (list
11209 #:test-backend #~'custom
11210 #:test-flags #~(list "utest/run.py")))
11211 (native-inputs
11212 (list python-approvaltests
11213 python-pytest
11214 python-pytest-cov ; This package has a custom way to run tests.
11215 python-pytest-mockito
11216 python-robotframework
11217 python-setuptools))
11218 (home-page "https://github.com/robotframework/PythonLibCore")
11219 (synopsis "Robot Framework Python library tools")
11220 (description
11221 "PythonLibCore provides tools for creating larger test libraries for
11222Robot Framework using Python. The Robot Framework hybrid and dynamic library
11223APIs give more flexibility for library than the static library API, but they
11224also set requirements for libraries which need to be implemented in the
11225library side. PythonLibCore eases the problem by providing a simpler
11226interface and by handling all the requirements towards the Robot Framework
11227library APIs.")
11228 (license license:asl2.0)))
11229
11230(define-public python-robotframework-seleniumlibrary
11231 (package
11232 (name "python-robotframework-seleniumlibrary")
11233 (version "6.8.0")
11234 (source
11235 (origin
11236 (method git-fetch)
11237 (uri (git-reference
11238 (url "https://github.com/robotframework/SeleniumLibrary")
11239 (commit (string-append "v" version))))
11240 (file-name (git-file-name name version))
11241 (sha256
11242 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
11243 (build-system pyproject-build-system)
11244 (arguments
11245 (list
11246 #:test-flags
11247 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
11248 "-k" (string-join
11249 (list "not test_create_firefox_with_options"
11250 "test_create_headless_firefox_with_options"
11251 "test_create_driver_firefox")
11252 " and not "))))
11253 (native-inputs
11254 (list python-approvaltests
11255 python-pytest
11256 python-pytest-mockito
11257 python-setuptools))
11258 (propagated-inputs
11259 (list python-click
11260 python-robotframework
11261 python-robotframework-pythonlibcore
11262 python-selenium))
11263 (home-page "https://github.com/robotframework/SeleniumLibrary")
11264 (synopsis "Web testing library for Robot Framework")
11265 (description "SeleniumLibrary is a web testing library for Robot Framework
11266that utilizes the Selenium tool internally.")
11267 (license license:asl2.0)))
11268
11269(define-public python-robotframework-seleniumscreenshots
11270 (package
11271 (name "python-robotframework-seleniumscreenshots")
11272 (version "0.9.5")
11273 (source
11274 (origin
11275 (method git-fetch)
11276 (uri (git-reference
11277 (url
11278 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11279 (commit version)))
11280 (file-name (git-file-name name version))
11281 (sha256
11282 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
11283 (build-system pyproject-build-system)
11284 (arguments
11285 ;; XXX: The tests require a relatively complicated setup configured in
11286 ;; their CI with Nix (!).
11287 `(#:tests? #f))
11288 (native-inputs (list python-setuptools))
11289 (propagated-inputs
11290 (list python-robotframework python-robotframework-seleniumlibrary))
11291 (home-page
11292 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
11293 (synopsis
11294 "Robot Framework library for annotating and cropping screenshots")
11295 (description
11296 "The SeleniumScreenshots library for Robot Framework provides keywords
11297for annotating and cropping screenshots taken with SeleniumLibrary. It is
11298useful for scripting automatically updated screenshots for documentation or
11299for visual regression testing purposes.")
11300 (license license:bsd-3)))
11301
11302(define-public python-rstr
11303 (package
11304 (name "python-rstr")
11305 (version "3.2.2")
11306 (source
11307 (origin
11308 (method git-fetch)
11309 (uri (git-reference
11310 (url "https://github.com/leapfrogonline/rstr")
11311 (commit version)))
11312 (file-name (git-file-name name version))
11313 (sha256
11314 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
11315 (build-system pyproject-build-system)
11316 (native-inputs (list python-pytest
11317 python-setuptools
11318 python-setuptools-scm
11319 python-wheel))
11320 (home-page "https://github.com/leapfrogonline/rstr")
11321 (synopsis "Generate random strings in Python")
11322 (description "This package provides a python module for generating
11323random strings of various types. It could be useful for fuzz testing,
11324generating dummy data, or other applications. It has no dependencies
11325outside the standard library.")
11326 (license license:bsd-3)))
11327
11328(define-public python-scp
11329 (package
11330 (name "python-scp")
11331 (version "0.15.0")
11332 (source
11333 (origin
11334 (method git-fetch)
11335 (uri (git-reference
11336 (url "https://github.com/jbardin/scp.py")
11337 (commit (string-append "v" version))))
11338 (file-name (git-file-name name version))
11339 (sha256
11340 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
11341 (build-system pyproject-build-system)
11342 (arguments (list #:tests? #f)) ;tests require an SSH server
11343 (native-inputs (list python-setuptools))
11344 (propagated-inputs (list python-paramiko))
11345 (home-page "https://github.com/jbardin/scp.py")
11346 (synopsis "SCP protocol module for Python and Paramiko")
11347 (description
11348 "The scp module extends the Paramiko library to send and receive files
11349via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
11350 (license license:gpl2+)))
11351
11352(define-public python-rst-linker
11353 (package
11354 (name "python-rst-linker")
11355 (version "2.6.0")
11356 (source
11357 (origin
11358 (method git-fetch)
11359 (uri (git-reference
11360 (url "https://github.com/jaraco/rst.linker")
11361 (commit (string-append "v" version))))
11362 (file-name (git-file-name name version))
11363 (sha256
11364 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
11365 (build-system pyproject-build-system)
11366 (propagated-inputs (list python-jaraco-context))
11367 (native-inputs
11368 (list python-path
11369 python-jaraco-vcs
11370 python-pytest
11371 python-pytest-subprocess
11372 python-setuptools-scm
11373 python-setuptools))
11374 (home-page "https://github.com/jaraco/rst.linker")
11375 (synopsis "Sphinx plugin to add links and timestamps")
11376 (description
11377 "rst.linker automatically replaces text by a reStructuredText external
11378reference or timestamps. It's primary purpose is to augment the changelog,
11379but it can be used for other documents, too.")
11380 (license license:expat)))
11381
11382(define-public python-feedgenerator
11383 (package
11384 (name "python-feedgenerator")
11385 (version "2.1.0")
11386 (source
11387 (origin
11388 (method url-fetch)
11389 (uri (pypi-uri "feedgenerator" version))
11390 (sha256
11391 (base32
11392 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
11393 (build-system pyproject-build-system)
11394 (native-inputs
11395 (list python-pytest python-setuptools python-wheel))
11396 (propagated-inputs
11397 (list python-pytz))
11398 (home-page "https://github.com/getpelican/feedgenerator")
11399 (synopsis
11400 "Standalone version of Django's Atom/RSS feed generator")
11401 (description
11402 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11403which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11404 (license license:bsd-3)))
11405
11406(define-public python-lsp-jsonrpc
11407 (package
11408 (name "python-lsp-jsonrpc")
11409 (version "1.1.2")
11410 (source
11411 (origin
11412 (method url-fetch)
11413 (uri (pypi-uri "python-lsp-jsonrpc" version))
11414 (sha256
11415 (base32
11416 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11417 (build-system pyproject-build-system)
11418 (native-inputs
11419 (list python-pyflakes
11420 python-pytest
11421 python-setuptools
11422 python-setuptools-scm
11423 python-wheel))
11424 (propagated-inputs
11425 (list python-ujson))
11426 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11427 (synopsis "JSON RPC 2.0 server library")
11428 (description
11429 "This package provides a JSON RPC 2.0 server library for Python.")
11430 (license license:expat)))
11431
11432(define-public python-pydantic
11433 (package
11434 (name "python-pydantic")
11435 (version "2.12.5")
11436 (source
11437 (origin
11438 (method git-fetch)
11439 (uri (git-reference
11440 (url "https://github.com/samuelcolvin/pydantic")
11441 (commit (string-append "v" version))))
11442 (file-name (git-file-name name version))
11443 (sha256
11444 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11445 (build-system pyproject-build-system)
11446 (arguments
11447 (list
11448 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11449 #:test-flags
11450 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11451 (native-inputs
11452 (list tzdata-for-tests
11453 python-dirty-equals-bootstrap
11454 python-faker
11455 python-hatch-fancy-pypi-readme
11456 python-hatchling
11457 python-jsonschema
11458 python-pytest
11459 python-pytest-benchmark
11460 python-pytest-examples
11461 python-pytest-mock
11462 python-pytest-run-parallel
11463 python-pytz))
11464 (propagated-inputs
11465 (list python-annotated-types
11466 python-pydantic-core ;it's hard == requirement, keep it in sync
11467 python-typing-extensions
11468 python-typing-inspection))
11469 (home-page "https://github.com/samuelcolvin/pydantic")
11470 (synopsis "Python data validation and settings management")
11471 (description
11472 "Pydantic enforces type hints at runtime, and provides user friendly
11473errors when data is invalid.")
11474 (license license:expat)))
11475
11476;; It may be removed after 2026-01-05.
11477(define-deprecated/public-alias python-pydantic-2 python-pydantic)
11478
11479(define-public python-pydantic-core
11480 (package
11481 (name "python-pydantic-core")
11482 (version "2.41.5")
11483 (source
11484 (origin
11485 (method url-fetch)
11486 (uri (pypi-uri "pydantic_core" version))
11487 (sha256
11488 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11489 (build-system pyproject-build-system)
11490 (arguments
11491 (list
11492 #:imported-modules `(,@%cargo-build-system-modules
11493 ,@%pyproject-build-system-modules)
11494 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11495 (guix build pyproject-build-system)
11496 (guix build utils))
11497 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11498 #:test-flags
11499 #~(list "--ignore=tests/benchmarks"
11500 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11501 ;; python-pydantic-core -> python-pydantic ->
11502 ;; python-inline-snapshot -> python-pydantic-core
11503 "--ignore=tests/test_docstrings.py"
11504 "--ignore=tests/test_hypothesis.py"
11505 "--ignore=tests/validators/test_allow_partial.py"
11506 "--ignore=tests/validators/test_frozenset.py"
11507 "--ignore=tests/validators/test_list.py"
11508 "--ignore=tests/validators/test_set.py")
11509 #:phases
11510 #~(modify-phases %standard-phases
11511 (add-after 'unpack 'prepare-cargo-build-system
11512 (lambda args
11513 (for-each (lambda (phase)
11514 (format #t "Running cargo phase: ~a~%" phase)
11515 (apply (assoc-ref cargo:%standard-phases phase)
11516 #:cargo-target #$(cargo-triplet)
11517 args))
11518 '(unpack-rust-crates
11519 configure
11520 check-for-pregenerated-files
11521 patch-cargo-checksums)))))))
11522 (native-inputs
11523 (append
11524 (list maturin
11525 python-dirty-equals-bootstrap
11526 python-pytest
11527 python-pytest-benchmark ;TODO: disable in pyproject.toml
11528 python-pytest-mock
11529 python-pytest-timeout
11530 python-typing-inspection
11531 python-tzdata
11532 rust
11533 `(,rust "cargo"))
11534 (or (and=> (%current-target-system)
11535 (compose list make-rust-sysroot))
11536 '())))
11537 (inputs
11538 (cargo-inputs 'python-pydantic-core))
11539 (propagated-inputs
11540 (list python-typing-extensions))
11541 (home-page "https://github.com/pydantic/pydantic-core")
11542 (synopsis "Core validation logic for pydantic")
11543 (description "This package provides the core functionality for pydantic
11544validation and serialization.")
11545 (license license:expat)))
11546
11547(define-public python-pydantic-cli
11548 (package
11549 (name "python-pydantic-cli")
11550 (version "9.1.0")
11551 (source
11552 (origin
11553 (method git-fetch) ;for tests
11554 (uri (git-reference
11555 (url "https://github.com/mpkocher/pydantic-cli")
11556 (commit (string-append "v" version))))
11557 (file-name (git-file-name name version))
11558 (sha256
11559 (base32
11560 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11561 (build-system pyproject-build-system)
11562 (propagated-inputs
11563 (list python-pydantic))
11564 (native-inputs
11565 (list python-hatchling python-pytest))
11566 (home-page "https://github.com/mpkocher/pydantic-cli")
11567 (synopsis "Turn Pydantic defined data models into CLI tools")
11568 (description
11569 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11570Interfaces} via data models provided in the JSON format.")
11571 (license license:expat)))
11572
11573(define-public python-pydantic-extra-types
11574 (package
11575 (name "python-pydantic-extra-types")
11576 (version "2.10.6")
11577 (source
11578 (origin
11579 (method git-fetch)
11580 (uri (git-reference
11581 (url "https://github.com/pydantic/pydantic-extra-types")
11582 (commit (string-append "v" version))))
11583 (file-name (git-file-name name version))
11584 (sha256
11585 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11586 (build-system pyproject-build-system)
11587 (arguments
11588 (list
11589 ;; tests: 13079 passed, 1 deselected
11590 #:test-flags
11591 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11592 #~(list "--ignore=tests/test_s3.py"
11593 "--deselect=tests/test_coordinate.py::test_json_schema"
11594 ;; XXX: The most of the tests fail, pendulum is optional package
11595 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11596 ;; requires Rust.
11597 "--ignore=tests/test_pendulum_dt.py"
11598 "--ignore=tests/test_json_schema.py")
11599 #:phases
11600 #~(modify-phases %standard-phases
11601 (add-before 'check 'pre-check
11602 (lambda* (#:key inputs #:allow-other-keys)
11603 (setenv "TZ" "UTC")
11604 (setenv "TZDIR" (search-input-directory inputs
11605 "share/zoneinfo")))))))
11606 (native-inputs
11607 (list python-pytest
11608 python-hatchling
11609 tzdata-for-tests))
11610 (propagated-inputs
11611 (list python-pydantic
11612 python-typing-extensions
11613 ;; [optional]
11614 python-cron-converter
11615 ;; python-pendulum
11616 python-phonenumbers
11617 python-pycountry
11618 python-pymongo
11619 python-pytz
11620 python-semver
11621 python-tzdata
11622 python-ulid))
11623 (home-page "https://github.com/pydantic/pydantic-extra-types")
11624 (synopsis "Extra Pydantic types")
11625 (description "This package provides sxtra types for Pydantic.")
11626 (license license:expat)))
11627
11628(define-public python-pydantic-settings
11629 (package
11630 (name "python-pydantic-settings")
11631 (version "2.12.0")
11632 (source
11633 (origin
11634 (method url-fetch)
11635 (uri (pypi-uri "pydantic_settings" version))
11636 (sha256
11637 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11638 (build-system pyproject-build-system)
11639 (arguments
11640 (list
11641 ;; tests: 399 passed, 27 skipped
11642 #:test-flags
11643 ;; XXX: Ignore tests requiring python-ruff.
11644 #~(list "--ignore=tests/test_docs.py")
11645 #:phases
11646 #~(modify-phases %standard-phases
11647 (add-before 'check 'set-home
11648 (lambda _
11649 ;; FileNotFoundError: [Errno 2] No such file or directory:
11650 ;; '/homeless-shelter/
11651 (setenv "HOME" "/tmp"))))))
11652 (native-inputs
11653 (list python-hatchling
11654 python-pytest
11655 python-pytest-examples
11656 python-pytest-mock))
11657 (propagated-inputs
11658 (list python-dotenv
11659 python-pydantic
11660 python-typing-inspection
11661 ;; [optional]
11662 python-pyyaml
11663 python-tomli))
11664 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11665 (synopsis "Settings management using Pydantic")
11666 (description
11667 "Pydantic Settings provides optional Pydantic features for loading a
11668settings or config class from environment variables or secrets files.")
11669 (license license:expat)))
11670
11671(define-public python-pydoc-markdown
11672 (package
11673 (name "python-pydoc-markdown")
11674 (version "4.8.2")
11675 (source
11676 (origin
11677 (method url-fetch)
11678 (uri (pypi-uri "pydoc_markdown" version))
11679 (sha256
11680 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11681 (build-system pyproject-build-system)
11682 (arguments
11683 (list
11684 #:tests? #false ;there are none
11685 #:phases
11686 '(modify-phases %standard-phases
11687 ;; This is probably not a good idea, but it wants a rather old
11688 ;; version of docstring-parser.
11689 (add-after 'unpack 'relax-requirements
11690 (lambda _
11691 (substitute* "pyproject.toml"
11692 (("docstring-parser = .*")
11693 "docstring-parser = \"^0\"\n")))))))
11694 (propagated-inputs (list python-click
11695 python-databind-core
11696 python-databind-json
11697 python-docspec
11698 python-docspec-python
11699 python-docstring-parser
11700 python-jinja2
11701 python-nr-util
11702 python-pyyaml
11703 python-requests
11704 python-tomli
11705 python-tomli-w
11706 python-watchdog
11707 python-yapf))
11708 (native-inputs (list python-poetry-core))
11709 (home-page "https://pypi.org/project/pydoc-markdown/")
11710 (synopsis "Create Python API documentation in Markdown format")
11711 (description "Pydoc-Markdown is a tool to create Python API documentation
11712in Markdown format. Instead of executing your Python code like so many other
11713documentation tools, it parses it using docspec instead.")
11714 (license license:expat)))
11715
11716;; XXX: The project is deprecated upstream, still in use by some packages,
11717;; consider to remove when nothing depends on it.
11718(define-public python-pydocstyle
11719 (package
11720 (name "python-pydocstyle")
11721 (version "6.3.0")
11722 (source
11723 (origin
11724 (method git-fetch) ;no tests in PyPI archive
11725 (uri (git-reference
11726 (url "https://github.com/PyCQA/pydocstyle")
11727 (commit version)))
11728 (file-name (git-file-name name version))
11729 (sha256
11730 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11731 (patches (search-patches
11732 "python-pydocstyle-add-support-for-pep701.patch"))))
11733 (build-system pyproject-build-system)
11734 (arguments
11735 (list
11736 ;; It tries to install with pip.
11737 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11738 #:phases
11739 #~(modify-phases %standard-phases
11740 (add-after 'unpack 'set-version
11741 (lambda _
11742 (substitute* "pyproject.toml"
11743 (("0.0.0-dev") #$version)))))))
11744 (native-inputs
11745 (list python-poetry-core
11746 python-pytest
11747 python-tomli))
11748 (propagated-inputs
11749 (list python-six
11750 python-snowballstemmer))
11751 (home-page "https://github.com/PyCQA/pydocstyle/")
11752 (synopsis "Python docstring style checker")
11753 (description
11754 "This package provides a style checker for the Python Language
11755Server (PLS).")
11756 (license license:expat)))
11757
11758(define-public python-lsp-server
11759 (package
11760 (name "python-lsp-server")
11761 (version "1.14.0")
11762 (source
11763 (origin
11764 (method git-fetch)
11765 (uri (git-reference
11766 (url "https://github.com/python-lsp/python-lsp-server")
11767 (commit (string-append "v" version))))
11768 (file-name (git-file-name name version))
11769 (sha256
11770 (base32 "1dyp49x844c4mja0qg01nilsbi09w7526izsk3pi5zpylmhmvbk2"))
11771 (patches
11772 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11773 (build-system pyproject-build-system)
11774 (arguments
11775 (list
11776 #:test-flags
11777 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11778 "-k"
11779 (string-append
11780 "not test_concurrent_ws_requests " ; flaky
11781 "and not test_pyqt_completion " ; avoid pyqt5
11782 "and not test_pandas_completion")) ; avoid pandas
11783 #:phases
11784 #~(modify-phases %standard-phases
11785 (add-before 'check 'set-HOME
11786 (lambda _ (setenv "HOME" "/tmp"))))))
11787 (propagated-inputs
11788 (list python-black
11789 python-docstring-to-markdown
11790 python-flake8
11791 python-jedi
11792 python-lsp-jsonrpc
11793 python-mccabe
11794 python-pluggy
11795 python-pycodestyle
11796 python-pydocstyle
11797 python-pyflakes
11798 python-pylint
11799 python-rope
11800 python-ujson
11801 python-whatthepatch
11802 python-yapf))
11803 (native-inputs
11804 (list python-flaky
11805 python-matplotlib
11806 python-pytest
11807 python-setuptools
11808 python-setuptools-scm
11809 python-websockets))
11810 (home-page "https://github.com/python-lsp/python-lsp-server")
11811 (synopsis "Python implementation of the Language Server Protocol")
11812 (description
11813 "The Python Language Server @command{pylsp} is an implementation of the
11814Python 3 language specification for the Language Server Protocol (LSP).
11815This tool is used in text editing environments to provide a complete
11816and integrated feature-set for programming Python effectively.")
11817 (license license:expat)))
11818
11819(define-public python-black
11820 (package
11821 (name "python-black")
11822 (version "26.3.1")
11823 (source
11824 (origin
11825 (method git-fetch)
11826 (uri (git-reference
11827 (url "https://github.com/psf/black")
11828 (commit version)))
11829 (file-name (git-file-name name version))
11830 (sha256
11831 (base32 "1m2vxwajavhpg34zkwyg4qyhf0lfsbphm9lvqkikal1lr1cymknz"))))
11832 (build-system pyproject-build-system)
11833 (arguments
11834 (list
11835 ;; tests: 232 passed, 3 skipped, 4 subtests
11836 #:test-flags
11837 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
11838 ;; Diffs are not equal.
11839 "--deselect=tests/test_format.py::test_simple_format")
11840 #:phases
11841 #~(modify-phases %standard-phases
11842 (add-after 'patch-source-shebangs 'use-absolute-file-names
11843 (lambda* (#:key inputs #:allow-other-keys)
11844 (substitute* (find-files "tests" "\\.py$")
11845 (("#!/usr/bin/env python3")
11846 (string-append
11847 "#!" (search-input-file inputs "/bin/python3")))))))))
11848 (propagated-inputs
11849 (list python-aiohttp
11850 python-click
11851 python-mypy-extensions
11852 python-packaging
11853 python-pathspec
11854 python-platformdirs
11855 python-pytokens))
11856 (native-inputs
11857 (list python-pytest
11858 python-pytest-xdist
11859 python-hatch-fancy-pypi-readme
11860 python-hatch-vcs
11861 python-hatchling))
11862 (home-page "https://github.com/psf/black")
11863 (synopsis "The uncompromising code formatter")
11864 (description "Black is the uncompromising Python code formatter.")
11865 (license license:expat)))
11866
11867(define-public python-black-macchiato
11868 (package
11869 (name "python-black-macchiato")
11870 (version "1.3.0")
11871 (source
11872 (origin
11873 (method git-fetch)
11874 (uri (git-reference
11875 (url "https://github.com/wbolster/black-macchiato")
11876 (commit version)))
11877 (file-name (git-file-name name version))
11878 (sha256
11879 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
11880 (build-system pyproject-build-system)
11881 (arguments
11882 (list
11883 #:phases
11884 #~(modify-phases %standard-phases
11885 (add-after 'unpack 'ignore-failing-tests
11886 (lambda _
11887 (substitute* "test_macchiato.py"
11888 (("\\(.*\\n'\\)," all)
11889 (string-append "# " all))))))))
11890 (native-inputs (list python-pytest python-setuptools))
11891 (propagated-inputs (list python-black))
11892 (home-page "https://github.com/wbolster/black-macchiato")
11893 (synopsis "Partial @code{python-black} formatting")
11894 (description
11895 "This package is built on top the @code{python-black} code formatter to
11896enable formatting of partial files.")
11897 (license license:bsd-3)))
11898
11899(define-public python-blinker
11900 (package
11901 (name "python-blinker")
11902 (version "1.9.0")
11903 (source
11904 (origin
11905 (method url-fetch)
11906 (uri (pypi-uri "blinker" version))
11907 (sha256
11908 (base32
11909 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
11910 (build-system pyproject-build-system)
11911 (native-inputs
11912 (list python-flit-core
11913 python-pytest
11914 python-pytest-asyncio))
11915 (home-page "https://pythonhosted.org/blinker/")
11916 (synopsis "Fast, simple object-to-object and broadcast signaling")
11917 (description
11918 "Blinker provides a fast dispatching system that allows any number of
11919interested parties to subscribe to events, or \"signals\".")
11920 (license license:expat)))
11921
11922(define-public pelican
11923 (package
11924 (name "pelican")
11925 (version "4.11.0")
11926 (source
11927 (origin
11928 (method url-fetch)
11929 (uri (pypi-uri "pelican" version))
11930 (sha256
11931 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
11932 (build-system pyproject-build-system)
11933 (arguments
11934 (list
11935 #:test-flags #~(list "-k" (string-append
11936 ;; These tests failed with AssertionError.
11937 "not test_typogrify_ignore_filters"
11938 " and not test_typogrify_ignore_tags"
11939 " and not test_error_on_warning"))))
11940 (native-inputs
11941 (list python-anyio
11942 python-beautifulsoup4
11943 python-lxml
11944 python-pdm-backend
11945 python-pytest
11946 python-smartypants
11947 python-typogrify))
11948 (inputs
11949 (list python-blinker
11950 python-dateutil
11951 ;; Ignoring `guix lint` warning as python-docutils is used to support
11952 ;; reStructuredText processing at runtime.
11953 python-docutils
11954 python-feedgenerator
11955 python-jinja2
11956 python-ordered-set
11957 python-pygments
11958 python-rich
11959 python-tzdata
11960 python-unidecode
11961 python-watchfiles))
11962 (home-page "https://blog.getpelican.com/")
11963 (synopsis "Python-based static site publishing system")
11964 (description
11965 "Pelican is a tool to generate a static blog from reStructuredText,
11966Markdown input files, and more. Pelican uses Jinja2 for templating
11967and is very extensible.")
11968 (license license:agpl3+)))
11969
11970(define-public python-cykhash
11971 (package
11972 (name "python-cykhash")
11973 (version "2.0.1")
11974 (source
11975 (origin
11976 (method url-fetch)
11977 (uri (pypi-uri "cykhash" version))
11978 (sha256
11979 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
11980 (build-system pyproject-build-system)
11981 (arguments
11982 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
11983 (native-inputs
11984 (list python-cython
11985 python-setuptools))
11986 (home-page "https://github.com/realead/cykhash")
11987 (synopsis "Khash-sets and maps")
11988 (description
11989 "This package is a Cython wrapper for khash-sets/maps. It brings
11990functionality of
11991@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
11992Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
11993world is lacking the concept of a (hash-)set. This shortcoming is fixed and
11994efficient (memory- and speedwise compared to pandas) @code{unique} and
11995@code{isin} are implemented. Python-set/dict have a big memory-footprint.
11996For some datatypes the overhead can be reduced by using khash by factor 4-8.")
11997 (license license:expat)))
11998
11999(define-public python-cython
12000 ;; TODO: Move to python-build.
12001 (package
12002 (name "python-cython")
12003 (version "3.1.7")
12004 (source
12005 (origin
12006 (method url-fetch)
12007 (uri (pypi-uri "cython" version))
12008 (sha256
12009 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
12010 (build-system pyproject-build-system)
12011 (arguments
12012 (list
12013 #:test-backend #~'custom
12014 #:test-flags
12015 #~(list "runtests.py"
12016 "-vv"
12017 "-j" (number->string (parallel-job-count))
12018 "-x" (string-join
12019 (list "annotate_html"
12020 "Debugger"
12021 ;; It introduces cycle.
12022 "numpy_test"
12023 ;; It fails with AssertionError: Failed doctest test
12024 ;; for complex_numbers_cpp.double_abs.
12025 "complex_numbers_cpp"
12026 ;; This test fails when running on 24 cores.
12027 "cpp_stl_conversion"
12028 #$@(if (target-32bit?)
12029 ;; XXX: On 32-bit architectures, running the
12030 ;; parallel tests fails on many-core systems.
12031 ;; See: <https://github.com/cython/cython/issues/2807>.
12032 '("run.parallel"
12033 ;; Test cpp_stl_any.cast_test fails.
12034 ;; See: <https://github.com/cython/cython/issues/5928>.
12035 "cpp_stl_any")
12036 '())
12037 #$@(if (system-hurd?)
12038 '("test_class_ref"
12039 "test_compiler_directives"
12040 "test_lang_version")
12041 '()))
12042 "|"))
12043 #:phases
12044 #~(modify-phases %standard-phases
12045 (add-before 'check 'pre-check
12046 (lambda* (#:key tests? test-flags #:allow-other-keys)
12047 ;; Disable compiler optimizations to greatly reduce the running
12048 ;; time of the test suite.
12049 (setenv "CFLAGS" "-O0")
12050 ;; Some tests require access to "$HOME/.cython".
12051 (setenv "HOME" "/tmp"))))))
12052 (native-inputs
12053 (list libxcrypt
12054 python-setuptools
12055 python-wheel))
12056 ;; we need the full python package and not just the python-wrapper
12057 ;; because we need libpython3.3m.so
12058 (inputs
12059 (list python))
12060 (home-page "https://cython.org/")
12061 (synopsis "C extensions for Python")
12062 (description "Cython is an optimising static compiler for both the Python
12063programming language and the extended Cython programming language. It makes
12064writing C extensions for Python as easy as Python itself.")
12065 (license license:asl2.0)))
12066
12067(define-public python-cython-0
12068 (package
12069 (inherit python-cython)
12070 ;; It's the latest version of 0.29. See
12071 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
12072 (version "0.29.37")
12073 (source
12074 (origin
12075 (method url-fetch)
12076 (uri (pypi-uri "Cython" version))
12077 (sha256
12078 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
12079 (arguments
12080 (list
12081 ;; XXX: Tests are broken with [email protected], but dependent packages
12082 ;; build, so keep it until unnecessary.
12083 #:tests? #f
12084 #:test-backend #~'custom
12085 #:test-flags
12086 #~(list "runtests.py"
12087 "-vv"
12088 "-j" (number->string (parallel-job-count))
12089 ;; XXX: On 32-bit architectures, running the parallel tests
12090 ;; fails on many-core systems, see
12091 ;; <https://github.com/cython/cython/issues/2807>.
12092 #$@(if (target-32bit?)
12093 #~("-x" "run.parallel")
12094 #~())
12095 #$@(if (system-hurd?)
12096 #~("-x" "test_class_ref"
12097 "-x" "test_compiler_directives"
12098 "-x" "test_lang_version")
12099 #~())
12100 ;; This test fails when running on 24 cores.
12101 "-x" "cpp_stl_conversion")
12102 #:phases
12103 #~(modify-phases %standard-phases
12104 (add-after 'unpack 'fix-pyximport-python-3.12
12105 (lambda _
12106 (let ((importlib-util-load-dynamic "\
12107import importlib.util
12108from importlib.machinery import ExtensionFileLoader
12109
12110def load_dynamic(name, path):
12111 loader = ExtensionFileLoader(name, path)
12112 spec = importlib.util.spec_from_file_location(name, loader=loader)
12113 module = importlib.util.module_from_spec(spec)
12114 spec.loader.exec_module(module)
12115 return module
12116"))
12117 (substitute* "pyximport/pyximport.py"
12118 (("^import imp")
12119 importlib-util-load-dynamic)
12120 (("imp\\.load_dynamic")
12121 "load_dynamic")))))
12122 (add-before 'check 'pre-check
12123 ;; some tests require access to "$HOME/.cython"
12124 (lambda _
12125 (setenv "HOME" "/tmp")
12126 ;; Disable compiler optimizations to greatly reduce the running
12127 ;; time of the test suite.
12128 (setenv "CFLAGS" "-O0"))))))))
12129
12130(define-public python-cython-next
12131 (package
12132 (inherit python-cython)
12133 (version "3.2.2")
12134 (source
12135 (origin
12136 (method url-fetch)
12137 (uri (pypi-uri "cython" version))
12138 (sha256
12139 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
12140
12141;; NOTE: when upgrading numpy please make sure that python-numba,
12142;; python-pandas and python-scipy still build, as these three packages are
12143;; often used together.
12144(define-public python-numpy
12145 (package
12146 (name "python-numpy")
12147 (version "2.3.1")
12148 (source
12149 (origin
12150 (method url-fetch)
12151 (uri (string-append
12152 "https://github.com/numpy/numpy/releases/download/v"
12153 version "/numpy-" version ".tar.gz"))
12154 (sha256
12155 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
12156 (build-system pyproject-build-system)
12157 (arguments
12158 (list
12159 ;; tests: 47513 passed, 1740 skipped, 33 xfailed, 5 xpassed, 341 warnings
12160 #:modules '((guix build utils)
12161 (guix build pyproject-build-system)
12162 (ice-9 format))
12163 #:test-flags
12164 #~(list "-m" "not slow"
12165 "--numprocesses" (number->string (min 8 (parallel-job-count)))
12166 ;; See: <https://github.com/numpy/numpy/issues/27531>,
12167 ;; <https://github.com/numpy/numpy/issues/17685>,
12168 ;; <https://github.com/numpy/numpy/issues/17635>.
12169 "-k" "not test_api_importable")
12170 #:phases
12171 #~(modify-phases %standard-phases
12172 (add-after 'unpack 'fix-executable-paths
12173 (lambda _
12174 (substitute* "numpy/distutils/exec_command.py"
12175 (("'/bin/sh'")
12176 (format #f "~s" (which "bash"))))
12177 (substitute* "numpy/meson.build"
12178 ;; Relay on python from the PATH instead of full reference
12179 ;; stored in built wheel.
12180 (("'py.full_path\\(\\)'") "'python'"))))
12181 ;; This isn't architecture specific.
12182 ;; TODO: Remove this conditional and apply for all builds.
12183 #$@(if (target-ppc64le?)
12184 #~((add-after 'unpack 'patch-bin-true
12185 (lambda* (#:key inputs #:allow-other-keys)
12186 (substitute* "numpy/_core/tests/test_cpu_features.py"
12187 (("/bin/true")
12188 (search-input-file inputs "bin/true"))))))
12189 #~())
12190 (add-before 'build 'parallelize-build
12191 (lambda _
12192 (setenv "OMP_NUM_THREAD"
12193 (number->string (parallel-job-count)))
12194 (setenv "NPY_NUM_BUILD_JOBS"
12195 (number->string (parallel-job-count)))))
12196 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12197 ;; when the gfortran header is used. Remove gfortran from
12198 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12199 ;; <https://issues.guix.gnu.org/73439#45>.
12200 (add-after 'set-paths 'hide-gfortran
12201 (lambda* (#:key inputs #:allow-other-keys)
12202 (let ((gfortran (assoc-ref inputs "gfortran")))
12203 (setenv "CPLUS_INCLUDE_PATH"
12204 (string-join
12205 (delete (string-append gfortran "/include/c++")
12206 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12207 ":")))))
12208 (add-before 'build 'configure-blas
12209 (lambda* (#:key inputs #:allow-other-keys)
12210 (call-with-output-file "site.cfg"
12211 (lambda (port)
12212 (format port
12213 "[openblas]
12214libraries = openblas
12215library_dirs = ~a/lib
12216include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
12217 (replace 'check
12218 (lambda* (#:key tests? test-flags #:allow-other-keys)
12219 (when tests?
12220 (with-directory-excursion #$output
12221 (apply invoke "pytest" test-flags)))))
12222 ;; The executables provided by this package ('f2py' and 'numpy-config')
12223 ;; only depend on Python. By customizing the wrap phase we can ensure
12224 ;; that we don't add all Python packages listed in native-inputs to
12225 ;; the closure. This significantly reduces the overall closure size.
12226 ;;
12227 ;; See also <https://bugs.gnu.org/25235>.
12228 (replace 'wrap
12229 (lambda* (#:key inputs outputs #:allow-other-keys)
12230 (for-each
12231 (lambda (program)
12232 (wrap-program program
12233 `("GUIX_PYTHONPATH" ":" suffix
12234 ,(list (site-packages inputs outputs)))))
12235 (find-files (in-vicinity #$output "/bin"))))))))
12236 (native-inputs
12237 (list gfortran
12238 python-hypothesis
12239 python-meson
12240 python-pytest
12241 python-pytest-xdist
12242 python-setuptools
12243 python-typing-extensions))
12244 (home-page "https://numpy.org")
12245 (synopsis "Fundamental package for scientific computing with Python")
12246 (description "NumPy is the fundamental package for scientific computing
12247with Python. It contains among other things: a powerful N-dimensional array
12248object, sophisticated (broadcasting) functions, tools for integrating C/C++
12249and Fortran code, useful linear algebra, Fourier transform, and random number
12250capabilities.")
12251 (properties
12252 '((upstream-name . "numpy")))
12253 (license license:bsd-3)))
12254
12255(define-public python-numpy-1
12256 (package
12257 (inherit python-numpy)
12258 (name "python-numpy")
12259 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
12260 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
12261 ;; in upstream Meson.
12262 ;;
12263 ;; See:
12264 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
12265 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
12266 ;; - file <doc/source/building/understanding_meson.rst>
12267 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
12268 (source
12269 (origin
12270 (method url-fetch)
12271 (uri (string-append
12272 "https://github.com/numpy/numpy/releases/download/v"
12273 version "/numpy-" version ".tar.gz"))
12274 (sha256
12275 (base32
12276 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
12277 (patches (search-patches "python-numpy-gcc-14.patch"))))
12278 (arguments
12279 (list
12280 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
12281 #:modules '((guix build utils)
12282 (guix build pyproject-build-system)
12283 (ice-9 format))
12284 #:phases
12285 #~(modify-phases %standard-phases
12286 (add-after 'unpack 'delete-test-files
12287 (lambda _
12288 ;; These tests depend on older setuptools, see:
12289 ;; <https://github.com/numpy/numpy/issues/27531>.
12290 ;;
12291 ;; E ModuleNotFoundError: No module named
12292 ;; 'distutils.msvccompiler'
12293 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
12294 (delete-file "numpy/distutils/tests/test_system_info.py")))
12295 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
12296 ;; when the gfortran header is used. Remove gfortran from
12297 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
12298 ;; <https://issues.guix.gnu.org/73439#45>.
12299 (add-after 'set-paths 'hide-gfortran
12300 (lambda* (#:key inputs #:allow-other-keys)
12301 (let ((gfortran (assoc-ref inputs "gfortran")))
12302 (setenv "CPLUS_INCLUDE_PATH"
12303 (string-join
12304 (delete (string-append gfortran "/include/c++")
12305 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
12306 ":")))))
12307 (add-before 'build 'relax-gcc-14-strictness
12308 (lambda _
12309 (setenv "CFLAGS"
12310 "-g -O2 -Wno-error=implicit-function-declaration")))
12311 (add-before 'build 'parallelize-build
12312 (lambda _
12313 (setenv "NPY_NUM_BUILD_JOBS"
12314 (number->string (parallel-job-count)))))
12315 (add-before 'build 'configure-blas
12316 (lambda* (#:key inputs #:allow-other-keys)
12317 (call-with-output-file "site.cfg"
12318 (lambda (port)
12319 (format port
12320 "\
12321[openblas]
12322libraries = openblas
12323library_dirs = ~a/lib
12324include_dirs = ~:*~a/include~%"
12325 (dirname (dirname
12326 (search-input-file
12327 inputs "include/openblas_config.h"))))))))
12328 (add-before 'build 'fix-executable-paths
12329 (lambda* (#:key inputs #:allow-other-keys)
12330 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
12331 ;; instead of /bin/sh.
12332 (substitute* "numpy/distutils/exec_command.py"
12333 (("'/bin/sh'")
12334 (format #f "~s" (search-input-file inputs "bin/bash"))))
12335 ;; Don't try to call '/bin/true' specifically.
12336 (substitute* "numpy/core/tests/test_cpu_features.py"
12337 (("/bin/true") (search-input-file inputs "bin/true")))))
12338 (replace 'check
12339 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
12340 (when tests?
12341 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
12342 "-j" (number->string (parallel-job-count))
12343 ;; Contrary to scipy, the runtests.py script of numpy
12344 ;; does *not* automatically provide -n when -j is used
12345 ;; (see: https://github.com/numpy/numpy/issues/21359).
12346 "--" "-n" (number->string (parallel-job-count))
12347 ;; Disable Pytest Warnings, they are resolved in the
12348 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
12349 ;; applied to fixtures have no effect,
12350 ;; DeprecationWarning.
12351 "-p" "no:warnings"
12352 "-k" (string-append
12353 ;; These tests may fail on 32-bit systems (see:
12354 ;; https://github.com/numpy/numpy/issues/18387).
12355 "not test_float_remainder_overflow "
12356 "and not test_pareto "
12357 ;; The 'test_rint_big_int' test fails on older
12358 ;; x86_64 CPUs such as the Core 2 Duo (see:
12359 ;; https://github.com/numpy/numpy/issues/22170).
12360 "and not test_rint_big_int "
12361 ;; They fail to detect compiler.
12362 "and not test_compile1 "
12363 "and not test_compile2 "
12364 ;; Due to disabled warnings
12365 "and not test_getattr_warning "
12366 "and not test_integer_signs "
12367 "and not test_implicit_cast_float_to_int_fails "
12368 "and not test_integer_signs "
12369 ;; The huge_array test is too large for 32-bit (see:
12370 ;; https://bugs.gentoo.org/843599 and
12371 ;; https://bugs.gentoo.org/846548).
12372 ;; TestKind.test_all is a Fortran type failure
12373 ;; that may be toolchain or environment related.
12374 #$@(if (or (target-x86?) (target-arm32?))
12375 `(" and not test_identityless_reduction_huge_array"
12376 " and not (TestKind and test_all)")
12377 '())
12378 ;; This test fails with a Fortran failure (16
12379 ;; expected but got -1), due to the fact that it
12380 ;; requires a 64-bit system.
12381 #$@(if (or (target-x86-32?) (target-arm32?))
12382 `(" and not test_int")
12383 '())
12384 ;; These tests fail when building from aarch64-linux.
12385 #$@(if (target-arm32?)
12386 `(" and not test_features"
12387 " and not test_unary_spurious_fpexception")
12388 '())
12389 ;; These tests seem to fail on machines without
12390 ;; an FPU is still under investigation upstream.
12391 ;; https://github.com/numpy/numpy/issues/20635
12392 #$@(if (target-riscv64?)
12393 `(" and not test_fp_noncontiguous")
12394 '())
12395 ;; They also fail with gcc-14
12396 " and not test_float"
12397 " and not test_fpclass"
12398
12399 ;; These tests fail with gcc-14
12400 " and not test_context_locality"
12401 " and not test_cosh"
12402 " and not test_default_policy_singleton"
12403 " and not test_exp_exceptions"
12404 " and not test_half_fpe"
12405 " and not test_owner_is_base"
12406 " and not test_policy_propagation"
12407 " and not test_set_policy"
12408 " and not test_sinh"
12409 " and not test_square_values"
12410 " and not test_sum"
12411 " and not test_switch_owner"
12412 " and not test_thread_locality"
12413
12414 ;; These tests depend on older setuptools, see:
12415 ;; <https://github.com/numpy/numpy/issues/27531>.
12416 " and not test_api_importable"
12417 " and not test_all_modules_are_expected_2")))))
12418 ;; See comment for custom python-numpy wrap phase above.
12419 (replace 'wrap
12420 (lambda* (#:key inputs outputs #:allow-other-keys)
12421 (for-each
12422 (lambda (program)
12423 (wrap-program program
12424 `("GUIX_PYTHONPATH" ":" suffix
12425 ,(list (site-packages inputs outputs)))))
12426 (find-files (in-vicinity #$output "/bin"))))))))
12427 (native-inputs
12428 (list python-hypothesis
12429 python-meson
12430 python-pytest
12431 python-pytest-xdist
12432 python-setuptools
12433 python-typing-extensions
12434 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12435 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12436 ;; <https://github.com/numpy/numpy/issues/24318>.
12437 gcc ;fevn.h c[++] include must precede fortran's
12438 gfortran))
12439 (inputs (list bash openblas))))
12440
12441(define-deprecated/public-alias python-numpy-2 python-numpy)
12442
12443(define-public python-numpysane
12444 (package
12445 (name "python-numpysane")
12446 (version "0.42")
12447 (source
12448 (origin
12449 (method git-fetch)
12450 (uri (git-reference
12451 (url "https://github.com/dkogan/numpysane.git")
12452 (commit (string-append "v" version))))
12453 (file-name (git-file-name name version))
12454 (sha256
12455 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
12456 (build-system pyproject-build-system)
12457 (arguments
12458 (list
12459 #:phases
12460 #~(modify-phases %standard-phases
12461 (add-after 'unpack 'patch
12462 (lambda* (#:key inputs outputs #:allow-other-keys)
12463 (let* ((numpy (assoc-ref inputs "python-numpy"))
12464 (site (site-packages inputs `(("out" . ,numpy)))))
12465 (substitute* "Makefile.common.header"
12466 ;; numpy 2.0 has this--but we don't use numpy 2.0.
12467 (("pkg-config --cflags-only-I numpy")
12468 (format #f "echo -I~a/numpy/core/include" site))))))
12469 (replace 'check
12470 (lambda _
12471 (setenv "CC"
12472 #$(cc-for-target))
12473 (invoke "make" "check"))))))
12474 (propagated-inputs (list python-numpy-1))
12475 (native-inputs (list perl pkg-config python-setuptools))
12476 (home-page "https://github.com/dkogan/numpysane")
12477 (synopsis "More-reasonable core functionality for numpy")
12478 (description
12479 "This package provides more-reasonable core functionality for numpy.
12480
12481A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12482
12483numpysane has:
12484@itemize
12485@item easier broadcasting
12486@item nicer array manipulation
12487@item array concatenation
12488@item manipulation of dimensions
12489@item broadcast-aware inner product
12490@item broadcast-aware outer product
12491@item broadcast-aware 2-norm
12492@item broadcast-aware matrix multiplication
12493@end itemize
12494")
12495 (license license:lgpl2.0+)))
12496
12497(define-public python-numpy-documentation
12498 (package
12499 (inherit python-numpy)
12500 (name "python-numpy-documentation")
12501 (arguments
12502 (list
12503 #:tests? #f ;we're only generating the documentation
12504 #:phases
12505 #~(modify-phases %standard-phases
12506 (add-after 'unpack 'avoid-external-deps
12507 (lambda _
12508 ;; XXX: Avoid search-button to avoid sphinx error
12509 ;; TemplateNotFound('search-button.html')
12510 (substitute* "doc/source/conf.py"
12511 (("\"search-button\",") ""))
12512 ;; XXX: Avoid theme-switcher to avoid sphinx error
12513 ;; TemplateNotFound('theme-switcher.html')
12514 (substitute* "doc/source/conf.py"
12515 (("\"theme-switcher\",") ""))
12516 ;; XXX: Avoid version-switcher because it depends on the value
12517 ;; of external https://numpy.org/doc/_static/versions.json
12518 (substitute* "doc/source/conf.py"
12519 (("\"version-switcher\",") ""))))
12520 (add-before 'build 'add-gnu-freefont-to-texmf
12521 (lambda _
12522 ;; XXX: The Sphinx-generated tex output specifies the GNU
12523 ;; FreeFont font to be searched via its extension, which uses
12524 ;; kpathsea instead of fontconfig and fail (see:
12525 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12526 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12527 ;; GUIX_TEXMF.
12528 (mkdir-p "texmf-dist/fonts/opentype/public")
12529 (symlink (string-append
12530 #$(this-package-native-input "font-gnu-freefont")
12531 "/share/fonts/opentype")
12532 (string-append
12533 (getcwd) "/"
12534 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12535 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12536 (getcwd) "/texmf-dist"))))
12537 (replace 'build
12538 (lambda _
12539 (chdir "doc")
12540 (let ((sphinxopts (string-append
12541 "SPHINXOPTS=-j"
12542 (number->string (parallel-job-count)))))
12543 ;; Do not treat warnings as errors.
12544 (substitute* "Makefile"
12545 ((" -WT ") " -T "))
12546 (setenv "HOME" "/tmp")
12547 ;; Build the PDF documentation.
12548 (invoke "make" "latex-build" sphinxopts)
12549 ;; FIXME: PDF build fails
12550 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12551 ;; Build the HTML documentation
12552 (invoke "make" "html" sphinxopts)
12553 ;; Build the Info documentation. The issues worked around
12554 ;; below can be tracked at
12555 ;; https://github.com/numpy/numpy/issues/12278.
12556 (substitute* "source/conf.py"
12557 ;; The root document should be "index", not "contents".
12558 (("\"contents\"") "'index'")
12559 ;; Disable Sphinx extensions that produce broken Texinfo.
12560 ((".*'numpydoc'.*") "")
12561 ((".*'sphinx.ext.autodoc'.*") "")
12562 ((".*'sphinx.ext.autosummary'.*") ""))
12563 (invoke "make" "info" sphinxopts))))
12564 (replace 'install
12565 (lambda _
12566 (let* ((data (string-append #$output "/share"))
12567 (doc (string-append data "/doc/numpy"))
12568 (html (string-append doc "/html"))
12569 (info (string-append data "/info")))
12570 ;; Install the HTML documentation.
12571 (mkdir-p html)
12572 (copy-recursively "build/html" html)
12573 ;; Install the PDF reference and user manuals.
12574 ;; FIXME:
12575 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12576 ;; (install-file "build/latex/numpy-user.pdf" doc)
12577 ;; Install the info manual.
12578 (install-file "build/texinfo/numpy.info" info)
12579 (symlink (string-append html "/_images")
12580 (string-append info "/numpy-figures"))))))))
12581 (native-inputs
12582 (list font-gnu-freefont
12583 perl
12584 python-breathe
12585 python-ipython
12586 python-jupyterlite-sphinx
12587 python-matplotlib
12588 python-numpy
12589 python-numpydoc
12590 python-pandas
12591 python-pydata-sphinx-theme
12592 python-scipy ;used by matplotlib
12593 python-setuptools
12594 python-sphinx
12595 python-sphinx-copybutton
12596 python-sphinx-design
12597 texinfo
12598 (texlive-local-tree
12599 (list texlive-cbfonts
12600 texlive-cm-super
12601 texlive-cmap
12602 texlive-expdlist
12603 texlive-fandol
12604 texlive-greek-fontenc
12605 texlive-latexmk
12606 texlive-polyglossia
12607 texlive-xetex
12608 texlive-xindy))))
12609 (inputs '())
12610 (propagated-inputs '())
12611 (synopsis "Documentation for the @code{python-numpy} package")
12612 (description "This package provides the complete NumPy documentation in
12613the Texinfo, and HTML formats.")))
12614
12615(define-public python-numpy-stl
12616 (package
12617 (name "python-numpy-stl")
12618 (version "3.2.0")
12619 (source
12620 (origin
12621 (method url-fetch)
12622 (uri (pypi-uri "numpy_stl" version))
12623 (sha256
12624 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12625 (build-system pyproject-build-system)
12626 (native-inputs
12627 (list python-cython
12628 python-pytest
12629 python-setuptools
12630 python-wheel))
12631 (propagated-inputs
12632 (list python-numpy
12633 python-utils))
12634 (home-page "https://github.com/WoLpH/numpy-stl/")
12635 (synopsis "Read, write and modify binary/ASCII STL files library")
12636 (description
12637 "Library to make reading, writing and modifying both binary and ascii STL
12638files, file format native to the stereolithography CAD software created by 3D
12639Systems, easy.")
12640 (license license:bsd-3)))
12641
12642(define-public python-npx
12643 (package
12644 (name "python-npx")
12645 (version "0.1.6")
12646 (source
12647 (origin
12648 (method git-fetch) ; no source archive in PyPI
12649 (uri (git-reference
12650 (url "https://github.com/sigma-py/npx")
12651 (commit (string-append "v" version))))
12652 (file-name (git-file-name name version))
12653 (sha256
12654 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12655 (build-system pyproject-build-system)
12656 (native-inputs
12657 (list python-networkx
12658 python-pytest
12659 python-setuptools
12660 python-wheel))
12661 (propagated-inputs
12662 (list python-numpy))
12663 (home-page "https://github.com/nschloe/npx")
12664 (synopsis "Extensions for NumPy")
12665 (description "NumPy is a large library used everywhere in scientific
12666computing. That's why breaking backwards-compatibility comes at a
12667significant cost and is almost always avoided, even if the API of some
12668methods is arguably lacking. This package provides drop-in wrappers
12669\"fixing\" those.")
12670 (license license:bsd-3)))
12671
12672(define-public python-munch
12673 (package
12674 (name "python-munch")
12675 (version "4.0.0")
12676 (source
12677 (origin
12678 (method url-fetch)
12679 (uri (pypi-uri "munch" version))
12680 (sha256
12681 (base32
12682 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12683 (build-system pyproject-build-system)
12684 (native-inputs
12685 (list python-astroid
12686 python-pytest
12687 python-setuptools
12688 python-wheel))
12689 (home-page "https://github.com/Infinidat/munch")
12690 (synopsis "Dot-accessible dictionary")
12691 (description "Munch is a dot-accessible dictionary similar to JavaScript
12692objects.")
12693 (license license:expat)))
12694
12695(define-public python-colormath2
12696 (package
12697 (name "python-colormath2")
12698 (version "3.0.3")
12699 (source
12700 (origin
12701 (method git-fetch)
12702 (uri (git-reference
12703 (url "https://github.com/bkmgit/python-colormath2")
12704 (commit version)))
12705 (file-name (git-file-name name version))
12706 (sha256
12707 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12708 (build-system pyproject-build-system)
12709 (propagated-inputs (list python-networkx python-numpy))
12710 (native-inputs (list python-nose2 python-setuptools))
12711 (home-page "https://github.com/bkmgit/python-colormath2")
12712 (synopsis "Color math and conversion library")
12713 (description
12714 "This is a Python library for color math and conversions.")
12715 (license license:bsd-3)))
12716
12717(define-public python-pam
12718 (package
12719 (name "python-pam")
12720 (version "2.0.2")
12721 (source
12722 (origin
12723 (method git-fetch)
12724 (uri (git-reference
12725 (url "https://github.com/FirefighterBlu3/python-pam")
12726 (commit (string-append "v" version))))
12727 (file-name (git-file-name name version))
12728 (sha256
12729 (base32 "05fvf9rg4h7sigzvipm1ghq34zk6i8na7wkyk905nvk4gdhln7ri"))))
12730 (build-system pyproject-build-system)
12731 (arguments
12732 (list
12733 #:test-flags
12734 #~(list "-k"
12735 (string-append " not __normal_"
12736 " and not __env_requires_"
12737 " and not __getenv"
12738 " and not __putenv"
12739 " and not __unset"
12740 " and not _setenv"
12741 " and not _env_set"
12742 " and not __pam_end"
12743 " and not _session_unauthenticated"))
12744 #:phases
12745 #~(modify-phases %standard-phases
12746 (add-after 'unpack 'bake-pam
12747 (lambda* (#:key inputs #:allow-other-keys)
12748 (substitute* "src/pam/__internals.py"
12749 (("find_library\\(\"(pam|pam_misc)\"\\)" all lib)
12750 (string-append
12751 "\""
12752 (search-input-file inputs
12753 (string-append "lib/lib" lib ".so"))
12754 "\"")))))
12755 (add-before 'check 'fix-test-config
12756 (lambda _
12757 (substitute* "pyproject.toml"
12758 (("\"test_\\*.py\"")
12759 (format
12760 #f "[~{~s~^,~}]"
12761 (map basename (find-files "tests" "test_.*\\.py$"))))
12762 (("norecursedirs = (\".*\")" all dirs)
12763 (string-append "norecursedirs = [" dirs "]"))))))))
12764 (inputs (list linux-pam))
12765 (propagated-inputs (list python-six))
12766 (native-inputs (list python-pytest
12767 python-setuptools))
12768 (home-page "https://github.com/FirefighterBlu3/python-pam")
12769 (synopsis "Python PAM module")
12770 (description "This package provides a Python module to interface with
12771@acronym{PAM, pluggable authentication modules}.")
12772 (license license:expat)))
12773
12774(define-public python-pyspnego
12775 (package
12776 (name "python-pyspnego")
12777 (version "0.8.0")
12778 (source (origin
12779 (method url-fetch)
12780 (uri (pypi-uri "pyspnego" version))
12781 (sha256
12782 (base32
12783 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
12784 (build-system pyproject-build-system)
12785 (native-inputs
12786 (list python-pytest python-pytest-mock python-setuptools python-wheel))
12787 (propagated-inputs
12788 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
12789 (home-page "https://github.com/jborean93/pyspnego")
12790 (synopsis "Python SPNEGO library")
12791 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
12792Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
12793parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
12794readable format.")
12795 (license license:expat)))
12796
12797(define-public python-pygit2
12798 (package
12799 (name "python-pygit2")
12800 (version "1.18.2")
12801 (source
12802 (origin
12803 (method url-fetch)
12804 (uri (pypi-uri "pygit2" version))
12805 (sha256
12806 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
12807 (build-system pyproject-build-system)
12808 (propagated-inputs (list python-cffi libgit2))
12809 (native-inputs (list python-pytest python-setuptools python-wheel))
12810 (home-page "https://github.com/libgit2/pygit2")
12811 (synopsis "Python bindings for libgit2")
12812 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
12813 ;; GPL2.0 only, with linking exception.
12814 (license license:gpl2)))
12815
12816(define-public python-patiencediff
12817 (package
12818 (name "python-patiencediff")
12819 (version "0.2.15")
12820 (source
12821 (origin
12822 (method url-fetch)
12823 (uri (pypi-uri "patiencediff" version))
12824 (sha256
12825 (base32
12826 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
12827 (build-system pyproject-build-system)
12828 (arguments
12829 (list
12830 #:phases #~(modify-phases %standard-phases
12831 ;; Fails because bin/patiencediff expects two files to diff
12832 (delete 'sanity-check))))
12833 (native-inputs (list python-pytest python-setuptools python-wheel))
12834 (home-page "https://www.breezy-vcs.org/")
12835 (synopsis "Python implementation of the patiencediff algorithm")
12836 (description
12837 "This package contains a Python implementation of the @code{patiencediff}
12838algorithm. Patiencediff provides a good balance of performance, nice output for
12839humans, and implementation simplicity.")
12840 (license license:gpl2+)))
12841
12842(define-public python-merge3
12843 (package
12844 (name "python-merge3")
12845 (version "0.0.16")
12846 (source
12847 (origin
12848 (method git-fetch)
12849 (uri (git-reference
12850 (url "https://github.com/breezy-team/merge3")
12851 (commit (string-append "v" version))))
12852 (file-name (git-file-name name version))
12853 (sha256
12854 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
12855 (build-system pyproject-build-system)
12856 (arguments (list #:test-backend #~'unittest))
12857 (native-inputs (list python-setuptools))
12858 (home-page "https://github.com/breezy-team/merge3")
12859 (synopsis "Python implementation of 3-way merge")
12860 (description "This Python library implements 3-way merge for text.")
12861 (license license:gpl2+)))
12862
12863(define-public python-fancycompleter
12864 (package
12865 (name "python-fancycompleter")
12866 (version "0.9.1")
12867 (source
12868 (origin
12869 (method git-fetch)
12870 (uri (git-reference
12871 (url "https://github.com/pdbpp/fancycompleter")
12872 (commit version)))
12873 (file-name (git-file-name name version))
12874 (sha256
12875 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
12876 (build-system pyproject-build-system)
12877 (arguments
12878 (list
12879 #:phases
12880 #~(modify-phases %standard-phases
12881 (add-after 'unpack 'fix-setup.py
12882 (lambda _
12883 (substitute* "setup.py"
12884 ((".*setupmeta.*")
12885 "")
12886 (("versioning=.*")
12887 (string-append "version='" #$version "',"))
12888 ((".*pyrepl.*") ; broken on Python 3
12889 "")))))))
12890 (native-inputs (list python-pytest python-setuptools))
12891 (home-page "https://github.com/pdbpp/fancycompleter")
12892 (synopsis "TAB completion library for Python")
12893 (description
12894 "@code{fancycompleter} is a module that adds TAB completion to the
12895interactive prompt. It is an extension of the @code{rlcompleter} module from
12896the standard Python library.")
12897 (license license:bsd-3)))
12898
12899(define-public python-ipdb
12900 (package
12901 (name "python-ipdb")
12902 (version "0.13.13")
12903 (source
12904 (origin
12905 (method git-fetch)
12906 (uri (git-reference
12907 (url "https://github.com/gotcha/ipdb")
12908 (commit version)))
12909 (file-name (git-file-name name version))
12910 (sha256
12911 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
12912 (build-system pyproject-build-system)
12913 (arguments (list #:test-backend #~'unittest))
12914 (native-inputs (list python-setuptools))
12915 (propagated-inputs (list python-ipython python-toml python-decorator))
12916 (home-page "https://github.com/gotcha/ipdb")
12917 (synopsis "IPython-enhanced Python debugger (pdb)")
12918 (description
12919 "@code{ipdb} exports functions to access the IPython debugger, which
12920features tab completion, syntax highlighting, better tracebacks and better
12921introspection than Python's standard @command{pdb} debugger, with which it
12922shares the same interface.")
12923 (license license:bsd-3)))
12924
12925(define-public python-ipfsspec
12926 (package
12927 (name "python-ipfsspec")
12928 (version "0.4.0")
12929 (source
12930 (origin
12931 (method url-fetch)
12932 (uri (pypi-uri "ipfsspec" version))
12933 (sha256
12934 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
12935 (build-system pyproject-build-system)
12936 (arguments
12937 (list
12938 #:test-flags
12939 '(list "-m not local_gw"
12940 ;; Require local gateway
12941 "--ignore=test/test_gateway.py"
12942 ;; Require internet
12943 "--ignore=test/test_async.py"
12944 "--ignore=test/test_ipfs.py")))
12945 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
12946 (native-inputs
12947 (list python-pytest
12948 python-pytest-asyncio
12949 python-setuptools
12950 python-wheel))
12951 (home-page "https://github.com/fsspec/ipfsspec")
12952 (synopsis "Read-only implementation of fsspec for IPFS")
12953 (description "This package provides a read-only implementation of
12954@code{fsspec} for IPFS.")
12955 (license license:expat)))
12956
12957(define-public python-pdftotext
12958 (package
12959 (name "python-pdftotext")
12960 (version "3.0.0")
12961 (source
12962 (origin
12963 (method url-fetch)
12964 (uri (pypi-uri "pdftotext" version))
12965 (sha256
12966 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
12967 (build-system pyproject-build-system)
12968 (native-inputs (list python-pytest python-setuptools python-wheel))
12969 (inputs (list poppler))
12970 (home-page "https://github.com/jalan/pdftotext")
12971 (synopsis "Simple PDF text extraction")
12972 (description "Pdftotext is a Python library of PDF text extraction.")
12973 (license license:expat)))
12974
12975(define-public python-pluginbase
12976 (package
12977 (name "python-pluginbase")
12978 (version "1.0.1")
12979 (source
12980 (origin
12981 (method git-fetch)
12982 (uri (git-reference
12983 (url "https://github.com/mitsuhiko/pluginbase")
12984 (commit (string-append "v" version))))
12985 (file-name (git-file-name name version))
12986 (sha256
12987 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
12988 (build-system pyproject-build-system)
12989 (arguments
12990 (list
12991 #:phases
12992 #~(modify-phases %standard-phases
12993 (replace 'check
12994 (lambda* (#:key tests? #:allow-other-keys)
12995 (when tests?
12996 (invoke "make" "test")))))))
12997 (native-inputs (list python-pytest python-setuptools))
12998 (home-page "https://github.com/mitsuhiko/pluginbase")
12999 (synopsis "Simple but flexible plugin system for Python")
13000 (description
13001 "PluginBase is a library useful in the development of flexible plugin
13002systems in Python.")
13003 (license license:bsd-3)))
13004
13005(define-public python-node-semver
13006 (package
13007 (name "python-node-semver")
13008 (version "0.8.1")
13009 (source
13010 (origin
13011 (method git-fetch)
13012 (uri (git-reference
13013 (url "https://github.com/podhmo/python-node-semver")
13014 (commit version)))
13015 (file-name (git-file-name name version))
13016 (sha256
13017 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
13018 (build-system pyproject-build-system)
13019 (native-inputs (list python-pytest python-setuptools))
13020 (home-page "https://github.com/podhmo/python-node-semver")
13021 (synopsis "Python port of node-semver")
13022 (description
13023 "This module provides a Python version of node-semver, a semantic version
13024parser for Node.js.")
13025 (license license:expat)))
13026
13027(define-public python-norns
13028 (package
13029 (name "python-norns")
13030 (version "0.1.6")
13031 (source
13032 (origin
13033 (method git-fetch)
13034 (uri (git-reference
13035 (url "https://github.com/simonvh/norns")
13036 (commit version)))
13037 (file-name (git-file-name name version))
13038 (sha256
13039 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
13040 (patches
13041 (search-patches "python-norns-nose.patch"))))
13042 (build-system pyproject-build-system)
13043 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
13044 (native-inputs (list python-setuptools))
13045 (home-page "https://github.com/simonvh/norns")
13046 (synopsis "Simple YAML-based config module")
13047 (description "This package provides a simple YAML-based config module.")
13048 (license license:expat)))
13049
13050(define-public python-patch-ng
13051 (package
13052 (name "python-patch-ng")
13053 (version "1.18.1")
13054 (source
13055 (origin
13056 (method git-fetch)
13057 (uri (git-reference
13058 (url "https://github.com/conan-io/python-patch-ng")
13059 (commit version)))
13060 (file-name (git-file-name name version))
13061 (sha256
13062 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
13063 (build-system pyproject-build-system)
13064 (arguments
13065 (list
13066 #:test-backend #~'custom
13067 #:test-flags #~(list "tests/run_tests.py" "-v")))
13068 (native-inputs (list python-pytest python-setuptools))
13069 (home-page "https://github.com/conan-io/python-patch-ng")
13070 (synopsis "Python library to parse and apply unified diffs")
13071 (description
13072 "Patch NG (New Generation) is a command and Python library to parse and
13073apply unified diffs. It has features such as:
13074@itemize
13075@item automatic correction of common patch formatting corruption
13076@item patch format detection (SVN, Hg, Git)
13077@item nice diffstat histogram.
13078@end itemize")
13079 (license license:expat)))
13080
13081(define-public python-numpydoc
13082 (package
13083 (name "python-numpydoc")
13084 (version "1.10.0")
13085 (source
13086 (origin
13087 (method url-fetch)
13088 (uri (pypi-uri "numpydoc" version))
13089 (sha256
13090 (base32
13091 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
13092 (build-system pyproject-build-system)
13093 (arguments
13094 (list
13095 #:test-flags
13096 '(list "numpydoc/tests"
13097 "-k" (string-append
13098 ;; TODO: unclear why these fail.
13099 "not test_MyClass and not test_my_function "
13100 ;; This test compares installed vs source absolute file
13101 ;; names.
13102 "and not test_source_file_name_with_properties"))))
13103 (propagated-inputs (list python-sphinx python-tomli))
13104 (native-inputs
13105 (list python-matplotlib python-pytest python-setuptools))
13106 (home-page "https://pypi.org/project/numpydoc/")
13107 (synopsis "Numpy's Sphinx extensions")
13108 (description "Sphinx extension to support docstrings in Numpy format.")
13109 (license license:bsd-2)))
13110
13111(define-public python-numexpr
13112 (package
13113 (name "python-numexpr")
13114 (version "2.14.1")
13115 (source
13116 (origin
13117 (method url-fetch)
13118 (uri (pypi-uri "numexpr" version))
13119 (sha256
13120 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
13121 (build-system pyproject-build-system)
13122 (arguments
13123 (list
13124 ;; tests: 6039 passed, 8 warnings
13125 #:phases
13126 #~(modify-phases %standard-phases
13127 (replace 'check
13128 (lambda* (#:key tests? test-flags #:allow-other-keys)
13129 (when tests?
13130 (with-directory-excursion #$output
13131 (apply invoke "pytest" "-vv" test-flags))))))))
13132 (native-inputs
13133 (list python-pytest
13134 python-setuptools))
13135 (propagated-inputs
13136 (list python-numpy))
13137 (home-page "https://github.com/pydata/numexpr")
13138 (synopsis "Fast numerical expression evaluator for NumPy")
13139 (description
13140 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
13141expressions that operate on arrays are accelerated and use less memory than
13142doing the same calculation in Python. In addition, its multi-threaded
13143capabilities can make use of all your cores, which may accelerate
13144computations, most specially if they are not memory-bounded (e.g. those using
13145transcendental functions).")
13146 (license license:expat)))
13147
13148(define-public python-cycler
13149 (package
13150 (name "python-cycler")
13151 (version "0.12.1")
13152 (source
13153 (origin
13154 (method git-fetch) ;no tests in PyPI archive
13155 (uri (git-reference
13156 (url "https://github.com/matplotlib/cycler")
13157 (commit (string-append "v" version))))
13158 (file-name (git-file-name name version))
13159 (sha256
13160 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
13161 (build-system pyproject-build-system)
13162 (native-inputs
13163 (list python-pytest
13164 python-setuptools))
13165 (home-page "https://matplotlib.org/cycler/")
13166 (synopsis "Composable keyword argument iterator")
13167 (description
13168 "When using @code{matplotlib} and plotting more than one line, it is
13169common to want to be able to want to be able to cycle over one or more artist
13170styles; but the plotting logic can quickly become involved.
13171To address this and enable easy cycling over arbitrary @code{kwargs}, the
13172@code{Cycler} class was developed.")
13173 (license license:bsd-3)))
13174
13175(define-public python-colorspacious
13176 (package
13177 (name "python-colorspacious")
13178 (version "1.1.2")
13179 (source
13180 (origin
13181 (method git-fetch)
13182 (uri (git-reference
13183 (url "https://github.com/njsmith/colorspacious")
13184 (commit (string-append "v" version))))
13185 (file-name (git-file-name name version))
13186 (sha256
13187 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
13188 (build-system pyproject-build-system)
13189 (arguments (list #:tests? #f)) ; No tests.
13190 (propagated-inputs (list python-numpy))
13191 (native-inputs (list python-pytest python-setuptools))
13192 (home-page "https://github.com/njsmith/colorspacious")
13193 (synopsis "Python library for colorspace conversions")
13194 (description
13195 "@code{colorspacious} is a Python library that lets you convert between
13196colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
13197 (license license:expat)))
13198
13199(define-public python-propcache
13200 (package
13201 (name "python-propcache")
13202 (version "0.2.1")
13203 (source
13204 (origin
13205 (method url-fetch)
13206 (uri (pypi-uri "propcache" version))
13207 (sha256
13208 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
13209 (build-system pyproject-build-system)
13210 (arguments
13211 (list
13212 #:test-flags
13213 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13214 "--ignore=tests/test_benchmarks.py")
13215 #:phases
13216 '(modify-phases %standard-phases
13217 (add-after 'unpack 'patch-build-system
13218 (lambda _
13219 ;; XXX: I don't know how to tell it to build the extensions in
13220 ;; place.
13221 (substitute* "packaging/pep517_backend/_backend.py"
13222 (("build_inplace=False") "build_inplace=True")))))))
13223 (native-inputs
13224 (list python-cython
13225 python-expandvars
13226 python-pytest
13227 python-pytest-xdist
13228 python-setuptools
13229 python-tomli))
13230 (home-page "https://github.com/aio-libs/propcache")
13231 (synopsis "Accelerated property cache")
13232 (description "The module provides a fast implementation of cached
13233properties for Python 3.9+.")
13234 (license license:asl2.0)))
13235
13236(define-public python-proto-matcher
13237 (package
13238 (name "python-proto-matcher")
13239 (version "0.0.3")
13240 (source
13241 (origin
13242 (method git-fetch)
13243 (uri (git-reference
13244 (url "https://github.com/dayfine/proto-matcher")
13245 (commit version)))
13246 (file-name (git-file-name name version))
13247 (sha256
13248 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
13249 (build-system pyproject-build-system)
13250 (native-inputs (list python-pytest python-setuptools))
13251 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
13252 (propagated-inputs (list python-protobuf python-pyhamcrest))
13253 (home-page "https://github.com/dayfine/proto-matcher")
13254 (synopsis "PyHamcrest test matchers for protocol buffers")
13255 (description
13256 "This package provides the following PyHamcrest test matchers, that
13257enable matching a protocol buffer message:
13258@table @code
13259@item equals_proto
13260Test the argument equals the given protobuf message.
13261@item approximately
13262Test the argument equals the given protobuf message, while comparing any float
13263field using approximation.
13264@item ignoring_field_paths
13265Test the argument equals the given protobuf message, while ignoring those
13266fields specified in the field paths.
13267@item ignoring_repeated_field_ordering
13268Test the argument equals the given protobuf message, ignoring the ordering of
13269any repeated field.
13270@item partially
13271Test the argument partially equals the given protobuf message, i.e. if a field
13272is in the argument but not in the expected message, it's ignored in the
13273comparison.
13274@end table")
13275 (license license:asl2.0)))
13276
13277(define-public python-matplotlib
13278 (package
13279 (name "python-matplotlib")
13280 (version "3.10.8")
13281 (source
13282 (origin
13283 (method git-fetch)
13284 (uri (git-reference
13285 (url "https://github.com/matplotlib/matplotlib")
13286 (commit (string-append "v" version))))
13287 (file-name (git-file-name name version))
13288 (sha256
13289 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
13290 (build-system pyproject-build-system)
13291 (arguments
13292 (list
13293 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
13294 #:configure-flags
13295 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
13296 "-Dsystem-freetype=true"
13297 "-Dsystem-qhull=true"))
13298 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
13299 #:test-flags
13300 #~(list "-m" "not network"
13301 "-n" (number->string (parallel-job-count))
13302 ;; Run the installed tests, which is what we want since not
13303 ;; everything gets built in the source directory.
13304 "--pyargs" "matplotlib"
13305 "-k"
13306 (string-join
13307 (list
13308 ;; XXX: Disable all image comparison tests because we're using
13309 ;; a newer version of FreeType than matplotlib expects. This
13310 ;; leads to minor differences throughout the tests.
13311 "not image_comparison"
13312 "check_figures_equal"
13313 "png" ;disables many problematic image tests
13314 "test_figure_legend_outside"
13315 "test_ft2font_get_kerning"
13316 "test_normal_axes"
13317 "test_get_tightbbox_polar"
13318 ;; The invisible line ordering test fails due to a too short
13319 ;; timeout (see:
13320 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
13321 "test_invisible_Line_rendering"
13322 ;; The determinism check test is not deterministic (see:
13323 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
13324 "test_determinism_check")
13325 " and not "))
13326 #:phases
13327 #~(modify-phases %standard-phases
13328 (add-after 'unpack 'patch-commands
13329 (lambda _
13330 (substitute* "lib/matplotlib/tests/test_animation.py"
13331 (("/bin/sh") (which "sh")))))
13332 (add-after 'unpack 'patch-dlopen
13333 (lambda* (#:key inputs #:allow-other-keys)
13334 (substitute* "src/_c_internal_utils.cpp"
13335 (("libX11.so.6")
13336 (search-input-file inputs "lib/libX11.so.6")))))
13337 (add-before 'build 'configure-environment
13338 (lambda* (#:key inputs #:allow-other-keys)
13339 ;; Fix rounding errors when using the x87 FPU.
13340 (when (string-prefix? "i686" #$(%current-system))
13341 (setenv "CFLAGS" "-ffloat-store"))))
13342 (add-before 'check 'chdir
13343 (lambda _
13344 ;; Step out of the source directory to avoid interference.
13345 (chdir "/tmp"))))))
13346 (propagated-inputs
13347 (list python-contourpy
13348 python-cycler
13349 python-dateutil
13350 python-fonttools-minimal
13351 python-importlib-resources
13352 python-kiwisolver
13353 python-numpy
13354 python-packaging
13355 python-pillow
13356 python-pyparsing
13357 `(,python "tk")))
13358 (inputs
13359 (list cairo
13360 freetype
13361 glib
13362 libpng
13363 qhull
13364 tcl
13365 tk))
13366 (native-inputs
13367 (list pkg-config
13368 python-meson
13369 pybind11-2
13370 python-pytest
13371 python-pytest-timeout
13372 python-pytest-xdist
13373 python-setuptools
13374 python-setuptools-scm))
13375 (home-page "https://matplotlib.org/")
13376 (synopsis "2D plotting library for Python")
13377 (description
13378 "Matplotlib is a Python 2D plotting library which produces publication
13379quality figures in a variety of hardcopy formats and interactive environments
13380across platforms. Matplotlib can be used in Python scripts, the python and
13381ipython shell, web application servers, and six graphical user interface
13382toolkits.")
13383 (license license:psfl)))
13384
13385(define-public python-matplotlib-documentation
13386 (package
13387 (inherit python-matplotlib)
13388 (name "python-matplotlib-documentation")
13389 (arguments
13390 (list
13391 #:tests? #f ;we're only generating documentation
13392 #:phases
13393 #~(modify-phases %standard-phases
13394 (add-after 'unpack 'avoid-external-deps
13395 (lambda _
13396 ;; XXX: Avoid theme-switcher to avoid sphinx error
13397 ;; TemplateNotFound('theme-switcher.html')
13398 ;; XXX: Avoid version-switcher because it depends on an
13399 ;; external file, and we pack only one version anyway.
13400 (substitute* "doc/conf.py"
13401 (("\
13402\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
13403 "\"navbar_end\": ["))))
13404 (replace 'build
13405 (lambda _
13406 (setenv "HOME" "/tmp")
13407 (chdir "doc")
13408 (invoke "make" "html" "info"
13409 ;; Don't abort on warnings; build in parallel.
13410 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
13411 (replace 'install
13412 (lambda _
13413 (let* ((data (string-append #$output "/share"))
13414 (doc (string-append data "/doc/matplotlib"))
13415 (info (string-append data "/info"))
13416 (html (string-append doc "/html")))
13417 (mkdir-p html)
13418 (copy-recursively "build/html" html)
13419 (install-file "build/texinfo/matplotlib.info" info)
13420 ;; The "matplotlib-figures" directory contains are a subset of
13421 ;; the images produced for the html target; simply create a
13422 ;; symlink to it, saving about 11 MiB.
13423 (symlink (string-append html "/_images")
13424 (string-append info "/matplotlib-figures"))))))))
13425 ;; Move all propagated inputs to inputs. *-documentation packages are
13426 ;; expected to be installed as standalone leaf packages, and not as
13427 ;; libraries with propagated inputs.
13428 (propagated-inputs '())
13429 (inputs (append
13430 (package-inputs python-matplotlib)
13431 (package-propagated-inputs python-matplotlib)))
13432 (native-inputs
13433 (list ffmpeg ;for matplotlib animation support
13434 graphviz
13435 inkscape/pinned
13436 python-colorspacious
13437 python-ipython
13438 python-ipykernel
13439 python-ipywidgets
13440 python-matplotlib
13441 python-mpl-sphinx-theme
13442 python-numpydoc
13443 python-pyyaml
13444 python-scipy
13445 python-setuptools
13446 ;; XXX: investigate how to build using a newer version of sphinx.
13447 python-sphinx-6
13448 python-sphinx-copybutton
13449 python-sphinx-design
13450 python-sphinx-gallery
13451 python-sphinx-tags
13452 python-sphinxcontrib-svg2pdfconverter
13453 python-sphinxcontrib-video
13454 texinfo
13455 texlive-dvipng-bin
13456 (texlive-local-tree
13457 (list texlive-amsfonts
13458 texlive-amsmath
13459 texlive-babel
13460 texlive-cm-super
13461 texlive-etoolbox
13462 texlive-expdlist
13463 texlive-fontspec
13464 texlive-times
13465 texlive-type1cm
13466 texlive-underscore
13467 texlive-unicode-math))))
13468 (synopsis "Documentation for the @code{python-matplotlib} package")))
13469
13470(define-public python-matplotlib-inline
13471 (package
13472 (name "python-matplotlib-inline")
13473 (version "0.1.7")
13474 (source
13475 (origin
13476 (method url-fetch)
13477 (uri (pypi-uri "matplotlib_inline" version))
13478 (sha256
13479 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13480 (build-system pyproject-build-system)
13481 (arguments
13482 (list
13483 ;; Tests disabled because of a circular dependency with IPython.
13484 #:tests? #f
13485 #:phases
13486 #~(modify-phases %standard-phases
13487 ;; Disabled because of a circular dependency with IPython.
13488 (delete 'sanity-check))))
13489 (native-inputs
13490 (list python-setuptools))
13491 (propagated-inputs
13492 (list python-matplotlib
13493 python-traitlets))
13494 (home-page "https://github.com/ipython/matplotlib-inline")
13495 (synopsis "Inline Matplotlib backend for Jupyter")
13496 (description
13497 "This package provides a Matplotlib inline back-end for IPython and
13498Jupyter.")
13499 (license license:bsd-3)))
13500
13501(define-public python-matplotlib-venn
13502 (package
13503 (name "python-matplotlib-venn")
13504 (version "1.1.2")
13505 (source
13506 (origin
13507 (method url-fetch)
13508 (uri (pypi-uri "matplotlib-venn" version))
13509 (sha256
13510 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13511 (build-system pyproject-build-system)
13512 (native-inputs (list python-pytest
13513 python-setuptools
13514 python-shapely
13515 python-wheel))
13516 (propagated-inputs
13517 (list python-matplotlib python-numpy python-scipy))
13518 (home-page "https://github.com/konstantint/matplotlib-venn")
13519 (synopsis "Plot area-proportional Venn diagrams")
13520 (description
13521 "This package provides tools for plotting area-proportional two- and
13522three-way Venn diagrams in @code{matplotlib}.")
13523 (license license:expat)))
13524
13525(define-public python-matplotx
13526 (package
13527 (name "python-matplotx")
13528 (version "0.3.10")
13529 (source
13530 (origin
13531 (method git-fetch)
13532 (uri (git-reference
13533 (url "https://github.com/nschloe/matplotx")
13534 (commit (string-append "v" version))))
13535 (file-name (git-file-name name version))
13536 (sha256
13537 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13538 (build-system pyproject-build-system)
13539 (arguments
13540 (list
13541 #:test-flags
13542 ;; This test fails with ValueError: not enough values to unpack.
13543 #~(list "--deselect" "tests/test_spy.py::test_cli"
13544 ;; XXX: unknown failure
13545 "--deselect" "tests/test_spy.py::test_png")))
13546 (propagated-inputs
13547 (list python-matplotlib
13548 python-numpy
13549 ;; optional dependencies
13550 python-networkx
13551 python-pypng
13552 python-scipy))
13553 (native-inputs (list python-imageio
13554 python-meshzoo
13555 python-pytest
13556 python-scikit-fem
13557 python-setuptools
13558 python-wheel))
13559 (home-page "https://github.com/nschloe/matplotx")
13560 (synopsis "Minimal matplotlib styles")
13561 (description
13562 "This package includes some extensions for Matplotlib to create
13563clean plots with a minimalistic style.")
13564 (license license:expat)))
13565
13566(define-public python-cplot
13567 (package
13568 (name "python-cplot")
13569 (version "0.9.3")
13570 (source
13571 (origin
13572 (method git-fetch) ;for tests
13573 (uri (git-reference
13574 (url "https://github.com/nschloe/cplot")
13575 (commit (string-append "v" version))))
13576 (file-name (git-file-name name version))
13577 (sha256
13578 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13579 (build-system pyproject-build-system)
13580 (native-inputs
13581 (list python-pytest
13582 python-setuptools
13583 python-wheel))
13584 (propagated-inputs
13585 (list python-matplotlib
13586 python-matplotx
13587 python-npx
13588 python-numpy))
13589 (home-page "https://github.com/nschloe/cplot")
13590 (synopsis "Plot complex-valued functions")
13591 (description "@code{cplot} is a Python library for plotting
13592complex-valued functions.")
13593 (license license:gpl3+)))
13594
13595(define-public python-cppheaderparser
13596 (package
13597 (name "python-cppheaderparser")
13598 (version "2.7.4")
13599 (source
13600 (origin
13601 (method url-fetch)
13602 (uri (pypi-uri "CppHeaderParser" version))
13603 (sha256
13604 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13605 (build-system pyproject-build-system)
13606 (arguments
13607 (list
13608 #:tests? #f)) ; no tests
13609 (propagated-inputs (list python-ply))
13610 (native-inputs (list python-setuptools python-wheel))
13611 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13612 (synopsis
13613 "Parse C++ header files and generate a data structure representing the class")
13614 (description
13615 "CppHeaderParser is a pure python module that will parse C++ header files
13616and generate a data structure representing the class.")
13617 (license license:bsd-3)))
13618
13619(define-public python-cppy
13620 (package
13621 (name "python-cppy")
13622 (version "1.3.1")
13623 (source
13624 (origin
13625 (method url-fetch)
13626 (uri (pypi-uri "cppy" version))
13627 (sha256
13628 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
13629 (build-system pyproject-build-system)
13630 (native-inputs
13631 (list python-pytest
13632 python-setuptools
13633 python-setuptools-scm
13634 python-wheel))
13635 (home-page "https://github.com/nucleic/cppy")
13636 (synopsis "C++ header library for Python extension modules")
13637 (description "This package is a small C++ header library which makes it
13638easier to write Python extension modules. The primary feature is a
13639@code{PyObject} smart pointer which automatically handles reference counting
13640and provides convenience methods for performing common object operations.")
13641 (license license:bsd-3)))
13642
13643(define-public python-perfplot
13644 (package
13645 (name "python-perfplot")
13646 (version "0.10.2")
13647 (source (origin
13648 (method url-fetch)
13649 (uri (pypi-uri "perfplot" version))
13650 (sha256
13651 (base32
13652 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
13653 (build-system pyproject-build-system)
13654 (propagated-inputs (list python-matplotlib
13655 python-matplotx
13656 python-numpy-1
13657 python-rich))
13658 (native-inputs (list python-flit-core
13659 python-pytest))
13660 (home-page "https://github.com/nschloe/perfplot")
13661 (synopsis "Performance plots for Python code snippets")
13662 (description "@code{perfplot} extends Python's timeit by testing
13663snippets with input parameters (e.g., the size of an array) and plotting
13664the results.")
13665 (license license:gpl3+)))
13666
13667(define-public python-persist-queue
13668 (package
13669 (name "python-persist-queue")
13670 (version "1.1.0")
13671 (source
13672 (origin
13673 (method git-fetch)
13674 (uri (git-reference
13675 (url "https://github.com/peter-wangxu/persist-queue")
13676 (commit (string-append "v" version))))
13677 (file-name (git-file-name name version))
13678 (sha256
13679 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13680 (build-system pyproject-build-system)
13681 (native-inputs
13682 (list python-pytest
13683 python-pytest-asyncio
13684 python-setuptools))
13685 (propagated-inputs
13686 (list python-aiofiles
13687 python-aiosqlite
13688 python-cbor2
13689 python-dbutils
13690 python-msgpack))
13691 (home-page "https://github.com/peter-wangxu/persist-queue")
13692 (synopsis "Thread-safe disk based persistent queue in Python")
13693 (description
13694 "This package provides a thread-safe disk (file and sqlite) based
13695persistent queue in Python.")
13696 (license license:bsd-3)))
13697
13698(define-public python-pycodestyle
13699 (package
13700 (name "python-pycodestyle")
13701 (version "2.12.1")
13702 (source
13703 (origin
13704 (method url-fetch)
13705 (uri (pypi-uri "pycodestyle" version))
13706 (sha256
13707 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
13708 (build-system pyproject-build-system)
13709 (arguments
13710 (list
13711 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
13712 #:phases
13713 #~(modify-phases %standard-phases
13714 ;; Taken from Tox config
13715 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13716 (replace 'check
13717 (lambda* (#:key tests? test-flags #:allow-other-keys)
13718 (when tests?
13719 (apply invoke "python" "-v" test-flags)))))))
13720 (native-inputs
13721 (list python-setuptools
13722 python-wheel))
13723 (home-page "https://pycodestyle.readthedocs.io/")
13724 (synopsis "Python style guide checker")
13725 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13726Python code against some of the style conventions in
13727@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13728 (license license:expat)))
13729
13730(define-public python-pycollada
13731 (package
13732 (name "python-pycollada")
13733 (version "0.9.2")
13734 (source
13735 (origin
13736 (method git-fetch)
13737 (uri (git-reference
13738 (url "https://github.com/pycollada/pycollada")
13739 (commit (string-append "v" version))))
13740 (file-name (git-file-name name version))
13741 (sha256
13742 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13743 (build-system pyproject-build-system)
13744 (native-inputs
13745 (list python-pytest
13746 python-setuptools))
13747 (propagated-inputs
13748 (list python-numpy
13749 python-dateutil))
13750 (home-page "https://pycollada.readthedocs.io")
13751 (synopsis "Reading and writing collada documents library")
13752 (description
13753 "This package implements a functionality for creating, editing and
13754loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13755COLLAborative Design Activity for establishing an interchange file format for
13756interactive 3D applications.
13757
13758The library allows you to load a COLLADA file and interact with it as a python
13759object. In addition, it supports creating a collada python object from
13760scratch, as well as in-place editing.")
13761 (license license:bsd-3)))
13762
13763(define-public python-pyct
13764 (package
13765 (name "python-pyct")
13766 (version "0.5.0")
13767 (source
13768 (origin
13769 (method url-fetch)
13770 (uri (pypi-uri "pyct" version))
13771 (sha256
13772 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
13773 (build-system pyproject-build-system)
13774 (arguments
13775 (list
13776 #:test-flags
13777 ;; These tests want to download example data from the internet.
13778 '(list "-k" (string-append
13779 "not test_examples_with_use_test_data"
13780 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
13781 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
13782 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
13783 (propagated-inputs (list python-param python-pyyaml))
13784 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
13785 (home-page "https://github.com/holoviz-dev/pyct")
13786 (synopsis "Common packaging tasks")
13787 (description
13788 "This Python package provides utilities to run common packaging tasks,
13789e.g. copy examples, fetch data, etc.")
13790 (license license:bsd-3)))
13791
13792(define-public python-multidict
13793 (package
13794 (name "python-multidict")
13795 (version "6.7.0")
13796 (source
13797 (origin
13798 (method git-fetch)
13799 (uri (git-reference
13800 (url "https://github.com/aio-libs/multidict/")
13801 (commit (string-append "v" version))))
13802 (file-name (git-file-name name version))
13803 (sha256
13804 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
13805 (build-system pyproject-build-system)
13806 (arguments
13807 (list
13808 ;; tests: 1395 passed
13809 #:test-flags
13810 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13811 "--ignore-glob=tests/test_*_benchmarks.py")))
13812 (native-inputs
13813 (list python-objgraph
13814 python-psutil
13815 python-pytest
13816 python-setuptools))
13817 (home-page "https://github.com/aio-libs/multidict/")
13818 (synopsis "Multidict implementation")
13819 (description
13820 "Multidict is dict-like collection of key-value pairs where key might be
13821occurred more than once in the container.")
13822 (license license:asl2.0)))
13823
13824(define-public python-orderedmultidict
13825 (package
13826 (name "python-orderedmultidict")
13827 (version "1.0.1")
13828 (source
13829 (origin
13830 (method url-fetch)
13831 (uri (pypi-uri "orderedmultidict" version))
13832 (sha256
13833 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
13834 (build-system pyproject-build-system)
13835 (propagated-inputs
13836 (list python-six))
13837 (native-inputs
13838 (list python-pytest
13839 python-setuptools))
13840 (home-page "https://github.com/gruns/orderedmultidict")
13841 (synopsis "Python Ordered Multivalue Dictionary - omdict")
13842 (description "This package contains a library for ordered multivalue
13843dictionaries. A multivalue dictionary is a dictionary that can store
13844multiple values for the same key. An ordered multivalue dictionary is a
13845multivalue dictionary that retains the order of insertions and deletions.")
13846 (license license:unlicense)))
13847
13848(define-public python-autopage
13849 (package
13850 (name "python-autopage")
13851 (version "0.5.1")
13852 (source (origin
13853 (method url-fetch)
13854 (uri (pypi-uri "autopage" version))
13855 (sha256
13856 (base32
13857 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
13858 (build-system pyproject-build-system)
13859 (arguments
13860 (list
13861 #:phases
13862 #~(modify-phases %standard-phases
13863 (add-before 'check 'disable-e2e-tests
13864 (lambda _
13865 ;; These tests rely on KeyboardInterrupts which do not
13866 ;; work in the build container.
13867 (delete-file "autopage/tests/test_end_to_end.py"))))))
13868 (native-inputs
13869 (list python-pypa-build
13870 python-setuptools
13871 python-wheel
13872 ;; For tests.
13873 python-fixtures
13874 python-pytest
13875 python-testtools))
13876 (home-page "https://github.com/zaneb/autopage")
13877 (synopsis "Automatic paging for console output")
13878 (description
13879 "Autopage is a Python library to automatically display terminal output
13880from a program in a @dfn{pager} such as @command{less}.")
13881 (license license:asl2.0)))
13882
13883(define-public python-dirty-equals
13884 (package
13885 (name "python-dirty-equals")
13886 (version "0.11.0")
13887 (source
13888 (origin
13889 (method git-fetch)
13890 (uri (git-reference
13891 (url "https://github.com/samuelcolvin/dirty-equals")
13892 (commit (string-append "v" version))))
13893 (file-name (git-file-name name version))
13894 (sha256
13895 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
13896 (build-system pyproject-build-system)
13897 ;; tests: 551 passed, 60 skipped
13898 (native-inputs
13899 (list python-hatchling
13900 python-pydantic
13901 python-pytest
13902 python-pytest-examples
13903 tzdata-for-tests))
13904 (home-page "https://dirty-equals.helpmanual.io/")
13905 (synopsis "Do dirty (but useful) things with equals")
13906 (description
13907 "@code{dirty-equals} is a Python library that (mis)uses the
13908@code{__eq__} method to make code (generally unit tests) more declarative
13909and therefore easier to read and write.")
13910 (license license:expat)))
13911
13912(define-public python-dirty-equals-bootstrap
13913 (hidden-package
13914 (package
13915 (inherit python-dirty-equals)
13916 (name "python-dirty-equals-bootstrap")
13917 (arguments
13918 (list #:tests? #f))
13919 (native-inputs
13920 (list python-hatchling)))))
13921
13922(define-public python-distutils-extra
13923 (package
13924 (name "python-distutils-extra")
13925 (version "2.38")
13926 (source
13927 (origin
13928 (method url-fetch)
13929 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
13930 version "/+download/python-distutils-extra-"
13931 version ".tar.gz"))
13932 (sha256
13933 (base32
13934 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
13935 (build-system pyproject-build-system)
13936 (arguments
13937 (list #:tests? #f)) ;tests are outdated and broken
13938 (native-inputs (list python-setuptools python-wheel))
13939 (home-page "https://launchpad.net/python-distutils-extra/")
13940 (synopsis "Enhancements to Python's distutils")
13941 (description
13942 "The python-distutils-extra module enables you to easily integrate
13943gettext support, themed icons, and scrollkeeper-based documentation into
13944Python's distutils.")
13945 (license license:gpl2)))
13946
13947(define-public python-olefile
13948 (package
13949 (name "python-olefile")
13950 (version "0.47")
13951 (source
13952 (origin
13953 (method git-fetch)
13954 (uri (git-reference
13955 (url "https://github.com/decalage2/olefile")
13956 (commit (string-append "v" version))))
13957 (file-name (git-file-name name version))
13958 (sha256
13959 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
13960 (build-system pyproject-build-system)
13961 (native-inputs
13962 (list python-pytest
13963 python-setuptools))
13964 (home-page "https://www.decalage.info/python/olefileio")
13965 (synopsis "Read and write Microsoft OLE2 files")
13966 (description
13967 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
13968Storage or Compound Document, Microsoft Office). It is an improved version of
13969the OleFileIO module from PIL, the Python Image Library.")
13970 (license license:bsd-3)))
13971
13972(define-public python-property-cached
13973 (package
13974 (name "python-property-cached")
13975 (version "1.6.4")
13976 (source
13977 (origin
13978 (method url-fetch)
13979 (uri (pypi-uri "property-cached" version ".zip"))
13980 (sha256
13981 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
13982 (patches
13983 (search-patches "python-property-cached-asyncio-3_11.patch"))))
13984 (build-system pyproject-build-system)
13985 (arguments
13986 (list
13987 ;; AssertionError.
13988 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
13989 (native-inputs (list python-freezegun python-pytest unzip
13990 python-setuptools python-wheel))
13991 (home-page "https://github.com/althonos/property-cached/")
13992 (synopsis "Decorator for caching properties in classes")
13993 (description "This package provides a decorator for caching properties in
13994classes. It is forked from @code{cached-property}.")
13995 (license license:bsd-3)))
13996
13997(define-public python-pdf2image
13998 (package
13999 (name "python-pdf2image")
14000 (version "1.17.0")
14001 (source
14002 (origin
14003 (method git-fetch)
14004 (uri (git-reference
14005 (url "https://github.com/Belval/pdf2image")
14006 (commit (string-append "v" version))))
14007 (file-name (git-file-name name version))
14008 (sha256
14009 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
14010 (build-system pyproject-build-system)
14011 (arguments
14012 (list
14013 ;; The following excluded tests assume hardcoded binary paths to
14014 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
14015 #:test-flags
14016 #~(list "--exclude=^test_use_poppler_path$"
14017 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
14018 (propagated-inputs (list python-pillow))
14019 (inputs (list poppler))
14020 (native-inputs (list python-pynose which python-setuptools))
14021 (home-page "https://github.com/Belval/pdf2image")
14022 (synopsis
14023 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
14024 (description
14025 "This package provides a Python API wrapping the @command{pdftoppm} and
14026@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
14027Python list with elements of type @code{PIL.Image} (from the
14028@code{python-pillow} library).")
14029 (license license:expat)))
14030
14031(define-public python-pikepdf
14032 (package
14033 (name "python-pikepdf")
14034 (version "8.15.1")
14035 (source
14036 (origin
14037 (method git-fetch)
14038 (uri (git-reference
14039 (url "https://github.com/pikepdf/pikepdf")
14040 (commit (string-append "v" version))))
14041 (file-name (git-file-name name version))
14042 (sha256
14043 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
14044 (build-system pyproject-build-system)
14045 (native-inputs
14046 (list pybind11-2
14047 python-attrs
14048 python-hypothesis
14049 python-setuptools-scm
14050 python-psutil
14051 python-pytest
14052 python-pytest-timeout
14053 python-pytest-xdist
14054 python-dateutil
14055 python-xmp-toolkit
14056 python-tomli
14057 python-setuptools))
14058 (inputs
14059 (list qpdf))
14060 (propagated-inputs
14061 (list python-deprecated python-lxml python-packaging python-pillow))
14062 (home-page "https://github.com/pikepdf/pikepdf")
14063 (synopsis "Read and write PDFs with Python")
14064 (description
14065 "pikepdf is a Python library for reading and writing PDF files.")
14066 (license license:mpl2.0)))
14067
14068(define-public python-pillow
14069 (package
14070 (name "python-pillow")
14071 (version "12.1.1")
14072 (source
14073 (origin
14074 (method git-fetch)
14075 (uri (git-reference
14076 (url "https://github.com/python-pillow/Pillow")
14077 (commit version)))
14078 (file-name (git-file-name name version))
14079 (sha256
14080 (base32 "1g374rklljx0941j6d1gib9pgcq3scmqw9psqaj2c7m8pilqsn9n"))))
14081 (build-system pyproject-build-system)
14082 (arguments
14083 (list
14084 #:phases
14085 #~(modify-phases %standard-phases
14086 (add-after 'unpack 'patch-ldconfig
14087 (lambda _
14088 (substitute* "setup.py"
14089 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
14090 (replace 'check
14091 (lambda* (#:key tests? #:allow-other-keys)
14092 (when tests?
14093 (setenv "HOME" (getcwd))
14094 (invoke "python" "selftest.py" "--installed")
14095 (invoke "python" "-m" "pytest" "-vv")))))))
14096 (native-inputs (list pybind11
14097 python-defusedxml
14098 python-markdown2
14099 python-olefile
14100 python-pytest
14101 python-setuptools
14102 python-trove-classifiers))
14103 (inputs (list freetype
14104 lcms
14105 libjpeg-turbo
14106 libtiff
14107 libwebp
14108 openjpeg
14109 zlib))
14110 (home-page "https://python-pillow.github.io/")
14111 (synopsis "Fork of the Python Imaging Library")
14112 (description
14113 "The Python Imaging Library adds image processing capabilities to your
14114Python interpreter. This library provides extensive file format support, an
14115efficient internal representation, and fairly powerful image processing
14116capabilities. The core image library is designed for fast access to data
14117stored in a few basic pixel formats. It should provide a solid foundation for
14118a general image processing tool.")
14119 (properties `((cpe-name . "pillow")))
14120 (license (license:x11-style
14121 "https://github.com/python-pillow/Pillow/blob/12.1.1/LICENSE"
14122 "MIT-CMU License"))))
14123
14124(define-public python-pillow-avif-plugin
14125 (package
14126 (name "python-pillow-avif-plugin")
14127 (version "1.5.5")
14128 (source
14129 (origin
14130 (method git-fetch)
14131 (uri (git-reference
14132 (url "https://github.com/fdintino/pillow-avif-plugin/")
14133 (commit (string-append "v" version))))
14134 (file-name (git-file-name name version))
14135 (sha256
14136 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
14137 (build-system pyproject-build-system)
14138 (propagated-inputs (list python-requests))
14139 (native-inputs (list python-packaging
14140 python-pillow
14141 python-pytest
14142 python-setuptools))
14143 (inputs (list libavif))
14144 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
14145 (synopsis "Pillow plugin that adds avif support via libavif")
14146 (description
14147 "This package provides a pillow plugin that adds avif support via
14148libavif.")
14149 (license license:expat)))
14150
14151(define-public python-pillow-heif
14152 (package
14153 (name "python-pillow-heif")
14154 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
14155 ;; commit is taken from the master branch.
14156 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
14157 (revision . "0")))
14158 (version (git-version "1.3.0"
14159 (assoc-ref properties 'revision)
14160 (assoc-ref properties 'commit)))
14161 (source
14162 (origin
14163 (method git-fetch)
14164 (uri (git-reference
14165 (url "https://github.com/bigcat88/pillow_heif")
14166 (commit (assoc-ref properties 'commit))))
14167 (file-name (git-file-name name version))
14168 (sha256
14169 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
14170 (build-system pyproject-build-system)
14171 (inputs (list libheif))
14172 (propagated-inputs (list python-pillow))
14173 (native-inputs (list opencv ; for opencv-python
14174 python-defusedxml
14175 python-numpy
14176 python-packaging
14177 python-pympler
14178 python-pytest
14179 python-setuptools))
14180 (home-page "https://github.com/bigcat88/pillow_heif")
14181 (synopsis "Python interface for libheif library")
14182 (description "This package provides Python bindings for the libheif library
14183and a plugin for Pillow.")
14184 (license license:bsd-3)))
14185
14186(define-public python-pillow-jxl-plugin
14187 (package
14188 (name "python-pillow-jxl-plugin")
14189 (version "1.3.7")
14190 (source
14191 (origin
14192 (method git-fetch)
14193 (uri (git-reference
14194 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14195 (commit (string-append "v" version))))
14196 (file-name (git-file-name name version))
14197 (sha256
14198 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
14199 (build-system pyproject-build-system)
14200 (arguments
14201 (list
14202 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
14203 ;; in Guix.
14204 #:tests? #f
14205 #:imported-modules `(,@%cargo-build-system-modules
14206 ,@%pyproject-build-system-modules)
14207 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
14208 (guix build pyproject-build-system)
14209 (guix build utils))
14210 #:phases
14211 #~(modify-phases %standard-phases
14212 (add-after 'unpack 'prepare-cargo-build-system
14213 (lambda args
14214 (for-each (lambda (phase)
14215 (format #t "Running cargo phase: ~a~%" phase)
14216 (apply (assoc-ref cargo:%standard-phases phase)
14217 #:cargo-target #$(cargo-triplet)
14218 args))
14219 '(unpack-rust-crates
14220 configure
14221 check-for-pregenerated-files
14222 patch-cargo-checksums))))
14223 (add-after 'unpack 'patch-pyproject
14224 (lambda _
14225 ;; maturin failed to parse pyproject.toml.
14226 (substitute* "pyproject.toml"
14227 (("^license-files = .*") "")))))))
14228 (propagated-inputs (list python-brotli
14229 python-packaging
14230 python-pillow))
14231 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
14232 (native-inputs (list maturin
14233 python-numpy
14234 python-pytest
14235 rust
14236 `(,rust "cargo")))
14237 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
14238 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
14239 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
14240 (description "This package provides pillow plugin for JPEG-XL, using Rust
14241for bindings.")
14242 (license license:gpl3+)))
14243
14244(define-public python-jxlpy
14245 (package
14246 (name "python-jxlpy")
14247 (version "0.9.5")
14248 (source
14249 (origin
14250 (method git-fetch)
14251 (uri (git-reference
14252 (url "https://github.com/olokelo/jxlpy")
14253 (commit version)))
14254 (file-name (git-file-name name version))
14255 (sha256
14256 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
14257 (build-system pyproject-build-system)
14258 (arguments (list #:tests? #f)) ; no tests, just examples
14259 (inputs (list libjxl))
14260 (propagated-inputs (list python-cython))
14261 (native-inputs (list python-cython python-setuptools))
14262 (home-page "https://github.com/olokelo/jxlpy")
14263 (synopsis "JPEG XL integration in Python")
14264 (description "This package provides Cython-based Python bindings for
14265libjxl, as well as a pillow plugin.")
14266 (license license:expat)))
14267
14268(define-public python-pixelmatch
14269 (package
14270 (name "python-pixelmatch")
14271 (version "0.3.0")
14272 (source
14273 (origin
14274 (method git-fetch)
14275 (uri (git-reference
14276 (url "https://github.com/whtsky/pixelmatch-py")
14277 (commit (string-append "v" version))))
14278 (file-name (git-file-name name version))
14279 (sha256
14280 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
14281 (build-system pyproject-build-system)
14282 (arguments
14283 ;; XXX: PIL.UnidentifiedImageError despite images being present.
14284 (list #:tests? #f))
14285 (native-inputs
14286 (list python-poetry-core
14287 python-pillow
14288 python-pytest
14289 python-pytest-benchmark))
14290 (home-page "https://github.com/whtsky/pixelmatch-py")
14291 (synopsis "Pixel-level image comparison library")
14292 (description
14293 "This package provides a pixel-level image comparison library for Python,
14294originally created to compare screenshots in tests. Its features include
14295accurate anti-aliased pixels detection and perceptual color difference
14296metrics.")
14297 (license license:isc)))
14298
14299(define-public python-imagecodecs
14300 (package
14301 (name "python-imagecodecs")
14302 (version "2025.8.2")
14303 (source
14304 (origin
14305 (method url-fetch)
14306 (uri (pypi-uri "imagecodecs" version))
14307 (sha256
14308 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
14309 (modules '((guix build utils)))
14310 (snippet #~(for-each delete-file
14311 ;; Delete pre-generated Cython files.
14312 (find-files "imagecodecs" "_.*\\.c$")))))
14313 (build-system pyproject-build-system)
14314 (arguments
14315 (list
14316 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
14317 #:test-flags
14318 ;; Some of those tests are flaky.
14319 #~(list "-k" "not test_cms_identity_transforms")
14320 #:phases
14321 #~(modify-phases %standard-phases
14322 (add-after 'unpack 'create-configuration
14323 (lambda _
14324 ;; By default everything is enabled. We can selectively disable
14325 ;; extensions (and thus dependencies) by deleting them from the
14326 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
14327 (call-with-output-file "imagecodecs_distributor_setup.py"
14328 (lambda (port)
14329 (format port "\
14330def customize_build(EXTENSIONS, OPTIONS):
14331~{ del EXTENSIONS[~s]~%~}~%"
14332 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
14333 ;; Those rely on unpackaged inputs.
14334 "aec" "avif" "bitshuffle" "brunsli" "deflate"
14335 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
14336 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
14337 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
14338 "zlibng" "zopfli"))))))
14339 (add-after 'unpack 'fix-sanity-check
14340 (lambda _
14341 ;; XXX: Don't exit twice. The generated script already does that.
14342 (substitute* "imagecodecs/__main__.py"
14343 (("sys\\.exit\\(main\\(\\)\\)")
14344 ""))))
14345 (add-before 'check 'configure-tests
14346 (lambda _
14347 (setenv "HOME" (getcwd)))))))
14348 (inputs
14349 (list brotli
14350 c-blosc
14351 c-blosc2
14352 giflib
14353 lcms
14354 libheif
14355 libjpeg-turbo
14356 libpng
14357 libtiff
14358 libwebp
14359 lz4
14360 lzfse
14361 snappy
14362 xz
14363 zlib
14364 `(,zstd "lib")))
14365 (propagated-inputs
14366 (list python-numpy python-matplotlib python-tifffile))
14367 (native-inputs
14368 (list python-cython python-pytest python-setuptools))
14369 (home-page "https://www.lfd.uci.edu/~gohlke/")
14370 (synopsis "Image transformation, compression, and decompression codecs")
14371 (description
14372 "Imagecodecs is a Python library that provides block-oriented, in-memory
14373buffer transformation, compression, and decompression functions for use in the
14374tifffile, czifile, and other scientific image input/output modules.")
14375 (license license:bsd-3)))
14376
14377(define-public python-property-manager
14378 (package
14379 (name "python-property-manager")
14380 (version "3.0")
14381 (source
14382 (origin
14383 (method git-fetch)
14384 (uri (git-reference
14385 (url "https://github.com/xolox/python-property-manager")
14386 (commit version)))
14387 (file-name (git-file-name name version))
14388 (sha256
14389 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
14390 (build-system pyproject-build-system)
14391 (native-inputs (list python-pytest python-setuptools))
14392 (propagated-inputs
14393 (list python-verboselogs
14394 python-humanfriendly
14395 python-coloredlogs))
14396 (home-page "https://github.com/xolox/python-property-manager")
14397 (synopsis "Useful property variants for Python programming")
14398 (description
14399 "The @code{property-manager} package defines several custom property
14400variants for Python programming including required properties,writable
14401properties, cached properties, etc.")
14402 (license license:expat)))
14403
14404(define-public python-executing
14405 (package
14406 (name "python-executing")
14407 (version "2.2.0")
14408 (source
14409 (origin
14410 (method url-fetch)
14411 (uri (pypi-uri "executing" version))
14412 (sha256
14413 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
14414 (build-system pyproject-build-system)
14415 (arguments
14416 (list
14417 #:test-flags
14418 ;; Test needs IPython
14419 #~(list "-k" "not test_two_statement_lookups")
14420 #:phases
14421 #~(modify-phases %standard-phases
14422 (add-after 'unpack 'fix-tests
14423 (lambda _
14424 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
14425 (substitute* "pyproject.toml"
14426 (("ignore_missing_imports = true.*")
14427 "ignore_missing_imports = true
14428
14429[tool.pytest.ini_options]
14430python_functions = \"test_\"\n")))))))
14431 (native-inputs
14432 (list python-asttokens
14433 python-littleutils
14434 python-pytest
14435 python-rich
14436 python-setuptools
14437 python-setuptools-scm
14438 python-wheel))
14439 (home-page "https://github.com/alexmojaki/executing")
14440 (synopsis "Get information about what a Python frame is currently doing")
14441 (description "This package lets you get information about what a frame is
14442currently doing, particularly the AST node being executed.")
14443 (license license:expat)))
14444
14445(define-public python-executor
14446 (package
14447 (name "python-executor")
14448 (version "23.2")
14449 (source
14450 (origin
14451 (method git-fetch)
14452 (uri (git-reference
14453 (url "https://github.com/xolox/python-executor")
14454 (commit version)))
14455 (file-name (git-file-name name version))
14456 (sha256
14457 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14458 (build-system pyproject-build-system)
14459 (arguments
14460 (list #:tests? #f)) ;TODO: tests require root/sudo
14461 (native-inputs (list python-mock python-pytest python-setuptools))
14462 (propagated-inputs
14463 (list python-six
14464 python-property-manager
14465 python-fasteners
14466 python-virtualenv))
14467 (home-page "https://github.com/xolox/python-executor")
14468 (synopsis "Programmer friendly subprocess wrapper")
14469 (description
14470 "The @code{executor} package is a simple wrapper for Python’s subprocess
14471module that makes it very easy to handle subprocesses on UNIX systems with
14472proper escaping of arguments and error checking currently doing, particularly
14473the AST node being executed.")
14474 (license license:expat)))
14475
14476(define-public python-roifile
14477 (package
14478 (name "python-roifile")
14479 (version "2025.5.10")
14480 (source
14481 (origin
14482 (method url-fetch)
14483 (uri (pypi-uri "roifile" version))
14484 (sha256
14485 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14486 (build-system pyproject-build-system)
14487 (arguments (list #:tests? #f)) ; There are none.
14488 (native-inputs (list python-setuptools))
14489 (propagated-inputs (list python-numpy))
14490 (home-page "https://www.lfd.uci.edu/~gohlke/")
14491 (synopsis "Read and write ImageJ ROI format")
14492 (description "Roifile is a Python library to read, write, create, and plot
14493ImageJ ROIs, an undocumented and ImageJ application specific format to store
14494regions of interest, geometric shapes, paths, text, etc for image overlays.")
14495 (license license:bsd-3)))
14496
14497(define-public python-lfdfiles
14498 (package
14499 (name "python-lfdfiles")
14500 (version "2026.4.30")
14501 (source
14502 (origin
14503 (method url-fetch)
14504 (uri (pypi-uri "lfdfiles" version))
14505 (sha256
14506 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14507 (modules '((guix build utils)))
14508 (snippet
14509 ;; Delete pre-generated Cython files.
14510 #~(begin
14511 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14512 (delete-file "lfdfiles/conftest.py")))))
14513 (build-system pyproject-build-system)
14514 (arguments
14515 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14516 (list #:tests? #f))
14517 (native-inputs (list python-setuptools))
14518 (propagated-inputs (list python-click python-numpy python-tifffile))
14519 (home-page "https://www.lfd.uci.edu/~gohlke/")
14520 (synopsis "Work with LFD data files")
14521 (description
14522 "Lfdfiles is a Python library and console script for reading, writing,
14523converting, and viewing many of the proprietary file formats used to store
14524experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14525 (license license:bsd-3)))
14526
14527;; ~8Mo of test files.
14528(define python-av-testdata
14529 (file-union
14530 "python-av-testdata"
14531 (cons*
14532 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14533 `(,(string-append "pyav-curated/" file)
14534 ,(origin
14535 (method url-fetch)
14536 (uri (string-append "https://pyav.org/datasets/" file))
14537 (sha256
14538 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14539 (map
14540 (match-lambda
14541 ((file . hash)
14542 (list (string-append "fate-suite/" file)
14543 (origin
14544 (method url-fetch)
14545 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14546 (sha256 (base32 hash))))))
14547 '(("aac/latm_stereo_to_51.ts" .
14548 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14549 ("h264/extradata-reload-multi-stsd.mov" .
14550 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14551 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14552 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14553 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14554 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14555 ("h264/interlaced_crop.mp4" .
14556 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14557 ("hap/HAPQA_NoSnappy_127x1.mov" .
14558 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14559 ("mkv/codec_delay_opus.mkv" .
14560 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14561 ("mov/displaymatrix.mov" .
14562 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14563 ("mov/mov-1elist-ends-last-bframe.mov" .
14564 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14565 ("mov/white_zombie_scrunch-part.mov" .
14566 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14567 ("mpeg2/mpeg2_field_encoding.ts" .
14568 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14569 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14570 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14571 ("mxf/track_01_v02.mxf" .
14572 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14573 ("png1/55c99e750a5fd6_50314226.png" .
14574 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14575 ("qtrle/aletrek-rle.mov" .
14576 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14577 ("sub/MovText_capability_tester.mp4" .
14578 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14579 ("sub/vobsub.sub" .
14580 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14581
14582(define-public python-av
14583 (package
14584 (name "python-av")
14585 (version "16.0.1")
14586 (source
14587 (origin
14588 (method url-fetch)
14589 (uri (pypi-uri "av" version))
14590 (sha256
14591 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14592 (build-system pyproject-build-system)
14593 (arguments
14594 (list
14595 ;; Upstream is not great in responding to open issues or change requests.
14596 ;; See:
14597 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14598 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14599 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14600 #:test-flags
14601 ;; Writing to custom IO requires network access.
14602 #~(list "-k" "not test_writing_to_custom_io_dash")
14603 #:phases
14604 #~(modify-phases %standard-phases
14605 (add-before 'check 'pre-check
14606 (lambda _
14607 ;; This would otherwise interfere with finding the installed
14608 ;; av when running tests.
14609 (delete-file-recursively "av")
14610 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14611 (substitute* "tests/common.py"
14612 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14613 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14614 (native-inputs
14615 (list pkg-config
14616 python-cython
14617 python-numpy
14618 python-pillow
14619 python-pytest
14620 python-setuptools))
14621 (inputs (list ffmpeg))
14622 (home-page "https://github.com/PyAV-Org/PyAV")
14623 (synopsis "Pythonic bindings for FFmpeg's libraries")
14624 (description
14625 "PyAV is a Python library that allows for direct and precise manipulation
14626of media through containers, streams, packets, codecs, and frames. It provides
14627access to the powerful FFmpeg libraries while managing the complex details as
14628much as possible.
14629PyAV also facilitates data transformation and integration with
14630other packages such as Numpy and Pillow. However, working with media is a
14631challenging task and PyAV cannot abstract it away or make all the best decisions
14632for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14633be necessary. Nonetheless, PyAV is an essential tool when working with media
14634that requires its specific capabilities.")
14635 (license license:bsd-3)))
14636
14637(define-public python-ffmpeg-python
14638 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14639 (package
14640 (name "python-ffmpeg-python")
14641 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14642 (revision . "0")))
14643 (version (git-version "0.2.0"
14644 (assoc-ref properties 'revision)
14645 (assoc-ref properties 'commit)))
14646 (source
14647 (origin
14648 (method git-fetch)
14649 (uri (git-reference
14650 (url "https://github.com/kkroening/ffmpeg-python.git")
14651 (commit (assoc-ref properties 'commit))))
14652 (file-name (git-file-name name version))
14653 (sha256
14654 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14655 (build-system pyproject-build-system)
14656 (arguments
14657 (list
14658 #:test-flags
14659 #~(list "-k" "not test_pipe and not test__probe")
14660 #:phases
14661 #~(modify-phases %standard-phases
14662 (add-after 'unpack 'hardcode-ffmpeg
14663 (lambda* (#:key inputs #:allow-other-keys)
14664 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14665 (substitute* "ffmpeg/_run.py"
14666 (("cmd='ffmpeg'")
14667 (string-append "cmd='" ffmpeg "'")))
14668 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14669 (("out_file.compile\\(\\) == \\['ffmpeg'")
14670 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14671 (inputs (list ffmpeg))
14672 (propagated-inputs (list python-future))
14673 (native-inputs (list python-future
14674 python-numpy
14675 python-pytest
14676 python-pytest-mock
14677 python-setuptools))
14678 (home-page "https://github.com/kkroening/ffmpeg-python")
14679 (synopsis "Python bindings for FFmpeg with complex filtering support")
14680 (description
14681 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14682Python terms, taking care of running ffmpeg with the correct command-line
14683arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14684 (license license:asl2.0)))
14685
14686(define-public python-imageio-ffmpeg
14687 (package
14688 (name "python-imageio-ffmpeg")
14689 (version "0.6.0")
14690 (source
14691 (origin
14692 (method url-fetch)
14693 (uri (pypi-uri "imageio_ffmpeg" version))
14694 (sha256
14695 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14696 (build-system pyproject-build-system)
14697 (arguments
14698 (list
14699 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14700 #:phases
14701 #~(modify-phases %standard-phases
14702 (add-after 'unpack 'hardcode-ffmpeg
14703 (lambda* (#:key inputs #:allow-other-keys)
14704 (substitute* "imageio_ffmpeg/_utils.py"
14705 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14706 (string-append "(" all " or \""
14707 (search-input-file inputs "bin/ffmpeg")
14708 "\")"))))))))
14709 (native-inputs
14710 (list python-setuptools
14711 python-wheel))
14712 (inputs
14713 (list ffmpeg))
14714 (home-page "https://github.com/imageio/imageio-ffmpeg")
14715 (synopsis "FFMPEG wrapper for Python")
14716 (description
14717 "This package provides an FFMPEG wrapper for working with video files.
14718It implements generator functions for reading and writing data to and from
14719FFMPEG, reliably terminating the process when done.")
14720 (license license:bsd-2)))
14721
14722(define-public python-imageio
14723 (package
14724 (name "python-imageio")
14725 (version "2.36.1")
14726 (source
14727 (origin
14728 (method url-fetch)
14729 (uri (pypi-uri "imageio" version))
14730 (sha256
14731 (base32
14732 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14733 (build-system pyproject-build-system)
14734 (arguments
14735 (list
14736 #:test-flags #~(list "-m" "not needs_internet"
14737 ;; This attempts to load libGL.so (provided by mesa)
14738 ;; at the Python store path (sys.base_prefix?).
14739 "-k" "not test_findlib2"
14740 "--ignore" "tests/test_freeimage.py")
14741 #:phases
14742 #~(modify-phases %standard-phases
14743 (add-after 'unpack 'fix-source
14744 (lambda* (#:key inputs #:allow-other-keys)
14745 (substitute* "imageio/core/util.py"
14746 (("\"/var/tmp\"")
14747 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14748 (propagated-inputs
14749 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14750 (native-inputs
14751 (list python-fsspec
14752 python-pytest
14753 python-setuptools))
14754 (home-page "https://imageio.github.io/")
14755 (synopsis "Library for reading and writing a wide range of image data")
14756 (description
14757 "Imageio is a Python library that provides an easy interface to read and
14758write a wide range of image data, including animated images, video, volumetric
14759data, and scientific formats.")
14760 (license license:bsd-2)))
14761
14762(define-public python-pyudorandom
14763 ;; Releases are not tagged in Git:
14764 ;; https://github.com/mewwts/pyudorandom/issues/3
14765 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14766 (revision "0"))
14767 (package
14768 (name "python-pyudorandom")
14769 (version (git-version "1.0.0" revision commit))
14770 (source
14771 (origin
14772 (method git-fetch)
14773 (uri (git-reference
14774 (url "https://github.com/mewwts/pyudorandom")
14775 (commit commit)))
14776 (file-name (git-file-name name version))
14777 (sha256
14778 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
14779 (build-system pyproject-build-system)
14780 (arguments (list #:test-backend #~'unittest))
14781 (native-inputs (list python-setuptools))
14782 (home-page "https://github.com/mewwts/pyudorandom")
14783 (synopsis "Generate pseudorandom numbers by using algebra")
14784 (description
14785 "The @code{pyudorandom} module lets you iterate over a list
14786in a non-succsessive, yet deterministic way based on integer modulo.
14787It comes in handy when you want to mix up the items, but don't need
14788any guarantees of randomness. It might be slow on small data,
14789but shall be significantly faster than @code{random.shuffle}
14790for longer lists.")
14791 (license license:expat))))
14792
14793(define-public python-pyvips
14794 (package
14795 (name "python-pyvips")
14796 (version "3.1.1")
14797 (source
14798 (origin
14799 (method git-fetch) ; PyPI does not include test helpers
14800 (uri (git-reference
14801 (url "https://github.com/libvips/pyvips")
14802 (commit (string-append "v" version))))
14803 (file-name (git-file-name name version))
14804 (sha256
14805 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
14806 (build-system pyproject-build-system)
14807 (native-inputs
14808 (list pkg-config
14809 python-pytest
14810 python-setuptools
14811 python-wheel))
14812 (inputs
14813 (list glib vips))
14814 (propagated-inputs
14815 (list python-cffi python-pkgconfig))
14816 (home-page "https://github.com/libvips/pyvips")
14817 (synopsis "Python bindings for VIPS")
14818 (description "The @code{pyvips} package provides Python bindings for VIPS,
14819a multithreaded image-processing system with low memory needs.")
14820 (license license:expat)))
14821
14822;; WARNING: This package is a dependency of mesa.
14823;; There are no users in python-xyz for this package, consider to adopt closer
14824;; to Mesa.
14825(define-public python-pycparser
14826 (package
14827 (name "python-pycparser")
14828 (version "2.22")
14829 (source
14830 (origin
14831 (method url-fetch)
14832 (uri (pypi-uri "pycparser" version))
14833 (sha256
14834 (base32
14835 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
14836 (outputs '("out" "doc"))
14837 (build-system pyproject-build-system)
14838 (arguments
14839 (list
14840 #:test-backend #~'unittest
14841 #:phases
14842 #~(modify-phases %standard-phases
14843 (add-after 'install 'install-doc
14844 (lambda _
14845 (let* ((data (string-append #$output:doc "/share"))
14846 (doc (string-append data "/doc/" #$name "-" #$version))
14847 (examples (string-append doc "/examples")))
14848 (mkdir-p examples)
14849 (for-each (lambda (file)
14850 (copy-file (string-append "." file)
14851 (string-append doc file)))
14852 '("/README.rst" "/CHANGES" "/LICENSE"))
14853 (copy-recursively "examples" examples)))))))
14854 (native-inputs
14855 (list python-setuptools))
14856 (home-page "https://github.com/eliben/pycparser")
14857 (synopsis "C parser in Python")
14858 (description
14859 "Pycparser is a complete parser of the C language, written in pure Python
14860using the PLY parsing library. It parses C code into an AST and can serve as
14861a front-end for C compilers or analysis tools.")
14862 (license license:bsd-3)))
14863
14864(define-public python-pywavelets
14865 (package
14866 (name "python-pywavelets")
14867 (version "1.8.0")
14868 (home-page "https://github.com/PyWavelets/pywt")
14869 (source (origin
14870 (method url-fetch)
14871 (uri (pypi-uri "pywavelets" version))
14872 (sha256
14873 (base32
14874 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
14875 (build-system pyproject-build-system)
14876 (arguments
14877 (list
14878 #:test-flags '(list "--pyargs" "pywt")
14879 #:phases
14880 #~(modify-phases %standard-phases
14881 ;; The compiled libraries are only in the output at this point,
14882 ;; but they are needed to run tests.
14883 ;; FIXME: This should be handled by the pyargs pytest argument,
14884 ;; but is not for some reason.
14885 (add-before 'check 'pre-check
14886 (lambda _ (chdir #$output))))))
14887 (native-inputs
14888 (list meson
14889 ninja
14890 pkg-config
14891 python-cython
14892 python-meson
14893 python-numpy
14894 python-pytest))
14895 (propagated-inputs
14896 (list python-numpy python-scipy))
14897 (synopsis "Wavelet transforms in Python")
14898 (description
14899 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
14900mathematical basis functions that are localized in both time and frequency.
14901Wavelet transforms are time-frequency transforms employing wavelets. They are
14902similar to Fourier transforms, the difference being that Fourier transforms are
14903localized only in frequency instead of in time and frequency.")
14904 (license license:expat)))
14905
14906(define-public python-pywal
14907 (package
14908 (name "python-pywal")
14909 (version "3.3.0")
14910 (source
14911 (origin
14912 (method git-fetch)
14913 (uri (git-reference
14914 (url "https://github.com/dylanaraps/pywal")
14915 (commit version)))
14916 (file-name (git-file-name name version))
14917 (sha256
14918 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
14919 (build-system pyproject-build-system)
14920 (arguments
14921 `(#:phases
14922 (modify-phases %standard-phases
14923 (add-before 'check 'fix-home-directory
14924 (lambda _
14925 ;; Tests fail with "Permission denied: '/homeless-shelter'".
14926 (setenv "HOME" "/tmp"))))))
14927 (native-inputs
14928 (list python-pytest
14929 python-setuptools))
14930 (inputs
14931 (list imagemagick))
14932 (home-page "https://github.com/dylanaraps/pywal")
14933 (synopsis "Color palette generator and applicator")
14934 (description
14935 "Pywal is a tool that generates a color palette from the dominant colors
14936in an image. It then applies the colors system-wide and on-the-fly in all of
14937your favourite programs.")
14938 (license license:expat)))
14939
14940(define-public python-pywal16
14941 (package
14942 (name "python-pywal16")
14943 (version "3.8.10")
14944 (source
14945 (origin
14946 (method url-fetch)
14947 (uri (pypi-uri "pywal16" version))
14948 (sha256
14949 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
14950 (build-system pyproject-build-system)
14951 (arguments
14952 (list
14953 #:phases
14954 '(modify-phases %standard-phases
14955 (add-before 'check 'set-HOME
14956 (lambda _ (setenv "HOME" "/tmp"))))))
14957 (native-inputs
14958 (list imagemagick
14959 python-pytest
14960 python-setuptools))
14961 (home-page "https://github.com/eylles/pywal16")
14962 (synopsis "16 colors fork of pywal")
14963 (description
14964 "Pywal16 is a tool that generates a color palette from the dominant
14965colors in an image. It then applies the colors system-wide and on-the-fly in
14966all of your favorite programs.")
14967 (license license:expat)))
14968
14969(define-public python-click-didyoumean
14970 (package
14971 (name "python-click-didyoumean")
14972 (version "0.3.1")
14973 (source
14974 (origin
14975 (method git-fetch) ;no tests in PyPI archive
14976 (uri (git-reference
14977 (url "https://github.com/click-contrib/click-didyoumean")
14978 (commit (string-append "v" version))))
14979 (file-name (git-file-name name version))
14980 (sha256
14981 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
14982 (build-system pyproject-build-system)
14983 (native-inputs
14984 (list python-poetry-core python-pytest))
14985 (propagated-inputs
14986 (list python-click))
14987 (home-page "https://github.com/timofurrer/click-didyoumean")
14988 (synopsis "Git-like did-you-mean feature in Click")
14989 (description
14990 "This plugin enables git-like did-you-mean feature in Click.")
14991 (license license:expat)))
14992
14993(define-public python-pywinrm
14994 (package
14995 (name "python-pywinrm")
14996 (version "0.5.0")
14997 (source
14998 (origin
14999 (method git-fetch)
15000 (uri (git-reference
15001 (url "https://github.com/diyan/pywinrm/")
15002 (commit (string-append "v" version))))
15003 (file-name (git-file-name name version))
15004 (sha256
15005 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
15006 (build-system pyproject-build-system)
15007 (propagated-inputs
15008 (list python-requests python-requests-ntlm python-xmltodict))
15009 (native-inputs
15010 (list python-mock python-pytest python-setuptools))
15011 (home-page "https://github.com/diyan/pywinrm/")
15012 (synopsis "Python library for Windows Remote Management (WinRM)")
15013 (description
15014 "pywinrm is a Python client for the Windows Remote Management (WinRM)
15015service. It allows you to invoke commands on target Windows machines from
15016any machine that can run Python.")
15017 (license license:expat)))
15018
15019(define-public python-manimpango
15020 (package
15021 (name "python-manimpango")
15022 (version "0.5.0")
15023 (source
15024 (origin
15025 (method git-fetch) ; no tests data in PyPi package
15026 (uri (git-reference
15027 (url "https://github.com/ManimCommunity/ManimPango")
15028 (commit (string-append "v" version))))
15029 (file-name (git-file-name name version))
15030 (sha256
15031 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
15032 (build-system pyproject-build-system)
15033 (arguments
15034 (list
15035 #:phases
15036 #~(modify-phases %standard-phases
15037 (add-before 'check 'build-extensions
15038 (lambda _
15039 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
15040 (native-inputs
15041 (list pkg-config
15042 python-cython
15043 python-pytest
15044 python-setuptools
15045 python-wheel))
15046 (inputs
15047 (list pango))
15048 (home-page "https://manimpango.manim.community/")
15049 (synopsis "Bindings for Pango for using with Manim")
15050 (description
15051 "Python bindings for ManimPango which is a C binding for Pango,
15052using Cython.
15053
15054ManimPango is internally used in Manim to render (non-LaTeX) text.")
15055 (license license:expat)))
15056
15057(define-public python-cairocffi
15058 (package
15059 (name "python-cairocffi")
15060 (version "1.7.1")
15061 (source
15062 (origin
15063 ;; The PyPI archive does not include the documentation, so use Git.
15064 (method git-fetch)
15065 (uri (git-reference
15066 (url "https://github.com/Kozea/cairocffi")
15067 (commit (string-append "v" version))))
15068 (file-name (git-file-name name version))
15069 (sha256
15070 (base32
15071 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
15072 (build-system pyproject-build-system)
15073 (outputs '("out" "doc"))
15074 (inputs
15075 (list glib gtk+ gdk-pixbuf cairo))
15076 (native-inputs
15077 (list python-flit-core
15078 python-numpy
15079 python-pikepdf
15080 python-pytest
15081 python-sphinx
15082 python-sphinx-rtd-theme))
15083 (propagated-inputs
15084 (list python-xcffib)) ; used at run time
15085 (arguments
15086 (list
15087 #:phases
15088 #~(modify-phases %standard-phases
15089 (add-after 'unpack 'patch-paths
15090 (lambda* (#:key inputs #:allow-other-keys)
15091 (substitute* "cairocffi/__init__.py"
15092 ;; Hack the dynamic library loading mechanism.
15093 (("find_library\\(library_name\\)")
15094 "\"found\"")
15095 (("filenames = \\(library_filename,\\) \\+ filenames")
15096 "pass")
15097 (("libcairo.so.2")
15098 (search-input-file inputs "/lib/libcairo.so.2")))
15099 (substitute* "cairocffi/pixbuf.py"
15100 (("libgdk_pixbuf-2.0.so.0")
15101 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
15102 (("libgobject-2.0.so.0")
15103 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
15104 (("libglib-2.0.so.0")
15105 (search-input-file inputs "/lib/libglib-2.0.so.0"))
15106 (("libgdk-3.so.0")
15107 (search-input-file inputs "/lib/libgdk-3.so.0")))))
15108 (add-after 'install 'install-doc
15109 (lambda* (#:key inputs #:allow-other-keys)
15110 (let* ((data (string-append #$output:doc "/share"))
15111 (doc (string-append data "/doc/" #$name "-" #$version))
15112 (html (string-append doc "/html")))
15113 (setenv "LD_LIBRARY_PATH"
15114 (string-append (assoc-ref inputs "cairo") "/lib" ":"
15115 (assoc-ref inputs "gdk-pixbuf") "/lib"))
15116 (setenv "LANG" "en_US.UTF-8")
15117 (mkdir-p html)
15118 (for-each (lambda (file)
15119 (copy-file (string-append "." file)
15120 (string-append doc file)))
15121 '("/README.rst" "/NEWS.rst"))
15122 (system* "python" "setup.py" "build_sphinx")
15123 (copy-recursively "docs/_build/html" html)))))))
15124 (home-page "https://github.com/Kozea/cairocffi")
15125 (synopsis "Python bindings and object-oriented API for Cairo")
15126 (description
15127 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
15128Python bindings and object-oriented API for cairo. Cairo is a 2D vector
15129graphics library with support for multiple backends including image buffers,
15130PNG, PostScript, PDF, and SVG file output.")
15131 (license license:bsd-3)))
15132
15133(define-public python-decorator
15134 (package
15135 (name "python-decorator")
15136 (version "5.2.1")
15137 (source
15138 (origin
15139 (method url-fetch)
15140 (uri (pypi-uri "decorator" version))
15141 (sha256
15142 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
15143 (build-system pyproject-build-system)
15144 (arguments
15145 (list #:test-backend #~'custom
15146 #:test-flags #~(list "tests/test.py")))
15147 (native-inputs
15148 (list python-setuptools))
15149 (home-page "https://pypi.org/project/decorator/")
15150 (synopsis "Python module to simplify usage of decorators")
15151 (description
15152 "The aim of the decorator module is to simplify the usage of decorators
15153for the average programmer, and to popularize decorators usage giving examples
15154of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
15155etc. The core of this module is a decorator factory.")
15156 (license license:expat)))
15157
15158(define-public python-drmaa
15159 (package
15160 (name "python-drmaa")
15161 (version "0.7.7")
15162 (source
15163 (origin
15164 (method url-fetch)
15165 (uri (pypi-uri "drmaa" version))
15166 (sha256
15167 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
15168 (build-system pyproject-build-system)
15169 ;; The test suite requires libdrmaa which is provided by the cluster
15170 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
15171 ;; should be set to the path of the libdrmaa library.
15172 (arguments
15173 (list
15174 #:tests? #f
15175 #:phases
15176 #~(modify-phases %standard-phases
15177 ;; Loading the library fails because DRMAA_LIBRARY_PATH
15178 ;; is not configured.
15179 (delete 'sanity-check))))
15180 (native-inputs (list python-setuptools))
15181 (home-page "https://pypi.org/project/drmaa/")
15182 (synopsis "Python bindings for the DRMAA library")
15183 (description
15184 "A Python package for Distributed Resource Management (DRM) job
15185submission and control. This package is an implementation of the DRMAA 1.0
15186Python language binding specification.")
15187 (license license:bsd-3)))
15188
15189(define-public python-grako
15190 (package
15191 (name "python-grako")
15192 (version "3.99.9")
15193 (source
15194 (origin
15195 (method url-fetch)
15196 (uri (pypi-uri "grako" version ".zip"))
15197 (sha256
15198 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
15199 (snippet
15200 #~(begin (use-modules (guix build utils))
15201 (substitute* "grako/grammars.py"
15202 (("from collections import defaultdict, Mapping")
15203 (string-append "from collections import defaultdict\n"
15204 "from collections.abc import Mapping")))
15205 (substitute* '("grako/util.py"
15206 "grako/walkers.py")
15207 (("collections\\.Mapping") "collections.abc.Mapping"))))))
15208 (build-system pyproject-build-system)
15209 ;; XXX: Test file 'grako.ebnf' is missing from archive.
15210 (arguments (list #:tests? #f))
15211 (native-inputs (list unzip python-pytest python-setuptools))
15212 (home-page "https://pypi.org/project/grako")
15213 (synopsis "EBNF parser generator")
15214 (description
15215 "Grako takes a grammar in a variation of EBNF as input, and outputs a
15216memoizing PEG/Packrat parser in Python.")
15217 (license license:bsd-3)))
15218
15219(define-public python-grandalf
15220 (package
15221 (name "python-grandalf")
15222 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
15223 (version "0.8")
15224 (source
15225 (origin
15226 (method git-fetch)
15227 (uri (git-reference
15228 (url "https://github.com/bdcht/grandalf")
15229 (commit (string-append "v" version))))
15230 (file-name (git-file-name name version))
15231 (sha256
15232 (base32
15233 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
15234 (build-system pyproject-build-system)
15235 (arguments
15236 (list
15237 #:phases
15238 #~(modify-phases %standard-phases
15239 (add-before 'build 'patch-requirements
15240 (lambda _
15241 (substitute* "setup.py"
15242 (("install_requires=\\['pyparsing'],") "")))))))
15243 (native-inputs
15244 (list python-setuptools python-pytest))
15245 (propagated-inputs
15246 (list python-numpy python-ply))
15247 (home-page "https://github.com/bdcht/grandalf")
15248 (synopsis "Graph and drawing algorithms framework")
15249 (description
15250 "Grandalf is a Python package made for experimentations with graphs
15251drawing algorithms. It is written in pure Python, and currently implements
15252two layouts: the Sugiyama hierarchical layout and the force-driven or energy
15253minimization approach. While not as fast or featured as graphviz or other
15254libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
15255than thousands of nodes, while keeping the source code simple enough to tweak
15256and hack any part of it for experimental purpose. With a total of about 1500
15257lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
15258in less than 600 lines. The energy minimization approach is comprised of only
15259250 lines!
15260
15261Grandalf does only 2 not-so-simple things:
15262@itemize
15263@item computing the nodes (x,y) coordinates (based on provided nodes
15264dimensions, and a chosen layout)
15265@item routing the edges with lines or nurbs
15266@end itemize
15267
15268It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
15269will help you find where to draw things like nodes and edges, but it’s up to
15270you to actually draw things with your favorite toolkit.")
15271 ;; The user can choose either license.
15272 (license (list license:gpl2 license:epl1.0))))
15273
15274(define-public python-gridmap
15275 ;; XXX: Project is unmaintained since 2020-08-24, see:
15276 ;; <https://github.com/pygridtools/gridmap/issues/99>.
15277 (package
15278 (name "python-gridmap")
15279 (version "0.15.0")
15280 (source
15281 (origin
15282 (method git-fetch)
15283 (uri (git-reference
15284 (url "https://github.com/pygridtools/gridmap")
15285 (commit (string-append "v" version))))
15286 (file-name (git-file-name name version))
15287 (sha256
15288 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
15289 (build-system pyproject-build-system)
15290 (arguments
15291 (list #:tests? #f ;XXX: freezes or timeout
15292 #:test-backend #~'nose))
15293 (native-inputs
15294 (list ;; python-pynose
15295 python-setuptools))
15296 (propagated-inputs
15297 (list python-cherrypy
15298 python-cloudpickle
15299 python-psutil
15300 python-drmaa
15301 python-pyzmq))
15302 (home-page "https://github.com/pygridtools/gridmap")
15303 (synopsis "Create jobs on a cluster directly from Python")
15304 (description
15305 "Gridmap is a Python package to allow you to easily create jobs on the
15306cluster directly from Python. You can directly map Python functions onto the
15307cluster without needing to write any wrapper code yourself.")
15308 (license license:gpl3+)))
15309
15310(define-public python-honcho
15311 (package
15312 (name "python-honcho")
15313 (version "2.0.0")
15314 (source
15315 (origin
15316 (method git-fetch)
15317 (uri (git-reference
15318 (url "https://github.com/nickstenning/honcho")
15319 (commit (string-append "v" version))))
15320 (file-name (git-file-name name version))
15321 (sha256
15322 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
15323 (build-system pyproject-build-system)
15324 (arguments
15325 ;; Tests below fail with the error
15326 ;; ValueError: The 'honcho.export.xxx' package was not installed
15327 ;; in a way that PackageLoader understands.
15328 ;; Probably safe because it's testing for different init systems.
15329 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
15330 "--ignore" "tests/test_export_runit.py"
15331 "--ignore" "tests/test_export_supervisord.py"
15332 "--ignore" "tests/test_export_systemd.py"
15333 "--ignore" "tests/test_export_upstart.py")))
15334 (native-inputs
15335 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
15336 (propagated-inputs
15337 (list python-colorama))
15338 (home-page "https://github.com/nickstenning/honcho")
15339 (synopsis "Manage Procfile-based applications")
15340 (description
15341 "A Procfile is a file which describes how to run an application
15342consisting of several processes. honcho starts all listed processes.
15343The output of all running processes is collected by honcho and
15344displayed.")
15345 (license license:expat)))
15346
15347(define-public python-hsluv
15348 (package
15349 (name "python-hsluv")
15350 (version "5.0.4")
15351 (source
15352 (origin
15353 (method url-fetch)
15354 (uri (pypi-uri "hsluv" version))
15355 (sha256
15356 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
15357 (build-system pyproject-build-system)
15358 (native-inputs
15359 (list python-pytest python-setuptools))
15360 (home-page "https://www.hsluv.org")
15361 (synopsis "Human-friendly HSL colour space implemented in Python")
15362 (description
15363 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
15364@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
15365component that allows you to span all the available chroma as a neat
15366percentage.")
15367 (license license:expat)))
15368
15369(define-public python-pebble
15370 (package
15371 (name "python-pebble")
15372 (version "5.1.3")
15373 (source
15374 (origin
15375 (method git-fetch)
15376 (uri (git-reference
15377 (url "https://github.com/noxdafox/pebble")
15378 (commit version)))
15379 (file-name (git-file-name name version))
15380 (sha256
15381 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
15382 (build-system pyproject-build-system)
15383 (native-inputs (list python-pytest python-setuptools))
15384 (home-page "https://github.com/noxdafox/pebble")
15385 (synopsis "Threading and multiprocessing for Python")
15386 (description
15387 "Pebble aims to help manage threads and processes in an easier way. It
15388wraps Python's standard library threading and multiprocessing objects.")
15389 (license license:lgpl3+)))
15390
15391(define-public python-pexpect
15392 (package
15393 (name "python-pexpect")
15394 (version "4.9.0")
15395 (source
15396 (origin
15397 (method url-fetch)
15398 (uri (pypi-uri "pexpect" version))
15399 (sha256
15400 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
15401 (build-system pyproject-build-system)
15402 (arguments
15403 (list
15404 #:test-flags
15405 #~(list "-k" (string-join
15406 (list
15407 ;; Disable failing test, see
15408 ;; <https://github.com/pexpect/pexpect/issues/568>.
15409 "not test_bash"
15410 ;; Fails with attempt to find OpenSSL.
15411 "test_large_stdout_stream"
15412 ;; Tests fail while trying to find
15413 ;; tmp-pexpect-xxxxxxxxxxxx directories.
15414 "test_run_uses_env"
15415 "test_run_uses_env_path"
15416 "test_run_uses_env_path_over_path"
15417 "test_spawn_uses_env"
15418 ;; Fails with assertion error: assert 0 == 500
15419 "test_before_across_chunks"
15420 ;; Bash is enough for tests.
15421 "test_zsh")
15422 " and not "))
15423 #:phases
15424 #~(modify-phases %standard-phases
15425 (add-before 'check 'prepare-tests
15426 (lambda _
15427 (substitute* (find-files "tests")
15428 (("/bin/bash") (which "bash"))
15429 (("/bin/echo") (which "echo"))
15430 (("/bin/ls") (which "ls"))
15431 (("/bin/which") (which "which"))
15432 ;; Many tests try to use the /bin directory which is not
15433 ;; present in the build environment. Use one that's non-empty
15434 ;; and unlikely to change.
15435 (("/bin'") "/dev'")))))))
15436 (native-inputs
15437 (list bash ;full Bash for 'test_replwrap.py'
15438 man-db
15439 python-pytest
15440 python-setuptools
15441 python-wheel
15442 which))
15443 (propagated-inputs
15444 (list python-ptyprocess))
15445 (home-page "https://pexpect.readthedocs.org/")
15446 (synopsis "Controlling interactive console applications")
15447 (description
15448 "Pexpect is a pure Python module for spawning child applications;
15449controlling them; and responding to expected patterns in their output. Pexpect
15450works like Don Libes’ Expect. Pexpect allows your script to spawn a child
15451application and control it as if a human were typing commands.")
15452 (license license:isc)))
15453
15454(define-public python-sexpdata
15455 (package
15456 (name "python-sexpdata")
15457 (version "1.0.2")
15458 (source
15459 (origin
15460 (method url-fetch)
15461 (uri (pypi-uri "sexpdata" version))
15462 (sha256
15463 (base32
15464 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15465 (build-system pyproject-build-system)
15466 (arguments
15467 (list #:tests? #f)) ; no tests
15468 (native-inputs (list python-setuptools python-wheel))
15469 (home-page "https://github.com/jd-boyd/sexpdata")
15470 (synopsis "S-expression parser for Python")
15471 (description
15472 "Sexpdata is an S-expression parser/serializer. It has load and dump
15473functions like pickle, json or PyYAML module.")
15474 (license license:bsd-3)))
15475
15476(define-public python-pathable
15477 (package
15478 (name "python-pathable")
15479 (version "0.4.3")
15480 (source
15481 (origin
15482 (method url-fetch)
15483 (uri (pypi-uri "pathable" version))
15484 (sha256
15485 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15486 (build-system pyproject-build-system)
15487 (arguments (list #:tests? #false)) ;there are none
15488 (native-inputs (list python-poetry-core))
15489 (home-page "https://github.com/p1c2u/pathable")
15490 (synopsis "Object-oriented paths")
15491 (description "With this package you can traverse resources like paths and
15492access resources on demand with separate accessor layer.")
15493 (license license:asl2.0)))
15494
15495(define-public python-importlib-resources
15496 (package
15497 (name "python-importlib-resources")
15498 (version "6.5.2")
15499 (source (origin
15500 (method url-fetch)
15501 (uri (pypi-uri "importlib_resources" version))
15502 (sha256
15503 (base32
15504 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15505 (build-system pyproject-build-system)
15506 (native-inputs
15507 (list python-jaraco-test
15508 python-jaraco-collections
15509 python-pytest
15510 python-setuptools
15511 python-setuptools-scm
15512 python-zipp))
15513 (home-page "https://importlib-resources.readthedocs.io/")
15514 (synopsis "Read resources from Python packages")
15515 (description
15516 "@code{importlib_resources} is a backport of Python 3's standard library
15517@code{importlib.resources} module for Python 2.7, and Python 3.")
15518 (license license:asl2.0)))
15519
15520(define-public python-importlib-metadata
15521 (package
15522 (name "python-importlib-metadata")
15523 (version "8.7.0")
15524 (source
15525 (origin
15526 (method url-fetch)
15527 (uri (pypi-uri "importlib_metadata" version))
15528 (sha256
15529 (base32
15530 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15531 (build-system pyproject-build-system)
15532 (arguments
15533 (list #:test-flags #~(list "tests")))
15534 (native-inputs
15535 (list python-jaraco-test
15536 python-packaging-bootstrap
15537 python-pyfakefs
15538 python-pytest-bootstrap
15539 python-setuptools
15540 python-setuptools-scm))
15541 (propagated-inputs
15542 (list python-zipp))
15543 (home-page "https://importlib-metadata.readthedocs.io/")
15544 (synopsis "Read metadata from Python packages")
15545 (description
15546 "@code{importlib_metadata} is a library which provides an API for
15547accessing an installed Python package's metadata, such as its entry points or
15548its top-level name. This functionality intends to replace most uses of
15549@code{pkg_resources} entry point API and metadata API. Along with
15550@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15551need to use the older and less efficient @code{pkg_resources} package.")
15552 (license license:asl2.0)))
15553
15554(define-public python-importlib-metadata-argparse-version
15555 (package
15556 (name "python-importlib-metadata-argparse-version")
15557 (version "2.0.1")
15558 (home-page
15559 "https://github.com/mondeja/importlib-metadata-argparse-version")
15560 (source
15561 (origin
15562 (method git-fetch)
15563 (uri (git-reference
15564 (url home-page)
15565 (commit (string-append "v" version))))
15566 (file-name (git-file-name name version))
15567 (sha256
15568 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15569 (build-system pyproject-build-system)
15570 (native-inputs (list python-pytest python-hatchling))
15571 (synopsis "Get Python package version more efficiently")
15572 (description
15573 "This package provides an @code{argparse} action to define CLI version
15574with a delayed call to @code{importlib.metadata}, avoiding to load this module
15575when not needed.")
15576 (license license:bsd-3)))
15577
15578(define-public python-importmagic
15579 (package
15580 (name "python-importmagic")
15581 (version "0.1.7")
15582 (source
15583 (origin
15584 (method git-fetch)
15585 (uri (git-reference
15586 (url "https://github.com/alecthomas/importmagic")
15587 (commit version)))
15588 (file-name (git-file-name name version))
15589 (sha256
15590 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15591 (build-system pyproject-build-system)
15592 (native-inputs (list python-pytest python-setuptools))
15593 (home-page "https://github.com/alecthomas/importmagic")
15594 (synopsis "Library for adding, removing and managing Python imports")
15595 (description
15596 "Importmagic is a Python library for automatically managing imports by
15597finding unresolved symbols in Python code and their corresponding imports.")
15598 (license license:bsd-3)))
15599
15600(define-public python-inotify-simple
15601 (package
15602 (name "python-inotify-simple")
15603 (version "1.3.5")
15604 (source
15605 (origin
15606 (method git-fetch)
15607 (uri (git-reference
15608 (url "https://github.com/chrisjbillington/inotify_simple")
15609 (commit version)))
15610 (file-name (git-file-name name version))
15611 (sha256
15612 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15613 (build-system pyproject-build-system)
15614 (arguments
15615 (list
15616 #:test-backend #~'custom
15617 #:test-flags #~(list "example.py")))
15618 (native-inputs (list python-setuptools))
15619 (home-page "https://github.com/chrisjbillington/inotify_simple")
15620 (synopsis "Simple wrapper around inotify library")
15621 (description
15622 "@code{inotify-simple} is a simple wrapper around inotify library.")
15623 (license license:bsd-3)))
15624
15625(define-public python-interface-meta
15626 (package
15627 (name "python-interface-meta")
15628 (version "1.3.0")
15629 (source
15630 (origin
15631 (method url-fetch)
15632 (uri (pypi-uri "interface_meta" version))
15633 (sha256
15634 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15635 (build-system pyproject-build-system)
15636 (native-inputs (list python-poetry-core python-pytest))
15637 (home-page "https://github.com/matthewwardrop/interface_meta")
15638 (synopsis
15639 "API for enforced method signatures and consistent documentation")
15640 (description
15641 "This package provides a convenient way to expose an extensible API with
15642enforced method signatures and consistent documentation.")
15643 (license license:expat)))
15644
15645(define-public python-jaraco-itertools
15646 (package
15647 (name "python-jaraco-itertools")
15648 (version "6.4.3")
15649 (source
15650 (origin
15651 (method git-fetch)
15652 (uri (git-reference
15653 (url "https://github.com/jaraco/jaraco.itertools")
15654 (commit (string-append "v" version))))
15655 (file-name (git-file-name name version))
15656 (sha256
15657 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15658 (build-system pyproject-build-system)
15659 (arguments
15660 (list #:tests? #f)) ;no tests
15661 (native-inputs
15662 (list python-setuptools
15663 python-setuptools-scm))
15664 (propagated-inputs
15665 (list python-inflect
15666 python-more-itertools))
15667 (home-page "https://github.com/jaraco/jaraco.itertools")
15668 (synopsis "Tools for working with iterables")
15669 (description
15670 "This package provides an utility collection based on no longer
15671maintained @code{jaraco.util}.")
15672 (license license:expat)))
15673
15674(define-public python-jaraco-logging
15675 (package
15676 (name "python-jaraco-logging")
15677 (version "3.4.0")
15678 (source
15679 (origin
15680 (method git-fetch)
15681 (uri (git-reference
15682 (url "https://github.com/jaraco/jaraco.logging")
15683 (commit (string-append "v" version))))
15684 (file-name (git-file-name name version))
15685 (sha256
15686 (base32 "0c13wxbmk0rl1jd0fxp3p7qpsps8lj6p2wlkny2ng5z4qn21ahhi"))))
15687 (build-system pyproject-build-system)
15688 (native-inputs
15689 (list python-pytest
15690 python-setuptools
15691 python-setuptools-scm))
15692 (propagated-inputs
15693 (list python-tempora))
15694 (home-page "https://github.com/jaraco/jaraco.logging")
15695 (synopsis "Support for Python's logging facility")
15696 (description
15697 "This package allows soliciting log-level info from command-line
15698parameters.")
15699 (license license:expat)))
15700
15701(define-public python-jaraco-packaging
15702 (package
15703 (name "python-jaraco-packaging")
15704 (version "9.4.0") ;the latest version compatible with [email protected]
15705 (source
15706 (origin
15707 (method url-fetch)
15708 (uri (pypi-uri "jaraco.packaging" version))
15709 (sha256
15710 (base32
15711 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15712 (build-system pyproject-build-system)
15713 (arguments
15714 (list #:tests? #f)) ;no tests in PyPI archive
15715 (native-inputs
15716 (list python-setuptools
15717 python-setuptools-scm))
15718 (propagated-inputs
15719 (list python-pypa-build
15720 python-virtualenv
15721 python-domdf-python-tools
15722 python-jaraco-context
15723 python-sphinx))
15724 (home-page "https://github.com/jaraco/jaraco.packaging")
15725 (synopsis "Tools to supplement packaging Python releases")
15726 (description
15727 "This package provides various tools to supplement packaging Python
15728releases.")
15729 (license license:expat)))
15730
15731(define-public python-jaraco-vcs
15732 (package
15733 (name "python-jaraco-vcs")
15734 (version "2.4.1")
15735 (source
15736 (origin
15737 (method git-fetch)
15738 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15739 (commit (string-append "v" version))))
15740 (file-name (git-file-name name version))
15741 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15742 (build-system pyproject-build-system)
15743 (arguments
15744 (list
15745 #:test-flags
15746 ;; Ignore doctests.
15747 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15748 (propagated-inputs (list python-jaraco-classes
15749 python-jaraco-path
15750 python-jaraco-versioning
15751 python-more-itertools
15752 python-packaging
15753 python-dateutil
15754 python-tempora))
15755 (native-inputs (list python-pygments
15756 python-pytest
15757 python-pytest-home
15758 python-setuptools
15759 python-setuptools-scm))
15760 (home-page "https://github.com/jaraco/jaraco.vcs")
15761 (synopsis "Utilities for working with VCS repositories")
15762 (description
15763 "This package provides facilities for working with VCS repositories in
15764Python.")
15765 (license license:expat)))
15766
15767(define-public python-jaraco-versioning
15768 (package
15769 (name "python-jaraco-versioning")
15770 (version "1.1.0")
15771 (source
15772 (origin
15773 (method git-fetch)
15774 (uri (git-reference
15775 (url "https://github.com/jaraco/jaraco.versioning")
15776 (commit (string-append "v" version))))
15777 (file-name (git-file-name name version))
15778 (sha256
15779 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
15780 (build-system pyproject-build-system)
15781 (propagated-inputs (list python-packaging))
15782 (native-inputs
15783 (list python-pytest python-setuptools python-setuptools-scm))
15784 (home-page "https://github.com/jaraco/jaraco.versioning")
15785 (synopsis "Version manipulation utils")
15786 (description
15787 "This package builds upon @code{python-packaging} to provide more
15788sophisticated version manipulation.")
15789 (license license:expat)))
15790
15791(define-public python-pypytools
15792 (package
15793 (name "python-pypytools")
15794 (version "0.6.2")
15795 (source
15796 (origin
15797 (method git-fetch)
15798 (uri (git-reference
15799 (url "https://github.com/antocuni/pypytools/")
15800 (commit version)))
15801 (file-name (git-file-name name version))
15802 (sha256
15803 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
15804 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
15805 (build-system pyproject-build-system)
15806 (arguments
15807 (list
15808 ;; These tests are using deprecated py.code module.
15809 #:test-flags
15810 #~(list
15811 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
15812 "--deselect=pypytools/testing/test_codegen.py::test_def_"
15813 "--deselect=pypytools/testing/test_codegen.py::test_compile"
15814 "--ignore=pypytools/testing/test_unroll.py"
15815 ;; clone_func returns an object of the wrong type.
15816 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
15817 (native-inputs
15818 (list python-freezegun
15819 python-numpy
15820 python-pytest
15821 python-setuptools))
15822 (propagated-inputs (list python-py))
15823 (home-page "https://github.com/antocuni/pypytools/")
15824 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
15825 (description
15826 "This package provides a collection of useful tools to use PyPy-specific
15827features, with CPython fallbacks.")
15828 (license license:x11)))
15829
15830(define-public python-simplegeneric
15831 (package
15832 (name "python-simplegeneric")
15833 (version "0.8.1")
15834 (source
15835 (origin
15836 (method url-fetch)
15837 (uri (pypi-uri "simplegeneric" version ".zip"))
15838 (sha256
15839 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
15840 (build-system pyproject-build-system)
15841 (arguments
15842 (list
15843 #:test-backend #~'custom
15844 #:test-flags #~(list "-m" "simplegeneric")))
15845 (native-inputs
15846 (list unzip python-setuptools))
15847 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
15848 (synopsis "Python module for simple generic functions")
15849 (description
15850 "The simplegeneric module lets you define simple single-dispatch generic
15851functions, akin to Python’s built-in generic functions like @code{len()},
15852@code{iter()} and so on. However, instead of using specially-named methods,
15853these generic functions use simple lookup tables, akin to those used by
15854e.g. @code{pickle.dump()} and other generic functions found in the Python
15855standard library.")
15856 (license license:zpl2.1)))
15857
15858(define-public python-ipython-genutils
15859 ;; TODO: This package is retired, check if can be removed, see description.
15860 (package
15861 (name "python-ipython-genutils")
15862 (version "0.1.0")
15863 (source
15864 (origin
15865 (method url-fetch)
15866 (uri (pypi-uri "ipython_genutils" version))
15867 (sha256
15868 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
15869 (build-system pyproject-build-system)
15870 (arguments `(#:tests? #f)) ; no tests
15871 (native-inputs
15872 (list python-setuptools))
15873 (home-page "https://ipython.org")
15874 (synopsis "Vestigial utilities from IPython")
15875 (description
15876 "This package provides retired utilities from IPython. No packages
15877outside IPython/Jupyter should depend on it.
15878
15879This package shouldn't exist. It contains some common utilities shared by
15880Jupyter and IPython projects during The Big Split. As soon as possible, those
15881packages will remove their dependency on this, and this package will go
15882away.")
15883 (license license:bsd-3)))
15884
15885;;; Variant used to break a cycle with python-ipykernel.
15886(define-public python-ipyparallel-bootstrap
15887 (hidden-package
15888 (package
15889 (name "python-ipyparallel-bootstrap")
15890 (version "9.0.1")
15891 (source
15892 (origin
15893 (method url-fetch)
15894 (uri (pypi-uri "ipyparallel" version))
15895 (sha256
15896 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
15897 (build-system pyproject-build-system)
15898 (arguments
15899 (list
15900 #:tests? #f
15901 #:phases #~(modify-phases %standard-phases
15902 ;; The python-ipykernel is normally propagated but is
15903 ;; removed from this package to break the cycle.
15904 (delete 'sanity-check))))
15905 (native-inputs
15906 (list python-hatchling))
15907 (propagated-inputs
15908 (list python-dateutil
15909 python-decorator
15910 python-entrypoints
15911 python-ipython
15912 ;; python-ipykernel is omitted here to break a cycle.
15913 python-jupyter-client-bootstrap
15914 python-psutil
15915 python-pyzmq
15916 python-tornado
15917 python-tqdm
15918 python-traitlets))
15919 (home-page "https://ipython.org/")
15920 (synopsis "Interactive Parallel Computing with IPython")
15921 (description
15922 "@code{ipyparallel} is a Python package and collection of CLI scripts
15923for controlling clusters for Jupyter. @code{ipyparallel} contains the
15924following CLI scripts:
15925@enumerate
15926@item ipcluster - start/stop a cluster
15927@item ipcontroller - start a scheduler
15928@item ipengine - start an engine
15929@end enumerate")
15930 (license license:bsd-3))))
15931
15932(define-public python-ipyparallel
15933 (package
15934 (inherit python-ipyparallel-bootstrap)
15935 (name "python-ipyparallel")
15936 (arguments
15937 (list
15938 #:test-flags
15939 ;; Disable warning because DeprecationWarnings make tests fail.
15940 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
15941 (native-inputs
15942 (modify-inputs native-inputs
15943 (append python-ipython
15944 python-pytest
15945 python-pytest-asyncio
15946 python-pytest-tornado
15947 python-testpath)))
15948 (propagated-inputs
15949 (modify-inputs propagated-inputs
15950 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
15951 (append python-ipykernel)))
15952 (properties (alist-delete 'hidden? (package-properties
15953 python-ipyparallel-bootstrap)))))
15954
15955;; TODO: Package python-jupysql which is the maintained fork of this one.
15956(define-public python-ipython-sql
15957 (package
15958 (name "python-ipython-sql")
15959 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
15960 (revision . "0")))
15961 (version (git-version "0.5.0"
15962 (assoc-ref properties 'revision)
15963 (assoc-ref properties 'commit)))
15964 (source
15965 (origin
15966 (method git-fetch)
15967 (uri (git-reference
15968 (url "https://github.com/catherinedevlin/ipython-sql")
15969 (commit (assoc-ref properties 'commit))))
15970 (file-name (git-file-name name version))
15971 (sha256
15972 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
15973 (build-system pyproject-build-system)
15974 (arguments
15975 (list #:tests? #f ;Fail because of prettytable.
15976 #:phases
15977 #~(modify-phases %standard-phases
15978 (replace 'check
15979 (lambda* (#:key tests? #:allow-other-keys)
15980 (setenv "HOME" (getcwd))
15981 (if tests?
15982 (invoke "ipython" "-c"
15983 "import pytest; pytest.main(['.'])")
15984 (format #t "test suite not run.~%")))))))
15985 (native-inputs (list python-pytest python-setuptools))
15986 (propagated-inputs
15987 (list python-ipython
15988 python-ipython-genutils
15989 python-prettytable
15990 python-sqlalchemy-2
15991 python-sqlparse))
15992 (home-page "https://github.com/catherinedevlin/ipython-sql")
15993 (synopsis "RDBMS access via IPython")
15994 (description "This library connects to a database, using SQLAlchemy URL
15995connect strings, then issue SQL commands within IPython or IPython Notebook.")
15996 (license license:expat)))
15997
15998(define-public python-optree
15999 (package
16000 (name "python-optree")
16001 (version "0.14.0")
16002 (source
16003 (origin
16004 (method git-fetch)
16005 (uri (git-reference
16006 (url "https://github.com/metaopt/optree")
16007 (commit (string-append "v" version))))
16008 (file-name (git-file-name name version))
16009 (sha256
16010 (base32
16011 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
16012 (build-system pyproject-build-system)
16013 (arguments
16014 (list
16015 #:test-flags
16016 ;; These tests fails due to a circular import
16017 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
16018 " and not test_import_no_warnings"))))
16019 (propagated-inputs (list python-typing-extensions))
16020 (native-inputs
16021 (list python-pytest
16022 python-setuptools
16023 python-wheel
16024 cmake-minimal
16025 pybind11-2))
16026 (home-page "https://github.com/metaopt/optree")
16027 (synopsis "Optimized PyTree Utilities")
16028 (description "This package contains operations on PyTrees (a tree made of
16029container data structures in Python).")
16030 (license license:asl2.0)))
16031
16032(define-public python-backcall
16033 (package
16034 (name "python-backcall")
16035 (version "0.2.0")
16036 (source
16037 (origin
16038 (method git-fetch)
16039 (uri (git-reference
16040 (url "https://github.com/takluyver/backcall/")
16041 (commit version)))
16042 (file-name (git-file-name name version))
16043 (sha256
16044 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
16045 (build-system pyproject-build-system)
16046 (native-inputs (list python-flit-core python-pytest))
16047 (home-page "https://github.com/takluyver/backcall/")
16048 (synopsis "Specifications for callback functions passed in to an API")
16049 (description
16050 "If your code lets other people supply callback functions, it's important
16051to specify the function signature you expect, and check that functions support
16052that. Adding extra parameters later would break other peoples code unless
16053you're careful. The @code{backcall} package provides a way of specifying the
16054callback signature using a prototype function.")
16055 (license license:bsd-3)))
16056
16057(define-public python-pubmed-parser
16058 (package
16059 (name "python-pubmed-parser")
16060 (version "0.5.1")
16061 (source (origin
16062 (method git-fetch)
16063 (uri (git-reference
16064 (url "https://github.com/titipata/pubmed_parser")
16065 (commit version)))
16066 (file-name (git-file-name name version))
16067 (sha256
16068 (base32
16069 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
16070 (build-system pyproject-build-system)
16071 (arguments (list #:tests? #f)) ;; Tests require internet
16072 (native-inputs
16073 (list python-setuptools))
16074 (propagated-inputs
16075 (list python-lxml
16076 python-numpy
16077 python-requests
16078 python-six ;hard dependency
16079 python-unidecode))
16080 (home-page "https://titipata.github.io/pubmed_parser/")
16081 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
16082 (description
16083 "This package provides a Python parser for Pubmed Open-Access Subset and
16084MEDLINE XML repository.")
16085 (license license:expat)))
16086
16087(define-public python-pure-eval
16088 (package
16089 (name "python-pure-eval")
16090 (version "0.2.3")
16091 (source
16092 (origin
16093 (method url-fetch)
16094 (uri (pypi-uri "pure_eval" version))
16095 (sha256
16096 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
16097 (build-system pyproject-build-system)
16098 (native-inputs
16099 (list python-pytest
16100 python-setuptools
16101 python-setuptools-scm
16102 python-wheel))
16103 (home-page "https://github.com/alexmojaki/pure_eval")
16104 (synopsis "Python library to evaluate abstract syntax tree nodes")
16105 (description "The @code{pure_eval} Python library can safely evaluate
16106abstract syntax tree (AST) nodes without side effects.")
16107 (license license:expat)))
16108
16109(define-public python-puremagic
16110 (package
16111 (name "python-puremagic")
16112 (version "1.28")
16113 (source
16114 (origin
16115 (method git-fetch) ;no tests in PyPI archive
16116 (uri (git-reference
16117 (url "https://github.com/cdgriffith/puremagic")
16118 (commit version)))
16119 (file-name (git-file-name name version))
16120 (sha256
16121 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
16122 (build-system pyproject-build-system)
16123 (native-inputs
16124 (list python-pytest python-setuptools python-wheel))
16125 (home-page "https://github.com/cdgriffith/puremagic")
16126 (synopsis "Pure Python implementation of magic file detection")
16127 (description
16128 "This package implements a functionality that will identify a file based
16129off it's magic numbers.")
16130 (license license:expat)))
16131
16132(define-public python-ast-decompiler
16133 (package
16134 (name "python-ast-decompiler")
16135 (version "0.7.0")
16136 (source
16137 (origin
16138 (method url-fetch)
16139 (uri (pypi-uri "ast_decompiler" version))
16140 (sha256
16141 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
16142 ;; We need to manually create an __init__.py file under the tests/
16143 ;; directory, since it is not included in the distributed
16144 ;; version. (See:
16145 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
16146 (modules '((guix build utils)))
16147 (snippet '(call-with-output-file "tests/__init__.py"
16148 (const #t)))))
16149 (build-system pyproject-build-system)
16150 (native-inputs (list python-flit-core python-pytest))
16151 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
16152 (synopsis
16153 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
16154 (description
16155 "This library provides functionality to decompile @acronym{AST, Abstract
16156Syntax Tree} objects, as generated by the standard library @code{ast} module,
16157to Python code.")
16158 (license license:asl2.0)))
16159
16160(define-public python-asttokens
16161 (package
16162 (name "python-asttokens")
16163 (version "3.0.0")
16164 (source
16165 (origin
16166 (method url-fetch)
16167 (uri (pypi-uri "asttokens" version))
16168 (sha256
16169 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
16170 (build-system pyproject-build-system)
16171 (native-inputs
16172 (list python-astroid
16173 python-pytest
16174 python-setuptools
16175 python-setuptools-scm
16176 python-wheel))
16177 (home-page "https://github.com/gristlabs/asttokens")
16178 (synopsis "Python library to annotate abstract syntax trees")
16179 (description "The @code{asttokens} module annotates Python abstract syntax
16180trees (ASTs) with the positions of tokens and text in the source code that
16181generated them. It makes it possible for tools that work with logical AST
16182nodes to find the particular text that resulted in those nodes, for example
16183for automated refactoring or highlighting.")
16184 (license license:asl2.0)))
16185
16186(define-public python-littleutils
16187 (package
16188 (name "python-littleutils")
16189 (version "0.2.4")
16190 (source
16191 (origin
16192 (method url-fetch)
16193 (uri (pypi-uri "littleutils" version))
16194 (sha256
16195 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
16196 (build-system pyproject-build-system)
16197 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
16198 (native-inputs
16199 (list python-setuptools
16200 python-setuptools-scm
16201 python-wheel))
16202 (home-page "https://github.com/alexmojaki/littleutils")
16203 (synopsis "Python utility function collection")
16204 (description "@code{littleutils} is a small collection of Python utility
16205functions, useful in the context of writing unit tests among other uses.")
16206 (license license:expat)))
16207
16208(define-public python-ipython
16209 (package
16210 (name "python-ipython")
16211 (version "9.8.0")
16212 (source
16213 (origin
16214 (method git-fetch)
16215 (uri (git-reference
16216 (url "https://github.com/ipython/ipython")
16217 (commit version)))
16218 (file-name (git-file-name name version))
16219 (sha256
16220 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
16221 (build-system pyproject-build-system)
16222 (arguments
16223 (list
16224 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
16225 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
16226 #:test-backend #~'custom
16227 ;; XXX: It's a workaround to fix the error with module import
16228 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
16229 ;; <https://codeberg.org/guix/guix/issues/2108>.
16230 #:test-flags
16231 #~(list "-m" "pytest" "-vv"
16232 "-k" (string-join
16233 ;; These need git.
16234 (list "not test_json_getsysinfo"
16235 "IPython.utils.sysinfo.sys_info"
16236 ;; Failed: DID NOT RAISE
16237 "test_timeit_raise_on_interrupt"
16238 "test_script_raise_on_interrupt"
16239 "test_time_raise_on_interrupt")
16240 " and not "))
16241 #:phases
16242 #~(modify-phases %standard-phases
16243 (add-before 'check 'pre-check
16244 (lambda _
16245 (setenv "HOME" "/tmp"))))))
16246 (propagated-inputs
16247 (list python-decorator
16248 python-ipython-pygments-lexers
16249 python-jedi
16250 python-matplotlib-inline
16251 python-pexpect
16252 python-prompt-toolkit
16253 python-pygments
16254 python-stack-data
16255 python-traitlets
16256 python-typing-extensions))
16257 (native-inputs
16258 (list python-pytest
16259 python-pytest-asyncio
16260 python-setuptools
16261 python-testpath
16262 ;; [extra]
16263 ;; python-curio ;deprecated
16264 ;; python-ipykernel ;cycles
16265 ;; python-jupyter-ai ;not packaged
16266 python-matplotlib
16267 ;; python-nbclient ;cycles
16268 python-nbformat
16269 python-numpy
16270 python-pandas
16271 python-trio))
16272 (home-page "https://ipython.org")
16273 (synopsis "IPython is a tool for interactive computing in Python")
16274 (description
16275 "IPython provides a rich architecture for interactive computing with:
16276Powerful interactive shells, a browser-based notebook, support for interactive
16277data visualization, embeddable interpreters and tools for parallel
16278computing.")
16279 (properties '((cpe-name . "ipython")))
16280 (license license:bsd-3)))
16281
16282(define-public python-ipython-documentation
16283 (package
16284 (inherit python-ipython)
16285 (name "python-ipython-documentation")
16286 (version (package-version python-ipython))
16287 (arguments
16288 (list
16289 #:phases
16290 #~(modify-phases %standard-phases
16291 (add-after 'unpack 'set-pythonpath
16292 (lambda _
16293 ;; Ensure this fixed (via the
16294 ;; "python-ipython-documentation-chars.patch" patch) copy of
16295 ;; IPython gets used.
16296 (setenv "PYTHONPATH" (string-append (getcwd)))))
16297 (delete 'build)
16298 (delete 'check)
16299 (replace 'install
16300 (lambda* (#:key outputs #:allow-other-keys)
16301 (let* ((data (string-append #$output "/share"))
16302 (doc (string-append data "/doc/" #$name "-" #$version))
16303 (html (string-append doc "/html"))
16304 (info (string-append data "/info")))
16305 (invoke "make" "-C" "docs" "info" "html"
16306 (string-append "SPHINXOPTS=-j"
16307 (number->string (parallel-job-count))))
16308 (install-file "COPYING.rst" doc)
16309 (copy-recursively "examples" (string-append doc "/examples"))
16310 ;; Install HTML documentation.
16311 (copy-recursively "docs/build/html" html)
16312 ;; Likewise for the info manual.
16313 (install-file "docs/build/texinfo/ipython.info" info)
16314 (symlink (string-append html "/_images")
16315 (string-append info "/ipython-figures"))))))))
16316 (native-inputs
16317 (list graphviz
16318 python-docrepr
16319 python-ipykernel
16320 python-sphinx
16321 python-sphinx-rtd-theme
16322 python-sphinx-toml
16323 texinfo))))
16324
16325;; A bare minimal package, mainly to use in tests and reduce closure
16326;; size. Tests are left out in the main package to slim down native-inputs.
16327(define-public python-ipython-minimal
16328 (package/inherit python-ipython
16329 (name "python-ipython-minimal")
16330 (arguments
16331 (list #:tests? #f))
16332 (native-inputs
16333 (list python-setuptools))))
16334
16335(define-public python-ipython-pygments-lexers
16336 (package
16337 (name "python-ipython-pygments-lexers")
16338 (version "1.1.1")
16339 (source
16340 (origin
16341 (method git-fetch)
16342 (uri (git-reference
16343 (url "https://github.com/ipython/ipython-pygments-lexers/")
16344 (commit version)))
16345 (file-name (git-file-name name version))
16346 (sha256
16347 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
16348 (build-system pyproject-build-system)
16349 (propagated-inputs (list python-pygments))
16350 (native-inputs (list python-flit-core python-pytest))
16351 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
16352 (synopsis "Plugin for IPython code sessions")
16353 (description
16354 "This package defines a variety of Pygments lexers for highlighting IPython
16355code.")
16356 (license license:bsd-3)))
16357
16358(define-public python-pydbus
16359 (package
16360 (name "python-pydbus")
16361 (version "0.6.0")
16362 (source
16363 (origin
16364 (method url-fetch)
16365 (uri (pypi-uri "pydbus" version))
16366 (sha256
16367 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
16368 (build-system pyproject-build-system)
16369 (arguments
16370 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
16371 #:phases
16372 #~(modify-phases %standard-phases
16373 (add-after 'unpack 'fix-comparability-with-pygobject
16374 (lambda _
16375 (substitute* "pydbus/_inspect3.py"
16376 (("getargspec")
16377 "getfullargspec")))))))
16378 (native-inputs
16379 (list python-setuptools
16380 python-wheel))
16381 (propagated-inputs
16382 (list python-pygobject))
16383 (home-page "https://github.com/LEW21/pydbus")
16384 (synopsis "Pythonic D-Bus library")
16385 (description
16386 "Pydbus provides a pythonic interface to the D-Bus message bus system.
16387Pydbus can be used to access remote objects and also for object publication.
16388It is based on PyGI, the Python GObject Introspection bindings, which is the
16389recommended way to use GLib from Python.")
16390 (license license:lgpl2.1+)))
16391
16392(define-public python-dbus-1.2
16393 (package
16394 (name "python-dbus")
16395 (version "1.2.18")
16396 (source
16397 (origin
16398 (method url-fetch)
16399 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
16400 "dbus-python-" version ".tar.gz"))
16401 (sha256
16402 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
16403 (build-system gnu-build-system)
16404 (native-inputs
16405 (list pkg-config
16406 python-setuptools))
16407 (inputs
16408 `(("python" ,python-wrapper)
16409 ("dbus-glib" ,dbus-glib)))
16410 (synopsis "Python bindings for D-bus")
16411 (description "python-dbus provides bindings for libdbus, the reference
16412implementation of D-Bus.")
16413 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
16414 (license license:expat)))
16415
16416(define-public python-dasbus
16417 (package
16418 (name "python-dasbus")
16419 (version "1.7")
16420 (source
16421 (origin
16422 (method git-fetch)
16423 (uri (git-reference
16424 (url "https://github.com/dasbus-project/dasbus")
16425 (commit (string-append "v" version))))
16426 (file-name (git-file-name name version))
16427 (sha256
16428 (base32 "1dii0skg7pqi4jhy1dkshqmn49i5ngq92sw7w7j4sxd3g8pjhj46"))))
16429 (build-system pyproject-build-system)
16430 (arguments
16431 (list
16432 #:phases
16433 #~(modify-phases %standard-phases
16434 (replace 'check
16435 (lambda* (#:key tests? (test-flags '()) #:allow-other-keys)
16436 (when tests?
16437 (apply invoke "dbus-launch" "pytest" "-vv" test-flags)))))))
16438 (native-inputs
16439 (list dbus
16440 python-hatchling
16441 python-pytest
16442 python-setuptools))
16443 (propagated-inputs
16444 (list python-pygobject))
16445 (home-page "https://dasbus.readthedocs.io/")
16446 (synopsis "DBus library in Python")
16447 (description
16448 "This DBus library is written in Python, based on GLib and inspired by
16449@code{pydbus}.")
16450 (license license:lgpl2.1+)))
16451
16452(define-public python-notify2
16453 (package
16454 (name "python-notify2")
16455 (version "0.3.1")
16456 (source
16457 (origin
16458 (method url-fetch)
16459 (uri (pypi-uri "notify2" version))
16460 (sha256
16461 (base32
16462 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
16463 (build-system pyproject-build-system)
16464 (arguments (list #:tests? #f)) ; tests depend on system state
16465 (native-inputs (list python-setuptools))
16466 (propagated-inputs (list python-dbus))
16467 (home-page "https://bitbucket.org/takluyver/pynotify2")
16468 (synopsis "Python interface to D-Bus notifications")
16469 (description
16470 "Pynotify2 provides a Python interface for sending D-Bus notifications.
16471It is a reimplementation of pynotify in pure Python, and an alternative to
16472the GObject Introspection bindings to libnotify for non-GTK applications.")
16473 (license (list license:bsd-2
16474 license:lgpl2.1+))))
16475
16476;; beautifulsoup4 has a totally different namespace than 3.x,
16477;; and pypi seems to put it under its own name, so I guess we should too
16478(define-public python-beautifulsoup4
16479 (package
16480 (name "python-beautifulsoup4")
16481 (version "4.14.3")
16482 (source
16483 (origin
16484 (method url-fetch)
16485 (uri (pypi-uri "beautifulsoup4" version))
16486 (sha256
16487 (base32
16488 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
16489 (build-system pyproject-build-system)
16490 (native-inputs
16491 (list python-hatchling
16492 python-pytest))
16493 (propagated-inputs
16494 (list python-soupsieve
16495 python-typing-extensions
16496 ;; [optional]
16497 python-cchardet
16498 python-chardet
16499 python-charset-normalizer
16500 python-html5lib
16501 python-lxml))
16502 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
16503 (synopsis "Python screen-scraping library")
16504 (description
16505 "Beautiful Soup is a Python library designed for rapidly setting up
16506screen-scraping projects. It offers Pythonic idioms for navigating,
16507searching, and modifying a parse tree, providing a toolkit for
16508dissecting a document and extracting what you need. It automatically
16509converts incoming documents to Unicode and outgoing documents to UTF-8.")
16510 (license license:expat)))
16511
16512(define-public python-beautifulsoup4-bootstrap
16513 (hidden-package
16514 (package/inherit python-beautifulsoup4
16515 (arguments
16516 (list #:tests? #f))
16517 (native-inputs
16518 (list python-hatchling))
16519 (propagated-inputs '()))))
16520
16521
16522(define-public python-netifaces
16523 (package
16524 (name "python-netifaces")
16525 (version "0.11.0")
16526 (source
16527 (origin
16528 (method url-fetch)
16529 (uri (pypi-uri "netifaces" version))
16530 (sha256
16531 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16532 (build-system pyproject-build-system)
16533 (arguments
16534 (list
16535 #:test-backend #~'custom
16536 #:test-flags #~(list "test.py")))
16537 (native-inputs (list python-setuptools))
16538 (home-page "https://github.com/al45tair/netifaces")
16539 (synopsis "Python module for portable network interface information")
16540 (description
16541 "Netifaces is a Python module providing information on network
16542interfaces in an easy and portable manner.")
16543 (license license:expat)))
16544
16545(define-public python-networkx
16546 (package
16547 (name "python-networkx")
16548 (version "3.4.2")
16549 (source
16550 (origin
16551 (method url-fetch)
16552 (uri (pypi-uri "networkx" version))
16553 (sha256
16554 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16555 (build-system pyproject-build-system)
16556 (arguments
16557 (list
16558 #:test-flags
16559 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16560 (native-inputs
16561 (list python-pytest
16562 python-pytest-xdist
16563 python-setuptools
16564 python-wheel))
16565 (propagated-inputs
16566 (list python-decorator))
16567 (home-page "https://networkx.github.io/")
16568 (synopsis "Python module for creating and manipulating graphs and networks")
16569 (description
16570 "NetworkX is a Python package for the creation, manipulation, and study
16571of the structure, dynamics, and functions of complex networks.")
16572 (license license:bsd-3)))
16573
16574(define-public python-datrie
16575 (package
16576 (name "python-datrie")
16577 (version "0.8.3")
16578 (source
16579 (origin
16580 (method git-fetch)
16581 (uri (git-reference
16582 (url "https://github.com/kmike/datrie")
16583 (commit version)))
16584 (file-name (git-file-name name version))
16585 (sha256
16586 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16587 (build-system pyproject-build-system)
16588 (arguments
16589 (list
16590 #:phases
16591 #~(modify-phases %standard-phases
16592 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16593 (lambda* (#:key inputs #:allow-other-keys)
16594 (let* ((headers (search-input-directory inputs
16595 "include/datrie"))
16596 (base (dirname (dirname headers))))
16597 (symlink headers "libdatrie/datrie")
16598 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16599 (add-before 'build 'relax-gcc-14-strictness
16600 (lambda _
16601 (setenv "CFLAGS"
16602 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16603 (native-inputs
16604 (list python-cython python-hypothesis python-pytest python-setuptools))
16605 (inputs (list libdatrie))
16606 (home-page "https://github.com/kmike/datrie")
16607 (synopsis "Fast, efficiently stored trie for Python")
16608 (description
16609 "This package provides a fast, efficiently stored trie implementation for
16610Python.")
16611 (license license:lgpl2.1+)))
16612
16613(define-public python-amply
16614 (package
16615 (name "python-amply")
16616 (version "0.1.6")
16617 (source
16618 (origin
16619 (method url-fetch)
16620 (uri (pypi-uri "amply" version))
16621 (sha256
16622 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16623 (build-system pyproject-build-system)
16624 (native-inputs
16625 (list python-pytest
16626 python-setuptools
16627 python-setuptools-scm
16628 python-wheel))
16629 (propagated-inputs
16630 (list python-docutils
16631 python-pyparsing))
16632 (home-page "https://github.com/willu47/amply")
16633 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16634 (description
16635 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16636structures.")
16637 (license license:epl1.0)))
16638
16639(define-public python-pulp
16640 ;; When updating, check snakemake@N builds still fine, see:
16641 ;; <https://codeberg.org/guix/guix/issues/4782>.
16642 (package
16643 (name "python-pulp")
16644 (version "2.4")
16645 (source
16646 (origin
16647 (method url-fetch)
16648 (uri (pypi-uri "PuLP" version))
16649 (sha256
16650 (base32
16651 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
16652 (build-system pyproject-build-system)
16653 (arguments
16654 ;; TODO: They need a special setup, see:
16655 ;; <https://codeberg.org/guix/guix/pulls/4908>.
16656 (list #:tests? #f))
16657 (native-inputs
16658 (list python-setuptools))
16659 (propagated-inputs
16660 (list python-amply))
16661 (home-page "https://github.com/coin-or/pulp")
16662 (synopsis "Linear Programming modeler")
16663 (description
16664 "PuLP is a Linear Programming modeler written in Python. PuLP can
16665generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16666solve linear problems.")
16667 (license license:expat)))
16668
16669(define-public python-py-partiql-parser
16670 (package
16671 (name "python-py-partiql-parser")
16672 (version "0.6.3")
16673 (source
16674 (origin
16675 (method git-fetch)
16676 (uri (git-reference
16677 (url "https://github.com/getmoto/py-partiql-parser")
16678 (commit version)))
16679 (file-name (git-file-name name version))
16680 (sha256
16681 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16682 (build-system pyproject-build-system)
16683 (native-inputs
16684 (list python-hatchling
16685 python-pytest))
16686 (home-page "https://pypi.org/project/py-partiql-parser/")
16687 (synopsis "Pure Python PartiQL Parser")
16688 (description
16689 "This package provides a tokenizer/parser/executor for the PartiQL
16690language, in Python.")
16691 (license license:expat)))
16692
16693(define-public python-py-tes
16694 (package
16695 (name "python-py-tes")
16696 (version "0.4.2")
16697 (source
16698 (origin
16699 (method git-fetch)
16700 (uri (git-reference
16701 (url "https://github.com/ohsu-comp-bio/py-tes")
16702 (commit version)))
16703 (file-name (git-file-name name version))
16704 (sha256
16705 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16706 (build-system pyproject-build-system)
16707 (native-inputs
16708 (list python-pytest python-requests-mock python-setuptools))
16709 (propagated-inputs
16710 (list python-attrs python-dateutil python-future python-requests))
16711 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16712 (synopsis "Library for communicating with the GA4GH Task Execution API")
16713 (description "This package provides a library for communicating with the
16714GA4GH Task Execution API.")
16715 (license license:expat)))
16716
16717(define-public python-altgraph
16718 (package
16719 (name "python-altgraph")
16720 (version "0.17.4")
16721 (source
16722 (origin
16723 (method url-fetch)
16724 (uri (pypi-uri "altgraph" version))
16725 (sha256
16726 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16727 (build-system pyproject-build-system)
16728 (native-inputs (list python-pytest python-setuptools python-wheel))
16729 (home-page "https://altgraph.readthedocs.io")
16730 (synopsis "Python graph network package")
16731 (description
16732"This package provides tools for constructing graphs, BFS and DFS
16733traversals, topological sort, shortest paths, and more with graphviz
16734output.")
16735 (license license:expat)))
16736
16737(define-public python-pyqrcode
16738 (package
16739 (name "python-pyqrcode")
16740 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16741 (revision . "0")))
16742 (version (git-version "1.2.1"
16743 (assoc-ref properties 'revision)
16744 (assoc-ref properties 'commit)))
16745 (source
16746 (origin
16747 (method git-fetch)
16748 (uri (git-reference
16749 (url "https://github.com/mnooner256/pyqrcode")
16750 (commit (assoc-ref properties 'commit))))
16751 (file-name (git-file-name name version))
16752 (sha256
16753 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16754 (build-system pyproject-build-system)
16755 (arguments (list #:test-backend #~'nose))
16756 (native-inputs (list python-pynose python-pypng python-setuptools))
16757 (home-page "https://github.com/mnooner256/pyqrcode")
16758 (synopsis "QR code generator")
16759 (description
16760 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16761PNG and terminal output.")
16762 (license license:bsd-3)))
16763
16764(define-public python-seaborn
16765 (package
16766 (name "python-seaborn")
16767 (version "0.13.2")
16768 (source (origin
16769 (method url-fetch)
16770 (uri (pypi-uri "seaborn" version))
16771 (sha256
16772 (base32
16773 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
16774 (build-system pyproject-build-system)
16775 (arguments
16776 (list
16777 ;; tests: 2354 passed, 16 skipped, 6 xfailed, 224 warnings
16778 #:test-flags
16779 #~(list "--numprocesses" (number->string (parallel-job-count))
16780 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
16781 ;; KeyError: 'labelleft'
16782 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
16783 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
16784 ;; AttributeError: module 'numpy' has no attribute
16785 ;; 'VisibleDeprecationWarning'
16786 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
16787 (native-inputs
16788 (list python-flit-core
16789 python-pytest-8
16790 python-pytest-xdist))
16791 (propagated-inputs
16792 (list python-matplotlib
16793 python-numpy
16794 python-pandas
16795 python-scipy
16796 python-statsmodels))
16797 (home-page "https://seaborn.pydata.org/")
16798 (synopsis "Statistical data visualization")
16799 (description
16800 "Seaborn is a library for making attractive and informative statistical
16801graphics in Python. It is built on top of matplotlib and tightly integrated
16802with the PyData stack, including support for numpy and pandas data structures
16803and statistical routines from scipy and statsmodels.")
16804 (license license:bsd-3)))
16805
16806(define-public python-session-info
16807 (package
16808 (name "python-session-info")
16809 (version "1.0.0")
16810 (source
16811 (origin
16812 (method git-fetch)
16813 (uri (git-reference
16814 (url "https://gitlab.com/joelostblom/session_info")
16815 (commit version)))
16816 (file-name (git-file-name name version))
16817 (sha256
16818 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
16819 (build-system pyproject-build-system)
16820 (arguments (list #:tests? #f)) ; No tests.
16821 (native-inputs (list python-setuptools))
16822 (propagated-inputs (list python-stdlib-list))
16823 (home-page "https://gitlab.com/joelostblom/session_info")
16824 (synopsis "Output version information for modules currently loaded")
16825 (description
16826 "This package outputs version information for modules loaded in the current
16827session, Python, and the OS.")
16828 (license license:bsd-3)))
16829
16830(define-public python-mpmath
16831 (package
16832 (name "python-mpmath")
16833 (version "1.3.0")
16834 (source
16835 (origin
16836 (method git-fetch)
16837 (uri (git-reference
16838 (url "https://github.com/fredrik-johansson/mpmath")
16839 (commit version)))
16840 (file-name (git-file-name name version))
16841 (sha256
16842 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
16843 (build-system pyproject-build-system)
16844 (native-inputs
16845 (list python-pytest
16846 python-setuptools
16847 python-setuptools-scm))
16848 (home-page "https://mpmath.org")
16849 (synopsis "Arbitrary-precision floating-point arithmetic in python")
16850 (description
16851 "@code{mpmath} can be used as an arbitrary-precision substitute for
16852Python's float/complex types and math/cmath modules, but also does much
16853more advanced mathematics.")
16854 (license license:bsd-3)))
16855
16856(define-public python-bigfloat
16857 (package
16858 (name "python-bigfloat")
16859 (version "0.4.0")
16860 (source
16861 (origin
16862 (method url-fetch)
16863 (uri (pypi-uri "bigfloat" version))
16864 (sha256
16865 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
16866 (snippet '(delete-file "mpfr.c"))))
16867 (build-system pyproject-build-system)
16868 (arguments
16869 (list
16870 #:test-flags
16871 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
16872 ;; but I don't know what to do about it.
16873 '(list "-k" "not test_hash")
16874 #:phases
16875 '(modify-phases %standard-phases
16876 (add-before 'build 'cythonize
16877 (lambda _ (invoke "cython" "mpfr.pyx"))))))
16878 (inputs (list mpfr))
16879 (native-inputs
16880 (list python-cython python-pytest python-setuptools python-wheel))
16881 (propagated-inputs
16882 (list python-six))
16883 (home-page "https://github.com/mdickinson/bigfloat")
16884 (synopsis "Arbitrary precision floating-point arithmetic for Python")
16885 (description
16886 "This package provides a Python interface to the MPFR library for
16887multiprecision arithmetic.")
16888 (license license:lgpl3+)))
16889
16890(define-public python-plac
16891 (package
16892 (name "python-plac")
16893 (version "1.4.3")
16894 (source
16895 (origin
16896 (method git-fetch)
16897 (uri (git-reference
16898 (url "https://github.com/ialbert/plac")
16899 (commit (string-append "v" version))))
16900 (file-name (git-file-name name version))
16901 (sha256
16902 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
16903 (build-system pyproject-build-system)
16904 (arguments
16905 (list
16906 #:phases
16907 #~(modify-phases %standard-phases
16908 (add-after 'unpack 'fix-tkinter
16909 (lambda _
16910 (substitute* "plac_tk.py"
16911 (("from Tkinter import Tk")
16912 "from tkinter import Tk")
16913 (("from ScrolledText import ScrolledText")
16914 "from tkinter.scrolledtext import ScrolledText")))))))
16915 (native-inputs
16916 (list (list python "tk") python-pytest python-setuptools))
16917 (home-page "https://github.com/ialbert/plac")
16918 (synopsis "Command line arguments parser")
16919 (description
16920 "This package can generate command line parameters from function
16921signatures.")
16922 (license license:bsd-3)))
16923
16924(define-public python-q
16925 (package
16926 (name "python-q")
16927 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
16928 (revision . "0")))
16929 (version (git-version "2.7"
16930 (assoc-ref properties 'revision)
16931 (assoc-ref properties 'commit)))
16932 (source
16933 (origin
16934 (method git-fetch)
16935 (uri (git-reference
16936 (url "https://github.com/zestyping/q")
16937 (commit (assoc-ref properties 'commit))))
16938 (file-name (git-file-name name version))
16939 (sha256
16940 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
16941 (build-system pyproject-build-system)
16942 (arguments
16943 (list
16944 ;; Deduced from the makefile.
16945 #:test-backend #~'custom
16946 #:test-flags #~(list "test/test_basic.py")
16947 #:phases
16948 #~(modify-phases %standard-phases
16949 (add-before 'check 'configure-tests
16950 (lambda* (#:key tests? #:allow-other-keys)
16951 (when tests?
16952 (setenv "TMPDIR" "/tmp")))))))
16953 (native-inputs (list python-setuptools))
16954 (home-page "https://github.com/zestyping/q")
16955 (synopsis "Quick-and-dirty debugging output for tired programmers")
16956 (description
16957 "q is a Python module for \"print\" style of debugging Python code. It
16958provides convenient short API for print out of values, tracebacks, and
16959falling into the Python interpreter.")
16960 (license license:asl2.0)))
16961
16962(define-public python-qnorm
16963 (package
16964 (name "python-qnorm")
16965 (version "0.9.0")
16966 (source
16967 (origin
16968 (method git-fetch)
16969 (uri (git-reference
16970 (url "https://github.com/Maarten-vd-Sande/qnorm")
16971 (commit (string-append "v" version))))
16972 (file-name (git-file-name name version))
16973 (sha256
16974 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
16975 (build-system pyproject-build-system)
16976 (propagated-inputs
16977 (list python-numba python-numpy python-pandas
16978 ;; XXX: pandas optional dependencies.
16979 python-tables python-pyarrow python-fastparquet))
16980 (native-inputs (list python-setuptools))
16981 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
16982 (synopsis "Quantile normalization")
16983 (description
16984 "This tool implements quantile normalization. It properly resolves rank
16985ties, which is important when ties happen frequently, such as when working
16986with discrete numbers (integers) in count tables. This implementation should
16987be relatively fast, and can use multiple cores to sort the columns and
16988tie-resolvement is accelerated by numba.")
16989 (license license:expat)))
16990
16991(define-public python-quantlaw
16992 (package
16993 (name "python-quantlaw")
16994 (version "0.0.7")
16995 (source
16996 (origin
16997 (method git-fetch)
16998 (uri (git-reference
16999 (url "https://github.com/Quantlaw/quantlaw")
17000 (commit (string-append "v" version))))
17001 (file-name (git-file-name name version))
17002 (sha256
17003 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
17004 (build-system pyproject-build-system)
17005 (arguments
17006 (list
17007 #:test-flags
17008 #~(list "-k"
17009 ;; test expects network access
17010 "not test_load_statue_names")))
17011 (native-inputs (list python-pytest python-setuptools))
17012 (propagated-inputs (list python-beautifulsoup4 python-networkx
17013 python-pandas python-regex python-requests))
17014 (home-page "https://quantlaw.readthedocs.io/")
17015 (synopsis "Coding utilities for quantitative legal studies")
17016 (description
17017 "This package provides coding utilities for quantitative legal studies.")
17018 (license license:bsd-3)))
17019
17020(define-public python-singledispatch
17021 (package
17022 (name "python-singledispatch")
17023 (version "4.0.0")
17024 (source
17025 (origin
17026 (method url-fetch)
17027 (uri (pypi-uri "singledispatch" version))
17028 (sha256
17029 (base32
17030 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
17031 (build-system pyproject-build-system)
17032 (native-inputs
17033 (list python-pytest
17034 python-setuptools
17035 python-six ; required for conversion, not at run-time
17036 python-wheel))
17037 (home-page
17038 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
17039 (synopsis "Backport of singledispatch feature from Python 3.4")
17040 (description
17041 "This library brings functools.singledispatch from Python 3.4 to Python
170422.6-3.3.")
17043 (license license:expat)))
17044
17045(define-public python-pyzmq
17046 (package
17047 (name "python-pyzmq")
17048 (version "27.1.0")
17049 (source
17050 (origin
17051 (method git-fetch)
17052 (uri (git-reference
17053 (url "https://github.com/zeromq/pyzmq")
17054 (commit (string-append "v" version))))
17055 (file-name (git-file-name name version))
17056 (sha256
17057 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
17058 (build-system pyproject-build-system)
17059 (arguments
17060 (list
17061 #:test-flags
17062 '(list "-m" "not flaky")
17063 #:phases
17064 #~(modify-phases %standard-phases
17065 (add-before 'build 'configure
17066 (lambda _
17067 ;; Our zeromq package is built with '--enable-drafts'; also
17068 ;; enable draft support for pyzmq so the draft test passes.
17069 (setenv "ZMQ_DRAFT_API" "1")
17070 ;; Make sure to prevent building bundled libzmq.
17071 (setenv "PYZMQ_NO_BUNDLE" "1")))
17072 (add-before 'check 'delete-source
17073 ;; To prevent loading it and skip build extensions one more times.
17074 (lambda _
17075 (delete-file-recursively "zmq"))))))
17076 (native-inputs
17077 (list cmake-minimal
17078 ;; python-cffi ; for PyPy
17079 python-cython
17080 python-packaging
17081 python-pytest
17082 python-pytest-asyncio
17083 python-scikit-build-core
17084 python-tornado))
17085 (inputs
17086 (list libsodium
17087 zeromq))
17088 (home-page "https://github.com/zeromq/pyzmq")
17089 (synopsis "Python bindings for 0MQ")
17090 (description
17091 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
17092 (license license:bsd-4)))
17093
17094(define-public python-immutabledict
17095 (package
17096 (name "python-immutabledict")
17097 (version "4.2.0")
17098 (source
17099 (origin
17100 (method url-fetch)
17101 (uri (pypi-uri "immutabledict" version))
17102 (sha256
17103 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
17104 (build-system pyproject-build-system)
17105 (native-inputs
17106 (list python-poetry-core python-pytest))
17107 (home-page "https://github.com/corenting/immutabledict")
17108 (synopsis "Immutable wrapper around dictionaries")
17109 (description
17110 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
17111It implements the complete mapping interface and can be used as a drop-in
17112replacement for dictionaries where immutability is desired.")
17113 (license license:expat)))
17114
17115(define-public python-emoji
17116 (package
17117 (name "python-emoji")
17118 (version "2.12.1")
17119 (source
17120 (origin
17121 (method url-fetch)
17122 (uri (pypi-uri "emoji" version))
17123 (sha256
17124 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
17125 (build-system pyproject-build-system)
17126 (propagated-inputs (list python-typing-extensions))
17127 (native-inputs
17128 (list python-pytest
17129 python-setuptools
17130 python-wheel))
17131 (home-page "https://github.com/carpedm20/emoji/")
17132 (synopsis "Emoji terminal output for Python")
17133 (description
17134 "This package provides Emoji terminal output for Python. The
17135entire set of Emoji codes as defined by the Unicode Consortium is supported in
17136addition to a bunch of aliases.")
17137 (license license:bsd-3)))
17138
17139;; TODO: Remove this package when upgrading python-gh-md-to-html to the
17140;; latest version. The latest gh-md-to-html does not build successfully from
17141;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
17142;; version 1.21.2 from failing.
17143;; https://issues.guix.gnu.org/72102
17144;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
17145(define-public python-emoji-for-gh-md-to-html
17146 (package
17147 (inherit python-emoji)
17148 (version "1.6.1")
17149 (source
17150 (origin
17151 (method url-fetch)
17152 (uri (pypi-uri "emoji" version))
17153 (sha256
17154 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
17155
17156(define-public python-sarge
17157 (package
17158 (name "python-sarge")
17159 (version "0.1.7.post1") ;post release only to correct errors in metadata
17160 (source
17161 (origin
17162 (method git-fetch)
17163 (uri (git-reference
17164 (url "https://github.com/vsajip/sarge")
17165 (commit version)))
17166 (file-name (git-file-name name version))
17167 (sha256
17168 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
17169 (build-system pyproject-build-system)
17170 (native-inputs (list python-pytest python-setuptools))
17171 (home-page "https://docs.red-dove.com/sarge/")
17172 (synopsis "Subprocess wrapper with command pipeline functionality")
17173 (description "@code{sarge} is a wrapper for subprocess which provides
17174command pipeline functionality.")
17175 (license license:bsd-3)))
17176
17177(define-public python-sentry-sdk
17178 ;; TODO: Move to (gnu packages python-web).
17179 (package
17180 (name "python-sentry-sdk")
17181 (version "2.59.0")
17182 (source
17183 (origin
17184 (method git-fetch)
17185 (uri (git-reference
17186 (url "https://github.com/getsentry/sentry-python")
17187 (commit version)))
17188 (file-name (git-file-name name version))
17189 (sha256
17190 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
17191 (build-system pyproject-build-system)
17192 (arguments
17193 (list
17194 ;; tests: 2119 passed, 128 skipped, 224 warnings
17195 #:test-flags
17196 #~(list "--durations=10"
17197 "--numprocesses" (number->string (parallel-job-count))
17198 ;; The whole test suite is quite shaky, may fail unpredictably
17199 ;; and depends on many additional inputs to enable all
17200 ;; integration tests.
17201 "-k" (string-join
17202 (list "not test_aggregates"
17203 "test_aggregates_deprecated"
17204 (string-append "test_aggregates_explicitly_disabled"
17205 "_session_tracking_request_mode")
17206 (string-append "test_aggregates_explicitly_disabled"
17207 "_session_tracking_request"
17208 "_mode_deprecated")
17209 "test_auto_session_tracking_with_aggregates[False]"
17210 "test_auto_session_tracking_with_aggregates[True]"
17211 "test_basic"
17212 "test_default_attributes"
17213 "test_default_release"
17214 (string-append "test_ensure_integration_enabled"
17215 "_no_original_function_enabled")
17216 "test_logger_with_all_attributes"
17217 "test_merging"
17218 (string-append "test_session_mode_defaults_to"
17219 "_request_mode_in_wsgi_handler"))
17220 " and not "))
17221 #:phases
17222 #~(modify-phases %standard-phases
17223 (add-after 'unpack 'fix-pytest-config
17224 (lambda _
17225 ;; Tests run in debug mode which generats a lot of noise.
17226 (delete-file "tox.ini")
17227 (substitute* "pyproject.toml"
17228 (("addopts =.*") "")))))))
17229 (native-inputs
17230 (list nss-certs-for-test
17231 python-brotli
17232 python-jsonschema
17233 python-mock
17234 python-pysocks
17235 python-pytest
17236 python-pytest-aiohttp
17237 python-pytest-asyncio
17238 python-pytest-localserver
17239 python-pytest-timeout
17240 python-pytest-xdist
17241 python-responses
17242 python-setuptools
17243 python-socksio))
17244 (propagated-inputs
17245 (list python-certifi
17246 python-urllib3
17247 ;; [optional]
17248 ;; python-unleashclient
17249 python-aiohttp
17250 ;; python-anthropic
17251 ;; python-apache-beam
17252 ;; python-arq
17253 python-asttokens
17254 ;; python-asyncpg
17255 ;; python-blinker
17256 ;; python-bottle
17257 ;; python-celery
17258 ;; python-celery-redbeat
17259 ;; python-chalice
17260 ;; python-clickhouse-driver
17261 ;; python-django
17262 python-executing
17263 ;; python-falcon
17264 ;; python-fastapi
17265 ;; python-flask
17266 ;; python-google-genai
17267 ;; python-grpcio
17268 python-httpcore
17269 ;; python-httpx
17270 ;; python-huey
17271 ;; python-huggingface-hub
17272 ;; python-langchain
17273 ;; python-langgraph
17274 ;; python-launchdarkly-server-sdk
17275 ;; python-litellm
17276 ;; python-litestar
17277 ;; python-loguru
17278 ;; python-markupsafe
17279 ;; python-mcp
17280 ;; python-openai
17281 ;; python-openfeature-sdk
17282 ;; python-opentelemetry-distro
17283 ;; python-protobuf
17284 ;; python-pure-eval
17285 ;; python-pydantic-ai
17286 ;; python-pymongo
17287 ;; python-pyspark
17288 ;; python-quart
17289 ;; python-rq
17290 ;; python-sanic
17291 ;; python-sqlalchemy
17292 ;; python-starlette
17293 ;; python-starlite
17294 ;; python-statsig
17295 ;; python-tiktoken
17296 #;python-tornado))
17297 (home-page "https://github.com/getsentry/sentry-python")
17298 (synopsis "Python SDK for Sentry")
17299 (description "This package provides a Python SDK for the Sentry
17300application monitoring and error tracking software.")
17301 (license license:bsd-2)))
17302
17303;; A bare minimal package, mainly to use in tests and reduce closure
17304;; size. Tests are left out in the main package to slim down native-inputs.
17305(define-public python-sentry-sdk-minimal
17306 (package/inherit python-sentry-sdk
17307 (name "python-sentry-sdk-minimal")
17308 (arguments
17309 (list #:tests? #f))
17310 (native-inputs
17311 (list python-setuptools))
17312 (propagated-inputs
17313 (list python-certifi
17314 python-urllib3))))
17315
17316(define-public python-pep440
17317 (package
17318 (name "python-pep440")
17319 (version "0.1.2")
17320 (source
17321 (origin
17322 (method url-fetch)
17323 (uri (pypi-uri "pep440" version))
17324 (sha256
17325 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
17326 (build-system pyproject-build-system)
17327 (arguments
17328 ;; This checks for "pep440" in the output, but we actually print
17329 ;; ".pep440-real" due to wrapping.
17330 (list #:test-flags '(list "-k" "not test_cli_help")))
17331 (propagated-inputs (list python-check-manifest python-mypy python-pytest
17332 python-pytest-console-scripts python-pytest-cov))
17333 (native-inputs (list python-flit-core))
17334 (home-page "https://pypi.org/project/pep440/")
17335 (synopsis "Utils to check whether versions number match PEP 440")
17336 (description
17337 "This package provides a simple package with utils to check whether
17338versions number match PEP 440.")
17339 (license license:expat)))
17340
17341(define-public python-pyproject-metadata
17342 (package
17343 (name "python-pyproject-metadata")
17344 (version "0.10.0")
17345 (source
17346 (origin
17347 (method git-fetch)
17348 (uri (git-reference
17349 (url "https://github.com/FFY00/python-pyproject-metadata")
17350 (commit version)))
17351 (file-name (git-file-name name version))
17352 (sha256
17353 (base32 "1vz2dx46ag42bqp81frd92pfnryfdry6112g6z5inrywqs8vymkw"))))
17354 (build-system pyproject-build-system)
17355 (arguments
17356 (list
17357 #:test-flags
17358 ;; Two tests fail because the error message slightly changed, so the
17359 ;; tests' regular expressions no longer match.
17360 '(list "--ignore=tests/test_standard_metadata.py")))
17361 (propagated-inputs (list python-packaging))
17362 (native-inputs
17363 (list python-flit-core python-pytest python-tomli))
17364 (home-page "https://github.com/FFY00/python-pyproject-metadata")
17365 (synopsis "Dataclass for PEP 621 metadata")
17366 (description "This project does not implement the parsing of
17367@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
17368data structure representing PEP 621 metadata (already parsed), it will
17369validate this input and generate a PEP 643-compliant metadata
17370file (e.g. @file{PKG-INFO}).")
17371 (license license:expat)))
17372
17373(define-public python-meson
17374 (package
17375 (name "python-meson")
17376 (version "0.19.0")
17377 (source
17378 (origin
17379 (method git-fetch)
17380 (uri (git-reference
17381 (url "https://github.com/mesonbuild/meson-python")
17382 (commit version)))
17383 (file-name (git-file-name name version))
17384 (sha256
17385 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
17386 (build-system pyproject-build-system)
17387 ;; tests: 124 passed, 16 skipped
17388 (native-inputs
17389 (list git-minimal/pinned
17390 patchelf
17391 python-pytest
17392 python-pytest-mock))
17393 (propagated-inputs
17394 (list meson
17395 ninja
17396 python-cython
17397 python-packaging
17398 python-pyproject-metadata))
17399 (home-page "https://github.com/mesonbuild/meson-python")
17400 (synopsis "Meson Python build backend (PEP 517)")
17401 (description "This package provides a PEP 517 build backend that makes
17402use of the Meson build system.")
17403 (license license:expat)))
17404
17405;; XXX: Deprecated on <2026-01-26>.
17406(define-deprecated/public-alias python-meson-python python-meson)
17407;;; Deprecated on 2026-03-02.
17408(define-deprecated-package meson-python python-meson)
17409
17410(define-public python-mfusepy
17411 (package
17412 (name "python-mfusepy")
17413 (version "3.1.1")
17414 (source
17415 (origin
17416 (method git-fetch)
17417 (uri (git-reference
17418 (url "https://github.com/mxmlnkn/mfusepy")
17419 (commit (string-append "v" version))))
17420 (file-name (git-file-name name version))
17421 (sha256
17422 (base32 "04vsmmh1zpy8cxxrj9dqiqajisn95skg3wqr8dgqck25780v3c4k"))))
17423 (build-system pyproject-build-system)
17424 (native-inputs (list python-setuptools))
17425 (inputs (list fuse))
17426 (arguments
17427 (list
17428 #:tests? #f ; Tests require fuse kernel module
17429 #:phases
17430 #~(modify-phases %standard-phases
17431 (add-after 'unpack 'embed-libfuse
17432 (lambda* (#:key inputs #:allow-other-keys)
17433 (substitute* "mfusepy.py"
17434 (("^(_libfuse_path = )os\\.environ\\.get.+$" _ pre)
17435 (format #f "~a\"~a\"\n"
17436 pre (search-input-file inputs "/lib/libfuse3.so")))))))))
17437 (home-page "https://github.com/mxmlnkn/mfusepy")
17438 (synopsis "Ctypes bindings for the high-level API in libfuse 2 and 3")
17439 (description "Ctypes bindings for the high-level API in libfuse 2 and 3.")
17440 (license license:isc)))
17441
17442(define-public python-mccabe
17443 (package
17444 (name "python-mccabe")
17445 (version "0.7.0")
17446 (source
17447 (origin
17448 (method url-fetch)
17449 (uri (pypi-uri "mccabe" version))
17450 (sha256
17451 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
17452 (build-system pyproject-build-system)
17453 (arguments
17454 (list
17455 ;; Test fixtures are not released yet, see
17456 ;; <https://github.com/PyCQA/mccabe/issues/93>
17457 #:tests? #f))
17458 (native-inputs
17459 (list python-toml
17460 python-setuptools
17461 python-wheel))
17462 (home-page "https://github.com/PyCQA/mccabe")
17463 (synopsis "McCabe checker, plugin for flake8")
17464 (description
17465 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
17466complexity of Python source code.")
17467 (license license:expat)))
17468
17469(define-public python-autoflake8
17470 (package
17471 (name "python-autoflake8")
17472 (version "0.4.0")
17473 (source (origin
17474 (method git-fetch) ;for tests
17475 (uri (git-reference
17476 (url "https://github.com/fsouza/autoflake8")
17477 (commit (string-append "v" version))))
17478 (file-name (git-file-name name version))
17479 (sha256
17480 (base32
17481 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
17482 (build-system pyproject-build-system)
17483 (native-inputs
17484 (list python-aiofiles
17485 python-poetry-core
17486 python-pytest
17487 python-pytest-xdist))
17488 (propagated-inputs (list python-pyflakes))
17489 (home-page "https://github.com/fsouza/autoflake8")
17490 (synopsis "Automatically fix issues reported by flake8")
17491 (description "Tool to automatically fix some issues reported by
17492@command{flake8}.")
17493 (license license:expat)))
17494
17495(define-public python-flake8
17496 (package
17497 (name "python-flake8")
17498 (version "7.1.1")
17499 (source
17500 (origin
17501 (method git-fetch) ; no tests data in PyPi package
17502 (uri (git-reference
17503 (url "https://github.com/pycqa/flake8")
17504 (commit version)))
17505 (file-name (git-file-name name version))
17506 (sha256
17507 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
17508 (build-system pyproject-build-system)
17509 (native-inputs
17510 (list python-pytest
17511 python-setuptools
17512 python-wheel))
17513 (propagated-inputs
17514 (list python-mccabe
17515 python-pycodestyle
17516 python-pyflakes))
17517 (home-page "https://flake8.pycqa.org/en/latest/")
17518 (synopsis "The modular source code checker: pep8, pyflakes and co")
17519 (description
17520 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
17521 (license license:expat)))
17522
17523(define-public python-flake8-blind-except
17524 (package
17525 (name "python-flake8-blind-except")
17526 (version "0.2.1")
17527 (source
17528 (origin
17529 (method git-fetch)
17530 (uri (git-reference
17531 (url "https://github.com/elijahandrews/flake8-blind-except")
17532 (commit (string-append "v" version))))
17533 (file-name (git-file-name name version))
17534 (sha256
17535 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
17536 (build-system pyproject-build-system)
17537 (arguments (list #:tests? #f)) ;no tests
17538 (native-inputs (list python-setuptools))
17539 (propagated-inputs (list python-pycodestyle))
17540 (home-page "https://github.com/elijahandrews/flake8-blind-except")
17541 (synopsis "Check for blind @code{except:} statements")
17542 (description
17543 "This package provides a flake8 extension that checks for blind
17544@code{except:} statements.")
17545 (license license:expat)))
17546
17547(define-public python-flake8-bugbear
17548 (package
17549 (name "python-flake8-bugbear")
17550 (version "24.10.31")
17551 (source
17552 (origin
17553 (method url-fetch)
17554 (uri (pypi-uri "flake8_bugbear" version))
17555 (sha256
17556 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17557 (build-system pyproject-build-system)
17558 (native-inputs
17559 (list python-hypothesmith
17560 python-pytest
17561 python-setuptools
17562 python-wheel))
17563 (propagated-inputs
17564 (list python-attrs
17565 python-flake8))
17566 (home-page "https://github.com/PyCQA/flake8-bugbear")
17567 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17568 (description
17569 "This package contains a plugin for Flake8 finding likely bugs and design
17570problems in your program. It contains warnings that don't belong in pyflakes
17571and pycodestyle.")
17572 (license license:expat)))
17573
17574(define-public python-flake8-continuation
17575 (package
17576 (name "python-flake8-continuation")
17577 (version "1.0.5")
17578 (source
17579 (origin
17580 (method git-fetch)
17581 (uri (git-reference
17582 (url "https://github.com/planetlabs/flake8-continuation")
17583 (commit version)))
17584 (file-name (git-file-name name version))
17585 (sha256
17586 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17587 (build-system pyproject-build-system)
17588 (arguments
17589 (list
17590 #:phases
17591 #~(modify-phases %standard-phases
17592 (add-after 'unpack 'remove-python-six-dependency
17593 (lambda _
17594 (substitute* "flake8_continuation.py"
17595 (("import six|six\\.moves\\.")
17596 ""))
17597 (substitute* "setup.py"
17598 ((", \"six\"")
17599 "")))))))
17600 (native-inputs (list python-pytest python-setuptools))
17601 (propagated-inputs (list python-flake8 python-pycodestyle))
17602 (home-page "https://github.com/planetlabs/flake8-continuation")
17603 (synopsis "Flake8 Line Continuation Plugin")
17604 (description
17605 "A Flake8 plugin that checks for the line continuation style to be in the
17606preferred method according to PEP-8, specifically:
17607@quotation
17608The preferred way of wrapping long lines is by using Python's implied line
17609continuation inside parentheses, brackets and braces. Long lines can be
17610broken over multiple lines by wrapping expressions in parentheses. These
17611should be used in preference to using a backslash for line continuation.
17612@end quotation")
17613 (license license:asl2.0)))
17614
17615(define-public python-flake8-debugger
17616 (package
17617 (name "python-flake8-debugger")
17618 (version "4.1.2")
17619 (source
17620 (origin
17621 (method git-fetch)
17622 (uri (git-reference
17623 (url "https://github.com/jbkahn/flake8-debugger")
17624 (commit version)))
17625 (file-name (git-file-name name version))
17626 (sha256
17627 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17628 (build-system pyproject-build-system)
17629 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17630 (propagated-inputs (list python-flake8 python-pycodestyle))
17631 (home-page "https://github.com/jbkahn/flake8-debugger")
17632 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17633 (description
17634 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17635@code{pdb} imports and set traces, as well as @code{from
17636IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17637@code{InteractiveShellEmbed()()}.")
17638 (license license:expat)))
17639
17640(define-public python-flake8-implicit-str-concat
17641 (package
17642 (name "python-flake8-implicit-str-concat")
17643 (version "0.5.0")
17644 (source
17645 (origin
17646 (method url-fetch)
17647 (uri (pypi-uri "flake8_implicit_str_concat" version))
17648 (sha256
17649 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17650 (build-system pyproject-build-system)
17651 (arguments
17652 (list
17653 #:tests? #f)) ; no tests in PiPY or git checkout
17654 (native-inputs
17655 (list python-hatchling))
17656 (propagated-inputs
17657 (list python-attrs
17658 python-more-itertools))
17659 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17660 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17661 (description
17662 "This is a plugin for the Python code checking tool Flake8 to encourage
17663correct string literal concatenation.
17664
17665It looks for style problems like implicitly concatenated string literals on
17666the same line (which can be introduced by the code formatting tool Black), or
17667unnecessary plus operators for explicit string literal concatenation.")
17668 (license license:expat)))
17669
17670(define-public python-flake8-print
17671 (package
17672 (name "python-flake8-print")
17673 (version "5.0.0")
17674 (source
17675 (origin
17676 (method url-fetch)
17677 (uri (pypi-uri "flake8-print" version))
17678 (sha256
17679 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17680 (build-system pyproject-build-system)
17681 (arguments
17682 (list
17683 #:tests? #f)) ; no tests in PiPY or git checkout
17684 (native-inputs
17685 (list python-poetry-core))
17686 (propagated-inputs
17687 (list python-flake8
17688 python-pycodestyle))
17689 (home-page "https://github.com/jbkahn/flake8-print")
17690 (synopsis "Print statement checker plugin for Flake8")
17691 (description
17692 "This plugin for Flake8 checks for @code{print} statements in Python
17693files.")
17694 (license license:expat)))
17695
17696(define-public python-flake8-pyi
17697 (package
17698 (name "python-flake8-pyi")
17699 (version "24.9.0")
17700 (source
17701 (origin
17702 (method url-fetch)
17703 (uri (pypi-uri "flake8_pyi" version))
17704 (sha256
17705 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
17706 (build-system pyproject-build-system)
17707 (arguments
17708 (list
17709 #:phases
17710 #~(modify-phases %standard-phases
17711 (add-after 'unpack 'fix-pytest-config
17712 (lambda _
17713 ;; Prevent full threads utilization.
17714 (substitute* "pyproject.toml"
17715 (("-nauto") "")))))))
17716 (native-inputs
17717 (list python-hatchling
17718 python-pytest))
17719 (propagated-inputs
17720 (list python-attrs
17721 python-flake8
17722 python-pyflakes))
17723 (home-page "https://github.com/ambv/flake8-pyi")
17724 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
17725 (description
17726 "This package contains a plugin that provides specializations for type
17727hinting stub files, especially interesting for linting typeshed. It adds the
17728@file{.pyi} extension to the default value of the @code{--filename}
17729command-line argument to Flake8. This means stubs are linted by default with
17730this plugin enabled, without needing to explicitly list every file. It
17731modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17732expressions after the entire file has been read. This enables support for
17733first-class forward references that stub files use.")
17734 (license license:expat)))
17735
17736(define-public python-flake8-quotes
17737 (package
17738 (name "python-flake8-quotes")
17739 (version "3.4.0")
17740 (source
17741 (origin
17742 (method url-fetch)
17743 (uri (pypi-uri "flake8-quotes" version))
17744 (sha256
17745 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17746 (build-system pyproject-build-system)
17747 (native-inputs
17748 (list python-pytest
17749 python-setuptools
17750 python-wheel))
17751 (propagated-inputs
17752 (list python-flake8))
17753 (home-page "https://github.com/zheller/flake8-quotes/")
17754 (synopsis "Flake8 lint for quotes")
17755 (description "This package provides a Flake8 lint for quotes.")
17756 (license license:expat)))
17757
17758(define-public python-flake8-todo
17759 (package
17760 (name "python-flake8-todo")
17761 (version "0.7")
17762 (source
17763 (origin
17764 (method git-fetch)
17765 (uri (git-reference
17766 (url "https://github.com/schlamar/flake8-todo")
17767 (commit (string-append "v" version))))
17768 (file-name (git-file-name name version))
17769 (sha256
17770 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
17771 (build-system pyproject-build-system)
17772 (arguments (list #:tests? #f)) ; No tests.
17773 (native-inputs (list python-setuptools))
17774 (propagated-inputs (list python-pycodestyle))
17775 (home-page "https://github.com/schlamar/flake8-todo")
17776 (synopsis "TODO notes checker, plugin for flake8")
17777 (description
17778 "This package provides the @code{flake8-todo} Python module, a
17779TODO notes checker plugin for flake8.")
17780 (license license:expat)))
17781
17782(define-public python-flake8-isort
17783 (package
17784 (name "python-flake8-isort")
17785 (version "7.0.0")
17786 (source
17787 (origin
17788 (method git-fetch)
17789 (uri (git-reference
17790 (url "https://github.com/gforcada/flake8-isort")
17791 (commit version)))
17792 (file-name (git-file-name name version))
17793 (sha256
17794 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
17795 (build-system pyproject-build-system)
17796 (arguments (list #:test-backend #~'custom
17797 #:test-flags #~(list "run_tests.py")))
17798 (native-inputs (list python-hatchling python-pytest))
17799 (propagated-inputs (list python-flake8 python-isort))
17800 (home-page "https://github.com/gforcada/flake8-isort")
17801 (synopsis "Flake8 plugin integrating isort")
17802 (description
17803 "This package provides a flake8 plugin that integrates isort,
17804extending flake8 so that it can warn about badly sorted Python import
17805directives.")
17806 (license license:gpl2+)))
17807
17808(define-public python-autoflake
17809 (package
17810 (name "python-autoflake")
17811 (version "2.3.1")
17812 (source
17813 (origin
17814 (method url-fetch)
17815 (uri (pypi-uri "autoflake" version))
17816 (sha256
17817 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
17818 (build-system pyproject-build-system)
17819 (arguments
17820 (list
17821 #:phases
17822 #~(modify-phases %standard-phases
17823 (replace 'check
17824 (lambda _
17825 (invoke "python" "test_autoflake.py"))))))
17826 (native-inputs
17827 (list python-hatchling))
17828 (propagated-inputs
17829 (list python-pyflakes))
17830 (home-page "https://github.com/myint/autoflake")
17831 (synopsis "Removes unused imports and unused variables")
17832 (description
17833 "@code{autoflake} removes unused imports and unused variables from Python
17834code as reported by @code{pyflakes}.
17835
17836By default, it only removes unused imports for modules that are part of the
17837standard library. Removal of unused variables is also disabled by default.
17838It also removes useless @code{pass} statements.")
17839 (license license:expat)))
17840
17841(define-public python-mistune
17842 (package
17843 (name "python-mistune")
17844 (version "3.1.3")
17845 (source
17846 (origin
17847 (method url-fetch)
17848 (uri (pypi-uri "mistune" version))
17849 (sha256
17850 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
17851 (build-system pyproject-build-system)
17852 (native-inputs
17853 (list python-pytest
17854 python-setuptools
17855 python-wheel))
17856 (home-page "https://github.com/lepture/mistune")
17857 (synopsis "Markdown parser in pure Python")
17858 (description "This package provides a fast markdown parser in pure
17859Python.")
17860 (license license:bsd-3)))
17861
17862(define-public python-markdown
17863 (package
17864 (name "python-markdown")
17865 (version "3.10")
17866 (source
17867 (origin
17868 (method url-fetch)
17869 (uri (pypi-uri "markdown" version))
17870 (sha256
17871 (base32
17872 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
17873 (build-system pyproject-build-system)
17874 (native-inputs
17875 (list python-pyyaml
17876 python-setuptools))
17877 (home-page "https://python-markdown.github.io/")
17878 (synopsis "Python implementation of Markdown")
17879 (description
17880 "This package provides a Python implementation of John Gruber's
17881Markdown. The library features international input, various Markdown
17882extensions, and several HTML output formats. A command line wrapper
17883markdown_py is also provided to convert Markdown files to HTML.")
17884 (license license:bsd-3)))
17885
17886(define-public python-markdown2
17887 (package
17888 (name "python-markdown2")
17889 (version "2.5.3")
17890 (source
17891 (origin
17892 (method git-fetch) ; no tests data in PyPi package
17893 (uri (git-reference
17894 (url "https://github.com/trentm/python-markdown2")
17895 (commit version)))
17896 (file-name (git-file-name name version))
17897 (sha256
17898 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
17899 (build-system pyproject-build-system)
17900 (arguments
17901 (list
17902 #:test-backend #~'custom
17903 #:test-flags #~(list "test.py" "--" "-knownfailure")
17904 #:phases
17905 #~(modify-phases %standard-phases
17906 (add-before 'check 'pre-check
17907 (lambda _
17908 (chdir "test"))))))
17909 (native-inputs
17910 (list ;; python-pygments ;optional, tests fail when added
17911 ;; python-wavedrom ;optional, not packaged
17912 ;; python-latex2mathml ;optional, not packaged
17913 python-setuptools))
17914 (home-page "https://github.com/trentm/python-markdown2")
17915 (synopsis "Fast and complete Python implementation of Markdown")
17916 (description
17917 "This package provides a fast and complete Python implementation of
17918Markdown. It was written to closely match the behaviour of the original
17919Perl-implemented Markdown.pl. It also comes with a number of
17920extensions (called @code{extras}) for things like syntax coloring, tables,
17921header-ids.")
17922 (license license:expat)))
17923
17924(define-public python-mdx-include
17925 (package
17926 (name "python-mdx-include")
17927 (version "1.4.2")
17928 (source
17929 (origin
17930 (method git-fetch)
17931 (uri (git-reference
17932 (url "https://github.com/neurobin/mdx_include")
17933 (commit (string-append "v" version))))
17934 (file-name (git-file-name name version))
17935 (sha256
17936 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
17937 (build-system pyproject-build-system)
17938 (arguments
17939 (list
17940 #:test-backend #~'unittest
17941 #:phases
17942 (let* ((django-hello-url "\
17943https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1794473951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
17945 (django-hello
17946 (origin
17947 (method url-fetch)
17948 (uri django-hello-url)
17949 (sha256 (base32 "\
1795013bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
17951 #~(modify-phases %standard-phases
17952 (add-before 'check 'disable-test-requiring-network
17953 (lambda _
17954 (substitute* "mdx_include/test/test.py"
17955 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
17956 (string-append pre "__off__test_" post "("))
17957 (((string-join (string-split #$django-hello-url #\.) "\\."))
17958 #+django-hello))))))))
17959 (native-inputs (list python-setuptools))
17960 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
17961 (home-page "https://github.com/neurobin/mdx_include")
17962 (synopsis "Python Markdown extension to include local or remote files")
17963 (description "Include extension for Python Markdown. It lets you include
17964local or remote (downloadable) files into your markdown at arbitrary
17965positions.
17966
17967This project is motivated by markdown-include and provides the same
17968functionalities with some extras.")
17969 (license license:bsd-3)))
17970
17971(define-public python-ptyprocess
17972 (package
17973 (name "python-ptyprocess")
17974 (version "0.7.0")
17975 (source
17976 (origin
17977 (method url-fetch)
17978 (uri (pypi-uri "ptyprocess" version))
17979 (sha256
17980 (base32
17981 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
17982 (build-system pyproject-build-system)
17983 (native-inputs
17984 (list python-flit-core
17985 python-pytest))
17986 (home-page "https://github.com/pexpect/ptyprocess")
17987 (synopsis "Run a subprocess in a pseudo terminal")
17988 (description
17989 "This package provides a Python library used to launch a subprocess in a
17990pseudo terminal (pty), and interact with both the process and its pty.")
17991 (license license:isc)))
17992
17993(define-public python-configshell-fb
17994 (package
17995 (name "python-configshell-fb")
17996 (version "1.1.30")
17997 (source
17998 (origin
17999 (method url-fetch)
18000 (uri (pypi-uri "configshell-fb" version))
18001 ;; XXX: Snippet below is required because on v1.1.30 the source code
18002 ;; has configshell_fb as softlink to configshell and guix
18003 ;; pyproject-build-system doesn't work with symlinks very well.
18004 ;;
18005 ;; This package is only used in spdk for now and it's crucial to keep
18006 ;; it locked on version and keep the snipped for spdk to build
18007 ;; successfully.
18008 (snippet #~(begin
18009 (use-modules (guix build utils))
18010 (delete-file "setup.py")
18011 (delete-file-recursively "configshell_fb")
18012 (rename-file "configshell" "configshell_fb")))
18013 (sha256
18014 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
18015 (build-system pyproject-build-system)
18016 (arguments
18017 (list #:tests? #f)) ;; this package has no tests
18018 (native-inputs
18019 (list python-setuptools
18020 python-six
18021 python-wheel))
18022 (propagated-inputs
18023 (list python-pyparsing))
18024 (home-page "https://github.com/open-iscsi/configshell-fb")
18025 (synopsis "Framework to implement simple but nice CLIs")
18026 (description
18027 "This package provides a framework to implement simple but nice CLIs.")
18028 (license license:asl2.0)))
18029
18030(define-public python-configupdater
18031 (package
18032 (name "python-configupdater")
18033 (version "3.2")
18034 (source
18035 (origin
18036 (method git-fetch)
18037 (uri (git-reference
18038 (url "https://github.com/pyscaffold/configupdater")
18039 (commit (string-append "v" version))))
18040 (file-name (git-file-name name version))
18041 (sha256
18042 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
18043 (build-system pyproject-build-system)
18044 (native-inputs
18045 (list python-pytest python-setuptools python-setuptools-scm))
18046 (home-page "https://github.com/pyscaffold/configupdater")
18047 (synopsis "Parser like ConfigParser but for updating configuration files")
18048 (description
18049 "ConfigUpdater is a Python library for updating INI configuration files
18050while preserving the original file's formatting, structure, and comments.
18051Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
18052targeted changes--keeping comments, section ordering, key-value pair
18053ordering, and original casing intact.")
18054 (license license:expat)))
18055
18056(define-public python-crccheck
18057 (package
18058 (name "python-crccheck")
18059 (version "1.3.0")
18060 (source
18061 (origin
18062 (method git-fetch) ; no tests in PyPI
18063 (uri (git-reference
18064 (url "https://github.com/MartinScharrer/crccheck")
18065 (commit (string-append "v" version))))
18066 (file-name (git-file-name name version))
18067 (sha256
18068 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
18069 (build-system pyproject-build-system)
18070 (native-inputs (list python-pytest python-setuptools python-wheel))
18071 (home-page "https://github.com/MartinScharrer/crccheck")
18072 (synopsis "Calculation library for CRCs and checksums")
18073 (description "@code{crccheck} is a calculation library for CRCs and
18074checksums. It implement more than a hundred checksum routines.")
18075 (license license:gpl3+)))
18076
18077(define-public python-crashtest
18078 (package
18079 (name "python-crashtest")
18080 (version "0.4.1")
18081 (source
18082 (origin
18083 (method git-fetch)
18084 (uri (git-reference
18085 (url "https://github.com/sdispater/crashtest")
18086 (commit version)))
18087 (file-name (git-file-name name version))
18088 (sha256
18089 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
18090 (build-system pyproject-build-system)
18091 (native-inputs (list python-poetry-core python-pytest))
18092 (home-page "https://github.com/sdispater/crashtest")
18093 (synopsis "Manage Python errors with ease")
18094 (description
18095 "Python library that makes exceptions handling and inspection easier.")
18096 (license license:expat)))
18097
18098(define-public python-pysendfile
18099 (package
18100 (name "python-pysendfile")
18101 (version "2.0.1")
18102 (source
18103 (origin
18104 (method git-fetch)
18105 (uri (git-reference
18106 (url "https://github.com/giampaolo/pysendfile")
18107 (commit (string-append "release-" version))))
18108 (file-name (git-file-name name version))
18109 (sha256
18110 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
18111 (build-system pyproject-build-system)
18112 (arguments
18113 (list
18114 #:phases
18115 #~(modify-phases %standard-phases
18116 (replace 'check
18117 (lambda* (#:key tests? #:allow-other-keys)
18118 (when tests?
18119 (setenv "HOME" "/tmp")
18120 (invoke "make" "test")))))))
18121 (native-inputs (list python-pytest python-setuptools))
18122 (propagated-inputs (list python-pyasynchat))
18123 (home-page "https://github.com/giampaolo/pysendfile")
18124 (synopsis "Python interface to sendfile(2)")
18125 (description "The @code{pysendfile} Python library provides an interface to
18126the @code{sendfile(2)} system call.")
18127 (license license:expat)))
18128
18129(define-public python-pyftpdlib
18130 (package
18131 (name "python-pyftpdlib")
18132 (version "1.5.10")
18133 (source
18134 (origin
18135 (method url-fetch)
18136 (uri (pypi-uri "pyftpdlib" version))
18137 (sha256
18138 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
18139 (build-system pyproject-build-system)
18140 ;; Using Pytest instead of the Makefile causes the command line tests to
18141 ;; fail on unknown Pytest arguments.
18142 (arguments
18143 (list
18144 #:test-flags
18145 #~(list "-k" "not TestCommandLineParser"
18146 #$@(if (target-aarch64?)
18147 ;; TimeoutError: timed out
18148 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
18149 "::TestTimeouts::test_idle_data_timeout2"))
18150 '()))))
18151 (native-inputs
18152 (list python-psutil
18153 python-pytest
18154 python-setuptools
18155 python-wheel))
18156 (propagated-inputs
18157 (list python-pyopenssl
18158 python-pysendfile))
18159 (home-page "https://github.com/giampaolo/pyftpdlib/")
18160 (synopsis "Asynchronous and scalable Python FTP server library")
18161 (description "The Python FTP server library provides a high-level
18162interface to write efficient, scalable and asynchronous FTP servers with
18163Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
18164RFC-959} FTP server implementation available for Python, and has the following
18165traits:
18166@itemize
18167@item
18168It is lightweight, fast and scalable.
18169@item
18170It uses the @code{sendfile(2)} system call for uploads.
18171@item
18172It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
18173asynchronously.
18174@item
18175It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
18176IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
18177RFC-2640}) and MLSD/MLST commands (RFC-3659).
18178@item
18179It has a flexible system of @samp{authorizers} able to manage both
18180@samp{virtual} and @samp{real} users.
18181@end itemize")
18182 (license license:expat)))
18183
18184(define-public python-fonttools
18185 (package
18186 (name "python-fonttools")
18187 (version "4.59.2")
18188 (source
18189 (origin
18190 (method url-fetch)
18191 (uri (pypi-uri "fonttools" version ".tar.gz"))
18192 (sha256
18193 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
18194 (build-system pyproject-build-system)
18195 (arguments
18196 (list
18197 #:tests? (not (%current-target-system))
18198 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
18199 ;; 3 subtests passed
18200 #:test-flags
18201 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
18202 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
18203 (string-join ls "::")))
18204 ;; XXX: Some test data is not included in PyPI archive,
18205 ;; remove when switched to git-fetch.
18206 '(("cffLib/cffLib_test.py" "CffLibTest"
18207 "test_reading_supplement_encoding")
18208 ("tfmLib/tfmLib_test.py"
18209 "test_read_boundary_char")
18210 ("tfmLib/tfmLib_test.py"
18211 "test_read_fontdimens_vanilla")
18212 ("tfmLib/tfmLib_test.py"
18213 "test_read_fontdimens_mathex")
18214 ("tfmLib/tfmLib_test.py"
18215 "test_read_fontdimens_mathsy")
18216 ("voltLib/volttofea_test.py" "ToFeaTest"
18217 "test_cli_vtp")
18218 ("voltLib/volttofea_test.py" "ToFeaTest"
18219 "test_group_order"))))))
18220 (native-inputs
18221 (list python-pytest
18222 python-setuptools))
18223 ;; All of them are listed as extras_require.
18224 (propagated-inputs
18225 (list python-brotli
18226 python-lxml
18227 python-unicodedata2
18228 python-zopfli))
18229 (home-page "https://github.com/fonttools/fonttools")
18230 (synopsis "Tools to manipulate font files")
18231 (description
18232 "FontTools/TTX is a library to manipulate font files from Python. It
18233supports reading and writing of TrueType/OpenType fonts, reading and writing
18234of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
18235also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
18236from an XML-based format.")
18237 (license license:expat)))
18238
18239;;; Tests are left out in the main package to avoid cycles.
18240;; XXX: When updating, solve comment in python-cu2qu.
18241(define-public python-fonttools-minimal
18242 (hidden-package
18243 (package
18244 (inherit python-fonttools)
18245 (name "python-fonttools-minimal")
18246 (arguments '(#:tests? #f))
18247 (native-inputs
18248 (list python-setuptools))
18249 (propagated-inputs '()))))
18250
18251(define-public python-ly
18252 (package
18253 (name "python-ly")
18254 (version "0.9.9")
18255 (source
18256 (origin
18257 (method git-fetch)
18258 (uri (git-reference
18259 (url "https://github.com/frescobaldi/python-ly")
18260 (commit (string-append "v" version))))
18261 (file-name (git-file-name name version))
18262 (sha256
18263 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
18264 (build-system pyproject-build-system)
18265 (arguments
18266 (list
18267 #:phases
18268 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
18269 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
18270 #~(modify-phases %standard-phases
18271 (add-after 'unpack 'inject-data
18272 (lambda _
18273 (substitute* "tests/musicxml.xsd"
18274 (((string-join (string-split #$namespace-url #\.) "\\."))
18275 #$(origin
18276 (method url-fetch)
18277 (uri namespace-url)
18278 (sha256 (base32 "\
182791j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
18280 (((string-join (string-split #$xlink-url #\.) "\\."))
18281 #$(origin
18282 (method url-fetch)
18283 (uri xlink-url)
18284 (sha256 (base32 "\
182850jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
18286 (native-inputs (list python-hatchling python-lxml python-pytest))
18287 (synopsis "Tool and library for manipulating LilyPond files")
18288 (description
18289 "This package provides a Python library to parse, manipulate or create
18290documents in LilyPond format. A command line program ly is also provided that
18291can be used to do various manipulations with LilyPond files.")
18292 (home-page "https://pypi.org/project/python-ly/")
18293 (license license:gpl2+)))
18294
18295(define-public python-appdirs
18296 (package
18297 (name "python-appdirs")
18298 (version "1.4.4")
18299 (source
18300 (origin
18301 (method url-fetch)
18302 (uri (pypi-uri "appdirs" version))
18303 (sha256
18304 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
18305 (build-system pyproject-build-system)
18306 (arguments (list #:test-backend #~'unittest))
18307 (native-inputs (list python-setuptools))
18308 (home-page "https://github.com/ActiveState/appdirs")
18309 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
18310 (description
18311 "This module provides a portable way of finding out where user data
18312should be stored on various operating systems.")
18313 (license license:expat)))
18314
18315(define-public python-gorilla
18316 (package
18317 (name "python-gorilla")
18318 (version "0.5.0")
18319 (source
18320 (origin
18321 (method git-fetch)
18322 (uri (git-reference
18323 (url "https://github.com/christophercrouzet/gorilla")
18324 (commit (string-append "v" version))))
18325 (file-name (git-file-name name version))
18326 (sha256
18327 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
18328 (build-system pyproject-build-system)
18329 (arguments (list #:test-backend #~'unittest))
18330 (native-inputs (list python-setuptools))
18331 (home-page "https://github.com/christophercrouzet/gorilla")
18332 (synopsis "Convenient monkey patching with Python")
18333 (description
18334 "Gorilla is a Python library that provides a convenient approach to
18335monkey patching. Monkey patching is the process of modifying module and
18336class attributes at runtime with the purpose of replacing or extending
18337third-party code.")
18338 (license license:expat)))
18339
18340(define-public python-llfuse
18341 (package
18342 (name "python-llfuse")
18343 (version "1.5.1")
18344 (source
18345 (origin
18346 (method git-fetch)
18347 (uri (git-reference
18348 (url "https://github.com/python-llfuse/python-llfuse")
18349 (commit (string-append "release-" version))))
18350 (file-name (git-file-name name version))
18351 (sha256
18352 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
18353 (build-system pyproject-build-system)
18354 (arguments
18355 (list
18356 #:test-flags
18357 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
18358 #:phases
18359 #~(modify-phases %standard-phases
18360 (add-before 'build 'build-cython
18361 (lambda _
18362 (invoke "python" "setup.py" "build_cython"))))))
18363 (inputs (list fuse-2 attr))
18364 (native-inputs
18365 (list pkg-config python-cython python-pytest python-setuptools))
18366 (synopsis "Python bindings for FUSE")
18367 (description
18368 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
18369 (home-page "https://github.com/python-llfuse/python-llfuse")
18370 (license license:lgpl2.0+)))
18371
18372(define-public python-msgpack
18373 (package
18374 (name "python-msgpack")
18375 (version "1.1.2")
18376 (source
18377 (origin
18378 (method url-fetch)
18379 (uri (pypi-uri "msgpack" version))
18380 (sha256
18381 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
18382 (build-system pyproject-build-system)
18383 (native-inputs
18384 (list python-pytest
18385 python-setuptools))
18386 (home-page "https://msgpack.org/")
18387 (synopsis "MessagePack (de)serializer")
18388 (description "MessagePack is a fast, compact binary serialization format,
18389suitable for similar data to JSON. This package provides CPython bindings for
18390reading and writing MessagePack data.")
18391 (license license:asl2.0)))
18392
18393(define-public python-openstep-plist
18394 (package
18395 (name "python-openstep-plist")
18396 (version "0.5.2")
18397 (source
18398 (origin
18399 (method git-fetch)
18400 (uri (git-reference
18401 (url "https://github.com/fonttools/openstep-plist")
18402 (commit (string-append "v" version))))
18403 (file-name (git-file-name name version))
18404 (sha256
18405 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
18406 (build-system pyproject-build-system)
18407 (native-inputs
18408 (list python-cython
18409 python-pytest
18410 python-setuptools-scm
18411 python-setuptools))
18412 (home-page "https://github.com/fonttools/openstep-plist")
18413 (synopsis "OpenStep plist parser and writer")
18414 (description
18415 "This package provides a parser for the \"old style\" OpenStep property
18416list format (also known as ASCII plist), written in Cython.")
18417 (license license:expat)))
18418
18419(define-public python-resolvelib
18420 (package
18421 (name "python-resolvelib")
18422 (version "1.1.0")
18423 (source
18424 (origin
18425 ;; Tests are missing from the PyPI release.
18426 (method git-fetch)
18427 (uri (git-reference
18428 (url "https://github.com/sarugaku/resolvelib")
18429 (commit version)))
18430 (file-name (git-file-name name version))
18431 (sha256
18432 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
18433 (build-system pyproject-build-system)
18434 (native-inputs
18435 (list python-packaging
18436 python-pytest
18437 python-setuptools
18438 python-wheel))
18439 (home-page "https://github.com/sarugaku/resolvelib")
18440 (synopsis "Abstract dependencies resolver")
18441 (description
18442 "The ResolveLib library provides a @code{Resolver} class that includes
18443dependency resolution logic.")
18444 (license license:isc)))
18445
18446;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
18447;; 2022. It is now read-only.
18448(define-public python-commonmark
18449 (package
18450 (name "python-commonmark")
18451 (version "0.9.1")
18452 (source
18453 (origin
18454 (method url-fetch)
18455 (uri (pypi-uri "commonmark" version))
18456 (sha256
18457 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
18458 (build-system pyproject-build-system)
18459 (native-inputs
18460 (list python-setuptools))
18461 (home-page "https://github.com/readthedocs/commonmark.py")
18462 (synopsis "Python parser for the CommonMark Markdown spec")
18463 (description
18464 "This module is a pure Python port of jgm's @code{commonmark.js}, a
18465Markdown parser and renderer for the CommonMark specification, using only
18466native modules.")
18467 (license license:bsd-3)))
18468
18469(define-public python-immutables
18470 (package
18471 (name "python-immutables")
18472 (version "0.21")
18473 (source
18474 (origin
18475 (method git-fetch)
18476 (uri (git-reference
18477 (url "https://github.com/MagicStack/immutables")
18478 (commit (string-append "v" version))))
18479 (file-name (git-file-name name version))
18480 (sha256
18481 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
18482 (build-system pyproject-build-system)
18483 (arguments
18484 (list #:phases #~(modify-phases %standard-phases
18485 (add-after 'unpack 'remove-mypy-dependency
18486 (lambda _
18487 (delete-file "tests/test_mypy.py")
18488 (delete-file "tests/conftest.py"))))))
18489 (native-inputs
18490 (list python-pytest python-setuptools python-wheel))
18491 (home-page "https://github.com/MagicStack/immutables")
18492 (synopsis "High-performance immutable mapping type for Python")
18493 (description
18494 "An immutable mapping type for Python. The underlying datastructure is a
18495Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
18496functional languages.")
18497 (license license:asl2.0)))
18498
18499(define-public python-prettytable
18500 (package
18501 (name "python-prettytable")
18502 (version "3.12.0")
18503 (source
18504 (origin
18505 (method url-fetch)
18506 (uri (pypi-uri "prettytable" version))
18507 (sha256
18508 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
18509 (build-system pyproject-build-system)
18510 (native-inputs
18511 (list python-hatchling
18512 python-hatch-vcs
18513 python-pytest
18514 python-pytest-lazy-fixtures
18515 python-setuptools-scm))
18516 (propagated-inputs
18517 (list python-wcwidth))
18518 (home-page "https://github.com/jazzband/prettytable")
18519 (synopsis "Display tabular data in an ASCII table format")
18520 (description
18521 "A library designed to represent tabular data in visually appealing ASCII
18522tables. PrettyTable allows for selection of which columns are to be printed,
18523independent alignment of columns (left or right justified or centred) and
18524printing of sub-tables by specifying a row range.")
18525 (license license:bsd-3)))
18526
18527(define-public python-rtf-tokenize
18528 (package
18529 (name "python-rtf-tokenize")
18530 (version "1.0.1")
18531 (source (origin
18532 (method url-fetch)
18533 (uri (pypi-uri "rtf_tokenize" version))
18534 (sha256
18535 (base32
18536 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
18537 (build-system pyproject-build-system)
18538 (native-inputs (list python-pytest python-setuptools python-wheel))
18539 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
18540 (synopsis "Simple RTF tokenizer")
18541 (description "This package is a simple RTF tokenizer.")
18542 (license license:gpl2+)))
18543
18544(define-public python-sniffio
18545 (package
18546 (name "python-sniffio")
18547 (version "1.3.1")
18548 (source
18549 (origin
18550 (method url-fetch)
18551 (uri (pypi-uri "sniffio" version))
18552 (sha256
18553 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18554 (build-system pyproject-build-system)
18555 (arguments
18556 (list
18557 #:test-flags
18558 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18559 (native-inputs
18560 (list python-pytest python-setuptools))
18561 (home-page "https://github.com/python-trio/sniffio")
18562 (synopsis "Detect which async library a program is running under")
18563 (description
18564 "This package detects which async library a program is running under. It
18565supports multiple async I/O packages, like Trio, and asyncio.")
18566 ;; Either license applies.
18567 (license (list license:expat license:asl2.0))))
18568
18569(define-public python-snuggs
18570 (package
18571 (name "python-snuggs")
18572 (version "1.4.7")
18573 (source (origin
18574 (method url-fetch)
18575 (uri (pypi-uri "snuggs" version))
18576 (sha256
18577 (base32
18578 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18579 (build-system pyproject-build-system)
18580 (propagated-inputs (list python-numpy python-pyparsing))
18581 (native-inputs (list python-hypothesis python-pytest python-setuptools
18582 python-wheel))
18583 (home-page "https://github.com/mapbox/snuggs")
18584 (synopsis "Snuggs are S-expressions for Numpy")
18585 (description "Snuggs are S-expressions for Numpy.")
18586 (license license:expat)))
18587
18588(define-public python-geojson
18589 (package
18590 (name "python-geojson")
18591 (version "3.2.0")
18592 (source
18593 (origin
18594 (method url-fetch)
18595 (uri (pypi-uri "geojson" version))
18596 (sha256
18597 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18598 (build-system pyproject-build-system)
18599 (native-inputs (list python-pytest python-setuptools))
18600 (home-page "https://github.com/jazzband/geojson")
18601 (synopsis "Python bindings and utilities for GeoJSON")
18602 (description
18603 "This package provides Python bindings and utilities for
18604@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18605structures.")
18606 (license license:bsd-3)))
18607
18608;; pyowm only accepts a version less than version 3.
18609(define-public python-geojson-for-pyowm
18610 (package
18611 (inherit python-geojson)
18612 (version "2.5.0")
18613 (source
18614 (origin
18615 (method url-fetch)
18616 (uri (pypi-uri "geojson" version))
18617 (sha256
18618 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18619 (arguments
18620 ;; https://github.com/jazzband/geojson/issues/175
18621 (list #:tests? #f))))
18622
18623(define-public python-gpxpy
18624 (package
18625 (name "python-gpxpy")
18626 (version "1.6.2")
18627 (source
18628 (origin
18629 (method url-fetch)
18630 (uri (pypi-uri "gpxpy" version))
18631 (sha256
18632 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18633 (build-system pyproject-build-system)
18634 (arguments
18635 (list #:test-backend #~'unittest))
18636 (native-inputs
18637 (list python-setuptools))
18638 (home-page "https://github.com/tkrajina/gpxpy")
18639 (synopsis "Python GPX parser")
18640 (description "GPX file parser and GPS track manipulation library.")
18641 (license license:asl2.0)))
18642
18643(define-public python-get-version
18644 (package
18645 (name "python-get-version")
18646 (version "3.5.5")
18647 (source
18648 (origin
18649 (method url-fetch)
18650 (uri (pypi-uri "get_version" version))
18651 (sha256
18652 (base32
18653 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18654 (build-system pyproject-build-system)
18655 (arguments
18656 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18657 ;; lack of git metadata in the checkout.
18658 (list #:tests? #f))
18659 (native-inputs (list python-flit-core))
18660 (propagated-inputs (list python-dunamai))
18661 (home-page "https://github.com/flying-sheep/get_version")
18662 (synopsis "Version helper in the spirit of versioneer")
18663 (description
18664 "This package provides a version helper that lets you automatically use
18665the latest @code{vX.X.X} Git tag as the version in your Python package. It
18666also supports getting the version from Python source distributions or, once
18667your package is installed, via @code{pkg_resources} (part of
18668@code{setuptools}).")
18669 (license license:gpl3+)))
18670
18671(define-public python-filetype
18672 (package
18673 (name "python-filetype")
18674 (version "1.2.0")
18675 (source
18676 (origin
18677 (method url-fetch)
18678 (uri (pypi-uri "filetype" version))
18679 (sha256
18680 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18681 (build-system pyproject-build-system)
18682 (native-inputs (list python-pytest
18683 python-pytest-benchmark
18684 python-setuptools
18685 python-wheel))
18686 (home-page "https://github.com/h2non/filetype.py")
18687 (synopsis "Infer file type and MIME type of any file/buffer")
18688 (description "@code{filetype} is a small and dependency free Python
18689package to infer file type and MIME type checking the magic numbers
18690signature of a file or buffer.")
18691 (license license:expat)))
18692
18693(define-public python-cachelib
18694 (package
18695 (name "python-cachelib")
18696 (version "0.13.0")
18697 (source
18698 (origin
18699 (method url-fetch)
18700 (uri (pypi-uri "cachelib" version))
18701 (sha256
18702 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18703 (build-system pyproject-build-system)
18704 (arguments
18705 ;; These tests use a remote connection.
18706 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18707 "--ignore" "tests/test_mongodb_cache.py")))
18708 (native-inputs
18709 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18710 (home-page "https://github.com/pallets-eco/cachelib")
18711 (synopsis "Collection of cache libraries")
18712 (description "Cachelib is a library extracted from @code{werkzeug} which
18713provides a collection of cache libraries in the same API interface.")
18714 (license license:bsd-3)))
18715
18716(define-public python-pylru
18717 (package
18718 (name "python-pylru")
18719 (version "1.2.0")
18720 (source
18721 (origin
18722 (method git-fetch)
18723 (uri (git-reference
18724 (url "https://github.com/jlhutch/pylru")
18725 (commit (string-append "v" version))))
18726 (file-name (git-file-name name version))
18727 (sha256
18728 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18729 (build-system pyproject-build-system)
18730 (arguments
18731 (list
18732 #:test-backend #~'custom
18733 #:test-flags #~(list "test.py")))
18734 (native-inputs (list python-pytest python-setuptools))
18735 (home-page "https://github.com/jlhutch/pylru")
18736 (synopsis "Least recently used (LRU) cache implementation")
18737 (description
18738 "Pylru implements a true LRU cache along with several support classes.
18739Pylru provides a cache class with a simple dict interface. It also provides
18740classes to wrap any object that has a dict interface with a cache. Both
18741write-through and write-back semantics are supported. Pylru also provides
18742classes to wrap functions in a similar way, including a function decorator.")
18743 (license license:gpl2+)))
18744
18745(define-public python-legacy-api-wrap
18746 (package
18747 (name "python-legacy-api-wrap")
18748 (version "1.5")
18749 (source
18750 (origin
18751 (method url-fetch)
18752 (uri (pypi-uri "legacy_api_wrap" version))
18753 (sha256
18754 (base32
18755 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
18756 (build-system pyproject-build-system)
18757 (native-inputs
18758 (list python-hatch-docstring-description
18759 python-hatch-vcs
18760 python-hatchling
18761 python-pytest
18762 python-typer))
18763 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
18764 (synopsis "Legacy API wrapper")
18765 (description "This module defines a decorator to wrap legacy APIs. The
18766primary use case is APIs defined before keyword-only parameters existed.")
18767 (license license:gpl3+)))
18768
18769(define-public python-langdetect
18770 (package
18771 (name "python-langdetect")
18772 (version "1.0.9")
18773 (source
18774 (origin
18775 (method url-fetch)
18776 (uri (pypi-uri "langdetect" version))
18777 (sha256
18778 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
18779 (build-system pyproject-build-system)
18780 (native-inputs
18781 (list python-pytest
18782 python-setuptools))
18783 (propagated-inputs
18784 (list python-six))
18785 (home-page "https://github.com/Mimino666/langdetect")
18786 (synopsis "Language detection library")
18787 (description
18788 "This library is a port of Nakatani Shuyo's language-detection library
18789(version from 03/03/2014) to Python.")
18790 (license license:expat)))
18791
18792(define-public python-pyasn1
18793 (package
18794 (name "python-pyasn1")
18795 (version "0.6.1")
18796 (source
18797 (origin
18798 (method url-fetch)
18799 (uri (pypi-uri "pyasn1" version))
18800 (sha256
18801 (base32
18802 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
18803 (build-system pyproject-build-system)
18804 (arguments
18805 (list #:test-backend #~'unittest
18806 #:test-flags #~(list "discover" "tests")))
18807 (native-inputs
18808 (list python-setuptools))
18809 (home-page "https://github.com/pyasn1/pyasn1")
18810 (synopsis "ASN.1 types and codecs")
18811 (description
18812 "This is an implementation of ASN.1 types and codecs in Python. It is
18813suitable for a wide range of protocols based on the ASN.1 specification.")
18814 (license license:bsd-2)))
18815
18816(define-public python-pyasn1-modules
18817 (package
18818 (name "python-pyasn1-modules")
18819 (version "0.4.2")
18820 (source
18821 (origin
18822 (method url-fetch)
18823 (uri (pypi-uri "pyasn1_modules" version))
18824 (sha256
18825 (base32
18826 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
18827 (build-system pyproject-build-system)
18828 (arguments
18829 (list #:test-backend #~'unittest
18830 #:test-flags #~(list "discover" "tests")))
18831 (native-inputs
18832 (list python-setuptools))
18833 (propagated-inputs
18834 (list python-pyasn1))
18835 (home-page "https://github.com/pyasn1/pyasn1-modules")
18836 (synopsis "ASN.1 codec implementations")
18837 (description
18838 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
18839implementations of ASN.1-based codecs and protocols.")
18840 (license license:bsd-3)))
18841
18842(define-public python-asn1tools
18843 (package
18844 (name "python-asn1tools")
18845 (version "0.167.0")
18846 (source
18847 (origin
18848 (method url-fetch)
18849 (uri (pypi-uri "asn1tools" version))
18850 (sha256
18851 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
18852 (build-system pyproject-build-system)
18853 (arguments
18854 (list
18855 #:test-flags
18856 #~(list "-k" (string-join
18857 ;; Tests fail with error: IndexError: string index out of
18858 ;; range. It may be some incompatibility with pyparsing,
18859 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
18860 (list "not test_c_source"
18861 "test_command_line_generate_c_source_oer"
18862 "test_command_line_generate_c_source_uper"
18863 "test_command_line_generate_rust_source_uper"
18864 "test_missing_parameterized_value"
18865 "test_c_source"
18866 "test_parse_parameterization")
18867 " and not "))))
18868 (native-inputs
18869 (list python-pytest
18870 python-setuptools
18871 python-wheel))
18872 (propagated-inputs
18873 (list python-bitstruct
18874 python-diskcache
18875 python-prompt-toolkit
18876 python-pyparsing))
18877 (home-page "https://github.com/eerimoq/asn1tools")
18878 (synopsis "ASN.1 parsing, encoding and decoding")
18879 (description "This package provides ASN.1 parsing, encoding and decoding
18880for Python, including constraints checking. It supports several
18881codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
18882for OER and UPER.")
18883 (license license:expat)))
18884
18885(define-public python-idna
18886 (package
18887 (name "python-idna")
18888 (version "3.10")
18889 (source
18890 (origin
18891 (method url-fetch)
18892 (uri (pypi-uri "idna" version))
18893 (sha256
18894 (base32
18895 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
18896 (build-system pyproject-build-system)
18897 (native-inputs
18898 (list python-flit-core))
18899 (home-page "https://github.com/kjd/idna")
18900 (synopsis "Internationalized domain names in applications")
18901 (description
18902 "This is a library to support the Internationalised Domain Names in
18903Applications (IDNA) protocol as specified in RFC 5891. This version of the
18904protocol is often referred to as “IDNA2008” and can produce different results
18905from the earlier standard from 2003. The library is also intended to act as a
18906suitable drop-in replacement for the “encodings.idna” module that comes with
18907the Python standard library but currently only supports the older 2003
18908specification.")
18909 (license license:bsd-4)))
18910
18911(define-public python-libsass
18912 (package
18913 (name "python-libsass")
18914 (version "0.23.0")
18915 (source
18916 (origin
18917 ;; PyPI tarball is missing some test files.
18918 (method git-fetch)
18919 (uri (git-reference
18920 (url "https://github.com/sass/libsass-python")
18921 (commit version)))
18922 (file-name (git-file-name name version))
18923 (sha256
18924 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
18925 (build-system pyproject-build-system)
18926 (arguments
18927 '(#:phases
18928 (modify-phases %standard-phases
18929 ;; Use Guix package of libsass instead of compiling from a checkout.
18930 (add-before 'build 'set-libsass
18931 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
18932 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
18933 ;; https://github.com/sass/libsass-python/issues/440. It passed with
18934 ;; [email protected] which requires rebuild the world (1200+ packages),
18935 ;; remove when v3.6.5 is available.
18936 (add-before 'check 'silent-failing-tests
18937 (lambda _
18938 (substitute* "sasstests.py"
18939 (("def test_build_one")
18940 "def __off_test_build_one")
18941 (("def test_stack_trace_formatting")
18942 "def __off_test_stack_trace_formatting"))))
18943 (replace 'check
18944 (lambda* (#:key tests? #:allow-other-keys)
18945 (when tests?
18946 (invoke "pytest" "sasstests.py"))))
18947 (add-after 'install 'delete-test
18948 (lambda* (#:key inputs outputs #:allow-other-keys)
18949 ;; Delete sasstests.py because it attempts to open a file
18950 ;; that is not installed when loaded, which breaks the sanity
18951 ;; check.
18952 (delete-file (string-append
18953 (assoc-ref outputs "out")
18954 "/lib/python"
18955 (python-version
18956 (dirname (dirname
18957 (search-input-file inputs "bin/python"))))
18958 "/site-packages/sasstests.py")))))))
18959 (native-inputs
18960 (list python-pytest python-setuptools python-werkzeug python-wheel))
18961 (inputs
18962 (list libsass))
18963 (home-page "https://sass.github.io/libsass-python/")
18964 (synopsis "Straightforward binding of libsass for Python")
18965 (description
18966 "This package provides a simple Python extension module @code{sass} which
18967is binding LibSass.")
18968 (license license:expat)))
18969
18970;; It may be removed after 2026-01-24.
18971(define-deprecated/public-alias python-path-bootstrap python-path)
18972
18973(define-public python-pip-run
18974 (package
18975 (name "python-pip-run")
18976 (version "8.8.0")
18977 (source
18978 (origin
18979 (method git-fetch)
18980 (uri (git-reference
18981 (url "https://github.com/jaraco/pip-run")
18982 (commit (string-append "v" version))))
18983 (file-name (git-file-name name version))
18984 (sha256
18985 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18986 (build-system pyproject-build-system)
18987 (arguments
18988 (list
18989 #:tests? (not (%current-target-system))
18990 #:test-flags
18991 #~(list "-k" (string-append
18992 ;; Do not test the myproject.toml build as it tries
18993 ;; to pull dependencies from the internet.
18994 "not project "
18995 ;; These tests attempt to install dependencies from
18996 ;; the network and fail.
18997 "and not test_pkg_imported "
18998 "and not test_pkg_loaded_from_alternate_index "
18999 "and not test_pkg_loaded_from_url "))))
19000 (native-inputs
19001 (list python-nbformat
19002 python-pygments
19003 python-pytest
19004 python-setuptools
19005 python-setuptools-scm))
19006 (propagated-inputs
19007 (list python-autocommand
19008 python-packaging
19009 python-path
19010 python-pip))
19011 (home-page "https://github.com/jaraco/pip-run")
19012 (synopsis "Dynamic dependency loader for Python")
19013 (description "The @command{pip-run} command provides on-demand temporary
19014package installation for a single interpreter run. It replaces this series of
19015commands:
19016@example
19017$ virtualenv --python pythonX.X --system-site-packages /tmp/env
19018$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
19019$ /tmp/env/bin/python ...
19020$ rm -rf /tmp/env
19021@end example")
19022 (license license:expat)))
19023
19024;; It may be removed after 2026-01-24.
19025(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
19026
19027(define-public python-libarchive-c
19028 (package
19029 (name "python-libarchive-c")
19030 (version "5.2")
19031 (source (origin
19032 (method url-fetch)
19033 (uri (pypi-uri "libarchive_c" version))
19034 (sha256
19035 (base32
19036 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
19037 (build-system pyproject-build-system)
19038 (arguments
19039 (list
19040 #:phases
19041 #~(modify-phases %standard-phases
19042 (add-before 'build 'reference-libarchive
19043 (lambda* (#:key inputs #:allow-other-keys)
19044 ;; Retain the absolute file name of libarchive.so.
19045 (substitute* "libarchive/ffi.py"
19046 (("find_library\\('archive'\\)")
19047 (string-append
19048 "'"
19049 (search-input-file inputs "/lib/libarchive.so")
19050 "'"))))))))
19051 (native-inputs
19052 (list python-setuptools python-wheel python-pytest))
19053 (inputs
19054 (list libarchive))
19055 (home-page "https://github.com/Changaco/python-libarchive-c")
19056 (synopsis "Python interface to libarchive")
19057 (description
19058 "This package provides Python bindings to libarchive, a C library to
19059access possibly compressed archives in many different formats. It uses
19060Python's @code{ctypes} foreign function interface (FFI).")
19061 (license license:lgpl2.0+)))
19062
19063(define-public python-file
19064 (package/inherit file
19065 (name "python-file")
19066 (build-system pyproject-build-system)
19067 (arguments
19068 (list
19069 #:tests? #f ;no tests
19070 #:phases
19071 #~(modify-phases %standard-phases
19072 (add-before 'build 'change-directory
19073 (lambda _
19074 (chdir "python")))
19075 (add-before 'build 'set-library-file-name
19076 (lambda* (#:key inputs #:allow-other-keys)
19077 (substitute* "magic.py"
19078 (("find_library\\('magic'\\)")
19079 (format #f "~s" (search-input-file inputs
19080 "lib/libmagic.so")))))))))
19081 (inputs (list file))
19082 (native-inputs (cons* python-setuptools
19083 (if (%current-target-system)
19084 (list this-package)
19085 '())))
19086 (synopsis "Python bindings to the libmagic file type guesser")
19087 (description "This package provides Python bindings to the libmagic file
19088type guesser.
19089
19090Note that this module and the @code{python-magic} module both provide a
19091@file{magic.py} file; these two modules, which are different and were
19092developed separately, both serve the same purpose: provide Python bindings for
19093libmagic.")))
19094
19095(define-public python-pydemumble
19096 (package
19097 (name "python-pydemumble")
19098 (version "0.0.1")
19099 (source
19100 (origin
19101 (method git-fetch)
19102 (uri (git-reference
19103 (url "https://github.com/angr/pydemumble")
19104 (commit (string-append "v" version))))
19105 (file-name (git-file-name name version))
19106 (sha256
19107 (base32 "1hg5ywdsfyynn9hlr0xkafsv8i53b0s332f29ll13kk01630y0jp"))
19108 (patches (search-patches "python-pydemumble-system-nanobind.patch"))))
19109 (build-system pyproject-build-system)
19110 (arguments
19111 (list
19112 #:test-flags
19113 #~(list "discover" "-s" "tests")
19114 #:phases
19115 #~(modify-phases %standard-phases
19116 (add-after 'unpack 'set-demumble-source
19117 (lambda* _
19118 ;; demumble is only a binary and not intended to be used as
19119 ;; a library. Therefore, python-pydemumble creates it's own
19120 ;; bindings for demumble, which are autogenerated from C code.
19121 (substitute* "CMakeLists.txt"
19122 (("src/demumble")
19123 #+(package-source demumble))))))))
19124 (native-inputs (list python-nanobind python-scikit-build-core))
19125 (home-page "https://github.com/angr/pydemumble")
19126 (synopsis "Python library for demangling symbol names")
19127 (description
19128 "This package provides a Python wrapper library for @code{demumble}, which
19129is a tool to demangle C++, Rust, and Swift symbol names.")
19130 (license license:bsd-2)))
19131
19132(define-public python-pydevd
19133 (package
19134 (name "python-pydevd")
19135 (version "3.2.3")
19136 (source
19137 (origin
19138 (method git-fetch)
19139 (uri (git-reference
19140 (url "https://github.com/fabioz/PyDev.Debugger")
19141 (commit (string-append
19142 "pydev_debugger_"
19143 (string-join (string-split version #\.) "_")))))
19144 (modules '((guix build utils)))
19145 (snippet '(begin
19146 ;; Delete pre-built binaries.
19147 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
19148 ;; This source is generated via Cython.
19149 (delete-file "_pydevd_bundle/pydevd_cython.c")))
19150 (file-name (git-file-name name version))
19151 (sha256
19152 (base32
19153 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
19154 (build-system pyproject-build-system)
19155 (arguments
19156 (list
19157 #:test-flags
19158 #~(list "-n" (number->string (parallel-job-count))
19159 "-m" "not flaky"
19160 "-k"
19161 (string-join
19162 (list
19163 ;; The two "break_01" tests have been failing on
19164 ;; Python 3.10:
19165 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
19166 "not test_set_pydevd_break_01 "
19167 ;; the GUI event loop requires an X server.
19168 "test_gui_event_loop_custom"
19169 ;; This test validates that 'pydevd' is not in the
19170 ;; exception message, but it is due to being part
19171 ;; of the build file name present in the message.
19172 "test_evaluate_exception_trace"
19173 ;; This test fail with TimeoutError, no message on stderr.
19174 "test_soft_terminate"
19175 "test_debugger_case_deadlock_interrupt_thread"
19176 ;; subprocess.CalledProcessError
19177 ;; Python 3.11/3.12 specific issue:
19178 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
19179 "test_find_main_thread_id")
19180 " and not "))
19181 #:phases
19182 #~(modify-phases %standard-phases
19183 (add-after 'unpack 'fix-tests
19184 (lambda _
19185 (substitute* "tests_python/test_convert_utilities.py"
19186 ;; Add missing trailing '/'.
19187 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
19188 (string-append all "/")))))
19189 (add-after 'unpack 'patch-command-paths
19190 (lambda* (#:key inputs #:allow-other-keys)
19191 (substitute* "_pydevd_bundle/pydevd_api.py"
19192 (("'kill'")
19193 (format #f "~s" (search-input-file inputs "bin/kill")))
19194 (("'pgrep'")
19195 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
19196 (add-after 'unpack 'generate-sources
19197 (lambda _
19198 (setenv "PYTHONPATH" (getcwd))
19199 (invoke "python" "build_tools/build.py")))
19200 (add-after 'unpack 'adjust-attach-binary-name
19201 (lambda _
19202 (substitute*
19203 '("pydevd_tracing.py"
19204 "pydevd_attach_to_process/add_code_to_python_process.py")
19205 (("def get_(target|python_helper_lib)_filename.*" all)
19206 (format #f "~a return ~s~%" all
19207 (string-append #$output "/lib/attach.so"))))))
19208 (add-after 'unpack 'patch-gdb
19209 (lambda* (#:key inputs #:allow-other-keys)
19210 (substitute*
19211 "pydevd_attach_to_process/add_code_to_python_process.py"
19212 (("'gdb',")
19213 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
19214 (add-after 'build 'build-attach-linux-binary
19215 (lambda _
19216 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
19217 "-fPIC" "-nostartfiles"
19218 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
19219 (add-before 'check 'pre-check
19220 (lambda* (#:key tests? #:allow-other-keys)
19221 (when tests?
19222 (setenv "PYDEVD_USE_CYTHON" "YES"))))
19223 (add-after 'install 'install-attach-binary
19224 (lambda _
19225 (install-file "attach.so"
19226 (string-append #$output "/lib"))))
19227 ;; Some modules aren't designed to be loadable by themselves, such
19228 ;; as 'pydev_app_engine_debug_startup' and fail.
19229 (delete 'sanity-check))))
19230 (native-inputs
19231 (list python-cython
19232 python-numpy
19233 python-psutil
19234 python-pytest
19235 python-pytest-xdist
19236 python-setuptools
19237 python-trio
19238 python-untangle
19239 python-wheel))
19240 (inputs (list coreutils gdb/pinned procps))
19241 (home-page "https://github.com/fabioz/PyDev.Debugger/")
19242 (synopsis "Python debugger")
19243 (description "PyDev.Debugger is a capable Python debugger used in PyDev
19244and other @acronym{IDEs, Integrated Development Environments}.")
19245 (license license:epl1.0)))
19246
19247(define-public python-debugpy
19248 (package
19249 (name "python-debugpy")
19250 (version "1.8.17")
19251 (source
19252 (origin
19253 (method git-fetch)
19254 (uri (git-reference ;no tests in PyPI archive
19255 (url "https://github.com/microsoft/debugpy")
19256 (commit (string-append "v" version))))
19257 (file-name (git-file-name name version))
19258 (modules '((guix build utils)))
19259 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
19260 ;; attach binary.
19261 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
19262 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
19263 (sha256
19264 (base32
19265 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
19266 (build-system pyproject-build-system)
19267 (arguments
19268 (list
19269 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
19270 #:phases
19271 #~(modify-phases %standard-phases
19272 (add-after 'unpack 'patch-sh-in-tests
19273 (lambda _
19274 (substitute* "tests/debugpy/test_run.py"
19275 (("#!/bin/sh")
19276 (string-append "#!" (which "sh"))))))
19277 (add-before 'build 'configure
19278 (lambda _
19279 ;; This adjusts the behavior of debugpy to load pydevd from
19280 ;; Python site packages.
19281 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
19282 (native-inputs
19283 (list python-setuptools
19284 python-versioneer))
19285 (propagated-inputs
19286 (list python-pydevd))
19287 (home-page "https://aka.ms/debugpy")
19288 (synopsis "Debug Adapter Protocol Python implementation")
19289 (description "An implementation of the Debug Adapter Protocol for
19290Python.")
19291 (license license:expat)))
19292
19293(define-public python-debian
19294 (package
19295 (name "python-debian")
19296 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
19297 (version "0.1.49")
19298 (source
19299 (origin
19300 ;; Use git-fetch, as pypi doesn't include test suite.
19301 (method git-fetch)
19302 (uri (git-reference
19303 (url home-page)
19304 (commit version)))
19305 (file-name (git-file-name name version))
19306 (sha256
19307 (base32
19308 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
19309 (modules '((guix build utils)))
19310 (snippet
19311 #~(begin
19312 ;; python-apt, apt and dpkg are not yet available in guix,
19313 ;; and these tests heavily depend on them.
19314 (for-each delete-file
19315 '("lib/debian/tests/test_deb822.py"
19316 "lib/debian/tests/test_debfile.py"))
19317
19318 ;; for reproducible builds, otherwise python-debian
19319 ;; generates a _version.py including the date
19320 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
19321 (substitute* "lib/debian/_version.py"
19322 (("__CHANGELOG_VERSION__") #$version))))))
19323 (build-system pyproject-build-system)
19324 (native-inputs
19325 (list python-pytest python-setuptools))
19326 (propagated-inputs
19327 (list python-six python-chardet))
19328 (synopsis "Debian package related modules")
19329 (description
19330 "This package provides Python modules that abstract many formats of
19331Debian-related files, such as:
19332@itemize
19333@item Debtags information;
19334@item @file{debian/changelog} files;
19335@item packages files, pdiffs;
19336@item control files of single or multiple RFC822-style paragraphs---e.g.
19337 @file{debian/control}, @file{.changes}, @file{.dsc};
19338@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
19339 contained files and meta-information.
19340@end itemize")
19341 ;; Modules are either GPLv2+ or GPLv3+.
19342 (license license:gpl3+)))
19343
19344(define-public python-json-spec
19345 (package
19346 (name "python-json-spec")
19347 (version "0.12.0")
19348 (source
19349 (origin
19350 (method git-fetch) ;no tests in PyPI archive
19351 (uri (git-reference
19352 (url "https://github.com/johnnoone/json-spec")
19353 (commit version)))
19354 (file-name (git-file-name name version))
19355 (sha256
19356 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
19357 (build-system pyproject-build-system)
19358 (native-inputs
19359 (list python-pytest
19360 python-poetry-core))
19361 (propagated-inputs
19362 (list python-termcolor)) ;for the CLI
19363 (home-page "https://json-spec.readthedocs.io/")
19364 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
19365 (description
19366 "This Python library implements several JSON specs, like JSON Schema,
19367JSON Reference and JSON Pointer.")
19368 (license license:bsd-3)))
19369
19370(define-public python-fastbencode
19371 (package
19372 (name "python-fastbencode")
19373 (version "0.3.9")
19374 (source
19375 (origin
19376 (method git-fetch)
19377 (uri (git-reference
19378 (url "https://github.com/breezy-team/fastbencode")
19379 (commit (string-append "v" version))))
19380 (file-name (git-file-name name version))
19381 (sha256
19382 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
19383 (build-system pyproject-build-system)
19384 (arguments
19385 (list
19386 #:test-backend #~'unittest
19387 #:test-flags #~(list "tests.test_suite")
19388 #:imported-modules (append %cargo-build-system-modules
19389 %pyproject-build-system-modules)
19390 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
19391 (guix build pyproject-build-system)
19392 (guix build utils))
19393 #:phases
19394 #~(modify-phases %standard-phases
19395 (add-after 'unpack 'prepare-cargo-build-system
19396 (lambda args
19397 (for-each
19398 (lambda (phase)
19399 (format #t "Running cargo phase: ~a~%" phase)
19400 (apply (assoc-ref cargo:%standard-phases phase)
19401 #:cargo-target #$(cargo-triplet)
19402 args))
19403 '(unpack-rust-crates
19404 configure
19405 check-for-pregenerated-files
19406 patch-cargo-checksums)))))))
19407 (inputs (cargo-inputs 'fastbencode))
19408 (native-inputs
19409 (append
19410 (list python-setuptools-rust
19411 rust
19412 `(,rust "cargo"))
19413 (or (and=> (%current-target-system)
19414 (compose list make-rust-sysroot))
19415 '())))
19416 (home-page "https://github.com/breezy-team/fastbencode")
19417 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
19418 (description
19419 "The fastbencode Python package implements the bencode serialization
19420format for storing and transmitting loosely structured data, originally used
19421by BitTorrent.
19422
19423The format can encode four different types of values: byte strings, integers,
19424lists, and dictionaries (associative arrays). It's simple and unaffected by
19425endianness,
19426
19427This package includes both a pure-Python version and an optional C extension
19428based on Cython. Both provide the same functionality, but the C version has
19429significantly better performance.")
19430 (license (list license:expat ; _bencode_py.py
19431 license:gpl2+)))) ; __init__.py
19432
19433(define-public python-fastjsonschema
19434 (package
19435 (name "python-fastjsonschema")
19436 (version "2.21.1")
19437 (source
19438 (origin
19439 (method git-fetch) ; no tests in PyPI release
19440 (uri (git-reference
19441 (url "https://github.com/horejsek/python-fastjsonschema")
19442 (commit (string-append "v" version))))
19443 (file-name (git-file-name name version))
19444 (sha256
19445 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
19446 (build-system pyproject-build-system)
19447 (arguments
19448 (list
19449 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
19450 (native-inputs
19451 (list python-json-spec
19452 python-jsonschema
19453 python-pytest
19454 python-pytest-benchmark
19455 python-setuptools))
19456 (home-page "https://github.com/horejsek/python-fastjsonschema")
19457 (synopsis "Fast Python implementation of JSON schema")
19458 (description
19459 "This library implements validation of JSON documents by JSON schema for
19460drafts 04, 06 and 07.")
19461 (license license:bsd-3)))
19462
19463(define-public python-nbformat
19464 (package
19465 (name "python-nbformat")
19466 (version "5.10.4")
19467 ;; The PyPi release tarball lacks some test cases and test data.
19468 (source (origin
19469 (method git-fetch)
19470 (uri (git-reference
19471 (url "https://github.com/jupyter/nbformat")
19472 (commit (string-append "v" version))))
19473 (sha256
19474 (base32
19475 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
19476 (file-name (git-file-name name version))))
19477 (build-system pyproject-build-system)
19478 (arguments
19479 (list
19480 #:phases
19481 #~(modify-phases %standard-phases
19482 ;; We don't want to use hatch-nodejs just to get a version string.
19483 (add-after 'unpack 'patch-pyproject
19484 (lambda _
19485 (substitute* "pyproject.toml"
19486 ((", \"hatch-nodejs-version\"") "")
19487 (("dynamic = \\[\"version\"\\]")
19488 (string-append "version = \"" #$version "\""))))))))
19489 (propagated-inputs
19490 (list python-fastjsonschema python-jsonschema python-jupyter-core
19491 python-traitlets))
19492 (native-inputs
19493 (list python-hatchling
19494 python-pep440
19495 python-pytest
19496 python-testpath))
19497 (home-page "https://jupyter.org")
19498 (synopsis "Jupyter Notebook format")
19499 (description "This package provides the reference implementation of the
19500Jupyter Notebook format and Python APIs for working with notebooks.")
19501 (license license:bsd-3)))
19502
19503(define-public python-nb-clean
19504 (package
19505 (name "python-nb-clean")
19506 (version "4.0.1")
19507 (source
19508 (origin
19509 (method git-fetch) ; no tests in PyPI
19510 (uri (git-reference
19511 (url "https://github.com/srstevenson/nb-clean")
19512 (commit version)))
19513 (file-name (git-file-name name version))
19514 (sha256
19515 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
19516 (build-system pyproject-build-system)
19517 (native-inputs (list python-poetry-core
19518 python-pytest
19519 python-pytest-mock))
19520 (propagated-inputs (list python-nbformat))
19521 (home-page "https://github.com/srstevenson/nb-clean")
19522 (synopsis "Clean Jupyter notebooks for versioning")
19523 (description "This package cleans Jupyter notebooks of cell execution
19524counts, metadata, outputs, and empty cells, preparing them for committing to
19525version control. It provides a Git filter to automatically clean notebooks
19526before they're staged, and can also be used with other version control
19527systems, as a command line tool, and as a Python library.")
19528 (license license:isc)))
19529
19530(define-public python-entrypoints
19531 (package
19532 (name "python-entrypoints")
19533 (version "0.4")
19534 (source
19535 (origin
19536 (method url-fetch)
19537 (uri (pypi-uri "entrypoints" version))
19538 (sha256
19539 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
19540 (build-system pyproject-build-system)
19541 (native-inputs
19542 (list python-flit-core
19543 python-pytest))
19544 (home-page "https://github.com/takluyver/entrypoints")
19545 (synopsis "Discover and load entry points from installed Python packages")
19546 (description "Entry points are a way for Python packages to advertise
19547objects with some common interface. The most common examples are
19548@code{console_scripts} entry points, which define shell commands by
19549identifying a Python function to run. The @code{entrypoints} module contains
19550functions to find and load entry points.")
19551 (license license:expat)))
19552
19553(define-public python-epc
19554 (package
19555 (name "python-epc")
19556 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
19557 (revision . "0")))
19558 (version (git-version "0.0.5"
19559 (assoc-ref properties 'revision)
19560 (assoc-ref properties 'commit)))
19561 (source
19562 (origin
19563 (method git-fetch)
19564 (uri (git-reference
19565 (url "https://github.com/tkf/python-epc")
19566 (commit (assoc-ref properties 'commit))))
19567 (file-name (git-file-name name version))
19568 (sha256
19569 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
19570 (build-system pyproject-build-system)
19571 (arguments (list #:test-backend #~'nose))
19572 (propagated-inputs (list python-sexpdata))
19573 (native-inputs (list python-pynose python-setuptools))
19574 (home-page "https://github.com/tkf/python-epc")
19575 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
19576 (description
19577 "Python-EPC can call elisp functions from Python and Python functions
19578from elisp.")
19579 (license license:gpl3)))
19580
19581(define-public python-forex-python
19582 (package
19583 (name "python-forex-python")
19584 (version "1.5")
19585 (source
19586 (origin
19587 (method git-fetch)
19588 (uri (git-reference
19589 (url "https://github.com/MicroPyramid/forex-python")
19590 (commit version)))
19591 (file-name (git-file-name name version))
19592 (sha256
19593 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19594 (build-system pyproject-build-system)
19595 (arguments (list #:tests? #f)) ; Tests require online data.
19596 (native-inputs (list python-setuptools))
19597 (propagated-inputs (list python-requests python-simplejson))
19598 (home-page "https://github.com/MicroPyramid/forex-python")
19599 (synopsis "Foreign exchange rates and currency conversion")
19600 (description
19601 "@code{python-forex-python} can be used to manipulate foreign
19602exchange rates and to operate currency conversions.
19603
19604Features:
19605@itemize
19606@item List all currency rates.
19607@item BitCoin price for all currencies.
19608@item Converting amount to BitCoins.
19609@item Get historical rates for any day since 1999.
19610@item Conversion rate for one currency(ex; USD to INR).
19611@item Convert amount from one currency to other.('USD 10$' to INR).
19612@item Currency symbols.
19613@item Currency names.
19614@end itemize")
19615 (license license:expat)))
19616
19617(define-public python-simpleeval
19618 (package
19619 (name "python-simpleeval")
19620 (version "0.9.12")
19621 (source
19622 (origin
19623 (method git-fetch)
19624 (uri (git-reference
19625 (url "https://github.com/danthedeckie/simpleeval")
19626 (commit version)))
19627 (file-name (git-file-name name version))
19628 (sha256
19629 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19630 (build-system pyproject-build-system)
19631 (native-inputs (list python-pytest python-setuptools))
19632 (home-page "https://github.com/danthedeckie/simpleeval")
19633 (synopsis "Simple, safe single expression evaluator library")
19634 (description
19635 "This package provides a quick single file library for easily adding
19636evaluatable expressions into python projects. Say you want to allow a user
19637to set an alarm volume, which could depend on the time of day, alarm level,
19638how many previous alarms had gone off, and if there is music playing at the
19639time.")
19640 (license license:expat)))
19641
19642(define-public python-haas
19643 ;; A recent revision is required to avoid obsoleted dependencies.
19644 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19645 (revision "0"))
19646 (package
19647 (name "python-haas")
19648 (version (git-version "0.9.0" revision commit))
19649 (source
19650 (origin
19651 (method git-fetch)
19652 (uri (git-reference
19653 (url "https://github.com/scalative/haas")
19654 (commit commit)))
19655 (file-name (git-file-name name version))
19656 (sha256
19657 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19658 (build-system pyproject-build-system)
19659 (propagated-inputs
19660 (list python-stevedore))
19661 (native-inputs
19662 (list python-coverage
19663 python-pytest
19664 python-setuptools
19665 python-testfixtures))
19666 (home-page "https://github.com/scalative/haas")
19667 (synopsis "Extensible Python test runner")
19668 (description "Haas is a python test runner that is backward-compatible
19669with Python's built-in unittest test-cases, but supports more advanced
19670features, such as project-specific plugins.")
19671 (license license:bsd-3))))
19672
19673(define-public python-okonomiyaki
19674 (package
19675 (name "python-okonomiyaki")
19676 (version "3.0.0")
19677 (source
19678 (origin
19679 (method git-fetch)
19680 (uri (git-reference
19681 (url "https://github.com/enthought/okonomiyaki/")
19682 (commit version)))
19683 (file-name (git-file-name name version))
19684 (sha256
19685 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19686 (build-system pyproject-build-system)
19687 (arguments
19688 (list
19689 #:phases
19690 #~(modify-phases %standard-phases
19691 ;; Unknown platform.
19692 (add-before 'check 'delete-fail-tests
19693 (lambda _
19694 (delete-file-recursively
19695 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19696 (native-inputs
19697 (list python-distro
19698 python-haas
19699 python-jsonschema
19700 python-packaging
19701 python-parameterized
19702 python-pytest
19703 python-setuptools
19704 python-testfixtures
19705 python-zipfile2))
19706 (home-page "https://github.com/enthought/okonomiyaki/")
19707 (synopsis "Python library to deal with Enthought-specific metadata")
19708 (description
19709 "Okonomiyaki is a self-contained library aiming at consolidating
19710low-level code used in Enthought-specific egg and runtime archives.")
19711 (license license:bsd-3)))
19712
19713(define-public python-nbconvert
19714 (package
19715 (name "python-nbconvert")
19716 (version "7.17.0")
19717 (source
19718 (origin
19719 (method url-fetch)
19720 (uri (pypi-uri "nbconvert" version))
19721 (sha256
19722 (base32
19723 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19724 (build-system pyproject-build-system)
19725 (arguments
19726 (list
19727 #:test-flags
19728 '(list "-k"
19729 (string-append
19730 ;; These tests require pyppeteer, not yet
19731 ;; available in Guix.
19732 "not test_webpdf_with_chromium"
19733 " and not test_webpdf.py"
19734 ;; These tests require ipywidgets, which would
19735 ;; introduce a dependency cycle.
19736 " and not test_execute_widgets_from_nbconvert"
19737 " and not test_execute_multiple_notebooks"
19738
19739 ;; This test calls nbconvert itself via "sys.executable -m
19740 ;; nbconvert". It's probably harmless.
19741 " and not test_default_config"))
19742 #:phases
19743 #~(modify-phases %standard-phases
19744 (add-after 'unpack 'fix-paths
19745 (lambda* (#:key inputs #:allow-other-keys)
19746 ;; Use pandoc binary from input.
19747 (substitute* "nbconvert/utils/pandoc.py"
19748 (("'pandoc'")
19749 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
19750 ;; Same for LaTeX.
19751 (substitute* "nbconvert/exporters/pdf.py"
19752 (("\"xelatex\"")
19753 (format #f "~s" (search-input-file inputs "bin/xelatex")))
19754 (("\"bibtex\"")
19755 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
19756 ;; Likewise for Inkscape.
19757 (substitute* "nbconvert/preprocessors/svg2pdf.py"
19758 (("inkscape_path = which\\(\"inkscape\")")
19759 (format #f "inkscape_path = ~s"
19760 (search-input-file inputs "bin/inkscape"))))))
19761 (add-after 'unpack 'ignore-deprecation-warnings
19762 (lambda _
19763 (substitute* "pyproject.toml"
19764 (("\"ignore:nbconvert.utils" m)
19765 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
19766 m)))))
19767 (add-before 'check 'pre-check
19768 (lambda _
19769 ;; Tests depend on templates installed to output.
19770 (setenv "JUPYTER_PATH"
19771 (string-append #$output "/share/jupyter:"
19772 (getenv "JUPYTER_PATH")))
19773 ;; jupyter-core demands this
19774 (setenv "JUPYTER_PLATFORM_DIRS" "1")
19775 ;; Tests need writable HOME and TEXMFVAR.
19776 (setenv "HOME" "/tmp")
19777 (setenv "TEXMFVAR" "/tmp"))))))
19778 (inputs
19779 (list inkscape/pinned pandoc))
19780 (native-inputs
19781 (list python-flaky
19782 python-hatchling
19783 python-ipykernel
19784 ;; Adding ipywidgets would create a cycle.
19785 ;;python-ipywidgets
19786 python-pytest
19787 (texlive-local-tree
19788 (list texlive-adjustbox
19789 texlive-booktabs
19790 texlive-caption
19791 texlive-enumitem
19792 texlive-eurosym
19793 texlive-fancyvrb
19794 texlive-float
19795 texlive-fontspec
19796 texlive-grffile
19797 texlive-jknapltx
19798 texlive-parskip
19799 texlive-pdfcol
19800 texlive-rsfs
19801 texlive-soul
19802 texlive-tcolorbox
19803 texlive-titling
19804 texlive-ulem
19805 texlive-unicode-math
19806 texlive-upquote
19807 texlive-xetex))))
19808 (propagated-inputs
19809 (list python-beautifulsoup4
19810 python-bleach
19811 python-defusedxml
19812 python-jinja2
19813 python-jupyter-core
19814 python-jupyterlab-pygments
19815 python-markupsafe
19816 python-mistune
19817 python-nbclient
19818 python-nbformat
19819 python-packaging
19820 python-pandocfilters
19821 python-pygments
19822 python-tinycss2
19823 python-traitlets
19824 ;; Required, even if [serve] is not used.
19825 python-tornado
19826 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
19827 texlive-adjustbox
19828 texlive-amsmath
19829 texlive-booktabs
19830 texlive-caption
19831 texlive-collection-basic
19832 texlive-enumitem
19833 texlive-environ
19834 texlive-etoolbox
19835 texlive-eurosym
19836 texlive-etoolbox
19837 texlive-fancyvrb
19838 texlive-float
19839 texlive-fontspec
19840 texlive-geometry
19841 texlive-grffile
19842 texlive-hyperref
19843 texlive-infwarerr
19844 texlive-jknapltx
19845 texlive-kvoptions
19846 texlive-lm
19847 texlive-lm-math
19848 texlive-mathpazo
19849 texlive-parskip
19850 texlive-pdfcol
19851 texlive-pgf
19852 texlive-rsfs
19853 texlive-soul
19854 texlive-stringenc
19855 texlive-tcolorbox
19856 texlive-titling
19857 texlive-tools
19858 texlive-trimspaces
19859 texlive-ucs
19860 texlive-ulem
19861 texlive-unicode-math
19862 texlive-upquote
19863 texlive-xcolor
19864 texlive-xetex
19865 texlive-zapfding))
19866 (home-page "https://jupyter.org")
19867 (synopsis "Converting Jupyter Notebooks")
19868 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
19869notebooks to various other formats via Jinja templates. It allows you to
19870convert an @code{.ipynb} notebook file into various static formats including:
19871
19872@enumerate
19873@item HTML
19874@item LaTeX
19875@item PDF
19876@item Reveal JS
19877@item Markdown (md)
19878@item ReStructured Text (rst)
19879@item executable script
19880@end enumerate\n")
19881 (license license:bsd-3)))
19882
19883(define-public python-ipywidgets
19884 (package
19885 (name "python-ipywidgets")
19886 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
19887 (version "8.1.4")
19888 (source
19889 (origin
19890 (method url-fetch)
19891 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
19892 (uri (pypi-uri "ipywidgets" version))
19893 (sha256
19894 (base32
19895 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
19896 (build-system pyproject-build-system)
19897 (native-inputs
19898 (list python-ipykernel
19899 python-jsonschema
19900 python-pytest
19901 python-pytz
19902 python-setuptools))
19903 (propagated-inputs
19904 (list python-comm
19905 python-ipython
19906 python-jupyterlab-widgets
19907 python-traitlets
19908 python-widgetsnbextension))
19909 (home-page "https://ipython.org")
19910 (synopsis "IPython HTML widgets for Jupyter")
19911 (description "Ipywidgets are interactive HTML widgets for Jupyter
19912notebooks and the IPython kernel. Notebooks come alive when interactive
19913widgets are used. Users gain control of their data and can visualize changes
19914in the data.")
19915 (license license:bsd-3)))
19916
19917(define-public python-jsbeautifier
19918 (package
19919 (name "python-jsbeautifier")
19920 (version "1.15.3")
19921 (home-page "https://github.com/beautify-web/js-beautify")
19922 (source
19923 (origin
19924 (method git-fetch)
19925 (uri (git-reference
19926 (url home-page)
19927 (commit (string-append "v" version))))
19928 (file-name (git-file-name name version))
19929 (sha256
19930 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
19931 (build-system pyproject-build-system)
19932 (arguments
19933 (list
19934 #:phases
19935 #~(modify-phases %standard-phases
19936 (add-after 'unpack 'chdir
19937 (lambda _
19938 (chdir "python")
19939 (rename-file "setup-js.py" "setup.py"))))))
19940 (propagated-inputs (list python-editorconfig python-six))
19941 (native-inputs (list python-pytest python-setuptools))
19942 (synopsis "JavaScript unobfuscator and beautifier")
19943 (description
19944 "This packages provides tooling to beautify, unpack or deobfuscate
19945JavaScript, leveraging popular online obfuscators.")
19946 (license license:expat)))
19947
19948(define-public python-chardet
19949 (package
19950 (name "python-chardet")
19951 (version "5.2.0")
19952 (source
19953 (origin
19954 (method url-fetch)
19955 (uri (pypi-uri "chardet" version))
19956 (sha256
19957 (base32
19958 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
19959 (native-inputs
19960 (list python-pytest python-setuptools python-wheel))
19961 (build-system pyproject-build-system)
19962 (arguments
19963 (list #:test-flags
19964 ;; Disable test that fails sporadically:
19965 ;; https://github.com/chardet/chardet/issues/256
19966 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
19967 #:phases
19968 #~(modify-phases %standard-phases
19969 ;; This package provides a 'chardetect' executable that only
19970 ;; depends on Python, so customize the wrap phase to avoid
19971 ;; adding pytest and friends in order to save size.
19972 ;; (See also <https://bugs.gnu.org/25235>.)
19973 (replace 'wrap
19974 (lambda* (#:key inputs outputs #:allow-other-keys)
19975 (let* ((sitedir (site-packages inputs outputs))
19976 (python (dirname (dirname
19977 (search-input-file
19978 inputs "bin/python"))))
19979 (python-sitedir
19980 (string-append python "/lib/python"
19981 (python-version python)
19982 "/site-packages")))
19983 (wrap-program (string-append #$output "/bin/chardetect")
19984 `("GUIX_PYTHONPATH" ":" suffix
19985 ,(list sitedir python-sitedir)))))))))
19986 (home-page "https://github.com/chardet/chardet")
19987 (synopsis "Universal encoding detector for Python 2 and 3")
19988 (description
19989 "This package provides @code{chardet}, a Python module that can
19990automatically detect a wide range of file encodings.")
19991 (license license:lgpl2.1+)))
19992
19993(define-public python-charset-normalizer
19994 (package
19995 (name "python-charset-normalizer")
19996 (version "3.4.2")
19997 (source
19998 (origin
19999 (method url-fetch)
20000 (uri (pypi-uri "charset_normalizer" version))
20001 (sha256
20002 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
20003 (build-system pyproject-build-system)
20004 (arguments
20005 (list
20006 #:phases
20007 #~(modify-phases %standard-phases
20008 ;; https://github.com/jawah/charset_normalizer/issues/625
20009 ;; https://github.com/jawah/charset_normalizer/pull/626
20010 (add-after 'unpack 'fix-scripts
20011 (lambda _
20012 (substitute* "pyproject.toml"
20013 (("charset_normalizer:cli.cli_detect")
20014 "charset_normalizer.cli:cli_detect")))))))
20015 (native-inputs
20016 (list python-pytest
20017 python-setuptools))
20018 (home-page "https://github.com/ousret/charset_normalizer")
20019 (synopsis "Universal Charset Detector, alternative to Chardet")
20020 (description "This library helps you read text from an unknown charset
20021encoding. Motivated by @code{chardet}, it tries to resolve the issue by
20022taking a new approach. All IANA character set names for which the Python core
20023library provides codecs are supported.")
20024 (license license:expat)))
20025
20026(define-public python-docopt
20027 (package
20028 (name "python-docopt")
20029 (version "0.6.2")
20030 (source
20031 (origin
20032 (method git-fetch)
20033 (uri (git-reference
20034 (url "https://github.com/docopt/docopt")
20035 (commit version)))
20036 (file-name (git-file-name name version))
20037 (sha256
20038 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
20039 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
20040 (build-system pyproject-build-system)
20041 ;; tests: 203 passed, 6 warnings
20042 (native-inputs
20043 (list python-pytest-8 python-setuptools))
20044 (home-page "http://docopt.org")
20045 (synopsis "Command-line interface description language for Python")
20046 (description
20047 "This library allows the user to define a command-line interface from a
20048program's help message rather than specifying it programmatically with
20049command-line parsers like @code{getopt} and @code{argparse}.")
20050 (license license:expat)))
20051
20052(define-public python-pythonanywhere
20053 (package
20054 (name "python-pythonanywhere")
20055 (version "0.19.0")
20056 (source
20057 (origin
20058 (method git-fetch)
20059 (uri (git-reference
20060 (url "https://github.com/pythonanywhere/helper_scripts")
20061 (commit (string-append "v" version))))
20062 (file-name (git-file-name name version))
20063 (sha256
20064 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
20065 (build-system pyproject-build-system)
20066 (arguments
20067 (list
20068 #:test-flags
20069 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
20070 "-k" (string-join
20071 ;; Network access is required to clone external
20072 ;; repositories.
20073 (list "not test_actually_creates_django_project_in_vir"
20074 "test_actually_downloads_repo"
20075 "test_actually_installing_a_real_package"
20076 "test_actually_works_against_example_repo"
20077 "test_autoconfigure_actually_works_against_example_repo"
20078 "test_exits_because_boolean_not_satisfied"
20079 "test_gets_version"
20080 "test_nuke_option_lets_you_run_twice"
20081 "test_nuke_option_lets_you_run_twice"
20082 "test_start_actually_creates_django_project_in_vir")
20083 " and not "))
20084 #:phases
20085 #~(modify-phases %standard-phases
20086 (add-after 'unpack 'relax-requirements
20087 (lambda _
20088 (substitute* "pyproject.toml"
20089 (("\"schema==.*\",")
20090 "\"schema\","))))
20091 (add-before 'check 'change-home
20092 (lambda _
20093 (setenv "HOME" "/tmp"))))))
20094 (native-inputs
20095 (list python-psutil
20096 python-pytest
20097 python-pytest-mock
20098 python-responses
20099 python-setuptools))
20100 (propagated-inputs
20101 (list python-dateutil
20102 python-docopt
20103 python-packaging
20104 python-pythonanywhere-core
20105 python-requests
20106 python-schema
20107 python-snakesay
20108 python-tabulate
20109 python-typer))
20110 (home-page "https://github.com/pythonanywhere/helper_scripts/")
20111 (synopsis "PythonAnywhere helper tools for users")
20112 (description
20113 "PythonAnywhere provides a command-line interface and an application
20114programming interface that allows managing files Web apps, scheduled
20115tasks and students. It includes single-command deployment for the Django Girls
20116tutorial.")
20117 (license license:expat)))
20118
20119(define-public python-pythonanywhere-core
20120 (package
20121 (name "python-pythonanywhere-core")
20122 (version "0.3.0")
20123 (source
20124 (origin
20125 (method git-fetch)
20126 (uri (git-reference
20127 (url "https://github.com/pythonanywhere/pythonanywhere-core")
20128 (commit (string-append "v" version))))
20129 (file-name (git-file-name name version))
20130 (sha256
20131 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
20132 (build-system pyproject-build-system)
20133 (arguments
20134 (list
20135 #:phases
20136 #~(modify-phases %standard-phases
20137 (add-before 'check 'pre-check
20138 (lambda _
20139 (setenv "HOME" "/tmp"))))))
20140 (native-inputs
20141 (list python-poetry-core
20142 python-pytest
20143 python-pytest-mock
20144 python-responses))
20145 (propagated-inputs
20146 (list python-dateutil
20147 python-requests
20148 python-snakesay
20149 python-typing-extensions))
20150 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
20151 (synopsis "API wrapper for PythonAnywhere services")
20152 (description
20153 "This package provides an API wrapper for programmatic management of
20154@code{PythonAnywhere} services.")
20155 (license license:expat)))
20156
20157(define-public python-dialog
20158 (package
20159 (name "python-dialog")
20160 (version "3.5.3")
20161 (source
20162 (origin
20163 (method url-fetch)
20164 (uri (pypi-uri "pythondialog" version))
20165 (sha256
20166 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
20167 (modules '((guix build utils)))
20168 (snippet #~(delete-file-recursively "doc"))))
20169 (build-system pyproject-build-system)
20170 (arguments
20171 (list
20172 ;; XXX: There are no tests, but some examples. However, they need to
20173 ;; be run on a terminal.
20174 #:tests? #f
20175 #:phases
20176 #~(modify-phases %standard-phases
20177 (add-after 'unpack 'patch-path
20178 (lambda* (#:key inputs #:allow-other-keys)
20179 (substitute* "dialog.py"
20180 (("_path_to_executable\\(dialog\\)")
20181 (format #f "os.path.realpath(~s)"
20182 (search-input-file inputs "bin/dialog")))))))))
20183 (native-inputs (list python-setuptools))
20184 (inputs (list dialog))
20185 (home-page "https://pythondialog.sourceforge.net/")
20186 (synopsis "Python interface to the UNIX dialog utility")
20187 (description
20188 "A Python wrapper for the dialog utility. Its purpose is to provide an
20189easy to use, pythonic and comprehensive Python interface to dialog. This
20190allows one to make simple text-mode user interfaces on Unix-like systems")
20191 (license license:lgpl2.1)))
20192
20193(define-deprecated-package python-pythondialog python-dialog)
20194
20195(define-public python-confection
20196 (package
20197 (name "python-confection")
20198 (version "1.3.3")
20199 (source
20200 (origin
20201 (method git-fetch)
20202 (uri (git-reference
20203 (url "https://github.com/explosion/confection")
20204 (commit (string-append "release-v" version))))
20205 (file-name (git-file-name name version))
20206 (sha256
20207 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
20208 (build-system pyproject-build-system)
20209 (arguments
20210 (list
20211 #:phases
20212 #~(modify-phases %standard-phases
20213 (add-before 'check 'patch-pythonpath
20214 (lambda _
20215 (setenv "PYTHONPATH"
20216 (string-append (getcwd) ":"
20217 (getenv "GUIX_PYTHONPATH"))))))))
20218 (propagated-inputs (list python-pydantic python-srsly))
20219 (native-inputs (list python-pytest python-setuptools))
20220 (home-page "https://github.com/explosion/confection")
20221 (synopsis "Config system for Python")
20222 (description
20223 "Confection is a lightweight library that offers a configuration system
20224letting you conveniently describe arbitrary trees of objects.")
20225 (license license:expat)))
20226
20227(define-public python-configobj
20228 (package
20229 (name "python-configobj")
20230 (version "5.0.9")
20231 (source
20232 (origin
20233 (method url-fetch)
20234 (uri (pypi-uri "configobj" version))
20235 (sha256
20236 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
20237 (build-system pyproject-build-system)
20238 (native-inputs
20239 (list python-pytest
20240 python-setuptools))
20241 (home-page "https://github.com/DiffSK/configobj")
20242 (synopsis "Config file reading, writing and validation")
20243 (description
20244 "ConfigObj is a simple but powerful config file reader and writer: an
20245 ini file round tripper. Its main feature is that it is very easy to use,
20246with a straightforward programmer’s interface and a simple syntax for config
20247files.")
20248 (license license:bsd-3)))
20249
20250(define-public python-omegaconf
20251 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
20252 (revision "1"))
20253 (package
20254 (name "python-omegaconf")
20255 (version (git-version "2.3.0" revision commit))
20256 (source
20257 (origin
20258 (method git-fetch)
20259 (uri (git-reference
20260 (url "https://github.com/omry/omegaconf")
20261 (commit commit)))
20262 (file-name (git-file-name name version))
20263 (modules '((guix build utils)))
20264 (snippet
20265 #~(begin
20266 (delete-file-recursively "build_helpers/bin")
20267 (substitute* "build_helpers/build_helpers.py"
20268 (("java") "antlr4")
20269 (("\"-jar\",") "")
20270 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
20271 (sha256
20272 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
20273 (build-system pyproject-build-system)
20274 (arguments
20275 (list
20276 #:test-flags
20277 ;; XXX: Those tests currently fail collection.
20278 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
20279 "--ignore=tests/test_basic_ops_list.py"
20280 "--ignore=tests/test_merge.py"
20281 "--ignore=tests/test_select.py")
20282 #:phases
20283 #~(modify-phases %standard-phases
20284 (add-after 'unpack 'loosen-requirements
20285 (lambda _
20286 (substitute* "requirements/base.txt"
20287 (("antlr4-python3-runtime==.*")
20288 "antlr4-python3-runtime >=4.9\n"))
20289 ;; Ignore deprecation warnings.
20290 (substitute* "pyproject.toml"
20291 (("-Werror") "")))))))
20292 (native-inputs
20293 (list icedtea
20294 antlr4
20295 python-pytest
20296 python-pytest-mock
20297 python-setuptools
20298 python-wheel))
20299 (propagated-inputs
20300 (list python-antlr4-runtime
20301 python-pydevd
20302 python-pyyaml))
20303 (home-page "https://github.com/omry/omegaconf")
20304 (synopsis "Flexible configuration system")
20305 (description
20306 "OmegaConf is a hierarchical configuration system and supports merging
20307configurations from multiple sources. It provides a consistent API regardless
20308of how the configuration was created.")
20309 (license license:bsd-3))))
20310
20311(define-public python-configargparse
20312 (package
20313 (name "python-configargparse")
20314 (version "1.7")
20315 (source (origin
20316 (method url-fetch)
20317 (uri (pypi-uri "ConfigArgParse" version))
20318 (sha256
20319 (base32
20320 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
20321 (build-system pyproject-build-system)
20322 (propagated-inputs
20323 (list python-pyyaml))
20324 (native-inputs
20325 (list python-mock python-pytest python-setuptools python-wheel))
20326 (synopsis "Replacement for argparse")
20327 (description "A drop-in replacement for argparse that allows options to also
20328be set via config files and/or environment variables.")
20329 (home-page "https://github.com/bw2/ConfigArgParse")
20330 (license license:expat)))
20331
20332(define-public python-connection-pool
20333 (package
20334 (name "python-connection-pool")
20335 (version "0.0.3")
20336 (source
20337 (origin
20338 (method git-fetch)
20339 (uri (git-reference
20340 (url "https://github.com/zhouyl/ConnectionPool")
20341 (commit version)))
20342 (file-name (git-file-name name version))
20343 (sha256
20344 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
20345 (build-system pyproject-build-system)
20346 (arguments (list #:tests? #f)) ; No tests.
20347 (native-inputs (list python-setuptools))
20348 (home-page "https://github.com/zhouyl/ConnectionPool")
20349 (synopsis "Thread-safe connection pool")
20350 (description
20351 "This package provides a library implementing a thread-safe connection
20352pool.")
20353 (license license:expat)))
20354
20355(define-public python-argparse-dataclass
20356 (package
20357 (name "python-argparse-dataclass")
20358 (version "2.0.0")
20359 (source
20360 (origin
20361 (method git-fetch) ;no tests in PyPI archive
20362 (uri (git-reference
20363 (url "https://github.com/mivade/argparse_dataclass")
20364 (commit version)))
20365 (file-name (git-file-name name version))
20366 (sha256
20367 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
20368 (build-system pyproject-build-system)
20369 (native-inputs (list python-pytest python-setuptools python-wheel))
20370 (home-page "https://github.com/mivade/argparse_dataclass")
20371 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
20372 (description
20373 "This package provides declarative command-line interfaces using argparse
20374and dataclasses.")
20375 (license license:expat)))
20376
20377(define-public python-argparse-manpage
20378 (package
20379 (name "python-argparse-manpage")
20380 (version "4.7")
20381 (source
20382 (origin
20383 (method url-fetch)
20384 (uri (pypi-uri "argparse_manpage" version))
20385 (sha256
20386 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
20387 (build-system pyproject-build-system)
20388 (arguments
20389 (list
20390 #:test-flags
20391 ;; Tests require PIP.
20392 #~(list "--ignore=tests/test_examples.py")))
20393 (native-inputs
20394 (list python-pytest
20395 python-setuptools))
20396 (home-page "https://github.com/praiskup/argparse-manpage")
20397 (synopsis "Build manual page from Python's ArgumentParser object")
20398 (description
20399 "This package provides tools to build manual pages from Python's
20400@code{ArgumentParser} object.")
20401 (license license:asl2.0)))
20402
20403(define-public python-atomicwrites
20404 (package
20405 (name "python-atomicwrites")
20406 (version "1.4.0")
20407 (source
20408 (origin
20409 (method git-fetch)
20410 (uri (git-reference
20411 (url "https://github.com/untitaker/python-atomicwrites")
20412 (commit version)))
20413 (file-name (git-file-name name version))
20414 (sha256
20415 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
20416 (build-system pyproject-build-system)
20417 (native-inputs (list python-pytest python-setuptools))
20418 (synopsis "Atomic file writes in Python")
20419 (description
20420 "Library for atomic file writes using platform dependent tools
20421for atomic file system operations.")
20422 (home-page "https://github.com/untitaker/python-atomicwrites")
20423 (license license:expat)))
20424
20425(define-public python-qstylizer
20426 (package
20427 (name "python-qstylizer")
20428 (version "0.2.4")
20429 (source
20430 (origin
20431 (method git-fetch)
20432 (uri (git-reference
20433 (url "https://github.com/blambright/qstylizer")
20434 (commit version)))
20435 (file-name (git-file-name name version))
20436 (sha256
20437 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
20438 (build-system pyproject-build-system)
20439 (native-inputs
20440 (list python-pbr
20441 python-pytest
20442 python-pytest-mock
20443 python-setuptools
20444 python-wheel))
20445 (propagated-inputs
20446 (list python-inflection
20447 python-tinycss2))
20448 (home-page "https://github.com/blambright/qstylizer")
20449 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
20450 (description "@code{qstylizer} is a Python package designed to help with
20451the construction of PyQt/PySide stylesheets.")
20452 (license license:expat)))
20453
20454(define-public python-click-threading
20455 (package
20456 (name "python-click-threading")
20457 (version "0.5.0")
20458 (source
20459 (origin
20460 (method git-fetch)
20461 (uri (git-reference
20462 (url "https://github.com/click-contrib/click-threading")
20463 (commit version)))
20464 (file-name (git-file-name name version))
20465 (sha256
20466 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
20467 (build-system pyproject-build-system)
20468 (native-inputs (list python-pytest python-setuptools))
20469 (propagated-inputs (list python-click))
20470 (synopsis "Utilities for multithreading in Click")
20471 (description
20472 "This package provides utilities for multithreading in Click
20473applications.")
20474 (home-page "https://github.com/click-contrib/click-threading")
20475 (license license:expat)))
20476
20477(define-public python-click-log
20478 (package
20479 (name "python-click-log")
20480 (version "0.3.2")
20481 (source
20482 (origin
20483 (method git-fetch)
20484 (uri (git-reference
20485 (url "https://github.com/click-contrib/click-log")
20486 (commit version)))
20487 (file-name (git-file-name name version))
20488 (sha256
20489 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
20490 (build-system pyproject-build-system)
20491 (native-inputs (list python-pytest python-setuptools))
20492 (propagated-inputs (list python-click))
20493 (synopsis "Logging for click applications")
20494 (description
20495 "This package provides a Python library for logging Click applications.")
20496 (home-page "https://github.com/click-contrib/click-log")
20497 (license license:expat)))
20498
20499(define-public python-click-default-group
20500 (package
20501 (name "python-click-default-group")
20502 (version "1.2.4")
20503 (source
20504 (origin
20505 (method git-fetch) ; no tests in PyPI release
20506 (uri (git-reference
20507 (url "https://github.com/click-contrib/click-default-group")
20508 (commit (string-append "v" version))))
20509 (file-name (git-file-name name version))
20510 (sha256
20511 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
20512 (build-system pyproject-build-system)
20513 (propagated-inputs
20514 (list python-click))
20515 (native-inputs
20516 (list python-flit-core python-pytest))
20517 (synopsis "Extends click.Group")
20518 (description "This package extends click.Group to invoke a command without
20519explicit subcommand name.")
20520 (home-page "https://github.com/click-contrib/click-default-group")
20521 (license license:bsd-3)))
20522
20523(define-public python-apipkg
20524 (package
20525 (name "python-apipkg")
20526 (version "3.0.2")
20527 (source
20528 (origin
20529 (method url-fetch)
20530 (uri (pypi-uri "apipkg" version))
20531 (sha256
20532 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
20533 (build-system pyproject-build-system)
20534 (arguments (list #:tests? #f)) ;no tests in PyPI archive
20535 (native-inputs
20536 (list python-hatch-vcs
20537 python-hatchling))
20538 (home-page "https://github.com/pytest-dev/apipkg")
20539 (synopsis "Namespace control and lazy-import mechanism")
20540 (description "With apipkg you can control the exported namespace of a Python
20541package and greatly reduce the number of imports for your users. It is a small
20542pure Python module that works on virtually all Python versions.")
20543 (license license:expat)))
20544
20545(define-public python-essentials
20546 (package
20547 (name "python-essentials")
20548 (version "1.1.8")
20549 (source
20550 (origin
20551 (method git-fetch)
20552 (uri (git-reference
20553 (url "https://github.com/Neoteroi/essentials")
20554 (commit (string-append "v" version))))
20555 (file-name (git-file-name name version))
20556 (sha256
20557 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
20558 (build-system pyproject-build-system)
20559 (native-inputs
20560 (list python-hatchling
20561 python-pydantic
20562 python-pytest-asyncio))
20563 (home-page "https://github.com/Neoteroi/essentials/wiki")
20564 (synopsis
20565 "Utility functions, exceptions, and classes for Python applications")
20566 (description
20567 "Essentials is a collection of functions, exceptions, and classes for Python
20568applications. Examples of utilities are exceptions for common scenarios,
20569friendly JSON encoder, decorators for retries and logging.")
20570 (license license:expat)))
20571
20572(define-public python-execnet
20573 (package
20574 (name "python-execnet")
20575 (version "2.1.2")
20576 (source
20577 (origin
20578 (method git-fetch)
20579 (uri (git-reference
20580 (url "https://github.com/pytest-dev/execnet")
20581 (commit (string-append "v" version))))
20582 (file-name (git-file-name name version))
20583 (sha256
20584 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20585 (build-system pyproject-build-system)
20586 (arguments
20587 (list
20588 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20589 #:phases
20590 #~(modify-phases %standard-phases
20591 (add-before 'check 'pre-check
20592 (lambda _
20593 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20594 ;; test in 'testing/test_gateway.py'.
20595 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20596 (native-inputs
20597 (list python-hatchling
20598 python-hatch-vcs
20599 python-pytest-bootstrap))
20600 (home-page "https://codespeak.net/execnet/")
20601 (synopsis "Rapid multi-Python deployment")
20602 (description
20603 "Execnet provides a share-nothing model with channel-send/receive communication
20604for distributing execution across many Python interpreters across version,
20605platform and network barriers. It has a minimal and fast API targeting the
20606following uses:
20607
20608@enumerate
20609@item distribute tasks to (many) local or remote CPUs
20610@item write and deploy hybrid multi-process applications
20611@item write scripts to administer multiple environments
20612@end enumerate")
20613 (license license:expat)))
20614
20615(define-public python-icalendar
20616 (package
20617 (name "python-icalendar")
20618 (version "6.3.2")
20619 (source
20620 (origin
20621 (method url-fetch) ;XXX: hatch-vcs fails with git-fetch
20622 (uri (pypi-uri "icalendar" version))
20623 (sha256
20624 (base32 "188hj57l5l1jjnrfxwkmsh8hsn5pwvv93m7p7b9misgbzk5hxhg0"))))
20625 (build-system pyproject-build-system)
20626 (arguments
20627 (list
20628 ;; tests: 8995 passed, 21 skipped, 2 deselected
20629 #:test-flags
20630 #~(list
20631 "-k"
20632 (string-append
20633 ;; See: <https://github.com/collective/icalendar/issues/812>.
20634 "not test_dateutil_timezone_is_matched_with_tzname[Arctic/Longyearbyen]"
20635 " and not test_docstring_of_python_file[icalendar.timezone.tzid]"))))
20636 (native-inputs
20637 (list python-hatch-vcs
20638 python-hatchling
20639 python-pytest
20640 python-pytz))
20641 (propagated-inputs
20642 (list python-dateutil
20643 python-tzdata))
20644 (home-page "https://github.com/collective/icalendar")
20645 (synopsis "Python library for parsing and generating iCalendar files")
20646 (description
20647 "@code{icalendar} is a Python library for parsing and generating
20648iCalendar files.")
20649 (license license:bsd-2)))
20650
20651(define-public python-args
20652 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20653 (revision "0"))
20654 (package
20655 (name "python-args")
20656 (version (git-version "0.1.0" revision commit))
20657 (source
20658 (origin
20659 (method git-fetch)
20660 (uri (git-reference
20661 (url "https://github.com/kennethreitz-archive/args")
20662 (commit commit)))
20663 (file-name (git-file-name name version))
20664 (sha256
20665 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20666 (build-system pyproject-build-system)
20667 (arguments
20668 (list
20669 #:tests? #f ; XXX: python-nose is deprecated.
20670 #:phases
20671 #~(modify-phases %standard-phases
20672 (add-after 'unpack 'patch-args.py
20673 (lambda _
20674 (substitute* "args.py"
20675 (("basestring")
20676 "str")))))))
20677 (native-inputs (list python-setuptools python-wheel))
20678 (home-page "https://github.com/kennethreitz-archive/args")
20679 (synopsis "Command-line argument parser")
20680 (description
20681 "This library provides a Python module to parse command-line arguments.")
20682 (license license:bsd-3))))
20683
20684(define-public python-clint
20685 (package
20686 (name "python-clint")
20687 (version "0.5.1")
20688 (source (origin
20689 (method url-fetch)
20690 (uri (pypi-uri "clint" version))
20691 (sha256
20692 (base32
20693 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20694 (build-system pyproject-build-system)
20695 (native-inputs
20696 (list python-pytest python-setuptools python-wheel))
20697 (propagated-inputs
20698 (list python-args))
20699 (home-page "https://github.com/kennethreitz/clint")
20700 (synopsis "Command-line interface tools")
20701 (description
20702 "Clint is a Python module filled with a set of tools for developing
20703command-line applications, including tools for colored and indented
20704output, progress bar display, and pipes.")
20705 (license license:isc)))
20706
20707(define-public python-rply
20708 (package
20709 (name "python-rply")
20710 (version "0.7.8")
20711 (source
20712 (origin
20713 (method git-fetch)
20714 (uri (git-reference
20715 (url "https://github.com/alex/rply")
20716 (commit (string-append "v" version))))
20717 (file-name (git-file-name name version))
20718 (sha256
20719 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20720 (build-system pyproject-build-system)
20721 (arguments
20722 (list
20723 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20724 #:phases
20725 #~(modify-phases %standard-phases
20726 (add-before 'check 'fix-pytest-use
20727 (lambda _
20728 (substitute* (find-files "tests" "\\.py$")
20729 (("import py")
20730 "import pytest")
20731 (("py\\.test")
20732 "pytest"))
20733 (setenv "HOME" (getcwd)))))))
20734 (native-inputs (list python-pytest python-setuptools))
20735 (propagated-inputs (list python-appdirs))
20736 (home-page "https://github.com/alex/rply")
20737 (synopsis "Parser generator for Python")
20738 (description
20739 "This package provides a pure Python based parser generator, that also
20740works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20741with a new public API, and RPython support.")
20742 (license license:bsd-3)))
20743
20744(define-public python-hy
20745 (package
20746 (name "python-hy")
20747 (version "1.3.0")
20748 (source
20749 (origin
20750 (method git-fetch)
20751 (uri (git-reference
20752 (url "https://github.com/hylang/hy")
20753 (commit version)))
20754 (file-name (git-file-name name version))
20755 (sha256
20756 (base32 "0sdv5amhl0p4f84bmw2iy85a7rrkjg969l2gcr6cfl03lb0nxj87"))))
20757 (build-system pyproject-build-system)
20758 (arguments
20759 (list
20760 ;; This test expects the hy executable to be called 'hy', but in Guix
20761 ;; it's .hy-real.
20762 #:test-flags #~(list "-k" "not test_sys_executable")))
20763 (native-inputs (list python-pytest python-setuptools))
20764 (propagated-inputs (list python-funcparserlib))
20765 (home-page "https://hylang.org/hy/doc")
20766 (synopsis "Lisp frontend to Python")
20767 (description
20768 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
20769its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
20770Python at your fingertips, in Lisp form.")
20771 (license license:expat)))
20772
20773(define-public python-hissp
20774 (package
20775 (name "python-hissp")
20776 (version "0.5.0")
20777 (source
20778 (origin
20779 (method git-fetch)
20780 (uri (git-reference
20781 (url "https://github.com/gilch/hissp")
20782 (commit (string-append "v" version))))
20783 (file-name (git-file-name name version))
20784 (sha256
20785 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
20786 (build-system pyproject-build-system)
20787 (arguments (list #:test-backend #~'unittest))
20788 (native-inputs (list python-hypothesis python-setuptools))
20789 (home-page "https://github.com/gilch/hissp")
20790 (synopsis "It's Python with a Lissp")
20791 (description
20792 "Hissp is a modular Lisp implementation that compiles to a functional
20793subset of Python—Syntactic macro metaprogramming with full access to the
20794Python ecosystem.")
20795 (license license:asl2.0)))
20796
20797(define-public python-promise
20798 (package
20799 (name "python-promise")
20800 (version "2.3.0")
20801 (source
20802 (origin
20803 (method git-fetch)
20804 (uri (git-reference
20805 (url "https://github.com/syrusakbary/promise")
20806 (commit (string-append "v" version))))
20807 (file-name (git-file-name name version))
20808 (sha256
20809 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
20810 (build-system pyproject-build-system)
20811 (arguments
20812 (list
20813 #:test-flags
20814 #~(list "--ignore=tests/test_benchmark.py"
20815 ;; Issues with pytest-asyncio
20816 "--ignore=tests/test_awaitable.py"
20817 "-k" (string-join
20818 (list "not test_issue_9_safe"
20819 ;; Stacktrace issues.
20820 "test_thrown_exceptions_have_stacktrace"
20821 "test_thrown_exceptions_preserve_stacktrace")
20822 " and not "))))
20823 (native-inputs
20824 (list python-mock
20825 python-pytest
20826 python-pytest-asyncio
20827 python-setuptools))
20828 (propagated-inputs (list python-six))
20829 (home-page "https://github.com/syrusakbary/promise")
20830 (synopsis "Promises/A+ implementation for Python")
20831 (description
20832 "This package provides an implementation of Promises in Python. It is a
20833super set of Promises/A+ designed to have readable, performant code and to
20834provide just the extensions that are absolutely necessary for using promises
20835in Python.")
20836 (license license:expat)))
20837
20838(define-public python-progress
20839 (package
20840 (name "python-progress")
20841 (version "1.6")
20842 (source
20843 (origin
20844 (method git-fetch)
20845 (uri (git-reference
20846 (url "https://github.com/verigak/progress/")
20847 (commit version)))
20848 (file-name (git-file-name name version))
20849 (sha256
20850 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
20851 (snippet #~(delete-file "demo.gif"))))
20852 (build-system pyproject-build-system)
20853 (arguments
20854 (list
20855 #:test-backend #~'custom
20856 #:test-flags #~(list "test_progress.py")))
20857 (native-inputs (list python-setuptools))
20858 (home-page "https://github.com/verigak/progress/")
20859 (synopsis "Progress reporting bars for Python")
20860 (description
20861 "This Python package provides progress reporting for visual of progress
20862of long running operations. There are multiple choices of progress bars and
20863spinners, with customizable options, such as width, fill character, and
20864suffix.")
20865 (license license:isc)))
20866
20867(define-public python-progressbar2
20868 (package
20869 (name "python-progressbar2")
20870 (version "4.5.0")
20871 (source
20872 (origin
20873 (method url-fetch)
20874 (uri (pypi-uri "progressbar2" version))
20875 (sha256
20876 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
20877 (build-system pyproject-build-system)
20878 (arguments
20879 (list
20880 #:test-flags #~(list "--pyargs" "progressbar" "tests")
20881 #:phases
20882 #~(modify-phases %standard-phases
20883 (add-after 'unpack 'fix-pytest-config
20884 (lambda _
20885 ;; Drop test coverage requirements.
20886 (substitute* "pytest.ini"
20887 ((".*-cov.*") "")))))))
20888 (native-inputs
20889 (list python-dill
20890 python-pytest
20891 python-freezegun
20892 python-setuptools
20893 python-setuptools-scm
20894 python-wheel))
20895 (propagated-inputs
20896 (list python-utils))
20897 (home-page "https://github.com/WoLpH/python-progressbar")
20898 (synopsis "Text progress bar library for Python")
20899 (description
20900 "This package provides a Python progressbar library to provide
20901visual (yet text based) progress to long running operations.")
20902 (license license:bsd-3)))
20903
20904(define-public python-progressbar33
20905 (package
20906 (name "python-progressbar33")
20907 (version "2.4")
20908 (source
20909 (origin
20910 (method git-fetch)
20911 (uri (git-reference
20912 (url "https://github.com/germangh/python-progressbar")
20913 (commit (string-append "v" version))))
20914 (file-name (git-file-name name version))
20915 (sha256
20916 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
20917 (build-system pyproject-build-system)
20918 (arguments
20919 (list
20920 #:test-backend #~'custom
20921 #:test-flags #~(list "examples.py")))
20922 (native-inputs (list python-setuptools))
20923 (home-page "https://github.com/germangh/python-progressbar")
20924 (synopsis "Text progress bar library for Python")
20925 (description
20926 "This package provides a text progress bar library for Python. This
20927version only differs from the original @code{progressbar} package in that it
20928uses relative package imports instead of absolute imports, which is necessary
20929for the module to work under Python 3.3.")
20930 ;; Either or both of these licenses may be selected.
20931 (license (list license:lgpl2.1+ license:bsd-3))))
20932
20933;; XXX: Not maintained since 2012.
20934(define-public python-monthdelta
20935 (package
20936 (name "python-monthdelta")
20937 (version "0.9.1")
20938 (source
20939 (origin
20940 (method url-fetch)
20941 (uri (pypi-uri "MonthDelta" version))
20942 (sha256
20943 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
20944 (build-system pyproject-build-system)
20945 (arguments
20946 (list #:tests? #f)) ; No tests.
20947 (native-inputs (list python-setuptools))
20948 (home-page "http://packages.python.org/MonthDelta")
20949 (synopsis "Date computations with months")
20950 (description
20951 "MonthDelta provides functionality to do date computations with months.")
20952 (license license:expat)))
20953
20954(define-public python-moto
20955 (package
20956 (name "python-moto")
20957 (version "5.1.20")
20958 (source (origin
20959 (method url-fetch)
20960 (uri (pypi-uri "moto" version))
20961 (sha256
20962 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
20963 (build-system pyproject-build-system)
20964 (arguments
20965 (list
20966 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
20967 #:test-flags
20968 #~(list "-m" "not network and not requires_docker"
20969 ;; Not all of the tests are thread save, see:
20970 ;; <https://github.com/getmoto/moto/issues/7786>.
20971 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
20972 "-k" (string-join
20973 ;; Network access is required.
20974 (list "not test_passthrough_calls_for_entire_service"
20975 "test_passthrough_calls_for_specific_url"
20976 "test_passthrough_calls_for_wildcard_urls"
20977 "test_put_record_batch_http_destination"
20978 "test_put_record_http_destination"
20979 "test_s3_server_post_cors_multiple_origins"
20980 "test_with_custom_request_header"
20981 ;; AttributeError: 'ImportError' object has no
20982 ;; attribute 'message'
20983 "test_batch_update"
20984 "test_batch_update__not_enough_parameters"
20985 "test_execute_transaction"
20986 "test_without_primary_key_in_where_clause")
20987 " and not ")
20988 "tests")
20989 #:phases
20990 #~(modify-phases %standard-phases
20991 (add-after 'unpack 'patch-hardcoded-executable-names
20992 (lambda* (#:key inputs #:allow-other-keys)
20993 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20994 (substitute* "moto/batch/models.py"
20995 (("/bin/sh") bash-exec))
20996 (substitute* (find-files "tests" "\\.py$")
20997 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20998 (add-before 'check 'pre-check
20999 (lambda _
21000 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
21001 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
21002 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
21003 (native-inputs
21004 (list python-flask
21005 python-flask-cors
21006 python-freezegun
21007 python-pycognito
21008 python-pyotp
21009 python-pytest
21010 python-setuptools))
21011 (inputs
21012 (list bash-minimal))
21013 (propagated-inputs
21014 (list python-antlr4-runtime
21015 python-aws-xray-sdk
21016 python-boto3
21017 python-botocore
21018 python-cfn-lint
21019 python-cryptography
21020 python-dateutil
21021 python-graphql-core
21022 python-jinja2
21023 python-joserfc
21024 python-jsonpath-ng
21025 python-multipart
21026 python-openapi-spec-validator
21027 python-py-partiql-parser
21028 python-pyparsing
21029 python-requests
21030 python-responses
21031 python-werkzeug
21032 python-xmltodict))
21033 (home-page "https://github.com/spulec/moto")
21034 (synopsis "Mock out the boto library")
21035 (description
21036 "@code{moto} is a library designed to easily mock out the
21037@code{boto} library.")
21038 (license license:asl2.0)))
21039
21040(define-public python-plumbum
21041 (package
21042 (name "python-plumbum")
21043 (version "1.7.0")
21044 (source
21045 (origin
21046 (method git-fetch)
21047 (uri (git-reference
21048 (url "https://github.com/tomerfiliba/plumbum")
21049 (commit (string-append "v" version))))
21050 (file-name (git-file-name name version))
21051 (sha256
21052 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
21053 (build-system pyproject-build-system)
21054 (arguments
21055 (list
21056 #:test-flags
21057 #~(list "--ignore=tests/test_remote.py"
21058 "--ignore=tests/test_putty.py"
21059 "--ignore=tests/test_sudo.py"
21060 "-k"
21061 (string-join (list "not test_home"
21062 "test_iter_lines_error"
21063 "test_quoting"
21064 "test_copy_move_delete")
21065 " and not "))))
21066 (native-inputs
21067 (list procps
21068 python-psutil
21069 python-pytest
21070 python-setuptools
21071 python-setuptools-scm
21072 python-wheel))
21073 (home-page "https://plumbum.readthedocs.io")
21074 (synopsis "Python shell combinators library")
21075 (description
21076 "Plumbum is a library of tools for replacing shell scripts with Python
21077code.")
21078 (license license:expat)))
21079
21080(define-public python-deprecation
21081 (package
21082 (name "python-deprecation")
21083 (version "2.1.0")
21084 (source
21085 (origin
21086 (method url-fetch)
21087 (uri (pypi-uri "deprecation" version))
21088 (sha256
21089 (base32
21090 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
21091 (build-system pyproject-build-system)
21092 (arguments
21093 (list
21094 #:test-backend #~'unittest
21095 #:phases
21096 #~(modify-phases %standard-phases
21097 (add-after 'unpack 'drop-unittest2
21098 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
21099 (lambda _
21100 (substitute* "tests/test_deprecation.py"
21101 (("import unittest2")
21102 "import unittest as unittest2")))))))
21103 (native-inputs
21104 (list python-setuptools))
21105 (propagated-inputs
21106 (list python-packaging))
21107 (home-page "https://deprecation.readthedocs.io/")
21108 (synopsis "Python library to handle automated deprecations")
21109 (description
21110 "This is a library that enables automated deprecations. It offers the
21111@code{deprecated()} decorator to wrap functions, providing proper warnings
21112both in documentation and via Python’s warnings system, as well as the
21113@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
21114that deprecated code is eventually removed.")
21115 (license license:asl2.0)))
21116
21117(define-public python-jmespath
21118 (package
21119 (name "python-jmespath")
21120 (version "1.0.1")
21121 (source
21122 (origin
21123 (method url-fetch)
21124 (uri (pypi-uri "jmespath" version))
21125 (sha256
21126 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
21127 (build-system pyproject-build-system)
21128 (native-inputs
21129 (list python-pytest
21130 python-setuptools))
21131 (home-page "https://github.com/jmespath/jmespath.py")
21132 (synopsis "JSON Matching Expressions")
21133 (description
21134 "JMESPath (pronounced “james path”) is a Python library that allows one
21135to declaratively specify how to extract elements from a JSON document.")
21136 (license license:expat)))
21137
21138(define-public python-asteval
21139 (package
21140 (name "python-asteval")
21141 (version "1.0.6")
21142 (source
21143 (origin
21144 (method url-fetch)
21145 (uri (pypi-uri "asteval" version))
21146 (sha256
21147 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
21148 (build-system pyproject-build-system)
21149 (native-inputs
21150 (list python-pytest python-setuptools python-setuptools-scm))
21151 (home-page "https://github.com/newville/asteval")
21152 (synopsis "Minimalistic evaluator of Python expressions")
21153 (description
21154 "This package provides a minimalistic evaluator of Python expression
21155using the @code{ast} module.")
21156 (license license:expat)))
21157
21158(define-public python-lmfit
21159 (package
21160 (name "python-lmfit")
21161 (version "1.3.4")
21162 (source
21163 (origin
21164 (method git-fetch)
21165 (uri (git-reference
21166 (url "https://github.com/lmfit/lmfit-py")
21167 (commit version)))
21168 (file-name (git-file-name name version))
21169 (sha256
21170 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
21171 (build-system pyproject-build-system)
21172 (native-inputs
21173 (list python-pytest
21174 python-setuptools
21175 python-setuptools-scm))
21176 (propagated-inputs
21177 (list python-asteval
21178 python-dill
21179 python-numpy
21180 python-scipy
21181 python-uncertainties))
21182 (home-page "https://lmfit.github.io/lmfit-py/")
21183 (synopsis "Least-Squares minimization with bounds and constraints")
21184 (description
21185 "Lmfit provides a high-level interface to non-linear optimization and
21186curve fitting problems for Python. It builds on and extends many of the
21187optimization methods of @code{scipy.optimize}. Initially inspired by (and
21188named for) extending the Levenberg-Marquardt method from
21189@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
21190enhancements to optimization and data fitting problems.")
21191 (license license:bsd-3)))
21192
21193(define-public python-bokeh
21194 (package
21195 (name "python-bokeh")
21196 (version "3.7.3")
21197 (source (origin
21198 (method url-fetch)
21199 (uri (pypi-uri "bokeh" version))
21200 (sha256
21201 (base32
21202 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
21203 (build-system pyproject-build-system)
21204 (arguments
21205 (list
21206 ;; FIXME: Most of the tests do not work, figure out how to enable some
21207 ;; portion.
21208 #:tests? #f
21209 #:test-flags
21210 '(list
21211 ;; These require selenium.
21212 "--ignore=tests/unit/bokeh/io/test_export.py"
21213 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
21214 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
21215
21216 ;; Doesn't find ManagedServerLoop fixture
21217 "--ignore=tests/unit/bokeh/test_client_server.py"
21218
21219 ;; This fails because of the Guix wrapper around pytest
21220 "--ignore=tests/unit/bokeh/io/test_util__io.py"
21221
21222 ;; Fixture ipython not found.
21223 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
21224 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
21225
21226 ;; pd fixture not found.
21227 "--ignore=tests/unit/bokeh/models/test_mappers.py"
21228 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
21229 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
21230 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
21231 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
21232 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
21233 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
21234 "--ignore=tests/unit/bokeh/core/property/test_container.py"
21235 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
21236 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
21237 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
21238
21239 ;; nx fixture not found.
21240 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
21241 "--ignore=tests/unit/bokeh/models/test_graphs.py"
21242 "--ignore=tests/unit/bokeh/io/test_showing.py"
21243 "--ignore=tests/unit/bokeh/document/test_events__document.py"
21244
21245 ;; These tests need external sample data
21246 "--ignore-glob=tests/unit/bokeh/sampledata/*"
21247
21248 ;; Attempts to install something via npm.
21249 "--ignore=tests/unit/bokeh/test_ext.py"
21250
21251 ;; More failures due to set up problems.
21252 "--ignore=tests/unit/bokeh/server/test_server__server.py"
21253 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
21254 "--ignore=tests/unit/bokeh/util/test_serialization.py"
21255 "--ignore=tests/unit/bokeh/util/test_hex.py"
21256 "--ignore=tests/unit/bokeh/models/test_sources.py"
21257 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
21258
21259 "-k"
21260 (string-append
21261 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
21262 ;; Did you mean: 'assert_called_once_with'?
21263 "not test_set_from_json"
21264
21265 ;; XXX: This one test transforms a gif of a red box. It transforms
21266 ;; it all right but the base64 doesn't look as expected, probably
21267 ;; because of a change in pillow.
21268 " and not test_transform_PIL"))
21269 #:phases
21270 #~(modify-phases %standard-phases
21271 (add-before 'build 'set-version
21272 (lambda _
21273 (substitute* "pyproject.toml"
21274 ((", \"setuptools-git-versioning\"") "")
21275 (("dynamic = \\[\"version\"\\]")
21276 (string-append "version = '" #$version "'"))))))))
21277 (propagated-inputs
21278 (list node-lts
21279 python-contourpy
21280 python-jinja2
21281 python-narwhals
21282 python-numpy
21283 python-packaging
21284 python-pandas
21285 python-pillow
21286 python-pyyaml
21287 python-tornado
21288 python-xyzservices))
21289 (native-inputs
21290 (list python-beautifulsoup4
21291 python-dateutil
21292 python-flaky
21293 python-mock
21294 python-nbconvert
21295 python-pandas
21296 python-pytest
21297 python-pytz
21298 python-requests
21299 python-setuptools
21300 python-wheel))
21301 (home-page "https://github.com/bokeh/bokeh")
21302 (synopsis "Interactive plots and applications in the browser from Python")
21303 (description
21304 "This package provides tools for interactive plots and applications in the
21305browser from Python.")
21306 (license license:bsd-3)))
21307
21308;; TODO: Move to python-web.
21309(define-public python-botocore
21310 ;; Note: When updating botocore, also make sure that boto3 and awscli
21311 ;; are compatible.
21312 (package
21313 (name "python-botocore")
21314 (version "1.42.5")
21315 (source
21316 (origin
21317 (method url-fetch)
21318 (uri (pypi-uri "botocore" version))
21319 (sha256
21320 (base32
21321 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
21322 (build-system pyproject-build-system)
21323 (arguments
21324 (list
21325 ;; tests: 4496 passed, 87 skipped
21326 #:test-flags
21327 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
21328 ;; The full test suite is huge, run some of it's portion.
21329 "--ignore=tests/integration"
21330 "--ignore=tests/functional")))
21331 (native-inputs
21332 (list python-jsonschema
21333 python-pytest
21334 python-pytest-xdist
21335 python-setuptools))
21336 (propagated-inputs
21337 (list python-dateutil
21338 python-jmespath
21339 python-urllib3))
21340 (home-page "https://github.com/boto/botocore")
21341 (synopsis "Low-level interface to AWS")
21342 (description
21343 "Botocore is a Python library that provides a low-level interface to the
21344Amazon Web Services (AWS) API.")
21345 (license license:asl2.0)))
21346
21347(define-public python-boto3
21348 (package
21349 (name "python-boto3")
21350 (version "1.42.5")
21351 (source
21352 (origin
21353 (method git-fetch)
21354 (uri (git-reference
21355 (url "https://github.com/boto/boto3")
21356 (commit version)))
21357 (file-name (git-file-name name version))
21358 (sha256
21359 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
21360 (build-system pyproject-build-system)
21361 (arguments
21362 (list
21363 ;; tests: 1435 passed, 22 skipped, 1 warning
21364 #:test-flags
21365 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
21366 ;; Integration tests are trying to connect to AWS.
21367 "--ignore=tests/integration")))
21368 (native-inputs
21369 (list python-mock
21370 python-pytest
21371 python-pytest-xdist
21372 python-setuptools))
21373 (propagated-inputs
21374 (list python-botocore
21375 python-jmespath
21376 python-s3transfer))
21377 (home-page "https://github.com/boto/boto3")
21378 (synopsis "AWS SDK for Python")
21379 (description
21380 "Boto3 is a Python library for writing programs that interact with
21381@acronym{AWS,Amazon Web Services}.")
21382 (license license:asl2.0)))
21383
21384(define-public python-pyfiglet
21385 (package
21386 (name "python-pyfiglet")
21387 (version "1.0.4")
21388 (source
21389 (origin
21390 (method git-fetch)
21391 (uri (git-reference
21392 (url "https://github.com/pwaller/pyfiglet")
21393 (commit (string-append "v" version))))
21394 (file-name (git-file-name name version))
21395 (sha256
21396 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
21397 (build-system pyproject-build-system)
21398 (arguments
21399 (list
21400 #:phases
21401 #~(modify-phases %standard-phases
21402 (add-after 'unpack 'fallback-on-default-build
21403 (lambda _
21404 ;; This pyproject has little value and fails because of the
21405 ;; :__legacy__ suffix. Removing it to rely on defaults.
21406 (delete-file "pyproject.toml"))))))
21407 (native-inputs (list python-pytest python-setuptools))
21408 (home-page "https://github.com/pwaller/pyfiglet")
21409 (synopsis "Draw ASCII art big letters in Python")
21410 (description
21411 "This module lets you draw large letter from ordinary characters in pure
21412 Python.")
21413 (license license:expat)))
21414
21415(define-public python-mako
21416 (package
21417 (name "python-mako")
21418 (version "1.3.10")
21419 (source
21420 (origin
21421 (method url-fetch)
21422 (uri (pypi-uri "mako" version))
21423 (sha256
21424 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
21425 (build-system pyproject-build-system)
21426 (native-inputs
21427 (list python-pytest
21428 python-setuptools
21429 python-wheel))
21430 (propagated-inputs
21431 (list python-markupsafe))
21432 (home-page "https://www.makotemplates.org/")
21433 (synopsis "Templating language for Python")
21434 (description "Mako is a templating language for Python that compiles
21435templates into Python modules.")
21436 (license license:expat)))
21437
21438(define-public python-cookiecutter
21439 (package
21440 (name "python-cookiecutter")
21441 (version "2.6.0")
21442 (source
21443 (origin
21444 (method url-fetch)
21445 (uri (pypi-uri "cookiecutter" version))
21446 (sha256
21447 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
21448 (build-system pyproject-build-system)
21449 (arguments
21450 (list
21451 #:phases #~(modify-phases %standard-phases
21452 (add-before 'check 'pre-check
21453 (lambda _
21454 ;; test_get_user_config.py requires a writable home
21455 ;; directory.
21456 (setenv "HOME"
21457 (getcwd))
21458 ;; test_hooks.py dynamically creates shell scripts
21459 ;; with a /bin/bash shebang. We have to patch these.
21460 (substitute* "tests/test_hooks.py"
21461 (("/bin/bash")
21462 (string-append #$(this-package-native-input
21463 "bash-minimal") "/bin/bash"))))))))
21464 (native-inputs (list bash-minimal
21465 git-minimal/pinned
21466 python-freezegun
21467 python-pytest
21468 python-pytest-mock
21469 python-setuptools
21470 python-wheel))
21471 (propagated-inputs (list python-arrow
21472 python-binaryornot
21473 python-click
21474 python-jinja2
21475 python-pyyaml
21476 python-requests
21477 python-rich
21478 python-slugify))
21479 (home-page "https://github.com/cookiecutter/cookiecutter")
21480 (synopsis
21481 "Command-line utility that creates projects from project templates")
21482 (description
21483 "This package provides a command-line utility that creates projects from
21484project templates, e.g. creating a Python package project from a Python package
21485project template.")
21486 (license license:bsd-3)))
21487
21488(define-public python-pyquery
21489 (package
21490 (name "python-pyquery")
21491 (version "2.0.1")
21492 (source
21493 (origin
21494 (method url-fetch)
21495 (uri (pypi-uri "pyquery" version))
21496 (sha256
21497 (base32
21498 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
21499 (build-system pyproject-build-system)
21500 (arguments
21501 (list
21502 #:test-flags
21503 #~(list #$@(map (lambda (test) (string-append
21504 "--deselect=tests/test_pyquery.py::"
21505 test))
21506 (list
21507 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
21508 "TestWebScrapping::test_post"
21509 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
21510 "TestWebScrapping::test_session"
21511 ;; Assertion is not equal.
21512 "TestManipulating::test_val_for_textarea"
21513 "TestHTMLParser::test_replaceWith"
21514 "TestHTMLParser::test_replaceWith_with_function"
21515 ;; Network access is required.
21516 "TestWebScrapping::test_get"
21517 "TestWebScrappingEncoding::test_get")))))
21518 (native-inputs
21519 (list python-pytest
21520 python-requests
21521 python-setuptools
21522 python-webob
21523 python-webtest
21524 python-wheel))
21525 (propagated-inputs
21526 (list python-cssselect python-lxml))
21527 (home-page "https://github.com/gawel/pyquery")
21528 (synopsis "Make jQuery-like queries on xml documents")
21529 (description "pyquery allows you to make jQuery queries on xml documents.
21530The API is as much as possible the similar to jQuery. pyquery uses lxml for
21531fast xml and html manipulation.")
21532 (license license:bsd-3)))
21533
21534(define-public python-amqp
21535 (package
21536 (name "python-amqp")
21537 (version "5.1.1")
21538 (source
21539 (origin
21540 (method url-fetch)
21541 (uri (pypi-uri "amqp" version))
21542 (sha256
21543 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
21544 (build-system pyproject-build-system)
21545 (arguments
21546 (list ; Integration tests require network connectivity.
21547 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
21548 (native-inputs (list python-pytest python-setuptools python-wheel))
21549 (propagated-inputs (list python-vine))
21550 (home-page "https://github.com/celery/py-amqp")
21551 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
21552 (description
21553 "This is a fork of amqplib which was originally written by Barry Pederson.
21554It is maintained by the Celery project, and used by kombu as a pure python
21555alternative when librabbitmq is not available.")
21556 (license license:lgpl2.1+)))
21557
21558(define-public python-benchmark-4dn
21559 (package
21560 (name "python-benchmark-4dn")
21561 (version "0.5.24")
21562 (source (origin
21563 (method url-fetch)
21564 (uri (pypi-uri "benchmark_4dn" version))
21565 (sha256
21566 (base32
21567 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
21568 (properties '(("upstream-name" . "benchmark_4dn")))
21569 (build-system pyproject-build-system)
21570 ;; There are none.
21571 (arguments (list #:tests? #false))
21572 (native-inputs
21573 (list python-poetry-core))
21574 (home-page "https://github.com/SooLee/Benchmark/")
21575 (synopsis "Benchmark functions for CWL workflows")
21576 (description
21577 "This package provides benchmark functions that return total space, memory,
21578CPUs required per given input size, and parameters for CWL workflows.")
21579 (license license:expat)))
21580
21581(define-public python-beniget
21582 (package
21583 (name "python-beniget")
21584 (version "0.4.2.post1")
21585 (source
21586 (origin
21587 (method url-fetch)
21588 (uri (pypi-uri "beniget" version))
21589 (sha256
21590 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
21591 (build-system pyproject-build-system)
21592 (native-inputs
21593 (list python-pytest
21594 python-setuptools))
21595 (propagated-inputs
21596 (list python-gast))
21597 (home-page "https://github.com/serge-sans-paille/beniget")
21598 (synopsis "Extract semantic information about static Python code")
21599 (description
21600 "Beniget is a collection of analyzers for Python @acronym{AST,
21601Abstract Syntax Tree}. It is a building block for writing a static analyzer
21602or compiler for Python.")
21603 (license license:bsd-3)))
21604
21605(define-public python-kombu
21606 (package
21607 (name "python-kombu")
21608 (version "5.6.2")
21609 (source
21610 (origin
21611 (method git-fetch)
21612 (uri (git-reference
21613 (url "https://github.com/celery/kombu")
21614 (commit (string-append "v" version))))
21615 (file-name (git-file-name name version))
21616 (sha256
21617 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21618 (build-system pyproject-build-system)
21619 (arguments
21620 (list
21621 ;; tests: 854 passed, 193 skipped
21622 #:test-flags
21623 #~(list
21624 ;; TODO: Package azure-identity (required for this file)
21625 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21626 ;; XXX: Requires google-cloud-pubsub.
21627 "--ignore=t/unit/transport/test_gcpubsub.py"
21628 ;; XXX: Requires pyro, see:
21629 ;; <https://codeberg.org/guix/guix/issues/5857>
21630 "--ignore=t/unit/transport/test_pyro.py")
21631 #:phases
21632 #~(modify-phases %standard-phases
21633 (add-after 'unpack 'relax-requirements
21634 (lambda _
21635 (substitute* "requirements/default.txt"
21636 (("tzdata>=2025.2")
21637 "tzdata>=2025.1")))))))
21638 (native-inputs
21639 (list python-botocore
21640 python-pytest
21641 python-pytest-freezer
21642 python-pytest-sugar
21643 python-setuptools))
21644 (propagated-inputs
21645 (list python-amqp
21646 python-packaging
21647 python-tzdata
21648 python-vine))
21649 (home-page "https://kombu.readthedocs.io")
21650 (synopsis "Message passing library for Python")
21651 (description
21652 "The aim of Kombu is to make messaging in Python as easy as possible by
21653providing an idiomatic high-level interface for the AMQ protocol, and also
21654provide proven and tested solutions to common messaging problems. AMQP is the
21655Advanced Message Queuing Protocol, an open standard protocol for message
21656orientation, queuing, routing, reliability and security, for which the
21657RabbitMQ messaging server is the most popular implementation.")
21658 (license license:bsd-3)))
21659
21660(define-public python-billiard
21661 (package
21662 (name "python-billiard")
21663 (version "4.2.2")
21664 (source
21665 (origin
21666 (method git-fetch)
21667 (uri (git-reference
21668 (url "https://github.com/celery/billiard")
21669 (commit (string-append "v" version))))
21670 (file-name (git-file-name name version))
21671 (sha256
21672 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21673 (build-system pyproject-build-system)
21674 (arguments
21675 (list
21676 #:phases
21677 #~(modify-phases %standard-phases
21678 (add-after 'unpack 'remove-win-files
21679 (lambda _
21680 (for-each delete-file-recursively
21681 '("billiard/popen_spawn_win32.py"
21682 "billiard/_win.py")))))))
21683 (native-inputs (list python-psutil python-pytest python-setuptools))
21684 (home-page "https://github.com/celery/billiard")
21685 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21686 (description
21687 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21688multiprocessing package itself is a renamed and updated version of R Oudkerk's
21689pyprocessing package. This standalone variant is intended to be compatible with
21690Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21691 (license license:bsd-3)))
21692
21693(define-public python-celery
21694 (package
21695 (name "python-celery")
21696 (version "5.6.3")
21697 (source
21698 (origin
21699 (method url-fetch)
21700 (uri (pypi-uri "celery" version))
21701 (sha256
21702 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21703 (build-system pyproject-build-system)
21704 (arguments
21705 (list
21706 ;; tests: 3364 passed, 38 skipped, 8 deselected, 3 xfailed, 63 warnings,
21707 ;; 28808 subtests passed
21708 #:test-flags
21709 ;; The MongoDB backend test appears to expect an older version of
21710 ;; MongoDB which provided its own bson module, fails with "
21711 ;; AttributeError: module 'bson' has no attribute 'encode'".
21712 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21713 ;; XXX: Requires google-cloud-firestore
21714 "--ignore=t/unit/backends/test_gcs.py"
21715 "-k" (string-join
21716 (list ;; AssertionError.
21717 "not test_check_privileges_no_fchown"
21718 ;; These 3 tests error out on ci.guix.gnu.org with
21719 ;; OSError: [Errno 24] Too many open files
21720 "test_register_with_event_loop__no_on_tick_dupes"
21721 "test_with_autoscaler_file_descriptor_safety"
21722 "test_with_file_descriptor_safety"
21723 ;; XXX: Fails to compare local timezones.
21724 "test_use_local_timezone")
21725 " and not "))))
21726 (native-inputs
21727 (list python-azure-core
21728 python-dnspython
21729 python-flaky
21730 python-gevent
21731 python-google-cloud-storage
21732 python-iniconfig
21733 python-moto
21734 python-msgpack
21735 python-pymongo
21736 python-pytest
21737 python-pytest-celery
21738 python-pytest-click
21739 python-pytest-order
21740 python-pytest-subtests
21741 python-pytest-timeout
21742 python-redis
21743 python-setuptools))
21744 (propagated-inputs
21745 (list python-billiard
21746 python-click
21747 python-click-didyoumean
21748 python-click-plugins
21749 python-click-repl
21750 python-dateutil
21751 python-kombu
21752 python-tzlocal
21753 python-vine))
21754 (home-page "https://celeryproject.org")
21755 (synopsis "Distributed Task Queue")
21756 (description
21757 "Celery is an asynchronous task queue/job queue based on distributed
21758message passing. It is focused on real-time operation, but supports
21759scheduling as well. The execution units, called tasks, are executed
21760concurrently on a single or more worker servers using multiprocessing,
21761Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
21762synchronously (wait until ready).")
21763 (license license:bsd-3)))
21764
21765;; A bare minimal package, mainly to use in tests and reduce closure
21766;; size. Tests are left out in the main package to slim down native-inputs.
21767(define-public python-celery-minimal
21768 (package/inherit python-celery
21769 (name "python-celery-minimal")
21770 (arguments
21771 (list #:tests? #f))
21772 (native-inputs
21773 (list python-setuptools))))
21774
21775(define-public python-anyqt
21776 (package
21777 (name "python-anyqt")
21778 (version "0.2.1")
21779 (source
21780 (origin
21781 (method git-fetch)
21782 (uri (git-reference
21783 (url "https://github.com/ales-erjavec/anyqt")
21784 (commit version)))
21785 (file-name (git-file-name name version))
21786 (sha256
21787 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
21788 (build-system pyproject-build-system)
21789 (arguments
21790 (list
21791 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
21792 ;; TODO Add/configure the right Qt inputs.
21793 #:test-flags
21794 #~(list "--ignore-glob=tests/test_q*.py")
21795 #:phases
21796 #~(modify-phases %standard-phases
21797 (add-after 'unpack 'delete-files
21798 ;; Delete files related to other operating systems.
21799 (lambda _
21800 (delete-file "AnyQt/QtMacExtras.py")
21801 (delete-file "AnyQt/QtWinExtras.py"))))))
21802 (native-inputs
21803 (list python-pyqt-6
21804 python-pytest
21805 python-pytest-qt
21806 python-setuptools))
21807 (home-page "https://github.com/ales-erjavec/anyqt")
21808 (synopsis "PyQt compatibility layer")
21809 (description
21810 "This package provides a PyQt/PySide compatibility layer. More precisely,
21811it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
21812PySide, PySide2.")
21813 (license license:gpl3)))
21814
21815(define-public python-qasync
21816 (package
21817 (name "python-qasync")
21818 (version "0.28.0")
21819 (source
21820 (origin
21821 (method git-fetch)
21822 (uri (git-reference
21823 (url "https://github.com/CabbageDevelopment/qasync/")
21824 (commit (string-append "v" version))))
21825 (file-name (git-file-name name version))
21826 (sha256
21827 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
21828 (build-system pyproject-build-system)
21829 (arguments
21830 (list
21831 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
21832 #:phases
21833 #~(modify-phases %standard-phases
21834 (add-before 'check 'set-qpa
21835 (lambda _
21836 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
21837 (native-inputs
21838 (list python-poetry-core python-pytest))
21839 (propagated-inputs
21840 (list python-pyqt-6))
21841 (home-page "https://github.com/CabbageDevelopment/qasync")
21842 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
21843 (description
21844 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
21845by providing an implementation of the PEP 3156 event-loop.")
21846 (license license:bsd-2)))
21847
21848(define-public python-editor
21849 (package
21850 (name "python-editor")
21851 (version "1.0.4")
21852 (source
21853 (origin
21854 (method git-fetch)
21855 (uri (git-reference
21856 (url "https://github.com/fmoo/python-editor")
21857 (commit version)))
21858 (file-name (git-file-name name version))
21859 (sha256
21860 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
21861 (build-system pyproject-build-system)
21862 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
21863 (native-inputs (list python-setuptools))
21864 (home-page "https://github.com/fmoo/python-editor")
21865 (synopsis "Programmatically open an editor, capture the result")
21866 (description
21867 "This package provides the editor module for programmatically interfacing
21868with your system's $EDITOR.")
21869 (license license:asl2.0)))
21870
21871(define-public python-multiprocessing-logging
21872 (package
21873 (name "python-multiprocessing-logging")
21874 (version "0.3.4")
21875 (home-page "https://github.com/jruere/multiprocessing-logging")
21876 (source
21877 (origin
21878 (method git-fetch)
21879 (uri (git-reference
21880 (url home-page)
21881 (commit (string-append "v" version))))
21882 (file-name (git-file-name name version))
21883 (sha256
21884 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
21885 (build-system pyproject-build-system)
21886 (arguments (list #:test-backend #~'unittest))
21887 (native-inputs (list python-setuptools))
21888 (synopsis "Manage logs from multiple processes")
21889 (description
21890 "This Python module implements a multiprocessing-aware @code{Handler}
21891that, when set on the root @code{Logger}, will tunnel log records to the
21892main process so that they are handled correctly.")
21893 (license license:lgpl3+)))
21894
21895(define-public python-munkres
21896 (package
21897 (name "python-munkres")
21898 (version "1.1.4")
21899 (source
21900 (origin
21901 (method url-fetch)
21902 (uri (pypi-uri "munkres" version))
21903 (sha256
21904 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
21905 (build-system pyproject-build-system)
21906 (arguments
21907 (list
21908 ;; See https://github.com/bmc/munkres/issues/40
21909 #:test-flags
21910 (if (member (%current-system) %32bit-supported-systems)
21911 #~(list "-k" "not test_profit_float")
21912 #~(list))))
21913 (native-inputs (list python-pytest python-setuptools))
21914 (home-page "https://software.clapper.org/munkres/")
21915 (synopsis "Implementation of the Munkres algorithm")
21916 (description
21917 "The Munkres module provides an implementation of the Munkres algorithm
21918(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
21919for solving the Assignment Problem.")
21920 (license license:bsd-3)))
21921
21922(define-public python-codespell
21923 (package
21924 (name "python-codespell")
21925 (version "2.3.0")
21926 (source
21927 (origin
21928 (method url-fetch)
21929 (uri (pypi-uri "codespell" version))
21930 (sha256
21931 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21932 (build-system pyproject-build-system)
21933 (native-inputs
21934 (list python-pygments
21935 python-pytest
21936 python-pytest-dependency
21937 python-setuptools
21938 python-setuptools-scm
21939 python-wheel))
21940 (propagated-inputs
21941 (list python-chardet))
21942 (home-page "https://github.com/codespell-project/codespell/")
21943 (synopsis "Spellchecker for code")
21944 (description
21945 "Codespell fixes common misspellings in text files. It's designed
21946primarily for checking misspelled words in source code, but it can be used
21947with other files as well. It does not check for word membership in a complete
21948dictionary, but instead looks for a set of common misspellings. Therefore it
21949should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21950also means it shouldn't generate false-positives when you use a niche term it
21951doesn't know about.")
21952 (license
21953 (list
21954 ; for codespell and codespell_lib
21955 license:gpl2
21956 ; for dictionary*.txt
21957 license:cc-by-sa3.0))))
21958
21959(define-public python-jellyfish
21960 (package
21961 (name "python-jellyfish")
21962 (version "1.2.1")
21963 (source
21964 (origin
21965 (method git-fetch)
21966 (uri (git-reference
21967 (url "https://github.com/jamesturk/jellyfish")
21968 (commit (string-append "v" version))))
21969 (file-name (git-file-name name version))
21970 (sha256
21971 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21972 (build-system pyproject-build-system)
21973 (arguments
21974 (list
21975 #:imported-modules (append %cargo-build-system-modules
21976 %pyproject-build-system-modules)
21977 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21978 (guix build pyproject-build-system)
21979 (guix build utils))
21980 #:phases
21981 #~(modify-phases %standard-phases
21982 (add-after 'unpack 'prepare-cargo-build-system
21983 (lambda args
21984 (for-each
21985 (lambda (phase)
21986 (format #t "Running cargo phase: ~a~%" phase)
21987 (apply (assoc-ref cargo:%standard-phases phase)
21988 #:cargo-target #$(cargo-triplet)
21989 args))
21990 '(unpack-rust-crates
21991 configure
21992 check-for-pregenerated-files
21993 patch-cargo-checksums)))))))
21994 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21995 (native-inputs
21996 (append
21997 (list python-pytest
21998 python-setuptools
21999 rust
22000 `(,rust "cargo"))
22001 (or (and=> (%current-target-system)
22002 (compose list make-rust-sysroot))
22003 '())))
22004 (home-page "https://www.jpt.sh/projects/jellyfish/")
22005 (synopsis "Approximate and phonetic matching of strings")
22006 (description "Jellyfish uses a variety of string comparison and phonetic
22007encoding algorithms to do fuzzy string matching.")
22008 (license license:bsd-2)))
22009
22010(define-public python-pdfminer-six
22011 (package
22012 (name "python-pdfminer-six")
22013 (version "20260107")
22014 ;; There are no tests in the PyPI tarball.
22015 (source
22016 (origin
22017 (method git-fetch)
22018 (uri (git-reference
22019 (url "https://github.com/pdfminer/pdfminer.six")
22020 (commit version)))
22021 (file-name (git-file-name name version))
22022 (sha256
22023 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
22024 (build-system pyproject-build-system)
22025 (arguments
22026 (list #:phases
22027 #~(modify-phases %standard-phases
22028 ;; Tests write to the source tree.
22029 (add-after 'unpack 'make-git-checkout-writable
22030 (lambda _
22031 (for-each make-file-writable (find-files ".")))))))
22032 (propagated-inputs
22033 (list python-charset-normalizer python-cryptography))
22034 (native-inputs
22035 (list python-pytest python-setuptools python-setuptools-scm))
22036 (home-page "https://github.com/pdfminer/pdfminer.six")
22037 (synopsis "PDF parser and analyzer")
22038 (description "@code{pdfminer.six} is a community maintained fork of
22039the original PDFMiner. It is a tool for extracting information from PDF
22040documents. It focuses on getting and analyzing text data. Pdfminer.six
22041extracts the text from a page directly from the sourcecode of the PDF. It
22042can also be used to get the exact location, font or color of the text.")
22043 (license license:expat)))
22044
22045(define-public python-rarfile
22046 (package
22047 (name "python-rarfile")
22048 (version "4.2")
22049 (source
22050 (origin
22051 (method git-fetch)
22052 (uri (git-reference
22053 (url "https://github.com/markokr/rarfile")
22054 (commit (string-append "v" version))))
22055 (file-name (git-file-name name version))
22056 (sha256
22057 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
22058 (build-system pyproject-build-system)
22059 (arguments
22060 (list
22061 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
22062 #:phases
22063 #~(modify-phases %standard-phases
22064 (add-after 'unpack 'patch
22065 (lambda* (#:key inputs #:allow-other-keys)
22066 (substitute* "rarfile.py"
22067 ;; Disable unrar and unar, which are unavailable on Guix.
22068 (("(unrar|unar)=True" all tool)
22069 (string-append tool "=False"))
22070 ;; Hardcode path to bsdtar
22071 (("\"bsdtar\"")
22072 (format #f "~s"
22073 (search-input-file inputs "bin/bsdtar")))))))))
22074 (native-inputs (list python-pytest python-setuptools))
22075 (inputs (list libarchive))
22076 (home-page "https://github.com/markokr/rarfile")
22077 (synopsis "RAR archive reader for Python")
22078 (description
22079 "This is Python module for RAR archive reading. The interface is made as
22080zipfile like as possible.")
22081 (license license:isc)))
22082
22083(define-public python-rassumfrassum
22084 (package
22085 (name "python-rassumfrassum")
22086 (version "0.3.3")
22087 (source
22088 (origin
22089 (method git-fetch)
22090 (uri (git-reference
22091 (url "https://github.com/joaotavora/rassumfrassum")
22092 (commit (string-append "v" version))))
22093 (file-name (git-file-name name version))
22094 (sha256
22095 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
22096 (build-system pyproject-build-system)
22097 (arguments
22098 (list
22099 #:phases
22100 #~(modify-phases %standard-phases
22101 (replace 'check
22102 (lambda* (#:key tests? #:allow-other-keys)
22103 (when tests?
22104 (invoke "test/run-all.sh")))))))
22105 (native-inputs (list python-setuptools))
22106 (home-page "https://github.com/joaotavora/rassumfrassum")
22107 (synopsis "Connect an LSP client to multiple LSP servers")
22108 (description
22109 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
22110 (license license:gpl3+)))
22111
22112(define-public python-slugid
22113 (package
22114 (name "python-slugid")
22115 (version "2.0.0")
22116 (source
22117 (origin
22118 (method git-fetch)
22119 (uri (git-reference
22120 (url "https://github.com/taskcluster/slugid.py")
22121 (commit (string-append "v" version))))
22122 (file-name (git-file-name name version))
22123 (sha256
22124 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
22125 (build-system pyproject-build-system)
22126 (arguments (list #:test-backend #~'nose))
22127 (native-inputs (list python-pynose python-setuptools))
22128 (home-page "http://taskcluster.github.io/slugid.py")
22129 (synopsis "Module for Base64 encoded UUID v4 slugs")
22130 (description
22131 "This package provides a module for generating v4 UUIDs and encoding them
22132into 22 character URL-safe base64 slug representation.")
22133 (license license:mpl2.0)))
22134
22135(define-public python-rich
22136 (package
22137 (name "python-rich")
22138 (version "14.3.3")
22139 (source
22140 (origin
22141 (method git-fetch)
22142 (uri (git-reference
22143 (url "https://github.com/willmcgugan/rich")
22144 (commit (string-append "v" version))))
22145 (file-name (git-file-name name version))
22146 (sha256
22147 (base32 "1g8mb51ffn3bw2dhmmimpyhwkn13xmphircc8bg2kvkmncxmbrza"))))
22148 (build-system pyproject-build-system)
22149 ;; tests: 952 passed, 25 skipped
22150 (native-inputs
22151 (list python-poetry-core
22152 python-pytest
22153 which))
22154 (propagated-inputs
22155 (list python-markdown-it-py
22156 python-pygments))
22157 (home-page "https://github.com/willmcgugan/rich")
22158 (synopsis "Render rich text and more to the terminal")
22159 (description
22160 "This is a Python package for rendering rich text, tables, progress bars,
22161syntax highlighting, markdown and more to the terminal.")
22162 (license license:expat)))
22163
22164(define-public python-rich-click
22165 (package
22166 (name "python-rich-click")
22167 (version "1.9.7")
22168 (source
22169 (origin
22170 (method git-fetch)
22171 (uri (git-reference
22172 (url "https://github.com/ewels/rich-click")
22173 (commit (string-append "v" version))))
22174 (file-name (git-file-name name version))
22175 (sha256
22176 (base32 "1bw3lsj49dln8q7407gv85y8lzdn9a3jcjl9acax6q6x9l73cgqx"))))
22177 (build-system pyproject-build-system)
22178 (native-inputs
22179 (list python-inline-snapshot
22180 python-pytest
22181 python-setuptools
22182 python-typer))
22183 (propagated-inputs
22184 (list python-click
22185 python-rich))
22186 (home-page "https://github.com/ewels/rich-click")
22187 (synopsis "Format click help output nicely with rich")
22188 (description "Click is a \"Python package for creating beautiful command
22189line interfaces\". Rich is a \"Python library for rich text and beautiful
22190formatting in the terminal\". The intention of rich-click is to provide
22191attractive help output from click, formatted with rich, with minimal
22192customization required.")
22193 (license license:expat)))
22194
22195(define-public python-magic
22196 (package
22197 (name "python-magic")
22198 (version "0.4.27")
22199 (home-page "https://github.com/ahupp/python-magic")
22200 (source
22201 (origin
22202 (method git-fetch)
22203 (uri (git-reference (url home-page) (commit version)))
22204 (file-name (git-file-name name version))
22205 (sha256
22206 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
22207 (build-system pyproject-build-system)
22208 (arguments
22209 (list
22210 #:test-backend #~'custom
22211 #:test-flags #~(list "test/libmagic_test.py")
22212 #:phases
22213 #~(modify-phases %standard-phases
22214 (add-after 'unpack 'fix-tests
22215 (lambda _
22216 ;; Adjust expected output for [email protected].
22217 (substitute* "test/libmagic_test.py"
22218 (("PDF document, version 1\\.2, 2 pages")
22219 "PDF document, version 1.2, 2 page(s)"))))
22220 ;; Replace a specific method call with a hard-coded path to the
22221 ;; necessary libmagic.so file in the store.
22222 (add-before 'build 'hard-code-path-to-libmagic
22223 (lambda* (#:key inputs #:allow-other-keys)
22224 (substitute* "magic/loader.py"
22225 (("find_library\\('magic'\\)")
22226 (format #f "~s"
22227 (search-input-file inputs "lib/libmagic.so")))))))))
22228 (native-inputs (list which python-setuptools))
22229 (inputs
22230 ;; python-magic needs to be able to find libmagic.so.
22231 (list file))
22232 (synopsis "File type identification using libmagic")
22233 (description
22234 "This module uses ctypes to access the libmagic file type identification
22235library. It makes use of the local magic database and supports both textual
22236and MIME-type output. Note that this module and the python-file module both
22237provide a \"magic.py\" file; these two modules, which are different and were
22238developed separately, both serve the same purpose: to provide Python bindings
22239for libmagic.")
22240 (license license:expat)))
22241
22242(define-public python-securetar
22243 (package
22244 (name "python-securetar")
22245 (version "2025.1.4")
22246 (source
22247 (origin
22248 (method git-fetch)
22249 (uri (git-reference
22250 (url "https://github.com/pvizeli/securetar")
22251 (commit version)))
22252 (file-name (git-file-name name version))
22253 (sha256
22254 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
22255 (build-system pyproject-build-system)
22256 (native-inputs (list python-setuptools python-wheel python-pytest))
22257 (propagated-inputs (list python-cryptography))
22258 (home-page "https://github.com/pvizeli/securetar")
22259 (synopsis "Python module to handle tarfile backups")
22260 (description
22261 "This library provides a streaming wrapper around python tarfile and allow
22262secure handling files and support encryption.")
22263 (license license:asl2.0)))
22264
22265(define-public python-pkgconfig
22266 (package
22267 (name "python-pkgconfig")
22268 (version "1.5.5")
22269 (source
22270 (origin
22271 (method url-fetch)
22272 (uri (pypi-uri "pkgconfig" version))
22273 (sha256
22274 (base32
22275 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
22276 (build-system pyproject-build-system)
22277 (arguments
22278 (list
22279 #:tests? #false ;there are none
22280 #:phases
22281 '(modify-phases %standard-phases
22282 (add-before 'build 'patch
22283 ;; Hard-code the path to pkg-config.
22284 (lambda _
22285 (substitute* "pkgconfig/pkgconfig.py"
22286 (("'pkg-config'")
22287 (string-append "'" (which "pkg-config") "'"))))))))
22288 (native-inputs (list python-poetry-core))
22289 (inputs (list pkg-config))
22290 (home-page "https://github.com/matze/pkgconfig")
22291 (synopsis "Python interface for pkg-config")
22292 (description "This module provides a Python interface to pkg-config. It
22293can be used to find all pkg-config packages, check if a package exists,
22294check if a package meets certain version requirements, query CFLAGS and
22295LDFLAGS and parse the output to build extensions with setup.py.")
22296 (license license:expat)))
22297
22298;; This package is unmaintained since 2014, but still used in `khmer'.
22299(define-public python-bz2file
22300 (package
22301 (name "python-bz2file")
22302 (version "0.98")
22303 (source
22304 (origin
22305 (method url-fetch)
22306 (uri (pypi-uri "bz2file" version))
22307 (sha256
22308 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
22309 (build-system pyproject-build-system)
22310 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
22311 (native-inputs (list python-setuptools))
22312 (home-page "https://github.com/nvawda/bz2file")
22313 (synopsis "Read and write bzip2-compressed files")
22314 (description
22315 "Bz2file is a Python library for reading and writing bzip2-compressed
22316files. It contains a drop-in replacement for the I/O interface in the
22317standard library's @code{bz2} module, including features from the latest
22318development version of CPython that are not available in older releases.")
22319 (license license:asl2.0)))
22320
22321(define-public python-future
22322 (package
22323 (name "python-future")
22324 (version "1.0.0")
22325 (source
22326 (origin
22327 (method url-fetch)
22328 (uri (pypi-uri "future" version))
22329 (sha256
22330 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
22331 (build-system pyproject-build-system)
22332 (arguments
22333 (list
22334 #:test-flags
22335 ;; Self tests failed.
22336 #~(list "--ignore=tests/test_future/test_futurize.py"
22337 "-k" (string-join
22338 ;; Self tests failed.
22339 (list "not test_division"
22340 "test_functions_unchanged"
22341 "test_mixed_annotations"
22342 "test_multiple_param_annotations"
22343 "test_print"
22344 "test_range_slice"
22345 ;; Network access is required.
22346 "test_ftp"
22347 "test_main"
22348 "test_moves_urllib_request_http"
22349 "test_urllib_request_http"
22350 ;; Tests failing on Python 3.12
22351 "test_converting_drive_letter"
22352 "test_converting_drive_letter"
22353 "test_converting_when_no_drive_letter"
22354 "test_converting_when_no_drive_letter"
22355 "test_converting_when_no_drive_letter"
22356 "test_converting_when_no_drive_letter"
22357 "test_isinstance_recursion_limit"
22358 "test_roundtrip_pathname2url"
22359 "test_roundtrip_pathname2url"
22360 "test_roundtrip_url2pathname"
22361 "test_roundtrip_url2pathname"
22362 "test_subclass_recursion_limit")
22363 " and not "))))
22364 (native-inputs
22365 (list python-pytest
22366 python-setuptools))
22367 (home-page "https://python-future.org")
22368 (synopsis "Single-source support for Python 3 and 2")
22369 (description
22370 "@code{python-future} is the missing compatibility layer between Python 2
22371and Python 3. It allows you to use a single, clean Python 3.x-compatible
22372codebase to support both Python 2 and Python 3 with minimal overhead.")
22373 (license license:expat)))
22374
22375(define-public python-cysignals
22376 (package
22377 (name "python-cysignals")
22378 (version "1.12.3")
22379 (source
22380 (origin
22381 (method url-fetch)
22382 (uri (pypi-uri "cysignals" version))
22383 (sha256
22384 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
22385 (build-system pyproject-build-system)
22386 (native-inputs (list python-meson
22387 python-cython
22388 python-pytest))
22389 (home-page "https://github.com/sagemath/cysignals")
22390 (synopsis "Handling of interrupts and signals for Cython")
22391 (description
22392 "The cysignals package provides mechanisms to handle interrupts (and
22393other signals and errors) in Cython code, using two related approaches,
22394for mixed Cython/Python code or external C libraries and pure Cython code,
22395respectively.")
22396 (license license:lgpl3+)))
22397
22398(define-public python-rope
22399 (package
22400 (name "python-rope")
22401 (version "1.13.0")
22402 (source
22403 (origin
22404 (method url-fetch)
22405 (uri (pypi-uri "rope" version))
22406 (sha256
22407 (base32
22408 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
22409 (build-system pyproject-build-system)
22410 (arguments
22411 (list
22412 #:test-flags
22413 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
22414 (propagated-inputs (list python-pytoolconfig))
22415 (native-inputs
22416 (list python-pytest python-pytest-timeout python-setuptools))
22417 (home-page "https://github.com/python-rope/rope")
22418 (synopsis "Refactoring library for Python")
22419 (description
22420 "Rope is a refactoring library for Python. It facilitates the renaming,
22421moving and extracting of attributes, functions, modules, fields and parameters
22422in Python source code. These refactorings can also be applied to occurrences
22423in strings and comments.")
22424 (license license:lgpl3+)))
22425
22426(define-public python-py3status
22427 (package
22428 (name "python-py3status")
22429 (version "3.62")
22430 (source
22431 (origin
22432 (method git-fetch)
22433 (uri (git-reference
22434 (url "https://github.com/ultrabug/py3status")
22435 (commit version)))
22436 (file-name (git-file-name name version))
22437 (sha256
22438 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
22439 (build-system pyproject-build-system)
22440 (arguments
22441 (list
22442 #:phases
22443 #~(modify-phases %standard-phases
22444 (add-before 'build 'hardcode-file-path
22445 (lambda* (#:key inputs #:allow-other-keys)
22446 (substitute* "py3status/parse_config.py"
22447 (("\\[\"file\", \"-b\"")
22448 (format #f "[~s, \"-b\""
22449 (search-input-file inputs "bin/file")))))))))
22450 (native-inputs (list python-hatchling python-pytest))
22451 (inputs (list file))
22452 (home-page "https://github.com/ultrabug/py3status")
22453 (synopsis "Extensible i3status wrapper written in Python")
22454 (description
22455 "py3status is an i3status wrapper which extends i3status functionality in
22456a modular way, allowing you to extend your panel with your own code,
22457responding to click events and updating clock every second.")
22458 (license license:bsd-3)))
22459
22460(define-public python-greenlet
22461 (package
22462 (name "python-greenlet")
22463 (version "3.1.1")
22464 (source
22465 (origin
22466 (method url-fetch)
22467 (uri (pypi-uri "greenlet" version))
22468 (sha256
22469 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
22470 (build-system pyproject-build-system)
22471 (arguments
22472 (list
22473 ;; AssertionError: 'Exception' not found in ''
22474 #:test-flags
22475 #~(list (string-join
22476 (list "--deselect=src/greenlet/tests/test_greenlet.py"
22477 "TestGreenlet"
22478 "test_dealloc_catches_GreenletExit_throws_other")
22479 "::"))
22480 #:phases
22481 #~(modify-phases %standard-phases
22482 (add-before 'check 'build-extensions
22483 (lambda _
22484 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
22485 (native-inputs
22486 (list python-objgraph
22487 python-pytest
22488 python-psutil
22489 python-setuptools
22490 python-wheel))
22491 (home-page "https://greenlet.readthedocs.io/")
22492 (synopsis "Lightweight in-process concurrent programming")
22493 (description
22494 "Greenlet package is a spin-off of Stackless, a version of CPython
22495that supports micro-threads called \"tasklets\". Tasklets run
22496pseudo-concurrently (typically in a single or a few OS-level threads) and
22497are synchronized with data exchanges on \"channels\".")
22498 (license (list license:psfl license:expat))))
22499
22500(define-public python-objgraph
22501 (package
22502 (name "python-objgraph")
22503 (version "3.6.2")
22504 (source
22505 (origin
22506 (method url-fetch)
22507 (uri (pypi-uri "objgraph" version))
22508 (sha256
22509 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
22510 (build-system pyproject-build-system)
22511 (arguments
22512 (list
22513 #:test-flags
22514 #~(list "tests.py"
22515 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
22516 ;; [], [], [], [], [], [], [], ...
22517 "-k" "not test_at_addrs")))
22518 (native-inputs
22519 (list graphviz
22520 python-pytest
22521 python-setuptools
22522 python-wheel))
22523 (propagated-inputs
22524 (list python-graphviz))
22525 (home-page "https://mg.pov.lt/objgraph/")
22526 (synopsis "Draw Python object reference graphs with graphviz")
22527 (description
22528 "This package provides tools to draw Python object reference graphs with
22529graphviz.")
22530 (license license:expat)))
22531
22532(define-public python-gevent
22533 (package
22534 (name "python-gevent")
22535 (version "24.11.1")
22536 (source (origin
22537 (method url-fetch)
22538 (uri (pypi-uri "gevent" version))
22539 (sha256
22540 (base32
22541 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
22542 (modules '((guix build utils)))
22543 (snippet
22544 '(begin
22545 ;; unbunding libev and c-ares
22546 (delete-file-recursively "deps")
22547 ;; Remove cythonized files.
22548 (with-directory-excursion "src/gevent"
22549 (for-each delete-file
22550 (append (list "resolver/cares.c"
22551 "queue.c"
22552 "local.c"
22553 "libev/corecext.h"
22554 "libev/corecext.c"
22555 "greenlet.c"
22556 "event.c"
22557 "_waiter.c"
22558 "_tracer.c"
22559 "_semaphore.c"
22560 "_imap.c"
22561 "_ident.c"
22562 "_hub_primitives.c"
22563 "_hub_local.c"
22564 "_greenlet_primitives.c"
22565 "_abstract_linkable.c")
22566 (find-files "." "\\.html$"))))))))
22567 (build-system pyproject-build-system)
22568 (arguments
22569 (list
22570 #:test-flags
22571 '(list
22572 ;; These tests relies on networking which is
22573 ;; not available in the build container.
22574 "test__getaddrinfo_import.py"
22575 ;; These tests rely on KeyboardInterrupts which do not
22576 ;; work inside the build container for some reason
22577 ;; (lack of controlling terminal?).
22578 "test__issues461_471.py"
22579 ;; TODO: Patch out the tests that use getprotobyname, etc
22580 ;; instead of disabling all the tests from these files.
22581 "test__resolver_dnspython.py"
22582 ;; This test contains 'test_unlink', which
22583 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
22584 "test__core_stat.py")
22585 #:phases
22586 #~(modify-phases %standard-phases
22587 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
22588 (lambda _
22589 (substitute* "src/gevent/subprocess.py"
22590 (("/bin/sh") (which "sh")))
22591 (for-each (lambda (file)
22592 (substitute* file
22593 (("/bin/sh") (which "sh"))
22594 (("/bin/true") (which "true"))))
22595 (find-files "src/greentest" "\\.py$"))))
22596 (add-before 'build 'do-not-use-bundled-sources
22597 (lambda _
22598 (setenv "GEVENTSETUP_EMBED" "0")
22599
22600 ;; Prevent building bundled libev.
22601 (substitute* "setup.py"
22602 (("run_make=_BUILDING")
22603 "run_make=False"))))
22604 (add-before 'build 'augment-C_INCLUDE_PATH
22605 (lambda* (#:key inputs #:allow-other-keys)
22606 (let* ((python (dirname (dirname
22607 (search-input-file
22608 inputs "bin/python"))))
22609 (version (python-version python))
22610 (greenlet (string-append
22611 #$(this-package-input "python-greenlet")
22612 "/include/python" version)))
22613 (setenv "C_INCLUDE_PATH"
22614 (string-append greenlet "/:"
22615 (or (getenv "C_INCLUDE_PATH")
22616 ""))))))
22617 (add-before 'check 'pretend-to-be-CI
22618 (lambda _
22619 ;; A few tests are skipped due to network constraints or
22620 ;; get longer timeouts when running in a CI environment.
22621 ;; Piggy-back on that, as we need the same adjustments.
22622 (setenv "TRAVIS" "1")
22623 (setenv "APPVEYOR" "1")))
22624 (add-before 'check 'adjust-tests
22625 (lambda* (#:key test-flags #:allow-other-keys)
22626 (call-with-output-file "skipped_tests.txt"
22627 (lambda (port)
22628 (format port "~a~%" (string-join test-flags "\n"))))))
22629 (replace 'check
22630 (lambda* (#:key tests? #:allow-other-keys)
22631 (when tests?
22632 ;; Use the build daemons configured number of workers.
22633 (setenv "NWORKERS" (number->string (parallel-job-count)))
22634 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22635 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22636 (propagated-inputs
22637 (list python-greenlet python-zope-event python-zope-interface))
22638 (native-inputs
22639 (list python-cffi
22640 python-cython
22641 python-dnspython
22642 python-idna
22643 python-objgraph
22644 python-psutil
22645 python-requests
22646 python-setuptools))
22647 (inputs
22648 (list c-ares libev libuv))
22649 (home-page "https://www.gevent.org/")
22650 (synopsis "Coroutine-based network library")
22651 (description
22652 "@code{gevent} is a coroutine-based Python networking library that uses
22653@code{greenlet} to provide a high-level synchronous API on top of the
22654@code{libev} event loop.")
22655 (license license:expat)))
22656
22657(define-public python-fastimport
22658 (package
22659 (name "python-fastimport")
22660 (version "0.9.16")
22661 (source
22662 (origin
22663 (method git-fetch)
22664 (uri (git-reference
22665 (url "https://github.com/jelmer/python-fastimport")
22666 (commit (string-append "v" version))))
22667 (file-name (git-file-name name version))
22668 (sha256
22669 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22670 (build-system pyproject-build-system)
22671 (arguments (list #:test-backend #~'unittest))
22672 (native-inputs (list python-setuptools))
22673 (home-page "https://github.com/jelmer/python-fastimport")
22674 (synopsis "VCS fastimport parser and generator in Python")
22675 (description
22676 "This package provides a parser for and generator of the Git
22677@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22678format.")
22679 (license license:gpl2+)))
22680
22681(define-public python-pika
22682 (package
22683 (name "python-pika")
22684 (version "1.3.2")
22685 (source
22686 (origin
22687 (method git-fetch)
22688 (uri (git-reference
22689 (url "https://github.com/pika/pika")
22690 (commit version)))
22691 (file-name (git-file-name name version))
22692 (sha256
22693 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22694 (build-system pyproject-build-system)
22695 (arguments
22696 (list
22697 #:test-flags
22698 ;; XXX: These test most likely require a running RabbitMQ server.
22699 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22700 #:phases
22701 #~(modify-phases %standard-phases
22702 (add-before 'check 'configure-tests
22703 (lambda* (#:key tests? #:allow-other-keys)
22704 (when tests?
22705 (setenv "PYTHONPATH" (getcwd))))))))
22706 (native-inputs (list python-pytest
22707 python-gevent
22708 python-tornado
22709 python-twisted
22710 python-setuptools))
22711 (home-page "https://pika.readthedocs.org")
22712 (synopsis "Pure Python AMQP Client Library")
22713 (description
22714 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22715Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22716network support library.")
22717 (license license:bsd-3)))
22718
22719(define-public python-pykka
22720 (package
22721 (name "python-pykka")
22722 (version "4.4.2")
22723 (source
22724 (origin
22725 (method git-fetch)
22726 (uri (git-reference
22727 (url "https://github.com/jodal/pykka")
22728 (commit (string-append "v" version))))
22729 (file-name (git-file-name name version))
22730 (sha256
22731 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
22732 (build-system pyproject-build-system)
22733 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
22734 (home-page "https://pykka.readthedocs.io")
22735 (synopsis "Implementation of the actor model")
22736 (description
22737 "Pykka implements the actor model in Python, which introduces some simple
22738rules to control the sharing of state and cooperation between execution units,
22739and makes it easier to build concurrent applications.")
22740 (license license:asl2.0)))
22741
22742;; WARNING: This package is a dependency of mesa.
22743(define-public python-ply
22744 (package
22745 (name "python-ply")
22746 (version "3.11")
22747 (source
22748 (origin
22749 (method url-fetch)
22750 (uri (pypi-uri "ply" version))
22751 (sha256
22752 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
22753 (build-system pyproject-build-system)
22754 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
22755 (native-inputs
22756 (list python-setuptools
22757 python-wheel))
22758 (home-page "http://www.dabeaz.com/ply/")
22759 (synopsis "Python Lex & Yacc")
22760 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
22761It uses LR parsing and does extensive error checking.")
22762 (license license:bsd-3)))
22763
22764(define-public python-kazoo
22765 (package
22766 (name "python-kazoo")
22767 (version "2.10.0")
22768 (source
22769 (origin
22770 (method git-fetch)
22771 (uri (git-reference
22772 (url "https://github.com/python-zk/kazoo")
22773 (commit version)))
22774 (file-name (git-file-name name version))
22775 (sha256
22776 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
22777 (build-system pyproject-build-system)
22778 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
22779 (native-inputs (list python-setuptools))
22780 (home-page "https://kazoo.readthedocs.org")
22781 (synopsis "High-level Zookeeper client library")
22782 (description
22783 "Kazoo is a Python client library for the Apache Zookeeper distributed
22784application service. It is designed to be easy to use and to avoid common
22785programming errors.")
22786 (license license:asl2.0)))
22787
22788(define-public python-columnize
22789 (package
22790 (name "python-columnize")
22791 (version "0.3.11")
22792 (source
22793 (origin
22794 (method url-fetch)
22795 (uri (pypi-uri "columnize" version))
22796 (sha256
22797 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
22798 (build-system pyproject-build-system)
22799 (native-inputs (list python-pytest python-setuptools))
22800 (home-page "https://github.com/rocky/pycolumnize")
22801 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
22802 (description
22803 "This package provides a way to format a simple (i.e. not nested) list
22804into aligned columns.")
22805 (license license:expat)))
22806
22807(define-public python-pysol-cards
22808 (package
22809 (name "python-pysol-cards")
22810 (version "0.24.0")
22811 (source
22812 (origin
22813 (method url-fetch)
22814 (uri (pypi-uri "pysol_cards" version))
22815 (sha256
22816 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
22817 (build-system pyproject-build-system)
22818 (arguments
22819 (list
22820 #:phases
22821 #~(modify-phases %standard-phases
22822 (replace 'check
22823 (lambda* (#:key test-flags tests? #:allow-other-keys)
22824 (when tests?
22825 (apply invoke
22826 "python"
22827 "-m"
22828 "unittest"
22829 "discover"
22830 "tests"
22831 test-flags)))))))
22832 (native-inputs (list python-setuptools python-wheel))
22833 (home-page "https://github.com/shlomif/pysol_cards")
22834 (synopsis "Deal PySol FC Cards")
22835 (description
22836 "The pysol-cards python modules provide code to generate the initial deals of
22837some PySol games.")
22838 (license license:expat)))
22839
22840(define-public python-freecell-solver
22841 (package
22842 (name "python-freecell-solver")
22843 (version "0.6.0")
22844 (source
22845 (origin
22846 (method url-fetch)
22847 (uri (pypi-uri "freecell_solver" version))
22848 (sha256
22849 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
22850 (build-system pyproject-build-system)
22851 (propagated-inputs (list python-cffi))
22852 (native-inputs (list python-pytest python-setuptools))
22853 (home-page "https://pypi.org/project/freecell-solver/")
22854 (synopsis "Freecell Solver bindings")
22855 (description
22856 "This package provides Python bindings for the freecell-solver
22857package. Freecell Solver is a program that automatically solves layouts of
22858Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
22859and Seahaven Towers, as well as Simple Simon boards.")
22860 (license license:expat)))
22861
22862(define-public python-inflection
22863 (package
22864 (name "python-inflection")
22865 (version "0.5.1")
22866 (source
22867 (origin
22868 (method git-fetch)
22869 (uri (git-reference
22870 (url "https://github.com/jpvanhal/inflection")
22871 (commit version)))
22872 (file-name (git-file-name name version))
22873 (sha256
22874 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
22875 (build-system pyproject-build-system)
22876 (native-inputs (list python-pytest python-setuptools))
22877 (home-page "https://github.com/jpvanhal/inflection")
22878 (synopsis "Python string transformation library")
22879 (description
22880 "Inflection is a string transformation library. It singularizes
22881and pluralizes English words, and transforms strings from CamelCase to
22882underscored string.")
22883 (license license:expat)))
22884
22885(define-public python-krb5
22886 (package
22887 (name "python-krb5")
22888 (version "0.5.1")
22889 (source
22890 (origin
22891 (method url-fetch)
22892 (uri (pypi-uri "krb5" version))
22893 (sha256
22894 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22895 (build-system pyproject-build-system)
22896 (inputs (list mit-krb5))
22897 (native-inputs (list python-cython python-k5test python-pytest
22898 python-setuptools python-wheel))
22899 (home-page "https://github.com/jborean93/pykrb5")
22900 (synopsis "Kerberos API bindings for Python")
22901 (description "This library provides Python functions that wraps the
22902Kerberos 5 C API.")
22903 (license license:expat)))
22904
22905(define-public python-pylev
22906 (package
22907 (name "python-pylev")
22908 (version "1.4.0")
22909 (source
22910 (origin
22911 (method git-fetch)
22912 (uri (git-reference
22913 (url "https://github.com/toastdriven/pylev")
22914 (commit (string-append "v" version))))
22915 (file-name (git-file-name name version))
22916 (sha256
22917 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22918 (build-system pyproject-build-system)
22919 (arguments
22920 (list
22921 #:test-backend #~'custom
22922 #:test-flags #~(list "tests.py")))
22923 (native-inputs (list python-setuptools))
22924 (home-page "https://github.com/toastdriven/pylev")
22925 (synopsis "Levenshtein distance implementation in Python")
22926 (description
22927 "Pure Python Levenshtein implementation, based off the Wikipedia code
22928samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22929 (license license:bsd-3)))
22930
22931(define-public python-cleo
22932 (package
22933 (name "python-cleo")
22934 (version "2.1.0")
22935 (source (origin
22936 (method url-fetch)
22937 (uri (pypi-uri "cleo" version))
22938 (sha256
22939 (base32
22940 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22941 (build-system pyproject-build-system)
22942 (native-inputs
22943 (list python-poetry-core
22944 python-mock
22945 python-pytest-mock
22946 python-pytest))
22947 (propagated-inputs
22948 (list python-crashtest python-rapidfuzz))
22949 (home-page "https://github.com/sdispater/cleo")
22950 (synopsis "Command-line arguments library for Python")
22951 (description
22952 "Cleo allows you to create command-line commands with signature in
22953docstring and colored output.")
22954 (license license:expat)))
22955
22956(define-public python-shellingham
22957 (package
22958 (name "python-shellingham")
22959 (version "1.5.4")
22960 (source
22961 (origin
22962 (method url-fetch)
22963 (uri (pypi-uri "shellingham" version))
22964 (sha256
22965 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22966 (build-system pyproject-build-system)
22967 (native-inputs
22968 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22969 (home-page "https://github.com/sarugaku/shellingham")
22970 (synopsis "Tool to detect surrounding shell")
22971 (description
22972 "Shellingham detects what shell the current Python executable is
22973running in.")
22974 (license license:isc)))
22975
22976(define-public python-shshsh
22977 (package
22978 (name "python-shshsh")
22979 (version "1.0.5")
22980 (source
22981 (origin
22982 (method git-fetch)
22983 (uri
22984 (git-reference
22985 (url "https://github.com/zqqqqz2000/shshsh")
22986 (commit
22987 "fd21c8696aebaae04507760c16cb45979291fef5")))
22988 (file-name (git-file-name name version))
22989 (sha256
22990 (base32
22991 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22992 (build-system pyproject-build-system)
22993 (native-inputs
22994 (list python-poetry-core
22995 python-pytest))
22996 (home-page "https://github.com/zqqqqz2000/shshsh")
22997 (synopsis "Write Shell commands simply and safely within Python")
22998 (description "This package provides a way to write Shell commands from
22999within Python. Python functions can be chained together to process input
23000Bash control characters are escapted so that parameters can be passed
23001without worrying about command injection.")
23002 (license license:expat)))
23003
23004(define-public python-memcached
23005 (package
23006 (name "python-memcached")
23007 (version "1.62")
23008 (source
23009 (origin
23010 (method git-fetch)
23011 (uri (git-reference
23012 (url "https://github.com/linsomniac/python-memcached")
23013 (commit version)))
23014 (file-name (git-file-name name version))
23015 (sha256
23016 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
23017 (build-system pyproject-build-system)
23018 (arguments
23019 (list
23020 #:tests? #f ;Requires a connection to a socket.
23021 #:test-backend #~'unittest))
23022 (native-inputs (list python-setuptools))
23023 (home-page "https://github.com/linsomniac/python-memcached")
23024 (synopsis "Pure python memcached client")
23025 (description
23026 "This software is a pure Python interface to the memcached memory cache
23027daemon. It is the client side software which allows storing values in one or
23028more, possibly remote, memcached servers.")
23029 (license license:psfl)))
23030
23031(define-public python-mergedeep
23032 (package
23033 (name "python-mergedeep")
23034 (version "1.3.4")
23035 (source
23036 (origin
23037 (method git-fetch)
23038 (uri (git-reference
23039 (url "https://github.com/clarketm/mergedeep")
23040 (commit (string-append "v" version))))
23041 (file-name (git-file-name name version))
23042 (sha256
23043 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
23044 (build-system pyproject-build-system)
23045 (arguments (list #:test-backend #~'unittest))
23046 (native-inputs (list python-setuptools))
23047 (home-page "https://github.com/clarketm/mergedeep")
23048 (synopsis "Deep merge function for Python")
23049 (description
23050 "This package provides a deep merge function for Python, useful to
23051combine multiple data objects as one.")
23052 (license license:expat)))
23053
23054(define-public python-clikit
23055 (package
23056 (name "python-clikit")
23057 (version "0.6.2")
23058 (source
23059 (origin
23060 (method git-fetch)
23061 (uri (git-reference
23062 (url "https://github.com/sdispater/clikit")
23063 (commit version)))
23064 (file-name (git-file-name name version))
23065 (sha256
23066 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
23067 (build-system pyproject-build-system)
23068 (arguments
23069 (list
23070 #:phases
23071 #~(modify-phases %standard-phases
23072 (add-after 'unpack 'relax-requirements
23073 (lambda _
23074 (substitute* "pyproject.toml"
23075 (("^crashtest.*")
23076 (format #f "crashtest=~s"
23077 #$(package-version
23078 (this-package-input "python-crashtest"))))))))))
23079 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
23080 (propagated-inputs (list python-crashtest python-pastel python-pylev))
23081 (home-page "https://github.com/sdispater/clikit")
23082 (synopsis "Group of utilities to build command line interfaces")
23083 (description
23084 "CliKit is a group of utilities to build testable command line
23085interfaces.")
23086 (license license:expat)))
23087
23088(define-public python-cattrs
23089 (package
23090 (name "python-cattrs")
23091 (version "24.1.2")
23092 (source (origin
23093 (method git-fetch) ;for tests
23094 (uri (git-reference
23095 (url "https://github.com/python-attrs/cattrs")
23096 (commit (string-append "v" version))))
23097 (file-name (git-file-name name version))
23098 (sha256
23099 (base32
23100 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
23101 (build-system pyproject-build-system)
23102 (arguments
23103 (list
23104 #:test-flags
23105 '(list "--numprocesses" (number->string (parallel-job-count))
23106 ;; Skip all benchmark tests.
23107 "--ignore=bench/test_attrs_collections.py"
23108 "--ignore=bench/test_attrs_nested.py"
23109 "--ignore=bench/test_attrs_primitives.py"
23110 "--ignore=bench/test_primitives.py"
23111 "-k"
23112 (string-join
23113 ;; XXX: Tests fail with error: AssertionError: assert ...,
23114 ;; check why.
23115 (list "not test_msgspec_json_converter"
23116 "test_structure_simple_from_dict_default"
23117 "test_310_optional_field_roundtrip"
23118 "test_310_union_field_roundtrip"
23119 "test_individual_overrides"
23120 "test_nested_roundtrip"
23121 "test_nested_roundtrip_tuple"
23122 "test_omit_default_roundtrip"
23123 "test_optional_field_roundtrip"
23124 "test_renaming"
23125 ;; 'utf-8' codec can't encode character '\ud800' in
23126 ;; position 0: surrogates not allowed
23127 "test_simple_classes"
23128 ;; This test fails with an assertion error on the build
23129 ;; farm, but not on my laptop.
23130 "test_nodefs_generated_unstructuring_cl"
23131 ;; See https://github.com/python-attrs/cattrs/issues/575
23132 "test_simple_roundtrip"
23133 "test_simple_roundtrip_defaults"
23134 "test_simple_roundtrip_defaults_tuple"
23135 "test_simple_roundtrip_tuple"
23136 "test_simple_roundtrip_with_extra_keys_forbidden"
23137 "test_structure_simple_from_dict_default"
23138 "test_union_field_roundtrip"
23139 "test_unmodified_generated_structuring")
23140 " and not "))
23141 #:phases
23142 #~(modify-phases %standard-phases
23143 (add-after 'unpack 'patch-pyproject
23144 (lambda _
23145 (substitute* "pyproject.toml"
23146 ;; Fix version string
23147 (("dynamic = \\[\"version\"\\]")
23148 (string-append "version = \"" #$version "\"")))))
23149 ;; XXX Our python-hypothesis package is too old.
23150 (add-after 'unpack 'compatibility
23151 (lambda _
23152 (substitute* "tests/typed.py"
23153 (("characters\\(codec=codec\\)")
23154 "characters()")))))))
23155 (native-inputs
23156 (list python-hatchling
23157 python-hatch-vcs
23158 python-hypothesis
23159 python-immutables
23160 python-msgpack
23161 python-msgspec
23162 python-poetry-core
23163 python-pymongo ;for the bson module
23164 python-pytest
23165 python-pytest-benchmark
23166 python-pytest-xdist))
23167 (propagated-inputs
23168 (list python-attrs
23169 python-cbor2
23170 python-orjson
23171 python-pyyaml
23172 python-tomlkit
23173 python-typing-extensions
23174 python-ujson))
23175 (home-page "https://github.com/python-attrs/cattrs")
23176 (synopsis "Python library for structuring and unstructuring data")
23177 (description "@code{cattrs} is an Python library for structuring and
23178unstructuring data. @code{cattrs} works best with @code{attrs} classes,
23179@code{dataclasses} and the usual Python collections, but other kinds of
23180classes can also be supported by manually registering converters.")
23181 (license license:expat)))
23182
23183;; A bare minimal package, mainly to use in tests and reduce closure
23184;; size. Tests are left out in the main package to slim down native-inputs and
23185;; optional propagated-inputs.
23186(define-public python-cattrs-minimal
23187 (package/inherit python-cattrs
23188 (name "python-cattrs-minimal")
23189 (arguments
23190 (substitute-keyword-arguments arguments
23191 ((#:tests? _ #t) #f)))
23192 (native-inputs
23193 (list python-hatchling
23194 python-hatch-vcs))
23195 (propagated-inputs
23196 (list python-attrs
23197 python-typing-extensions))))
23198
23199(define-public python-cachy
23200 (package
23201 (name "python-cachy")
23202 (version "0.3.0")
23203 (source
23204 (origin
23205 (method url-fetch)
23206 (uri (pypi-uri "cachy" version))
23207 (sha256
23208 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
23209 (build-system pyproject-build-system)
23210 (arguments
23211 (list
23212 #:phases
23213 #~(modify-phases %standard-phases
23214 (replace 'check
23215 (lambda* (#:key tests? #:allow-other-keys)
23216 (when tests?
23217 ;; Make it compatible with python-flexmock 0.12.
23218 (substitute* (find-files "tests" "\\.py$")
23219 (("from flexmock import flexmock, flexmock_teardown")
23220 (string-append "from flexmock import flexmock\n"
23221 "from flexmock._api import flexmock_teardown")))
23222 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
23223 "pytest")))))))
23224 (native-inputs
23225 (list memcached
23226 python-fakeredis
23227 python-flexmock
23228 python-pifpaf
23229 python-pytest
23230 python-setuptools
23231 python-wheel))
23232 (propagated-inputs
23233 (list python-memcached
23234 python-msgpack
23235 python-redis))
23236 (home-page "https://github.com/sdispater/cachy")
23237 (synopsis "Simple yet effective caching library")
23238 (description
23239 "Cachy provides a simple yet effective caching library. A simple but
23240powerful API: thread-safety; decorator syntax; support for memcached, redis,
23241database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
23242 (license license:expat)))
23243
23244(define-public python-pyproject-api
23245 (package
23246 (name "python-pyproject-api")
23247 (version "1.10.0")
23248 (source
23249 (origin
23250 (method url-fetch)
23251 (uri (pypi-uri "pyproject_api" version))
23252 (sha256
23253 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
23254 (build-system pyproject-build-system)
23255 (native-inputs
23256 (list python-hatch-vcs
23257 python-hatchling
23258 python-pytest
23259 python-pytest-mock
23260 python-setuptools))
23261 (propagated-inputs
23262 (list python-packaging python-tomli))
23263 (home-page "https://pyproject-api.readthedocs.io/latest/")
23264 (synopsis "API to interact with the Python pyproject.toml based projects")
23265 (description
23266 "@code{pyproject-api} aims to abstract away interaction with
23267@code{pyproject.toml} style projects in a flexible way.")
23268 (license license:expat)))
23269
23270(define-public python-lark
23271 (package
23272 (name "python-lark")
23273 (version "1.2.2")
23274 (source
23275 (origin
23276 (method url-fetch)
23277 (uri (pypi-uri "lark" version))
23278 (sha256
23279 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
23280 (build-system pyproject-build-system)
23281 (native-inputs (list python-pytest python-setuptools python-wheel))
23282 (home-page "https://github.com/lark-parser/lark")
23283 (synopsis "Multi-language parser for Python")
23284 (description
23285 "Lark is a parser built with a focus on ergonomics, performance and
23286resilience. Lark can parse all context-free languages. That means it is
23287capable of parsing almost any programming language out there, and to
23288some degree most natural languages too.")
23289 (license license:expat)))
23290
23291(define-public python-find-libpython
23292 (package
23293 (name "python-find-libpython")
23294 (version "0.4.1")
23295 (source
23296 (origin
23297 (method git-fetch)
23298 (uri (git-reference
23299 (url "https://github.com/ktbarrett/find_libpython")
23300 (commit (string-append "v" version))))
23301 (file-name (git-file-name name version))
23302 (sha256
23303 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
23304 (build-system pyproject-build-system)
23305 (native-inputs (list python-setuptools python-wheel
23306 ;; tests
23307 python-pytest))
23308 (home-page "https://github.com/ktbarrett/find_libpython")
23309 (synopsis "Find the path to the @code{libpython} dynamic library")
23310 (description
23311 "@code{find_libpython} helps find the path to the
23312@code{libpython} dynamic library for the current Python environment. It is
23313both a script and a Python package.")
23314 (license license:expat)))
23315
23316(define-public python-libcst
23317 (package
23318 (name "python-libcst")
23319 (version "1.6.0")
23320 (source (origin
23321 (method url-fetch)
23322 (uri (pypi-uri "libcst" version))
23323 (sha256
23324 (base32
23325 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
23326 (snippet
23327 #~(begin (use-modules (guix build utils))
23328 ;; This is mostly to keep the cargo-build-system happy
23329 (with-output-to-file "Cargo.toml"
23330 (lambda ()
23331 (format #t "\
23332[workspace]
23333
23334members = [
23335 \"native\",]")))))))
23336 (build-system cargo-build-system)
23337 (arguments
23338 (list
23339 #:install-source? #false
23340 #:cargo-test-flags
23341 ;; According to .github/workflows/ci.yml
23342 '(list "--manifest-path=native/Cargo.toml"
23343 "--release"
23344 "--no-default-features")
23345 #:imported-modules `(,@%pyproject-build-system-modules
23346 ,@%cargo-build-system-modules)
23347 #:modules `((guix build cargo-build-system)
23348 ((guix build pyproject-build-system) #:prefix py:)
23349 (guix build utils))
23350 #:phases
23351 #~(modify-phases %standard-phases
23352 (add-after 'unpack 'prepare-source
23353 (lambda _
23354 (delete-file "native/Cargo.lock")))
23355 (replace 'build
23356 (assoc-ref py:%standard-phases 'build))
23357 (add-after 'install 'wrap
23358 (lambda _
23359 ;; Collection of python- and pyproject-build-system phases
23360 ;; between 'install and 'check.
23361 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
23362 (assoc-ref py:%standard-phases 'add-install-to-path)
23363 (assoc-ref py:%standard-phases 'wrap)
23364 (assoc-ref py:%standard-phases 'create-entrypoints)
23365 (assoc-ref py:%standard-phases 'compile-bytecode)))
23366 ;; We are not the only ones who cannot load libcst.native
23367 ;; during the 'check phase
23368 ;; https://github.com/Instagram/LibCST/issues/1176
23369 ;; (add-after 'wrap 'python-check
23370 ;; (lambda args
23371 ;; (apply (assoc-ref py:%standard-phases 'check)
23372 ;; #:test-flags '()
23373 ;; args)))
23374 (replace 'install
23375 (assoc-ref py:%standard-phases 'install)))))
23376 (native-inputs
23377 (list python-minimal-wrapper
23378 python-hypothesmith
23379 python-pytest
23380 python-setuptools
23381 python-setuptools-rust
23382 python-setuptools-scm
23383 python-wheel))
23384 (inputs (cons maturin (cargo-inputs 'python-libcst)))
23385 (propagated-inputs
23386 (list python-pyyaml))
23387 (home-page "https://github.com/Instagram/LibCST")
23388 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
23389 (description
23390 "LibCST parses Python source code as a CST tree that keeps all
23391formatting details (comments, whitespaces, parentheses, etc). It's useful
23392for building automated refactoring (codemod) applications and linters.
23393LibCST creates a compromise between an Abstract Syntax Tree (AST) and
23394a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
23395naming node types and fields, LibCST creates a lossless CST that looks and
23396feels like an AST.")
23397 (license (list license:expat
23398 ;; Some files unde libcst/_parser/ are under Python Software
23399 ;; Foundation license (see LICENSE file for details)
23400 license:psfl
23401 ;; libcst/_add_slots.py
23402 license:asl2.0))))
23403
23404(define-public python-libcst-minimal
23405 (hidden-package
23406 (package
23407 (inherit python-libcst)
23408 (name "python-libcst-minimal")
23409 (arguments
23410 (substitute-keyword-arguments arguments
23411 ((#:tests? _ #t) #f)))
23412 (native-inputs
23413 (list python-minimal-wrapper
23414 python-setuptools
23415 python-setuptools-rust
23416 python-setuptools-scm
23417 python-wheel)))))
23418
23419(define-public python-lazy-loader
23420 (package
23421 (name "python-lazy-loader")
23422 (version "0.4")
23423 (source (origin
23424 (method url-fetch)
23425 (uri (pypi-uri "lazy_loader" version))
23426 (sha256
23427 (base32
23428 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
23429 (build-system pyproject-build-system)
23430 (native-inputs
23431 (list python-numpy python-pytest python-setuptools))
23432 (propagated-inputs
23433 (list python-flit-core
23434 python-setuptools
23435 python-wheel))
23436 (home-page "https://scientific-python.org/specs/spec-0001/")
23437 (synopsis "Load subpackages and functions on demand")
23438 (description "@code{python-lazy-loader} makes it easy to load subpackages
23439and functions on demand. Its main features are:
23440
23441@itemize
23442@item Allow subpackages to be made visible to users without incurring import
23443costs.
23444@item Allow external libraries to be imported only when used, improving import
23445times.
23446@end itemize")
23447 (license license:bsd-3)))
23448
23449(define-public python-lazy-object-proxy
23450 (package
23451 (name "python-lazy-object-proxy")
23452 (version "1.11.0")
23453 (source
23454 (origin
23455 (method url-fetch)
23456 (uri (pypi-uri "lazy_object_proxy" version))
23457 (sha256
23458 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
23459 (build-system pyproject-build-system)
23460 (native-inputs
23461 (list python-pytest
23462 python-pytest-benchmark
23463 python-setuptools
23464 python-setuptools-scm
23465 python-wheel))
23466 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
23467 (synopsis "Lazy object proxy for Python")
23468 (description
23469 "Lazy object proxy is an object that wraps a callable but defers the call
23470until the object is actually required, and caches the result of said call.")
23471 (license license:bsd-2)))
23472
23473(define-public python-dnspython
23474 (package
23475 (name "python-dnspython")
23476 (version "2.8.0")
23477 (source
23478 (origin
23479 (method url-fetch)
23480 (uri (pypi-uri "dnspython" version))
23481 (sha256
23482 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
23483 (build-system pyproject-build-system)
23484 (arguments
23485 (list
23486 ;; tests: 1216 passed, 198 skipped, 2 deselected
23487 #:test-flags
23488 #~(list
23489 ;; AssertionError: assert False
23490 "--deselect=tests/test_features.py::test_have"
23491 ;; dns.exception.SyntaxError: protocol not found
23492 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
23493 #:phases
23494 #~(modify-phases %standard-phases
23495 (add-after 'unpack 'patch-getprotobyname-calls
23496 ;; These calls are problematic in the build environment as there is
23497 ;; no /etc/protocols. This breaks the sanity-check phase of any
23498 ;; package depending on this one.
23499 (lambda _
23500 (substitute* "dns/rdtypes/IN/WKS.py"
23501 (("socket.getprotobyname\\('tcp'\\)")
23502 "6")
23503 (("socket.getprotobyname\\('udp'\\)")
23504 "17")))))))
23505 (native-inputs
23506 (list python-hatchling
23507 python-pytest))
23508 (propagated-inputs
23509 (append
23510 (if (supported-package? python-cryptography)
23511 (list ;; DNSSEC
23512 python-cryptography
23513 ;; DNS over Quic
23514 python-aioquic
23515 ;; DNS over HTTPS
23516 python-h2
23517 python-httpcore
23518 python-httpx)
23519 '())
23520 (list python-idna
23521 python-trio)))
23522 (home-page "https://www.dnspython.org")
23523 (synopsis "DNS toolkit for Python")
23524 (description
23525 "dnspython is a DNS toolkit for Python. It supports almost all record
23526types. It can be used for queries, zone transfers, and dynamic updates.
23527It supports TSIG authenticated messages and EDNS0.")
23528 (license license:expat)))
23529
23530(define-public python-py3dns
23531 (package
23532 (name "python-py3dns")
23533 (version "4.0.2")
23534 (source
23535 (origin
23536 (method url-fetch)
23537 (uri (pypi-uri "py3dns" version))
23538 (sha256
23539 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
23540 (build-system pyproject-build-system)
23541 (arguments
23542 ;; This package wants to read /etc/resolv.conf. We can't patch it without
23543 ;; removing functionality so we don't run tests.
23544 (list #:tests? #f))
23545 (native-inputs (list python-flit-core))
23546 (home-page "https://launchpad.net/py3dns")
23547 (synopsis "Python 3 DNS library")
23548 (description
23549 "This Python 3 module provides a DNS API for looking up DNS entries from
23550within Python 3 modules and applications. This module is a simple,
23551lightweight implementation.")
23552 (license license:psfl)))
23553
23554(define-public python-email-validator
23555 (package
23556 (name "python-email-validator")
23557 (version "2.2.0")
23558 (source
23559 (origin
23560 (method url-fetch)
23561 (uri (pypi-uri "email_validator" version))
23562 (sha256
23563 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
23564 (build-system pyproject-build-system)
23565 (arguments
23566 (list
23567 #:test-flags
23568 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
23569 #~(list "-k" "not test_caching_dns_resolver")))
23570 (native-inputs
23571 (list python-pytest
23572 python-setuptools
23573 python-wheel))
23574 (propagated-inputs
23575 (list python-dnspython
23576 python-idna))
23577 (home-page "https://github.com/JoshData/python-email-validator")
23578 (synopsis "Email address validation library for Python")
23579 (description
23580 "This library validates email address syntax and deliverability.")
23581 (license license:cc0)))
23582
23583(define-public python-faker
23584 (package
23585 (name "python-faker")
23586 (version "37.4.2")
23587 (source
23588 (origin
23589 (method url-fetch)
23590 (uri (pypi-uri "faker" version))
23591 (sha256
23592 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23593 (build-system pyproject-build-system)
23594 ;; tests: 2104 passed, 12 skipped, 2 warnings
23595 (native-inputs
23596 (list python-freezegun
23597 python-pytest
23598 python-setuptools
23599 python-validators))
23600 (propagated-inputs
23601 (list python-tzdata))
23602 (home-page "https://github.com/joke2k/faker")
23603 (synopsis "Python package that generates fake data")
23604 (description
23605 "Faker is a Python package that generates fake data such as names,
23606addresses, and phone numbers.")
23607 (license license:expat)))
23608
23609(define-public python-pyaml
23610 (package
23611 (name "python-pyaml")
23612 (version "25.7.0")
23613 (source
23614 (origin
23615 (method url-fetch)
23616 (uri (pypi-uri "pyaml" version))
23617 (sha256
23618 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23619 (build-system pyproject-build-system)
23620 (native-inputs
23621 (list python-pytest
23622 python-setuptools))
23623 (propagated-inputs
23624 (list python-pyyaml))
23625 (home-page "https://github.com/mk-fg/pretty-yaml")
23626 (synopsis "YAML pretty-print library for Python")
23627 (description
23628 "pyaml is a PyYAML based python module to produce pretty and readable
23629YAML-serialized data.")
23630 (license license:wtfpl2)))
23631
23632(define-public python-pyyaml-env-tag
23633 (package
23634 (name "python-pyyaml-env-tag")
23635 (version "1.1")
23636 (source
23637 (origin
23638 (method git-fetch)
23639 (uri (git-reference
23640 (url "https://github.com/waylan/pyyaml-env-tag")
23641 (commit version)))
23642 (file-name (git-file-name name version))
23643 (sha256
23644 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23645 (build-system pyproject-build-system)
23646 (native-inputs (list python-pytest python-setuptools))
23647 (propagated-inputs (list python-pyyaml))
23648 (home-page "https://github.com/waylan/pyyaml-env-tag")
23649 (synopsis "Custom YAML tag for environment variables")
23650 (description
23651 "This package provides a custom YAML tag for referencing environment
23652variables in YAML files.")
23653 (license license:expat)))
23654
23655(define-public python-prompt-toolkit
23656 (package
23657 (name "python-prompt-toolkit")
23658 (version "3.0.51")
23659 (source
23660 (origin
23661 (method url-fetch)
23662 (uri (pypi-uri "prompt_toolkit" version))
23663 (sha256
23664 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23665 (build-system pyproject-build-system)
23666 (arguments
23667 (list
23668 #:phases
23669 #~(modify-phases %standard-phases
23670 (add-before 'check 'pre-check
23671 (lambda _
23672 ;; HOME is needed for the test
23673 ;; "test_pathcompleter_can_expanduser".
23674 (setenv "HOME" "/tmp"))))))
23675 (native-inputs
23676 (list python-pytest
23677 python-setuptools))
23678 (propagated-inputs
23679 (list python-wcwidth))
23680 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23681 (synopsis "Library for building command line interfaces in Python")
23682 (description
23683 "Prompt-Toolkit is a library for building interactive command line
23684interfaces in Python. It's like GNU Readline but it also features syntax
23685highlighting while typing, out-of-the-box multi-line input editing, advanced
23686code completion, incremental search, support for Chinese double-width
23687characters, mouse support, and auto suggestions.")
23688 (license license:bsd-3)))
23689
23690(define-public python-proselint
23691 (package
23692 (name "python-proselint")
23693 (version "0.14.0")
23694 (source
23695 (origin
23696 (method url-fetch)
23697 (uri (pypi-uri "proselint" version))
23698 (sha256
23699 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23700 (build-system pyproject-build-system)
23701 (arguments
23702 (list
23703 #:phases
23704 #~(modify-phases %standard-phases
23705 (add-after 'unpack 'set-home-directory
23706 (lambda _
23707 (setenv "HOME" "/tmp"))))))
23708 (native-inputs
23709 (list python-poetry-core
23710 python-pytest))
23711 (propagated-inputs
23712 (list python-click))
23713 (home-page "http://proselint.com/")
23714 (synopsis "Linter for prose")
23715 (description "@code{python-proselint} is a linter for English prose, that
23716scans through a file and detects issues.")
23717 (license license:bsd-3)))
23718
23719(define-public python-jedi
23720 (package
23721 (name "python-jedi")
23722 (version "0.19.2")
23723 (source
23724 (origin
23725 (method git-fetch)
23726 (uri (git-reference
23727 (url "https://github.com/davidhalter/jedi")
23728 (commit (string-append "v" version))
23729 (recursive? #true)))
23730 (file-name (git-file-name name version))
23731 (sha256
23732 (base32
23733 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23734 (build-system pyproject-build-system)
23735 (arguments
23736 (list
23737 #:phases
23738 '(modify-phases %standard-phases
23739 (add-before 'check 'set-HOME
23740 (lambda _ (setenv "HOME" "/tmp"))))))
23741 (native-inputs
23742 (list python-docopt
23743 python-pytest
23744 python-setuptools
23745 python-wheel))
23746 (propagated-inputs
23747 (list python-parso))
23748 (home-page "https://github.com/davidhalter/jedi")
23749 (synopsis "Autocompletion and static analysis library for Python")
23750 (description
23751 "Jedi is a static analysis tool for Python that can be used in Integrated
23752Development Environments (@dfn{IDE}s) and text editors. It understands Python
23753on a deeper level than many other static analysis frameworks for Python.
23754
23755Jedi understands docstrings and you can use Jedi autocompletion in your REPL
23756as well.")
23757 (license license:expat)))
23758
23759(define-public ptpython
23760 (package
23761 (name "ptpython")
23762 (version "3.0.20")
23763 (source
23764 (origin
23765 (method git-fetch)
23766 (uri (git-reference
23767 (url "https://github.com/jonathanslenders/ptpython")
23768 (commit version)))
23769 (file-name (git-file-name name version))
23770 (sha256
23771 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
23772 (build-system pyproject-build-system)
23773 (arguments
23774 (list
23775 ;; XXX: There is a tests/run_tests.py file but all it does is a
23776 ;; sanity check.
23777 #:tests? #f))
23778 (native-inputs (list python-setuptools))
23779 (propagated-inputs
23780 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
23781 (home-page "https://github.com/jonathanslenders/ptpython")
23782 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
23783 (description
23784 "ptpython is a Python read-eval-print loop with IDE-like features.
23785It supports syntax highlighting, multiline editing, autocompletion, mouse,
23786color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
23787etc.")
23788 (license license:bsd-3)))
23789
23790(define-public python-easyprocess
23791 (package
23792 (name "python-easyprocess")
23793 (version "1.1")
23794 (source
23795 (origin
23796 (method git-fetch)
23797 (uri (git-reference
23798 (url "https://github.com/ponty/easyprocess")
23799 (commit version)))
23800 (file-name (git-file-name name version))
23801 (sha256
23802 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23803 (build-system pyproject-build-system)
23804 (arguments
23805 ;; Tests require pyvirtualdisplay, which requires this package.
23806 (list #:tests? #f))
23807 (native-inputs (list python-setuptools))
23808 (home-page "https://github.com/ponty/easyprocess")
23809 (synopsis "Python subprocess interface")
23810 (description
23811 "@code{easyprocess} is an easy to use Python subprocess interface.")
23812 (license license:bsd-3)))
23813
23814(define-public python-entrypoint2
23815 (package
23816 (name "python-entrypoint2")
23817 (version "0.2.4")
23818 (source
23819 (origin
23820 (method url-fetch)
23821 (uri (pypi-uri "entrypoint2" version))
23822 (sha256
23823 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23824 (build-system pyproject-build-system)
23825 (native-inputs (list python-easyprocess
23826 python-pytest
23827 python-setuptools
23828 python-wheel))
23829 (home-page "https://github.com/ponty/entrypoint2")
23830 (synopsis "Command-line interface for Python modules")
23831 (description
23832 "@code{entrypoint2} is an easy to use command-line interface for Python
23833 modules based on @code{argparse}. It translates function signature and
23834 documentation to argparse configuration.")
23835 (license license:bsd-3)))
23836
23837(define-public python-pyvirtualdisplay
23838 (package
23839 (name "python-pyvirtualdisplay")
23840 (version "3.0")
23841 (source
23842 (origin
23843 (method url-fetch)
23844 (uri (pypi-uri "PyVirtualDisplay" version))
23845 (sha256
23846 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23847 (build-system pyproject-build-system)
23848 (arguments
23849 (list
23850 ;; tests: 27 passed, 8 deselected
23851 #:test-flags
23852 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23853 ;; OSError: Pillow was built without XCB support
23854 #~(list #$@(map (lambda (test) (string-append "--deselect="
23855 "tests/"
23856 test))
23857 (list "test_smart.py::test_slowshot"
23858 "test_smart.py::test_slowshot_with"
23859 "test_smart.py::test_slowshot_nocrop"
23860 "test_smart.py::test_slowshot_timeout"
23861 "test_smart.py::test_slowshot_timeout_nocrop"
23862 "test_smart2.py::test_double"
23863 "test_smart_thread.py::test_smart"
23864 "test_examples.py::test_screenshot")))))
23865 (native-inputs
23866 (list python-easyprocess
23867 python-entrypoint2
23868 python-psutil
23869 python-pytest
23870 python-setuptools
23871 python-vncdotool-bootstrap
23872 xmessage
23873 xorg-server-for-tests))
23874 (home-page "https://github.com/ponty/pyvirtualdisplay")
23875 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23876 (description
23877 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23878 (license license:bsd-3)))
23879
23880(define-public python-pyserial
23881 (package
23882 (name "python-pyserial")
23883 (version "3.5")
23884 (source
23885 (origin
23886 (method url-fetch)
23887 (uri (pypi-uri "pyserial" version))
23888 (sha256
23889 (base32
23890 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23891 (build-system pyproject-build-system)
23892 (native-inputs
23893 (list python-pytest
23894 python-setuptools
23895 python-wheel))
23896 (home-page "https://github.com/pyserial/pyserial")
23897 (synopsis "Python Serial Port Bindings")
23898 (description
23899 "@code{pyserial} provide serial port bindings for Python. It supports
23900different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23901Xon/Xoff. The port is accessed in RAW mode.")
23902 (license license:bsd-3)))
23903
23904(define-public python-pyserial-asyncio
23905 (package
23906 (name "python-pyserial-asyncio")
23907 (version "0.6")
23908 (source
23909 (origin
23910 (method git-fetch)
23911 (uri (git-reference
23912 (url "https://github.com/pyserial/pyserial-asyncio")
23913 (commit (string-append "v" version))))
23914 (file-name (git-file-name name version))
23915 (sha256
23916 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23917 (build-system pyproject-build-system)
23918 (arguments (list #:test-backend #~'unittest))
23919 (native-inputs (list python-setuptools))
23920 (propagated-inputs (list python-pyserial))
23921 (home-page "https://github.com/pyserial/pyserial-asyncio")
23922 (synopsis "Pyserial asynchronous I/O extension")
23923 (description
23924 "This package extends Pyserial with asynchronous I/O support.")
23925 (license license:bsd-3)))
23926
23927(define-public python-pymemcache
23928 (package
23929 (name "python-pymemcache")
23930 (version "4.0.0")
23931 (source
23932 (origin
23933 (method url-fetch)
23934 (uri (pypi-uri "pymemcache" version))
23935 (sha256
23936 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23937 (build-system pyproject-build-system)
23938 (arguments
23939 ;; We don't have the zstd module.
23940 (list
23941 #:test-flags
23942 '(list "--ignore=pymemcache/test/test_compression.py")))
23943 (native-inputs
23944 (list python-faker
23945 python-pytest
23946 python-setuptools
23947 python-wheel))
23948 (home-page "https://github.com/pinterest/pymemcache")
23949 (synopsis "Comprehensive, fast, pure Python memcached client")
23950 (description
23951 "This package provides a comprehensive, fast, pure Python memcached
23952client.")
23953 (license license:asl2.0)))
23954
23955(define-public python-pymodbus
23956 (package
23957 (name "python-pymodbus")
23958 (version "3.8.6")
23959 (source
23960 (origin
23961 (method git-fetch)
23962 (uri (git-reference
23963 (url "https://github.com/riptideio/pymodbus")
23964 (commit (string-append "v" version))))
23965 (file-name (git-file-name name version))
23966 (sha256
23967 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23968 (build-system pyproject-build-system)
23969 (arguments
23970 (list
23971 #:test-flags
23972 #~(list "--ignore"
23973 "test/server/test_simulator_api.py"
23974 ;; These tests require the presence of a certificate.
23975 "--ignore-glob"
23976 "test/examples/*"
23977 "--ignore"
23978 "test/client/test_client.py")))
23979 (native-inputs (list python-mock
23980 python-pytest
23981 python-pytest-asyncio
23982 python-pytest-xdist
23983 python-redis
23984 python-setuptools
23985 python-sqlalchemy
23986 python-tornado
23987 python-twisted
23988 python-wheel))
23989 (propagated-inputs (list python-pyserial
23990 python-six
23991 ;; For the REPL.
23992 python-aiohttp
23993 python-click
23994 python-prompt-toolkit
23995 python-pygments
23996 python-pyserial-asyncio))
23997 (home-page "https://github.com/riptideio/pymodbus/")
23998 (synopsis "Modbus protocol stack in Python")
23999 (description
24000 "Pymodbus is a full Modbus protocol implementation using
24001 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
24002 communications core. It includes the following @emph{client} features:
24003 @itemize
24004 @item full read/write protocol on discrete and register
24005 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
24006 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24007 @item asynchronous and synchronous versions
24008 @item payload builder/decoder utilities
24009 @item pymodbus read eval print loop (REPL).
24010 @end itemize
24011 It also includes the following @emph{server} features:
24012 @itemize
24013 @item can function as a fully implemented Modbus server
24014 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
24015 @item asynchronous and synchronous versions
24016 @item full server control context (device information, counters, etc)
24017 @item a number of backing contexts (database, redis, sqlite, a slave device).
24018 @end itemize")
24019 (license license:bsd-3)))
24020
24021(define-public python-exodriver
24022 (package
24023 (name "python-exodriver")
24024 (version "2.6.0")
24025 (source (origin
24026 (method git-fetch)
24027 (uri (git-reference
24028 (url "https://github.com/labjack/exodriver")
24029 (commit (string-append "v" version))))
24030 (file-name (git-file-name name version))
24031 (sha256
24032 (base32
24033 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
24034 (outputs (list "out"
24035 "doc")) ;544 KiB of examples
24036 (build-system gnu-build-system)
24037 (arguments
24038 (list
24039 #:tests? #f ;no test suite
24040 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
24041 (string-append "PREFIX=" #$output)
24042 "RUN_LDCONFIG=0"
24043 "LINK_SO=1")
24044 #:phases
24045 #~(modify-phases %standard-phases
24046 (delete 'configure)
24047 (replace 'build
24048 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24049 (with-directory-excursion "liblabjackusb"
24050 (apply (assoc-ref %standard-phases 'build)
24051 `(,@args #:make-flags ,make-flags)))))
24052 (replace 'install
24053 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
24054 (with-directory-excursion "liblabjackusb"
24055 (apply (assoc-ref %standard-phases 'install)
24056 `(,@args #:make-flags ,make-flags)))
24057 ;; Install udev rules.
24058 (install-file "90-labjack.rules"
24059 (string-append #$output "/lib/udev/rules.d"))
24060 ;; Install examples.
24061 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
24062 (mkdir-p doc)
24063 (copy-recursively "examples"
24064 (string-append doc "/examples"))))))))
24065 (inputs (list libusb))
24066 (home-page "https://github.com/labjack/exodriver")
24067 (synopsis "USB driver for LabJack data acquisition instruments")
24068 (description "This package provides @code{liblabjackusb}, a USB library for low-level
24069communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
24070instruments. A udev rule is also included to allow unprivileged users to
24071communicate with the instruments via USB.")
24072 (license license:expat))) ;see README
24073
24074(define-public python-labjack
24075 (package
24076 (name "python-labjack")
24077 (version "2.1.0")
24078 (source (origin
24079 (method url-fetch)
24080 (uri (pypi-uri "LabJackPython" version))
24081 (sha256
24082 (base32
24083 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
24084 (build-system pyproject-build-system)
24085 (arguments
24086 (list
24087 #:tests? #f ;no test suite
24088 #:phases
24089 #~(modify-phases %standard-phases
24090 (add-after 'unpack 'patch-liblabjackusb.so
24091 (lambda* (#:key inputs #:allow-other-keys)
24092 (substitute* (find-files "." "\\.py$")
24093 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
24094 (format #f "ctypes.CDLL(~s"
24095 (search-input-file inputs
24096 "lib/liblabjackusb.so")))))))))
24097 (native-inputs (list python-setuptools))
24098 ;; exodriver is provided as a regular input, as only its shared object is
24099 ;; used, not its Python API.
24100 (inputs (list python-exodriver))
24101 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
24102 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
24103 (description
24104 "This Python library allows communicating with the U3, U6, UE9 and U12
24105LabJack data acquisition (DAQ) modules.")
24106 (license license:expat))) ;see setup.py
24107
24108(define-public python-kivy-garden
24109 (package
24110 (name "python-kivy-garden")
24111 (version "0.1.5")
24112 (source
24113 (origin
24114 (method git-fetch) ; source was removed from PyPI
24115 (uri (git-reference
24116 (url "https://github.com/kivy-garden/garden")
24117 (commit (string-append "v" version))))
24118 (file-name (git-file-name name version))
24119 (sha256
24120 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
24121 (build-system pyproject-build-system)
24122 (arguments
24123 (list
24124 #:tests? #f)) ; no tests in PyPI or Git distributions
24125 (native-inputs
24126 (list python-setuptools
24127 python-wheel))
24128 (propagated-inputs
24129 (list python-requests))
24130 (home-page "https://github.com/kivy-garden/garden")
24131 (synopsis "Garden tool for Kivy flowers")
24132 (description
24133 "This package provides the @command{garden} command to install packages
24134for Kivy, the multitouch application platform.")
24135 (license license:expat)))
24136
24137(define-public python-async-lru
24138 (package
24139 (name "python-async-lru")
24140 (version "2.0.4")
24141 (source
24142 (origin
24143 (method url-fetch)
24144 (uri (pypi-uri "async-lru" version))
24145 (sha256
24146 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
24147 (build-system pyproject-build-system)
24148 (native-inputs
24149 (list python-pytest
24150 python-pytest-asyncio
24151 python-pytest-timeout
24152 python-setuptools
24153 python-wheel))
24154 (propagated-inputs
24155 (list python-typing-extensions))
24156 (home-page "https://github.com/aio-libs/async-lru")
24157 (synopsis "Simple LRU cache for asyncio")
24158 (description
24159 "This package is a port of Python's built-in @code{functools.lru_cache}
24160function for @code{asyncio}. To better handle async behaviour, it also
24161ensures multiple concurrent calls will only result in 1 call to the wrapped
24162function, with all awaits receiving the result of that call when it
24163completes.")
24164 (license license:expat)))
24165
24166(define-public python-asyncinject
24167 (package
24168 (name "python-asyncinject")
24169 (version "0.6.1")
24170 (source
24171 (origin
24172 (method git-fetch)
24173 (uri (git-reference
24174 (url "https://github.com/simonw/asyncinject")
24175 (commit version)))
24176 (file-name (git-file-name name version))
24177 (sha256
24178 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
24179 (build-system pyproject-build-system)
24180 (native-inputs
24181 (list python-pytest
24182 python-pytest-asyncio
24183 python-setuptools))
24184 (home-page "https://github.com/simonw/asyncinject")
24185 (synopsis
24186 "Run async workflows using pytest-fixtures-style dependency injection")
24187 (description
24188 "This package lets you run asynchronous workflows using
24189pytest-fixtures-style dependency injection.")
24190 (license license:asl2.0)))
24191
24192(define-public python-binaryornot
24193 (package
24194 (name "python-binaryornot")
24195 (version "0.4.4")
24196 (source
24197 (origin
24198 (method url-fetch)
24199 (uri (pypi-uri "binaryornot" version))
24200 (sha256
24201 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
24202 (build-system pyproject-build-system)
24203 (arguments
24204 (list
24205 #:test-backend #~'unittest
24206 #:test-flags #~(list "discover" "tests")
24207 #:phases
24208 #~(modify-phases %standard-phases
24209 (add-after 'unpack 'patch-tests
24210 (lambda _
24211 ;; TypeError: binary() got an unexpected keyword argument
24212 ;; 'average_size'.
24213 (substitute* "tests/test_check.py"
24214 (("average_size=512") "")))))))
24215 (native-inputs
24216 (list python-hypothesis
24217 python-setuptools))
24218 (propagated-inputs
24219 (list python-chardet))
24220 (home-page "https://github.com/audreyr/binaryornot")
24221 (synopsis "Package to check if a file is binary or text")
24222 (description "Ultra-lightweight pure Python package to check if a file is
24223 binary or text.")
24224 (license license:bsd-3)))
24225
24226(define-public python-bson
24227 (package
24228 (name "python-bson")
24229 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
24230 (revision . "0")))
24231 (version (git-version "0.5.10"
24232 (assoc-ref properties 'revision)
24233 (assoc-ref properties 'commit)))
24234 (source
24235 (origin
24236 (method git-fetch) ;for tests
24237 (uri (git-reference
24238 (url "https://github.com/py-bson/bson")
24239 (commit (assoc-ref properties 'commit))))
24240 (file-name (git-file-name name version))
24241 (sha256
24242 (base32
24243 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
24244 (build-system pyproject-build-system)
24245 (native-inputs
24246 (list python-pytest
24247 python-setuptools))
24248 (propagated-inputs
24249 (list python-dateutil
24250 python-six))
24251 (home-page "https://github.com/py-bson/bson")
24252 (synopsis "BSON (Binary JSON) codec for Python")
24253 (description "@code{bson} is a Python library implementing a BSON (Binary
24254JSON) codec.")
24255 (license license:asl2.0)))
24256
24257(define-public python-nltk
24258 (package
24259 (name "python-nltk")
24260 (version "3.9.1")
24261 (source
24262 (origin
24263 (method url-fetch)
24264 (uri (pypi-uri "nltk" version))
24265 (sha256
24266 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
24267 (build-system pyproject-build-system)
24268 (arguments
24269 ;; Tests require some extra resources to be downloaded.
24270 ;; TODO Try packaging these resources.
24271 '(#:tests? #f))
24272 (propagated-inputs (list python-click python-joblib python-regex
24273 python-tqdm))
24274 (native-inputs (list python-setuptools python-wheel))
24275 (home-page "https://www.nltk.org/")
24276 (synopsis "Natural Language Toolkit")
24277 (description
24278 "NLTK provides interfaces to over 50 corpora and lexical resources such as
24279WordNet, along with a suite of text processing libraries for classification,
24280tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
24281natural language processing libraries.")
24282 (license license:asl2.0)))
24283
24284(define-public python-pymongo
24285 (package
24286 (name "python-pymongo")
24287 (version "4.16.0")
24288 (source
24289 (origin
24290 (method url-fetch)
24291 (uri (pypi-uri "pymongo" version))
24292 (sha256
24293 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
24294 (build-system pyproject-build-system)
24295 (arguments
24296 (list
24297 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
24298 #:test-flags
24299 ;; Tests need access to /etc/resolve.conf.
24300 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
24301 "--ignore=test/test_srv_polling.py"
24302 "-k" (string-join
24303 ;; Tests need access to /etc/resolve.conf
24304 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
24305 "test_detected_environment_warning"
24306 ;; XXX: Tests fail with assertion is not equal.
24307 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
24308 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
24309 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
24310 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
24311 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
24312 " and not "))))
24313 (native-inputs
24314 (list python-hatch-requirements-txt
24315 python-hatchling
24316 python-pytest
24317 python-pytest-asyncio
24318 python-setuptools))
24319 (propagated-inputs
24320 (list python-certifi
24321 python-dnspython))
24322 (home-page "https://github.com/mongodb/mongo-python-driver")
24323 (synopsis "Python driver for MongoDB")
24324 (description "Python driver for MongoDB.")
24325 (license license:asl2.0)))
24326
24327(define-public python-py-consul
24328 (package
24329 (name "python-py-consul")
24330 (version "1.6.0")
24331 (source
24332 (origin
24333 (method git-fetch)
24334 (uri (git-reference
24335 ;; Fork from https://github.com/cablehead/python-consul
24336 (url "https://github.com/criteo/py-consul")
24337 (commit (string-append "v" version))))
24338 (file-name (git-file-name name version))
24339 (sha256
24340 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
24341 (build-system pyproject-build-system)
24342 (arguments (list #:tests? #f)) ; Tests require docker.
24343 (native-inputs (list python-setuptools))
24344 (propagated-inputs (list python-requests))
24345 (home-page "https://github.com/criteo/py-consul")
24346 (synopsis "Python client for Consul")
24347 (description
24348 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
24349discovery, monitoring and configuration.")
24350 (license license:expat)))
24351
24352(define-public python-schematics
24353 (package
24354 (name "python-schematics")
24355 (version "2.1.1")
24356 (source
24357 (origin
24358 (method git-fetch)
24359 (uri (git-reference
24360 (url "https://github.com/schematics/schematics")
24361 (commit (string-append "v" version))))
24362 (file-name (git-file-name name version))
24363 (sha256
24364 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
24365 (build-system pyproject-build-system)
24366 (native-inputs
24367 (list python-dateutil python-mock python-pytest python-setuptools))
24368 (home-page "https://github.com/schematics/schematics")
24369 (synopsis "Python Data Structures for Humans")
24370 (description
24371 "Schematics is a Python library to combine types into structures,
24372validate them, and transform the shapes of your data based on simple
24373descriptions.
24374
24375The internals are similar to ORM type systems, but there is no database layer
24376in Schematics. Instead, building a database layer is easily made when
24377Schematics handles everything except for writing the query. Schematics can be
24378used for tasks where having a database involved is unusual.")
24379 (license license:bsd-3)))
24380
24381(define-public python-odfpy
24382 (package
24383 (name "python-odfpy")
24384 (version "1.4.2")
24385 (source
24386 (origin
24387 (method git-fetch)
24388 (uri (git-reference
24389 (url "https://github.com/eea/odfpy")
24390 (commit (string-append "release-" version))))
24391 (file-name (git-file-name name version))
24392 (sha256
24393 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
24394 (build-system pyproject-build-system)
24395 (native-inputs (list python-pytest python-setuptools))
24396 (propagated-inputs (list python-defusedxml))
24397 (home-page "https://github.com/eea/odfpy")
24398 (synopsis "Python API and tools to manipulate OpenDocument files")
24399 (description
24400 "Collection of libraries and utility programs written in Python to
24401manipulate OpenDocument 1.2 files.")
24402 (license
24403 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
24404 ;; number of files with other licenses.
24405 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
24406
24407(define-public python-namex
24408 (package
24409 (name "python-namex")
24410 (version "0.0.7")
24411 (source
24412 (origin
24413 (method url-fetch)
24414 (uri (pypi-uri "namex" version))
24415 (sha256
24416 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
24417 (build-system pyproject-build-system)
24418 (arguments (list #:tests? #false)) ;there are none
24419 (native-inputs (list python-setuptools python-wheel))
24420 (home-page "https://github.com/fchollet/namex")
24421 (synopsis
24422 "Separate implementation and public API surface of Python packages")
24423 (description
24424 "This package provides a simple utility to separate the
24425implementation of your Python package and its public API surface.")
24426 (license license:asl2.0)))
24427
24428(define-public python-natsort
24429 (package
24430 (name "python-natsort")
24431 (version "8.4.0")
24432 (source
24433 (origin
24434 (method url-fetch)
24435 (uri (pypi-uri "natsort" version))
24436 (sha256
24437 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
24438 (build-system pyproject-build-system)
24439 (native-inputs
24440 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
24441 python-pytest
24442 python-pytest-mock
24443 python-setuptools))
24444 (propagated-inputs
24445 (list python-fastnumbers
24446 python-pyicu))
24447 (home-page "https://github.com/SethMMorton/natsort")
24448 (synopsis "Natural sorting for python and shell")
24449 (description
24450 "Natsort lets you apply natural sorting on lists instead of
24451lexicographical. If you use the built-in @code{sorted} method in python on a
24452list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
24453it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
24454@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
24455numbers and sorts them separately from strings. It can also sort version
24456numbers, real numbers, mixed types and more, and comes with a shell command
24457@command{natsort} that exposes this functionality in the command line.")
24458 (license license:expat)))
24459
24460(define-public python-graphql-core
24461 (package
24462 (name "python-graphql-core")
24463 (version "3.2.7")
24464 (source
24465 (origin
24466 (method git-fetch)
24467 (uri (git-reference
24468 (url "https://github.com/graphql-python/graphql-core")
24469 (commit (string-append "v" version))))
24470 (file-name (git-file-name name version))
24471 (sha256
24472 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
24473 (build-system pyproject-build-system)
24474 (native-inputs
24475 (list python-gevent
24476 python-mock
24477 python-poetry-core
24478 python-pytest
24479 python-pytest-benchmark
24480 python-pytest-mock))
24481 (propagated-inputs
24482 (list python-promise python-six))
24483 (home-page "https://github.com/graphql-python/graphql-core")
24484 (synopsis "GraphQL implementation for Python")
24485 (description
24486 "GraphQL implementation for Python. GraphQL is a data query language and
24487 runtime designed and used to request and deliver data to mobile and web apps.
24488 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
24489 to Python.")
24490 (license license:expat)))
24491
24492(define-public python-graphql-relay
24493 (package
24494 (name "python-graphql-relay")
24495 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
24496 (revision . "0")))
24497 (version (git-version "3.1.5"
24498 (assoc-ref properties 'revision)
24499 (assoc-ref properties 'commit)))
24500 (source
24501 (origin
24502 (method git-fetch)
24503 (uri (git-reference
24504 (url "https://github.com/graphql-python/graphql-relay-py")
24505 (commit (assoc-ref properties 'commit))))
24506 (file-name (git-file-name name version))
24507 (sha256
24508 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
24509 (build-system pyproject-build-system)
24510 (native-inputs
24511 (list python-pytest
24512 python-pytest-asyncio
24513 python-pytest-describe
24514 python-poetry-core))
24515 (propagated-inputs (list python-graphql-core))
24516 (home-page "https://github.com/graphql-python/graphql-relay-py")
24517 (synopsis "Relay implementation for Python")
24518 (description
24519 "This is a library to allow the easy creation of Relay-compliant servers
24520using the GraphQL Python reference implementation of a GraphQL server. It
24521should be noted that the code is a exact port of the original
24522@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
24523implementation} from Facebook.")
24524 (license license:expat)))
24525
24526(define-public python-graphene
24527 (package
24528 (name "python-graphene")
24529 (version "3.4.3")
24530 (source
24531 (origin
24532 (method url-fetch)
24533 (uri (pypi-uri "graphene" version))
24534 (sha256
24535 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
24536 (build-system pyproject-build-system)
24537 (arguments
24538 (list #:tests? #f)) ;XXX: tests fail to load
24539 (native-inputs
24540 (list python-setuptools))
24541 (propagated-inputs
24542 (list python-dateutil
24543 python-graphql-core
24544 python-graphql-relay
24545 python-typing-extensions))
24546 (home-page "https://graphene-python.org/")
24547 (synopsis "GraphQL Framework for Python")
24548 (description
24549 "Graphene is a Python library for building GraphQL schemas/types. A
24550GraphQL schema describes your data model, and provides a GraphQL server with
24551an associated set of resolve methods that know how to fetch data.")
24552 (license license:expat)))
24553
24554(define-public python-rodi
24555 (package
24556 (name "python-rodi")
24557 (version "2.0.8")
24558 (source
24559 (origin
24560 (method git-fetch)
24561 (uri (git-reference
24562 (url "https://github.com/Neoteroi/rodi")
24563 (commit (string-append "v" version))))
24564 (file-name (git-file-name name version))
24565 (sha256
24566 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
24567 (build-system pyproject-build-system)
24568 (native-inputs
24569 (list python-hatchling
24570 python-pytest
24571 python-pytest-asyncio))
24572 (home-page "https://github.com/Neoteroi/rodi")
24573 (synopsis "Dependency injection framework for Python")
24574 (description
24575 "Rodi is a dependency injection framework for Python applications.
24576
24577Its features include
24578
24579@itemize
24580@item Type resolution by signature types annotations.
24581@item Type resolution by class annotations.
24582@item Type resolution by names and aliases.
24583@item Build graph of objects without the need for source code changes.
24584@item Minimum overhead to obtain services, once the objects graph is built.
24585@item Support for singleton, transient, and scoped services.
24586@end itemize")
24587 (license license:expat)))
24588
24589;; XXX: The last time updated in 2015, consider to remove it when nothing is
24590;; depend on it.
24591(define-public python-snowballstemmer
24592 (package
24593 (name "python-snowballstemmer")
24594 (version "2.2.0")
24595 (source
24596 (origin
24597 (method url-fetch)
24598 (uri (pypi-uri "snowballstemmer" version))
24599 (sha256
24600 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24601 (build-system pyproject-build-system)
24602 (arguments
24603 (list
24604 #:tests? #f)) ; no tests
24605 (native-inputs
24606 (list python-setuptools
24607 python-wheel))
24608 (home-page "https://github.com/shibukawa/snowball_py")
24609 (synopsis "Snowball stemming library collection for Python")
24610 (description
24611 "This package provides 16 word stemmer algorithms generated from Snowball
24612algorithms. It includes the 15 original ones plus the Poerter English
24613stemmer.")
24614 (license license:bsd-3)))
24615
24616(define-public python-setproctitle
24617 (package
24618 (name "python-setproctitle")
24619 (version "1.3.7")
24620 (source
24621 (origin
24622 (method git-fetch)
24623 (uri (git-reference
24624 (url "https://github.com/dvarrazzo/py-setproctitle")
24625 (commit (string-append "version-" version))))
24626 (file-name (git-file-name name version))
24627 (sha256
24628 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24629 (build-system pyproject-build-system)
24630 (arguments
24631 (list
24632 #:phases
24633 #~(modify-phases %standard-phases
24634 (add-before 'check 'configure-tests
24635 (lambda* (#:key tests? #:allow-other-keys)
24636 (when tests?
24637 (setenv "PYTHON"
24638 (or (which "python3")
24639 (which "python")))
24640 (setenv "PYCONFIG"
24641 (if (which "python3-config")
24642 "python3-config --embed"
24643 "python-config"))
24644 (substitute* "tests/conftest.py"
24645 (("cc") "gcc"))))))))
24646 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24647 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24648 (synopsis
24649 "Setproctitle implementation for Python to customize the process title")
24650 (description
24651 "The library allows a process to change its title (as displayed by system
24652tools such as @code{ps} and @code{top}).
24653
24654Changing the title is mostly useful in multi-process systems, for example when a
24655master process is forked: changing the children's title allows identifying the
24656task each process is busy with. The technique is used by PostgreSQL and the
24657OpenSSH Server for example.")
24658 (license license:bsd-3)))
24659
24660(define-public python-pyelftools
24661 (package
24662 (name "python-pyelftools")
24663 (version "0.32")
24664 (source
24665 (origin
24666 (method git-fetch)
24667 (uri (git-reference
24668 (url "https://github.com/eliben/pyelftools")
24669 (commit (string-append "v" version))))
24670 (file-name (git-file-name name version))
24671 (sha256
24672 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24673 (snippet
24674 #~(begin
24675 ;; Delete bundled readelf and llvm-dwardump executables. Project
24676 ;; also ships quite a lot binary files mainly for tests, check
24677 ;; with:
24678 ;;
24679 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24680 ;;
24681 (delete-file "test/external_tools/readelf")
24682 (delete-file "test/external_tools/llvm-dwarfdump")))))
24683 (build-system pyproject-build-system)
24684 (arguments
24685 (list
24686 #:phases
24687 #~(modify-phases %standard-phases
24688 (replace 'check
24689 (lambda* (#:key tests? #:allow-other-keys)
24690 (when tests?
24691 ;; Run just basic unit and example tests, dwarfdump and
24692 ;; readelf tests are not selected as they are fragile and
24693 ;; arch-specific.
24694 (invoke "python" "test/run_all_unittests.py")
24695 (invoke "python" "test/run_examples_test.py")))))))
24696 (home-page "https://github.com/eliben/pyelftools")
24697 (native-inputs
24698 (list python-setuptools
24699 python-wheel))
24700 (synopsis "Analyze binary and library file information")
24701 (description
24702 "This Python library provides interfaces for parsing and analyzing two
24703binary and library file formats ; the Executable and Linking Format (ELF), and
24704debugging information in the Debugging With Attributed Record
24705Format (DWARF).")
24706 (license license:public-domain)))
24707
24708(define-public python-pefile
24709 (package
24710 (name "python-pefile")
24711 (version "2024.8.26")
24712 (source
24713 (origin
24714 (method git-fetch)
24715 (uri (git-reference
24716 (url "https://github.com/erocarrera/pefile")
24717 (commit (string-append "v" version))))
24718 (file-name (git-file-name name version))
24719 (sha256
24720 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24721 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24722 (build-system pyproject-build-system)
24723 (arguments
24724 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24725 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24726 ;; decrypted and unpacked before we can run them.
24727 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24728 (native-inputs (list python-pytest python-setuptools))
24729 (propagated-inputs (list python-future))
24730 (home-page "https://github.com/erocarrera/pefile")
24731 (synopsis "Portable Executable (PE) file parser")
24732 (description
24733 "This python library provides interfaces for parsing and working with
24734Portable Executable (PE) files. It makes to most information from the header,
24735as well as section details and data available.")
24736 (license license:expat)))
24737
24738(define-public python-pyemd
24739 (package
24740 (name "python-pyemd")
24741 (version "1.0.0")
24742 (source (origin
24743 (method url-fetch)
24744 (uri (pypi-uri "pyemd" version))
24745 (sha256
24746 (base32
24747 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
24748 (build-system pyproject-build-system)
24749 (native-inputs
24750 (list python-cython
24751 python-pytest
24752 python-setuptools
24753 python-setuptools-scm))
24754 (propagated-inputs
24755 (list python-numpy-1))
24756 (home-page "https://github.com/wmayner/pyemd")
24757 (synopsis
24758 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
24759 (description
24760 "This package provides a Python wrapper for Ofir Pele and Michael
24761Werman's implementation of the Earth Mover's Distance.")
24762 (license license:expat)))
24763
24764(define-public python-imagesize
24765 (package
24766 (name "python-imagesize")
24767 (version "1.4.1")
24768 (source
24769 (origin
24770 (method url-fetch)
24771 (uri (pypi-uri "imagesize" version))
24772 (sha256
24773 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
24774 (build-system pyproject-build-system)
24775 (arguments (list #:test-backend #~'unittest))
24776 (native-inputs
24777 (list python-setuptools
24778 python-wheel))
24779 (home-page "https://github.com/shibukawa/imagesize_py")
24780 (synopsis "Gets image size of files in various formats in Python")
24781 (description
24782 "This package allows determination of image size from PNG, JPEG,
24783JPEG2000 and GIF files in pure Python.")
24784 (license license:expat)))
24785
24786(define-public python-argcomplete
24787 (package
24788 (name "python-argcomplete")
24789 (version "3.6.2")
24790 (source
24791 (origin
24792 (method url-fetch)
24793 (uri (pypi-uri "argcomplete" version))
24794 (sha256
24795 (base32
24796 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24797 (build-system pyproject-build-system)
24798 (arguments
24799 (list
24800 #:test-backend #~'custom
24801 #:test-flags #~(list "test/test.py" "-v")
24802 #:phases
24803 #~(modify-phases %standard-phases
24804 (add-before 'check 'disable-pip-tests
24805 (lambda _
24806 ;; pip: command not found
24807 (substitute* "test/test.py"
24808 (("def test_console_script")
24809 "def __disable_test_console_script"))))
24810 ;; Disable tests that fail with zsh 5.9.1. See
24811 ;; https://github.com/kislyuk/argcomplete/issues/544
24812 (add-before 'check 'disable-failing-zsh-tests
24813 (lambda _
24814 (substitute* "test/test.py"
24815 (("def (test_python_completion|test_python_filename_completion|test_python_module|test_python_not_executable)" all)
24816 (string-append "@unittest.skip(\"fails with zsh 5.9.1\")\n "
24817 all))))))))
24818 (native-inputs
24819 (list python-hatch-vcs
24820 python-hatchling
24821 python-pexpect
24822 tcsh
24823 fish
24824 bash ;full Bash for 'test_file_completion'
24825 zsh))
24826 (home-page "https://github.com/kislyuk/argcomplete")
24827 (synopsis "Shell tab completion for Python argparse")
24828 (description "argcomplete provides extensible command line tab completion
24829of arguments and options for Python scripts using @code{argparse}. It's
24830particularly useful for programs with many options or sub-parsers that can
24831dynamically suggest completions ; for example, when browsing resources over
24832the network.")
24833 (license license:asl2.0)))
24834
24835(define-public python-csscompressor
24836 (package
24837 (name "python-csscompressor")
24838 (version "0.9.5")
24839 (source
24840 (origin
24841 (method git-fetch)
24842 (uri (git-reference
24843 (url "https://github.com/sprymix/csscompressor")
24844 (commit (string-append "v" version))))
24845 (file-name (git-file-name name version))
24846 (sha256
24847 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24848 (build-system pyproject-build-system)
24849 (native-inputs (list python-pytest python-setuptools))
24850 (home-page "https://github.com/sprymix/csscompressor")
24851 (synopsis "Python port of YUI CSS Compressor")
24852 (description "This package provides a python port of YUI CSS Compressor.")
24853 (license license:bsd-3)))
24854
24855(define-public python-rcssmin
24856 (package
24857 (name "python-rcssmin")
24858 (version "1.2.0")
24859 (source
24860 (origin
24861 (method url-fetch)
24862 (uri (pypi-uri "rcssmin" version))
24863 (sha256
24864 (base32
24865 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24866 (build-system pyproject-build-system)
24867 (native-inputs (list python-pytest python-setuptools python-wheel))
24868 (home-page "http://opensource.perlig.de/rcssmin/")
24869 (synopsis "CSS Minifier")
24870 (description "The minifier is based on the semantics of the YUI compressor,
24871 which itself is based on the rule list by Isaac Schlueter.")
24872 (license license:asl2.0)))
24873
24874(define-public python-rjsmin
24875 (package
24876 (name "python-rjsmin")
24877 (version "1.2.3")
24878 (source
24879 (origin
24880 (method url-fetch)
24881 (uri (pypi-uri "rjsmin" version))
24882 (sha256
24883 (base32
24884 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24885 (modules '((guix build utils)))
24886 (snippet
24887 '(for-each delete-file (find-files "bench" "\\.js$")))))
24888 (build-system pyproject-build-system)
24889 (native-inputs
24890 (list python-pytest python-setuptools python-wheel))
24891 (home-page "http://opensource.perlig.de/rjsmin/")
24892 (synopsis "Javascript Minifier")
24893 (description "@code{rJSmin} is a javascript minifier written in Python.
24894The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24895module is a re-implementation aiming for speed, so it can be used at
24896runtime (rather than during a preprocessing step).")
24897 (license license:asl2.0)))
24898
24899(define-public python-cheetah
24900 (package
24901 (name "python-cheetah")
24902 (version "3.3.1")
24903 (source
24904 (origin
24905 (method url-fetch)
24906 (uri (pypi-uri "CT3" version))
24907 (sha256
24908 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24909 (build-system pyproject-build-system)
24910 (arguments
24911 (list
24912 #:test-backend #~'custom
24913 #:test-flags #~(list "Cheetah/Tests/Test.py")
24914 #:phases
24915 #~(modify-phases %standard-phases
24916 (add-after 'unpack 'use-absolute-python
24917 (lambda _
24918 (substitute* "Cheetah/CheetahWrapper.py"
24919 (("#!/usr/bin/env python")
24920 (string-append "#!" (which "python"))))))
24921 (add-before 'check 'configure-tests
24922 (lambda* (#:key tests? #:allow-other-keys)
24923 (substitute* "Cheetah/Tests/ImportHooks.py"
24924 (("os.path.dirname\\(__file__\\)")
24925 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24926 (substitute* "Cheetah/Tests/Test.py"
24927 (("unittest.TextTestRunner\\(\\)")
24928 "unittest.TextTestRunner(verbosity=2)"))
24929 (setenv "TMPDIR" "/tmp"))))))
24930 (native-inputs (list python-setuptools))
24931 (propagated-inputs (list python-markdown)) ;optional
24932 (home-page "https://cheetahtemplate.org/")
24933 (synopsis "Template engine")
24934 (description
24935 "Cheetah is a text-based template engine and Python code generator.
24936
24937 Cheetah can be used as a standalone templating utility or referenced as a
24938library from other Python applications. It has many potential uses, but web
24939developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24940expected to be its principle user group.
24941
24942Features:
24943@enumerate
24944@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24945other text-based format.
24946@item Cleanly separates content, graphic design, and program code.
24947@item Blends the power and flexibility of Python with a simple template
24948language that non-programmers can understand.
24949@item Gives template writers full access to any Python data structure, module,
24950function, object, or method in their templates.
24951@item Makes code reuse easy by providing an object-orientated interface to
24952templates that is accessible from Python code or other Cheetah templates. One
24953template can subclass another and selectively reimplement sections of it.
24954@item Provides a simple, yet powerful, caching mechanism that can dramatically
24955improve the performance of a dynamic website.
24956@item Compiles templates into optimized, yet readable, Python code.
24957@end enumerate")
24958 (license (license:x11-style "file://LICENSE"))))
24959
24960(define-public python-chevron
24961 (package
24962 (name "python-chevron")
24963 (version "0.14.0")
24964 (source (origin
24965 (method url-fetch)
24966 (uri (pypi-uri "chevron" version))
24967 (sha256
24968 (base32
24969 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24970 (build-system pyproject-build-system)
24971 (arguments (list #:tests? #false)) ;there are none
24972 (native-inputs (list python-setuptools python-wheel))
24973 (home-page "https://github.com/noahmorrison/chevron")
24974 (synopsis "Mustache templating language renderer")
24975 (description "This package provides a Python implementation of the
24976Mustache templating language renderer.")
24977 (license license:expat)))
24978
24979(define-public python-dulwich
24980 (package
24981 (name "python-dulwich")
24982 (version "1.2.12")
24983 (source
24984 (origin
24985 (method git-fetch)
24986 (uri (git-reference
24987 (url "https://github.com/jelmer/dulwich")
24988 (commit (string-append "dulwich-" version))))
24989 (file-name (git-file-name name version))
24990 (sha256
24991 (base32 "0in5pgqhnnbfqi5alcg85kiaxr8zww9iih7qsyy9g1yzlaxs0dvd"))))
24992 (build-system pyproject-build-system)
24993 (arguments
24994 (list
24995 ;; tests: 3796 passed, 89 skipped, 1 xfailed, 8 warnings, 33 subtests
24996 ;; passed
24997 #:test-flags
24998 ;; Exclude fuzzing from discovery, depends on python-atheris.
24999 #~(list "tests")
25000 #:phases
25001 #~(modify-phases %standard-phases
25002 (add-after 'unpack 'fix-tests
25003 (lambda* (#:key inputs #:allow-other-keys)
25004 (substitute* '("tests/test_hooks.py"
25005 "tests/porcelain/test_filters.py"
25006 "tests/test_repository.py"
25007 "tests/test_worktree.py")
25008 (("/bin/sh")
25009 (search-input-file inputs "/bin/sh")))))
25010 (add-before 'check 'pre-check
25011 (lambda _
25012 (setenv "PYTHONHASHSEED" "random")
25013 (setenv "TMPDIR" "/tmp"))))))
25014 (native-inputs
25015 (list git-minimal/pinned
25016 openssh-sans-x
25017 ;; python-atheris ;not packaged yet in Guix
25018 python-gevent
25019 python-geventhttpclient
25020 python-pytest
25021 python-setuptools
25022 python-setuptools-rust))
25023 (propagated-inputs
25024 (list python-urllib3
25025 ;; [optional]
25026 gnupg
25027 gpgme
25028 python-aiohttp
25029 python-fastimport
25030 python-merge3
25031 python-munkres
25032 python-paramiko
25033 python-patiencediff
25034 python-rich))
25035 (home-page "https://www.dulwich.io/")
25036 (synopsis "Git implementation in Python")
25037 (description "Dulwich is an implementation of the Git file formats and
25038protocols written in pure Python.")
25039 ;; Can be used with either license.
25040 (license (list license:asl2.0 license:gpl2+))))
25041
25042(define-public python-dunamai
25043 (package
25044 (name "python-dunamai")
25045 (version "1.26.0")
25046 (source
25047 (origin
25048 (method url-fetch)
25049 (uri (pypi-uri "dunamai" version))
25050 (sha256
25051 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
25052 (build-system pyproject-build-system)
25053 (arguments
25054 (list
25055 #:test-flags
25056 #~(list "-k" "not test__version__from_git__shallow")
25057 #:phases
25058 #~(modify-phases %standard-phases
25059 ;; These steps are taken from NixOS package definition:
25060 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
25061 (add-before 'check 'pre-check
25062 (lambda _
25063 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
25064 (setenv "HOME" "/tmp")
25065 (invoke "git" "config" "--global" "user.email" "[email protected]")
25066 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
25067 (propagated-inputs
25068 (list python-packaging))
25069 (native-inputs
25070 (list git-minimal/pinned
25071 python-poetry-core
25072 python-pytest))
25073 (home-page "https://github.com/mtkennerly/dunamai")
25074 (synopsis "Dynamic version generation")
25075 (description
25076 "Dunamai is Python library and command line tool for producing dynamic,
25077standards-compliant version strings, derived from tags in your version control
25078system. This facilitates uniquely identifying nightly or per-commit builds in
25079continuous integration and releasing new versions of your software simply by
25080creating a tag.")
25081 (license license:expat)))
25082
25083(define-public python-pbkdf2
25084 (package
25085 (name "python-pbkdf2")
25086 (version "1.3")
25087 (source
25088 (origin
25089 (method url-fetch)
25090 (uri (pypi-uri "pbkdf2" version))
25091 (sha256
25092 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
25093 (build-system pyproject-build-system)
25094 (arguments
25095 (list
25096 #:test-backend #~'custom
25097 #:test-flags #~(list "test/test_pbkdf2.py")))
25098 (native-inputs (list python-setuptools))
25099 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
25100 (synopsis "Password-based key derivation")
25101 (description
25102 "This module implements the password-based key derivation function,
25103PBKDF2, specified in RSA PKCS#5 v2.0.
25104
25105PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
25106is part of the RSA Public Key Cryptography Standards series. The provided
25107implementation takes a password or a passphrase and a salt value (and
25108optionally a iteration count, a digest module, and a MAC module) and provides
25109a file-like object from which an arbitrarily-sized key can be read.")
25110 (license license:expat)))
25111
25112(define-public python-qrcode
25113 (package
25114 (name "python-qrcode")
25115 (version "8.2")
25116 (source
25117 (origin
25118 (method url-fetch)
25119 (uri (pypi-uri "qrcode" version))
25120 (sha256
25121 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
25122 (build-system pyproject-build-system)
25123 (native-inputs
25124 (list python-poetry-core
25125 python-pytest))
25126 (home-page "https://github.com/lincolnloop/python-qrcode")
25127 (synopsis "QR Code image generator")
25128 (description
25129 "This package provides a pure Python QR Code generator module. It uses
25130the Python Imaging Library (PIL) to allow for the generation of QR Codes.
25131
25132In addition this package provides a command line tool to generate QR codes and
25133either write these QR codes to a file or do the output as ascii art at the
25134console.")
25135 (license license:bsd-3)))
25136
25137(define-public python-rst2ansi
25138 (package
25139 (name "python-rst2ansi")
25140 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
25141 (revision . "0")))
25142 (version (git-version "0.1.5"
25143 (assoc-ref properties 'revision)
25144 (assoc-ref properties 'commit)))
25145 (source
25146 (origin
25147 (method git-fetch)
25148 (uri (git-reference
25149 (url "https://github.com/Snaipe/python-rst-to-ansi")
25150 (commit (assoc-ref properties 'commit))))
25151 (file-name (git-file-name name version))
25152 (sha256
25153 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
25154 (build-system pyproject-build-system)
25155 (arguments
25156 (list
25157 #:tests? #f ; 2 tests fail with additional line characters
25158 #:phases
25159 #~(modify-phases %standard-phases
25160 (replace 'check
25161 (lambda* (#:key tests? #:allow-other-keys)
25162 (when tests?
25163 (invoke "cram" "test" "-v")))))))
25164 (native-inputs (list python-cram python-setuptools))
25165 (propagated-inputs (list python-docutils))
25166 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
25167 (synopsis "Convert RST to ANSI-decorated console output")
25168 (description
25169 "Python module dedicated to rendering RST (reStructuredText) documents to
25170ansi-escaped strings suitable for display in a terminal.")
25171 (license license:expat)))
25172
25173(define-public python-ansi2html
25174 (package
25175 (name "python-ansi2html")
25176 (version "1.9.2")
25177 (source
25178 (origin
25179 (method url-fetch)
25180 (uri (pypi-uri "ansi2html" version))
25181 (sha256
25182 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
25183 (build-system pyproject-build-system)
25184 (native-inputs
25185 (list python-mock
25186 python-pytest
25187 python-setuptools
25188 python-wheel))
25189 (home-page "https://github.com/ralphbean/ansi2html")
25190 (synopsis "Convert ANSI-decorated console output to HTML")
25191 (description
25192 "@command{ansi2html} is a Python library and command line utility for
25193converting text with ANSI color codes to HTML or LaTeX.")
25194 (license license:gpl3+)))
25195
25196(define-public python-easy-ansi
25197 (package
25198 (name "python-easy-ansi")
25199 (version "2.1")
25200 (source
25201 (origin
25202 (method git-fetch)
25203 (uri (git-reference
25204 (url "https://gitlab.com/joeysbytes/easy-ansi")
25205 (commit (string-append "v" version))))
25206 (file-name (git-file-name name version))
25207 (sha256
25208 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
25209 (build-system pyproject-build-system)
25210 (arguments
25211 (list
25212 #:phases
25213 #~(modify-phases %standard-phases
25214 (add-after 'install 'remove-extra
25215 (lambda* (#:key inputs outputs #:allow-other-keys)
25216 (with-directory-excursion (site-packages inputs outputs)
25217 (delete-file-recursively "tests")
25218 (delete-file "setup.py")))))))
25219 (native-inputs (list python-pytest python-setuptools))
25220 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
25221 (synopsis "Terminal framework API")
25222 (description
25223 "Easy ANSI is a terminal framework API to give you an easy way to use
25224colors, cursor control movements, and line/box drawing. It is not meant as a
25225replacement to more full-featured frameworks (such as curses or urwid), but as
25226a tool to quickly create nice-looking screens in your terminal window. You
25227can even create animations with the cursor controls.")
25228 (license license:expat)))
25229
25230(define-public python-easy-ansi-0.3
25231 (package
25232 (inherit python-easy-ansi)
25233 (name "python-easy-ansi")
25234 (version "0.3")
25235 (source
25236 (origin
25237 (method git-fetch)
25238 (uri (git-reference
25239 (url "https://gitlab.com/joeysbytes/easy-ansi")
25240 (commit (string-append "v" version))))
25241 (file-name (git-file-name name version))
25242 (sha256
25243 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
25244 (arguments '())))
25245
25246(define-public python-pycosat
25247 (package
25248 (name "python-pycosat")
25249 (version "0.6.6")
25250 (source
25251 (origin
25252 (method git-fetch)
25253 (uri (git-reference
25254 (url "https://github.com/ContinuumIO/pycosat")
25255 (commit version)))
25256 (file-name (git-file-name name version))
25257 (sha256
25258 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
25259 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
25260 (build-system pyproject-build-system)
25261 (arguments (list #:test-backend #~'unittest))
25262 (native-inputs (list unzip python-setuptools))
25263 (home-page "https://github.com/ContinuumIO/pycosat")
25264 (synopsis "Bindings to picosat (a SAT solver)")
25265 (description
25266 "This package provides efficient Python bindings to @code{picosat} on the
25267C level. When importing pycosat, the @code{picosat} solver becomes part of
25268the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
25269Problem} (SAT) solver.")
25270 (license license:expat)))
25271
25272(define-public python-pypeg2
25273 (package
25274 (name "python-pypeg2")
25275 (version "2.15.2")
25276 (source
25277 (origin
25278 (method url-fetch)
25279 (uri (pypi-uri "pyPEG2" version))
25280 (sha256
25281 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
25282 (build-system pyproject-build-system)
25283 (native-inputs (list python-pytest python-setuptools))
25284 (propagated-inputs (list python-lxml))
25285 (home-page "https://fdik.org/pyPEG/")
25286 (synopsis "Parsing Expression Grammars in Python")
25287 (description
25288 "PyPEG is an intrinsic parser interpreter framework for Python. It is
25289based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
25290formal languages.")
25291 (license license:gpl2)))
25292
25293(define-public python-pyformlang
25294 (package
25295 (name "python-pyformlang")
25296 (version "1.0.10")
25297 (source
25298 (origin
25299 (method url-fetch)
25300 (uri (pypi-uri "pyformlang" version))
25301 (sha256
25302 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
25303 (build-system pyproject-build-system)
25304 (native-inputs
25305 (list python-pytest
25306 python-setuptools
25307 python-wheel))
25308 (propagated-inputs
25309 (list python-networkx
25310 python-numpy
25311 python-pydot))
25312 (home-page "https://github.com/Aunsiels/pyformlang")
25313 (synopsis "Framework for interacting with formal grammars")
25314 (description
25315 "This package provides a framework for working with formal
25316language grammars. The library was originally developed for educational
25317purposes and therefore implements many textbook algorithms regarding the
25318manipulation and interaction with formal grammars.")
25319 (license license:expat)))
25320
25321(define-public python-incremental
25322 (package
25323 (name "python-incremental")
25324 (version "24.7.2")
25325 (source
25326 (origin
25327 (method url-fetch)
25328 (uri (pypi-uri "incremental" version))
25329 (sha256
25330 (base32
25331 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
25332 (build-system pyproject-build-system)
25333 (arguments
25334 ;; Tests require twisted, which needs this package.
25335 (list #:tests? #false
25336 #:build-backend "setuptools.build_meta"))
25337 (native-inputs
25338 (list python-setuptools))
25339 (home-page "https://github.com/hawkowl/incremental")
25340 (synopsis "Library for versioning Python projects")
25341 (description "Incremental is a small library that versions your Python
25342 projects.")
25343 (license license:expat)))
25344
25345(define-public python-invoke
25346 (package
25347 (name "python-invoke")
25348 (version "2.2.1")
25349 (source
25350 (origin
25351 (method url-fetch)
25352 (uri (pypi-uri "invoke" version))
25353 (sha256
25354 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
25355 ;; TODO: invoke/vendor contains:
25356 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
25357 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
25358 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
25359 (build-system pyproject-build-system)
25360 (arguments
25361 (list
25362 ;; XXX: Requires many dependencies that are not yet in Guix.
25363 #:tests? #f
25364 #:phases
25365 #~(modify-phases %standard-phases
25366 (add-after 'unpack 'fix-bash-path
25367 (lambda _
25368 (let ((bash #$(this-package-input "bash-minimal")))
25369 (substitute* "invoke/config.py"
25370 (("shell = \"/bin/bash\"")
25371 (string-append "shell = \"" bash "/bin/bash\"")))))))))
25372 (native-inputs
25373 (list python-setuptools
25374 python-wheel))
25375 (inputs
25376 (list bash-minimal))
25377 (home-page "https://www.pyinvoke.org/")
25378 (synopsis "Pythonic task execution")
25379 (description
25380 "Invoke is a Python task execution tool and library, drawing inspiration
25381from various sources to arrive at a powerful and clean feature set. It is
25382evolved from the Fabric project, but focuses on local and abstract concerns
25383instead of servers and network commands.")
25384 (license license:bsd-3)))
25385
25386(define-public python-automat
25387 (package
25388 (name "python-automat")
25389 (version "24.8.1")
25390 (source (origin
25391 (method url-fetch)
25392 (uri (pypi-uri "Automat" version))
25393 (sha256
25394 (base32
25395 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
25396 (build-system pyproject-build-system)
25397 (arguments
25398 (list
25399 #:phases
25400 #~(modify-phases %standard-phases
25401 (replace 'check
25402 (lambda* (#:key tests? test-flags #:allow-other-keys)
25403 (with-directory-excursion #$output
25404 (apply invoke "pytest" "-vv" test-flags))))
25405 ;; Remove script, because it depends on python-twisted.
25406 (add-after 'unpack 'remove-entrypoint
25407 (lambda _
25408 (substitute* "pyproject.toml"
25409 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
25410 (native-inputs
25411 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25412 (propagated-inputs
25413 (list python-graphviz python-typing-extensions))
25414 (home-page "https://github.com/glyph/Automat")
25415 (synopsis "Self-service finite-state machines")
25416 (description "Automat is a library for concise, idiomatic Python
25417 expression of finite-state automata (particularly deterministic finite-state
25418 transducers).")
25419 (license license:expat)))
25420
25421(define-public python-constantly
25422 (package
25423 (name "python-constantly")
25424 (version "23.10.4")
25425 (source
25426 (origin
25427 (method url-fetch)
25428 (uri (pypi-uri "constantly" version))
25429 (sha256
25430 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
25431 (build-system pyproject-build-system)
25432 (arguments
25433 (list #:tests? #f)) ;cycles with python-twisted
25434 (native-inputs
25435 (list python-setuptools
25436 python-versioneer))
25437 (home-page "https://github.com/twisted/constantly")
25438 (synopsis "Symbolic constants in Python")
25439 (description "Constantly is a Python library that provides symbolic
25440 constant support. It includes collections and constants with text, numeric,
25441 and bit flag values.")
25442 (license license:expat)))
25443
25444(define-public python-attrs
25445 (package
25446 (name "python-attrs")
25447 (version "25.3.0")
25448 (source
25449 (origin
25450 (method url-fetch)
25451 (uri (pypi-uri "attrs" version))
25452 (sha256
25453 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
25454 (build-system pyproject-build-system)
25455 (native-inputs
25456 (list python-hatch-fancy-pypi-readme
25457 python-hatch-vcs
25458 python-hatchling
25459 python-hypothesis
25460 python-pytest))
25461 (home-page "https://github.com/python-attrs/attrs/")
25462 (synopsis "Attributes without boilerplate")
25463 (description "@code{attrs} is a Python package with class decorators that
25464 ease the chores of implementing the most common attribute-related object
25465 protocols.")
25466 (license license:expat)))
25467
25468(define-public python-attrs-bootstrap
25469 (package
25470 (inherit python-attrs)
25471 (name "python-attrs-bootstrap")
25472 (native-inputs (list python-hatchling
25473 python-hatch-fancy-pypi-readme
25474 python-hatch-vcs))
25475 (arguments `(#:tests? #f))))
25476
25477(define-public python-astroid
25478 (package
25479 (name "python-astroid")
25480 (version "3.3.11")
25481 (source
25482 (origin
25483 (method git-fetch)
25484 (uri (git-reference
25485 (url "https://github.com/PyCQA/astroid")
25486 (commit (string-append "v" version))))
25487 (file-name (git-file-name name version))
25488 (sha256
25489 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
25490 (build-system pyproject-build-system)
25491 (arguments
25492 ;; UserWarning: pkg_resources is deprecated as an API. See
25493 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
25494 ;; pkg_resources package is slated for removal as early as
25495 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
25496 (list #:test-flags
25497 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
25498 (native-inputs
25499 (list python-mypy-minimal
25500 python-pytest
25501 python-setuptools
25502 python-wheel))
25503 (propagated-inputs
25504 (list python-lazy-object-proxy
25505 python-typing-extensions
25506 python-wrapt))
25507 (home-page "https://github.com/PyCQA/astroid")
25508 (synopsis "Python source code base representation")
25509 (description "@code{python-astroid} provides a common base representation
25510of Python source code for projects such as pychecker, pyreverse, pylint, etc.
25511It provides a compatible representation which comes from the _ast module. It
25512rebuilds the tree generated by the builtin _ast module by recursively walking
25513down the AST and building an extended ast. The new node classes have
25514additional methods and attributes for different usages. They include some
25515support for static inference and local name scopes. Furthermore, astroid
25516builds partial trees by inspecting living objects.")
25517 (license license:lgpl2.1+)))
25518
25519(define-public python-isbnlib
25520 (package
25521 (name "python-isbnlib")
25522 (version "3.10.14")
25523 (source
25524 (origin
25525 (method git-fetch)
25526 (uri (git-reference
25527 (url "https://github.com/xlcnd/isbnlib")
25528 (commit (string-append "v" version))))
25529 (file-name (git-file-name name version))
25530 (sha256
25531 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
25532 (build-system pyproject-build-system)
25533 (arguments
25534 (list
25535 #:test-flags #~(list "-m" "not network")))
25536 (native-inputs (list python-pytest python-setuptools))
25537 (home-page "https://github.com/xlcnd/isbnlib")
25538 (synopsis "Python library to work with ISBN strings")
25539 (description
25540 "@code{python-isbnlib} is a (pure) python library that provides several
25541useful methods and functions to validate, clean, transform, hyphenate and get
25542metadata for ISBN strings. Its origin was as the core of isbntools. This
25543short version, is suitable to be include as a dependency in other projects.")
25544 (license license:lgpl3+)))
25545
25546(define-public python-isoduration
25547 (package
25548 (name "python-isoduration")
25549 (version "20.11.0")
25550 (source
25551 (origin
25552 (method url-fetch)
25553 (uri (pypi-uri "isoduration" version))
25554 (sha256
25555 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
25556 (build-system pyproject-build-system)
25557 (arguments '(#:tests? #f)) ;no tests in PyPI archive
25558 (propagated-inputs (list python-arrow))
25559 (native-inputs (list python-setuptools python-wheel))
25560 (home-page "https://github.com/bolsote/isoduration")
25561 (synopsis "Operations with ISO 8601 durations")
25562 (description "ISO 8601 is most commonly known as a way to exchange
25563datetimes in textual format. A lesser known aspect of the standard is the
25564representation of durations. The state of the art of ISO 8601 duration
25565handling in Python is more or less limited to what's offered by isodate. This
25566package attempts to address the shortcomings of @code{isodate}.")
25567 (license license:isc)))
25568
25569(define-public python-isort
25570 (package
25571 (name "python-isort")
25572 (version "6.0.1")
25573 (source
25574 (origin
25575 (method git-fetch) ;no tests in PyPI archive
25576 (uri (git-reference
25577 (url "https://github.com/timothycrosley/isort")
25578 (commit version)))
25579 (file-name (git-file-name name version))
25580 (modules '((guix build utils)))
25581 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
25582 (sha256
25583 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
25584 (build-system pyproject-build-system)
25585 (arguments
25586 (list
25587 #:test-flags
25588 ;; Ignore benchmark and integration to reduce closure size.
25589 #~(list "--ignore=tests/benchmark/"
25590 "--ignore=tests/integration/"
25591 "--ignore=tests/unit/profiles/test_black.py"
25592 "-k" (string-join
25593 (list "not test_gitignore"
25594 "test_isort_supports_shared_profiles_issue_970"
25595 "test_requirements_dir"
25596 "test_requirements_finder"
25597 "test_sort_configurable_sort_issue_1732"
25598 "test_sort_imports_error_handling")
25599 " and not "))))
25600 ;; TODO: Package example plugins separately, available in PyPI:
25601 ;; - example_isort_formatting_plugin
25602 ;; - example_isort_sorting_plugin
25603 ;; - example_shared_isort_profile
25604 (native-inputs
25605 (list python-colorama
25606 python-hatch-vcs
25607 python-hatchling
25608 python-hypothesis
25609 python-pylama
25610 python-pytest))
25611 (home-page "https://github.com/PyCQA/isort")
25612 (synopsis "Python utility/library to sort python imports")
25613 (description
25614 "@code{python-isort} is a python utility/library to sort imports
25615alphabetically, and automatically separated into sections. It provides a
25616command line utility, a python library and plugins for various editors.")
25617 (license license:expat)))
25618
25619(define-public python-configparser
25620 (package
25621 (name "python-configparser")
25622 (version "7.2.0")
25623 (source
25624 (origin
25625 (method url-fetch)
25626 (uri (pypi-uri "configparser" version))
25627 (sha256
25628 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25629 (build-system pyproject-build-system)
25630 (native-inputs
25631 (list python-pytest
25632 python-setuptools
25633 python-setuptools-scm
25634 python-wheel))
25635 (home-page "https://github.com/jaraco/configparser/")
25636 (synopsis "Backport of configparser from python 3.5")
25637 (description "@code{python-configparser} is a backport of
25638 @code{configparser} from Python 3.5 so that it can be used directly
25639 in other versions.")
25640 (license license:expat)))
25641
25642(define-public python-mando
25643 (package
25644 (name "python-mando")
25645 (version "0.8.2")
25646 (source
25647 (origin
25648 (method url-fetch)
25649 (uri (pypi-uri "mando" version))
25650 (sha256
25651 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25652 (build-system pyproject-build-system)
25653 (native-inputs
25654 (list python-pytest python-setuptools))
25655 (home-page "https://mando.readthedocs.org/")
25656 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25657 (description
25658 "This package is a wrapper around argparse, allowing you to write complete CLI
25659applications in seconds while maintaining all the flexibility.")
25660 (license license:expat)))
25661
25662(define-public python-mwclient
25663 (package
25664 (name "python-mwclient")
25665 (version "0.11.0")
25666 (source
25667 (origin
25668 (method git-fetch)
25669 (uri (git-reference
25670 (url "https://github.com/mwclient/mwclient")
25671 (commit (string-append "v" version))))
25672 (file-name (git-file-name name version))
25673 (sha256
25674 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25675 (build-system pyproject-build-system)
25676 (propagated-inputs
25677 (list python-requests-oauthlib))
25678 (native-inputs
25679 (list python-mock
25680 python-pytest
25681 python-responses
25682 python-setuptools))
25683 (home-page "https://github.com/btongminh/mwclient")
25684 (synopsis "MediaWiki API client")
25685 (description "This package provides a MediaWiki API client.")
25686 (license license:expat)))
25687
25688(define-public python-kneed
25689 (package
25690 (name "python-kneed")
25691 (version "0.8.5")
25692 (source
25693 (origin
25694 (method git-fetch)
25695 (uri (git-reference
25696 (url "https://github.com/arvkevi/kneed")
25697 (commit (string-append "v" version))))
25698 (file-name (git-file-name name version))
25699 (sha256
25700 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25701 (build-system pyproject-build-system)
25702 (arguments
25703 (list
25704 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25705 (native-inputs (list python-hatchling python-pytest))
25706 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25707 (home-page "https://github.com/arvkevi/kneed")
25708 (synopsis "Knee-point detection in Python")
25709 (description
25710 "This package implements the kneedle algorithm. Given a set of x and y
25711values, kneed will return the knee point of the function. The knee point is
25712the point of maximum curvature.")
25713 (license license:bsd-3)))
25714
25715(define-public python-diff-cover
25716 (package
25717 (name "python-diff-cover")
25718 (version "9.7.1")
25719 (source
25720 (origin
25721 (method url-fetch)
25722 (uri (pypi-uri "diff_cover" version))
25723 (sha256
25724 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25725 (build-system pyproject-build-system)
25726 (arguments
25727 (list
25728 #:test-flags
25729 ;; Dropp check of flake8 in tests.
25730 #~(list "-k" "not test_file_does_not_exist")))
25731 (native-inputs
25732 (list python-pycodestyle
25733 python-poetry-core
25734 python-pyflakes
25735 python-pylint
25736 python-pytest
25737 python-pytest-datadir
25738 python-pytest-mock))
25739 (propagated-inputs
25740 (list python-chardet
25741 python-jinja2
25742 python-pluggy
25743 python-pygments
25744 python-setuptools ; For pkg_resources.
25745 python-tomli))
25746 (home-page "https://github.com/Bachmann1234/diff_cover")
25747 (synopsis "Run coverage and linting reports on diffs")
25748 (description
25749 "Automatically find diff lines that need test coverage. It also finds
25750diff lines that have violations (according to tools such as pycodestyle,
25751pyflakes, flake8, or pylint). This is used as a code quality metric during
25752code reviews.")
25753 (license license:asl2.0)))
25754
25755(define-public python-diff-match-patch
25756 (package
25757 (name "python-diff-match-patch")
25758 (version "20241021")
25759 (source
25760 (origin
25761 (method url-fetch)
25762 (uri (pypi-uri "diff_match_patch" version))
25763 (sha256
25764 (base32
25765 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25766 (build-system pyproject-build-system)
25767 (native-inputs (list python-flit-core python-pytest))
25768 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25769 (synopsis "Synchronize plain text")
25770 (description "Diff Match and Patch libraries offer robust algorithms to
25771 perform the operations required for synchronizing plain text.")
25772 (license license:asl2.0)))
25773
25774(define-public python-icdiff
25775 (package
25776 (name "python-icdiff")
25777 (version "2.0.7")
25778 (source (origin
25779 (method git-fetch)
25780 (uri (git-reference
25781 (url "https://github.com/jeffkaufman/icdiff")
25782 (commit (string-append "release-" version))))
25783 (file-name (git-file-name name version))
25784 (sha256
25785 (base32
25786 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25787 (build-system pyproject-build-system)
25788 (arguments
25789 (list #:tests? #f)) ; there are no test scripts
25790 (native-inputs (list python-setuptools python-wheel))
25791 (home-page "https://www.jefftk.com/icdiff")
25792 (synopsis "Improved colored diff")
25793 (description "This package provides colored diff functions that highlight
25794parts of the lines that were modified.")
25795 (license license:psfl)))
25796
25797(define-public python-dirsync
25798 (package
25799 (name "python-dirsync")
25800 (version "2.2.6")
25801 (source
25802 (origin
25803 (method url-fetch)
25804 (uri (pypi-uri "dirsync" version))
25805 (sha256
25806 (base32
25807 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25808 (build-system pyproject-build-system)
25809 (arguments
25810 ;; No tests in PyPI release and GitHub repository does not have the
25811 ;; latest release tag.
25812 (list #:tests? #f))
25813 (native-inputs (list python-setuptools python-wheel))
25814 (home-page "https://github.com/tkhyn/dirsync")
25815 (synopsis "Advanced directory tree synchronisation tool")
25816 (description
25817 "Dirsync is an advanced directory tree synchronisation tool.")
25818 (license license:expat)))
25819
25820(define-public python-levenshtein
25821 (package
25822 (name "python-levenshtein")
25823 (version "0.27.1")
25824 (source
25825 (origin
25826 (method git-fetch)
25827 (uri (git-reference
25828 (url "https://github.com/rapidfuzz/Levenshtein")
25829 (commit (string-append "v" version))))
25830 (file-name (git-file-name name version))
25831 (sha256
25832 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25833 (build-system pyproject-build-system)
25834 (propagated-inputs (list python-rapidfuzz))
25835 (native-inputs
25836 (list cmake-minimal
25837 python-cython
25838 python-pytest
25839 python-scikit-build-core
25840 python-setuptools
25841 rapidfuzz-cpp))
25842 (home-page "https://github.com/rapidfuzz/Levenshtein")
25843 (synopsis "Fast computation of Levenshtein distance and string similarity")
25844 (description
25845 "The Levenshtein Python C extension module contains functions for fast computation of
25846@enumerate
25847@item Levenshtein (edit) distance, and edit operations
25848@item string similarity
25849@item approximate median strings, and generally string averaging
25850@item string sequence and set similarity
25851@end enumerate
25852It supports both normal and Unicode strings.")
25853 (license license:gpl2+)))
25854
25855(define-public python-factory-boy
25856 (package
25857 (name "python-factory-boy")
25858 (version "3.3.3")
25859 (source
25860 (origin
25861 (method url-fetch)
25862 (uri (pypi-uri "factory_boy" version))
25863 (sha256
25864 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25865 (build-system pyproject-build-system)
25866 (arguments
25867 ;; Tests are not included in the tarball.
25868 `(#:tests? #f))
25869 (native-inputs (list python-setuptools))
25870 (propagated-inputs (list python-faker))
25871 (home-page "https://github.com/FactoryBoy/factory_boy")
25872 (synopsis "Versatile test fixtures replacement")
25873 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25874factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25875to maintain fixtures with easy-to-use factories for complex object. Instead
25876of building an exhaustive test setup with every possible combination of corner
25877cases, factory_boy allows you to use objects customized for the current test,
25878while only declaring the test-specific fields.")
25879 (license license:expat)))
25880
25881(define-public python-gtts
25882 (package
25883 (name "python-gtts")
25884 (version "2.5.4")
25885 (source
25886 (origin
25887 (method git-fetch)
25888 (uri (git-reference
25889 (url "https://github.com/pndurette/gTTS")
25890 (commit (string-append "v" version))))
25891 (file-name (git-file-name name version))
25892 (sha256
25893 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
25894 (build-system pyproject-build-system)
25895 (arguments
25896 ;; Disable tests that require internet.
25897 (list #:test-flags '(list "-k" "not net")))
25898 (native-inputs
25899 (list python-pytest python-setuptools python-testfixtures))
25900 (propagated-inputs
25901 (list python-click-8.1 python-requests))
25902 (home-page "https://github.com/pndurette/gTTS")
25903 (synopsis "Google Translate text-to-speech interface")
25904 (description
25905 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25906interface with the Google Translate text-to-speech API. It lets you write
25907spoken MP3 data to a file, a file-like object (bytestring) for further audio
25908manipulation, or @code{stdout}.")
25909 (license license:expat)))
25910
25911(define-public python-packaging-legacy
25912 (package
25913 (name "python-packaging-legacy")
25914 (version "23.0.post0")
25915 (source
25916 (origin
25917 (method url-fetch)
25918 (uri (pypi-uri "packaging_legacy" version))
25919 (sha256
25920 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25921 (build-system pyproject-build-system)
25922 (propagated-inputs (list python-packaging))
25923 (native-inputs
25924 (list python-pretend
25925 python-pytest
25926 python-setuptools
25927 python-wheel))
25928 (home-page "https://pypi.org/project/packaging-legacy/")
25929 (synopsis "Core utilities for legacy Python packages")
25930 (description "This library provides support for legacy Python Packaging
25931functionality removed from @code{packaging}.")
25932 (license license:asl2.0)))
25933
25934(define-public python-relatorio
25935 (package
25936 (name "python-relatorio")
25937 (version "0.11.1")
25938 (source
25939 (origin
25940 (method url-fetch)
25941 (uri (pypi-uri "relatorio" version))
25942 (sha256
25943 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25944 (build-system pyproject-build-system)
25945 (native-inputs
25946 (list python-pytest
25947 python-setuptools))
25948 (propagated-inputs
25949 (list python-genshi
25950 python-lxml
25951 python-magic))
25952 (home-page "https://relatorio.tryton.org/")
25953 (synopsis "Templating library able to output ODT and PDF files")
25954 (description
25955 "Relatorio is a templating library which provides a way to easily output
25956ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25957filetypes can be easily added by creating plugins for them.")
25958 (license license:gpl3+)))
25959
25960(define-public python-radon
25961 (package
25962 (name "python-radon")
25963 (version "6.0.1")
25964 (source
25965 (origin
25966 (method git-fetch)
25967 (uri (git-reference
25968 (url "https://github.com/rubik/radon")
25969 (commit (string-append "v" version))))
25970 (file-name (git-file-name name version))
25971 (sha256
25972 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25973 (build-system pyproject-build-system)
25974 (arguments
25975 (list
25976 #:phases
25977 #~(modify-phases %standard-phases
25978 (add-after 'unpack 'relax-requirements
25979 (lambda _
25980 (substitute* (list "pyproject.toml" "requirements.txt")
25981 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25982 mando-lower-bound)))))))
25983 (propagated-inputs (list python-colorama python-mando))
25984 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25985 python-setuptools))
25986 (home-page "https://radon.readthedocs.org/")
25987 (synopsis "Code Metrics in Python")
25988 (description
25989 "Radon is a Python tool which computes various code metrics. Supported
25990metrics are:
25991@itemize @bullet
25992@item raw metrics: SLOC, comment lines, blank lines, &c.
25993@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25994@item Halstead metrics (all of them)
25995@item the Maintainability Index (a Visual Studio metric)
25996@end itemize")
25997 (license license:expat)))
25998
25999(define-public python-rgbxy
26000 (package
26001 (name "python-rgbxy")
26002 (version "0.5")
26003 (source
26004 (origin
26005 (method url-fetch)
26006 (uri (pypi-uri "rgbxy" version))
26007 (sha256
26008 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
26009 (build-system pyproject-build-system)
26010 (arguments
26011 (list #:tests? #f)) ;no tests in PyPI or Git
26012 (native-inputs
26013 (list python-setuptools))
26014 (home-page "https://github.com/benknight/hue-python-rgb-converter")
26015 (synopsis "RGB conversion tool in Python")
26016 (description
26017 "This package implements functionality of RGB/CIE1931 'xy' gammuts
26018conversion: Gamut A, B, and C.")
26019 (license license:expat)))
26020
26021(define-public python-jsonpointer
26022 (package
26023 (name "python-jsonpointer")
26024 (version "3.0.0")
26025 (source
26026 (origin
26027 (method url-fetch)
26028 (uri (pypi-uri "jsonpointer" version))
26029 (sha256
26030 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
26031 (build-system pyproject-build-system)
26032 (arguments (list #:test-backend #~'unittest))
26033 (native-inputs
26034 (list python-setuptools
26035 python-wheel))
26036 (home-page "https://github.com/stefankoegl/python-json-pointer")
26037 (synopsis "Identify specific nodes in a JSON document")
26038 (description "@code{jsonpointer} allows you to access specific nodes
26039 by path in a JSON document (see RFC 6901).")
26040 (license license:bsd-3)))
26041
26042(define-public python-jsonpatch
26043 (package
26044 (name "python-jsonpatch")
26045 (version "1.33")
26046 (source
26047 (origin
26048 (method git-fetch)
26049 ;; pypi version lacks tests.js
26050 (uri (git-reference
26051 (url "https://github.com/stefankoegl/python-json-patch")
26052 (commit (string-append "v" version))))
26053 (file-name (git-file-name name version))
26054 (sha256
26055 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
26056 (build-system pyproject-build-system)
26057 (arguments
26058 (list #:test-backend #~'custom
26059 #:test-flags #~(list "tests.py")))
26060 (native-inputs
26061 (list python-setuptools))
26062 (propagated-inputs
26063 (list python-jsonpointer))
26064 (home-page "https://github.com/stefankoegl/python-json-patch")
26065 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
26066 (description "@code{jsonpatch} is a library and program that allows
26067 applying JSON Patches according to RFC 6902.")
26068 (license license:bsd-3)))
26069
26070(define-public python-rfc3987-syntax
26071 (package
26072 (name "python-rfc3987-syntax")
26073 (version "1.1.0")
26074 (source
26075 (origin
26076 (method git-fetch)
26077 (uri (git-reference
26078 (url "https://github.com/willynilly/rfc3987-syntax")
26079 (commit (string-append "v" version))))
26080 (file-name (git-file-name name version))
26081 (sha256
26082 (base32 "13nmzq1ra5660c3k29c937q4kwq7qj7z6dv9bgr1ph57qb3kyc7a"))))
26083 (build-system pyproject-build-system)
26084 (native-inputs
26085 (list python-hatchling
26086 python-pytest))
26087 (propagated-inputs
26088 (list python-lark))
26089 (home-page "https://github.com/willynilly/rfc3987-syntax")
26090 (synopsis "RFC 3987 IRI validation built on a Lark grammar")
26091 (description
26092 "This package validates Internationalized Resource Identifiers (IRIs) and
26093their components against the ABNF grammar from RFC 3987. Built on the Lark
26094parser, it is an MIT-licensed alternative to the GPL-licensed @code{rfc3987}
26095package, and provides the @code{format-nongpl} extra required by recent
26096@code{jsonschema} releases.")
26097 (license license:expat)))
26098
26099(define-public python-rfc3986
26100 (package
26101 (name "python-rfc3986")
26102 (version "2.0.0")
26103 (source
26104 (origin
26105 (method url-fetch)
26106 (uri (pypi-uri "rfc3986" version))
26107 (sha256
26108 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
26109 (build-system pyproject-build-system)
26110 (native-inputs
26111 (list python-pytest python-setuptools))
26112 (home-page "https://rfc3986.readthedocs.io/")
26113 (synopsis "Parse and validate URI references")
26114 (description
26115 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
26116validation and authority parsing. This module also supports RFC@tie{}6874
26117which adds support for zone identifiers to IPv6 addresses.")
26118 (license license:asl2.0)))
26119
26120(define-public python-rfc3986-validator
26121 (package
26122 (name "python-rfc3986-validator")
26123 (version "0.1.1")
26124 (source
26125 (origin
26126 (method url-fetch)
26127 (uri (pypi-uri "rfc3986_validator" version))
26128 (sha256
26129 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
26130 (build-system pyproject-build-system)
26131 (native-inputs
26132 (list python-pytest
26133 python-rfc3987
26134 python-setuptools))
26135 (home-page "https://github.com/naimetti/rfc3986-validator")
26136 (synopsis "Pure python rfc3986 validator")
26137 (description "This package implements a URI validator according to RFC3986
26138in pure Python.")
26139 (license license:expat)))
26140
26141(define-public python-rfc3987
26142 (package
26143 (name "python-rfc3987")
26144 (version "1.3.8")
26145 (source
26146 (origin
26147 (method url-fetch)
26148 (uri (pypi-uri "rfc3987" version))
26149 (sha256
26150 (base32
26151 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
26152 (build-system pyproject-build-system)
26153 (arguments
26154 (list #:test-backend #~'custom
26155 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
26156 (native-inputs
26157 (list python-setuptools))
26158 ;; Source: <https://codeberg.org/atufi/rfc3987>.
26159 (home-page "https://pypi.org/project/rfc3987/")
26160 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
26161 (description "@code{rfc3987} provides routines for parsing and
26162 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
26163 (license license:gpl3+)))
26164
26165;; The latest commit contains fixes for building with both python3 and python2.
26166(define-public python-rfc6555
26167 (package
26168 (name "python-rfc6555")
26169 (version "0.1.0")
26170 (source
26171 (origin
26172 (method git-fetch)
26173 (uri (git-reference
26174 (url "https://github.com/sethmlarson/rfc6555")
26175 (commit (string-append "v" version))))
26176 (file-name (git-file-name name version))
26177 (sha256
26178 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
26179 (build-system pyproject-build-system)
26180 (arguments
26181 (list
26182 ;; Other tests require network access.
26183 #:test-flags #~(list "tests/test_ipv6.py")))
26184 (native-inputs (list python-pytest python-setuptools))
26185 (home-page "https://pypi.org/project/rfc6555/")
26186 (synopsis "Python implementation of RFC 6555")
26187 (description
26188 "Python implementation of the Happy Eyeballs Algorithm described in RFC
261896555. Provided with a single file and dead-simple API to allow easy vendoring
26190and integration into other projects.")
26191 (license license:asl2.0)))
26192
26193(define-public python-sacn
26194 (package
26195 (name "python-sacn")
26196 (version "1.11.0")
26197 (source
26198 (origin
26199 (method url-fetch)
26200 (uri (pypi-uri "sacn" version))
26201 (sha256
26202 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
26203 (build-system pyproject-build-system)
26204 (native-inputs (list python-pytest python-setuptools python-wheel))
26205 (home-page "https://github.com/Hundemeier/sacn")
26206 (synopsis "Python library for sending and receiving sACN data")
26207 (description
26208 "This package provides a Python library for sending and receiving
26209 sACN (Streaming Architecture for Control Networks) data, a standard
26210 protocol used for controlling lighting and other devices over
26211 a network.")
26212 (license license:expat)))
26213
26214(define-public python-bagit
26215 (package
26216 (name "python-bagit")
26217 (version "1.9.0")
26218 (source
26219 (origin
26220 (method git-fetch) ; no tests in PyPI
26221 (uri (git-reference
26222 (url "https://github.com/LibraryOfCongress/bagit-python")
26223 (commit (string-append "v" version))))
26224 (file-name (git-file-name name version))
26225 (sha256
26226 (base32
26227 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
26228 (build-system pyproject-build-system)
26229 (arguments
26230 (list #:test-flags #~(list "test.py")))
26231 (native-inputs
26232 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
26233 (home-page "https://libraryofcongress.github.io/bagit-python/")
26234 (synopsis "Create and validate BagIt packages")
26235 (description "Bagit is a Python library and command line utility for working
26236 with BagIt style packages. BagIt is a minimalist packaging format for digital
26237 preservation.")
26238 (license license:cc0)))
26239
26240(define-public python-prov
26241 (package
26242 (name "python-prov")
26243 (version "2.1.1")
26244 (source
26245 (origin
26246 (method git-fetch)
26247 (uri (git-reference
26248 (url "https://github.com/trungdong/prov")
26249 (commit version)))
26250 (file-name (git-file-name name version))
26251 (sha256
26252 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
26253 (build-system pyproject-build-system)
26254 (arguments
26255 (list
26256 #:test-backend #~'unittest
26257 #:test-flags #~(list "discover" "-s" "src")
26258 #:phases
26259 #~(modify-phases %standard-phases
26260 (add-before 'check 'disable-tests
26261 (lambda _
26262 ;; prov.model.ProvException: The provided identifier
26263 ;; "http://www.example.org/bundle" is not valid
26264 (substitute* "src/prov/tests/qnames.py"
26265 (("test_namespace_inheritance")
26266 "disabled_test_namespace_inheritance")
26267 (("test_default_namespace_inheritance")
26268 "disabled_test_default_namespace_inheritance")))))))
26269 (native-inputs
26270 (list python-setuptools))
26271 (propagated-inputs
26272 (list graphviz
26273 python-dateutil
26274 python-networkx
26275 python-pydot
26276 ;; optional dependencies, also needed for tests
26277 python-lxml
26278 python-rdflib))
26279 (home-page "https://github.com/trungdong/prov")
26280 (synopsis
26281 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
26282 (description
26283 "This package provides a library for W3C Provenance Data Model supporting
26284 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
26285 (license license:expat)))
26286
26287(define-public python-arcp
26288 (package
26289 (name "python-arcp")
26290 (version "0.2.1")
26291 (source
26292 (origin
26293 (method git-fetch)
26294 (uri (git-reference
26295 (url "https://github.com/stain/arcp-py")
26296 (commit version)))
26297 (file-name (git-file-name name version))
26298 (sha256
26299 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
26300 (build-system pyproject-build-system)
26301 (arguments
26302 (list
26303 #:phases
26304 #~(modify-phases %standard-phases
26305 (add-after 'unpack 'patch-tests
26306 (lambda _
26307 (substitute* "tests/test_parse.py"
26308 (("ni:///")
26309 "ni:")))))))
26310 (native-inputs (list python-pytest python-setuptools))
26311 (home-page "https://arcp.readthedocs.io/")
26312 (synopsis "Archive and Package URI parser and generator")
26313 (description
26314 "@acronym{arcp, Archive and Package} provides functions for creating
26315@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
26316files packaged in an archive or package, like a ZIP file. arcp URIs can be
26317used to consume or reference hypermedia resources bundled inside a file
26318archive or an application package, as well as to resolve URIs for archive
26319resources within a programmatic framework. This URI scheme provides
26320mechanisms to generate a unique base URI to represent the root of the archive,
26321so that relative URI references in a bundled resource can be resolved within
26322the archive without having to extract the archive content on the local file
26323system. An arcp URI can be used for purposes of isolation (e.g. when
26324consuming multiple archives), security constraints (avoiding \"climb out\"
26325from the archive), or for externally identiyfing sub-resources referenced by
26326hypermedia formats.")
26327 (license license:asl2.0)))
26328
26329;; XXX: Project has no updates since 2019, consider to remove when nothing
26330;; depends on it in the next refresh cycle.
26331;; See: <https://github.com/pipermerriam/flex/issues/237>.
26332(define-public python-flex
26333 (package
26334 (name "python-flex")
26335 (version "6.14.1")
26336 (source
26337 (origin
26338 (method url-fetch)
26339 (uri (pypi-uri "flex" version))
26340 (sha256
26341 (base32
26342 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
26343 (build-system pyproject-build-system)
26344 (arguments (list #:tests? #f)) ;no tests in PyPI archive
26345 (native-inputs
26346 (list python-setuptools))
26347 (propagated-inputs
26348 (list python-click
26349 python-jsonpointer
26350 python-pyyaml
26351 python-requests
26352 python-rfc3987
26353 python-six
26354 python-strict-rfc3339
26355 python-validate-email))
26356 (home-page "https://github.com/pipermerriam/flex")
26357 (synopsis "Validates Swagger schemata")
26358 (description "@code{flex} can be used to validate Swagger schemata.")
26359 (license license:bsd-3)))
26360
26361(define-public python-marshmallow
26362 (package
26363 (name "python-marshmallow")
26364 (version "4.0.0")
26365 (source
26366 (origin
26367 (method url-fetch)
26368 (uri (pypi-uri "marshmallow" version))
26369 (sha256
26370 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
26371 (build-system pyproject-build-system)
26372 (arguments
26373 (list
26374 ;; tests: x86_64 1117 passed
26375 ;; i686-linux 1116 passed, 1 deselected
26376 #:test-flags
26377 #~(list #$@(if (target-64bit?)
26378 '()
26379 ;; OverflowError
26380 '((string-append "--deselect=tests/test_utils.py"
26381 "::test_from_timestamp_with_overflow_value"))))))
26382 (native-inputs
26383 (list python-flit-core
26384 python-pytest
26385 python-simplejson
26386 tzdata-for-tests))
26387 (home-page "https://github.com/marshmallow-code/marshmallow")
26388 (synopsis "Convert complex datatypes to and from native Python datatypes")
26389 (description
26390 "@code{marshmallow} provides a library for converting complex datatypes
26391to and from native Python datatypes.")
26392 (license license:expat)))
26393
26394(define-public python-marshmallow-3
26395 (package
26396 (inherit python-marshmallow)
26397 (version "3.22.0")
26398 (source
26399 (origin
26400 (method url-fetch)
26401 (uri (pypi-uri "marshmallow" version))
26402 (sha256
26403 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
26404 (arguments '())
26405 (native-inputs
26406 (list python-pytest
26407 python-pytz
26408 python-simplejson
26409 python-flit-core))
26410 (propagated-inputs
26411 (list python-packaging))))
26412
26413
26414(define-public python-apispec
26415 (package
26416 (name "python-apispec")
26417 (version "6.8.2")
26418 (source
26419 (origin
26420 (method url-fetch)
26421 (uri (pypi-uri "apispec" version))
26422 (sha256
26423 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
26424 (build-system pyproject-build-system)
26425 (native-inputs
26426 (list python-flit-core
26427 python-openapi-spec-validator
26428 python-pytest))
26429 (propagated-inputs
26430 (list python-marshmallow
26431 python-packaging
26432 python-pyyaml))
26433 (home-page "https://github.com/marshmallow-code/apispec")
26434 (synopsis "Swagger/OpenAPI specification generator")
26435 (description
26436 "@code{python-apispec} is a pluggable API specification generator. It
26437currently supports the OpenAPI specification, formerly known as Swagger.")
26438 (license license:expat)))
26439
26440(define-public python-apispec-webframeworks
26441 (package
26442 (name "python-apispec-webframeworks")
26443 (version "1.2.0")
26444 (source
26445 (origin
26446 (method url-fetch)
26447 (uri (pypi-uri "apispec_webframeworks" version))
26448 (sha256
26449 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
26450 (build-system pyproject-build-system)
26451 (native-inputs
26452 (list python-aiohttp
26453 python-flit-core
26454 python-bottle
26455 python-flask
26456 python-pytest
26457 python-pyyaml
26458 python-tornado
26459 python-wheel))
26460 (propagated-inputs
26461 (list python-apispec))
26462 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
26463 (synopsis "Web framework plugins for apispec")
26464 (description "This package provides plugins for using @code{apispec} with
26465web frameworks.")
26466 (license license:expat)))
26467
26468(define-public python-flasgger
26469 (package
26470 (name "python-flasgger")
26471 (version "0.9.7.1")
26472 (source
26473 (origin
26474 (method git-fetch)
26475 (uri (git-reference
26476 (url "https://github.com/rochacbruno/flasgger")
26477 (commit (string-append "v" version))))
26478 (file-name (git-file-name name version))
26479 (sha256
26480 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
26481 (patches
26482 (list
26483 (origin
26484 (method url-fetch)
26485 (uri
26486 (string-append "https://github.com/flasgger/flasgger/commit/"
26487 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
26488 (sha256
26489 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
26490 (build-system pyproject-build-system)
26491 (arguments
26492 (list
26493 #:test-flags
26494 #~(list "--ignore=tests/test_examples.py"
26495 "tests")))
26496 (propagated-inputs
26497 (list python-flask
26498 python-pyyaml
26499 python-jsonschema
26500 python-mistune
26501 python-six))
26502 (native-inputs
26503 (list python-pytest
26504 python-setuptools))
26505 (home-page "https://github.com/rochacbruno/flasgger/")
26506 (synopsis "Extract Swagger specs from your Flask project")
26507 (description "@code{python-flasgger} allows extracting Swagger specs
26508 from your Flask project. It is a fork of Flask-Swagger.")
26509 (license license:expat)))
26510
26511(define-public python-apache-libcloud
26512 (package
26513 (name "python-apache-libcloud")
26514 (version "3.8.0")
26515 (source
26516 (origin
26517 (method url-fetch)
26518 (uri (pypi-uri "apache-libcloud" version))
26519 (sha256
26520 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
26521 (build-system pyproject-build-system)
26522 (arguments
26523 (list
26524 #:tests? #f ; XXX: all tests fail requiring additional credentials
26525 #:phases
26526 #~(modify-phases %standard-phases
26527 (add-after 'unpack 'patch-ssh
26528 (lambda* (#:key inputs #:allow-other-keys)
26529 (substitute* "libcloud/compute/ssh.py"
26530 (("'ssh'")
26531 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
26532 (add-after 'unpack 'patch-tests
26533 (lambda _
26534 (substitute* "libcloud/test/compute/test_ssh_client.py"
26535 (("^class ShellOutSSHClientTests")
26536 "@unittest.skip(\"Guix container doesn't have ssh service\")
26537class ShellOutSSHClientTests"))))
26538 (add-before 'check 'copy-secret
26539 (lambda _
26540 (copy-file "libcloud/test/secrets.py-dist"
26541 "libcloud/test/secrets.py"))))))
26542 (inputs
26543 (list openssh))
26544 (propagated-inputs
26545 (list python-requests))
26546 (native-inputs
26547 (list python-pytest python-requests-mock python-setuptools))
26548 (home-page "https://libcloud.apache.org/")
26549 (synopsis "Unified Cloud API")
26550 (description
26551 "@code{libcloud} is a Python library for interacting with many of the
26552popular cloud service providers using a unified API.")
26553 (license license:asl2.0)))
26554
26555(define-public python-smmap
26556 (package
26557 (name "python-smmap")
26558 (version "5.0.2")
26559 (source
26560 (origin
26561 (method url-fetch)
26562 (uri (pypi-uri "smmap" version))
26563 (sha256
26564 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
26565 (build-system pyproject-build-system)
26566 (native-inputs
26567 (list python-pytest
26568 python-setuptools
26569 python-wheel))
26570 (home-page "https://github.com/Byron/smmap")
26571 (synopsis "Python sliding window memory map manager")
26572 (description "@code{smmap} is a pure Python implementation of a sliding
26573 window memory map manager.")
26574 (license license:bsd-3)))
26575
26576(define-public python-regex
26577 (package
26578 (name "python-regex")
26579 (version "2026.2.28")
26580 (source
26581 (origin
26582 (method git-fetch)
26583 (uri (git-reference
26584 (url "https://github.com/mrabarnett/mrab-regex")
26585 (commit version)))
26586 (file-name (git-file-name name version))
26587 (sha256
26588 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
26589 (build-system pyproject-build-system)
26590 (arguments
26591 (list
26592 #:test-backend #~'unittest
26593 #:test-flags #~(list "-v" "regex.tests.test_regex")
26594 #:phases
26595 #~(modify-phases %standard-phases
26596 (add-before 'check 'remove-local-source
26597 (lambda _
26598 (delete-file-recursively "regex"))))))
26599 (native-inputs
26600 (list python-setuptools))
26601 (home-page "https://github.com/mrabarnett/mrab-regex")
26602 (synopsis "Alternative regular expression module")
26603 (description
26604 "This regular expression implementation is backwards-compatible with the
26605standard @code{re} module, but offers additional functionality like full
26606case-folding for case-insensitive matches in Unicode.")
26607 (license license:psfl)))
26608
26609(define-public python-pysocks
26610 (package
26611 (name "python-pysocks")
26612 (version "1.7.1")
26613 (source
26614 (origin
26615 (method url-fetch)
26616 (uri (pypi-uri "PySocks" version))
26617 (sha256
26618 (base32
26619 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
26620 (build-system pyproject-build-system)
26621 (arguments `(#:tests? #f))
26622 (native-inputs
26623 (list python-setuptools))
26624 (home-page "https://github.com/Anorov/PySocks")
26625 (synopsis "SOCKS client module")
26626 (description "@code{pysocks} is an updated and semi-actively maintained
26627version of @code{SocksiPy} with bug fixes and extra features.")
26628 (license license:bsd-3)))
26629
26630(define-public python-pydub
26631 ;; TODO: Move to (gnu packages audio)
26632 (package
26633 (name "python-pydub")
26634 (version "0.25.1")
26635 (source
26636 (origin
26637 (method git-fetch)
26638 (uri (git-reference
26639 (url "https://github.com/jiaaro/pydub")
26640 (commit (string-append "v" version))))
26641 (file-name (git-file-name name version))
26642 (sha256
26643 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26644 (patches
26645 (list
26646 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26647 (origin
26648 (method url-fetch)
26649 (uri
26650 (string-append "https://github.com/jiaaro/pydub/commit/"
26651 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26652 (sha256
26653 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26654 (build-system pyproject-build-system)
26655 (arguments
26656 (list
26657 #:test-backend ''unittest
26658 #:phases
26659 #~(modify-phases %standard-phases
26660 (add-after 'unpack 'fix-ffmpeg-path
26661 (lambda* (#:key inputs #:allow-other-keys)
26662 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26663 (substitute* "pydub/utils.py"
26664 (("return \"ffmpeg\"")
26665 (string-append "return \"" bin "/ffmpeg\""))
26666 (("return \"ffplay\"")
26667 (string-append "return \"" bin "/ffplay\""))
26668 (("return \"ffprobe\"")
26669 (string-append "return \"" bin "/ffprobe\""))
26670 (("warn\\(\"Couldn't find ff")
26671 "# warn\\(\"Couldn't find ff"))))))))
26672 (native-inputs (list python-setuptools))
26673 (home-page "https://pydub.com")
26674 (inputs (list ffmpeg))
26675 (propagated-inputs (list python-scipy))
26676 (synopsis "Manipulate audio with a high level interface in Python")
26677 (description
26678 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26679@code{ffmpeg} to open various audio formats.")
26680 (license license:expat))) ; MIT license
26681
26682(define-public python-pkginfo
26683 (package
26684 (name "python-pkginfo")
26685 (version "1.12.1.2")
26686 (source
26687 (origin
26688 (method url-fetch)
26689 (uri (pypi-uri "pkginfo" version))
26690 (sha256
26691 (base32
26692 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26693 (build-system pyproject-build-system)
26694 (arguments
26695 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26696 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26697 (native-inputs
26698 (list python-pytest
26699 python-setuptools
26700 python-wheel))
26701 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26702 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26703 (description
26704 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26705source distriubtion (an sdist) or a binary distribution (e.g., created by
26706running bdist_egg). It can also query the EGG-INFO directory of an installed
26707distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26708created by running @code{python setup.py develop}).")
26709 (license license:expat)))
26710
26711;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26712;; read-only. Consider to remove when nothing depends on it.
26713(define-public python-ratelimiter
26714 ;; From https://github.com/RazerM/ratelimiter/pull/11
26715 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26716 (revision "0"))
26717 (package
26718 (name "python-ratelimiter")
26719 (version (git-version "1.2.0.post1" revision commit))
26720 (source
26721 (origin
26722 (method git-fetch)
26723 (uri (git-reference
26724 (url "https://github.com/RazerM/ratelimiter")
26725 (commit commit)))
26726 (sha256
26727 (base32
26728 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26729 (build-system pyproject-build-system)
26730 (arguments
26731 (list #:phases
26732 '(modify-phases %standard-phases
26733 (add-after 'unpack 'pytest-compatibility
26734 (lambda _
26735 (substitute* "tests/conftest.py"
26736 (("pytest.collect.File") "pytest.File")))))))
26737 (native-inputs
26738 (list python-pytest-8
26739 python-pytest-asyncio-0.26
26740 python-setuptools))
26741 (home-page "https://github.com/RazerM/ratelimiter")
26742 (synopsis "Simple rate limiting object")
26743 (description
26744 "The @code{ratelimiter} module ensures that an operation will not be
26745executed more than a given number of times during a given period.")
26746 (license license:asl2.0))))
26747
26748(define-public python-rbfly
26749 (package
26750 (name "python-rbfly")
26751 (version "0.11.0")
26752 (source
26753 (origin
26754 (method url-fetch)
26755 (uri (pypi-uri "rbfly" version))
26756 (sha256
26757 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26758 (build-system pyproject-build-system)
26759 (arguments
26760 (list
26761 #:test-flags
26762 #~(list "--pyargs" "rbfly"
26763 #$@(if (target-64bit?)
26764 '()
26765 '((string-append "--deselect=tests/amqp/test_message.py"
26766 "::test_encode_amqp_string_too_long"))))
26767 #:phases
26768 #~(modify-phases %standard-phases
26769 (add-before 'check 'remove-local-source
26770 (lambda _
26771 (delete-file-recursively "rbfly"))))))
26772 (native-inputs
26773 (list python-cython
26774 python-pytest
26775 python-pytest-asyncio
26776 python-pytest-timeout
26777 python-setuptools))
26778 (home-page "https://wrobell.dcmod.org/rbfly/")
26779 (synopsis "Work with RabbitMQ Streams in Python")
26780 (description
26781 "This package implements a functionality to deal with
26782@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26783@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26784
26785It is designed and implemented with the following qualities in mind:
26786@itemize
26787@item asynchronous Pythonic API with type annotations
26788@item use of
26789@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
267901.0 message format to enable interoperability between RabbitMQ Stream. clients
26791@item auto reconnection to RabbitMQ broker with lazily created connection
26792objects
26793@end itemize
26794
26795Support of many RabbitMQ Streams broker features:
26796@itemize
26797@item publishing single messages, or in batches, with confirmation
26798@item subscribing to a stream at a specific point in time, from a specific
26799offset, or using offset reference
26800@item stream message filtering
26801@item writing stream offset reference
26802@item message deduplication
26803@item integration with AMQP 1.0 ecosystem at message format level
26804@end itemize")
26805 (license license:gpl3+)))
26806
26807(define-public python-jsonrpclib-pelix
26808 (package
26809 (name "python-jsonrpclib-pelix")
26810 (version "0.3.2")
26811 (source
26812 (origin
26813 (method git-fetch)
26814 (uri (git-reference
26815 (url "https://github.com/tcalmant/jsonrpclib")
26816 (commit (string-append "v" version))))
26817 (file-name (git-file-name name version))
26818 (sha256
26819 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26820 (build-system pyproject-build-system)
26821 (arguments
26822 (list
26823 #:test-flags #~(list "--deselect=\
26824tests/test_internal.py::InternalTests::test_multicall_success")))
26825 (native-inputs (list python-pytest python-setuptools))
26826 (home-page "https://github.com/tcalmant/jsonrpclib")
26827 (synopsis "JSON-RPC 2.0 client library for Python")
26828 (description
26829 "This library implements the JSON-RPC v2.0 specification
26830(backwards-compatible) as a client library for Python. This version is a fork
26831of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26832 (license license:asl2.0)))
26833
26834(define-public python-setuptools-git
26835 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26836 ;; refresh cycle.
26837 (package
26838 (name "python-setuptools-git")
26839 (version "1.2")
26840 (source
26841 (origin
26842 (method url-fetch)
26843 (uri (pypi-uri "setuptools-git" version))
26844 (sha256
26845 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26846 (build-system pyproject-build-system)
26847 (arguments
26848 (list
26849 #:tests? #f ;no tests in PyPI
26850 #:phases
26851 #~(modify-phases %standard-phases
26852 ;; This is needed for tests.
26853 (add-after 'unpack 'configure-git
26854 (lambda _
26855 (setenv "HOME" "/tmp")
26856 (invoke "git" "config" "--global" "user.email" "guix")
26857 (invoke "git" "config" "--global" "user.name" "guix"))))))
26858 (native-inputs
26859 (list git-minimal/pinned python-setuptools python-wheel))
26860 (home-page "https://github.com/msabramo/setuptools-git")
26861 (synopsis "Setuptools revision control system plugin for Git")
26862 (description
26863 "This package provides a plugin for Setuptools for revision control with
26864Git.")
26865 (license license:bsd-3)))
26866
26867(define-public python-setuptools-rust
26868 (package
26869 (name "python-setuptools-rust")
26870 (version "1.11.1")
26871 (source
26872 (origin
26873 (method url-fetch)
26874 (uri (pypi-uri "setuptools_rust" version))
26875 (sha256
26876 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26877 (build-system pyproject-build-system)
26878 (arguments
26879 (list #:tests? #f)) ;tests require Cargo
26880 (propagated-inputs
26881 (list python-semantic-version
26882 python-setuptools))
26883 (home-page "https://github.com/PyO3/setuptools-rust")
26884 (synopsis "Setuptools plugin for Rust extensions")
26885 (description
26886 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26887Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26888 (license license:expat)))
26889
26890(define-public python-setuptools-gettext
26891 (package
26892 (name "python-setuptools-gettext")
26893 (version "0.1.14")
26894 (source
26895 (origin
26896 (method git-fetch)
26897 (uri (git-reference
26898 (url "https://github.com/breezy-team/setuptools-gettext")
26899 (commit (string-append "v" version))))
26900 (file-name (git-file-name name version))
26901 (sha256
26902 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26903 (build-system pyproject-build-system)
26904 (native-inputs (list python-pytest python-tomli python-setuptools))
26905 (home-page "https://github.com/breezy-team/setuptools-gettext")
26906 (synopsis "Setuptools plugin for gettext")
26907 (description "This package provides a plugin for Setuptools for gettext.")
26908 (license license:gpl2+)))
26909
26910(define-public python-pyclibrary
26911 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26912 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26913 (revision "0"))
26914 (package
26915 (name "python-pyclibrary")
26916 (version (git-version "0.2.2" revision commit))
26917 (source
26918 (origin
26919 (method git-fetch)
26920 (uri (git-reference
26921 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26922 (commit commit)))
26923 (file-name (git-file-name name version))
26924 (sha256
26925 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26926 (build-system pyproject-build-system)
26927 (native-inputs
26928 (list python-pytest
26929 python-setuptools
26930 python-setuptools-scm))
26931 (propagated-inputs
26932 (list python-pyparsing))
26933 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26934 (synopsis "Wrap dynamic libraries in Python")
26935 (description
26936 "This package helps wrapping dynamic libraries in Python. It includes
26937a pure-Python C parser and an automation library that uses C header file
26938definitions to simplify the use of C bindings.")
26939 (license license:expat))))
26940
26941(define-public python-pyclipper
26942 (package
26943 (name "python-pyclipper")
26944 (version "1.3.0.post6")
26945 (source
26946 (origin
26947 (method git-fetch)
26948 (uri (git-reference
26949 (url "https://github.com/greginvm/pyclipper")
26950 (commit version)))
26951 (file-name (git-file-name name version))
26952 (sha256
26953 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26954 (build-system pyproject-build-system)
26955 (arguments
26956 (list
26957 #:phases
26958 #~(modify-phases %standard-phases
26959 (add-before 'build 'cythonize-sources
26960 (lambda _
26961 (with-directory-excursion "src/pyclipper"
26962 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26963 (native-inputs
26964 (list python-cython
26965 python-pytest
26966 python-setuptools
26967 python-setuptools-scm))
26968 (home-page "https://github.com/greginvm/pyclipper")
26969 (synopsis "Wrapper for Angus Johnson's Clipper library")
26970 (description
26971 "Pyclipper is a Cython wrapper for the C++ translation of the
26972Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26973 (license license:expat)))
26974
26975(define-public python-semver
26976 (package
26977 (name "python-semver")
26978 (version "3.0.4")
26979 (source
26980 (origin
26981 (method url-fetch)
26982 (uri (pypi-uri "semver" version))
26983 (sha256
26984 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26985 (build-system pyproject-build-system)
26986 (native-inputs (list python-pytest python-setuptools))
26987 (home-page "https://github.com/k-bx/python-semver")
26988 (synopsis "Python helper for Semantic Versioning")
26989 (description
26990 "This package provides a Python library for @url{Semantic Versioning,
26991http://semver.org/}.")
26992 (license license:bsd-3)))
26993
26994(define-public python-phonenumbers
26995 (package
26996 (name "python-phonenumbers")
26997 (version "8.13.37")
26998 (source
26999 (origin
27000 (method git-fetch)
27001 (uri (git-reference
27002 (url "https://github.com/daviddrysdale/python-phonenumbers")
27003 (commit (string-append "v" version))))
27004 (file-name (git-file-name name version))
27005 (sha256
27006 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
27007 (build-system pyproject-build-system)
27008 (arguments
27009 (list
27010 #:test-backend #~'custom
27011 #:test-flags #~(list "-m" "testwrapper")
27012 #:phases
27013 #~(modify-phases %standard-phases
27014 (add-after 'unpack 'chdir
27015 (lambda _
27016 (chdir "python"))))))
27017 (propagated-inputs (list python-protobuf))
27018 (native-inputs (list python-setuptools))
27019 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
27020 (synopsis "Python library for dealing with international phone numbers")
27021 (description
27022 "This package provides a Python port of Google's libphonenumber library.")
27023 (license license:asl2.0)))
27024
27025(define-public python-heapdict
27026 (package
27027 (name "python-heapdict")
27028 (version "1.0.1")
27029 (source
27030 (origin
27031 (method url-fetch)
27032 (uri (pypi-uri "HeapDict" version))
27033 (sha256
27034 (base32
27035 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
27036 (build-system pyproject-build-system)
27037 (arguments (list #:test-backend #~'unittest))
27038 (native-inputs (list python-setuptools))
27039 (home-page "http://stutzbachenterprises.com/")
27040 (synopsis "Heap with decrease-key and increase-key operations")
27041 (description
27042 "heapdict implements the MutableMapping ABC, meaning it works pretty much
27043like a regular Python @code{dict}. It’s designed to be used as a priority
27044queue.")
27045 (license license:bsd-3)))
27046
27047(define-public python-send2trash
27048 (package
27049 (name "python-send2trash")
27050 (version "1.8.2")
27051 (source
27052 (origin (method git-fetch)
27053 ;; Source tarball on PyPI doesn't include tests.
27054 (uri (git-reference
27055 (url "https://github.com/arsenetar/send2trash")
27056 (commit version)))
27057 (file-name (git-file-name name version))
27058 (sha256
27059 (base32
27060 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
27061 (build-system pyproject-build-system)
27062 (arguments
27063 (list
27064 #:phases
27065 '(modify-phases %standard-phases
27066 (add-before 'check 'pre-check
27067 (lambda _ (setenv "HOME" "/tmp"))))))
27068 (native-inputs (list python-pytest python-setuptools python-wheel))
27069 (home-page "https://github.com/arsenetar/send2trash")
27070 (synopsis "Send files to the user's @file{~/Trash} directory")
27071 (description "This package provides a Python library to send files to the
27072user's @file{~/Trash} directory.")
27073 (license license:bsd-3)))
27074
27075(define-public python-pyfavicon
27076 (package
27077 (name "python-pyfavicon")
27078 (version "0.1.1")
27079 (source
27080 (origin
27081 (method git-fetch)
27082 (uri (git-reference
27083 (url "https://github.com/bilelmoussaoui/pyfavicon")
27084 (commit version)))
27085 (file-name (git-file-name name version))
27086 (sha256
27087 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
27088 (build-system pyproject-build-system)
27089 (arguments
27090 (list
27091 #:test-flags
27092 #~(list "-k" (string-join (list
27093 ;; Socket name resolution fails.
27094 "not test_url_icon_link_type"
27095 "test_icon_sizes"
27096 ;; Tuples differ.
27097 "test_largest_icon")
27098 " and not "))))
27099 (native-inputs (list python-pytest python-setuptools))
27100 (propagated-inputs
27101 (list python-aiohttp python-beautifulsoup4 python-pillow))
27102 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
27103 (synopsis "Async favicon fetcher")
27104 (description
27105 "@code{pyfavicon} is an async favicon fetcher.")
27106 (license license:expat)))
27107
27108(define-public python-funcy
27109 (package
27110 (name "python-funcy")
27111 (version "1.11")
27112 (source
27113 (origin
27114 (method git-fetch)
27115 (uri (git-reference
27116 (url "https://github.com/Suor/funcy")
27117 (commit version)))
27118 (sha256
27119 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
27120 (file-name (git-file-name name version))))
27121 (build-system pyproject-build-system)
27122 (native-inputs
27123 (list python-pytest python-whatever python-setuptools python-wheel))
27124 (home-page "https://github.com/Suor/funcy")
27125 (synopsis "Functional tools")
27126 (description "@code{funcy} is a library that provides functional tools.
27127Examples are:
27128@enumerate
27129@item merge - Merges collections of the same type
27130@item walk - Type-preserving map
27131@item select - Selects a part of a collection
27132@item take - Takes the first n items of a collection
27133@item first - Takes the first item of a collection
27134@item remove - Predicated-removes items of a collection
27135@item concat - Concatenates two collections
27136@item flatten - Flattens a collection with subcollections
27137@item distinct - Returns only distinct items
27138@item split - Predicated-splits a collection
27139@item split_at - Splits a collection at a given item
27140@item group_by - Groups items by group
27141@item pairwise - Pairs off adjacent items
27142@item partial - Partially-applies a function
27143@item curry - Curries a function
27144@item compose - Composes functions
27145@item complement - Complements a predicate
27146@item all_fn - \"all\" with predicate
27147@end enumerate")
27148 (license license:bsd-3)))
27149
27150(define-public python-funcy-1.14
27151 (package/inherit python-funcy
27152 (name "python-funcy")
27153 (version "1.14")
27154 (source
27155 (origin
27156 (method git-fetch)
27157 (uri (git-reference
27158 (url "https://github.com/Suor/funcy")
27159 (commit version)))
27160 (sha256
27161 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
27162 (file-name (git-file-name name version))))))
27163
27164(define-public python-isoweek
27165 (package
27166 (name "python-isoweek")
27167 (version "1.3.3")
27168 (source
27169 (origin
27170 (method url-fetch)
27171 (uri (pypi-uri "isoweek" version))
27172 (sha256
27173 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
27174 (build-system pyproject-build-system)
27175 (arguments (list #:test-backend #~'unittest))
27176 (native-inputs (list python-setuptools))
27177 (home-page "https://github.com/gisle/isoweek")
27178 (synopsis "Objects representing a week")
27179 (description "The @code{isoweek} module provide the class Week that
27180implements the week definition of ISO 8601. This standard also defines
27181a notation for identifying weeks; yyyyWww (where the W is a literal).
27182Week instances stringify to this form.")
27183 (license license:bsd-3)))
27184
27185(define-public bpython
27186 (package
27187 (name "bpython")
27188 (version "0.25")
27189 (source
27190 (origin
27191 (method url-fetch)
27192 (uri (pypi-uri "bpython" version))
27193 (sha256
27194 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
27195 (build-system pyproject-build-system)
27196 (arguments
27197 (list
27198 #:test-flags
27199 ;; Tests can't import curtsies, pygments and urwid.
27200 #~(list "-k" (string-join
27201 (list "not test_issue108"
27202 "test_issue133")
27203 " and not " ))
27204 #:phases
27205 #~(modify-phases %standard-phases
27206 (add-after 'wrap 'add-aliases
27207 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
27208 (lambda _
27209 (for-each
27210 (lambda (old new)
27211 (symlink old (string-append #$output "/bin/" new)))
27212 '("bpython" "bpython-urwid" "bpdb")
27213 '("bpython3" "bpython3-urwid" "bpdb3")))))))
27214 (native-inputs
27215 (list python-mock
27216 python-pytest
27217 python-setuptools))
27218 (propagated-inputs
27219 (list python-curtsies
27220 python-cwcwidth
27221 python-greenlet
27222 python-pygments
27223 python-pyxdg
27224 python-requests
27225 ;; [optional]
27226 python-pyperclip
27227 python-jedi
27228 python-urwid-2
27229 python-watchdog))
27230 (home-page "https://bpython-interpreter.org/")
27231 (synopsis "Fancy interface to the Python interpreter")
27232 (description "Bpython is a fancy interface to the Python
27233interpreter. bpython's main features are
27234
27235@enumerate
27236@item in-line syntax highlighting,
27237@item readline-like autocomplete with suggestions displayed as you type,
27238@item expected parameter list for any Python function,
27239@item \"rewind\" function to pop the last line of code from memory and
27240 re-evaluate,
27241@item send the code you've entered off to a pastebin,
27242@item save the code you've entered to a file, and
27243@item auto-indentation.
27244@end enumerate")
27245 (license license:expat)))
27246
27247(define-public python-pyinotify
27248 (package
27249 (name "python-pyinotify")
27250 (version "0.9.6")
27251 (source
27252 (origin
27253 (method git-fetch)
27254 (uri (git-reference
27255 (url "https://github.com/seb-m/pyinotify")
27256 (commit version)))
27257 (file-name (git-file-name name version))
27258 (sha256
27259 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
27260 (build-system pyproject-build-system)
27261 (arguments
27262 (list
27263 #:tests? #f ;no tests
27264 #:phases
27265 #~(modify-phases %standard-phases
27266 (add-after 'unpack 'drop-shebang
27267 (lambda _
27268 ;; Dropping this shebang prevents the build system from adding
27269 ;; python-wrapper as an input, reducing package closure size from
27270 ;; ~200 MiB to ~0.2 MiB.
27271 (substitute* "python3/pyinotify.py"
27272 (("#!/usr/bin/env python") "")))))))
27273 (native-inputs
27274 (list python-setuptools))
27275 (propagated-inputs
27276 (list python-pyasyncore))
27277 (home-page "https://github.com/seb-m/pyinotify")
27278 (synopsis "Python library for monitoring inotify events")
27279 (description
27280 "@code{pyinotify} provides a Python interface for monitoring file system
27281events on Linux.")
27282 (license license:expat)))
27283
27284(define-public python-pyinotify-cli
27285 (package
27286 (inherit python-pyinotify)
27287 (name "python-pyinotify-cli")
27288 (arguments
27289 (substitute-keyword-arguments arguments
27290 ((#:phases phases #~%standard-phases)
27291 #~(modify-phases #$phases
27292 (delete 'drop-shebang)
27293 (add-after 'install 'install-entrypoint
27294 (lambda _
27295 (let ((entrypoint
27296 (string-append #$output "/lib/python"
27297 (python-version (which "python"))
27298 "/site-packages/pyinotify.py"))
27299 (bin (string-append #$output "/bin")))
27300 (mkdir-p bin)
27301 (invoke "chmod" "+x" entrypoint)
27302 (symlink
27303 entrypoint (string-append #$output "/bin/pyinotify")))))))))
27304 (description
27305 "This package provides, in addition to the @code{pyinotify} Python library,
27306a command line application exposing the same functionality.")))
27307
27308(define-public python-latex2pydata
27309 (package
27310 (name "python-latex2pydata")
27311 (version "0.5.0")
27312 (source
27313 (origin
27314 (method url-fetch)
27315 (uri (pypi-uri "latex2pydata" version))
27316 (sha256
27317 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
27318 (build-system pyproject-build-system)
27319 (native-inputs (list python-setuptools python-wheel python-pytest))
27320 (home-page "https://github.com/gpoore/latex2pydata")
27321 (synopsis "Load data from LaTeX in Python literal format")
27322 (description
27323 "This package is designed to load data in Python literal format that was
27324saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
27325passed from LaTeX to Python.")
27326 (license license:bsd-3)))
27327
27328(define-public python-latexcodec
27329 (package
27330 (name "python-latexcodec")
27331 (version "3.0.1")
27332 (source
27333 (origin
27334 (method git-fetch)
27335 (uri (git-reference
27336 (url "https://github.com/mcmtroffaes/latexcodec/")
27337 (commit version)))
27338 (file-name (git-file-name name version))
27339 (sha256
27340 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
27341 (build-system pyproject-build-system)
27342 (native-inputs (list python-pytest python-setuptools))
27343 (home-page "https://readthedocs.org/projects/latexcodec/")
27344 (synopsis "Work with LaTeX code in Python")
27345 (description "Lexer and codec to work with LaTeX code in Python.")
27346 (license license:expat)))
27347
27348(define-public python-latexminted
27349 (package
27350 (name "python-latexminted")
27351 (version "0.7.1")
27352 (source
27353 (origin
27354 (method url-fetch)
27355 (uri (pypi-uri "latexminted" version))
27356 (sha256
27357 (base32 "1yj08q1bpy0lk3gk6zs9b7ik83mwn9d7s85fpvyj1wk06iphj96p"))))
27358 (build-system pyproject-build-system)
27359 (arguments (list #:tests? #f)) ; No tests upstream.
27360 (propagated-inputs (list python-latex2pydata
27361 python-latexrestricted
27362 python-pygments))
27363 (native-inputs (list texlive-kpathsea python-setuptools))
27364 (home-page "https://github.com/gpoore/minted")
27365 (synopsis "Python library for the LaTeX minted package")
27366 (description "This Python package provides the Python side of the
27367@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
27368@code{python-pygments} library. It also provides several code formatting and
27369manipulation features implemented in Python that would be difficult to perform
27370in LaTeX, such as dedenting code and extracting code snippets from source files
27371using regular expressions.")
27372 (license license:lppl1.3c+)))
27373
27374(define-public python-latexrestricted
27375 (package
27376 (name "python-latexrestricted")
27377 (version "0.6.2")
27378 (source
27379 (origin
27380 (method url-fetch)
27381 (uri (pypi-uri "latexrestricted" version))
27382 (sha256
27383 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
27384 (build-system pyproject-build-system)
27385 (arguments
27386 (list
27387 #:tests? #f ;no test
27388 #:phases
27389 #~(modify-phases %standard-phases
27390 (add-after 'unpack 'fix-paths
27391 (lambda* (#:key inputs #:allow-other-keys)
27392 (let ((pystr (lambda (s) (string-append "'" s "'")))
27393 (kpse (search-input-file inputs "/bin/kpsewhich")))
27394 (substitute* "latexrestricted/_latex_config.py"
27395 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
27396 ;; this variable is bogus in Guix because binaries are scattered
27397 ;; across multiple directories. This phase sets SELFAUTOLOC to
27398 ;; the specific directory containing `kpsewhich'.
27399 (("os\\.getenv\\('SELFAUTOLOC'\\)")
27400 (pystr (dirname kpse)))
27401 ;; Refer to kpse by store path instead of looking it upein $PATH.
27402 (("shutil.which\\('kpse'.*$")
27403 (string-append (pystr kpse) "\n")))))))))
27404 (native-inputs (list python-setuptools python-wheel))
27405 (inputs (list texlive-kpathsea))
27406 (home-page "https://github.com/gpoore/latexrestricted")
27407 (synopsis
27408 "Library for creating executables compatible with LaTeX's shell escape")
27409 (description
27410 "This Python package is designed to simplify the process of creating Python
27411executables compatible with LaTeX restricted shell escape. Restricted shell
27412escape allows LaTeX to run trusted executables as part of compiling documents.
27413These executables have restricted access to the file system and restricted
27414ability to launch subprocesses.")
27415 (license license:lppl1.3+)))
27416
27417(define-public python-pybloom-live
27418 (package
27419 (name "python-pybloom-live")
27420 (version "4.0.0")
27421 (source (origin
27422 (method url-fetch)
27423 (uri (pypi-uri "pybloom_live" version))
27424 (sha256
27425 (base32
27426 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
27427 (build-system pyproject-build-system)
27428 (propagated-inputs (list python-bitarray python-xxhash))
27429 (native-inputs (list python-pytest python-setuptools python-wheel))
27430 (home-page "https://github.com/joseph-fox/python-bloomfilter")
27431 (synopsis "Bloom filter")
27432 (description "This package provides a scalable Bloom filter implemented in
27433Python.")
27434 (license license:expat)))
27435
27436;; XXX: Not maintained since 2020.
27437(define-public python-pybktree
27438 (package
27439 (name "python-pybktree")
27440 (version "1.1")
27441 (source
27442 (origin
27443 (method url-fetch)
27444 (uri (pypi-uri "pybktree" version))
27445 (sha256
27446 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
27447 (build-system pyproject-build-system)
27448 (arguments
27449 (list #:tests? #f)) ;no tests provided
27450 (native-inputs (list python-setuptools))
27451 (home-page "https://github.com/Jetsetter/pybktree")
27452 (synopsis "Pythonic BK-tree data structure")
27453 (description
27454 "This package provides a BK-tree data structure to allow fast querying of
27455close matches in Python.")
27456 (license license:expat)))
27457
27458(define-public python-pybtex
27459 (package
27460 (name "python-pybtex")
27461 (version "0.25.0")
27462 (source
27463 (origin
27464 (method git-fetch)
27465 (uri (git-reference
27466 (url "https://codeberg.org/pybtex/pybtex")
27467 (commit version)))
27468 (file-name (git-file-name name version))
27469 (sha256
27470 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
27471 (build-system pyproject-build-system)
27472 (native-inputs (list python-pytest python-setuptools))
27473 (propagated-inputs (list python-latexcodec python-pyyaml))
27474 (home-page "https://pybtex.org/")
27475 (synopsis "BibTeX-compatible bibliography processor")
27476 (description
27477 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
27478You can simply type pybtex instead of bibtex.")
27479 (license license:expat)))
27480
27481(define-public python-pybtex-apa-style
27482 (package
27483 (name "python-pybtex-apa-style")
27484 (version "1.3")
27485 (source
27486 (origin
27487 (method url-fetch)
27488 (uri (pypi-uri "pybtex-apa-style" version))
27489 (sha256
27490 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
27491 (build-system pyproject-build-system)
27492 (arguments
27493 (list
27494 #:test-backend #~'custom
27495 #:test-flags
27496 #~(list "-c" (string-append "import sys, pybtex.plugin;"
27497 " sys.exit('apa' not"
27498 " in pybtex.plugin.enumerate_plugin_names"
27499 "('pybtex.style.labels'))"))))
27500 (native-inputs (list python-pybtex python-setuptools))
27501 (home-page "https://github.com/naeka/pybtex-apa-style")
27502 (synopsis "APA style for pybtex")
27503 (description
27504 "This package provides support for the APA style within pybtex.")
27505 (license license:expat)))
27506
27507(define-public python-pybtex-docutils
27508 (package
27509 (name "python-pybtex-docutils")
27510 (version "1.0.3")
27511 (source
27512 (origin
27513 (method git-fetch)
27514 (uri (git-reference
27515 (url "https://github.com/mcmtroffaes/pybtex-docutils")
27516 (commit version)))
27517 (file-name (git-file-name name version))
27518 (sha256
27519 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
27520 (build-system pyproject-build-system)
27521 (propagated-inputs (list python-docutils python-pybtex))
27522 (native-inputs (list python-setuptools python-pytest))
27523 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
27524 (synopsis "Docutils backend for pybtex")
27525 (description "The pybtex docutils backend allows bibtex citations to be
27526inserted into documentation generated by docutils.")
27527 (license license:expat)))
27528
27529(define-public python-onetimepass
27530 (package
27531 (name "python-onetimepass")
27532 (version "1.0.1")
27533 (source
27534 (origin
27535 (method git-fetch)
27536 (uri (git-reference
27537 (url "https://github.com/tadeck/onetimepass/")
27538 (commit (string-append "v" version))))
27539 (file-name (git-file-name name version))
27540 (sha256
27541 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27542 (build-system pyproject-build-system)
27543 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27544 (native-inputs (list python-setuptools))
27545 (propagated-inputs (list python-six))
27546 (home-page "https://github.com/tadeck/onetimepass/")
27547 (synopsis "One-time password library")
27548 (description
27549 "Python one-time password library for HMAC-based (HOTP) and time-based
27550(TOTP) passwords.")
27551 (license license:expat)))
27552
27553(define-public python-online-judge-api-client
27554 (package
27555 (name "python-online-judge-api-client")
27556 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27557 (revision . "0")))
27558 (version (git-version "10.10.1"
27559 (assoc-ref properties 'revision)
27560 (assoc-ref properties 'commit)))
27561 (source
27562 (origin
27563 (method git-fetch)
27564 (uri (git-reference
27565 (url "https://github.com/online-judge-tools/api-client")
27566 (commit (assoc-ref properties 'commit))))
27567 (file-name (git-file-name name version))
27568 (sha256
27569 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27570 (patches
27571 (search-patches "python-online-judge-api-client-tests.patch"))
27572 ))
27573 (build-system pyproject-build-system)
27574 (arguments
27575 (list
27576 #:test-flags
27577 #~(list "--ignore-glob=tests/get_contest_*.py"
27578 "--ignore-glob=tests/get_problem_*.py")
27579 #:phases
27580 #~(modify-phases %standard-phases
27581 (add-before 'check 'configure-tests
27582 (lambda* (#:key inputs outputs #:allow-other-keys)
27583 (delete-file-recursively
27584 (string-append (site-packages inputs outputs)
27585 "/tests"))
27586 (call-with-output-file "pytest.ini"
27587 (lambda (port)
27588 (format port "\
27589[pytest]
27590python_files = tests/*.py"))))))))
27591 (native-inputs (list python-pytest python-setuptools))
27592 (propagated-inputs
27593 (list python-appdirs
27594 python-beautifulsoup4
27595 python-colorlog
27596 python-lxml
27597 python-requests
27598 python-toml
27599 python-jsonschema))
27600 (home-page "https://github.com/online-judge-tools/api-client")
27601 (synopsis "API client for various online judges")
27602 (description
27603 "This is an API client for various online judges, used as the backend
27604library of @code{oj} command. You can use the Python library
27605(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27606command) which talks JSON compatible with jmerle/competitive-companion.")
27607 (license license:expat)))
27608
27609(define-public online-judge-tools
27610 (package
27611 (name "online-judge-tools")
27612 (version "11.5.1")
27613 ;; Source distributions are not uploaded to PyPI.
27614 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27615 (source
27616 (origin
27617 (method git-fetch)
27618 (uri (git-reference
27619 (url "https://github.com/online-judge-tools/oj")
27620 (commit (string-append "v" version))))
27621 (file-name (git-file-name name version))
27622 (sha256
27623 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27624 (patches (search-patches "online-judge-tools.patch"))))
27625 (build-system pyproject-build-system)
27626 (arguments
27627 (list
27628 #:test-flags
27629 ;; These tests require network connections
27630 #~(list "--ignore=tests/command_version.py")))
27631 (native-inputs (list python-pytest python-setuptools))
27632 (inputs (list time))
27633 (propagated-inputs (list python-online-judge-api-client python-colorama
27634 python-requests))
27635 (home-page "https://github.com/online-judge-tools/oj")
27636 (synopsis "Command to help solving problems on various online judges")
27637 (description
27638 "@command{oj} is a command line tool to help solving problems on
27639various online judges. This command automates downloading sample
27640cases, generating additional test cases, testing for your code, and
27641submitting it.")
27642 (license license:expat)))
27643
27644(define-public python-mpv-jsonipc
27645 (package
27646 (name "python-mpv-jsonipc")
27647 (version "1.2.0")
27648 (source
27649 (origin
27650 (method url-fetch)
27651 (uri (pypi-uri "python-mpv-jsonipc" version))
27652 (sha256
27653 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27654 (build-system pyproject-build-system)
27655 (arguments (list #:tests? #f)) ;No test suite.
27656 (native-inputs (list python-setuptools python-wheel))
27657 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27658 (synopsis "Python API to control MPV using JSON IPC")
27659 (description "Python MPV JSONIPC implements an interface similar to
27660python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27661 (license license:asl2.0)))
27662
27663(define-public python-jellyfin-apiclient
27664 (package
27665 (name "python-jellyfin-apiclient")
27666 (version "1.11.0")
27667 (source
27668 (origin
27669 (method git-fetch)
27670 (uri
27671 (git-reference
27672 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27673 (commit (string-append "v" version))))
27674 (sha256
27675 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27676 (build-system pyproject-build-system)
27677 (native-inputs (list python-setuptools python-pytest python-wheel))
27678 (propagated-inputs (list python-certifi python-requests python-urllib3
27679 python-websocket-client))
27680 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27681 (synopsis "Python API client for Jellyfin")
27682 (description "The Jellyfin ApiClient Python package makes it possible
27683to use the Jellyfin API from Python. It was extracted from the Jellyfin
27684Kodi plugin.")
27685 (license license:gpl3+)))
27686
27687(define-public python-parso
27688 (package
27689 (name "python-parso")
27690 (version "0.8.5")
27691 (source
27692 (origin
27693 (method url-fetch)
27694 (uri (pypi-uri "parso" version))
27695 (sha256
27696 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27697 (build-system pyproject-build-system)
27698 (native-inputs
27699 (list python-pytest
27700 python-setuptools))
27701 (home-page "https://github.com/davidhalter/parso")
27702 (synopsis "Python Parser")
27703 (description "Parso is a Python parser that supports error recovery and
27704round-trip parsing for different Python versions (in multiple Python versions).
27705Parso is also able to list multiple syntax errors in your Python file.")
27706 (license license:expat)))
27707
27708(define-public python-async-generator
27709 (package
27710 (name "python-async-generator")
27711 (version "1.10")
27712 (source
27713 (origin
27714 (method url-fetch)
27715 (uri (pypi-uri "async_generator" version))
27716 (sha256
27717 (base32
27718 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27719 (build-system pyproject-build-system)
27720 (native-inputs
27721 (list python-pytest python-setuptools))
27722 (home-page "https://github.com/python-trio/async_generator")
27723 (synopsis "Async generators and context managers for Python 3.5+")
27724 (description "@code{async_generator} back-ports Python 3.6's native async
27725generators and Python 3.7's context managers into Python 3.5.")
27726 ;; Dual licensed.
27727 (license (list license:expat license:asl2.0))))
27728
27729(define-public python-async-timeout
27730 (package
27731 (name "python-async-timeout")
27732 (version "5.0.1")
27733 (source
27734 (origin
27735 (method url-fetch)
27736 (uri (pypi-uri "async_timeout" version))
27737 (sha256
27738 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27739 (build-system pyproject-build-system)
27740 (native-inputs
27741 (list python-pytest
27742 python-pytest-asyncio
27743 python-setuptools
27744 python-wheel))
27745 (home-page "https://github.com/aio-libs/async-timeout")
27746 (synopsis "Timeout context manager for asyncio programs")
27747 (description
27748 "@code{async-timeout} provides a timeout timeout context manager
27749compatible with @code{asyncio}.")
27750 (license license:asl2.0)))
27751
27752(define-public python-async-timeout-4
27753 (package
27754 (inherit python-async-timeout)
27755 (name "python-async-timeout")
27756 (version "4.0.3")
27757 (source
27758 (origin
27759 (method url-fetch)
27760 (uri (pypi-uri "async-timeout" version))
27761 (sha256
27762 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27763
27764(define-public python-glob2
27765 (package
27766 (name "python-glob2")
27767 (version "0.7")
27768 (source
27769 (origin
27770 (method git-fetch)
27771 (uri (git-reference
27772 (url "https://github.com/miracle2k/python-glob2")
27773 (commit (string-append "v" version))))
27774 (file-name (git-file-name name version))
27775 (sha256
27776 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27777 (build-system pyproject-build-system)
27778 (arguments
27779 (list
27780 #:phases
27781 #~(modify-phases %standard-phases
27782 (add-after 'unpack 'patch-tests-for-pytest8
27783 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27784 (lambda _
27785 (substitute* "test.py"
27786 (("setup\\(") "setup_method(")
27787 (("teardown\\(") "teardown_method("))
27788 (rename-file "test.py" "glob2_test.py"))))))
27789 (native-inputs (list python-pytest python-setuptools))
27790 (home-page "https://github.com/miracle2k/python-glob2/")
27791 (synopsis "Extended Version of the python buildin glob module")
27792 (description "This is an extended version of the Python
27793@url{http://docs.python.org/library/glob.html, built-in glob module} which
27794adds:
27795
27796@itemize
27797@item The ability to capture the text matched by glob patterns, and return
27798those matches alongside the file names.
27799@item A recursive @code{**} globbing syntax, akin for example to the
27800@code{globstar} option of Bash.
27801@item The ability to replace the file system functions used, in order to glob
27802on virtual file systems.
27803@item Compatible with Python 2 and Python 3 (tested with 3.3).
27804@end itemize
27805
27806Glob2 currently based on the glob code from Python 3.3.1.")
27807 (license license:bsd-2)))
27808
27809(define-public python-gipc
27810 (package
27811 (name "python-gipc")
27812 (version "1.8.0")
27813 (source
27814 (origin
27815 (method git-fetch)
27816 (uri (git-reference
27817 (url "https://github.com/jgehrcke/gipc")
27818 (commit version)))
27819 (file-name (git-file-name name version))
27820 (sha256
27821 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27822 (build-system pyproject-build-system)
27823 (arguments
27824 (list
27825 #:phases
27826 #~(modify-phases %standard-phases
27827 (add-after 'unpack 'adjust-for-pytest-8
27828 (lambda _
27829 (substitute* "test/test_gipc.py"
27830 (("def setup") "def setup_method")
27831 (("def teardown") "def teardown_method")))))))
27832 (native-inputs
27833 (list python-pytest
27834 python-setuptools))
27835 (propagated-inputs
27836 (list python-gevent))
27837 (home-page "https://gehrcke.de/gipc/")
27838 (synopsis "Child process management in the context of gevent")
27839 (description
27840 "Usage of Python's multiprocessing package in a gevent-powered
27841application may raise problems. With @code{gipc}, process-based child
27842processes can safely be created anywhere within a gevent-powered
27843application.")
27844 (license license:expat)))
27845
27846(define-public python-beautifultable
27847 (package
27848 (name "python-beautifultable")
27849 (version "1.1.0")
27850 (source
27851 (origin
27852 (method git-fetch)
27853 (uri (git-reference
27854 (url "https://github.com/pri22296/beautifultable")
27855 (commit (string-append "v" version))))
27856 (file-name (git-file-name name version))
27857 (sha256
27858 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27859 (build-system pyproject-build-system)
27860 (arguments (list #:test-backend #~'unittest))
27861 (native-inputs (list python-pandas python-setuptools))
27862 (propagated-inputs (list python-wcwidth))
27863 (home-page "https://github.com/pri22296/beautifultable")
27864 (synopsis "Print ASCII tables for terminals")
27865 (description
27866 "@code{python-beautifultable} provides a class for easily printing
27867tabular data in a visually appealing ASCII format to a terminal.
27868
27869Features include, but are not limited to:
27870@itemize
27871@item Full customization of the look and feel of the table
27872@item Row and column accessors.
27873@item Full support for colors using ANSI sequences or any library.
27874@item Plenty of predefined styles and option to create custom ones.
27875@item Support for Unicode characters.
27876@item Supports streaming table when data is slow to retrieve.
27877@end itemize")
27878 (license license:expat)))
27879
27880(define-public python-globber
27881 (package
27882 (name "python-globber")
27883 (version "0.2.1")
27884 (source
27885 (origin
27886 (method git-fetch)
27887 (uri (git-reference
27888 (url "https://github.com/asharov/globber")
27889 (commit version)))
27890 (file-name (git-file-name name version))
27891 (sha256
27892 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27893 (build-system pyproject-build-system)
27894 (native-inputs (list python-pytest python-setuptools))
27895 (home-page "https://github.com/asharov/globber")
27896 (synopsis "Library for string matching with glob patterns")
27897 (description
27898 "Globber is a Python library for matching file names against glob patterns.
27899In contrast to other glob-matching libraries, it matches arbitrary strings and
27900doesn't require the matched names to be existing files. In addition, it
27901supports the globstar @code{**} operator to match an arbitrary number of
27902path components.")
27903 (license license:asl2.0)))
27904
27905;; XXX: Not maintained since 2021.
27906(define-public python-git-hammer
27907 (package
27908 (name "python-git-hammer")
27909 (version "0.3.2")
27910 (source
27911 (origin
27912 (method git-fetch)
27913 (uri (git-reference
27914 (url "https://github.com/asharov/git-hammer")
27915 (commit version)))
27916 (file-name (git-file-name name version))
27917 (sha256
27918 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27919 (build-system pyproject-build-system)
27920 (arguments
27921 (list
27922 #:phases
27923 #~(modify-phases %standard-phases
27924 (add-after 'unpack 'relax-requirements
27925 (lambda _
27926 (substitute* "setup.py"
27927 (("matplotlib <3.1") "matplotlib")))))))
27928 (native-inputs
27929 (list python-pytest
27930 python-setuptools))
27931 (propagated-inputs
27932 (list python-beautifultable
27933 python-dateutil
27934 python-gitpython
27935 python-globber
27936 python-matplotlib
27937 python-sqlalchemy
27938 python-sqlalchemy-utils))
27939 (home-page "https://github.com/asharov/git-hammer")
27940 (synopsis "Provide statistics for git repositories")
27941 (description
27942 "Git Hammer is a statistics tool for projects in git repositories. Its major
27943feature is tracking the number of lines authored by each person for every
27944commit, but it also includes some other useful statistics.")
27945 (license license:asl2.0)))
27946
27947(define-public python-gitignore-parser
27948 (package
27949 (name "python-gitignore-parser")
27950 (version "0.1.13")
27951 (source
27952 (origin
27953 (method git-fetch)
27954 (uri (git-reference
27955 (url "https://github.com/mherrmann/gitignore_parser")
27956 (commit (string-append "v" version))))
27957 (file-name (git-file-name name version))
27958 (sha256
27959 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27960 (build-system pyproject-build-system)
27961 (arguments (list #:test-backend #~'unittest))
27962 (native-inputs (list python-setuptools))
27963 (home-page "https://github.com/mherrmann/gitignore_parser")
27964 (synopsis "Spec-compliant gitignore parser for Python")
27965 (description
27966 "This package provides a spec-compliant gitignore parser for Python.")
27967 (license license:expat)))
27968
27969(define-public python-fusepy
27970 (package
27971 (name "python-fusepy")
27972 (version "2.0.4")
27973 (source
27974 (origin
27975 (method git-fetch)
27976 (uri (git-reference
27977 (url "https://github.com/fusepy/fusepy")
27978 (commit (string-append "v" version))))
27979 (file-name (git-file-name name version))
27980 (sha256
27981 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27982 (build-system pyproject-build-system)
27983 (arguments
27984 (list
27985 #:tests? #f ; No formalized tests.
27986 #:phases
27987 #~(modify-phases %standard-phases
27988 (add-before 'build 'set-library-file-name
27989 (lambda* (#:key inputs #:allow-other-keys)
27990 (substitute* "fuse.py"
27991 (("find_library\\('fuse'\\)")
27992 (format #f "~s"
27993 (search-input-file inputs "lib/libfuse.so")))))))))
27994 (native-inputs (list python-setuptools))
27995 (propagated-inputs (list fuse-2))
27996 (home-page "https://github.com/fusepy/fusepy")
27997 (synopsis "Simple ctypes bindings for FUSE")
27998 (description
27999 "Python module that provides a simple interface to FUSE and MacFUSE. The
28000binding is created using the standard @code{ctypes} library.")
28001 (license license:isc)))
28002
28003(define-public pybind11-2
28004 (package
28005 (name "pybind11")
28006 (version "2.13.6")
28007 (source (origin
28008 (method git-fetch)
28009 (uri (git-reference
28010 (url "https://github.com/pybind/pybind11")
28011 (commit (string-append "v" version))))
28012 (sha256
28013 (base32
28014 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
28015 (file-name (git-file-name name version))))
28016 (build-system cmake-build-system)
28017 (arguments
28018 (list
28019 #:configure-flags
28020 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28021 (assoc-ref %build-inputs "catch2")
28022 "/include/catch"))
28023 #:modules '((guix build cmake-build-system)
28024 ((guix build gnu-build-system) #:prefix gnu:)
28025 (guix build utils))
28026 #:phases
28027 #~(modify-phases %standard-phases
28028 (replace 'check
28029 (lambda args
28030 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28031 (add-after 'install 'install-python
28032 (lambda _
28033 (with-directory-excursion "../source"
28034 (setenv "PYBIND11_USE_CMAKE" "yes")
28035 (invoke "python" "setup.py" "install"
28036 "--single-version-externally-managed"
28037 "--root=/"
28038 (string-append "--prefix=" #$output))))))))
28039 (native-inputs
28040 (list catch2-1
28041 eigen
28042 python-pytest
28043 python-setuptools
28044 python-wrapper))
28045 (home-page "https://github.com/pybind/pybind11/")
28046 (synopsis "Seamless operability between C++11 and Python")
28047 (description
28048 "@code{pybind11} is a lightweight header-only library that exposes C++
28049types in Python and vice versa, mainly to create Python bindings of existing
28050C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28051library: to minimize boilerplate code in traditional extension modules by
28052inferring type information using compile-time introspection.")
28053 (license license:bsd-3)))
28054
28055(define-public pybind11
28056 (package
28057 (name "pybind11")
28058 (version "3.0.2")
28059 (source (origin
28060 (method git-fetch)
28061 (uri (git-reference
28062 (url "https://github.com/pybind/pybind11")
28063 (commit (string-append "v" version))))
28064 (sha256
28065 (base32
28066 "1ad4fnn4p2m3sradxxd9wfnll3pa44aw081b6ssh3pq95xqpwksg"))
28067 (file-name (git-file-name name version))))
28068 (build-system cmake-build-system)
28069 (arguments
28070 (list
28071 #:configure-flags
28072 #~(list (string-append "-DCATCH_INCLUDE_DIR="
28073 (assoc-ref %build-inputs "catch2")
28074 "/include/catch"))
28075 #:modules '((guix build cmake-build-system)
28076 ((guix build gnu-build-system) #:prefix gnu:)
28077 (guix build utils))
28078 #:phases
28079 #~(modify-phases %standard-phases
28080 (replace 'check
28081 (lambda args
28082 (apply (assoc-ref gnu:%standard-phases 'check) args)))
28083 (add-after 'install 'build-python-library
28084 (lambda _
28085 (with-directory-excursion "../source"
28086 (setenv "PYBIND11_USE_CMAKE" "yes")
28087 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
28088 "--prefix" #$output ".")))))))
28089 (inputs (list boost))
28090 (native-inputs
28091 (list catch2-1
28092 eigen
28093 python-pytest
28094 python-setuptools
28095 python-wrapper
28096 python-scikit-build-core))
28097 (home-page "https://github.com/pybind/pybind11/")
28098 (synopsis "Seamless operability between C++11 and Python")
28099 (description
28100 "@code{pybind11} is a lightweight header-only library that exposes C++
28101types in Python and vice versa, mainly to create Python bindings of existing
28102C++ code. Its goals and syntax are similar to the @code{Boost.Python}
28103library: to minimize boilerplate code in traditional extension modules by
28104inferring type information using compile-time introspection.")
28105 (license license:bsd-3)))
28106
28107(define-public python-pooch
28108 (package
28109 (name "python-pooch")
28110 (version "1.8.1")
28111 (source
28112 (origin
28113 (method url-fetch)
28114 (uri (pypi-uri "pooch" version))
28115 (sha256
28116 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
28117 (build-system pyproject-build-system)
28118 (arguments
28119 (list
28120 #:test-flags
28121 '(list "-k"
28122 (string-append
28123 ;; We don't have the test archives
28124 "not test_decompress"
28125 " and not test_multiple_unpacking"
28126 " and not test_unpack_members_with_leading_dot"
28127 " and not test_unpacking"
28128 " and not test_unpacking_members_then_no_members"
28129 " and not test_unpacking_wrong_members_then_no_members"
28130 ;; These all require access to the internet
28131 " and not test_check_availability"
28132 " and not test_check_availability_invalid_downloader"
28133 " and not test_check_availability_on_ftp"
28134 " and not test_create_and_fetch"
28135 " and not test_downloader_arbitrary_progressbar"
28136 " and not test_fetch_with_downloader"
28137 " and not test_figshare_data_repository_versions"
28138 " and not test_load_registry_from_doi"
28139 " and not test_pooch_corrupted"
28140 " and not test_pooch_custom_url"
28141 " and not test_pooch_download"
28142 " and not test_pooch_download_retry"
28143 " and not test_pooch_download_retry_fails_eventually"
28144 " and not test_pooch_download_retry_off_by_default"
28145 " and not test_pooch_logging_level"
28146 " and not test_pooch_update"
28147 " and not test_retrieve"
28148 " and not test_retrieve_default_path"
28149 " and not test_retrieve_fname"
28150 " and not test_stream_download")
28151 "--ignore=pooch/tests/test_downloaders.py")))
28152 (native-inputs
28153 (list python-pytest
28154 python-setuptools-scm
28155 python-setuptools
28156 python-wheel))
28157 (propagated-inputs
28158 (list python-packaging python-platformdirs python-requests))
28159 (home-page "https://github.com/fatiando/pooch")
28160 (synopsis "Manage your Python library's sample data files")
28161 (description
28162 "Pooch manages your Python library's sample data files: it automatically
28163downloads and stores them in a local directory, with support for versioning
28164and corruption checks.")
28165 (license license:bsd-3)))
28166
28167(define-public python-fasteners
28168 (package
28169 (name "python-fasteners")
28170 (version "0.20")
28171 (source (origin
28172 ;; No tests in the pypi tarball
28173 (method git-fetch)
28174 (uri (git-reference
28175 (url "https://github.com/harlowja/fasteners")
28176 (commit version)))
28177 (file-name (git-file-name name version))
28178 (sha256
28179 (base32
28180 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
28181 (build-system pyproject-build-system)
28182 (native-inputs (list python-diskcache python-eventlet python-more-itertools
28183 python-setuptools python-pytest))
28184 (home-page "https://github.com/harlowja/fasteners")
28185 (synopsis "Python package that provides useful locks")
28186 (description
28187 "This package provides a Python program that provides following locks:
28188
28189@itemize
28190@item Locking decorator
28191@item Reader-writer locks
28192@item Inter-process locks
28193@item Generic helpers
28194@end itemize\n")
28195 (license license:asl2.0)))
28196
28197(define-public python-requests-file
28198 (package
28199 (name "python-requests-file")
28200 (version "3.0.1")
28201 (source
28202 (origin
28203 (method git-fetch)
28204 (uri (git-reference
28205 (url "https://codeberg.org/dashea/requests-file")
28206 (commit version)))
28207 (file-name (git-file-name name version))
28208 (sha256
28209 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
28210 (build-system pyproject-build-system)
28211 (native-inputs (list python-pytest python-setuptools))
28212 (propagated-inputs (list python-requests))
28213 (home-page "https://codeberg.org/dashea/requests-file")
28214 (synopsis "File transport adapter for Requests")
28215 (description
28216 "Requests-File is a transport adapter for use with the Requests Python
28217library to allow local file system access via @code{file://} URLs.")
28218 (license license:asl2.0)))
28219
28220(define-public python-identify
28221 (package
28222 (name "python-identify")
28223 (version "2.6.14")
28224 (source
28225 (origin
28226 ;; There are no tests in the PyPI tarball.
28227 (method git-fetch)
28228 (uri (git-reference
28229 (url "https://github.com/chriskuehl/identify")
28230 (commit (string-append "v" version))))
28231 (file-name (git-file-name name version))
28232 (sha256
28233 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
28234 (build-system pyproject-build-system)
28235 (native-inputs
28236 (list python-pytest
28237 python-setuptools
28238 python-ukkonen))
28239 (home-page "https://github.com/chriskuehl/identify")
28240 (synopsis "File identification library for Python")
28241 (description
28242 "@code{identify} is a file identification library for Python. Given
28243a file (or some information about a file), return a set of standardized tags
28244identifying what the file is.")
28245 (license license:expat)))
28246
28247(define-public python-nodeenv
28248 (package
28249 (name "python-nodeenv")
28250 (version "1.8.0")
28251 (source
28252 (origin
28253 ;; There's no tarball in PyPI.
28254 (method git-fetch)
28255 (uri (git-reference
28256 (url "https://github.com/ekalinin/nodeenv")
28257 (commit version)))
28258 (file-name (git-file-name name version))
28259 (sha256
28260 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
28261 (build-system pyproject-build-system)
28262 (arguments
28263 (list #:test-flags
28264 #~(list "-k" (string-append
28265 "not test_smoke"
28266 " and not test_smoke_n_system_special_chars"))))
28267 (native-inputs
28268 (list python-mock
28269 python-pytest
28270 python-setuptools
28271 python-wheel))
28272 (home-page "https://ekalinin.github.io/nodeenv/")
28273 (synopsis "Create isolated node.js environments")
28274 (description
28275 "Nodeenv (node.js virtual environment) is a tool to create isolated
28276node.js environments. It creates an environment that has its own installation
28277directories, that doesn't share libraries with other node.js virtual
28278environments.")
28279 (license license:bsd-3)))
28280
28281(define-public python-pynamecheap
28282 (package
28283 (name "python-pynamecheap")
28284 (version "0.0.3")
28285 (source
28286 (origin
28287 (method url-fetch)
28288 (uri (pypi-uri "PyNamecheap" version))
28289 (sha256
28290 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
28291 (build-system pyproject-build-system)
28292 (arguments (list #:tests? #f)) ; No tests.
28293 (native-inputs (list python-setuptools))
28294 (propagated-inputs (list python-requests))
28295 (home-page "https://github.com/Bemmu/PyNamecheap")
28296 (synopsis "Namecheap API client in Python")
28297 (description
28298 "PyNamecheap is a Namecheap API client in Python.")
28299 (license license:expat)))
28300
28301(define-public python-pynput
28302 (package
28303 (name "python-pynput")
28304 (version "1.8.1")
28305 (source
28306 (origin
28307 (method git-fetch)
28308 (uri (git-reference
28309 (url "https://github.com/moses-palmer/pynput")
28310 (commit (string-append "v" version))))
28311 (file-name (git-file-name name version))
28312 (sha256
28313 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
28314 (build-system pyproject-build-system)
28315 (arguments
28316 (list
28317 #:tests? #f ;XXX: tests can't be found with pytest or unittest
28318 #:phases
28319 #~(modify-phases %standard-phases
28320 (add-after 'unpack 'relax-requirements
28321 (lambda _
28322 (substitute* "setup.py"
28323 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
28324 "RUNTIME_PACKAGES"))))
28325 (add-before 'sanity-check 'start-xserver
28326 (lambda* (#:key inputs #:allow-other-keys)
28327 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
28328 (system (format #f "~a :1 -screen 0 640x480x24 &"
28329 Xvfb))
28330 (setenv "DISPLAY" ":1")))))))
28331 (propagated-inputs
28332 (list python-evdev python-xlib))
28333 (native-inputs
28334 (list python-setuptools xorg-server-for-tests))
28335 (home-page "https://github.com/moses-palmer/pynput")
28336 (synopsis "Send virtual input commands")
28337 (description
28338 "This package provides tools to monitor and control user input devices in
28339Python.")
28340 (license license:lgpl3)))
28341
28342(define-public python-pynixutil
28343 (package
28344 (name "python-pynixutil")
28345 (version "0.5.0")
28346 (source
28347 (origin
28348 (method git-fetch)
28349 (uri (git-reference
28350 (url "https://github.com/nix-community/pynixutil")
28351 (commit version)))
28352 (file-name (git-file-name name version))
28353 (sha256
28354 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
28355 (build-system pyproject-build-system)
28356 (arguments
28357 (list
28358 #:test-flags
28359 ;; Tests require nix in the PATH.
28360 #~(list "--ignore=tests/test_drv.py")
28361 #:phases
28362 #~(modify-phases %standard-phases
28363 (add-after 'unpack 'use-poetry-core
28364 (lambda _
28365 ;; Patch to use the core poetry API.
28366 (substitute* "pyproject.toml"
28367 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
28368 (native-inputs
28369 (list python-poetry-core
28370 python-pytest))
28371 (home-page "https://github.com/nix-community/pynixutil")
28372 (synopsis "Utility functions for working with data from Nix in Python")
28373 (description
28374 "@code{pynixutil} provides functions for base32 encoding/decoding and
28375derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
28376@code{drvparse()}.")
28377 (license license:expat)))
28378
28379(define-public python-dns-lexicon
28380 (package
28381 (name "python-dns-lexicon")
28382 (version "3.21.1")
28383 (source
28384 (origin
28385 (method git-fetch)
28386 (uri (git-reference
28387 (url "https://github.com/dns-lexicon/dns-lexicon")
28388 (commit (string-append "v" version))))
28389 (file-name (git-file-name name version))
28390 (sha256
28391 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
28392 (build-system pyproject-build-system)
28393 (arguments
28394 (list
28395 ;; Integration tests require network access.
28396 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
28397 #:phases
28398 #~(modify-phases %standard-phases
28399 (add-before 'check 'configure-tests
28400 (lambda _
28401 (setenv "HOME" (getcwd)))))))
28402 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
28403 (propagated-inputs
28404 (list python-beautifulsoup4
28405 python-cryptography
28406 python-dnspython
28407 python-pyotp
28408 python-pyyaml
28409 python-requests
28410 python-tldextract))
28411 (home-page "https://github.com/dns-lexicon/dns-lexicon")
28412 (synopsis "Manipulate DNS records on various DNS providers")
28413 (description
28414 "Lexicon provides a way to manipulate DNS records on multiple DNS
28415providers in a standardized way. It has a CLI but it can also be used as a
28416Python library. It was designed to be used in automation, specifically with
28417Let's Encrypt.")
28418 (license license:expat)))
28419
28420(define-public python-cfgv
28421 (package
28422 (name "python-cfgv")
28423 (version "3.4.0")
28424 (source
28425 (origin
28426 ;; There are no tests in the PyPI tarball.
28427 (method git-fetch)
28428 (uri (git-reference
28429 (url "https://github.com/asottile/cfgv")
28430 (commit (string-append "v" version))))
28431 (file-name (git-file-name name version))
28432 (sha256
28433 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
28434 (build-system pyproject-build-system)
28435 (native-inputs
28436 (list python-pytest python-setuptools python-wheel))
28437 (home-page "https://github.com/asottile/cfgv")
28438 (synopsis "Configuration validation library")
28439 (description
28440 "This library helps to validate configuration files and produce human
28441readable error messages.")
28442 (license license:expat)))
28443
28444(define-public python-commandlines
28445 (package
28446 (name "python-commandlines")
28447 (version "0.4.1")
28448 (source
28449 (origin
28450 (method git-fetch)
28451 (uri (git-reference
28452 (url "https://github.com/chrissimpkins/commandlines")
28453 (commit (string-append "v" version))))
28454 (file-name (git-file-name name version))
28455 (sha256
28456 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
28457 (build-system pyproject-build-system)
28458 (native-inputs (list python-pytest python-setuptools))
28459 (home-page "https://github.com/chrissimpkins/commandlines")
28460 (synopsis "Command line argument to object parsing library")
28461 (description
28462 "@code{Commandlines} is a Python library for command line application
28463development that supports command line argument parsing, command string
28464validation testing and application logic.")
28465 (license license:expat)))
28466
28467;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
28468;; python-numba. They have a very inflexible relationship.
28469(define-public python-numba
28470 (package
28471 (name "python-numba")
28472 (version "0.62.1")
28473 (source
28474 (origin
28475 (method url-fetch)
28476 (uri (pypi-uri "numba" version))
28477 (sha256
28478 (base32
28479 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
28480 (build-system pyproject-build-system)
28481 (arguments
28482 (list
28483 ;; tests: 10723 tests (skipped=708, expected failures=23)
28484 #:test-backend #~'custom
28485 #:test-flags
28486 ;; Check <buildscripts> directory for more build/tests examples.
28487 #~(list "-m" "numba.runtests"
28488 "--exclude-tags='long_running'"
28489 "--multiprocess" (number->string (min 8 (parallel-job-count)))
28490 "-b"
28491 "-v"
28492 "--"
28493 "numba.tests")
28494 #:phases
28495 #~(modify-phases %standard-phases
28496 (add-after 'unpack 'disable-failing-tests
28497 (lambda _
28498 ;; This expects to be able to run pip.
28499 (delete-file "numba/tests/test_sysinfo.py")
28500 ;; This fails nondeterministically, possibly depending on CPU.
28501 ;; https://github.com/numba/numba/issues/8282.
28502 (substitute* "numba/tests/test_function_type.py"
28503 (("def test_wrapper_address_protocol_libm")
28504 "def disabled_test_wrapper_address_protocol_libm"))
28505 (substitute* "numba/tests/test_caching.py"
28506 ;; RuntimeError: cannot cache function 'simple_usecase': no
28507 ;; locator available for file
28508 (("def test_non_creatable_pycache")
28509 "def __off_test_non_creatable_pycache")
28510 (("def test_non_writable_pycache")
28511 "def __off_test_non_writable_pycache")
28512 ;; AssertionError: None is not an instance of <class
28513 ;; 'numba.core.caching.UserWideCacheLocator'>
28514 (("def test_frozen")
28515 "def __off_test_frozen"))))
28516 (add-before 'build 'disable-proprietary-features
28517 (lambda _
28518 (setenv "NUMBA_DISABLE_HSA" "1")
28519 (setenv "NUMBA_DISABLE_CUDA" "1")))
28520 (add-before 'check 'pre-check
28521 (lambda _
28522 (setenv "HOME" "/tmp")
28523 ;; XXX: Something is wrong with the PYTHONPATH when running the
28524 ;; tests from the build directory, as it complains about not
28525 ;; being able to import certain modules.
28526 (delete-file-recursively "numba"))))))
28527 (native-inputs
28528 (list python-setuptools))
28529 (propagated-inputs
28530 (list python-llvmlite
28531 python-numpy))
28532 (home-page "https://numba.pydata.org")
28533 (synopsis "Compile Python code using LLVM")
28534 (description "Numba gives you the power to speed up your applications with
28535high performance functions written directly in Python. With a few
28536annotations, array-oriented and math-heavy Python code can be just-in-time
28537compiled to native machine instructions, similar in performance to C, C++ and
28538Fortran, without having to switch languages or Python interpreters.
28539
28540Numba works by generating optimized machine code using the LLVM compiler
28541infrastructure at import time, runtime, or statically (using the included pycc
28542tool).")
28543 (license license:bsd-3)))
28544
28545(define-public python-numcodecs
28546 (package
28547 (name "python-numcodecs")
28548 (version "0.13.1")
28549 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
28550 ;;(version "0.14.1")
28551 (source
28552 (origin
28553 (method url-fetch)
28554 (uri (pypi-uri "numcodecs" version))
28555 (sha256
28556 (base32
28557 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
28558 (modules '((guix build utils)))
28559 (snippet
28560 '(begin
28561 ;; Only add CFLAGS on architectures where they are supported
28562 (substitute* "setup.py"
28563 (("import sys")
28564 "import sys\nimport platform")
28565 (("os\\.name == 'posix'")
28566 (string-append "os.name + platform.machine() == 'posixx86_64' or"
28567 " os.name + platform.machine() == 'posixx86'")))
28568 (delete-file-recursively "c-blosc")))))
28569 (build-system pyproject-build-system)
28570 (arguments
28571 (list
28572 #:test-flags
28573 ;; zarr isn't available, because it dependes on this package.
28574 '(list "-k" "not test_zarr3_import")
28575 #:phases
28576 '(modify-phases %standard-phases
28577 (add-after 'unpack 'disable-avx2
28578 (lambda _
28579 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
28580 (add-after 'unpack 'unbundle
28581 (lambda _
28582 (substitute* "setup.py"
28583 (("sources=sources \\+ blosc_sources,")
28584 "sources=sources,")
28585 (("extra_compile_args=extra_compile_args")
28586 "extra_compile_args=list(base_compile_args)")
28587 (("'numcodecs.zstd',")
28588 "'numcodecs.zstd', libraries=['zstd'], ")
28589 (("'numcodecs.lz4',")
28590 "'numcodecs.lz4', libraries=['lz4'], ")
28591 (("'numcodecs.blosc',")
28592 "'numcodecs.blosc', libraries=['blosc'], "))))
28593 (add-before 'check 'build-extensions
28594 (lambda _
28595 ;; Cython extensions have to be built before running the tests.
28596 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
28597 (inputs
28598 (list c-blosc lz4 zlib
28599 `(,zstd "lib")))
28600 (propagated-inputs
28601 (list python-google-crc32c
28602 python-importlib-metadata
28603 python-msgpack
28604 python-numpy))
28605 (native-inputs
28606 (list python-cython
28607 python-py-cpuinfo
28608 python-pydata-sphinx-theme
28609 python-pytest
28610 python-setuptools
28611 python-setuptools-scm ;for correct version
28612 python-sphinx
28613 python-sphinx-issues))
28614 (home-page "https://github.com/zarr-developers/numcodecs")
28615 (synopsis "Buffer compression and transformation codecs")
28616 (description
28617 "This Python package provides buffer compression and transformation
28618codecs for use in data storage and communication applications.")
28619 (license license:expat)))
28620
28621(define-public python-asciitree
28622 (package
28623 (name "python-asciitree")
28624 (version "0.3.3")
28625 (source
28626 (origin
28627 (method git-fetch)
28628 (uri (git-reference
28629 (url "https://github.com/mbr/asciitree")
28630 (commit version)))
28631 (file-name (git-file-name name version))
28632 (sha256
28633 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28634 (build-system pyproject-build-system)
28635 (native-inputs (list python-pytest python-setuptools))
28636 (home-page "https://github.com/mbr/asciitree")
28637 (synopsis "Draws ASCII trees")
28638 (description "This package draws tree structures using characters.")
28639 (license license:expat)))
28640
28641(define-public python-dill
28642 (package
28643 (name "python-dill")
28644 (version "0.4.0")
28645 (source
28646 (origin
28647 (method url-fetch)
28648 (uri (pypi-uri "dill" version))
28649 (sha256
28650 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
28651 (build-system pyproject-build-system)
28652 (arguments
28653 (list
28654 #:phases #~(modify-phases %standard-phases
28655 (replace 'check
28656 (lambda* (#:key tests? #:allow-other-keys)
28657 (if tests?
28658 ;; Extracted from tox.ini
28659 (invoke "python" "dill/tests/__main__.py")
28660 (format #t "test suite not run~%")))))))
28661 (native-inputs
28662 (list python-setuptools python-wheel))
28663 (home-page "https://pypi.org/project/dill/")
28664 (synopsis "Serialize all of Python")
28665 (description "Dill extends Python's @code{pickle} module for serializing
28666and de-serializing Python objects to the majority of the built-in Python
28667types. Dill provides the user the same interface as the @code{pickle} module,
28668and also includes some additional features. In addition to pickling Python
28669objects, @code{dill} provides the ability to save the state of an interpreter
28670session in a single command. Hence, it would be feasible to save a
28671interpreter session, close the interpreter, ship the pickled file to another
28672computer, open a new interpreter, unpickle the session and thus continue from
28673the saved state of the original interpreter session.")
28674 (license license:bsd-3)))
28675
28676(define-public python-multiprocess
28677 (package
28678 (name "python-multiprocess")
28679 (version "0.70.18")
28680 (source
28681 (origin
28682 (method url-fetch)
28683 (uri (pypi-uri "multiprocess" version))
28684 (sha256
28685 (base32
28686 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28687 (build-system pyproject-build-system)
28688 (arguments
28689 (list
28690 #:phases
28691 #~(modify-phases %standard-phases
28692 (add-after 'unpack 'disable-broken-tests
28693 (lambda* (#:key inputs #:allow-other-keys)
28694 ;; The "wait_result" and "shared_memory..." tests are broken as
28695 ;; there is no keyboard interrupt.
28696 ;;
28697 ;; The "preload_resources" test fails as it cannot find
28698 ;; mp_preload.py.
28699 (substitute*
28700 (string-append "py" (python-version
28701 (assoc-ref inputs "python"))
28702 "/multiprocess/tests/__init__.py")
28703 (("^(.*)def test_(\
28704wait_result|\
28705shared_memory_SharedMemoryServer_ignores_sigint|\
28706preload_resources\
28707)" line indent)
28708 (string-append indent
28709 "@unittest.skip(\"Disabled by Guix\")\n"
28710 line)))))
28711 (replace 'check
28712 (lambda* (#:key tests? #:allow-other-keys)
28713 (if tests?
28714 (invoke "python" "-m" "multiprocess.tests")
28715 (format #t "test suite not run~%")))))))
28716 (propagated-inputs
28717 (list python-dill))
28718 (native-inputs (list python-setuptools))
28719 (home-page "https://pypi.org/project/multiprocess/")
28720 (synopsis "Multiprocessing and multithreading in Python")
28721 (description
28722 "This package is a fork of the multiprocessing Python package, a package
28723which supports the spawning of processes using the API of the standard
28724library's @code{threading} module.")
28725 (license license:bsd-3)))
28726
28727(define-public python-multiprocessing-on-dill
28728 (package
28729 (name "python-multiprocessing-on-dill")
28730 (version "3.5.0a4")
28731 (source (origin
28732 (method url-fetch)
28733 (uri (pypi-uri "multiprocessing_on_dill" version))
28734 (sha256
28735 (base32
28736 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28737 (build-system pyproject-build-system)
28738 (propagated-inputs (list python-dill))
28739 (native-inputs (list python-pytest python-setuptools python-wheel))
28740 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28741 (synopsis "Multiprocessing using dill instead of pickle")
28742 (description
28743 "This package provides a friendly fork of multiprocessing which uses dill
28744instead of pickle.")
28745 (license license:psfl)))
28746
28747(define-public python-cytoolz
28748 (package
28749 (name "python-cytoolz")
28750 (version "1.0.1")
28751 (source
28752 (origin
28753 (method url-fetch)
28754 (uri (pypi-uri "cytoolz" version))
28755 (sha256
28756 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28757 (modules '((guix build utils)))
28758 (snippet
28759 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28760 (build-system pyproject-build-system)
28761 (arguments
28762 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28763 (native-inputs
28764 (list python-cython
28765 python-pytest
28766 python-setuptools
28767 python-wheel))
28768 (propagated-inputs
28769 (list python-toolz))
28770 (home-page "https://github.com/pytoolz/cytoolz")
28771 (synopsis "High performance functional utilities")
28772 (description
28773 "The cytoolz package implements the same API as provided by toolz. The
28774main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28775that is accessible to other projects developed in Cython.")
28776 (license license:bsd-3)))
28777
28778(define-public python-cloudpickle
28779 (package
28780 (name "python-cloudpickle")
28781 (version "3.1.0")
28782 (source
28783 (origin
28784 ;; Archive on pypi does not include test infrastructure.
28785 (method git-fetch)
28786 (uri (git-reference
28787 (url "https://github.com/cloudpipe/cloudpickle")
28788 (commit (string-append "v" version))))
28789 (file-name (git-file-name name version))
28790 (sha256
28791 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28792 (build-system pyproject-build-system)
28793 (native-inputs
28794 (list python-flit-core
28795 python-psutil
28796 python-pytest))
28797 (home-page "https://github.com/cloudpipe/cloudpickle")
28798 (synopsis "Extended pickling support for Python objects")
28799 (description
28800 "Cloudpickle makes it possible to serialize Python constructs not
28801supported by the default pickle module from the Python standard library. It
28802is especially useful for cluster computing where Python expressions are
28803shipped over the network to execute on remote hosts, possibly close to the
28804data.")
28805 (license license:bsd-3)))
28806
28807(define-public python-locket
28808 (package
28809 (name "python-locket")
28810 (version "1.0.0")
28811 (source
28812 (origin
28813 (method git-fetch)
28814 (uri (git-reference
28815 (url "https://github.com/mwilliamson/locket.py")
28816 (commit version)))
28817 (file-name (git-file-name name version))
28818 (sha256
28819 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28820 (build-system pyproject-build-system)
28821 ;; XXX: Requires python-spur, which requires another version of
28822 ;; python-paramiko.
28823 (arguments (list #:tests? #f))
28824 (native-inputs (list python-setuptools))
28825 (home-page "https://github.com/mwilliamson/locket.py")
28826 (synopsis "File-based locks for Python")
28827 (description
28828 "Locket implements a lock that can be used by multiple processes provided
28829they use the same path.")
28830 (license license:bsd-2)))
28831
28832(define-public python-loky
28833 (package
28834 (name "python-loky")
28835 (version "3.5.6")
28836 (source
28837 (origin
28838 (method git-fetch)
28839 (uri (git-reference
28840 (url "https://github.com/joblib/loky")
28841 (commit version)))
28842 (file-name (git-file-name name version))
28843 (sha256
28844 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
28845 (build-system pyproject-build-system)
28846 (arguments
28847 (list
28848 #:test-flags
28849 #~(list "-k" (string-join
28850 (list
28851 ;; Requires process control.
28852 "not (test_kill_process_tree"
28853 ;; Hardware dependent tests.
28854 "test_only_physical_cores_error"
28855 ;; Depends on previous results.
28856 "test_wait_result)")
28857 " or "))))
28858 (native-inputs
28859 (list python-packaging
28860 python-psutil
28861 python-pytest
28862 python-setuptools))
28863 (propagated-inputs
28864 (list python-cloudpickle))
28865 (home-page "https://loky.readthedocs.io")
28866 (synopsis "Robust and reusable Executor for joblib")
28867 (description
28868 "This package provides a robust implementation of
28869@code{concurrent.futures.ProcessPoolExecutor}.")
28870 (license license:bsd-3)))
28871
28872(define-public python-partd
28873 (package
28874 (name "python-partd")
28875 (version "1.4.2")
28876 (source
28877 (origin
28878 (method url-fetch)
28879 (uri (pypi-uri "partd" version))
28880 (sha256
28881 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28882 (build-system pyproject-build-system)
28883 (native-inputs
28884 (list python-pytest
28885 python-setuptools
28886 python-versioneer))
28887 (propagated-inputs
28888 (list python-locket
28889 python-toolz
28890 ;; [complete]
28891 python-blosc
28892 python-numpy
28893 python-pandas
28894 python-pyzmq))
28895 (home-page "https://github.com/dask/partd/")
28896 (synopsis "Appendable key-value storage")
28897 (description
28898 "Partd stores key-value pairs. Values are raw bytes. We append on old
28899values. Partd excels at shuffling operations.")
28900 (license license:bsd-3)))
28901
28902(define-public python-fsspec
28903 (package
28904 (name "python-fsspec")
28905 (version "2026.1.0")
28906 (source
28907 (origin
28908 (method git-fetch)
28909 (uri (git-reference
28910 (url "https://github.com/fsspec/filesystem_spec")
28911 (commit version)))
28912 (file-name (git-file-name name version))
28913 (sha256
28914 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
28915 (build-system pyproject-build-system)
28916 (arguments
28917 (list
28918 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
28919 #:test-flags
28920 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28921 "-k" (string-join
28922 ;; Test requires nentwork access
28923 (list "not test_async_cat_file_ranges"
28924 "test_gist_public_all_files"
28925 "test_gist_public_missing_file"
28926 "test_gist_public_one_file"
28927 ;; Test hangs
28928 "test_processes")
28929 " and not "))))
28930 ;; The most of the inputs are optional, project does not force to include
28931 ;; any dependencies according to pyproject.toml.
28932 (propagated-inputs
28933 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28934 (native-inputs
28935 (list nss-certs-for-test
28936 python-hatch-vcs
28937 python-hatchling
28938 python-numpy
28939 python-pytest
28940 python-pytest-asyncio
28941 python-pytest-mock
28942 python-pytest-rerunfailures))
28943 (home-page "https://github.com/fsspec/filesystem_spec")
28944 (synopsis "File-system specification")
28945 (description "The purpose of this package is to produce a template or
28946specification for a file-system interface, that specific implementations
28947should follow, so that applications making use of them can rely on a common
28948behavior and not have to worry about the specific internal implementation
28949decisions with any given backend.")
28950 (license license:bsd-3)))
28951
28952(define-public python-ilinkedlist
28953 (package
28954 (name "python-ilinkedlist")
28955 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28956 (revision . "0")))
28957 (version (git-version "0.4.0"
28958 (assoc-ref properties 'revision)
28959 (assoc-ref properties 'commit)))
28960 (home-page "https://github.com/luther9/ilinkedlist-py")
28961 (source
28962 (origin
28963 (method git-fetch)
28964 (uri (git-reference
28965 (url home-page)
28966 (commit (assoc-ref properties 'commit))))
28967 (file-name (git-file-name name version))
28968 (sha256
28969 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28970 (build-system pyproject-build-system)
28971 (native-inputs (list python-pytest python-setuptools))
28972 (synopsis "Immutable linked list library")
28973 (description
28974 "This is a implementation of immutable linked lists for Python. It
28975contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28976Since a linked list is treated as immutable, it is hashable, and its length
28977can be retrieved in constant time. Some of the terminology is inspired by
28978LISP. It is possible to create an improper list by creating a @code{Pair}
28979with a non-list @code{cdr}.")
28980 (license license:gpl3+)))
28981
28982(define-public python-readlike
28983 (package
28984 (name "python-readlike")
28985 (version "0.1.3")
28986 (source
28987 (origin
28988 (method git-fetch)
28989 (uri (git-reference
28990 (url "https://github.com/jangler/readlike")
28991 (commit version)))
28992 (file-name (git-file-name name version))
28993 (sha256
28994 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28995 (build-system pyproject-build-system)
28996 (native-inputs (list python-pytest python-setuptools))
28997 (home-page "https://github.com/jangler/readlike")
28998 (synopsis "GNU Readline-like line editing module")
28999 (description
29000 "This Python module provides line editing functions similar to the default
29001Emacs-style ones of GNU Readline. Unlike the Python standard library's
29002@code{readline} package, this one allows access to those capabilities in settings
29003outside of a standard command-line interface. It is especially well-suited to
29004interfacing with Urwid, due to a shared syntax for describing key inputs.
29005
29006Currently, all stateless Readline commands are implemented. Yanking and history
29007are not supported.")
29008 (license license:expat)))
29009
29010(define-public python-reparser
29011 (package
29012 (name "python-reparser")
29013 (version "1.4.3")
29014 (source
29015 (origin
29016 (method git-fetch)
29017 (uri (git-reference
29018 (url "https://github.com/xmikos/reparser")
29019 (commit (string-append "v" version))))
29020 (file-name (git-file-name name version))
29021 (sha256
29022 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
29023 (build-system pyproject-build-system)
29024 (arguments (list #:tests? #f)) ; No tests.
29025 (native-inputs (list python-setuptools))
29026 (home-page "https://github.com/xmikos/reparser")
29027 (synopsis "Lexer/parser for inline markup based on regular expressions")
29028 (description
29029 "This Python library provides a simple lexer/parser for inline markup based
29030on regular expressions.")
29031 (license license:expat)))
29032
29033(define-public python-retrying
29034 (package
29035 (name "python-retrying")
29036 (version "1.4.1")
29037 (source
29038 (origin
29039 (method git-fetch)
29040 (uri (git-reference
29041 (url "https://github.com/groodt/retrying")
29042 (commit (string-append "v" version))))
29043 (file-name (git-file-name name version))
29044 (sha256
29045 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
29046 (build-system pyproject-build-system)
29047 (native-inputs (list python-pytest python-setuptools))
29048 (home-page "https://github.com/groodt/retrying")
29049 (synopsis "Library for adding retry behavior")
29050 (description "Retrying is a general-purpose retrying library to simplify
29051the task of adding retry behavior to just about anything.
29052
29053Features:
29054
29055@itemize
29056@item Generic Decorator API.
29057@item Specify stop condition (i.e. limit by number of attempts).
29058@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
29059@item Customize retrying on Exceptions.
29060@item Customize retrying on expected returned result.
29061@end itemize")
29062 (license license:asl2.0)))
29063
29064(define-public python-precis-i18n
29065 (package
29066 (name "python-precis-i18n")
29067 (version "1.1.1")
29068 (source
29069 (origin
29070 (method url-fetch)
29071 (uri (pypi-uri "precis_i18n" version))
29072 (sha256
29073 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
29074 (build-system pyproject-build-system)
29075 (native-inputs
29076 (list python-pytest
29077 python-setuptools
29078 python-wheel))
29079 (home-page "https://github.com/byllyfish/precis_i18n")
29080 (synopsis "Implementation of the PRECIS framework")
29081 (description
29082 "This module implements the PRECIS Framework as described in RFC 8264,
29083RFC 8265 and RFC 8266.")
29084 (license license:expat)))
29085
29086(define-public python-absl-py
29087 (package
29088 (name "python-absl-py")
29089 (version "2.3.1")
29090 (source
29091 (origin
29092 (method url-fetch)
29093 (uri (pypi-uri "absl_py" version))
29094 (sha256
29095 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
29096 (build-system pyproject-build-system)
29097 (arguments
29098 (list #:tests? #f)) ;tests require bazel
29099 (native-inputs
29100 (list python-hatchling))
29101 (home-page "https://github.com/abseil/abseil-py")
29102 (synopsis "Abseil Python common libraries")
29103 (description
29104 "This package provides the Abseil Python Common Libraries, a collection
29105of Python libraries for building Python applications.")
29106 (license license:asl2.0)))
29107
29108(define-public python-astor
29109 (package
29110 (name "python-astor")
29111 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
29112 (revision . "0")))
29113 (version (git-version "0.8.1"
29114 (assoc-ref properties 'revision)
29115 (assoc-ref properties 'commit)))
29116 (source
29117 (origin
29118 (method git-fetch)
29119 (uri (git-reference
29120 (url "https://github.com/berkerpeksag/astor")
29121 (commit (assoc-ref properties 'commit))))
29122 (file-name (git-file-name name version))
29123 (sha256
29124 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
29125 (build-system pyproject-build-system)
29126 (arguments
29127 (list
29128 ;; FIXME: Unclear why this test fails.
29129 #:test-flags #~(list "--deselect=\
29130tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
29131 (native-inputs (list python-pytest python-setuptools))
29132 (home-page "https://github.com/berkerpeksag/astor")
29133 (synopsis "Read and write Python ASTs")
29134 (description
29135 "Astor is designed to allow easy manipulation of Python source via the
29136Abstract Syntax Tree.")
29137 (license license:bsd-3)))
29138
29139(define-public python-astunparse
29140 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
29141 ;; updated.
29142 (package
29143 (name "python-astunparse")
29144 (version "1.6.3")
29145 (source
29146 (origin
29147 (method url-fetch)
29148 (uri (pypi-uri "astunparse" version))
29149 (sha256
29150 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
29151 (build-system pyproject-build-system)
29152 (arguments '(#:tests? #f)) ; there are none
29153 (native-inputs
29154 (list python-setuptools))
29155 (propagated-inputs
29156 (list python-six))
29157 (home-page "https://github.com/simonpercivall/astunparse")
29158 (synopsis "AST unparser for Python")
29159 (description "This package provides an AST unparser for Python. It is a
29160factored out version of @code{unparse} found in the Python source
29161distribution.")
29162 (license license:bsd-3)))
29163
29164(define-public python-gast
29165 (package
29166 (name "python-gast")
29167 (version "0.6.0")
29168 (source
29169 (origin
29170 (method url-fetch)
29171 (uri (pypi-uri "gast" version))
29172 (sha256
29173 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
29174 (build-system pyproject-build-system)
29175 (native-inputs
29176 (list python-pytest python-setuptools python-wheel))
29177 (home-page "https://github.com/serge-sans-paille/gast/")
29178 (synopsis "Generic Python AST that abstracts the underlying Python version")
29179 (description
29180 "GAST provides a compatibility layer between the AST of various Python
29181versions, as produced by @code{ast.parse} from the standard @code{ast}
29182module.")
29183 (license license:bsd-3)))
29184
29185;; XXX: Not maintained since 2022, leaf package.
29186(define-public python-attr
29187 (package
29188 (name "python-attr")
29189 (version "0.3.2")
29190 (source
29191 (origin
29192 (method url-fetch)
29193 (uri (pypi-uri "attr" version))
29194 (sha256
29195 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
29196 (build-system pyproject-build-system)
29197 (arguments
29198 (list #:test-backend #~'custom
29199 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
29200 (native-inputs
29201 (list python-setuptools))
29202 (home-page "https://github.com/denis-ryzhkov/attr")
29203 (synopsis "Decorator for attributes of target function or class")
29204 (description "Simple decorator to set attributes of target function or
29205class in a @acronym{DRY, Don't Repeat Yourself} way.")
29206 (license license:expat)))
29207
29208(define-public python-construct
29209 ;; Fixes not in a release yet.
29210 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
29211 (revision "1"))
29212 (package
29213 (name "python-construct")
29214 (version (git-version "2.10.70" revision commit))
29215 (source
29216 (origin
29217 (method git-fetch)
29218 (uri (git-reference
29219 (url "https://github.com/construct/construct")
29220 (commit commit)))
29221 (file-name (git-file-name name version))
29222 (sha256
29223 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
29224 (build-system pyproject-build-system)
29225 (arguments
29226 (list
29227 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
29228 (native-inputs
29229 (list python-pytest python-setuptools))
29230 (propagated-inputs
29231 (list python-arrow
29232 python-cloudpickle
29233 python-cryptography
29234 python-lz4
29235 python-numpy
29236 python-ruamel.yaml))
29237 (home-page "https://construct.readthedocs.io")
29238 (synopsis "Declarative and symmetrical parser and builder for binary data")
29239 (description
29240 "This package provides both simple, atomic constructs (such as
29241integers of various sizes), as well as composite ones which allow you
29242form hierarchical and sequential structures of increasing complexity.
29243It features bit and byte granularity, easy debugging and testing, an
29244easy-to-extend subclass system, and lots of primitive constructs to
29245make your work easier.")
29246 (license license:expat))))
29247
29248(define-public python-outcome
29249 (package
29250 (name "python-outcome")
29251 (version "1.3.0.post0")
29252 (source
29253 (origin
29254 (method url-fetch)
29255 (uri (pypi-uri "outcome" version))
29256 (sha256
29257 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
29258 (build-system pyproject-build-system)
29259 (native-inputs
29260 (list python-pytest
29261 python-pytest-asyncio
29262 python-setuptools))
29263 (propagated-inputs
29264 (list python-attrs))
29265 (home-page "https://github.com/python-trio/outcome")
29266 (synopsis "Capture the outcome of Python function calls")
29267 (description
29268 "Capture the outcome of Python function calls. Extracted from the Trio
29269project.")
29270 ;; Either license applies.
29271 (license (list license:expat license:asl2.0))))
29272
29273(define-public python-humanize
29274 (package
29275 (name "python-humanize")
29276 (version "4.14.0")
29277 (source
29278 (origin
29279 (method url-fetch)
29280 (uri (pypi-uri "humanize" version))
29281 (sha256
29282 (base32
29283 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
29284 (build-system pyproject-build-system)
29285 (native-inputs
29286 (list python-freezegun
29287 python-hatch-vcs
29288 python-hatchling
29289 python-pytest))
29290 (home-page "https://github.com/jmoiron/humanize")
29291 (synopsis "Print numerical information in a human-readable form")
29292 (description "This package provides a Python module that displays numbers
29293and dates in \"human readable\" forms. For example, it would display
29294\"12345591313\" as \"12.3 billion\".")
29295 (license license:expat)))
29296
29297(define-public python-annoy
29298 (package
29299 (name "python-annoy")
29300 (version "1.17.3")
29301 (source
29302 (origin
29303 (method git-fetch)
29304 (uri (git-reference
29305 (url "https://github.com/spotify/annoy")
29306 (commit (string-append "v" version))))
29307 (file-name (git-file-name name version))
29308 (sha256
29309 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
29310 (build-system pyproject-build-system)
29311 (arguments
29312 (list
29313 #:test-flags
29314 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
29315 ;; name resolution>
29316 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
29317 "--deselect=test/accuracy_test.py::test_nytimes_16"
29318 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
29319 (native-inputs
29320 (list python-h5py
29321 python-numpy
29322 python-pytest
29323 python-setuptools))
29324 (home-page "https://github.com/spotify/annoy/")
29325 (synopsis "Approximate nearest neighbors library")
29326 (description
29327 "Annoy is a C++ library with Python bindings to search for points in
29328space that are close to a given query point. It also creates large read-only
29329file-based data structures that are @code{mmap}ped into memory so that many
29330processes may share the same data.")
29331 (license license:asl2.0)))
29332
29333(define-public python-croniter
29334 (package
29335 (name "python-croniter")
29336 (version "5.0.1")
29337 (source
29338 (origin
29339 (method git-fetch)
29340 (uri (git-reference
29341 (url "https://github.com/kiorky/croniter")
29342 (commit version)))
29343 (file-name (git-file-name name version))
29344 (sha256
29345 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
29346 (build-system pyproject-build-system)
29347 (native-inputs (list python-pytest python-setuptools))
29348 (propagated-inputs (list python-dateutil python-pytz))
29349 (home-page "https://github.com/kiorky/croniter")
29350 (synopsis "Iterate datetime objects with cron-like syntax")
29351 (description
29352 "@code{croniter} provides iteration for datetime object with cron-like
29353format.")
29354 (license license:expat)))
29355
29356(define-public python-crontab
29357 (package
29358 (name "python-crontab")
29359 (version "3.3.0")
29360 (source
29361 (origin
29362 (method url-fetch)
29363 (uri (pypi-uri "python_crontab" version))
29364 (sha256
29365 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
29366 (build-system pyproject-build-system)
29367 (arguments
29368 (list #:test-flags
29369 ;; This test is made for Windows.
29370 #~(list "-k" "not test_07_non_posix_shell")
29371 #:phases
29372 #~(modify-phases %standard-phases
29373 (add-after 'unpack 'defaults-to-mcron
29374 (lambda* (#:key inputs #:allow-other-keys)
29375 (substitute* "crontab.py"
29376 (("/usr/bin/crontab")
29377 (search-input-file inputs "bin/crontab"))))))))
29378 (inputs
29379 (list mcron python-dateutil))
29380 (native-inputs
29381 (list python-pytest python-setuptools))
29382 (home-page "https://gitlab.com/doctormo/python-crontab/")
29383 (synopsis "Module for reading and writing crontab files")
29384 (description "This Python module can read, write crontab files, and
29385access the system cron automatically and simply using a direct API.")
29386 (license license:lgpl3+)))
29387
29388(define-public python-apscheduler
29389 (package
29390 (name "python-apscheduler")
29391 (version "3.11.2")
29392 (source (origin
29393 (method url-fetch)
29394 (uri (pypi-uri "apscheduler" version))
29395 (sha256
29396 (base32
29397 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
29398 (build-system pyproject-build-system)
29399 (arguments
29400 (list
29401 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
29402 #:test-flags
29403 ;; XXX: Some tests hang or fail with verity of errors:
29404 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
29405 #~(list #$@(map (lambda (test) (string-append "--deselect="
29406 "tests/test_executors.py::"
29407 test))
29408 (list "test_broken_pool"
29409 "test_max_instances[processpool-pytz]"
29410 "test_max_instances[processpool-zoneinfo]"
29411 "test_run_coroutine_job_tornado"
29412 "test_run_job_error[processpool-pytz]"
29413 "test_run_job_error[processpool-zoneinfo]"
29414 "test_submit_job[processpool-pytz-error]"
29415 "test_submit_job[processpool-pytz-executed]"
29416 "test_submit_job[processpool-pytz-missed]"
29417 "test_submit_job[processpool-zoneinfo-error]"
29418 "test_submit_job[processpool-zoneinfo-executed]"
29419 "test_submit_job[processpool-zoneinfo-missed]")))))
29420 (native-inputs
29421 (list python-anyio
29422 python-gevent
29423 python-pyside-6
29424 python-pytest
29425 python-pytest-asyncio
29426 python-pytz
29427 python-setuptools
29428 python-setuptools-scm
29429 python-sqlalchemy
29430 python-tornado
29431 python-twisted))
29432 (propagated-inputs
29433 (list python-tzlocal))
29434 (home-page "https://github.com/agronholm/apscheduler")
29435 (synopsis "Task scheduling library for Python")
29436 (description "Advanced Python Scheduler (APScheduler) is a Python library
29437that lets you schedule your Python code to be executed later, either just once
29438or periodically.
29439
29440You can add new jobs or remove old ones on the fly as you please. If you store
29441your jobs in a database, they will also survive scheduler restarts and maintain
29442their state. When the scheduler is restarted, it will then run all the jobs it
29443should have run while it was offline.")
29444 (license license:expat)))
29445
29446(define-public python-ifaddr
29447 (package
29448 (name "python-ifaddr")
29449 (version "0.2.0")
29450 (source
29451 (origin
29452 (method url-fetch)
29453 (uri (pypi-uri "ifaddr" version))
29454 (sha256
29455 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
29456 (snippet #~(delete-file "ifaddr/_win32.py"))))
29457 (build-system pyproject-build-system)
29458 (native-inputs
29459 (list python-pytest python-setuptools python-wheel))
29460 (home-page "https://github.com/pydron/ifaddr")
29461 (synopsis "Network interface and IP address enumeration library")
29462 (description
29463 "This package provides a network interface and IP address enumeration
29464library in Python.")
29465 (license license:expat)))
29466
29467(define-public python-berkeleydb
29468 (package
29469 (name "python-berkeleydb")
29470 (version "18.1.15")
29471 (source
29472 (origin
29473 (method url-fetch)
29474 (uri (pypi-uri "berkeleydb" version))
29475 (sha256
29476 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
29477 (build-system pyproject-build-system)
29478 (arguments
29479 (list
29480 #:test-backend #~'custom
29481 #:test-flags #~(list "test.py" "-v")
29482 #:phases
29483 #~(modify-phases %standard-phases
29484 (add-after 'unpack 'configure-locations
29485 (lambda* (#:key inputs #:allow-other-keys)
29486 (setenv "BERKELEYDB_DIR"
29487 (assoc-ref inputs "bdb"))
29488 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
29489 "1")))
29490 (add-after 'unpack 'remove-legacy
29491 (lambda _
29492 (substitute* "pyproject.toml"
29493 ((":__legacy__") "")))))))
29494 (native-inputs (list python-setuptools))
29495 (inputs (list bdb))
29496 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
29497 (synopsis "Python bindings for Oracle Berkeley DB")
29498 (description
29499 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
29500C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
29501Transaction objects, and each of these is exposed as a Python type in the
29502bsddb3.db module. The database objects can use various access methods: btree,
29503hash, recno, and queue. Complete support of Berkeley DB distributed
29504transactions. Complete support for Berkeley DB Replication Manager.
29505Complete support for Berkeley DB Base Replication. Support for RPC.")
29506 (license license:bsd-3)))
29507
29508;; Last version before rename to python-berkeleydb.
29509;; This package is close to deprecation.
29510(define-public python-bsddb3
29511 (package
29512 (inherit python-berkeleydb)
29513 (name "python-bsddb3")
29514 (version "6.2.9")
29515 (source
29516 (origin
29517 (method url-fetch)
29518 (uri (pypi-uri "bsddb3" version))
29519 (sha256
29520 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
29521 (arguments
29522 (substitute-keyword-arguments arguments
29523 ;; Tests started failing from [email protected].
29524 ;; The package is in a pre-deprecation phase, so I didn't bother
29525 ;; to try and patch them, but sanity-check passes so the package
29526 ;; itself is likely fine.
29527 ((#:tests? tests? #t)
29528 #f)
29529 ((#:phases phases #~%standard-phases)
29530 #~(modify-phases #$phases
29531 (delete 'remove-legacy)))
29532 ((#:test-flags test-flags #~(list))
29533 #~(list "test3.py" "-v"))))))
29534
29535(define-public python-dbfread
29536 (package
29537 (name "python-dbfread")
29538 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
29539 (revision . "0")))
29540 (version (git-version "2.0.7"
29541 (assoc-ref properties 'revision)
29542 (assoc-ref properties 'commit)))
29543 (source
29544 (origin
29545 (method git-fetch)
29546 (uri (git-reference
29547 (url "https://github.com/olemb/dbfread")
29548 (commit (assoc-ref properties 'commit))))
29549 (file-name (git-file-name name version))
29550 (sha256
29551 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
29552 (build-system pyproject-build-system)
29553 (arguments
29554 (list
29555 #:phases
29556 #~(modify-phases %standard-phases
29557 (add-after 'unpack 'relax-setup.py
29558 (lambda _
29559 (substitute* "setup.py"
29560 (("python_requires.*")
29561 "")))))))
29562 (native-inputs (list python-pytest python-setuptools))
29563 (home-page "https://dbfread.readthedocs.io")
29564 (synopsis "Read DBF Files with Python")
29565 (description
29566 "This library reads DBF files and returns the data as native Python data
29567types for further processing. It is primarily intended for batch jobs and
29568one-off scripts.")
29569 (license license:expat)))
29570
29571(define-public python-cached-property
29572 (package
29573 (name "python-cached-property")
29574 (version "2.0.1")
29575 (source
29576 (origin
29577 (method url-fetch)
29578 (uri (pypi-uri "cached_property" version))
29579 (sha256
29580 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
29581 (build-system pyproject-build-system)
29582 (native-inputs
29583 (list python-freezegun
29584 python-pytest
29585 python-setuptools
29586 python-wheel))
29587 (home-page "https://github.com/pydanny/cached-property")
29588 (synopsis "Decorator for caching properties in classes")
29589 (description
29590 "This package provides a decorator which makes caching
29591time-or-computationally-expensive properties quick and easy and works in
29592Python 2 or 3.")
29593 (license license:bsd-3)))
29594
29595(define-public python-folium
29596 (package
29597 (name "python-folium")
29598 (version "0.19.4")
29599 (source
29600 (origin
29601 ;; PyPI has a ".whl" file but not a proper source release.
29602 ;; Thus, fetch code from Git.
29603 (method git-fetch)
29604 (uri (git-reference
29605 (url "https://github.com/python-visualization/folium")
29606 (commit (string-append "v" version))))
29607 (file-name (git-file-name name version))
29608 (sha256
29609 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29610 (build-system pyproject-build-system)
29611 (arguments
29612 (list #:test-flags
29613 ;; This file requires Selenium.
29614 #~(list "--ignore" "tests/selenium/test_selenium.py"
29615 "-k" (string-append
29616 ;; The tests below also require Selenium.
29617 "not test__repr_png_is_bytes"
29618 " and not test_valid_png"
29619 " and not test_valid_png_size"
29620 " and not test_geojson"
29621 " and not test_heat_map_with_weights"
29622 ;; This performs an online request.
29623 " and not test_json_request"
29624 ;; Requires geodatasets package.
29625 " and not test_timedynamic_geo_json"
29626 ;; AssertionError.
29627 " and not test_minimap"))))
29628 (propagated-inputs
29629 (list python-branca
29630 python-jinja2
29631 python-numpy
29632 python-requests
29633 python-xyzservices))
29634 (native-inputs
29635 (list python-geopandas
29636 python-nbconvert
29637 python-pandas
29638 python-pillow
29639 python-pytest
29640 python-selenium
29641 python-setuptools
29642 python-setuptools-scm
29643 python-wheel))
29644 (home-page "https://github.com/python-visualization/folium")
29645 (synopsis "Make beautiful maps with Leaflet.js & Python")
29646 (description "@code{folium} makes it easy to visualize data that’s been
29647manipulated in Python on an interactive leaflet map. It enables both the
29648binding of data to a map for @code{choropleth} visualizations as well as
29649passing rich vector/raster/HTML visualizations as markers on the map.
29650
29651The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29652Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29653supports Image, Video, GeoJSON and TopoJSON overlays.")
29654 (license license:expat)))
29655
29656(define-public python-mercantile
29657 (package
29658 (name "python-mercantile")
29659 (version "1.2.1")
29660 (source
29661 (origin
29662 (method git-fetch)
29663 (uri (git-reference
29664 (url "https://github.com/mapbox/mercantile")
29665 (commit version)))
29666 (file-name (git-file-name name version))
29667 (sha256
29668 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29669 (build-system pyproject-build-system)
29670 (propagated-inputs (list python-click))
29671 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29672 python-setuptools))
29673 (home-page "https://github.com/mapbox/mercantile")
29674 (synopsis "Web mercator XYZ tile utilities")
29675 (description
29676 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29677@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29678left corner and bounding longitudes and latitudes for XYZ tiles, a
29679@code{xy(lng, lat)} function that returns spherical mercator x and y
29680coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29681containing a given point, and quadkey conversion functions
29682@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29683translating between quadkey and tile coordinates.")
29684 (license license:bsd-3)))
29685
29686(define-public jube
29687 (package
29688 ;; This is a command-line tool, so no "python-" prefix.
29689 (name "jube")
29690 (version "2.6.1")
29691 (source
29692 (origin
29693 (method url-fetch)
29694 (uri (string-append
29695 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29696 version))
29697 (sha256
29698 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29699 (file-name (string-append "jube-" version ".tar.gz"))))
29700 (build-system pyproject-build-system)
29701 (arguments
29702 (list
29703 #:tests? #f)) ; No tests.
29704 (propagated-inputs (list python-pyyaml))
29705 (native-inputs (list python-setuptools))
29706 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29707 (synopsis "Benchmarking environment")
29708 (description
29709 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29710benchmarked application, benchmark data is stored in a format that allows JUBE
29711to deduct the desired information. This data can be parsed by automatic pre-
29712and post-processing scripts that draw information and store it more densely
29713for manual interpretation.")
29714 (license license:gpl3+)))
29715
29716(define-public python-pyroutelib3
29717 (package
29718 (name "python-pyroutelib3")
29719 (version "2.0.0")
29720 (source
29721 (origin
29722 (method git-fetch)
29723 (uri (git-reference
29724 (url "https://github.com/MKuranowski/pyroutelib3")
29725 (commit (string-append "v" version))))
29726 (file-name (git-file-name name version))
29727 (sha256
29728 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29729 (build-system pyproject-build-system)
29730 (propagated-inputs (list python-dateutil python-protobuf-5))
29731 (native-inputs (list python-filelock python-flit-core python-pytest))
29732 (home-page "https://github.com/MKuranowski/pyroutelib3")
29733 (synopsis "Library for simple routing on OSM data")
29734 (description "Library for simple routing on OSM data")
29735 (license license:gpl3+)))
29736
29737(define-public python-bibtexparser
29738 (package
29739 (name "python-bibtexparser")
29740 (version "2.0.0b9")
29741 (source
29742 (origin
29743 (method git-fetch)
29744 (uri (git-reference
29745 (url "https://github.com/sciunto-org/python-bibtexparser")
29746 (commit (string-append "v" version))))
29747 (file-name (git-file-name name version))
29748 (sha256
29749 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29750 (build-system pyproject-build-system)
29751 (propagated-inputs (list python-pylatexenc python-pyparsing))
29752 (native-inputs
29753 (list python-pylatexenc python-pytest python-setuptools))
29754 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29755 (synopsis "Python library to parse BibTeX files")
29756 (description "BibtexParser is a Python library to parse BibTeX files.")
29757 (license (list license:bsd-3 license:lgpl3))))
29758
29759(define-public python-bibtexparser-for-cobib
29760 (hidden-package
29761 (package
29762 (inherit python-bibtexparser)
29763 (name "python-bibtexparser")
29764 (version "1.4.0")
29765 (source
29766 (origin
29767 (method git-fetch)
29768 (uri (git-reference
29769 (url "https://github.com/sciunto-org/python-bibtexparser")
29770 (commit (string-append "v" version))))
29771 (file-name (git-file-name name version))
29772 (sha256
29773 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29774
29775(define-public python-distro
29776 (package
29777 (name "python-distro")
29778 (version "1.9.0")
29779 (source
29780 (origin
29781 (method url-fetch)
29782 (uri (pypi-uri "distro" version))
29783 (sha256
29784 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29785 (build-system pyproject-build-system)
29786 (arguments
29787 (list
29788 #:test-flags
29789 #~(list "-k" (string-join
29790 ;; We are not on Ubunto distro:
29791 ;; AssertionError: assert '' == 'ubuntu'.
29792 (list "not test_ubuntu14normal_lsb_release"
29793 "test_trailingblanks_lsb_release"
29794 "test_ubuntu14nomodules_lsb_release")
29795 " and not "))))
29796 (native-inputs
29797 (list python-pytest
29798 python-setuptools))
29799 (home-page "https://github.com/python-distro/distro")
29800 (synopsis "OS platform information API")
29801 (description
29802 "@code{distro} provides information about the OS distribution it runs on,
29803such as a reliable machine-readable ID, or version information.
29804
29805It is the recommended replacement for Python's original
29806`platform.linux_distribution` function (which will be removed in Python 3.8).
29807@code{distro} also provides a command-line interface to output the platform
29808information in various formats.")
29809 (license license:asl2.0)))
29810
29811(define-public python-cairosvg
29812 (package
29813 (name "python-cairosvg")
29814 (version "2.8.2")
29815 (source
29816 (origin
29817 (method url-fetch)
29818 (uri (pypi-uri "cairosvg" version))
29819 (sha256
29820 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29821 (build-system pyproject-build-system)
29822 (arguments
29823 (list #:test-flags #~(list "cairosvg/test_api.py")))
29824 (native-inputs
29825 (list python-pytest
29826 python-setuptools))
29827 (propagated-inputs
29828 (list python-cairocffi
29829 python-cssselect2
29830 python-defusedxml
29831 python-pillow
29832 python-tinycss2))
29833 (home-page "https://cairosvg.org/")
29834 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29835 (description "CairoSVG is a SVG converter based on Cairo. It can export
29836SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29837SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29838parsed, the result is drawn to a Cairo surface that can be exported to
29839qvarious formats: PDF, PostScript, PNG and even SVG.")
29840 (license license:lgpl3+)))
29841
29842(define-public python-pyphen
29843 (package
29844 (name "python-pyphen")
29845 (version "0.17.2")
29846 (source
29847 (origin
29848 (method git-fetch)
29849 (uri (git-reference
29850 (url "https://github.com/Kozea/Pyphen")
29851 (commit version)))
29852 (file-name (git-file-name name version))
29853 (sha256
29854 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29855 (build-system pyproject-build-system)
29856 (native-inputs (list python-flit-core python-pytest))
29857 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29858 ;; embedded set provided by upstream - like Debian does.
29859 (home-page "https://github.com/Kozea/Pyphen")
29860 (synopsis "Pure Python module to hyphenate text")
29861 (description "Pyphen is a pure Python module to hyphenate text using
29862existing Hunspell hyphenation dictionaries.")
29863 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29864
29865(define-public python-intelhex
29866 (package
29867 (name "python-intelhex")
29868 (version "2.3.0")
29869 (source
29870 (origin
29871 (method git-fetch)
29872 (uri (git-reference
29873 (url "https://github.com/python-intelhex/intelhex")
29874 (commit version)))
29875 (file-name (git-file-name name version))
29876 (sha256
29877 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29878 (build-system pyproject-build-system)
29879 (arguments (list #:test-backend #~'unittest))
29880 (native-inputs (list python-setuptools))
29881 (home-page "https://github.com/python-intelhex/intelhex")
29882 (synopsis "Python library for Intel HEX files manipulations")
29883 (description
29884 "The Intel HEX file format is widely used in microprocessors and
29885microcontrollers area (embedded systems etc.) as the de facto standard for
29886representation of code to be programmed into microelectronic devices. This
29887package provides an intelhex Python library to read, write, create from
29888scratch and manipulate data from Intel HEX file format. It also includes
29889several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29890converters and more, those based on the library itself.")
29891 (license license:bsd-3)))
29892
29893(define-public python-interlap
29894 (package
29895 (name "python-interlap")
29896 (version "0.2.7")
29897 (source
29898 (origin
29899 (method git-fetch)
29900 (uri (git-reference
29901 (url "https://github.com/brentp/interlap")
29902 (commit (string-append "v" version))))
29903 (file-name (git-file-name name version))
29904 (sha256
29905 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29906 (build-system pyproject-build-system)
29907 (arguments
29908 (list
29909 #:test-backend #~'custom
29910 #:test-flags #~(list "interlap.py")))
29911 (native-inputs (list python-setuptools))
29912 (home-page "https://brentp.github.io/interlap")
29913 (synopsis "Fast, simple interval overlap testing")
29914 (description
29915 "InterLap does fast interval overlap testing with a simple Python data
29916structure.")
29917 (license license:expat)))
29918
29919(define-public python-pykwalify
29920 (package
29921 (name "python-pykwalify")
29922 (version "1.8.0")
29923 (source
29924 (origin
29925 (method git-fetch)
29926 (uri (git-reference
29927 (url "https://github.com/grokzen/pykwalify")
29928 (commit version)))
29929 (file-name (git-file-name name version))
29930 (sha256
29931 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29932 (build-system pyproject-build-system)
29933 (arguments
29934 (list
29935 #:test-flags
29936 ;; XXX: yaml safe_dump() has been removed.
29937 #~(list "--ignore=tests/test_unicode.py"
29938 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29939 (native-inputs
29940 (list python-pytest python-setuptools python-testfixtures))
29941 (propagated-inputs
29942 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29943 (home-page "https://github.com/grokzen/pykwalify")
29944 (synopsis "Python lib/cli for JSON/YAML schema validation")
29945 (description
29946 "This package provides a parser, schema validator, and data binding tool
29947for YAML and JSON.")
29948 (license license:expat)))
29949
29950(define-public python-pykakasi
29951 (package
29952 (name "python-pykakasi")
29953 (version "2.3.0")
29954 (source
29955 (origin
29956 (method url-fetch)
29957 (uri (pypi-uri "pykakasi" version))
29958 (sha256
29959 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29960 (build-system pyproject-build-system)
29961 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29962 (propagated-inputs (list python-deprecated python-importlib-resources
29963 python-jaconv))
29964 (native-inputs (list python-coverage
29965 python-py-cpuinfo
29966 python-pytest
29967 python-pytest-benchmark
29968 python-setuptools
29969 python-setuptools-scm
29970 python-wheel))
29971 (home-page "https://codeberg.org/miurahr/pykakasi")
29972 (synopsis "Kana kanji simple inversion library")
29973 (description
29974 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29975Language Processing} library to transliterate hiragana, katakana and
29976kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29977characters in NFC form.
29978
29979Its algorithms are based on the kakasi library, which is written in C.")
29980 (license license:gpl3+)))
29981
29982(define-public python-dbus
29983 (package
29984 (name "python-dbus")
29985 (version "1.3.2")
29986 (source
29987 (origin
29988 (method url-fetch)
29989 (uri (pypi-uri "dbus-python" version))
29990 (sha256
29991 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29992 (build-system pyproject-build-system)
29993 (arguments
29994 (list
29995 #:tests? #f ;XXX: Tests require setup
29996 #:phases
29997 #~(modify-phases %standard-phases
29998 (add-after 'unpack 'patch-requirements
29999 (lambda _
30000 (substitute* (list "pyproject.toml" "setup.py")
30001 (("'(ninja|patchelf)',?") ""))
30002 (substitute* "setup.cfg"
30003 (("(ninja|patchelf)") "")))))))
30004 (native-inputs
30005 (list pkg-config
30006 meson
30007 ninja/pinned
30008 patchelf
30009 python-meson
30010 python-setuptools
30011 python-tappy))
30012 (inputs
30013 (list dbus glib))
30014 (propagated-inputs
30015 (list python-pygobject))
30016 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
30017 (synopsis "Python bindings for libdbus")
30018 (description
30019 "This package provides Python bindings to libdbus, the reference
30020implementation of the D-Bus protocol.")
30021 (license license:expat)))
30022
30023;; Added on 2026-01-05
30024(define-deprecated-package python-dbus-python python-dbus)
30025
30026(define python-dbusmock-patch-paths-phase
30027 #~(lambda* (#:key inputs #:allow-other-keys)
30028 (substitute* "tests/test_api.py"
30029 (("/usr/bin/python3")
30030 (which "python3")))
30031 (substitute* "dbusmock/testcase.py"
30032 (("\"dbus-daemon\"")
30033 (object->string
30034 (search-input-file inputs "/bin/dbus-daemon"))))))
30035
30036(define-public python-dbusmock
30037 (package
30038 (name "python-dbusmock")
30039 (version "0.37.2")
30040 (source
30041 (origin
30042 (method git-fetch)
30043 (uri (git-reference
30044 (url "https://github.com/martinpitt/python-dbusmock")
30045 (commit version)))
30046 (file-name (git-file-name name version))
30047 (sha256
30048 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30049 (build-system pyproject-build-system)
30050 (arguments
30051 (list
30052 #:modules `((guix build pyproject-build-system)
30053 (guix build utils)
30054 (ice-9 match))
30055 #:phases
30056 #~(modify-phases %standard-phases
30057 (add-after 'unpack 'patch-paths
30058 #$python-dbusmock-patch-paths-phase)
30059 (replace 'check
30060 (lambda* (#:key tests? #:allow-other-keys)
30061 (when tests?
30062 (match (primitive-fork)
30063 (0 ;child process
30064 (execlp "pytest" "pytest" "-vv"))
30065 (pytest-pid
30066 (let loop ()
30067 ;; Reap child processes; otherwise, python-dbusmock
30068 ;; would waste time polling for the dbus processes
30069 ;; it spawns to be reaped, in vain.
30070 (match (waitpid WAIT_ANY)
30071 ((pid . status)
30072 (if (= pid pytest-pid)
30073 (unless (zero? status)
30074 (error "`pytest' exited with status"
30075 status))
30076 (loop)))))))))))))
30077 (native-inputs (list python-pytest python-setuptools upower which))
30078 (inputs (list dbus))
30079 (propagated-inputs (list python-dbus python-pygobject))
30080 (home-page "https://github.com/martinpitt/python-dbusmock")
30081 (synopsis "Python library for mock D-Bus objects")
30082 (description
30083 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
30084This is useful for writing tests for software which talks to D-Bus services
30085such as upower, systemd, logind, gnome-session or others, and it is hard (or
30086impossible without root privileges) to set the state of the real services to
30087what you expect in your tests.")
30088 (license license:lgpl3+)))
30089
30090(define-public python-dbusmock-for-tests
30091 (package
30092 (inherit python-dbusmock)
30093 (name "python-dbusmock-for-tests")
30094 (version "0.37.2")
30095 (source
30096 (origin
30097 (method git-fetch)
30098 (uri (git-reference
30099 (url "https://github.com/martinpitt/python-dbusmock")
30100 (commit version)))
30101 (file-name (git-file-name name version))
30102 (sha256
30103 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
30104 (arguments
30105 (list
30106 #:tests? #f
30107 #:phases
30108 #~(modify-phases %standard-phases
30109 (add-after 'unpack 'patch-paths
30110 #$python-dbusmock-patch-paths-phase))))
30111 (native-inputs (list python-setuptools which))
30112 (properties '((hidden? . #t)))))
30113
30114;; XXX: Deprecated on <2026-01-21>.
30115(define-deprecated/public-alias python-dbusmock-minimal
30116 python-dbusmock-for-tests)
30117
30118(define-public python-jsonplus
30119 (package
30120 (name "python-jsonplus")
30121 (home-page "https://github.com/randomir/jsonplus")
30122 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
30123 (revision . "0")))
30124 (version (git-version "0.8.0"
30125 (assoc-ref properties 'revision)
30126 (assoc-ref properties 'commit)))
30127 (source
30128 (origin
30129 (method git-fetch)
30130 (uri (git-reference
30131 (url home-page)
30132 (commit (assoc-ref properties 'commit))))
30133 (file-name (git-file-name name version))
30134 (sha256
30135 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
30136 (build-system pyproject-build-system)
30137 (arguments
30138 (list
30139 ;; XXX: Tests require the additional package moneyed.
30140 #:tests? #f
30141 #:phases
30142 #~(modify-phases %standard-phases
30143 (add-after 'unpack 'chdir
30144 (lambda _
30145 (chdir "python"))))))
30146 (native-inputs (list python-setuptools))
30147 (propagated-inputs
30148 (list python-dateutil python-simplejson python-sortedcontainers))
30149 (synopsis "Serialize Python types to/from JSON")
30150 (description
30151 "This package provides functionality to serialize arbitrary data types
30152to and from JSON. Common data types are implemented and it is easy to
30153register custom encoders and decoders.")
30154 (license license:expat)))
30155
30156(define-public python-ioctl-opt
30157 (package
30158 (name "python-ioctl-opt")
30159 (version "1.3")
30160 (source
30161 (origin
30162 (method url-fetch)
30163 (uri (pypi-uri "ioctl-opt" version))
30164 (sha256
30165 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
30166 (build-system pyproject-build-system)
30167 (arguments
30168 (list #:tests? #f)) ;no tests
30169 (native-inputs (list python-setuptools))
30170 (home-page "http://github.com/vpelletier/python-ioctl-opt")
30171 (synopsis "Functions to compute fnctl.ioctl's opt argument")
30172 (description
30173 "This package provides functions to compute fnctl.ioctl's opt argument.")
30174 (license license:gpl2+)))
30175
30176(define-public python-anyio
30177 (package
30178 (name "python-anyio")
30179 (version "4.12.1")
30180 (source
30181 (origin
30182 (method url-fetch)
30183 (uri (pypi-uri "anyio" version))
30184 (sha256
30185 (base32
30186 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
30187 (patches
30188 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
30189 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
30190 (build-system pyproject-build-system)
30191 (arguments
30192 (list
30193 ;; tests:
30194 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
30195 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
30196 #:test-flags
30197 #~(list "-m" "not network"
30198 ;; Tests are shaky with a lot of DNS lookups.
30199 "--ignore=tests/test_sockets.py"
30200 #$@(map (lambda (ls)
30201 (string-append "--deselect=" (string-join ls "::")))
30202 (append
30203 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
30204 ;; timeout expired running: <...>
30205 '(("tests/test_pytest_plugin.py"
30206 "test_keyboardinterrupt_during_test"))
30207 (if (target-aarch64?)
30208 ;; Assertions are not equal on ARM.
30209 '(("tests/streams/test_tls.py"
30210 "TestTLSListener"
30211 "test_handshake_fail")
30212 ("tests/test_taskgroups.py"
30213 "test_shielded_cancel_sleep_time")
30214 ("tests/test_to_thread.py"
30215 "test_run_in_custom_limiter")
30216 ("tests/test_to_thread.py"
30217 "TestBlockingPortalProvider"
30218 "test_single_thread"))
30219 '()))))))
30220 (propagated-inputs
30221 (list python-idna
30222 python-sniffio
30223 python-typing-extensions))
30224 (native-inputs
30225 (list python-blockbuster
30226 python-psutil
30227 python-pytest
30228 python-pytest-mock
30229 python-setuptools
30230 python-setuptools-scm
30231 python-trio
30232 python-trustme
30233 python-truststore
30234 python-uvloop))
30235 (home-page "https://anyio.readthedocs.io")
30236 (synopsis "Compatibility layer for multiple asynchronous event loops")
30237 (description
30238 "AnyIO is an asynchronous networking and concurrency library that works
30239on top of either asyncio or trio. It implements trio-like structured
30240concurrency on top of asyncio, and works in harmony with the native SC of trio
30241itself.")
30242 (license license:expat)))
30243
30244(define-public python-argh
30245 (package
30246 (name "python-argh")
30247 (version "0.31.3")
30248 (source
30249 (origin
30250 (method url-fetch)
30251 (uri (pypi-uri "argh" version))
30252 (sha256
30253 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
30254 (build-system pyproject-build-system)
30255 (native-inputs (list python-flit-core python-pytest))
30256 (home-page "https://github.com/neithere/argh/")
30257 (synopsis "Argparse wrapper with natural syntax")
30258 (description
30259 "Argh is a small library that provides several layers of abstraction
30260on top of @code{python-argparse}. The layers can be mixed. It is always
30261possible to declare a command with the highest possible (and least flexible)
30262layer and then tune the behaviour with any of the lower layers including the
30263native API of @code{python-argparse}.")
30264 (license license:lgpl3+)))
30265
30266(define-public python-pox
30267 (package
30268 (name "python-pox")
30269 (version "0.3.6")
30270 (source
30271 (origin
30272 (method url-fetch)
30273 (uri (pypi-uri "pox" version))
30274 (sha256
30275 (base32
30276 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
30277 (build-system pyproject-build-system)
30278 (arguments
30279 (list
30280 #:phases
30281 #~(modify-phases %standard-phases
30282 (replace 'check
30283 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30284 (when tests?
30285 (mkdir-p "/tmp/guix")
30286 (setenv "SHELL" "bash")
30287 (setenv "USERNAME" "guix")
30288 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
30289 (invoke "python" "./pox/tests/__main__.py")))))))
30290 (native-inputs
30291 (list python-setuptools
30292 which)) ;pox/tests/test_shutils.py
30293 (home-page "https://pypi.org/project/pox/")
30294 (synopsis "Python utilities for file system exploration and automated builds")
30295 (description
30296 "Pox provides a collection of utilities for navigating and manipulating
30297file systems. This module is designed to facilitate some of the low-level
30298operating system interactions that are useful when exploring a file system on a
30299remote host. Pox provides Python equivalents of several shell commands such
30300as @command{which} and @command{find}. These commands allow automated
30301discovery of what has been installed on an operating system, and where the
30302essential tools are located.")
30303 (license license:bsd-3)))
30304
30305(define-public python-flit
30306 (package
30307 (name "python-flit")
30308 (version "3.12.0") ;same as python-flit-core
30309 (source
30310 (origin
30311 (method url-fetch)
30312 (uri (pypi-uri "flit" version))
30313 (sha256
30314 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
30315 (build-system pyproject-build-system)
30316 (arguments
30317 (list
30318 #:test-flags
30319 ;; These tests fail when FLIT_NO_NETWORK is set
30320 '(list "-k" "not test_invalid_classifier \
30321and not test_install_requires \
30322and not test_install_requires_extra \
30323and not test_validate_classifiers_private")
30324 #:phases
30325 #~(modify-phases %standard-phases
30326 (add-after 'unpack 'relax-pip-requirement
30327 ;; python -m pip is available by default, no need to
30328 ;; propagate pip.
30329 (lambda _
30330 (substitute* "pyproject.toml"
30331 (("\"pip\",")
30332 ""))))
30333 (add-before 'check 'pre-check
30334 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30335 (when tests?
30336 (setenv "HOME" "/tmp")
30337 (setenv "FLIT_NO_NETWORK" "1")))))))
30338 (propagated-inputs
30339 (list python-tomli-w
30340 python-flit-core
30341 python-docutils
30342 python-requests))
30343 (native-inputs
30344 (list python-responses
30345 python-pytest
30346 python-testpath))
30347 (home-page "https://flit.readthedocs.io/")
30348 (synopsis "Simple packaging tool for simple packages")
30349 (description "Flit is a simple way to put Python packages and modules on
30350PyPI. Flit packages a single importable module or package at a time, using
30351the import name as the name on PyPI. All subpackages and data files within a
30352package are included automatically.")
30353 (license license:bsd-3)))
30354
30355(define-public python-fastentrypoints
30356 (package
30357 (name "python-fastentrypoints")
30358 (home-page "https://github.com/ninjaaron/fast-entry_points")
30359 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
30360 (revision . "0")))
30361 (version (git-version "0.12"
30362 (assoc-ref properties 'revision)
30363 (assoc-ref properties 'commit)))
30364 (source
30365 (origin
30366 (method git-fetch)
30367 (uri (git-reference
30368 (url home-page)
30369 (commit (assoc-ref properties 'commit))))
30370 (file-name (git-file-name name version))
30371 (sha256
30372 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
30373 (build-system pyproject-build-system)
30374 (arguments
30375 (list
30376 ;; XXX: Testing is non-standard and hardly configurable.
30377 #:tests? #f
30378 #:test-backend #~'custom
30379 #:test-flags #~(list "test/runtest.py")))
30380 (native-inputs (list python-setuptools))
30381 (synopsis "Makes entry_points specified in setup.py load more quickly")
30382 (description
30383 "Using entry_points in your setup.py makes scripts that start really
30384slowly because it imports pkg_resources. This package allows such setup
30385scripts to load entry points more quickly.")
30386 (license license:bsd-3)))
30387
30388(define-public python-funcparserlib
30389 (package
30390 (name "python-funcparserlib")
30391 (version "1.0.1")
30392 (source
30393 (origin
30394 ;; Source tarball on PyPi lacks tests.
30395 (method git-fetch)
30396 (uri (git-reference
30397 (url "https://github.com/vlasovskikh/funcparserlib")
30398 (commit version)))
30399 (file-name (git-file-name name version))
30400 (sha256
30401 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
30402 (build-system pyproject-build-system)
30403 (arguments
30404 '(#:phases
30405 (modify-phases %standard-phases
30406 (replace 'check
30407 (lambda* (#:key tests? #:allow-other-keys)
30408 (when tests?
30409 (invoke "python" "-m" "unittest" "discover" "-v")))))))
30410 ;; ModuleNotFoundError: No module named 'poetry'
30411 (native-inputs (list python-poetry-core python-six))
30412 (home-page "https://github.com/vlasovskikh/funcparserlib")
30413 (synopsis
30414 "Recursive descent parsing library based on functional combinators")
30415 (description
30416 "This package is a recursive descent parsing library for Python based on
30417functional combinators. Parser combinators are just higher-order functions
30418that take parsers as their arguments and return them as result values.")
30419 (license license:expat)))
30420
30421(define-public python-cson
30422 (package
30423 (name "python-cson")
30424 (version "0.8")
30425 (source
30426 (origin
30427 (method git-fetch)
30428 (uri (git-reference
30429 (url "https://github.com/avakar/pycson")
30430 (commit version)))
30431 (file-name (git-file-name name version))
30432 (sha256
30433 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
30434 (build-system pyproject-build-system)
30435 (native-inputs (list python-pytest python-setuptools python-wheel))
30436 (propagated-inputs (list python-speg))
30437 (home-page "https://github.com/avakar/pycson")
30438 (synopsis "Parser for Coffeescript Object Notation (CSON)")
30439 (description
30440 "This package is a parser for Coffeescript Object Notation (CSON).")
30441 (license license:expat)))
30442
30443(define-public python-aionotify
30444 (package
30445 (name "python-aionotify")
30446 (version "0.3.1")
30447 (source
30448 (origin
30449 ;; Source tarball on PyPi lacks tests
30450 (method git-fetch)
30451 (uri (git-reference
30452 (url "https://github.com/rbarrois/aionotify")
30453 (commit version)))
30454 (file-name (git-file-name name version))
30455 (sha256
30456 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
30457 (build-system pyproject-build-system)
30458 (native-inputs
30459 (list python-pytest
30460 python-setuptools
30461 python-wheel))
30462 (home-page "https://github.com/rbarrois/aionotify")
30463 (synopsis "inotify library for Python")
30464 (description
30465 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
30466 (license license:bsd-3)))
30467
30468(define-public python-forbiddenfruit
30469 (package
30470 (name "python-forbiddenfruit")
30471 (version "0.1.4")
30472 (source
30473 (origin
30474 (method git-fetch)
30475 (uri (git-reference
30476 (url "https://github.com/clarete/forbiddenfruit")
30477 (commit version)))
30478 (file-name (git-file-name name version))
30479 (sha256
30480 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
30481 (build-system pyproject-build-system)
30482 (arguments
30483 (list
30484 #:phases
30485 #~(modify-phases %standard-phases
30486 (replace 'check
30487 (lambda* (#:key tests? #:allow-other-keys)
30488 (when tests?
30489 (invoke "make" "prepare" "SKIP_DEPS=1")
30490 (invoke "nosetests")))))))
30491 (native-inputs (list python-pynose python-setuptools))
30492 (home-page "https://github.com/clarete/forbiddenfruit")
30493 (synopsis "Patch python built-in objects")
30494 (description "This project allows Python code to extend built-in types.")
30495 (license (list license:gpl3+ license:expat))))
30496
30497(define-public python-k5test
30498 (package
30499 (name "python-k5test")
30500 (version "0.10.4")
30501 (source
30502 (origin
30503 (method url-fetch)
30504 (uri (pypi-uri "k5test" version))
30505 (sha256
30506 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
30507 (build-system pyproject-build-system)
30508 (arguments
30509 (list #:tests? #f)) ;no tests
30510 (native-inputs
30511 (list python-setuptools))
30512 (inputs
30513 (list mit-krb5))
30514 (home-page "https://github.com/pythongssapi/k5test")
30515 (synopsis "Library for setting up self-contained Kerberos 5 environments")
30516 (description
30517 "@code{k5test} is a library for setting up self-contained Kerberos 5
30518environments, and running Python unit tests inside those environments. It is
30519based on the file of the same name found alongside the MIT Kerberos 5 unit
30520tests.")
30521 (license license:isc)))
30522
30523(define-public python-gssapi
30524 (package
30525 (name "python-gssapi")
30526 (version "1.10.0")
30527 (source
30528 (origin
30529 (method url-fetch)
30530 (uri (pypi-uri "gssapi" version))
30531 (sha256
30532 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
30533 (build-system pyproject-build-system)
30534 (arguments
30535 (list #:test-flags #~(list "--pyargs" "gssapi")))
30536 (native-inputs
30537 (list python-cython
30538 python-k5test
30539 python-parameterized
30540 python-pytest
30541 python-setuptools))
30542 (inputs
30543 (list mit-krb5))
30544 (propagated-inputs
30545 (list python-decorator))
30546 (home-page "https://github.com/pythongssapi/python-gssapi")
30547 (synopsis "Python GSSAPI Wrapper")
30548 (description
30549 "Python-GSSAPI provides both low-level and high level wrappers around the
30550GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
30551also be usable with other GSSAPI mechanisms.")
30552 (license license:isc)))
30553
30554(define-public python-check-manifest
30555 (package
30556 (name "python-check-manifest")
30557 (version "0.51")
30558 (source
30559 (origin
30560 (method url-fetch)
30561 (uri (pypi-uri "check_manifest" version))
30562 (sha256
30563 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
30564 (build-system pyproject-build-system)
30565 (arguments
30566 (list
30567 ;; tests: 127 passed, 20 skipped, 2 deselected
30568 #:test-flags
30569 ;; This tests requires setting up a venv which does not work
30570 ;; properly in the build environment.
30571 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
30572 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
30573 (native-inputs
30574 (list git-minimal/pinned python-pytest))
30575 (propagated-inputs
30576 (list python-pypa-build python-setuptools))
30577 (home-page "https://github.com/mgedmin/check-manifest")
30578 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30579 (description "Python package can include a MANIFEST.in file to help with
30580sending package files to the Python Package Index. This package checks that
30581file to ensure it completely and accurately describes your project.")
30582 (license license:expat)))
30583
30584(define-public python-android-stringslib
30585 (package
30586 (name "python-android-stringslib")
30587 (version "0.1.2")
30588 (source
30589 (origin
30590 (method git-fetch)
30591 (uri (git-reference
30592 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30593 (commit (string-append "v" version))))
30594 (file-name (git-file-name name version))
30595 (sha256
30596 (base32
30597 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30598 (build-system pyproject-build-system)
30599 (arguments (list #:tests? #f)) ; No tests.
30600 (native-inputs (list python-setuptools))
30601 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30602 (synopsis "Android strings.xml support")
30603 (description
30604 "Android Strings Lib provides support for android's strings.xml files.
30605These files are used to translate strings in android apps.")
30606 (license license:expat)))
30607
30608(define-public offlate
30609 (package
30610 (name "offlate")
30611 (version "0.6.1")
30612 (source
30613 (origin
30614 (method git-fetch)
30615 (uri (git-reference
30616 (url "https://framagit.org/tyreunom/offlate")
30617 (commit version)))
30618 (file-name (git-file-name name version))
30619 (sha256
30620 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
30621 (build-system pyproject-build-system)
30622 (arguments
30623 (list
30624 #:tests? #f ; No tests.
30625 #:phases
30626 #~(modify-phases %standard-phases
30627 (add-before 'build 'generate-fonts
30628 (lambda _
30629 (invoke "make" "fonts")))
30630 (add-before 'build 'generate-translations
30631 (lambda _
30632 (invoke "make" "update-langs"))))))
30633 (propagated-inputs
30634 (list python-android-stringslib
30635 python-dateutil
30636 python-gitlab
30637 python-lxml
30638 python-polib
30639 python-pycountry
30640 python-pyenchant
30641 python-pygit2
30642 python-pygithub
30643 python-pyqt
30644 python-requests
30645 python-ruamel.yaml
30646 python-translate-toolkit-for-offlate
30647 python-translation-finder
30648 python-watchdog))
30649 (native-inputs (list qttools-5 fontforge python-setuptools))
30650 (home-page "https://framagit.org/tyreunom/offlate")
30651 (synopsis "Offline translation interface for online translation tools")
30652 (description
30653 "Offlate offers a unified interface for different translation file
30654formats, as well as many different online translation platforms. You can use
30655it to get work from online platforms, specialized such as the Translation
30656Project, or not such a gitlab instance when your upstream doesn't use any
30657dedicated platform. The tool proposes a unified interface for any format and
30658an upload option to send your work back to the platform.")
30659 (license license:gpl3+)))
30660
30661(define-public python-pypng
30662 (package
30663 (name "python-pypng")
30664 (version "0.20220715.0")
30665 (source
30666 (origin
30667 (method url-fetch)
30668 (uri (pypi-uri "pypng" version))
30669 (sha256
30670 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30671 (build-system pyproject-build-system)
30672 (arguments
30673 (list
30674 #:phases
30675 '(modify-phases %standard-phases
30676 (add-before 'check 'pre-check
30677 (lambda _
30678 (setenv "PYTHONPATH"
30679 (string-append (getcwd) "/code:"
30680 (getenv "GUIX_PYTHONPATH"))))))))
30681 (native-inputs (list python-pytest python-setuptools python-wheel))
30682 (home-page "https://github.com/drj11/pypng")
30683 (synopsis "Pure Python PNG image encoder/decoder")
30684 (description
30685 "The PyPNG module implements support for PNG images. It reads and writes
30686PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30687pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30688LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30689images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30690A number of optional chunks can be specified (when writing) and
30691understood (when reading): tRNS, bKGD, gAMA.
30692
30693PyPNG is not a high level toolkit for image processing (like PIL) and does not
30694aim at being a replacement or competitor. Its strength lies in fine-grained
30695extensive support of PNG features. It can also read and write Netpbm PAM
30696files, with a focus on its use as an intermediate format for implementing
30697custom PNG processing.")
30698 (license license:expat)))
30699
30700(define-public python-fuzzywuzzy
30701 (package
30702 (name "python-fuzzywuzzy")
30703 (version "0.18.0")
30704 (source
30705 (origin
30706 (method git-fetch)
30707 (uri (git-reference
30708 (url "https://github.com/seatgeek/fuzzywuzzy")
30709 (commit version)))
30710 (file-name (git-file-name name version))
30711 (sha256
30712 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30713 (build-system pyproject-build-system)
30714 (arguments
30715 (list
30716 #:test-flags
30717 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30718 (native-inputs
30719 (list python-hypothesis
30720 python-pycodestyle
30721 python-pytest
30722 python-setuptools))
30723 (propagated-inputs (list python-levenshtein))
30724 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30725 (synopsis "Fuzzy string matching in Python")
30726 (description
30727 "Approximate string matching using @emph{Levenshtein Distance} to
30728calculate the differences between sequences.")
30729 (license license:gpl2)))
30730
30731(define-public python-block-tracing
30732 (package
30733 (name "python-block-tracing")
30734 (version "1.0.1")
30735 (source
30736 (origin
30737 (method url-fetch)
30738 (uri (pypi-uri "block_tracing" version))
30739 (sha256
30740 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30741 (build-system pyproject-build-system)
30742 (arguments (list #:tests? #f)) ; No tests.
30743 (native-inputs (list python-setuptools))
30744 (home-page "https://github.com/rianhunter/block_tracing")
30745 (synopsis "Protect process memory")
30746 (description
30747 "@code{block_tracing} is a tiny Python library that can be used to
30748prevent debuggers and other applications from inspecting the memory within
30749your process.")
30750 (license license:expat)))
30751
30752(define-public python-json-e
30753 (package
30754 (name "python-json-e")
30755 (version "4.8.0")
30756 (source
30757 (origin
30758 (method git-fetch) ; no tests in PyPI release
30759 (uri (git-reference
30760 (url "https://github.com/json-e/json-e")
30761 (commit (string-append "v" version))))
30762 (file-name (git-file-name name version))
30763 (sha256
30764 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30765 (build-system pyproject-build-system)
30766 (arguments
30767 (list
30768 #:phases
30769 #~(modify-phases %standard-phases
30770 ;; Git repository provides implementations for JavaScript, Golang,
30771 ;; Python and Rust, pick "py".
30772 (add-before 'build 'chdir-to-py
30773 (lambda _
30774 (chdir "py"))))))
30775 (native-inputs
30776 (list python-freezegun
30777 python-pytest
30778 python-pyyaml
30779 python-setuptools
30780 python-wheel))
30781 (home-page "https://json-e.js.org")
30782 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30783 (description
30784 "This package provides a data-structure parameterization system written
30785for embedding context in JSON objects.")
30786 (license license:mpl2.0)))
30787
30788(define-public python-json-logger
30789 (package
30790 (name "python-json-logger")
30791 (version "4.0.0")
30792 (source
30793 (origin
30794 (method git-fetch)
30795 (uri (git-reference
30796 (url "https://github.com/nhairs/python-json-logger")
30797 (commit (string-append "v" version))))
30798 (file-name (git-file-name name version))
30799 (sha256
30800 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30801 (build-system pyproject-build-system)
30802 (native-inputs
30803 (list python-freezegun
30804 python-mike
30805 python-msgspec
30806 python-orjson
30807 python-pypa-build
30808 python-pytest
30809 python-setuptools
30810 python-tzdata
30811 python-validate-pyproject
30812 python-typing-extensions))
30813 (home-page "https://github.com/nhairs/python-json-logger")
30814 (synopsis "JSON log formatter in Python")
30815 (description "This library allows standard Python logging to output log data
30816as JSON objects. With JSON we can make our logs more readable by machines and
30817we can stop writing custom parsers for syslog-type records.")
30818 (license license:bsd-3)))
30819
30820(define-public python-daiquiri
30821 (package
30822 (name "python-daiquiri")
30823 (version "3.0.1")
30824 (source
30825 (origin
30826 (method git-fetch)
30827 (uri (git-reference
30828 (url "https://github.com/jd/daiquiri")
30829 (commit version)))
30830 (file-name (git-file-name name version))
30831 (sha256
30832 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30833 (build-system pyproject-build-system)
30834 (propagated-inputs (list python-json-logger))
30835 (native-inputs (list python-mock python-pytest python-setuptools
30836 python-setuptools-scm))
30837 (home-page "https://github.com/jd/daiquiri")
30838 (synopsis "Library to configure Python logging easily")
30839 (description
30840 "The daiquiri library provides an easy way to configure logging in
30841Python. It also provides some custom formatters and handlers.")
30842 (license license:asl2.0)))
30843
30844(define-public python-pifpaf
30845 (package
30846 (name "python-pifpaf")
30847 (version "3.4.0")
30848 (source
30849 (origin
30850 (method git-fetch)
30851 (uri (git-reference
30852 (url "https://github.com/jd/pifpaf")
30853 (commit version)))
30854 (file-name (git-file-name name version))
30855 (sha256
30856 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30857 (build-system pyproject-build-system)
30858 (arguments
30859 (list
30860 #:phases
30861 #~(modify-phases %standard-phases
30862 (add-after 'install 'install-drivers
30863 (lambda* (#:key inputs outputs #:allow-other-keys)
30864 (let ((site (site-packages inputs outputs)))
30865 (copy-recursively "pifpaf/drivers"
30866 (string-append site "/pifpaf/drivers/"))))))))
30867 (propagated-inputs
30868 (list python-click
30869 python-daiquiri
30870 python-fixtures
30871 python-jinja2
30872 python-pbr
30873 python-psutil
30874 python-xattr))
30875 (native-inputs
30876 (list python-mock
30877 python-stestr
30878 python-packaging
30879 python-requests
30880 python-testrepository
30881 python-testtools
30882 python-setuptools))
30883 (home-page "https://github.com/jd/pifpaf")
30884 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30885 (description
30886 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30887stops daemons for a quick throw-away usage. This is typically useful when
30888needing these daemons to run integration testing. It originally evolved from
30889its precursor @code{overtest}.")
30890 (license license:asl2.0)))
30891
30892(define-public python-pytest-check-links
30893 (package
30894 (name "python-pytest-check-links")
30895 (version "0.10.1")
30896 (source
30897 (origin
30898 (method url-fetch)
30899 (uri (pypi-uri "pytest_check_links" version))
30900 (sha256
30901 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30902 (build-system pyproject-build-system)
30903 (arguments
30904 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30905 (native-inputs
30906 (list python-hatchling))
30907 (propagated-inputs
30908 (list python-docutils
30909 python-html5lib
30910 python-nbconvert
30911 python-nbformat
30912 python-requests))
30913 (home-page "https://github.com/jupyterlab/pytest-check-links")
30914 (synopsis "Check links in files")
30915 (description "This package provides a pytest plugin that checks URLs for
30916HTML-containing files.")
30917 (license license:bsd-3)))
30918
30919(define-public python-json5
30920 (package
30921 (name "python-json5")
30922 (version "0.9.25")
30923 (source
30924 (origin
30925 ;; sample.json5 is missing from PyPi source tarball
30926 (method git-fetch)
30927 (uri (git-reference
30928 (url "https://github.com/dpranke/pyjson5")
30929 (commit (string-append "v" version))))
30930 (file-name (git-file-name name version))
30931 (sha256
30932 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30933 (build-system pyproject-build-system)
30934 (native-inputs (list python-pytest python-setuptools python-wheel))
30935 (home-page "https://github.com/dpranke/pyjson5")
30936 (synopsis "Python implementation of the JSON5 data format")
30937 (description
30938 "JSON5 extends the JSON data interchange format to make it slightly more
30939usable as a configuration language. This Python package implements parsing and
30940dumping of JSON5 data structures.")
30941 (license license:asl2.0)))
30942
30943(define-public python-farama-notifications
30944 (package
30945 (name "python-farama-notifications")
30946 (version "0.0.4")
30947 (source
30948 ;; The version on pypi does not include tests.
30949 (origin
30950 (method git-fetch)
30951 (uri (git-reference
30952 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30953 (commit version)))
30954 (file-name (git-file-name name version))
30955 (sha256
30956 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30957 (build-system pyproject-build-system)
30958 (arguments
30959 (list
30960 #:phases
30961 '(modify-phases %standard-phases
30962 (replace 'check
30963 (lambda* (#:key tests? #:allow-other-keys)
30964 (when tests?
30965 (invoke "python3" "tests/ci-test.py")))))))
30966 (native-inputs (list python-pytest python-setuptools python-wheel))
30967 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30968 (synopsis "Notifications for all Farama Foundation maintained libraries")
30969 (description
30970 "This package allows for providing notifications for all Farama
30971Foundation maintained libraries.")
30972 (license license:expat)))
30973
30974(define-public python-frontmatter
30975 (package
30976 (name "python-frontmatter")
30977 (version "1.3.0")
30978 (source
30979 (origin
30980 (method git-fetch)
30981 (uri (git-reference
30982 (url "https://github.com/eyeseast/python-frontmatter")
30983 (commit (string-append "v" version))))
30984 (file-name (git-file-name name version))
30985 (sha256
30986 (base32 "09kgl9kw96f1pyszqnm7slq1lw5nh4c8f59p6brz0ap2ydcfxykg"))))
30987 (build-system pyproject-build-system)
30988 (arguments
30989 (list
30990 #:build-backend "setuptools.build_meta")) ;requires uv_build
30991 (native-inputs
30992 (list python-hatchling
30993 python-pyaml
30994 python-pytest
30995 python-setuptools
30996 python-toml
30997 python-types-pyyaml
30998 python-types-toml))
30999 (propagated-inputs (list python-pyyaml))
31000 (home-page "https://github.com/eyeseast/python-frontmatter")
31001 (synopsis "Parse and manage posts with YAML (or other) frontmatter")
31002 (description
31003 "This package offers a useful way to add arbitrary, structured metadata
31004to text documents, regardless of type. This is a small package to load and
31005parse files (or just text) with YAML (or JSON, TOML or other) front matter.")
31006 (license license:expat)))
31007
31008(define-public python-frozendict
31009 (package
31010 (name "python-frozendict")
31011 (version "2.4.6")
31012 (source
31013 (origin
31014 (method url-fetch)
31015 (uri (pypi-uri "frozendict" version))
31016 (sha256
31017 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
31018 (build-system pyproject-build-system)
31019 (native-inputs
31020 (list python-pytest
31021 python-setuptools
31022 python-wheel))
31023 (home-page "https://github.com/Marco-Sulla/python-frozendict")
31024 (synopsis "Simple immutable mapping for Python")
31025 (description
31026 "@dfn{frozendict} is an immutable wrapper around dictionaries that
31027implements the complete mapping interface. It can be used as a drop-in
31028replacement for dictionaries where immutability is desired.")
31029 (license license:expat)))
31030
31031(define-public python-py-cpuinfo
31032 (package
31033 (name "python-py-cpuinfo")
31034 (version "9.0.0")
31035 (source
31036 (origin
31037 (method git-fetch)
31038 (uri (git-reference
31039 (url "https://github.com/workhorsy/py-cpuinfo")
31040 (commit (string-append "v" version))))
31041 (file-name (git-file-name name version))
31042 (sha256
31043 (base32
31044 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
31045 (build-system pyproject-build-system)
31046 (arguments
31047 (list #:test-backend #~'custom
31048 #:test-flags #~(list "test_suite.py")))
31049 (native-inputs
31050 (list python-setuptools))
31051 (home-page "https://github.com/workhorsy/py-cpuinfo")
31052 (synopsis "Get CPU info with Python")
31053 (description
31054 "This Python module returns the CPU info by using the best sources of
31055information for your operating system.")
31056 (license license:expat)))
31057
31058(define-public python-canonicaljson
31059 (package
31060 (name "python-canonicaljson")
31061 (version "2.0.0")
31062 (source
31063 (origin
31064 (method url-fetch)
31065 (uri (pypi-uri "canonicaljson" version))
31066 (sha256
31067 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
31068 (build-system pyproject-build-system)
31069 (arguments
31070 (list #:test-backend #~'unittest))
31071 (native-inputs
31072 (list python-setuptools))
31073 (home-page "https://github.com/matrix-org/python-canonicaljson")
31074 (synopsis "Canonical JSON")
31075 (description
31076 "Deterministically encode JSON.
31077
31078@itemize
31079@item Encodes objects and arrays as RFC 7159 JSON.
31080@item Sorts object keys so that you get the same result each time.
31081@item Has no insignificant whitespace to make the output as small as possible.
31082@item Escapes only the characters that must be escaped, U+0000 to
31083 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
31084@item Uses the shortest escape sequence for each escaped character.
31085@item Encodes the JSON as UTF-8.
31086@item Can encode frozendict immutable dictionaries.
31087@end itemize")
31088 (license license:asl2.0)))
31089
31090(define-public python-signedjson
31091 (package
31092 (name "python-signedjson")
31093 (version "1.1.4")
31094 (source
31095 (origin
31096 (method git-fetch)
31097 (uri (git-reference
31098 (url "https://github.com/matrix-org/python-signedjson")
31099 (commit (string-append "v" version))))
31100 (file-name (git-file-name name version))
31101 (sha256
31102 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
31103 (build-system pyproject-build-system)
31104 (propagated-inputs
31105 (list python-canonicaljson
31106 python-pynacl
31107 python-typing-extensions
31108 python-unpaddedbase64))
31109 (native-inputs
31110 (list python-pytest python-setuptools-scm python-setuptools))
31111 (home-page "https://github.com/matrix-org/python-signedjson")
31112 (synopsis "Sign JSON objects with ED25519 signatures")
31113 (description
31114 "Sign JSON objects with ED25519 signatures.
31115
31116@itemize
31117@item More than one entity can sign the same object.
31118@item Each entity can sign the object with more than one key making it easier to
31119rotate keys
31120@item ED25519 can be replaced with a different algorithm.
31121@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
31122key.
31123@end itemize")
31124 (license license:asl2.0)))
31125
31126(define-public python-daemonize
31127 (package
31128 (name "python-daemonize")
31129 (version "2.5.0")
31130 (source
31131 (origin
31132 (method git-fetch)
31133 (uri (git-reference
31134 (url "https://github.com/thesharp/daemonize")
31135 (commit (string-append "v" version))))
31136 (file-name (git-file-name name version))
31137 (sha256
31138 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
31139 (build-system pyproject-build-system)
31140 (arguments
31141 (list
31142 #:test-backend #~'custom
31143 #:test-flags #~(list "tests/test.py")
31144 #:phases
31145 #~(modify-phases %standard-phases
31146 (add-before 'check 'fix-tests
31147 (lambda _
31148 ;; XXX: nobody has group nogroup on Guix.
31149 (substitute* "tests/test.py"
31150 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
31151 (number->string (passwd:gid (getpw "nobody"))))))))))
31152 (native-inputs (list coreutils-minimal procps python-setuptools))
31153 (home-page "https://github.com/thesharp/daemonize")
31154 (synopsis "Library for writing system daemons in Python")
31155 (description
31156 "Daemonize is a library for writing system daemons in Python.")
31157 (license license:expat)))
31158
31159(define-public python-pymacaroons
31160 (package
31161 (name "python-pymacaroons")
31162 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
31163 (revision . "0")))
31164 (version (git-version "0.13.0"
31165 (assoc-ref properties 'revision)
31166 (assoc-ref properties 'commit)))
31167 (source
31168 (origin
31169 (method git-fetch)
31170 (uri (git-reference
31171 (url "https://github.com/ecordell/pymacaroons")
31172 (commit (assoc-ref properties 'commit))))
31173 (file-name (git-file-name name version))
31174 (sha256
31175 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
31176 (build-system pyproject-build-system)
31177 (arguments
31178 (list
31179 #:test-flags
31180 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
31181 ;; No module named 'hypothesis.specifiers'
31182 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
31183 (native-inputs
31184 (list python-hypothesis
31185 python-mock
31186 python-pytest
31187 python-setuptools))
31188 (propagated-inputs (list python-pynacl))
31189 (home-page "https://github.com/ecordell/pymacaroons")
31190 (synopsis "Python Macaroon Library")
31191 (description
31192 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
31193tokens, macaroons embed caveats that define specific authorization
31194requirements for the target service, the service that issued the root macaroon
31195and which is capable of verifying the integrity of macaroons it receives.
31196
31197Macaroons allow for delegation and attenuation of authorization. They are
31198simple and fast to verify, and decouple authorization policy from the
31199enforcement of that policy.")
31200 (license license:expat)))
31201
31202(define-public python-ldap3
31203 (package
31204 (name "python-ldap3")
31205 (version "2.9.1")
31206 (home-page "https://github.com/cannatag/ldap3")
31207 (source
31208 (origin
31209 (method git-fetch)
31210 (uri (git-reference (url home-page)
31211 (commit (string-append "v" version))))
31212 (file-name (git-file-name name version))
31213 (sha256
31214 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
31215 (build-system pyproject-build-system)
31216 (arguments
31217 (list
31218 #:tests? #f ;TODO: Tests need a real LDAP server to run
31219 #:test-backend #~'nose))
31220 (native-inputs
31221 (list python-pynose python-setuptools))
31222 (propagated-inputs
31223 (list python-gssapi python-pyasn1))
31224 (synopsis "Python LDAP client")
31225 (description
31226 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
31227library.")
31228 (license license:lgpl3+)))
31229
31230(define-public python-boltons
31231 (package
31232 (name "python-boltons")
31233 (version "25.0.0")
31234 (source
31235 (origin
31236 (method git-fetch)
31237 (uri (git-reference
31238 (url "https://github.com/mahmoud/boltons")
31239 (commit version)))
31240 (file-name (git-file-name name version))
31241 (sha256
31242 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
31243 (build-system pyproject-build-system)
31244 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
31245 (home-page "https://github.com/mahmoud/boltons")
31246 (synopsis "Extensions to the Python standard library")
31247 (description
31248 "Boltons is a set of over 230 pure-Python utilities in the same spirit
31249as — and yet conspicuously missing from — the standard library, including:
31250
31251@itemize
31252@item Atomic file saving, bolted on with fileutils
31253@item A highly-optimized OrderedMultiDict, in dictutils
31254@item Two types of PriorityQueue, in queueutils
31255@item Chunked and windowed iteration, in iterutils
31256@item Recursive data structure iteration and merging, with iterutils.remap
31257@item Exponential backoff functionality, including jitter, through
31258iterutils.backoff
31259@item A full-featured TracebackInfo type, for representing stack traces, in
31260tbutils
31261@end itemize")
31262 (license license:bsd-3)))
31263
31264(define-public python-eliot
31265 (package
31266 (name "python-eliot")
31267 (version "1.17.5")
31268 (source
31269 (origin
31270 (method url-fetch)
31271 (uri (pypi-uri "eliot" version))
31272 (sha256
31273 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
31274 (build-system pyproject-build-system)
31275 (arguments
31276 (list
31277 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
31278 ;; Two tests fail with error: TypeError: Unsupported type.
31279 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
31280 #:phases
31281 #~(modify-phases %standard-phases
31282 (add-after 'unpack 'remove-journald-support
31283 (lambda _
31284 (for-each delete-file
31285 '("eliot/tests/test_journald.py"
31286 "eliot/journald.py")))))))
31287 (native-inputs
31288 (list python-pytest
31289 python-setuptools
31290 python-testtools))
31291 (propagated-inputs
31292 (list python-boltons
31293 python-orjson
31294 python-pyrsistent
31295 python-zope-interface))
31296 (home-page "https://github.com/itamarst/eliot/")
31297 (synopsis "Eliot: the logging system that tells you why it happened")
31298 (description
31299 "@dfn{eliot} is a Python logging system that outputs causal chains of
31300actions: actions can spawn other actions, and eventually they either succeed
31301or fail. The resulting logs tell you the story of what your software did: what
31302happened, and what caused it.")
31303 (license license:asl2.0)))
31304
31305(define-public python-pem
31306 (package
31307 (name "python-pem")
31308 (version "23.1.0")
31309 (source
31310 (origin
31311 (method git-fetch)
31312 (uri (git-reference
31313 (url "https://github.com/hynek/pem")
31314 (commit version)))
31315 (file-name (git-file-name name version))
31316 (sha256
31317 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
31318 (build-system pyproject-build-system)
31319 (native-inputs
31320 (list nss-certs-for-test
31321 python-certifi
31322 python-hatch-fancy-pypi-readme
31323 python-hatch-vcs
31324 python-hatchling
31325 python-pretend
31326 python-pyopenssl
31327 python-pytest
31328 python-twisted))
31329 (home-page "https://pem.readthedocs.io/")
31330 (synopsis "Easy PEM file parsing in Python")
31331 (description
31332 "This package provides a Python module for parsing and splitting PEM files.")
31333 (license license:expat)))
31334
31335(define-public python-pysaml2
31336 (package
31337 (name "python-pysaml2")
31338 (version "7.5.4")
31339 (source
31340 (origin
31341 (method git-fetch)
31342 (uri (git-reference
31343 (url "https://github.com/IdentityPython/pysaml2")
31344 (commit (string-append "v" version))))
31345 (file-name (git-file-name name version))
31346 (sha256
31347 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
31348 (build-system pyproject-build-system)
31349 (arguments
31350 (list
31351 #:test-flags
31352 #~(list "-k"
31353 (string-join
31354 ;; XXX: encryption failures
31355 (list "not test_encrypted_response_6"
31356 "test_validate_cert_chains"
31357 "test_validate_with_root_cert"
31358 ;; XXX: xml parsing error
31359 "test_namespace_processing") " and not "))
31360 #:phases
31361 #~(modify-phases %standard-phases
31362 (add-after 'unpack 'relax-requirements
31363 (lambda _
31364 (substitute* "pyproject.toml"
31365 (("\"(pyopenssl|xmlschema).*\"" _ dep)
31366 (format #f "~s" dep))))))))
31367 (native-inputs (list python-poetry-core python-pytest))
31368 (propagated-inputs
31369 (list python-cryptography
31370 python-dateutil
31371 python-defusedxml
31372 python-pymongo
31373 python-pyopenssl
31374 python-responses
31375 python-requests
31376 python-xmlschema
31377 python-xmlsec))
31378 (home-page "https://idpy.org")
31379 (synopsis "Python implementation of SAML Version 2 Standard")
31380 (description
31381 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
31382It contains all necessary pieces for building a SAML2 service provider or
31383an identity provider. The distribution contains examples of both.
31384
31385This package was originally written to work in a WSGI environment, but
31386there are extensions that allow you to use it with other frameworks.")
31387 (license license:asl2.0)))
31388
31389;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
31390;; This PyPI package is no longer actively maintained, but the underlying
31391;; library can be vendored.
31392;;
31393;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
31394;; pyproject.toml) and can't be used as a common input, do not update this
31395;; package.
31396(define-public python-click-plugins
31397 (package
31398 (name "python-click-plugins")
31399 (version "1.1.1.2")
31400 (source
31401 (origin
31402 (method git-fetch)
31403 (uri (git-reference
31404 (url "https://github.com/click-contrib/click-plugins")
31405 (commit version)))
31406 (file-name (git-file-name name version))
31407 (sha256
31408 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
31409 (build-system pyproject-build-system)
31410 (arguments
31411 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
31412 (native-inputs
31413 (list python-setuptools))
31414 (propagated-inputs
31415 (list python-click))
31416 (synopsis "Extension for Click to register external CLI commands")
31417 (description
31418 "This package provides n extension module for Click to register external
31419CLI commands via setuptools entry-points.")
31420 (home-page "https://github.com/click-contrib/click-plugins")
31421 (license license:bsd-3)))
31422
31423;; XXX: Deprecated on <2026-03-23>.
31424(define-deprecated-package python-click-plugins-1 python-click-plugins)
31425
31426(define-public python-diceware
31427 (package
31428 (name "python-diceware")
31429 (version "1.0.1")
31430 (source
31431 (origin
31432 (method url-fetch)
31433 (uri (pypi-uri "diceware" version))
31434 (sha256
31435 (base32
31436 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
31437 (build-system pyproject-build-system)
31438 (native-inputs
31439 (list python-pytest python-setuptools python-wheel))
31440 (home-page "https://github.com/ulif/diceware/")
31441 (synopsis "Generates memorable passphrases")
31442 (description "This package generates passphrases by concatenating words
31443randomly picked from wordlists. It supports several sources of
31444randomness (including real life dice) and different wordlists (including
31445cryptographically signed ones).")
31446 (license license:gpl3+)))
31447
31448(define-public python-dictdiffer
31449 (package
31450 (name "python-dictdiffer")
31451 (version "0.9.0")
31452 (source
31453 (origin
31454 (method git-fetch)
31455 (uri (git-reference
31456 (url "https://github.com/inveniosoftware/dictdiffer")
31457 (commit (string-append "v" version))))
31458 (file-name (git-file-name name version))
31459 (sha256
31460 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
31461 (build-system pyproject-build-system)
31462 (arguments
31463 (list
31464 #:phases
31465 #~(modify-phases %standard-phases
31466 (add-after 'unpack 'relax-requirements
31467 (lambda _
31468 (delete-file "pytest.ini")
31469 (substitute* "setup.py"
31470 (("'pytest-runner.*',")
31471 "'pytest',")))))))
31472 (native-inputs
31473 (list python-pytest python-setuptools python-setuptools-scm))
31474 (home-page "https://github.com/inveniosoftware/dictdiffer")
31475 (synopsis "Diff and patch Python dictionary objects")
31476 (description
31477 "Dictdiffer is a Python module that helps you to diff and patch
31478dictionaries.")
31479 (license license:expat)))
31480
31481(define-public python-osc
31482 (package
31483 (name "python-osc")
31484 (version "1.9.3")
31485 (source
31486 (origin
31487 (method git-fetch)
31488 (uri (git-reference
31489 (url "https://github.com/attwad/python-osc")
31490 (commit (string-append "v" version))))
31491 (file-name (git-file-name name version))
31492 (sha256
31493 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
31494 (build-system pyproject-build-system)
31495 (native-inputs (list python-setuptools))
31496 (home-page "https://github.com/attwad/python-osc")
31497 (synopsis "Open Sound Control server and client implementations")
31498 (description
31499 "@code{python-osc} is a pure Python library with no external
31500dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
31501Open Sound Control 1.0} specification.")
31502 (license license:unlicense)))
31503
31504(define-public python-cmd2
31505 (package
31506 (name "python-cmd2")
31507 (version "2.5.11")
31508 (source
31509 (origin
31510 (method url-fetch)
31511 (uri (pypi-uri "cmd2" version))
31512 (sha256
31513 (base32
31514 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
31515 (build-system pyproject-build-system)
31516 (arguments
31517 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
31518and not test_transcript")))
31519 (propagated-inputs
31520 (list python-pyperclip python-wcwidth))
31521 (native-inputs
31522 (list python-pytest
31523 python-pytest-mock
31524 python-setuptools
31525 python-setuptools-scm
31526 python-wheel))
31527 (home-page "https://github.com/python-cmd2/cmd2")
31528 (synopsis "Tool for building interactive command line applications")
31529 (description
31530 "Cmd2 is a tool for building interactive command line applications in
31531Python. Its goal is to make it quick and easy for developers to build
31532feature-rich and user-friendly interactive command line applications. It
31533provides a simple API which is an extension of Python's built-in @code{cmd}
31534module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
31535make your life easier and eliminates much of the boilerplate code which would
31536be necessary when using @code{cmd}.")
31537 (license license:expat)))
31538
31539(define-public python-pytidylib
31540 (package
31541 (name "python-pytidylib")
31542 (version "0.3.2")
31543 (source
31544 (origin
31545 (method git-fetch)
31546 (uri (git-reference
31547 (url "https://github.com/countergram/pytidylib")
31548 (commit version)))
31549 (file-name (git-file-name name version))
31550 (sha256
31551 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
31552 (build-system pyproject-build-system)
31553 (arguments
31554 (list
31555 #:phases
31556 #~(modify-phases %standard-phases
31557 (add-after 'unpack 'fix-queue-import
31558 (lambda _
31559 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
31560 (substitute* "tests/threadsafety.py"
31561 (("from Queue import Queue")
31562 "from queue import Queue"))))
31563 (add-before 'build 'qualify-libtidy
31564 (lambda* (#:key inputs #:allow-other-keys)
31565 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
31566 (substitute* "tidylib/tidy.py"
31567 (("ctypes\\.util\\.find_library\\('tidy'\\)")
31568 (format #f "'~a'" libtidy)))))))))
31569 (native-inputs (list python-pytest python-setuptools))
31570 (inputs (list tidy-html))
31571 (home-page "https://github.com/countergram/pytidylib")
31572 (synopsis "Python wrapper for HTML Tidy library")
31573 (description
31574 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31575allows you, from Python code, to “fix” invalid (X)HTML markup.")
31576 (license license:expat)))
31577
31578(define-public python-mujson
31579 (package
31580 (name "python-mujson")
31581 (version "1.4")
31582 (source
31583 (origin
31584 (method git-fetch)
31585 (uri (git-reference
31586 (url "https://github.com/mattgiles/mujson")
31587 (commit version)))
31588 (file-name (git-file-name name version))
31589 (sha256
31590 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31591 (build-system pyproject-build-system)
31592 (arguments (list #:tests? #f)) ;No tests.
31593 (native-inputs (list python-setuptools))
31594 (home-page "https://github.com/mattgiles/mujson")
31595 (synopsis "Use the fastest JSON functions available at import time")
31596 (description
31597 "This module selects the fastest JSON functions available at import time
31598in Python.")
31599 (license license:expat)))
31600
31601(define-public python-bashlex
31602 (package
31603 (name "python-bashlex")
31604 (version "0.18")
31605 (source
31606 (origin
31607 (method git-fetch)
31608 (uri (git-reference
31609 (url "https://github.com/idank/bashlex")
31610 (commit version)))
31611 (file-name (git-file-name name version))
31612 (sha256
31613 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31614 (build-system pyproject-build-system)
31615 (arguments
31616 (list
31617 #:phases
31618 #~(modify-phases %standard-phases
31619 (add-before 'build 'pregenerate-yacc-tables
31620 (lambda _
31621 ;; parser.py caches tables, which attempts to write to site lib
31622 ;; see https://github.com/idank/bashlex/issues/51
31623 (invoke "python" "-c" "import bashlex"))))))
31624 (native-inputs (list python-pytest python-setuptools))
31625 (home-page "https://github.com/idank/bashlex")
31626 (synopsis "Python parser for bash")
31627 (description
31628 "@code{bashlex} is a Python port of the parser used internally by GNU
31629bash.
31630
31631For the most part it's transliterated from C, the major differences are:
31632
31633@itemize
31634@item it does not execute anything
31635@item it is reentrant
31636@item it generates a complete AST
31637@end itemize
31638")
31639 (license license:gpl3+)))
31640
31641(define-public python-jinxed
31642 (package
31643 (name "python-jinxed")
31644 (version "1.3.0")
31645 (source
31646 (origin
31647 (method git-fetch)
31648 (uri (git-reference
31649 (url "https://github.com/Rockhopper-Technologies/jinxed")
31650 (commit version)))
31651 (file-name (git-file-name name version))
31652 (sha256
31653 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31654 (build-system pyproject-build-system)
31655 (arguments
31656 (list
31657 #:tests? #f ;_curses.error: setupterm: could not find terminal
31658 #:phases
31659 #~(modify-phases %standard-phases
31660 (add-before 'check 'set-environment-variables
31661 (lambda* (#:key inputs #:allow-other-keys)
31662 (setenv "TERM" "LINUX")
31663 (setenv "TERMINFO"
31664 (search-input-directory inputs "share/terminfo")))))))
31665 (native-inputs (list ncurses python-setuptools))
31666 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31667 (synopsis "Jinxed Terminal Library")
31668 (description
31669 "Jinxed is an implementation of a subset of the Python curses library.")
31670 (license license:mpl2.0)))
31671
31672(define-public python-blessed
31673 (package
31674 (name "python-blessed")
31675 (version "1.20.0")
31676 (source
31677 (origin
31678 (method url-fetch)
31679 (uri (pypi-uri "blessed" version))
31680 (sha256
31681 (base32
31682 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31683 (snippet
31684 ;; Don't get hung up on Windows test failures.
31685 '(delete-file "blessed/win_terminal.py"))))
31686 (build-system pyproject-build-system)
31687 (propagated-inputs (list python-six python-wcwidth))
31688 (native-inputs (list python-pytest python-setuptools python-wheel))
31689 (home-page "https://github.com/jquast/blessed")
31690 (synopsis "Wrapper around terminal capabilities")
31691 (description
31692 "Blessed is a thin, practical wrapper around terminal styling, screen
31693positioning, and keyboard input.")
31694 (license license:expat)))
31695
31696(define-public python-readme-renderer
31697 (package
31698 (name "python-readme-renderer")
31699 (version "44.0")
31700 (source
31701 (origin
31702 (method url-fetch)
31703 (uri (pypi-uri "readme_renderer" version))
31704 (sha256
31705 (base32
31706 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31707 (build-system pyproject-build-system)
31708 (arguments
31709 (list
31710 #:test-flags
31711 '(list "-k"
31712 (string-append
31713 ;; These tests fail due to slight differences in the generated
31714 ;; vs expected HTML, e.g. because of difference in whitespace or
31715 ;; line breaks. (See also
31716 ;; https://github.com/pypa/readme_renderer/issues/234).
31717 "not test_md_fixtures[test_CommonMark_008.md]"
31718 " and not test_rst_fixtures[test_rst_008.rst]"
31719 " and not GFM"))))
31720 (propagated-inputs
31721 (list python-cmarkgfm
31722 python-docutils
31723 python-nh3
31724 python-pygments))
31725 (native-inputs
31726 (list python-pytest
31727 python-setuptools
31728 python-wheel))
31729 (home-page "https://github.com/pypa/readme_renderer")
31730 (synopsis "Render README files in Warehouse")
31731 (description
31732 "Readme Renderer is a library that will safely render arbitrary README
31733files into HTML. It is designed to be used in Warehouse to render the
31734@code{long_description} for packages. It can handle Markdown,
31735reStructuredText, and plain text.")
31736 (license license:asl2.0)))
31737
31738(define-public python-lazr-delegates
31739 (package
31740 (name "python-lazr-delegates")
31741 (version "2.1.1")
31742 (source
31743 (origin
31744 (method url-fetch)
31745 (uri (pypi-uri "lazr_delegates" version))
31746 (sha256
31747 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31748 (build-system pyproject-build-system)
31749 (arguments
31750 (list
31751 #:test-flags #~(list "-v" #$output)
31752 #:phases
31753 #~(modify-phases %standard-phases
31754 (add-after 'check 'check-cleanup
31755 (lambda* (#:key tests? #:allow-other-keys)
31756 (when tests?
31757 (for-each
31758 delete-file-recursively
31759 (find-files #$output
31760 (lambda (file stat)
31761 (or (member (basename file)
31762 '("tests" ".pytest_cache"))))
31763 #:directories? #t))))))))
31764 (native-inputs
31765 (list python-pytest python-setuptools python-wheel))
31766 (propagated-inputs
31767 (list python-zope-interface))
31768 (home-page "https://launchpad.net/lazr.delegates")
31769 (synopsis "Easily write objects that delegate behavior")
31770 (description
31771 "The @code{lazr.delegates} package makes it easy to write objects that
31772delegate behavior to another object. The new object adds some property or
31773behavior on to the other object, while still providing the underlying interface,
31774and delegating behavior.")
31775 (license license:lgpl3)))
31776
31777(define-public python-lazr-config
31778 (package
31779 (name "python-lazr-config")
31780 (version "3.1")
31781 (source
31782 (origin
31783 (method url-fetch)
31784 (uri (pypi-uri "lazr_config" version))
31785 (sha256
31786 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31787 (build-system pyproject-build-system)
31788 (arguments
31789 (list
31790 #:test-flags #~(list "-v" #$output)
31791 #:phases
31792 #~(modify-phases %standard-phases
31793 (add-after 'check 'check-cleanup
31794 (lambda* (#:key tests? #:allow-other-keys)
31795 (when tests?
31796 (for-each
31797 delete-file-recursively
31798 (find-files #$output
31799 (lambda (file stat)
31800 (or (member (basename file)
31801 '("tests" ".pytest_cache"))))
31802 #:directories? #t))))))))
31803 (native-inputs
31804 (list python-pytest python-setuptools python-wheel))
31805 (propagated-inputs
31806 (list python-lazr-delegates python-zope-interface))
31807 (home-page "https://launchpad.net/lazr.config")
31808 (synopsis "Create configuration schemas and process and validate configurations")
31809 (description
31810 "The LAZR config system is typically used to manage process configuration.
31811Process configuration is for saying how things change when we run systems on
31812different machines, or under different circumstances. This system uses ini-like
31813file format of section, keys, and values. The config file supports inheritance
31814to minimize duplication of information across files. The format supports schema
31815validation.")
31816 (license license:lgpl3)))
31817
31818(define-public python-flufl-bounce
31819 (package
31820 (name "python-flufl-bounce")
31821 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31822 (revision . "0")))
31823 (version (git-version "4.0"
31824 (assoc-ref properties 'revision)
31825 (assoc-ref properties 'commit)))
31826 (source
31827 (origin
31828 (method git-fetch)
31829 (uri (git-reference
31830 (url "https://gitlab.com/flufl/flufl.bounce")
31831 (commit (assoc-ref properties 'commit))))
31832 (file-name (git-file-name name version))
31833 (sha256
31834 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31835 (build-system pyproject-build-system)
31836 (arguments
31837 (list
31838 #:phases
31839 #~(modify-phases %standard-phases
31840 (replace 'check
31841 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31842 (when tests?
31843 (with-directory-excursion
31844 (string-append (site-packages inputs outputs) "/flufl")
31845 (invoke "python" "-m" "nose2" "-v"))))))))
31846 (propagated-inputs
31847 (list python-atpublic python-zope-interface))
31848 (native-inputs
31849 (list python-flufl-testing python-nose2 python-setuptools))
31850 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31851 (synopsis "Email bounce detectors")
31852 (description "The @code{flufl.bounce} library provides a set of heuristics
31853and an API for detecting the original bouncing email addresses from a bounce
31854message. Many formats found in the wild are supported, as are VERP and
31855RFC 3464.")
31856 (license (list license:asl2.0
31857 license:lgpl3)))) ; only for setup_headers.py
31858
31859(define-public python-flufl-i18n
31860 (package
31861 (name "python-flufl-i18n")
31862 (version "5.1.0")
31863 (source
31864 (origin
31865 (method url-fetch)
31866 (uri (pypi-uri "flufl_i18n" version))
31867 (sha256
31868 (base32
31869 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31870 (build-system pyproject-build-system)
31871 (arguments
31872 (list #:test-flags
31873 #~(list "--no-cov" "--ignore-glob=docs/*")
31874 #:phases
31875 #~(modify-phases %standard-phases
31876 ;; This phase add a symlink of dist-info dir for packages
31877 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31878 (add-after 'install 'add-custom-dist-info
31879 (lambda _
31880 (for-each
31881 (lambda (dir)
31882 (with-directory-excursion (dirname dir)
31883 (let ((base (basename dir)))
31884 (symlink base
31885 (string-join (string-split base #\_) ".")))))
31886 (find-files #$output
31887 (lambda (file stat)
31888 (string-suffix? ".dist-info" file))
31889 #:directories? #t)))))))
31890 (propagated-inputs
31891 (list python-atpublic))
31892 (native-inputs
31893 (list python-hatchling python-pytest python-sybil))
31894 (home-page "https://flufli18n.readthedocs.io")
31895 (synopsis "API for Python internationalization")
31896 (description
31897 "This package provides a high-level, convenient API for managing
31898internationalization/translation contexts in Python applications. There is a
31899simple API for single-context applications, such as command line scripts which
31900only need to translate into one language during the entire course of their
31901execution. There is a more flexible, but still convenient API for multi-context
31902applications, such as servers, which may need to switch language contexts for
31903different tasks.")
31904 (license license:asl2.0)))
31905
31906(define-public python-flufl-lock
31907 (package
31908 (name "python-flufl-lock")
31909 (version "8.1.0")
31910 (source
31911 (origin
31912 (method url-fetch)
31913 (uri (pypi-uri "flufl.lock" version))
31914 (sha256
31915 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31916 (build-system pyproject-build-system)
31917 (arguments
31918 (list #:test-flags
31919 #~(list "--no-cov" "--ignore-glob=docs/*")
31920 #:phases
31921 #~(modify-phases %standard-phases
31922 ;; This phase add a symlink of dist-info dir for packages
31923 ;; expecting flufl.lock rather than flufl_lock (mailman).
31924 (add-after 'install 'add-custom-dist-info
31925 (lambda _
31926 (for-each
31927 (lambda (dir)
31928 (with-directory-excursion (dirname dir)
31929 (let ((base (basename dir)))
31930 (symlink base
31931 (string-join (string-split base #\_) ".")))))
31932 (find-files #$output
31933 (lambda (file stat)
31934 (string-suffix? ".dist-info" file))
31935 #:directories? #t)))))))
31936 (native-inputs
31937 (list python-hatchling python-pytest python-sybil))
31938 (propagated-inputs
31939 (list python-atpublic python-psutil))
31940 (home-page "https://flufllock.readthedocs.io")
31941 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31942 (description
31943 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31944timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31945@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31946and have a maximum lifetime built-in.")
31947 (license (list license:asl2.0
31948 license:lgpl3)))) ; only for setup_helpers.py
31949
31950(define-public python-flufl-testing
31951 (package
31952 (name "python-flufl-testing")
31953 (version "0.8")
31954 (source
31955 (origin
31956 (method git-fetch)
31957 (uri (git-reference
31958 (url "https://gitlab.com/warsaw/flufl.testing")
31959 (commit version)))
31960 (file-name (git-file-name name version))
31961 (sha256
31962 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31963 (build-system pyproject-build-system)
31964 (arguments (list #:tests? #f)) ;no tests
31965 (native-inputs (list python-setuptools))
31966 (home-page "https://gitlab.com/warsaw/flufl.testing")
31967 (synopsis "Collection of test tool plugins")
31968 (description
31969 "This package contains a small collection of test tool plugins for
31970@code{nose2} and @code{flake8}.")
31971 (license license:asl2.0)))
31972
31973(define-public python-devtools
31974 (package
31975 (name "python-devtools")
31976 (version "0.12.2")
31977 (source
31978 (origin
31979 (method git-fetch)
31980 (uri (git-reference
31981 (url "https://github.com/samuelcolvin/python-devtools")
31982 (commit (string-append "v" version))))
31983 (file-name (git-file-name name version))
31984 (sha256
31985 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31986 (build-system pyproject-build-system)
31987 (arguments
31988 (list
31989 #:test-flags
31990 ;; Disable some failing tests.
31991 ;;
31992 ;; test_print_subprocess seems to inherit wrong environment, fails with
31993 ;; E + ModuleNotFoundError: No module named 'executing'
31994 ;; Test runs fine from local clone.
31995 ;;
31996 ;; test_executing_failure fails with
31997 ;; E - [1, 2] (list) len=2
31998 ;; E + [x, y]: [1, 2] (list) len=2
31999 ;; unclear why, probably due to a dependency.
32000 '(list "-k" "not test_print_subprocess and not test_executing_failure"
32001 ;; test_insert_assert.py also seems to inherit a bad environment:
32002 ;; E fixture 'pytester_pretty' not found
32003 ;; Test runs fine from local clone.
32004 "--ignore=tests/test_insert_assert.py")))
32005 (native-inputs
32006 (list python-hatchling python-pytest python-pytest-mock))
32007 (propagated-inputs
32008 (list python-asttokens python-executing python-pygments))
32009 (home-page "https://github.com/samuelcolvin/python-devtools")
32010 (synopsis "Debug command and development tools")
32011 (description
32012 "This package provides a debug print command and other development tools.
32013It adds a simple and readable way to print stuff during development.")
32014 (license license:expat)))
32015
32016(define-public python-dateparser
32017 (package
32018 (name "python-dateparser")
32019 (version "1.2.2")
32020 (source
32021 (origin
32022 (method url-fetch)
32023 (uri (pypi-uri "dateparser" version))
32024 (sha256
32025 (base32
32026 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
32027 (build-system pyproject-build-system)
32028 (arguments
32029 (list
32030 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
32031 #:test-flags
32032 #~(list (string-join '("--deselect=tests/test_search.py"
32033 "TestTranslateSearch"
32034 "test_search_dates_with_prepositions")
32035 "::"))))
32036 (propagated-inputs
32037 (list python-dateutil
32038 python-pytz
32039 python-regex
32040 python-tzlocal))
32041 (native-inputs
32042 (list python-parameterized
32043 python-pytest
32044 python-setuptools
32045 tzdata-for-tests))
32046 (home-page "https://github.com/scrapinghub/dateparser")
32047 (synopsis
32048 "Date parsing library designed to parse dates from HTML pages")
32049 (description
32050 "@code{python-dateparser} provides modules to easily parse localized
32051dates in almost any string formats commonly found on web pages.")
32052 (license license:bsd-3)))
32053
32054(define-public python-dparse
32055 (package
32056 (name "python-dparse")
32057 (version "0.6.4")
32058 (source
32059 (origin
32060 (method url-fetch)
32061 (uri (pypi-uri "dparse" version))
32062 (sha256
32063 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
32064 (build-system pyproject-build-system)
32065 (native-inputs (list python-hatchling python-pytest))
32066 (propagated-inputs (list python-packaging python-toml))
32067 (home-page "https://github.com/pyupio/dparse")
32068 (synopsis "Parser for Python dependency files")
32069 (description "This package provides a parser for Python dependency files.")
32070 (license license:expat)))
32071
32072(define-public python-dpath
32073 (package
32074 (name "python-dpath")
32075 (version "2.2.0")
32076 (source
32077 (origin
32078 (method url-fetch)
32079 (uri (pypi-uri "dpath" version))
32080 (sha256
32081 (base32
32082 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
32083 (build-system pyproject-build-system)
32084 (native-inputs
32085 (list python-hypothesis python-nose2 python-setuptools python-wheel))
32086 (home-page "https://github.com/akesterson/dpath-python")
32087 (synopsis "File-system-like pathing and searching for dictionaries")
32088 (description
32089 "@code{python-dpath} is a library for accessing and searching
32090dictionaries via /slashed/paths ala xpath.
32091
32092Basically it lets you glob over a dictionary as if it were a file system. It
32093allows you to specify globs (ala the bash eglob syntax, through some advanced
32094fnmatch.fnmatch magic) to access dictionary elements, and provides some
32095facility for filtering those results.")
32096 (license license:expat)))
32097
32098(define-public python-safety
32099 (package
32100 (name "python-safety")
32101 (version "3.6.2")
32102 (source
32103 (origin
32104 (method url-fetch)
32105 (uri (pypi-uri "safety" version))
32106 (sha256
32107 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
32108 (build-system pyproject-build-system)
32109 (arguments
32110 (list
32111 #:test-flags
32112 #~(list "-k" (string-join
32113 ;; test_announcements fails with AssertionError.
32114 (list "not test_announcements_if_is_not_tty"
32115 ;; Tests below need a network connection.
32116 "test_check_live"
32117 "test_check_live_cached"
32118 "test_get_packages_licenses_without_api_key"
32119 ;; AttributeError: 'PackageInstalledPayload' object
32120 ;; has no attribute 'tool_path'
32121 "test_emit_diff_operations_with_multiple_operations"
32122 "test_emit_diff_operations_with_empty_locations"
32123 "test_emit_diff_operations_with_different_tools"
32124 "test_emit_diff_operations_creates_correct_payload_structure")
32125 " and not "))
32126 #:phases #~(modify-phases %standard-phases
32127 (add-after 'unpack 'disable-telemetry
32128 (lambda _
32129 (substitute* (find-files "." "\\.py$")
32130 (("telemetry: bool = True")
32131 "telemetry: bool = False")
32132 (("telemetry=True")
32133 "telemetry=False"))))
32134 (add-before 'check 'set-home ; some tests run mkdir
32135 (lambda _
32136 (setenv "HOME" "/tmp"))))))
32137 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
32138 (propagated-inputs (list python-authlib
32139 python-click
32140 python-dparse
32141 python-filelock
32142 python-httpx
32143 python-jinja2
32144 python-marshmallow
32145 python-nltk
32146 python-packaging
32147 python-psutil
32148 python-pydantic
32149 python-requests
32150 python-ruamel.yaml
32151 python-safety-schemas
32152 python-tenacity
32153 python-tomli
32154 python-tomlkit
32155 python-typer
32156 python-typing-extensions))
32157 (home-page "https://github.com/pyupio/safety")
32158 (synopsis "Check installed dependencies for known vulnerabilities")
32159 (description
32160 "Safety checks installed dependencies for known vulnerabilities.
32161By default it uses the open Python vulnerability database Safety DB.")
32162 (license license:expat)))
32163
32164(define-public python-pypandoc
32165 (package
32166 (name "python-pypandoc")
32167 (version "1.15")
32168 (source
32169 (origin
32170 (method git-fetch)
32171 (uri (git-reference
32172 (url "https://github.com/JessicaTegner/pypandoc")
32173 (commit (string-append "v" version))))
32174 (file-name (git-file-name name version))
32175 (sha256
32176 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
32177 (build-system pyproject-build-system)
32178 (arguments
32179 (list
32180 #:test-backend #~'unittest
32181 #:phases
32182 #~(modify-phases %standard-phases
32183 (add-before 'check 'disable-tests
32184 (lambda _
32185 (substitute* "tests.py"
32186 ;; Disable test requiring network access
32187 (("test_basic_conversion_from_http_url")
32188 "skip_test_basic_conversion_from_http_url")
32189 ;; Disable tests with missing files
32190 (("test_basic_conversion_from_file_pattern")
32191 "skip_test_basic_conversion_from_file_pattern")
32192 (("test_conversion_with_data_files")
32193 "skip_test_conversion_with_data_files")))))))
32194 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
32195 ;; the missing etoolbox.sty file is added
32196 (native-inputs
32197 (list (texlive-local-tree
32198 (list texlive-etoolbox
32199 texlive-lm
32200 texlive-regexpatch
32201 texlive-xcolor))
32202 python-poetry-core
32203 python-setuptools))
32204 (inputs (list pandoc python-pandocfilters))
32205 (propagated-inputs (list python-wheel))
32206 (home-page "https://github.com/JessicaTegner/pypandoc")
32207 (synopsis "Python wrapper for pandoc")
32208 (description
32209 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
32210 (license license:expat)))
32211
32212(define-public python-rnc2rng
32213 (package
32214 (name "python-rnc2rng")
32215 (version "2.7.0")
32216 (source
32217 (origin
32218 (method git-fetch)
32219 (uri (git-reference
32220 (url "https://github.com/djc/rnc2rng")
32221 (commit version)))
32222 (file-name (git-file-name name version))
32223 (sha256
32224 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
32225 (build-system pyproject-build-system)
32226 (arguments
32227 (list
32228 #:test-backend #~'custom
32229 #:test-flags #~(list "test.py")))
32230 (native-inputs (list python-setuptools))
32231 (propagated-inputs (list python-rply))
32232 (home-page "https://github.com/djc/rnc2rng")
32233 (synopsis "Convert RELAX NG Compact to regular syntax")
32234 (description
32235 "This package provides the @command{rnc2rng} command-line tool as well as
32236a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
32237equivalent schemata in the XML-based default RELAX NG syntax.")
32238 (license license:expat)))
32239
32240(define-public python-citeproc-py
32241 (package
32242 (name "python-citeproc-py")
32243 (version "0.9.0")
32244 (source
32245 (origin
32246 (method git-fetch)
32247 (uri (git-reference
32248 (url "https://github.com/brechtm/citeproc-py")
32249 (commit (string-append "v" version))
32250 (recursive? #t))) ; TODO Unbundle.
32251 (file-name (git-file-name name version))
32252 (sha256
32253 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
32254 (build-system pyproject-build-system)
32255 (arguments
32256 (list
32257 #:phases
32258 #~(modify-phases %standard-phases
32259 (add-after 'unpack 'set-version
32260 (lambda _
32261 (delete-file "citeproc/_version.py")
32262 (substitute* "citeproc/__init__.py"
32263 (("from \\. import version")
32264 "")
32265 (("__version__ =.*")
32266 (format #f "__version__ = ~s" #$version))))))))
32267 (native-inputs (list python-pytest python-setuptools))
32268 (propagated-inputs (list python-lxml python-rnc2rng))
32269 (home-page "https://github.com/brechtm/citeproc-py")
32270 (synopsis "Citations and bibliography formatter")
32271 (description
32272 "Citeproc-py is a CSL processor for Python. It aims to implement the
32273CSL 1.0.1 specification. citeproc-py can output styled citations and
32274bibliographies in a number of different output formats. Currently supported
32275are plain text, reStructuredText and HTML.")
32276 (license license:bsd-2)))
32277
32278(define-public python-inform
32279 (package
32280 (name "python-inform")
32281 (version "1.34")
32282 (source
32283 (origin
32284 (method git-fetch) ; no tests in PyPI release
32285 (uri (git-reference
32286 (url "https://github.com/kenkundert/inform")
32287 (commit (string-append "v" version))))
32288 (file-name (git-file-name name version))
32289 (sha256
32290 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
32291 (build-system pyproject-build-system)
32292 (arguments
32293 (list
32294 #:test-flags #~(list "-k" (string-append
32295 ;; Test below needs the num2words package
32296 "not test_plural_words"
32297 ;; These last two failed with AssertionError
32298 " and not test_inform"
32299 " and not test_manual"))))
32300 (native-inputs
32301 (list python-flit-core python-pytest))
32302 (propagated-inputs
32303 (list python-arrow))
32304 (home-page "https://inform.readthedocs.io")
32305 (synopsis "Print & logging utilities for communicating with user")
32306 (description
32307 "Inform is designed to display messages from programs that are typically run from
32308a console. It provides a collection of ‘print’ functions that allow you to simply and
32309cleanly print different types of messages.")
32310 (license license:gpl3+)))
32311
32312(define-public python-nestedtext
32313 (package
32314 (name "python-nestedtext")
32315 (version "3.7")
32316 (source
32317 (origin
32318 (method git-fetch) ; no tests in PyPI release
32319 (uri (git-reference
32320 (url "https://github.com/KenKundert/nestedtext")
32321 (commit (string-append "v" version))))
32322 (file-name (git-file-name name version))
32323 (sha256
32324 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
32325 (build-system pyproject-build-system)
32326 (arguments
32327 (list
32328 ;; XXX: Tests below need some not yet packaged Python libraries.
32329 #:test-flags #~(list "--ignore" "examples/"
32330 "--ignore" "tests/test_nestedtext.py"
32331 "-k" (string-append
32332 "not techniques.rst"
32333 " and not nestedtext.nestedtext.dumps"))))
32334 (native-inputs (list python-flit-core python-pytest))
32335 (propagated-inputs
32336 (list python-inform))
32337 (home-page "https://nestedtext.org")
32338 (synopsis "Human readable and writable data interchange format")
32339 (description
32340 "NestedText is a file format for holding data that is to be entered, edited, or
32341viewed by people. It allows data to be organized into a nested collection of
32342dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
32343without the complexity and risk of YAML and without the syntactic clutter of JSON.
32344NestedText is both simple and natural. Only a small number of concepts and rules must
32345be kept in mind when creating it. It is easily created, modified, or viewed with
32346a text editor and easily understood and used by both programmers and non-programmers.")
32347 (license license:expat))) ; MIT license
32348
32349(define-public python-nest-asyncio
32350 (package
32351 (name "python-nest-asyncio")
32352 (version "1.6.0")
32353 (source
32354 (origin
32355 (method url-fetch)
32356 (uri (pypi-uri "nest_asyncio" version))
32357 (sha256
32358 (base32
32359 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
32360 (build-system pyproject-build-system)
32361 (native-inputs
32362 (list python-pytest python-setuptools))
32363 (home-page "https://github.com/erdewit/nest_asyncio")
32364 (synopsis "Patch asyncio to allow nested event loops")
32365 (description
32366 "By design @code{asyncio} does not allow its event loop to be nested.
32367This presents a practical problem: when in an environment where the event loop
32368is already running it's impossible to run tasks and wait for the result. This
32369module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
32370@code{loop.run_until_complete}.")
32371 (license license:bsd-3)))
32372
32373(define-public python-simpervisor
32374 (package
32375 (name "python-simpervisor")
32376 (version "1.0.0")
32377 (source
32378 (origin
32379 ;; Tests not included in release.
32380 (method git-fetch)
32381 (uri (git-reference
32382 (url "https://github.com/yuvipanda/simpervisor")
32383 (commit (string-append "v" version))))
32384 (file-name (git-file-name name version))
32385 (sha256
32386 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
32387 (build-system pyproject-build-system)
32388 (arguments
32389 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
32390 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
32391 (native-inputs
32392 (list python-aiohttp
32393 python-hatchling
32394 python-psutil
32395 python-pytest
32396 python-pytest-asyncio))
32397 (home-page "https://github.com/yuvipanda/simpervisor")
32398 (synopsis "Simple async process supervisor")
32399 (description
32400 "This package provides a simple async process supervisor in Python.")
32401 (license license:bsd-3)))
32402
32403(define-public python-parallel
32404 (package
32405 (name "python-parallel")
32406 (version "1.6.4.4")
32407 (source
32408 (origin
32409 (method url-fetch)
32410 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
32411 version ".zip"))
32412 (sha256
32413 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
32414 (build-system pyproject-build-system)
32415 (arguments (list #:tests? #f)) ;No test suite.
32416 (native-inputs (list python-setuptools unzip))
32417 (propagated-inputs (list python-six))
32418 (home-page "https://www.parallelpython.com")
32419 (synopsis "Parallel and distributed programming for Python")
32420 (description
32421 "Parallel Python module (PP) provides an easy and efficient way to create
32422parallel-enabled applications for SMP computers and clusters. PP module
32423features cross-platform portability and dynamic load balancing. Thus
32424applications written with PP will parallelize efficiently even on
32425heterogeneous and multi-platform clusters (including clusters running other
32426applications with variable CPU loads).")
32427 (license license:bsd-3)))
32428
32429(define-public python-param
32430 (package
32431 (name "python-param")
32432 (version "2.3.3")
32433 (source
32434 (origin
32435 (method git-fetch)
32436 (uri (git-reference
32437 (url "https://github.com/holoviz/param")
32438 (commit (string-append "v" version))))
32439 (file-name (git-file-name name version))
32440 (sha256
32441 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
32442 (build-system pyproject-build-system)
32443 ;; tests: 1448 passed, 5 skipped, 2 xfailed
32444 (native-inputs
32445 ;; Project does not require any dependencies, all of the listed
32446 ;; native-inputs are for build/test only.
32447 (list python-cloudpickle
32448 python-hatch-vcs
32449 python-hatchling
32450 python-ipython-minimal
32451 python-jsonschema
32452 python-nbval
32453 python-nest-asyncio
32454 python-numpy
32455 python-odfpy
32456 python-openpyxl
32457 python-pandas
32458 python-pyarrow
32459 python-pytest
32460 python-pytest-asyncio
32461 python-tables
32462 python-xlrd))
32463 (home-page "https://param.holoviz.org/")
32464 (synopsis
32465 "Make your Python code clearer and more reliable by declaring Parameters")
32466 (description
32467 "Param is a library for handling all the user-modifiable parameters,
32468arguments, and attributes that control your code. It provides automatic,
32469robust error-checking while dramatically reducing boilerplate code, letting
32470you focus on what you want your code to do rather than on checking for all the
32471possible ways users could supply inappropriate values to a function or
32472class.")
32473 (license license:bsd-3)))
32474
32475(define-public python-djitellopy
32476 (package
32477 (name "python-djitellopy")
32478 (version "2.5.0")
32479 (source
32480 (origin
32481 (method url-fetch)
32482 (uri (pypi-uri "djitellopy" version))
32483 (sha256
32484 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
32485 (build-system pyproject-build-system)
32486 (arguments
32487 (list
32488 #:tests? #f ;no test suite
32489 #:phases
32490 #~(modify-phases %standard-phases
32491 ;; OpenCV does not ship metadata files for its Python library, which
32492 ;; makes it invisible to the sanity_check script (see:
32493 ;; https://github.com/opencv/opencv/issues/24810).
32494 (delete 'sanity-check))))
32495 (propagated-inputs
32496 (list opencv ;for opencv-python
32497 python-av
32498 python-numpy
32499 python-pillow))
32500 (native-inputs (list python-setuptools python-wheel))
32501 (home-page "https://github.com/damiafuentes/DJITelloPy")
32502 (synopsis
32503 "DJI Tello drone video streaming, swarms and state packets library")
32504 (description
32505 "DJI Tello drone Python interface using the official Tello SDK and Tello
32506EDU SDK. This library has the following features:
32507@itemize
32508@item Implementation of all tello commands
32509@item Retrieve a video stream easily
32510@item Receive and parse state packets
32511@item Control a swarm of drones.
32512@end itemize")
32513 (license license:expat)))
32514
32515(define-public python-djvulibre
32516 ;; The original git repository of python-djvulibre is hosted at
32517 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
32518 ;; has been archived by its owner in 2022. The most active fork is
32519 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
32520 ;; version packaged here (its "python3" branch, the default).
32521 ;;
32522 ;; However, the python-djvulibre PyPI project still refers to the old
32523 ;; repository. The new repository is published as djvulibre-python on PyPI;
32524 ;; that is, with the name in reversed order.The original package name is
32525 ;; used in Guix because it best adheres to the Guix naming scheme.
32526 (package
32527 (name "python-djvulibre")
32528 (version "0.9.3")
32529 (source
32530 (origin
32531 (method git-fetch)
32532 (uri (git-reference
32533 (url "https://github.com/FriedrichFroebel/python-djvulibre")
32534 (commit version)))
32535 (file-name (git-file-name name version))
32536 (sha256
32537 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
32538 (build-system pyproject-build-system)
32539 (arguments
32540 (list
32541 #:phases
32542 #~(modify-phases %standard-phases
32543 (replace 'check
32544 (lambda* (#:key tests? #:allow-other-keys)
32545 (when tests?
32546 ;; The tests get confused by the djvu directory.
32547 (delete-file-recursively "djvu")
32548 ;; Tests can't find tools.py otherwise.
32549 (with-directory-excursion "tests"
32550 (invoke "python" "-m" "pytest"))))))))
32551 (native-inputs
32552 (list ghostscript
32553 pkg-config
32554 python-cython
32555 python-pytest
32556 python-setuptools))
32557 (inputs
32558 (list djvulibre))
32559 (synopsis "Python bindings for DjVuLibre")
32560 (description "This is a set of Python bindings for the DjVuLibre library.")
32561 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32562 (license license:gpl2)))
32563
32564(define-public python-gamera
32565 (package
32566 (name "python-gamera")
32567 (version "4.1.0")
32568 (source
32569 (origin
32570 (method git-fetch)
32571 (uri (git-reference
32572 (url "https://github.com/hsnr-gamera/gamera-4")
32573 (commit (string-append "v" version))))
32574 (file-name (git-file-name name version))
32575 (sha256
32576 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32577 (build-system pyproject-build-system)
32578 (arguments
32579 (list
32580 #:phases
32581 #~(modify-phases %standard-phases
32582 (add-after 'unpack 'fix-build
32583 (lambda _
32584 ;; The script to make daily build artifacts fails to compile,
32585 ;; but users don't need that, so ignore it.
32586 (delete-file "misc/daily_build.py")
32587 ;; Prepare tests
32588 (mkdir-p "tmp")
32589 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32590 (native-inputs (list python-docutils python-pytest python-setuptools))
32591 (inputs (list libpng libtiff zlib))
32592 (synopsis "Framework for building document analysis applications")
32593 (description
32594 "Gamera is a toolkit for building document image recognition systems.")
32595 (home-page "https://gamera.informatik.hsnr.de/")
32596 (license license:gpl2+)))
32597
32598(define-public python-aiofiles
32599 (package
32600 (name "python-aiofiles")
32601 (version "24.1.0")
32602 (source
32603 (origin
32604 (method url-fetch)
32605 (uri (pypi-uri "aiofiles" version))
32606 (sha256
32607 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32608 (build-system pyproject-build-system)
32609 (native-inputs
32610 (list python-hatch-vcs
32611 python-hatchling
32612 python-pytest
32613 python-pytest-asyncio))
32614 (home-page "https://github.com/Tinche/aiofiles")
32615 (synopsis "File support for @code{asyncio}")
32616 (description
32617 "@code{python-aiofiles} is a library for handling local disk files in
32618asyncio applications.")
32619 (license license:asl2.0)))
32620
32621(define-public python-pyre-extensions
32622 (package
32623 (name "python-pyre-extensions")
32624 (version "0.0.32")
32625 (source
32626 (origin
32627 (method url-fetch)
32628 (uri (pypi-uri "pyre_extensions" version))
32629 (sha256
32630 (base32
32631 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32632 (build-system pyproject-build-system)
32633 (native-inputs (list python-pytest python-setuptools python-wheel))
32634 (propagated-inputs
32635 (list python-typing-extensions python-typing-inspect))
32636 (home-page "https://pyre-check.org")
32637 (synopsis
32638 "Type system extensions for use with @code{python-pyre}")
32639 (description
32640 "@code{python-pyre-extensions} defines extensions to the standard
32641@code{typing} module that are supported by the Pyre typechecker.")
32642 (license license:expat)))
32643
32644(define-public python-pywatchman
32645 (package
32646 (name "python-pywatchman")
32647 (version "3.0.0")
32648 (source
32649 (origin
32650 (method url-fetch)
32651 (uri (pypi-uri "pywatchman" version))
32652 (sha256
32653 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32654 (build-system pyproject-build-system)
32655 (arguments
32656 (list
32657 #:test-backend #~'custom
32658 #:test-flags #~(list "tests/tests.py")))
32659 (native-inputs (list python-setuptools))
32660 (home-page "https://facebook.github.io/watchman/")
32661 (synopsis "Watchman client for python")
32662 (description
32663 "@code{python-pywatchman} is a library to connect and query Watchman to
32664discover file changes.")
32665 (license license:bsd-3)))
32666
32667(define-public python-roundrobin
32668 (package
32669 (name "python-roundrobin")
32670 (version "0.0.4")
32671 (source
32672 (origin
32673 (method git-fetch)
32674 (uri (git-reference
32675 (url "https://github.com/linnik/roundrobin")
32676 (commit version)))
32677 (file-name (git-file-name name version))
32678 (sha256
32679 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32680 (build-system pyproject-build-system)
32681 (arguments
32682 (list #:test-backend #~'unittest))
32683 (native-inputs (list python-setuptools))
32684 (home-page "https://github.com/linnik/roundrobin")
32685 (synopsis "Collection of roundrobin utilities")
32686 (description
32687 "This package provides a collection of utilities for round-robin
32688distribution in Python.")
32689 (license license:expat)))
32690
32691(define-public python-helpdev
32692 (package
32693 (name "python-helpdev")
32694 (version "0.7.1")
32695 (source
32696 (origin
32697 (method git-fetch)
32698 (uri (git-reference
32699 (url "https://gitlab.com/dpizetta/helpdev")
32700 (commit (string-append "v" version))))
32701 (file-name (git-file-name name version))
32702 (sha256
32703 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32704 (build-system pyproject-build-system)
32705 (native-inputs (list python-pip python-pytest python-setuptools))
32706 (home-page "https://gitlab.com/dpizetta/helpdev")
32707 (synopsis "Extract information about the Python environment easily")
32708 (description
32709 "Helpdev is a library to easily extract information about the Python
32710environment.")
32711 (license license:expat)))
32712
32713(define-public python-loguru
32714 (package
32715 (name "python-loguru")
32716 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32717 ;; covert to git tag when released.
32718 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32719 (revision . "0")))
32720 (version (git-version "0.7.3"
32721 (assoc-ref properties 'revision)
32722 (assoc-ref properties 'commit)))
32723 (source
32724 (origin
32725 (method git-fetch)
32726 (uri (git-reference
32727 (url "https://github.com/Delgan/loguru")
32728 (commit (assoc-ref properties 'commit))))
32729 (file-name (git-file-name name version))
32730 (sha256
32731 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32732 (build-system pyproject-build-system)
32733 ;; tests: x86_64-linux 1598 passed, 28 skipped
32734 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32735 (arguments
32736 (list
32737 #:test-flags
32738 #~(list #$@(if (target-64bit?)
32739 '()
32740 ;; OverflowError
32741 '("--deselect=tests/test_datetime.py::test_formatting"
32742 (string-append "--deselect=tests/test_datetime.py"
32743 "::test_value_of_gmtoff_is_invalid"))))))
32744 (native-inputs
32745 (list python-flit-core
32746 python-freezegun
32747 python-mypy-for-tests
32748 python-pytest
32749 python-setuptools
32750 tzdata-for-tests))
32751 (propagated-inputs
32752 (list python-colorama))
32753 (home-page "https://github.com/Delgan/loguru")
32754 (synopsis "Python logging made (stupidly) simple")
32755 (description "Python logging made (stupidly) simple.")
32756 (license license:expat)))
32757
32758(define-public python-qtsass
32759 (package
32760 (name "python-qtsass")
32761 (version "0.4.0")
32762 (source
32763 (origin
32764 ;; There are no tests in the PyPI tarball.
32765 (method git-fetch)
32766 (uri (git-reference
32767 (url "https://github.com/spyder-ide/qtsass/")
32768 (commit (string-append "v" version))))
32769 (file-name (git-file-name name version))
32770 (sha256
32771 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32772 (build-system pyproject-build-system)
32773 (native-inputs
32774 (list python-flaky python-pytest python-setuptools python-wheel))
32775 (propagated-inputs
32776 (list python-libsass))
32777 (home-page "https://github.com/spyder-ide/qtsass")
32778 (synopsis "Compile SCSS files to valid Qt stylesheets")
32779 (description
32780 "Besides being used in web development, CSS is also the way to stylize
32781Qt-based desktop applications. However, Qt's CSS has a few variations that
32782prevent the direct use of SASS compiler.
32783
32784The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32785handling those variations.")
32786 (license license:expat)))
32787
32788(define-public python-qdarkstyle
32789 (package
32790 (name "python-qdarkstyle")
32791 (version "3.2.3")
32792 (source
32793 (origin
32794 (method url-fetch)
32795 (uri (pypi-uri "QDarkStyle" version))
32796 (sha256
32797 (base32
32798 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32799 (build-system pyproject-build-system)
32800 (native-inputs (list python-pytest
32801 python-qtsass
32802 python-setuptools
32803 python-watchdog
32804 python-wheel))
32805 (propagated-inputs
32806 (list python-qtpy python-pyqt-6))
32807 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32808 (synopsis
32809 "Complete dark stylesheet for Python and Qt applications")
32810 (description "QDarkStyle is the most complete dark stylesheet for Python and
32811Qt applications.")
32812 (license license:expat)))
32813
32814(define-public python-pystray
32815 (package
32816 (name "python-pystray")
32817 (version "0.19.5")
32818 (source
32819 (origin
32820 (method git-fetch)
32821 (uri (git-reference
32822 (url "https://github.com/moses-palmer/pystray")
32823 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32824 (file-name (git-file-name name version))
32825 (sha256
32826 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32827 (build-system pyproject-build-system)
32828 (arguments
32829 (list
32830 ;; The test suite requires user interaction, there are no automated
32831 ;; tests.
32832 #:tests? #false
32833 #:phases #~(modify-phases %standard-phases
32834 (add-before 'sanity-check 'use-dummy-backend
32835 (lambda _
32836 ;; Without setting this, pystray tries to connect to
32837 ;; X11 on import.
32838 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32839 (native-inputs (list python-sphinx python-setuptools))
32840 (propagated-inputs (list python-pillow python-six python-xlib))
32841 (home-page "https://github.com/moses-palmer/pystray")
32842 (synopsis "Create a system tray icon")
32843 (description "This library allows you to create a system tray icon.
32844It makes it possible to specify an icon, a title and a callback for when
32845the icon is activated. The icon and title can be changed after the icon
32846has been created, and the visibility of the icon can be toggled.")
32847 (license license:lgpl3+)))
32848
32849(define-public python-bitstring
32850 (package
32851 (name "python-bitstring")
32852 (version "4.3.1")
32853 (source
32854 (origin
32855 (method url-fetch)
32856 (uri (pypi-uri "bitstring" version))
32857 (sha256
32858 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32859 (build-system pyproject-build-system)
32860 (arguments
32861 (list
32862 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32863 "--ignore=tests/test_fp8.py"
32864 "--ignore=tests/test_mxfp.py")))
32865 (native-inputs
32866 (list python-gfloat python-pytest python-setuptools python-wheel))
32867 (propagated-inputs
32868 (list python-bitarray))
32869 (home-page "https://github.com/scott-griffiths/bitstring")
32870 (synopsis
32871 "Simple construction, analysis and modification of binary data")
32872 (description
32873 "Bitstring is a library for simple construction, analysis and modification
32874 of binary data.")
32875 (license license:expat)))
32876
32877(define-public python-confuse
32878 (package
32879 (name "python-confuse")
32880 (version "2.0.1")
32881 (source
32882 (origin
32883 (method url-fetch)
32884 (uri (pypi-uri "confuse" version))
32885 (sha256
32886 (base32
32887 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32888 (build-system pyproject-build-system)
32889 (native-inputs (list python-flit-core python-pytest))
32890 (propagated-inputs (list python-pyyaml))
32891 (home-page "https://github.com/beetbox/confuse")
32892 (synopsis "Painless YAML configuration")
32893 (description "Confuse is a configuration library for Python that uses
32894YAML. It takes care of defaults, overrides, type checking, command-line
32895integration, human-readable errors, and standard OS-specific locations.")
32896 (license license:expat)))
32897
32898(define-public python-referencing
32899 (package
32900 (name "python-referencing")
32901 (version "0.35.1")
32902 (source
32903 (origin
32904 (method url-fetch)
32905 (uri (pypi-uri "referencing" version))
32906 (sha256
32907 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32908 (build-system pyproject-build-system)
32909 (arguments
32910 (list
32911 #:test-flags
32912 '(list "--pyargs" "referencing/tests")
32913 #:phases
32914 '(modify-phases %standard-phases
32915 (add-after 'unpack 'patch-pyproject
32916 (lambda _
32917 ;; The build system does not like this.
32918 (substitute* "pyproject.toml"
32919 ((" \"Topic :: File Formats.*") "")))))))
32920 (propagated-inputs (list python-attrs python-rpds-py))
32921 (native-inputs
32922 (list python-hatchling
32923 python-hatch-vcs
32924 python-jsonschema
32925 python-pytest
32926 python-pytest-subtests))
32927 (home-page "https://github.com/python-jsonschema/referencing")
32928 (synopsis "JSON Referencing + Python")
32929 (description "This package provides an implementation-agnostic
32930implementation of JSON reference resolution.")
32931 (license license:expat)))
32932
32933(define-public python-referencing-bootstrap
32934 (package
32935 (inherit python-referencing)
32936 (name "python-referencing-bootstrap")
32937 (arguments
32938 (list
32939 #:tests? #false
32940 #:phases
32941 '(modify-phases %standard-phases
32942 (add-after 'unpack 'patch-pyproject
32943 (lambda _
32944 ;; The build system does not like this.
32945 (substitute* "pyproject.toml"
32946 ((" \"Topic :: File Formats.*") "")))))))
32947 (native-inputs (list python-hatchling python-hatch-vcs))))
32948
32949(define-public python-reflink
32950 (package
32951 (name "python-reflink")
32952 (version "0.2.2")
32953 (source
32954 (origin
32955 (method git-fetch)
32956 (uri (git-reference
32957 (url "https://gitlab.com/rubdos/pyreflink")
32958 (commit version)))
32959 (file-name (git-file-name name version))
32960 (sha256
32961 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32962 (build-system pyproject-build-system)
32963 (arguments
32964 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32965 (propagated-inputs (list python-cffi))
32966 (native-inputs (list python-pytest python-setuptools))
32967 (home-page "https://gitlab.com/rubdos/pyreflink")
32968 (synopsis "Python wrapper around reflink system call")
32969 (description
32970 "Python reflink wraps around platform specific @code{reflink}
32971implementations.")
32972 (license license:expat)))
32973
32974(define-public python-retry
32975 (package
32976 (name "python-retry")
32977 (version "0.9.2")
32978 (source
32979 (origin
32980 (method git-fetch)
32981 (uri (git-reference
32982 (url "https://github.com/invl/retry")
32983 (commit version)))
32984 (file-name (git-file-name name version))
32985 (sha256
32986 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32987 (build-system pyproject-build-system)
32988 (native-inputs (list python-pbr python-pytest))
32989 (propagated-inputs (list python-decorator python-py))
32990 (home-page "https://github.com/invl/retry")
32991 (synopsis "Retry decorator")
32992 (description
32993 "@code{retry} is an easy to use retry decorator for Python. It can be
32994used to retry a function a given number of times.")
32995 (license license:asl2.0)))
32996
32997(define-public python-crayons
32998 (package
32999 (name "python-crayons")
33000 (version "0.4.0")
33001 (source
33002 (origin
33003 (method git-fetch)
33004 (uri (git-reference
33005 (url "https://github.com/MasterOdin/crayons")
33006 (commit (string-append "v" version))))
33007 (file-name (git-file-name name version))
33008 (sha256
33009 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
33010 (build-system pyproject-build-system)
33011 (arguments
33012 (list
33013 #:test-backend #~'custom
33014 #:test-flags #~(list "test_crayons.py")))
33015 (native-inputs (list python-setuptools))
33016 (propagated-inputs (list python-colorama))
33017 (home-page "https://github.com/MasterOdin/crayons")
33018 (synopsis "TextUI colors for Python")
33019 (description
33020 "This package gives you colored strings for the terminal. Crayons
33021automatically wraps a given string in the foreground color and restores the
33022original state after the string is printed.")
33023 (license license:expat)))
33024
33025(define-public python-sane
33026 (package
33027 (name "python-sane")
33028 (version "2.9.2")
33029 (source
33030 (origin
33031 (method git-fetch)
33032 (uri (git-reference
33033 (url "https://github.com/python-pillow/Sane")
33034 (commit (string-append "v" version))))
33035 (file-name (git-file-name name version))
33036 (sha256
33037 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
33038 (build-system pyproject-build-system)
33039 (arguments (list #:tests? #f)) ; No tests.
33040 (native-inputs (list python-setuptools))
33041 (inputs (list sane))
33042 (home-page "https://github.com/python-pillow/Sane")
33043 (synopsis "Python interface to the SANE scanner")
33044 (description
33045 "This package provides Python interface to the SANE scanner and frame
33046grabber interface.")
33047 (license (license:non-copyleft
33048 ;; Yet another variant of the X/MIT license.
33049 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
33050
33051(define-public python-scikit-build
33052 (package
33053 (name "python-scikit-build")
33054 (version "0.18.1")
33055 (source
33056 (origin
33057 (method url-fetch)
33058 (uri (pypi-uri "scikit_build" version))
33059 (sha256
33060 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
33061 (patches
33062 (search-patches "python-scikit-build-setuptools-compat.patch"))))
33063 (build-system pyproject-build-system)
33064 (arguments
33065 (list
33066 #:phases
33067 #~(modify-phases %standard-phases
33068 (add-after 'unpack 'patch-cmake-executable
33069 (lambda* (#:key inputs #:allow-other-keys)
33070 (substitute* "skbuild/constants.py"
33071 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
33072 (format #f "~a ~s~%" head
33073 (search-input-file inputs "bin/cmake"))))))
33074 (add-before 'check 'pre-check
33075 (lambda _
33076 ;; Some tests try to access the network before being skipped.
33077 ;; Skip them by default.
33078 (substitute* "tests/test_setup.py"
33079 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
33080 "pytest.mark.isolated()\n"))))
33081 (replace 'check
33082 (lambda* (#:key tests? #:allow-other-keys)
33083 (when tests?
33084 ;; These tests attempt to pull dependencies from the Internet.
33085 (delete-file "tests/test_distribution.py")
33086 (delete-file "tests/test_pep518.py")
33087 ;; The tests marked as "isolate" are tests that require access
33088 ;; to the network.
33089 (invoke "pytest" "-vv" "-m" "not isolated"
33090 "-n" (number->string (parallel-job-count))
33091 "-k" (string-append
33092 ;; These tests attempt to write to read-only
33093 ;; Python install directory.
33094 "not test_install_command "
33095 "and not test_test_command "
33096 "and not test_hello_develop "
33097 ;; These sdist-related tests fail for unknown
33098 ;; reasons (see:
33099 ;; https://github.com/scikit-build/scikit-build/issues/689).
33100 "and not test_hello_sdist_with_base "
33101 "and not test_manifest_in_sdist "
33102 "and not test_hello_sdist "
33103 "and not test_sdist_with_symlinks "
33104 ;; These are not parallel safe and fail
33105 ;; nondeterministically (see:
33106 ;; https://github.com/scikit-build/scikit-build/issues/711).
33107 "and not test_generator_cleanup "
33108 "and not test_generator_selection "
33109 ;; … and there's more of them
33110 "and not test_cxx_compiler "
33111 "and not test_fortran_compiler ")))))
33112 (add-after 'install 'install-cmake
33113 (lambda* (#:key outputs #:allow-other-keys)
33114 (let ((lib (string-append (assoc-ref outputs "out")
33115 "/lib/cmake/modules")))
33116 (mkdir-p lib)
33117 (with-directory-excursion "skbuild/resources/cmake"
33118 (for-each (lambda (file) (install-file file lib))
33119 (find-files "." "\\.cmake")))))))))
33120 (native-inputs
33121 (list cmake-minimal
33122 gfortran
33123 git-minimal/pinned ;for tests
33124 ninja/pinned
33125 python-cython
33126 python-hatch-fancy-pypi-readme
33127 python-hatch-vcs
33128 python-hatchling
33129 python-pytest
33130 python-pytest-mock
33131 python-pytest-xdist
33132 python-requests
33133 python-virtualenv))
33134 (propagated-inputs
33135 (list python-distro
33136 python-packaging
33137 python-wheel))
33138 (home-page "https://github.com/scikit-build/scikit-build")
33139 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
33140 (description "Scikit-build is an improved build system generator for
33141CPython C/C++/Fortran/Cython extensions. It has support for additional
33142compilers, build systems, cross compilation, and locating dependencies and
33143determining their build requirements. The scikit-build package is
33144fundamentally just glue between the @code{setuptools} Python module and
33145CMake.")
33146 (license license:expat)))
33147
33148(define-public python-screeninfo
33149 (package
33150 (name "python-screeninfo")
33151 (version "0.8.1")
33152 (source
33153 (origin
33154 (method git-fetch)
33155 (uri (git-reference
33156 (url "https://github.com/rr-/screeninfo")
33157 (commit version)))
33158 (file-name (git-file-name name version))
33159 (sha256
33160 (base32 "0q0nvj2ghbyjfymsbsl6dr7ggpg177fjncnzbxj18yglyz0vhk2c"))))
33161 (build-system pyproject-build-system)
33162 (native-inputs
33163 (list libdrm
33164 python-poetry-core
33165 python-pytest))
33166 (home-page "https://github.com/rr-/screeninfo")
33167 (synopsis "Fetch location and size of physical screens")
33168 (description
33169 "Fetch location and size of physical screens. GNU/Linux has support on
33170following enviroments: X11 (thought Xinerama) and DRM (experimental).")
33171 (license license:expat)))
33172
33173;; Deprecated on <2026-07-23>.
33174(define-deprecated/public-alias python-screenkey
33175 (@ (gnu packages video) python-screenkey))
33176
33177(define-public python-jinja2-cli
33178 (package
33179 (name "python-jinja2-cli")
33180 (version "0.8.2")
33181 (source
33182 (origin
33183 (method git-fetch)
33184 (uri (git-reference
33185 (url "https://github.com/mattrobenolt/jinja2-cli")
33186 (commit version)))
33187 (file-name (git-file-name name version))
33188 (sha256
33189 (base32
33190 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
33191 (build-system pyproject-build-system)
33192 (propagated-inputs
33193 (list python-jinja2))
33194 (native-inputs
33195 (list python-jinja2
33196 python-pytest
33197 python-setuptools
33198 python-wheel))
33199 (home-page "https://github.com/mattrobenolt/jinja2-cli")
33200 (synopsis "Command-line interface to Jinja2")
33201 (description
33202 "This package provides a command-line interface (CLI) to the Jinja2
33203template engine.")
33204 (license license:bsd-3)))
33205
33206(define-public python-readability
33207 (package
33208 (name "python-readability")
33209 (version "0.3.1")
33210 (source
33211 (origin
33212 (method git-fetch)
33213 (uri (git-reference
33214 (url "https://github.com/andreasvc/readability/")
33215 (commit (string-append "v" version))))
33216 (file-name (git-file-name name version))
33217 (sha256
33218 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
33219 (build-system pyproject-build-system)
33220 (arguments (list #:tests? #f)) ; No tests.
33221 (native-inputs (list python-setuptools))
33222 (home-page "https://github.com/andreasvc/readability/")
33223 (synopsis "Measure text readability using surface characteristics")
33224 (description
33225 "This package provides a Python library that is an implementation of
33226traditional readability measures based on simple surface characteristics.
33227These measures are basically linear regressions based on the number of words,
33228syllables, and sentences.")
33229 (license license:asl2.0)))
33230
33231(define-public python-readability-lxml
33232 ;; No releases since 2020, see:
33233 ;; <https://github.com/buriy/python-readability/issues/196>.
33234 (package
33235 (name "python-readability-lxml")
33236 (version "0.8.4.1")
33237 (source
33238 (origin
33239 (method git-fetch)
33240 (uri (git-reference
33241 (url "http://github.com/buriy/python-readability")
33242 (commit version)))
33243 (file-name (git-file-name name version))
33244 (sha256
33245 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
33246 (build-system pyproject-build-system)
33247 (native-inputs
33248 (list python-poetry-core
33249 python-pytest))
33250 (propagated-inputs
33251 (list python-chardet
33252 python-cssselect
33253 python-lxml
33254 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
33255 (home-page "http://github.com/buriy/python-readability")
33256 (synopsis "HTML to text parser")
33257 (description
33258 "This package provides classes and function that strip gratuitous markup
33259from web pages to make them easier to read.")
33260 (license license:asl2.0)))
33261
33262(define-public python-listparser
33263 (package
33264 (name "python-listparser")
33265 (version "0.20")
33266 (source
33267 (origin
33268 (method git-fetch)
33269 (uri (git-reference
33270 (url "https://github.com/kurtmckee/listparser")
33271 (commit (string-append "v" version))))
33272 (file-name (git-file-name name version))
33273 (sha256
33274 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
33275 (build-system pyproject-build-system)
33276 (native-inputs (list python-pytest python-poetry-core))
33277 (home-page "https://github.com/kurtmckee/listparser")
33278 (synopsis "Parse subscription lists in Python")
33279 (description
33280 "This package provides a Python library that can parse OPML, FOAF, and
33281iGoogle subscription lists.")
33282 (license license:expat)))
33283
33284(define-public python-smartypants
33285 (package
33286 (name "python-smartypants")
33287 (version "2.0.2")
33288 (source
33289 (origin
33290 (method url-fetch)
33291 (uri (pypi-uri "smartypants" version))
33292 (sha256
33293 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
33294 (build-system pyproject-build-system)
33295 (native-inputs
33296 (list python-docutils python-pygments python-setuptools))
33297 (home-page "https://github.com/justinmayer/smartypants.py")
33298 (synopsis "Translate punctuation characters into smart quotes")
33299 (description
33300 "@command{smartpants} can perform the following transformations:
33301@enumerate
33302@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
33303@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
33304entities
33305@item Dashes (-- and ---) into en- and em-dash entities
33306@item Three consecutive dots (... or . . .) into an ellipsis entity
33307@end enumerate")
33308 (license license:bsd-3)))
33309
33310(define-public python-ld
33311 (package
33312 (name "python-ld")
33313 (version "1.9.0")
33314 (source
33315 (origin
33316 (method git-fetch)
33317 (uri (git-reference
33318 (url "https://github.com/nir0s/ld")
33319 (commit (string-append "v" version))))
33320 (file-name (git-file-name name version))
33321 (sha256
33322 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
33323 (build-system pyproject-build-system)
33324 (arguments
33325 (list
33326 ;; XXX: These tests expect ubuntu distro.
33327 #:test-flags
33328 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
33329 "test_ubuntu14nomodules_lsb_release"
33330 "test_trailingblanks_lsb_release")
33331 " and not "))))
33332 (native-inputs (list python-pytest python-setuptools))
33333 (home-page "https://github.com/nir0s/ld")
33334 (synopsis "OS platform information API")
33335 (description
33336 "The ld package provides information about the GNU/Linux distribution it
33337runs on, such as a reliable machine-readable ID, or version information.")
33338 (license license:asl2.0)))
33339
33340(define-public python-quicktions
33341 (package
33342 (name "python-quicktions")
33343 (version "1.22")
33344 (source
33345 (origin
33346 (method git-fetch)
33347 (uri (git-reference
33348 (url "https://github.com/scoder/quicktions")
33349 (commit version)))
33350 (file-name (git-file-name name version))
33351 (sha256
33352 (base32
33353 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
33354 (build-system pyproject-build-system)
33355 (native-inputs
33356 (list python-cython python-pytest python-setuptools))
33357 (home-page "https://github.com/scoder/quicktions")
33358 (synopsis "Fast fractions data type for rational numbers")
33359 (description
33360 "This package provides fast fractions data type for rational numbers. It
33361is the cythonized version of @code{fractions.Fraction}.")
33362 (license license:psfl)))
33363
33364(define-public python-pathvalidate
33365 (package
33366 (name "python-pathvalidate")
33367 (version "3.3.1")
33368 (source
33369 (origin
33370 (method git-fetch)
33371 (uri (git-reference
33372 (url "https://github.com/thombashi/pathvalidate")
33373 (commit (string-append "v" version))))
33374 (file-name (git-file-name name version))
33375 (sha256
33376 (base32 "14ymgd52v5r0g6yc2l7krg3n4x9bkv1ndvdaahiq503n1zhhs3iv"))))
33377 (build-system pyproject-build-system)
33378 (native-inputs (list python-allpairspy
33379 python-click
33380 python-faker
33381 python-pytest
33382 python-setuptools
33383 python-setuptools-scm
33384 python-tcolorpy))
33385 (home-page "https://github.com/thombashi/pathvalidate")
33386 (synopsis "Sanitize strings representing paths")
33387 (description
33388 "@code{pathvalidate} is a Python library to sanitize/validate strings
33389representing paths or filenames.")
33390 (license license:expat)))
33391
33392(define-public python-escapism
33393 (package
33394 (name "python-escapism")
33395 (version "1.0.1")
33396 (source
33397 (origin
33398 (method git-fetch)
33399 (uri (git-reference
33400 (url "https://github.com/jupyterhub/escapism")
33401 (commit version)))
33402 (file-name (git-file-name name version))
33403 (sha256
33404 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
33405 (build-system pyproject-build-system)
33406 (native-inputs (list python-pytest python-setuptools))
33407 (home-page "https://github.com/jupyterhub/escapism")
33408 (synopsis "Simple, generic library for escaping strings")
33409 (description
33410 "This Python library provides a programming interface to, given a set of
33411safe characters and an escape character, escape safe strings and unescape the
33412result.")
33413 (license license:expat)))
33414
33415(define-public python-recommonmark
33416 (package
33417 (name "python-recommonmark")
33418 (version "0.7.1")
33419 (source
33420 (origin
33421 (method url-fetch)
33422 (uri (pypi-uri "recommonmark" version))
33423 (sha256
33424 (base32
33425 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
33426 (build-system pyproject-build-system)
33427 (arguments
33428 (list
33429 ;; XXX: Some of those fail for no good reason.
33430 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
33431 (native-inputs (list python-pytest python-setuptools python-wheel))
33432 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
33433 (home-page "https://github.com/readthedocs/recommonmark")
33434 (synopsis "Docutils-compatibility bridge to CommonMark")
33435 (description
33436 "This package provides a docutils-compatibility bridge to CommonMark that
33437lets you write CommonMark inside of Docutils & Sphinx projects.")
33438 (license license:expat)))
33439
33440(define-public python-rectangle-packer
33441 (package
33442 (name "python-rectangle-packer")
33443 (version "2.1.0")
33444 (source
33445 (origin
33446 (method git-fetch)
33447 (uri (git-reference
33448 (url "https://github.com/Penlect/rectangle-packer")
33449 (commit version)))
33450 (file-name (git-file-name name version))
33451 (sha256
33452 (base32 "0pwzfxpdv20v8d8lq844nm01zzgzzvm2rg2h49aj949myqkg5nmd"))))
33453 (build-system pyproject-build-system)
33454 (arguments
33455 (list
33456 #:phases
33457 #~(modify-phases %standard-phases
33458 ;; Cython extensions have to be built before running the tests.
33459 (add-before 'check 'build-ext
33460 (lambda _
33461 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
33462 (native-inputs
33463 (list python-cython python-pytest python-setuptools))
33464 (home-page "https://github.com/Penlect/rectangle-packer")
33465 (synopsis "Pack rectangles into a bounding box")
33466 (description
33467 "Rectangle-packer is a Python library for packing rectangles
33468into a bounding box with minimal wasted space. It is useful for texture
33469atlases, sprite sheets, and bin packing problems.")
33470 (license license:expat)))
33471
33472(define-public python-redo
33473 (package
33474 (name "python-redo")
33475 (version "3.0.0")
33476 (source
33477 (origin
33478 (method git-fetch)
33479 (uri (git-reference
33480 (url "https://github.com/mozilla-releng/redo")
33481 (commit version)))
33482 (file-name (git-file-name name version))
33483 (sha256
33484 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
33485 (build-system pyproject-build-system)
33486 (native-inputs
33487 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
33488 (home-page "https://github.com/mozilla-releng/redo")
33489 (synopsis "Utilities to retry Python callables")
33490 (description "Redo provides various means to add seamless ability to
33491retry to any Python callable.")
33492 (license license:mpl2.0)))
33493
33494(define-public python-opcodes
33495 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
33496 ;; version number, which is what we use here.
33497 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
33498 (package
33499 (name "python-opcodes")
33500 (version "0.3.14") ;from 'opcodes/__init__.py'
33501 (home-page "https://github.com/Maratyszcza/Opcodes")
33502 (source
33503 (origin
33504 (method git-fetch)
33505 (uri (git-reference (url home-page) (commit commit)))
33506 (file-name (git-file-name name version))
33507 (sha256
33508 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
33509 (build-system pyproject-build-system)
33510 (native-inputs (list python-pytest python-setuptools))
33511 (synopsis "Database of processor instructions and opcodes")
33512 (description
33513 "This project documents instruction sets in a format convenient for
33514tools development. An instruction set is represented by three files:
33515
33516@itemize
33517@item an XML file that describes instructions;
33518@item an XSD file that describes the structure of the XML file;
33519@item a Python module that reads the XML file and represents it as a set of
33520Python objects;
33521@end itemize
33522
33523It currently provides descriptions for most user-mode x86, x86_64, and k1om
33524instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
33525and BMI2).")
33526 (license license:bsd-2))))
33527
33528(define-public python-cart
33529 (package
33530 (name "python-cart")
33531 (version "1.2.3")
33532 (source
33533 (origin
33534 (method git-fetch)
33535 (uri (git-reference
33536 (url "https://github.com/CybercentreCanada/cart")
33537 (commit (string-append "v" version))))
33538 (file-name (git-file-name name version))
33539 (sha256
33540 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33541 (build-system pyproject-build-system)
33542 (arguments
33543 (list
33544 #:test-backend #~'unittest))
33545 (native-inputs
33546 (list python-setuptools))
33547 (propagated-inputs
33548 (list python-pycryptodome))
33549 (home-page "https://github.com/CybercentreCanada/cart")
33550 (synopsis "Library for interacting with the CaRT file format")
33551 (description
33552 "This Python library implements the CaRT file format which is commonly
33553used to store and transmit information about computer malware and associated
33554metadata.")
33555 (license license:bsd-2)))
33556
33557(define-public python-cle
33558 (package
33559 (name "python-cle")
33560 ;; Must be the same version as python-angr.
33561 (version "9.2.186")
33562 (source
33563 (origin
33564 (method git-fetch)
33565 (uri (git-reference
33566 (url "https://github.com/angr/cle")
33567 (commit (string-append "v" version))))
33568 (file-name (git-file-name name version))
33569 (sha256
33570 (base32 "1ycrqysvxgm369cwf0zcyykl1xgma71apbxkbq0z9yakpajgli1s"))))
33571 (build-system pyproject-build-system)
33572 (arguments
33573 (list
33574 ;; tests: 112 passed, 12 skipped, 1 warning
33575 #:phases
33576 #~(modify-phases %standard-phases
33577 (add-before 'check 'check-setup
33578 (lambda _
33579 (copy-recursively
33580 (string-append #$(this-package-native-input "angr-binaries") "/share")
33581 "../binaries"))))))
33582 (native-inputs
33583 (list angr-binaries
33584 python-cffi
33585 python-pytest
33586 python-setuptools))
33587 (propagated-inputs
33588 (list python-archinfo
33589 python-cart
33590 python-pefile
33591 python-pyelftools
33592 python-pyvex
33593 python-sortedcontainers))
33594 (home-page "https://github.com/angr/cle")
33595 (synopsis "Python loader for binaries and their associated libraries")
33596 (description
33597 "CLE loads binaries and their associated libraries, resolves
33598imports and provides an abstraction of process memory the same way as if
33599it was loader by the operating system's loader.")
33600 (license license:bsd-2)))
33601
33602(define-public python-pyvex
33603 (package
33604 (name "python-pyvex")
33605 ;; Must be the same version as python-angr.
33606 (version "9.2.186")
33607 (source
33608 (origin
33609 (method git-fetch)
33610 (uri (git-reference
33611 (url "https://github.com/angr/pyvex")
33612 (commit (string-append "v" version))))
33613 (file-name (git-file-name name version))
33614 (sha256
33615 (base32 "1ql6rn5n8jfmz8v2453283qdgpxvjkfgqdxwqsgs005j9lrhqa7z"))))
33616 (build-system pyproject-build-system)
33617 (arguments
33618 (list
33619 ;; tests: 57 passed
33620 #:phases
33621 #~(modify-phases %standard-phases
33622 (add-after 'unpack 'copy-submodule-package
33623 ;; XXX: ensure-no-mtimes-pre-1980 and build phases fail when using
33624 ;; symlink: "Read-only file system".
33625 (lambda _
33626 (copy-recursively
33627 #+(package-source (this-package-native-input "vex"))
33628 (string-append (getcwd) "/vex"))))
33629 (add-before 'build 'set-cc
33630 (lambda _
33631 (setenv "AR" #$(ar-for-target))
33632 (setenv "CC" #$(cc-for-target))
33633 (setenv "CC_NATIVE" "gcc"))))))
33634 (native-inputs
33635 (list cmake-minimal
33636 python-pytest
33637 python-scikit-build-core
33638 vex))
33639 (propagated-inputs
33640 (list python-bitstring
33641 python-cffi))
33642 (home-page "https://github.com/angr/pyvex")
33643 (synopsis "Python interface to libVEX and VEX IR")
33644 (description
33645 "This package provides a Python interface the libVEX and VEX IR.
33646VEX is the intermediate representation (also known as intermediate
33647language) used by the Valgrind analysis tool. As such, VEX is designed
33648to enable all kinds of binary analysis tasks.")
33649 (license (list license:bsd-2
33650 license:gpl2))))
33651
33652(define-public python-claripy
33653 (package
33654 (name "python-claripy")
33655 ;; Must be the same version as python-angr.
33656 (version "9.2.186")
33657 (source
33658 (origin
33659 (method git-fetch)
33660 (uri (git-reference
33661 (url "https://github.com/angr/claripy")
33662 (commit (string-append "v" version))))
33663 (file-name (git-file-name name version))
33664 (sha256
33665 (base32 "1vlvscjn098100i2hfcsxllj19bnzs6vagnkg0fr18ps2gvbzcnv"))))
33666 (build-system pyproject-build-system)
33667 (arguments
33668 (list
33669 ;; tests: 329 passed, 1 skipped
33670 #:phases
33671 #~(modify-phases %standard-phases
33672 (add-after 'unpack 'relax-requirements
33673 (lambda _
33674 (substitute* "pyproject.toml"
33675 ;; Current version of z3 in Guix is 4.13.0 and sanity check
33676 ;; failes to detect it (similar like OpenCV), relax the
33677 ;; version constraint, see:
33678 ;; <https://github.com/angr/claripy/commit/d1fe2df>.
33679 ((", \"z3-solver==4.13.0.0\"")
33680 "")))))))
33681 (native-inputs
33682 (list python-pytest
33683 python-setuptools))
33684 (propagated-inputs
33685 (list python-cachetools
33686 python-decorator
33687 python-pysmt
33688 z3))
33689 (home-page "https://github.com/angr/claripy")
33690 (synopsis "Abstraction layer for constraint solvers")
33691 (description
33692 "This Python module provides an abstraction layer for interacting
33693with constraint solvers. Specifically, it is intended to be used with
33694SMT solvers and is built on top of the Z3 solver.")
33695 (license license:bsd-2)))
33696
33697(define-public python-pysmt
33698 (package
33699 (name "python-pysmt")
33700 (version "0.9.6")
33701 (source
33702 (origin
33703 ;; Fetching from Git as pypi release doesn't include all test files.
33704 (method git-fetch)
33705 (uri (git-reference
33706 (url "https://github.com/pysmt/pysmt")
33707 (commit (string-append "v" version))))
33708 (file-name (git-file-name name version))
33709 (sha256
33710 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33711 (build-system pyproject-build-system)
33712 (arguments
33713 `(#:phases (modify-phases %standard-phases
33714 (add-before 'check 'set-pysmt-solver
33715 (lambda _
33716 (setenv "PYSMT_SOLVER" "z3"))))))
33717 (native-inputs (list python-pytest python-setuptools python-wheel))
33718 (propagated-inputs (list z3))
33719 (home-page "https://github.com/pysmt/pysmt")
33720 (synopsis
33721 "Solver-agnostic library for SMT formula manipulation and solving")
33722 (description
33723 "This Python module provides a solver-agnostic abstraction for
33724working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33725it allows manipulation and solving such formulas.")
33726 (license license:asl2.0)))
33727
33728(define-public python-rpyc
33729 (package
33730 (name "python-rpyc")
33731 (version "5.3.1")
33732 (source
33733 (origin
33734 ;; Fetching from Git as pypi release doesn't include all test files.
33735 (method git-fetch)
33736 (uri (git-reference
33737 (url "https://github.com/tomerfiliba-org/rpyc")
33738 (commit version)))
33739 (file-name (git-file-name name version))
33740 (sha256
33741 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33742 (snippet '(begin
33743 ;; Disable deploy tests, these rely on OpenSSH and require
33744 ;; configuring the SSH client manually to accept the host key.
33745 (delete-file "tests/test_deploy.py")
33746 ;; Disable tests requiring network access. These tests
33747 ;; presently fail with the error "Network is unreachable".
33748 (delete-file "tests/test_registry.py")))))
33749 (build-system pyproject-build-system)
33750 (arguments
33751 `(#:phases (modify-phases %standard-phases
33752 (replace 'check
33753 (lambda* (#:key tests? #:allow-other-keys)
33754 (when tests?
33755 (with-directory-excursion "tests"
33756 (invoke "python" "-m" "unittest"))))))))
33757 (propagated-inputs (list python-hatchling python-plumbum))
33758 (home-page "https://github.com/tomerfiliba-org/rpyc")
33759 (synopsis
33760 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33761 (description
33762 "This Python module enables remote procedure calls, clustering, and
33763distributed-computing. For this purpose, it makes use of object-proxying, a technique
33764that employs python's dynamic nature, to overcome the physical boundaries between
33765processes and computers, so that remote objects can be manipulated as if they
33766were local.")
33767 (license license:expat)))
33768
33769(define-public python-nampa
33770 (package
33771 (name "python-nampa")
33772 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33773 ;; has 0.1.1 as version. Latest commit is from 2024.
33774 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33775 (revision . "0")))
33776 (version (git-version "1.0.0"
33777 (assoc-ref properties 'revision)
33778 (assoc-ref properties 'commit)))
33779 (source
33780 (origin
33781 (method git-fetch)
33782 (uri (git-reference
33783 (url "https://github.com/thebabush/nampa")
33784 (commit (assoc-ref properties 'commit))))
33785 (file-name (git-file-name name version))
33786 (sha256
33787 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33788 (build-system pyproject-build-system)
33789 (arguments
33790 (list
33791 #:test-flags
33792 #~(list "-k test_random_values")
33793 #:phases
33794 #~(modify-phases %standard-phases
33795 (add-after 'unpack 'patch-tests
33796 (lambda _
33797 ;; Unclear why this top-level __init__.py is here. It seems to
33798 ;; setup a plugin for binaryninja, which Guix does not package.
33799 (delete-file "__init__.py")
33800 ;; Yields tests, which is not allowed anymore.
33801 (substitute* "tests/test_crc.py"
33802 (("yield") "#yield")))))))
33803 (propagated-inputs (list python-future))
33804 (native-inputs (list python-pytest python-setuptools))
33805 (home-page "https://github.com/thebabush/nampa")
33806 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33807 (description
33808 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33809and Recognition Technology}. This technology is useful for identifying
33810common library subroutines in disassembled binaries.")
33811 (license license:lgpl3)))
33812
33813(define-public python-mulpyplexer
33814 (package
33815 (name "python-mulpyplexer")
33816 (version "0.09")
33817 (source
33818 (origin
33819 (method url-fetch)
33820 (uri (pypi-uri "mulpyplexer" version))
33821 (sha256
33822 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33823 (build-system pyproject-build-system)
33824 (arguments
33825 (list
33826 #:phases
33827 '(modify-phases %standard-phases
33828 (replace 'check
33829 (lambda* (#:key tests? #:allow-other-keys)
33830 (when tests?
33831 (invoke "python" "mulpyplexer.py")))))))
33832 (native-inputs (list python-setuptools python-wheel))
33833 (home-page "https://github.com/zardus/mulpyplexer/")
33834 (synopsis "Multiplexes interactions with lists of Python objects")
33835 (description "This module provides utilities for multiplexing
33836interactions with lists of Python objects.")
33837 (license license:bsd-2)))
33838
33839(define-public python-itanium-demangler
33840 (package
33841 (name "python-itanium-demangler")
33842 (version "1.1")
33843 (source
33844 (origin
33845 (method git-fetch)
33846 (uri (git-reference
33847 ;; PyPI only provides wheels and no source code.
33848 (url "https://github.com/whitequark/python-itanium_demangler")
33849 (commit (string-append "v" version))))
33850 (file-name (git-file-name name version))
33851 (sha256
33852 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33853 (build-system pyproject-build-system)
33854 (arguments
33855 (list
33856 #:phases
33857 #~(modify-phases %standard-phases
33858 (replace 'check
33859 (lambda* (#:key tests? #:allow-other-keys)
33860 (when tests?
33861 (with-directory-excursion "tests"
33862 (invoke "python" "-m" "unittest"))))))))
33863 (native-inputs (list python-setuptools python-wheel))
33864 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33865 (synopsis "Pure Python Itanium C++ ABI demangler")
33866 (description
33867"This Python module provides an implementation of the Itanium C++ ABI symbol
33868mangling language. The demangler generates an abstract syntax tree from
33869mangled symbols, which can be used for directly extracting type information.")
33870 (license license:bsd-0)))
33871
33872(define-public python-angr
33873 (package
33874 (name "python-angr")
33875 (version "9.2.186")
33876 (source
33877 (origin
33878 (method git-fetch)
33879 (uri (git-reference
33880 (url "https://github.com/angr/angr")
33881 (commit (string-append "v" version))))
33882 (file-name (git-file-name name version))
33883 (sha256
33884 (base32 "1x1vnhgf1p05z2cdjc626jvvk9xqa9qzmg1yk73lq4qn7sa4cnmd"))
33885 (patches (search-patches "python-angr-fix-manyfloat-tests.patch"
33886 "python-angr-check-exec-deps.patch"))))
33887 (build-system pyproject-build-system)
33888 (arguments
33889 (list
33890 #:imported-modules `(,@%cargo-build-system-modules
33891 ,@%pyproject-build-system-modules)
33892 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
33893 (guix build pyproject-build-system)
33894 (guix build utils))
33895 #:test-flags
33896 #~(list "-x"
33897 "--dist" "load"
33898 "--numprocesses" (number->string (parallel-job-count))
33899 "-k"
33900 ;; test_mips32_missing_offset_in_instructions fails
33901 ;; with capstone 5 and passes with capstone 4. Might
33902 ;; be a capstone regressions, needs investigation.
33903 ;;
33904 ;; TODO: test_unsat_core needs investigation.
33905 ;;
33906 ;; test_decompiling_abnormal_switch_case_case3 is broken
33907 ;; when tests modifying global counters are run before it.
33908 ;; See <https://github.com/angr/angr/issues/5715>.
33909 ;;
33910 ;; test_concrete_memset is a non-deterministic benchmark.
33911 ;; test_similarity_fauxware is flaky.
33912 (string-append
33913 "not test_mips32_missing_offset_in_instructions"
33914 " and not test_unsat_core"
33915 " and not test_decompiling_abnormal_switch_case_case3"
33916 " and not test_concrete_memset"
33917 " and not test_similarity_fauxware"))
33918 #:phases
33919 #~(modify-phases %standard-phases
33920 (add-after 'unpack 'use-guix-vendored-dependencies
33921 (lambda _
33922 (substitute* "native/angr/Cargo.toml"
33923 (("^icicle-fuzzing.*$")
33924 "icicle-fuzzing = { version = \"*\" }\n")
33925 (("^icicle-vm.*$")
33926 "icicle-vm = { version = \"*\" }\n")
33927 (("^pcode.*$")
33928 "pcode = { version = \"*\" }\n"))))
33929 (add-after 'unpack 'fix-tests
33930 (lambda _
33931 (substitute* "tests/common.py"
33932 (("\\[\"cc\"\\]")
33933 "[\"gcc\"]"))))
33934 (add-after 'unpack 'relax-protobuf
33935 (lambda _
33936 ;; Relax protobuf constraint, see 'generate-protobuf-files phase below.
33937 (substitute* "pyproject.toml"
33938 (("protobuf>=6.33.0") "protobuf"))))
33939 (add-after 'use-guix-vendored-dependencies 'prepare-cargo-build-system
33940 (lambda args
33941 (for-each (lambda (phase)
33942 (format #t "Running cargo phase: ~a~%" phase)
33943 (apply (assoc-ref cargo:%standard-phases phase)
33944 #:cargo-target #$(cargo-triplet)
33945 args))
33946 '(prepare-rust-crates
33947 unpack-rust-crates
33948 configure
33949 check-for-pregenerated-files
33950 patch-cargo-checksums))))
33951 (add-before 'check 'check-setup
33952 (lambda _
33953 (copy-recursively
33954 (string-append #$(this-package-native-input "angr-binaries") "/share")
33955 "../binaries")))
33956 (add-before 'build 'generate-protobuf-files
33957 ;; Regenerate protobuf files using our utilized protobuf version.
33958 ;; This allows us to relax the version constraint on python-protobuf.
33959 (lambda _
33960 (apply invoke "protoc" "-I=." "--python_out=." (find-files "angr/protos" "\\.proto$"))))
33961 (add-before 'build 'set-cc
33962 (lambda _
33963 (setenv "CC" #$(cc-for-target)))))))
33964 (propagated-inputs (list python-archinfo ;sync version with python-angr
33965 python-cachetools
33966 python-cffi
33967 python-claripy ;sync version with python-angr
33968 python-cle ;sync version with python-angr
33969 python-cxxheaderparser
33970 python-gitpython
33971 python-msgspec
33972 python-mulpyplexer
33973 python-networkx
33974 python-protobuf
33975 python-psutil
33976 python-pycparser
33977 python-pydemumble
33978 python-pyformlang
33979 python-pypcode
33980 python-pyvex ;sync version with python-angr
33981 python-rich
33982 python-sortedcontainers
33983 python-sympy
33984 python-sqlalchemy
33985 python-keystone-engine
33986 python-typing-extensions
33987 python-unique-log-filter
33988 unicorn-2.0))
33989 (native-inputs
33990 (append
33991 (list angr-binaries
33992 protobuf
33993 python-pytest
33994 python-pytest-xdist
33995 python-setuptools
33996 python-setuptools-rust
33997 rust
33998 `(,rust "cargo"))
33999 (or (and=> (%current-target-system)
34000 (compose list make-rust-sysroot))
34001 '())))
34002 (inputs
34003 (cons* (cargo-inputs 'python-angr)))
34004 (home-page "https://github.com/angr/angr")
34005 (synopsis "Multi-architecture binary analysis toolkit")
34006 (description
34007 "This package provides a versatile binary analysis platform with the
34008ability to perform dynamic symbolic execution as well as various
34009static analyses directly on binaries. As such, it can be used for all
34010kinds of reverse engineering, vulnerability discovery, exploit
34011generation, and software testing purposes.")
34012 (license license:bsd-2)))
34013
34014(define-public python-peachpy
34015 ;; There is no tag in this repo.
34016 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
34017 (version "0.2.0") ;from 'peachpy/__init__.py'
34018 (revision "3"))
34019 (package
34020 (name "python-peachpy")
34021 (version (git-version version revision commit))
34022 (home-page "https://github.com/Maratyszcza/PeachPy")
34023 (source (origin
34024 (method git-fetch)
34025 (uri (git-reference (url home-page) (commit commit)))
34026 (file-name (git-file-name name version))
34027 (sha256
34028 (base32
34029 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
34030 (patches (search-patches "python-peachpy-determinism.patch"))))
34031 (build-system pyproject-build-system)
34032 (arguments
34033 ;; The issue is known and the test will probably never be fixed.
34034 ;; https://github.com/Maratyszcza/PeachPy/issues/131
34035 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
34036 (native-inputs
34037 (list python-pytest python-setuptools python-wheel))
34038 (propagated-inputs
34039 (list python-six python-opcodes))
34040 (synopsis "Efficient assembly code generation in Python")
34041 (description
34042 "PeachPy is a Python framework for writing high-performance assembly kernels.
34043PeachPy aims to simplify writing optimized assembly kernels while preserving
34044all optimization opportunities of traditional assembly.
34045
34046PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
34047for the Go language tool chain; it adapts to different calling conventions and
34048application binary interfaces (ABIs); it takes care of register allocation; it
34049supports x86_64 instructions up to AVX-512 and SHA.")
34050 (supported-systems '("x86_64-linux"))
34051 (license license:bsd-2))))
34052
34053(define-public python-sgmllib3k
34054 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
34055 (revision "1"))
34056 (package
34057 (name "python-sgmllib3k")
34058 (version
34059 (git-version "1.0.0" revision commit))
34060 (source
34061 (origin
34062 (method git-fetch)
34063 (uri (git-reference
34064 (url "https://github.com/hsoft/sgmllib")
34065 (commit commit)))
34066 (file-name (git-file-name name version))
34067 (sha256
34068 (base32
34069 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
34070 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
34071 (build-system pyproject-build-system)
34072 (native-inputs (list python-pytest python-setuptools))
34073 (home-page "https://github.com/hsoft/sgmllib")
34074 (synopsis "Python 3 port of sgmllib")
34075 (description "This package provides an unmaintained port of sgmllib to
34076Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
34077Generalized Mark-up Language}.")
34078 (license license:bsd-3))))
34079
34080(define-public python-cwcwidth
34081 (package
34082 (name "python-cwcwidth")
34083 (version "0.1.10")
34084 (source
34085 (origin
34086 (method url-fetch)
34087 (uri (pypi-uri "cwcwidth" version))
34088 (sha256
34089 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
34090 (build-system pyproject-build-system)
34091 (arguments
34092 (list
34093 #:phases
34094 #~(modify-phases %standard-phases
34095 (add-before 'check 'remove-local-cwcwidth
34096 (lambda _
34097 ;; This would otherwise interfere with finding the installed
34098 ;; cwcwidth when running tests.
34099 (delete-file-recursively "cwcwidth"))))))
34100 (native-inputs
34101 (list python-cython
34102 python-pytest
34103 python-setuptools
34104 python-setuptools-scm))
34105 (home-page "https://github.com/sebastinas/cwcwidth")
34106 (synopsis "Python bindings for wc(s)width")
34107 (description
34108 "This package provides bindings for wcwidth and wcswidth functions
34109defined in POSIX.1-2001 and POSIX.1-2008.")
34110 (license license:expat)))
34111
34112(define-public python-pyan3
34113 (package
34114 (name "python-pyan3")
34115 (version "1.2.0")
34116 (source
34117 (origin
34118 ;; Source tarball on PyPI lacks tests.
34119 (method git-fetch)
34120 (uri (git-reference
34121 (url "https://github.com/Technologicat/pyan")
34122 (commit (string-append "v" version))))
34123 (file-name (git-file-name name version))
34124 (sha256
34125 (base32
34126 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
34127 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
34128 "python-pyan3-fix-absolute-path-bug.patch"))))
34129 (build-system pyproject-build-system)
34130 (native-inputs
34131 (list python-pytest python-setuptools python-wheel))
34132 (propagated-inputs
34133 (list python-jinja2))
34134 (home-page "https://github.com/Technologicat/pyan")
34135 (synopsis "Offline call graph generator for Python 3")
34136 (description "Pyan takes one or more Python source files, performs
34137a (rather superficial) static analysis, and constructs a directed graph of the
34138objects in the combined source, and how they define or use each other. The
34139graph can be output for rendering by GraphViz or yEd.")
34140 (license license:gpl2)))
34141
34142(define-public python-multipledispatch
34143 (package
34144 (name "python-multipledispatch")
34145 (version "1.0.0")
34146 (source
34147 (origin
34148 (method git-fetch) ;no tests in PyPI archive
34149 (uri (git-reference
34150 (url "https://github.com/mrocklin/multipledispatch")
34151 (commit version)))
34152 (file-name (git-file-name name version))
34153 (sha256
34154 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
34155 (build-system pyproject-build-system)
34156 (native-inputs
34157 (list python-pytest
34158 python-pytest-benchmark
34159 python-setuptools))
34160 (home-page "https://github.com/mrocklin/multipledispatch/")
34161 (synopsis "Multiple dispatch for Python based on pattern matching")
34162 (description
34163 "This library provides an efficient mechanism for overloading function
34164implementations based on the types of the arguments.")
34165 (license license:bsd-3)))
34166
34167(define-public python-multimethod
34168 (package
34169 (name "python-multimethod")
34170 (version "1.10")
34171 (source
34172 (origin
34173 ;; No tests in the PyPI tarball.
34174 (method git-fetch)
34175 (uri (git-reference
34176 (url "https://github.com/coady/multimethod")
34177 (commit (string-append "v" version))))
34178 (file-name (git-file-name name version))
34179 (sha256
34180 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
34181 (build-system pyproject-build-system)
34182 (native-inputs (list python-pytest python-setuptools python-wheel))
34183 (home-page "https://github.com/coady/multimethod")
34184 (synopsis "Python support for multiple argument dispatching")
34185 (description
34186 "This package provides a decorator for adding multiple argument
34187dispatching to functions. The decorator creates a multimethod object as
34188needed and registers the function with its annotations.")
34189 (license license:asl2.0)))
34190
34191(define-public python-logical-unification
34192 (package
34193 (name "python-logical-unification")
34194 (version "0.4.7")
34195 (source
34196 (origin
34197 (method git-fetch)
34198 (uri (git-reference
34199 (url "https://github.com/pythological/unification")
34200 (commit (string-append "v" version))))
34201 (file-name (git-file-name name version))
34202 (sha256
34203 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
34204 (build-system pyproject-build-system)
34205 (native-inputs
34206 (list python-pytest
34207 python-pytest-benchmark
34208 python-setuptools
34209 python-setuptools-scm))
34210 (propagated-inputs
34211 (list python-multipledispatch
34212 python-toolz))
34213 (home-page "https://github.com/pythological/unification/")
34214 (synopsis "Logical unification in Python for solving symbolic expressions")
34215 (description "This library provides algorithms and data types for solving
34216symbolic expressions in pure Python using the technique of logical unification.")
34217 (license license:bsd-3)))
34218
34219(define-public python-looseversion
34220 (package
34221 (name "python-looseversion")
34222 (version "1.3.0")
34223 (source
34224 (origin
34225 (method url-fetch)
34226 (uri (pypi-uri "looseversion" version))
34227 (sha256
34228 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
34229 (build-system pyproject-build-system)
34230 (arguments
34231 (list
34232 ;; No tests provided.
34233 #:tests? #f))
34234 (native-inputs
34235 (list python-hatchling))
34236 (home-page "https://github.com/effigies/looseversion")
34237 (synopsis "Version numbering for anarchists and software realists")
34238 (description
34239 "This package provides a drop-in replacement for the original
34240@code{LooseVersion}. It implements an identical interface and comparison
34241logic to @code{LooseVersion}. The only major change is that a
34242@code{looseversion.LooseVersion} is comparable to a
34243@code{distutils.version.LooseVersion}, which means tools should not need to
34244worry whether all dependencies that use LooseVersion have migrated.")
34245 (license license:psfl)))
34246
34247(define-public python-cons
34248 (package
34249 (name "python-cons")
34250 (version "0.4.7")
34251 (source
34252 (origin
34253 (method git-fetch) ;no tests in PyPI archive
34254 (uri (git-reference
34255 (url "https://github.com/pythological/python-cons")
34256 (commit (string-append "v" version))))
34257 (file-name (git-file-name name version))
34258 (sha256
34259 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
34260 (build-system pyproject-build-system)
34261 (native-inputs
34262 (list python-pytest
34263 python-setuptools
34264 python-setuptools-scm
34265 python-wheel))
34266 (propagated-inputs
34267 (list python-logical-unification))
34268 (home-page "https://github.com/pythological/python-cons")
34269 (synopsis "Cons cell data structures and related algorithms for Python")
34270 (description
34271 "This library implements algorithms and data structures for Lisp-style
34272cons cells in Python.")
34273 (license license:lgpl3+)))
34274
34275(define-public python-etuples
34276 (package
34277 (name "python-etuples")
34278 (version "0.3.10")
34279 (source
34280 (origin
34281 (method url-fetch)
34282 (uri (pypi-uri "etuples" version))
34283 (sha256
34284 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
34285 (build-system pyproject-build-system)
34286 (arguments
34287 (list
34288 #:test-flags
34289 ;; assert False == {~_1: <built-in function add>}
34290 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
34291 (native-inputs
34292 (list python-pytest
34293 python-setuptools
34294 python-setuptools-scm))
34295 (propagated-inputs
34296 (list python-cons
34297 python-multipledispatch))
34298 (home-page "https://github.com/pythological/etuples")
34299 (synopsis "S-expressions in Python")
34300 (description
34301 "This library implements eval'able S-expression in Python using tuple-like objects.")
34302 (license license:asl2.0)))
34303
34304(define-public python-minikanren
34305 (package
34306 (name "python-minikanren")
34307 (version "1.0.5")
34308 (source
34309 (origin
34310 (method git-fetch)
34311 (uri (git-reference
34312 (url "https://github.com/pythological/kanren")
34313 (commit (string-append "v" version))))
34314 (file-name (git-file-name name version))
34315 (sha256
34316 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
34317 (build-system pyproject-build-system)
34318 (arguments
34319 (list
34320 ;; 60 passed, 3 skipped, 23 deselected
34321 #:test-flags
34322 #~(list "-k" (string-join
34323 ;; XXX: 16 tests fail with assertion not equal, check why.
34324 (list "not test_basics"
34325 "test_eq_assoc"
34326 "test_eq_assoccomm"
34327 "test_eq_comm"
34328 "test_map_anyo"
34329 "test_map_anyo_misc"
34330 "test_map_anyo_reverse"
34331 "test_reduceo"
34332 "test_walko"
34333 "test_walko_reverse")
34334 " and not "))))
34335 (native-inputs
34336 (list python-pytest
34337 python-setuptools))
34338 (propagated-inputs
34339 (list python-cons
34340 python-etuples
34341 python-logical-unification
34342 python-multipledispatch
34343 python-toolz
34344 python-typing-extensions))
34345 (home-page "https://github.com/pythological/kanren")
34346 (synopsis "Relational logic programming in pure Python")
34347 (description
34348 "The minikanren library provides an algorithmic core for computer algebra
34349systems in Python.")
34350 (license license:bsd-3)))
34351
34352(define-public python-dotenv
34353 (package
34354 (name "python-dotenv")
34355 (version "1.1.1")
34356 (source
34357 (origin
34358 (method url-fetch)
34359 (uri (pypi-uri "python_dotenv" version))
34360 (sha256
34361 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
34362 (build-system pyproject-build-system)
34363 (native-inputs
34364 (list python-pytest
34365 python-setuptools
34366 python-sh))
34367 (propagated-inputs
34368 (list python-click))
34369 (home-page "https://saurabh-kumar.com/python-dotenv/")
34370 (synopsis "Setup environment variables according to .env files")
34371 (description
34372 "This package provides the @code{python-dotenv} Python module to read
34373key-value pairs from a @code{.env} file and set them as environment variables.")
34374 (license license:bsd-3)))
34375
34376;; Old version just for docker-compose; remove once that is updated.
34377(define-public python-dotenv-0.13.0
34378 (package (inherit python-dotenv)
34379 (name "python-dotenv")
34380 (version "0.13.0")
34381 (source
34382 (origin
34383 (method url-fetch)
34384 (uri (pypi-uri "python-dotenv" version))
34385 (sha256
34386 (base32
34387 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
34388 (arguments
34389 `(#:phases
34390 (modify-phases %standard-phases
34391 (replace 'check
34392 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
34393 (when tests?
34394 (add-installed-pythonpath inputs outputs)
34395 (setenv "PATH" (string-append (getenv "PATH") ":"
34396 (assoc-ref outputs "out") "/bin"))
34397 ;; Skip the ipython tests.
34398 (delete-file "tests/test_ipython.py")
34399 (invoke "python" "-m" "pytest")))))))
34400 (native-inputs
34401 (modify-inputs native-inputs
34402 (append python-mock)
34403 (replace "python-sh" python-sh-1)))))
34404
34405(define-public python-braintree
34406 (package
34407 (name "python-braintree")
34408 (version "4.40.0")
34409 (source
34410 (origin
34411 (method url-fetch)
34412 (uri (pypi-uri "braintree" version))
34413 (sha256
34414 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
34415 (build-system pyproject-build-system)
34416 (arguments (list #:tests? #f)) ; No tests.
34417 (native-inputs (list python-setuptools))
34418 (propagated-inputs (list python-requests))
34419 (home-page
34420 "https://developers.braintreepayments.com/python/sdk/server/overview")
34421 (synopsis "Braintree Python Library")
34422 (description
34423 "The Braintree Python SDK provides integration access to the Braintree
34424Gateway. Braintree is a US-based payments service provider.")
34425 (license license:expat)))
34426
34427(define-public python-markuppy
34428 (package
34429 (name "python-markuppy")
34430 (version "1.18")
34431 (source
34432 (origin
34433 (method git-fetch)
34434 (uri (git-reference
34435 (url "https://github.com/tylerbakke/MarkupPy")
34436 (commit (string-append "v" version))))
34437 (file-name (git-file-name name version))
34438 (sha256
34439 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
34440 (build-system pyproject-build-system)
34441 (native-inputs (list python-pytest python-setuptools))
34442 (home-page "https://github.com/tylerbakke/MarkupPy")
34443 (synopsis "Pythonic HTML/XML generator")
34444 (description
34445 "This Python module attempts to make it easier to generate HTML/XML from
34446a Python program in an customizable and pythonic way.")
34447 (license license:expat)))
34448
34449(define-public python-csb43
34450 (package
34451 (name "python-csb43")
34452 (version "1.0.0")
34453 (source
34454 (origin
34455 (method git-fetch)
34456 (uri (git-reference
34457 (url "https://bitbucket.org/wmj/csb43")
34458 (commit version)))
34459 (file-name (git-file-name name version))
34460 (sha256
34461 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
34462 (build-system pyproject-build-system)
34463 ;; tests: 15102 passed, 36 skipped, 5489 warnings
34464 (arguments
34465 (list
34466 #:phases
34467 #~(modify-phases %standard-phases
34468 (add-after 'unpack 'relax-requirements
34469 (lambda _
34470 (substitute* "pyproject.toml"
34471 (("\"deprecated ~=.*\",")
34472 "\"deprecated\",")))))))
34473 (native-inputs
34474 (list python-lxml
34475 python-pytest
34476 python-setuptools
34477 python-setuptools-scm))
34478 (propagated-inputs
34479 (list python-deprecated
34480 python-pycountry
34481 python-pyyaml
34482 python-tablib))
34483 (home-page "https://bitbucket.org/wmj/csb43")
34484 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3448543 (CSB43)")
34486 (description
34487 "This package provides tools to convert files in the format used by
34488multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
34489Spanish Banking Association [AEB43]) to other formats.
34490
34491Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
34492spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
34493 (license license:lgpl3)))
34494
34495(define-public python-csb43-0.10
34496 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
34497 ;; homebank, i18n, ofx, and utils.
34498 (package
34499 (inherit python-csb43)
34500 (name "python-csb43")
34501 (version "0.10.1")
34502 ;; tests: 15493 passed, 37 skipped, 7447 warnings
34503 (source
34504 (origin
34505 (method git-fetch)
34506 (uri (git-reference
34507 (url "https://bitbucket.org/wmj/csb43")
34508 (commit version)))
34509 (file-name (git-file-name name version))
34510 (sha256
34511 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
34512
34513(define-public python-febelfin-coda
34514 (package
34515 (name "python-febelfin-coda")
34516 (version "0.3.0")
34517 (source
34518 (origin
34519 (method hg-fetch)
34520 (uri (hg-reference
34521 (url "https://foss.heptapod.net/tryton/coda")
34522 (changeset version)))
34523 (file-name (string-append name "-" version "-checkout"))
34524 (sha256
34525 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
34526 (build-system pyproject-build-system)
34527 (arguments
34528 (list
34529 #:test-backend #~'unittest
34530 #:phases
34531 #~(modify-phases %standard-phases
34532 (add-after 'install 'remove-installed-tests
34533 (lambda* (#:key inputs outputs #:allow-other-keys)
34534 (with-directory-excursion (site-packages inputs outputs)
34535 (for-each delete-file
34536 (list "coda/test.py"
34537 "coda/test_readme.py"))))))))
34538 (native-inputs (list python-setuptools))
34539 (home-page "https://coda.b2ck.com/")
34540 (synopsis "Module to parse Belgian CODA files")
34541 (description
34542 "This package provides a module to parse Coded statement of account
34543(CODA) files as defined be the Belgian Febelfin bank standard.")
34544 (license license:bsd-3)))
34545
34546(define-public python-ofxparse
34547 (package
34548 (name "python-ofxparse")
34549 (version "0.21")
34550 (source
34551 (origin
34552 (method url-fetch)
34553 (uri (pypi-uri "ofxparse" version))
34554 (sha256
34555 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34556 (build-system pyproject-build-system)
34557 (native-inputs (list python-pynose python-setuptools))
34558 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34559 (home-page "http://sites.google.com/site/ofxparse")
34560 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34561format")
34562 (description "@code{ofxparse} is a parser for Open Financial
34563Exchange (.ofx) format files. OFX files are available from almost any online
34564banking site, so they work well if you want to pull together your finances
34565from multiple sources. Online trading accounts also often provide account
34566statements in OFX files.")
34567 (license license:expat)))
34568
34569(define-public python-rfc3339-validator
34570 (package
34571 (name "python-rfc3339-validator")
34572 (version "0.1.4")
34573 (source
34574 (origin
34575 (method url-fetch)
34576 (uri (pypi-uri "rfc3339_validator" version))
34577 (sha256
34578 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34579 (build-system pyproject-build-system)
34580 (native-inputs
34581 (list python-pytest
34582 python-setuptools
34583 python-strict-rfc3339))
34584 (propagated-inputs
34585 (list python-six))
34586 (home-page "https://github.com/naimetti/rfc3339-validator")
34587 (synopsis "Python RFC3339 validator")
34588 (description "This package provides a pure Python RFC3339 validator.")
34589 (license license:expat)))
34590
34591(define-public python-platformdirs
34592 ;; Try to update simultaneously with the bootstrap version in
34593 ;; (gnu packages python-build).
34594 (package
34595 (name "python-platformdirs")
34596 (version "4.3.6")
34597 (source
34598 (origin
34599 (method url-fetch)
34600 (uri (pypi-uri "platformdirs" version))
34601 (sha256
34602 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34603 (build-system pyproject-build-system)
34604 (native-inputs
34605 (list python-appdirs
34606 python-hatchling
34607 python-hatch-vcs
34608 python-pytest
34609 python-pytest-mock))
34610 (home-page "https://github.com/platformdirs/platformdirs")
34611 (synopsis "Determine the appropriate platform-specific directories")
34612 (description "When writing applications, finding the right location to
34613store user data and configuration varies per platform. Even for
34614single-platform apps, there may by plenty of nuances in figuring out the right
34615location. This small Python module determines the appropriate
34616platform-specific directories, e.g. the ``user data dir''.")
34617 (license license:expat)))
34618
34619(define-public python-json2html
34620 (package
34621 (name "python-json2html")
34622 (version "1.3.0")
34623 (source
34624 (origin
34625 (method git-fetch)
34626 (uri (git-reference
34627 (url "https://github.com/softvar/json2html")
34628 (commit (string-append "v" version))))
34629 (file-name (git-file-name name version))
34630 (sha256
34631 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34632 (build-system pyproject-build-system)
34633 (arguments
34634 (list
34635 #:test-backend #~'custom
34636 #:test-flags #~(list "test/run_tests.py")))
34637 (native-inputs (list python-setuptools))
34638 (home-page "https://github.com/softvar/json2html")
34639 (synopsis "Convert JSON to HTML table")
34640 (description
34641 "@code{python-json2html} is a python module to convert JSON into a human
34642readable HTML table representation.")
34643 (license license:expat)))
34644
34645(define-public python-face
34646 (package
34647 (name "python-face")
34648 (version "24.0.0")
34649 (source
34650 (origin
34651 (method git-fetch)
34652 (uri (git-reference
34653 (url "https://github.com/mahmoud/face")
34654 (commit (string-append "v" version))))
34655 (file-name (git-file-name name version))
34656 (sha256
34657 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34658 (build-system pyproject-build-system)
34659 (native-inputs (list python-pytest python-setuptools))
34660 (propagated-inputs (list python-boltons))
34661 (home-page "https://github.com/mahmoud/face")
34662 (synopsis "CLI parsing and dispatching microframework")
34663 (description "@code{python-face} is a Pythonic microframework for building
34664command-line applications.
34665
34666@itemize
34667@item First-class subcommand support
34668@item Powerful middleware architecture
34669@item Separate parser layer
34670@item Built-in flagfile support
34671@item Handy testing utilities
34672@item Themeable help display
34673@end itemize")
34674 (license license:bsd-3)))
34675
34676(define-public python-glom
34677 (package
34678 (name "python-glom")
34679 (version "24.11.0")
34680 (source
34681 (origin
34682 (method git-fetch)
34683 (uri (git-reference
34684 (url "https://github.com/mahmoud/glom")
34685 (commit (string-append "v" version))))
34686 (file-name (git-file-name name version))
34687 (sha256
34688 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34689 (build-system pyproject-build-system)
34690 (native-inputs
34691 (list python-pytest
34692 python-pyyaml
34693 python-setuptools))
34694 (propagated-inputs
34695 (list python-attrs
34696 python-boltons
34697 python-face))
34698 (home-page "https://github.com/mahmoud/glom")
34699 (synopsis "Declaratively restructure data")
34700 (description "Real applications have real data, and real data
34701nests---objects inside of objects inside of lists of objects. glom is a new
34702and powerful way to handle real-world data, featuring:
34703
34704@itemize
34705@item Path-based access to nested data structures
34706@item Readable, meaningful error messages
34707@item Declarative data transformation, using lightweight, Pythonic specifications
34708@item Built-in data exploration and debugging features
34709@end itemize")
34710 (license license:bsd-3)))
34711
34712(define-public python-box
34713 (package
34714 (name "python-box")
34715 (version "7.3.2")
34716 (source
34717 (origin
34718 (method git-fetch)
34719 (uri
34720 (git-reference
34721 (url "https://github.com/cdgriffith/Box")
34722 (commit version)))
34723 (file-name (git-file-name name version))
34724 (sha256
34725 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34726 (build-system pyproject-build-system)
34727 (arguments
34728 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34729 (native-inputs
34730 (list python-pytest
34731 python-setuptools))
34732 (propagated-inputs
34733 (list python-msgpack
34734 python-ruamel.yaml
34735 python-tomli-w))
34736 (home-page "https://github.com/cdgriffith/Box")
34737 (synopsis "Advanced Python dictionaries with dot notation access")
34738 (description
34739 "This package provides the @code{python-box} Python module.
34740It implements advanced Python dictionaries with dot notation access.")
34741 (license license:expat)))
34742
34743(define-public python-fields
34744 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34745 (revision "0"))
34746 (package
34747 (name "python-fields")
34748 (version (git-version "5.0.0" revision commit))
34749 (source
34750 (origin
34751 (method git-fetch)
34752 (uri (git-reference
34753 (url "https://github.com/ionelmc/python-fields")
34754 (commit commit)))
34755 (file-name (git-file-name name version))
34756 (sha256
34757 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34758 (build-system pyproject-build-system)
34759 (arguments
34760 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34761 (native-inputs (list python-pytest-8
34762 python-pytest-benchmark
34763 python-setuptools
34764 python-wheel))
34765 (home-page "https://python-fields.readthedocs.io/")
34766 (synopsis "Python container class boilerplate killer")
34767 (description "Avoid repetitive boilerplate code in Python classes.")
34768 (license license:bsd-3))))
34769
34770(define-public python-aspectlib
34771 (package
34772 (name "python-aspectlib")
34773 (version "2.0.0")
34774 (source
34775 (origin
34776 (method git-fetch)
34777 (uri (git-reference
34778 (url "https://github.com/ionelmc/python-aspectlib")
34779 (commit (string-append "v" version))))
34780 (file-name (git-file-name name version))
34781 (sha256
34782 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34783 (build-system pyproject-build-system)
34784 (arguments
34785 (list
34786 #:test-flags
34787 #~(list ;; XXX: Require more dependencies.
34788 "--ignore=tests/test_integrations.py"
34789 "--ignore=tests/test_integrations_py3.py")
34790 #:phases
34791 #~(modify-phases %standard-phases
34792 (add-after 'unpack 'fix-pytest-config
34793 (lambda _
34794 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34795 ;; The (path: py.path.local) argument is deprecated, please
34796 ;; use (collection_path: pathlib.Path).
34797 (delete-file "pytest.ini"))))))
34798 (native-inputs
34799 (list python-pytest-8
34800 python-setuptools
34801 python-tornado))
34802 (propagated-inputs
34803 (list python-fields))
34804 (home-page "https://github.com/ionelmc/python-aspectlib")
34805 (synopsis "Python monkey-patching and decorators")
34806 (description
34807 "This package provides an aspect-oriented programming, monkey-patch
34808and decorators library. It is useful when changing behavior in existing
34809code is desired. It includes tools for debugging and testing:
34810simple mock/record and a complete capture/replay framework.")
34811 (license license:bsd-2)))
34812
34813(define-public python-ijson
34814 (package
34815 (name "python-ijson")
34816 (version "3.5.0")
34817 (source
34818 (origin
34819 (method url-fetch)
34820 (uri (pypi-uri "ijson" version))
34821 (sha256
34822 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34823 (inputs
34824 ;; yajl is optional, but compiling with it makes faster
34825 ;; backends available to ijson:
34826 (list yajl))
34827 (native-inputs
34828 (list python-pytest
34829 python-setuptools))
34830 (build-system pyproject-build-system)
34831 (home-page "https://github.com/ICRAR/ijson")
34832 (synopsis "Iterative JSON parser with Python iterator interfaces")
34833 (description
34834 "Ijson is an iterative JSON parser with standard Python iterator
34835interfaces.")
34836 (license license:bsd-3)))
34837
34838(define-public python-ordered-set
34839 (package
34840 (name "python-ordered-set")
34841 (version "4.1.0")
34842 (source
34843 (origin
34844 (method url-fetch)
34845 (uri (pypi-uri "ordered-set" version))
34846 (sha256
34847 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34848 (build-system pyproject-build-system)
34849 (native-inputs (list python-cython python-flit-core python-pytest))
34850 (home-page "https://github.com/simonpercivall/orderedset")
34851 (synopsis "Ordered Set implementation in Cython")
34852 (description "This library provides an @code{OrderedSet} data type that
34853works like a regular set, but remembers insertion order. It supports the full
34854Python @code{set} interface.")
34855 (license license:asl2.0)))
34856
34857(define-public python-orgparse
34858 (package
34859 (name "python-orgparse")
34860 (version "0.4.20251020")
34861 (source
34862 (origin
34863 (method git-fetch)
34864 (uri (git-reference
34865 (url "https://github.com/karlicoss/orgparse")
34866 (commit (string-append "v" version))))
34867 (file-name (git-file-name name version))
34868 (sha256
34869 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34870 (build-system pyproject-build-system)
34871 (arguments
34872 (list
34873 #:test-flags
34874 #~(list "--ignore-glob=doc/*"
34875 ;; XXX: Unclear why those tests fail.
34876 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34877 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34878 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34879 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
34880 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34881 (home-page "https://github.com/karlicoss/orgparse")
34882 (synopsis "Emacs Org mode parser in Python")
34883 (description
34884 "This package is a Python module for reading Emacs Org mode files.")
34885 (license license:bsd-3)))
34886
34887(define-public dynaconf
34888 (package
34889 (name "dynaconf")
34890 (version "3.2.11")
34891 (source
34892 (origin
34893 (method git-fetch)
34894 (uri
34895 (git-reference
34896 (url "https://github.com/dynaconf/dynaconf")
34897 (commit version)))
34898 (file-name (git-file-name name version))
34899 (sha256
34900 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34901 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34902 (modules '((guix build utils)))
34903 ;; Remove vendored dependencies
34904 (snippet
34905 #~(let ((unvendor '("click" "ruamel" "toml")))
34906 (with-directory-excursion "dynaconf/vendor"
34907 (for-each delete-file-recursively unvendor))
34908 (substitute* (find-files "." "\\.py$")
34909 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34910 _ target rest)
34911 (string-append "import " target rest))
34912 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34913 target))))))
34914 (build-system pyproject-build-system)
34915 (arguments
34916 (list
34917 #:test-flags
34918 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34919 "-k" #$(let ((click-tests '("test_negative_get"
34920 "test_not_found_key_exit_error[get]"
34921 "test_inspect_invalid_format")))
34922 ;; Disable integration tests
34923 (string-append "not integration and not "
34924 ;; These tests fail because we use
34925 ;; Click 8.* instead of Click 7
34926 (string-join click-tests " and not ")))
34927 "tests")
34928 #:phases
34929 #~(modify-phases %standard-phases
34930 (add-after 'unpack 'patch-for-click-8
34931 (lambda _
34932 (substitute* "dynaconf/cli.py"
34933 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34934 "sys.argv[1:]")))))))
34935 (propagated-inputs
34936 (list python-click python-configobj python-ruamel.yaml-0.16
34937 python-toml python-tomli))
34938 (native-inputs
34939 (list python-django
34940 python-flask
34941 python-pytest
34942 python-pytest-mock
34943 python-setuptools))
34944 (home-page "https://www.dynaconf.com/")
34945 (synopsis "The dynamic configurator for your Python project")
34946 (description
34947 "This package provides @code{dynaconf} the dynamic configurator manager for
34948your Python project. It provides features such as:
34949
34950@itemize
34951@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34952@item Settings management (default values, validation, parsing, templating);
34953@item Protection of sensitive information (passwords/tokens);
34954@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34955loaders;
34956@item Full support for environment variables to override existing settings
34957(dotenv support included);
34958@item Optional layered system for multiple environments @code{[default,
34959development, testing, production]};
34960@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34961@item Built-in extensions for Django and Flask web frameworks;
34962@item CLI for common operations such as @code{init, list, write, validate, export}.
34963@end itemize")
34964 (license license:expat)))
34965
34966(define-public python-pudb
34967 ;; TODO: Rename to pudb as it's a final program.
34968 (package
34969 (name "python-pudb")
34970 (version "2025.1.3")
34971 (source
34972 (origin
34973 (method url-fetch)
34974 (uri (pypi-uri "pudb" version))
34975 (sha256
34976 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34977 (build-system pyproject-build-system)
34978 (arguments
34979 (list
34980 #:phases
34981 #~(modify-phases %standard-phases
34982 (add-before 'check 'pre-check
34983 (lambda _
34984 (setenv "HOME" "/tmp"))))))
34985 (native-inputs
34986 (list python-hatchling
34987 python-pytest
34988 python-pytest-mock
34989 python-numpy))
34990 (propagated-inputs
34991 (list python-jedi
34992 python-packaging
34993 python-pygments
34994 python-typing-extensions
34995 python-urwid
34996 python-urwid-readline))
34997 (home-page "https://documen.tician.de/pudb/")
34998 (synopsis "Console-based Python debugger")
34999 (description
35000 "@command{pudb} is a full-screen, console-based Python debugger providing
35001all the niceties of modern GUI-based debuggers in a more lightweight and
35002keyboard-friendly package.")
35003 (license license:expat)))
35004
35005(define-public python-iwlib
35006 (package
35007 (name "python-iwlib")
35008 (version "1.7.0")
35009 (source
35010 (origin
35011 (method git-fetch)
35012 (uri (git-reference
35013 (url "https://github.com/nhoad/python-iwlib")
35014 (commit version)))
35015 (file-name (git-file-name name version))
35016 (sha256
35017 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
35018 (build-system pyproject-build-system)
35019 (arguments
35020 (list
35021 #:phases
35022 #~(modify-phases %standard-phases
35023 (add-before 'check 'cleanup
35024 (lambda _
35025 (delete-file-recursively "iwlib"))))))
35026 (native-inputs (list python-pytest python-setuptools))
35027 (inputs (list wireless-tools))
35028 (propagated-inputs (list python-cffi))
35029 (home-page "https://github.com/nhoad/python-iwlib")
35030 (synopsis "Python module to interface with iwlib")
35031 (description
35032 "This package provides a Python interface to iw wireless tools.")
35033 (license license:gpl2)))
35034
35035(define-public python-pdoc3
35036 (package
35037 (name "python-pdoc3")
35038 (version "0.11.6")
35039 (source
35040 (origin
35041 (method url-fetch)
35042 (uri (pypi-uri "pdoc3" version))
35043 (sha256
35044 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
35045 (build-system pyproject-build-system)
35046 (arguments
35047 (list #:test-backend #~'unittest
35048 #:test-flags #~(list "-v" "pdoc.test")))
35049 (native-inputs
35050 (list python-setuptools-git
35051 python-setuptools
35052 python-setuptools-scm))
35053 (propagated-inputs
35054 (list python-mako
35055 python-markdown))
35056 (home-page "https://pdoc3.github.io/pdoc/")
35057 (synopsis "Auto-generate API documentation for Python projects")
35058 (description
35059 "This package auto-generates API documentation from Python projects
35060already existing modules and objects docstrings.")
35061 (license license:agpl3+)))
35062
35063(define-public python-piexif
35064 (package
35065 (name "python-piexif")
35066 (version "1.1.3")
35067 (source
35068 (origin
35069 (method git-fetch)
35070 (uri (git-reference
35071 (url "https://github.com/hMatoba/Piexif")
35072 (commit version)))
35073 (file-name (git-file-name name version))
35074 (sha256
35075 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
35076 (patches
35077 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
35078 (build-system pyproject-build-system)
35079 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
35080 (home-page "https://github.com/hMatoba/Piexif")
35081 (synopsis "Simplify exif manipulations with Python")
35082 (description
35083 "Piexif simplifies interacting with EXIF data in Python. It includes the
35084tools necessary for extracting, creating, manipulating, converting and writing
35085EXIF data to JPEG, WebP and TIFF files.")
35086 (license license:expat)))
35087
35088(define-public python-pyrss2gen
35089 (package
35090 (name "python-pyrss2gen")
35091 (version "1.1")
35092 (source
35093 (origin
35094 (method url-fetch)
35095 (uri (pypi-uri "PyRSS2Gen" version))
35096 (sha256
35097 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
35098 (build-system pyproject-build-system)
35099 (arguments (list #:tests? #f)) ; No tests.
35100 (native-inputs (list python-setuptools))
35101 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
35102 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
35103 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
35104PyRSS2Gen builds the feed up by using a XML generator.")
35105 (license license:bsd-3)))
35106
35107(define-public python-doit
35108 (package
35109 (name "python-doit")
35110 (version "0.36.0")
35111 (source
35112 (origin
35113 (method url-fetch)
35114 (uri (pypi-uri "doit" version))
35115 (sha256
35116 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
35117 (build-system pyproject-build-system)
35118 ;; This is not a serious test failure. It's probably due to the load path
35119 ;; at test time.
35120 (arguments (list #:test-flags '(list "-k" "not test_execute")))
35121 (propagated-inputs
35122 (list python-cloudpickle python-importlib-metadata))
35123 (native-inputs (list python-pytest python-setuptools python-wheel))
35124 (home-page "https://pydoit.org")
35125 (synopsis "Automation tool to execute any kind of task in a build-tools
35126fashion")
35127 (description "doit is an automation tool that brings the power of
35128build-tools to execute any kind of task.
35129
35130A task describes some computation to be done (actions), and contains some
35131extra meta-data. The actions can be external programs or Python functions. A
35132single task may define more than one action. doit uses the task’s meta-data
35133to:
35134
35135@itemize
35136@item cache task results
35137@item correct execution order
35138@item parallel execution
35139@item powerful dependency system
35140@end itemize")
35141 (license license:expat)))
35142
35143(define-public python-phpserialize
35144 (package
35145 (name "python-phpserialize")
35146 (version "1.3")
35147 (source
35148 (origin
35149 (method git-fetch)
35150 (uri (git-reference
35151 (url "https://github.com/mitsuhiko/phpserialize")
35152 (commit version)))
35153 (file-name (git-file-name name version))
35154 (sha256
35155 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
35156 (build-system pyproject-build-system)
35157 (arguments
35158 (list
35159 ;; XXX: Unclear why this test fails.
35160 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
35161 #:phases
35162 #~(modify-phases %standard-phases
35163 (add-after 'unpack 'patch-tests
35164 (lambda _
35165 (substitute* "tests.py"
35166 (("assert_\\(b'WP_User' in x\\)")
35167 "assertIn(b'WP_User', x)")))))))
35168 (native-inputs (list python-pytest python-setuptools))
35169 (home-page "https://github.com/mitsuhiko/phpserialize")
35170 (synopsis "Python port of the serialize and unserialize functions of PHP")
35171 (description
35172 "This package provides a port of the @code{serialize} and
35173@code{unserialize} functions of PHP for Python.")
35174 (license license:bsd-3)))
35175
35176(define-public python-pycapnp
35177 (package
35178 (name "python-pycapnp")
35179 (version "2.2.4")
35180 (source
35181 (origin
35182 (method git-fetch)
35183 (uri (git-reference
35184 (url "https://github.com/capnproto/pycapnp")
35185 (commit (string-append "v" version))))
35186 (file-name (git-file-name name version))
35187 (sha256
35188 (base32 "0vzz1s7zrp27dnsrppshrisbn054w56qbva3shbnwpkdcckw411j"))))
35189 (build-system pyproject-build-system)
35190 (arguments
35191 (list
35192 #:phases
35193 #~(modify-phases %standard-phases
35194 (add-before 'build 'set-force-system-capnp
35195 (lambda _
35196 (setenv "PIP_CONFIG_SETTINGS" "force-system-libcapnp=True")))
35197 (add-after 'install 'copy-missing-schemas
35198 (lambda _
35199 (let* ((out #$output)
35200 (capnp-clang #$(this-package-input "capnproto-clang"))
35201 (site-pkgs (car (find-files (string-append out "/lib")
35202 "^site-packages$"
35203 #:directories? #t)))
35204 (target-dir (string-append site-pkgs "/capnp"))
35205 (schema-files (find-files
35206 (string-append capnp-clang
35207 "/include/capnp")
35208 "\\.capnp$")))
35209 (for-each (lambda (file)
35210 (install-file file target-dir)) schema-files))))
35211 ;; The 'sanity-check' phase fails with "ModuleNotFoundError: No
35212 ;; module named 'schema_capnp'". This module is generated
35213 ;; dynamically via import hooks at runtime
35214 (delete 'sanity-check))))
35215 (native-inputs (list pkg-config
35216 python-cython
35217 python-jinja2
35218 python-pkgconfig
35219 python-pytest
35220 python-pytest-asyncio
35221 python-setuptools))
35222 (inputs (list capnproto-clang))
35223 (home-page "https://github.com/capnproto/pycapnp")
35224 (synopsis "Cython wrapping of the C++ Cap'n Proto library")
35225 (description
35226 "This package provides a cython wrapping of the C++ Cap'n Proto library.")
35227 (license license:bsd-2)))
35228
35229(define-public python-pydevtool
35230 (package
35231 (name "python-pydevtool")
35232 (version "0.3.0")
35233 (source
35234 (origin
35235 (method url-fetch)
35236 (uri (pypi-uri "pydevtool" version))
35237 (sha256
35238 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
35239 (build-system pyproject-build-system)
35240 (arguments (list #:tests? #false)) ;no tests
35241 (propagated-inputs (list python-doit python-rich-click))
35242 (native-inputs (list python-setuptools python-wheel))
35243 (home-page "https://github.com/pydoit/pydevtool")
35244 (synopsis "CLI dev tools powered by pydoit")
35245 (description "This package provides command line tools, powered by pydoit.
35246It offers integration with @code{click} and @code{rich} for custom CLI and
35247these linters: @code{pycodestlye}, @code{pyflakes}")
35248 (license license:expat)))
35249
35250(define-public nikola
35251 (package
35252 (name "nikola")
35253 (version "8.3.3")
35254 (source
35255 (origin
35256 (method url-fetch)
35257 (uri (pypi-uri "nikola" version))
35258 (sha256
35259 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
35260 (build-system pyproject-build-system)
35261 (arguments
35262 (list
35263 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
35264 #:test-flags
35265 #~(list "--durations=10"
35266 "--ignore=tests/integration/test_dev_server.py"
35267 "-k" (string-join
35268 ;; Some time difference in example tests.
35269 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
35270 "test_serves_root_dir[https://example.org:1234/blog]"
35271 "test_serves_root_dir[https://example.org:3456/blog/]"
35272 "test_serves_root_dir[https://example.org]"
35273 ;; AssertionError: Calls not found.
35274 "test_write_content_does_not_detroy_text"
35275 ;; AssertionError: assert 'January 10, 2006,
35276 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
35277 ;; 12:34:56\u202fPM EST'
35278 "test_format_date_timezone")
35279 " and not "))))
35280 (native-inputs
35281 (list nss-certs-for-test
35282 python-feedparser
35283 python-freezegun
35284 python-pytest
35285 python-setuptools))
35286 (inputs
35287 (list python-babel
35288 python-blinker
35289 python-dateutil
35290 python-docutils
35291 python-doit
35292 python-jinja2 ;; for themes
35293 python-lxml
35294 python-mako
35295 python-markdown
35296 python-natsort
35297 python-notebook ;; for ipynb
35298 python-phpserialize ;; for wordpress import
35299 python-piexif
35300 python-pillow
35301 python-pygments
35302 python-pyrss2gen
35303 python-requests
35304 python-ruamel.yaml ;; for YAML metadata
35305 python-toml
35306 python-unidecode
35307 python-yapsy))
35308 (home-page "https://getnikola.com/")
35309 (synopsis "Modular, fast and simple static website and blog generator")
35310 (description "Nikola generates static websites and blogs. Out of the box,
35311it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
35312and has plugins for many other formats.")
35313 (license license:expat)))
35314
35315(define-public nbss-upload
35316 (package
35317 (name "nbss-upload")
35318 (version "0.1")
35319 (source
35320 (origin
35321 (method git-fetch)
35322 (uri (git-reference
35323 (url "https://github.com/notebook-sharing-space/nbss-upload")
35324 (commit (string-append "v" version))))
35325 (file-name (git-file-name name version))
35326 (sha256
35327 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
35328 (build-system pyproject-build-system)
35329 (arguments (list #:tests? #f)) ;no tests
35330 (native-inputs (list python-setuptools))
35331 (propagated-inputs (list python-requests))
35332 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
35333 (synopsis "Upload notebooks to a notebooksharing.space instance")
35334 (description
35335 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
35336notebooksharing.space instance.")
35337 (license license:bsd-3)))
35338
35339(define-public python-reedsolo
35340 (package
35341 (name "python-reedsolo")
35342 (version "1.7.0")
35343 (source
35344 (origin
35345 (method git-fetch)
35346 (uri (git-reference
35347 (url "https://github.com/tomerfiliba/reedsolomon")
35348 (commit (string-append "v" version))))
35349 (file-name (git-file-name name version))
35350 (sha256
35351 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
35352 (build-system pyproject-build-system)
35353 (native-inputs (list python-pytest python-setuptools))
35354 (home-page "https://github.com/tomerfiliba/reedsolomon")
35355 (synopsis "Pure-Python Reed Solomon encoder/decoder")
35356 (description
35357 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
35358the tutorial at Wikiversity. This is a burst-type implementation, so that it
35359supports any Galois field higher than 2^3, but not binary streams.")
35360 (license license:public-domain)))
35361
35362(define-public python-esprima
35363 (package
35364 (name "python-esprima")
35365 (version "4.0.1")
35366 (source
35367 (origin
35368 (method git-fetch)
35369 (uri (git-reference
35370 (url "https://github.com/Kronuz/esprima-python")
35371 (commit (string-append "v" version))))
35372 (file-name (git-file-name name version))
35373 (sha256
35374 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
35375 (build-system pyproject-build-system)
35376 (arguments
35377 (list
35378 ;; XXX: pytest fails to collect tests, and a few tests are failing
35379 ;; using unittest backend. In particular, offsets with math characters
35380 ;; and uncompiled regexps.
35381 #:tests? #f
35382 #:test-backend #~'unittest
35383 #:test-flags
35384 #~(list "-k"
35385 (string-join (list
35386 ;; XXX: Character offsets with maths.
35387 "not test_math_alef"
35388 "test_math_dal_part"
35389 "test_math_kaf_lam"
35390 "test_math_zain_start"
35391 ;; XXX: Uncompiled regexps.
35392 "test_yield_arg_regexp1"
35393 "test_yield_arg_regexp2"
35394 "test_migrated_0005_source"
35395 "test_u_flag_valid_range"
35396 "test_migrated_0049"
35397 "test_migrated_0050_source")
35398 " and not "))))
35399 (native-inputs (list python-setuptools))
35400 (home-page "https://github.com/Kronuz/esprima-python")
35401 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
35402 (description
35403 "This package provides ECMAScript parsing infrastructure for
35404multipurpose analysis in Python.")
35405 (license license:bsd-3)))
35406
35407(define-public python-psycopg2-binary
35408 (package
35409 (name "python-psycopg2-binary")
35410 (version "2.9.10")
35411 (source
35412 (origin
35413 (method url-fetch)
35414 (uri (pypi-uri "psycopg2-binary" version))
35415 (sha256
35416 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
35417 (build-system pyproject-build-system)
35418 (arguments
35419 ;; Tests are disable because they need a live instance of PostgreSQL.
35420 '(#:tests? #f))
35421 (native-inputs (list python-setuptools python-wheel))
35422 (inputs (list postgresql))
35423 (home-page "https://psycopg.org/")
35424 (synopsis "PostgreSQL database adapter for Python")
35425 (description
35426 "Psycopg is a PostgreSQL database adapter for the Python programming
35427language. Its main features are the complete implementation of the Python DB
35428API 2.0 specification and the thread safety (several threads can share the
35429same connection). It was designed for heavily multi-threaded applications
35430that create and destroy lots of cursors and make a large number of concurrent
35431@code{INSERT}s or @code{UPDATE}s.
35432
35433Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
35434being both efficient and secure. It features client-side and
35435server-side cursors, asynchronous communication and notifications,
35436@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
35437out-of-the-box and adapted to matching PostgreSQL data types;
35438adaptation can be extended and customized thanks to a flexible objects
35439adaptation system.
35440
35441Psycopg 2 is both Unicode and Python 3 friendly.")
35442 (license license:lgpl3+)))
35443
35444(define-public python-pyfuse3
35445 (package
35446 (name "python-pyfuse3")
35447 (version "3.4.2")
35448 (source
35449 (origin
35450 (method git-fetch)
35451 (uri (git-reference
35452 (url "https://github.com/libfuse/pyfuse3")
35453 (commit (string-append "v" version))))
35454 (file-name (git-file-name name version))
35455 (sha256
35456 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
35457 (build-system pyproject-build-system)
35458 (arguments
35459 (list
35460 #:test-flags
35461 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
35462 #~(list "--deselect=test/test_api.py::test_listdir")))
35463 (native-inputs
35464 (list pkg-config
35465 python-cython
35466 python-pytest
35467 python-setuptools
35468 python-setuptools-scm))
35469 (inputs
35470 (list fuse))
35471 (propagated-inputs
35472 (list python-trio))
35473 (home-page "https://github.com/libfuse/pyfuse3")
35474 (synopsis "Python bindings to FUSE 3")
35475 (description "This package provides Python 3 bindings for libfuse 3 with
35476async I/O support.")
35477 (license license:gpl2+)))
35478
35479(define-public python-ansi-styles
35480 ;; Releases are not tagged in Git:
35481 ;; https://github.com/shawwn/ansi-styles-python/issues/2
35482 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
35483 (revision "0"))
35484 (package
35485 (name "python-ansi-styles")
35486 (version (git-version "0.2.2" revision commit))
35487 (source
35488 (origin
35489 (method git-fetch)
35490 (uri (git-reference
35491 (url "https://github.com/shawwn/ansi-styles-python")
35492 (commit commit)))
35493 (file-name (git-file-name name version))
35494 (sha256
35495 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
35496 (build-system pyproject-build-system)
35497 (native-inputs (list python-poetry-core python-pytest))
35498 (home-page "https://github.com/shawwn/ansi-styles-python")
35499 (synopsis "ANSI escape codes for styling strings in the terminal")
35500 (description
35501 "This Python package provide ANSI escape codes
35502for styling strings in the terminal.")
35503 (license license:expat))))
35504
35505(define-public python-multipart
35506 (package
35507 (name "python-multipart")
35508 (version "0.0.20")
35509 (source (origin
35510 (method url-fetch)
35511 (uri (pypi-uri "python_multipart" version))
35512 (sha256
35513 (base32
35514 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
35515 (build-system pyproject-build-system)
35516 (native-inputs
35517 (list python-hatchling
35518 python-pytest
35519 python-pyyaml))
35520 (home-page "https://github.com/andrew-d/python-multipart")
35521 (synopsis "Streaming multipart parser for Python")
35522 (description
35523 "This package provides a streaming multipart parser for Python.")
35524 (license license:asl2.0)))
35525
35526(define-public python-aiopg
35527 (package
35528 (name "python-aiopg")
35529 (version "1.4.0")
35530 (source
35531 (origin
35532 (method git-fetch)
35533 (uri (git-reference
35534 (url "https://github.com/aio-libs/aiopg")
35535 (commit (string-append "v" version))))
35536 (file-name (git-file-name name version))
35537 (sha256
35538 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
35539 (build-system pyproject-build-system)
35540 (arguments
35541 (list
35542 #:tests? #f ;they need Docker
35543 #:phases
35544 #~(modify-phases %standard-phases
35545 (add-after 'unpack 'use-default-asyncio
35546 ;; async_timeout is deprecated, upstream recommends to use
35547 ;; asyncio, available since Python 3.11.
35548 (lambda _
35549 (substitute* "aiopg/pool.py"
35550 (("async_timeout") "asyncio"))))
35551 (add-after 'unpack 'relax-requirements
35552 (lambda _
35553 (substitute* "setup.py"
35554 (("psycopg2-binary") "psycopg2")
35555 ;; It's a part of Python 3.11+.
35556 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
35557 (native-inputs
35558 (list python-setuptools))
35559 (propagated-inputs
35560 (list python-psycopg2))
35561 (home-page "https://aiopg.readthedocs.io")
35562 (synopsis "Postgres integration with asyncio")
35563 (description
35564 "aiopg is a library for accessing a PostgreSQL database from the
35565asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
35566Psycopg database driver.")
35567 (license license:bsd-3)))
35568
35569(define-public python-shtab
35570 (package
35571 (name "python-shtab")
35572 (version "1.7.1")
35573 (source
35574 (origin
35575 (method url-fetch)
35576 (uri (pypi-uri "shtab" version))
35577 (sha256
35578 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
35579 (build-system pyproject-build-system)
35580 (native-inputs
35581 (list bash
35582 python-pytest
35583 python-pytest-timeout
35584 python-setuptools
35585 python-setuptools-scm
35586 python-wheel))
35587 (home-page "https://github.com/iterative/shtab")
35588 (synopsis "Automagic shell tab completion for Python CLI applications")
35589 (description
35590 "This package automatically generates shell tab completion scripts for
35591Python CLI apps.")
35592 (license license:asl2.0)))
35593
35594(define-public python-pyperf
35595 (package
35596 (name "python-pyperf")
35597 (version "2.10.0")
35598 (source
35599 (origin
35600 (method git-fetch)
35601 (uri (git-reference
35602 (url "https://github.com/psf/pyperf")
35603 (commit version)))
35604 (file-name (git-file-name name version))
35605 (sha256
35606 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
35607 (build-system pyproject-build-system)
35608 (arguments
35609 (list
35610 #:test-flags
35611 #~(list "--ignore=pyperf/tests/test_examples.py")))
35612 (native-inputs
35613 (list python-psutil-bootstrap
35614 python-pytest
35615 python-setuptools))
35616 (home-page "https://github.com/psf/pyperf")
35617 (synopsis "Toolkit for running Python benchmarks")
35618 (description
35619 "The Python @code{pyperf} module is a toolkit for writing, running and
35620analyzing benchmarks. It features a simple API that can:
35621
35622@itemize
35623@item automatically calibrate a benchmark for a time budget;
35624@item spawn multiple worker processes;
35625@item compute the mean and standard deviation;
35626@item detect if a benchmark result seems unstable;
35627@item store benchmark results in JSON format;
35628@item support multiple units: seconds, bytes and integer.
35629@end itemize")
35630 (license license:expat)))
35631
35632(define-public python-pydispatcher
35633 (package
35634 (name "python-pydispatcher")
35635 (version "2.0.7")
35636 (source
35637 (origin
35638 (method url-fetch)
35639 (uri (pypi-uri "PyDispatcher" version))
35640 (sha256
35641 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35642 (build-system pyproject-build-system)
35643 (native-inputs (list python-pytest python-setuptools))
35644 (home-page "https://pydispatcher.sourceforge.net")
35645 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35646 (description
35647 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35648@code{dispatcher.py} module. It provides the Python programmer with a robust
35649mechanism for event routing within various application contexts.
35650
35651Included in the package are the robustapply and saferef modules, which
35652provide the ability to selectively apply arguments to callable objects
35653and to reference instance methods using weak-references.")
35654 (license license:bsd-3)))
35655
35656(define-public python-pyee
35657 (package
35658 (name "python-pyee")
35659 (version "13.0.1")
35660 (source
35661 (origin
35662 (method git-fetch)
35663 (uri (git-reference
35664 (url "https://github.com/jfhbrook/pyee")
35665 (commit (string-append "v" version))))
35666 (file-name (git-file-name name version))
35667 (sha256
35668 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
35669 (build-system pyproject-build-system)
35670 (propagated-inputs (list python-typing-extensions))
35671 (native-inputs
35672 (list python-mock
35673 python-pytest
35674 python-pytest-asyncio
35675 python-pytest-trio
35676 python-setuptools
35677 python-trio
35678 python-twisted))
35679 (home-page "https://github.com/jfhbrook/pyee")
35680 (synopsis "Emit events with Python")
35681 (description
35682 "This package provides a port of node.js's EventEmitter to
35683python. Additionally, it includes a number of subclasses useful for
35684implementing async and threaded programming in python, such as async/await.")
35685 (license license:expat)))
35686
35687(define-public python-pypubsub
35688 (package
35689 (name "python-pypubsub")
35690 (version "4.0.3")
35691 (source
35692 (origin
35693 (method git-fetch)
35694 (uri (git-reference
35695 (url "https://github.com/schollii/pypubsub")
35696 (commit (string-append "v" version))))
35697 (file-name (git-file-name name version))
35698 (sha256
35699 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35700 (build-system pyproject-build-system)
35701 (arguments
35702 (list
35703 #:phases
35704 #~(modify-phases %standard-phases
35705 (replace 'check
35706 (lambda* (#:key tests? #:allow-other-keys)
35707 (when tests?
35708 (with-directory-excursion "tests/suite"
35709 (invoke "py.test"))))))))
35710 (native-inputs
35711 (list python-pytest
35712 python-setuptools
35713 python-wheel))
35714 (home-page "https://github.com/schollii/pypubsub")
35715 (synopsis "Python publish-subcribe library")
35716 (description
35717 "This library provides a publish-subscribe API to facilitate event-based
35718or message-based architecture in a single-process application. It is centered
35719on the notion of a topic - senders publish messages of a given topic, and
35720listeners subscribe to messages of a given topic, all inside the same
35721process.")
35722 (license license:bsd-2)))
35723
35724(define-public python-queuelib
35725 (package
35726 (name "python-queuelib")
35727 (version "1.8.0")
35728 (source
35729 (origin
35730 (method git-fetch)
35731 (uri (git-reference
35732 (url "https://github.com/scrapy/queuelib")
35733 (commit (string-append "v" version))))
35734 (file-name (git-file-name name version))
35735 (sha256
35736 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35737 (build-system pyproject-build-system)
35738 (native-inputs (list python-hatchling python-pytest))
35739 (home-page "https://github.com/scrapy/queuelib")
35740 (synopsis "Collection of queues for Python")
35741 (description
35742 "Queuelib is a Python library that implements object collections which
35743are stored in memory or persisted to disk, provide a simple API, and run fast.
35744
35745Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35746by priority and queues that are emptied in a round-robin fashion.")
35747 (license license:bsd-3)))
35748
35749(define-public python-posix-ipc
35750 (package
35751 (name "python-posix-ipc")
35752 (version "1.3.2")
35753 (source
35754 (origin
35755 (method git-fetch)
35756 (uri (git-reference
35757 (url "https://github.com/osvenskan/posix_ipc")
35758 (commit (string-append "rel" version))))
35759 (file-name (git-file-name name version))
35760 (sha256
35761 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35762 (build-system pyproject-build-system)
35763 (arguments
35764 (list
35765 #:test-flags
35766 ;; XXX: Collection fails due to stdin configuration.
35767 #~(list "--ignore=tests/test_memory.py")
35768 #:phases
35769 #~(modify-phases %standard-phases
35770 (add-after 'unpack 'set-cc-path
35771 (lambda _
35772 (setenv "CC" #$(cc-for-target)))))))
35773 (native-inputs (list python-pytest python-setuptools))
35774 (home-page "https://semanchuk.com/philip/posix_ipc/")
35775 (synopsis "POSIX IPC primitives for Python")
35776 (description
35777 "This package provides POSIX IPC primitives - semaphores, shared memory and
35778message queues for Python.")
35779 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35780
35781(define-public python-itemadapter
35782 (package
35783 (name "python-itemadapter")
35784 (version "0.12.0")
35785 (source
35786 (origin
35787 (method git-fetch)
35788 (uri (git-reference
35789 (url "https://github.com/scrapy/itemadapter")
35790 (commit (string-append "v" version))))
35791 (file-name (git-file-name name version))
35792 (sha256
35793 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35794 (build-system pyproject-build-system)
35795 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35796 (native-inputs (list python-hatchling))
35797 (home-page "https://github.com/scrapy/itemadapter")
35798 (synopsis "Common interface for data container classes")
35799 (description
35800 "The ItemAdapter class is a wrapper for data container objects, providing
35801a common interface to handle objects of different types in an uniform manner,
35802regardless of their underlying implementation.
35803
35804Currently supported types are:
35805@itemize
35806@item scrapy.item.Item
35807@item dict
35808@item dataclass-based classes
35809@item attrs-based classes
35810@item pydantic-based classes
35811@end itemize
35812
35813Additionally, interaction with arbitrary types is supported by
35814implementing a pre-defined interface.")
35815 (license license:bsd-3)))
35816
35817(define-public python-itemloaders
35818 (package
35819 (name "python-itemloaders")
35820 (version "1.3.2")
35821 (source
35822 (origin
35823 (method url-fetch)
35824 (uri (pypi-uri "itemloaders" version))
35825 (sha256
35826 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35827 (build-system pyproject-build-system)
35828 (native-inputs
35829 (list python-packaging
35830 python-pytest
35831 python-setuptools
35832 python-wheel))
35833 (propagated-inputs
35834 (list python-itemadapter python-jmespath python-parsel))
35835 (home-page "https://github.com/scrapy/itemloaders")
35836 (synopsis "Base library for scrapy's ItemLoader")
35837 (description "Itemloaders is a library that helps you collect data
35838from HTML and XML sources. It comes in handy to extract data from web
35839pages, as it supports data extraction using CSS and XPath Selectors.
35840
35841It’s specially useful when you need to standardize the data from many
35842sources. For example, it allows you to have all your casting and
35843parsing rules in a single place.")
35844 (license license:bsd-3)))
35845
35846(define-public python-iterable-io
35847 (package
35848 (name "python-iterable-io")
35849 (version "1.0.0")
35850 (source
35851 (origin
35852 (method url-fetch)
35853 (uri (pypi-uri "iterable-io" version))
35854 (sha256
35855 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35856 (build-system pyproject-build-system)
35857 (native-inputs (list python-setuptools python-pytest))
35858 (home-page "https://github.com/pR0Ps/iterable-io")
35859 (synopsis "Adapt generators and other iterables to a file-like interface")
35860 (description
35861 "@code{iterable-io} is a small Python library that provides an adapter so
35862that it's possible to read from
35863@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35864in the same way as
35865@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35866objects.")
35867 (license license:lgpl3)))
35868
35869(define-public python-iteround
35870 (package
35871 (name "python-iteround")
35872 (version "1.0.4")
35873 ;; PyPI only has wheels.
35874 (source (origin
35875 (method git-fetch)
35876 (uri (git-reference
35877 (url "https://github.com/cgdeboer/iteround")
35878 (commit (string-append "v" version))))
35879 (file-name (git-file-name name version))
35880 (sha256
35881 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35882 (build-system pyproject-build-system)
35883 (native-inputs
35884 (list python-pytest python-setuptools python-wheel))
35885 (home-page "https://github.com/cgdeboer/iteround")
35886 (synopsis "Sum-safe rounding for Iterables")
35887 (description "Iteround is a standard library sum-safe rounding library for
35888Python iterables (lists, tuples, dicts).")
35889 (license license:expat)))
35890
35891(define-public python-hypy-utils
35892 (package
35893 (name "python-hypy-utils")
35894 (version "1.0.29")
35895 (source
35896 (origin
35897 (method url-fetch)
35898 (uri (pypi-uri "hypy_utils" version))
35899 (sha256
35900 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35901 (build-system pyproject-build-system)
35902 (arguments (list #:tests? #f)) ; No tests upstream.
35903 (native-inputs (list python-setuptools))
35904 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35905 (synopsis "Python utility functions for HyDEV")
35906 (description "This module provides Python utility functions for modifying
35907and setting the color of terminal output, via HyDEV.")
35908 (license license:expat)))
35909
35910(define-public python-mike
35911 (package
35912 (name "python-mike")
35913 (version "2.1.3")
35914 (source
35915 (origin
35916 (method git-fetch) ; no tests data in PyPi package
35917 (uri (git-reference
35918 (url "https://github.com/jimporter/mike")
35919 (commit (string-append "v" version))))
35920 (file-name (git-file-name name version))
35921 (sha256
35922 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35923 (build-system pyproject-build-system)
35924 (arguments
35925 (list
35926 #:test-flags
35927 ;; Most of integration tests hang or fail.
35928 #~(list "--ignore=test/integration/"
35929 ;; AttributeError: 'NoneType' object has no attribute 'group'
35930 "--ignore=test/unit/test_commands.py"
35931 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35932 (native-inputs
35933 (list git-minimal/pinned
35934 python-pytest
35935 python-setuptools
35936 python-shtab
35937 python-wheel))
35938 (propagated-inputs
35939 (list python-importlib-metadata
35940 python-importlib-resources
35941 python-jinja2
35942 python-mkdocs
35943 python-pyparsing
35944 python-pyyaml
35945 python-pyyaml-env-tag
35946 python-verspec))
35947 (home-page "https://github.com/jimporter/mike")
35948 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35949 (description
35950 "This package provides a Python utility to easily deploy multiple
35951versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35952to Github via gh-pages.")
35953 (license license:bsd-3)))
35954
35955(define-public python-arpeggio
35956 (package
35957 (name "python-arpeggio")
35958 (version "2.0.2")
35959 (source
35960 (origin
35961 (method url-fetch)
35962 (uri (pypi-uri "Arpeggio" version))
35963 (sha256
35964 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35965 (build-system pyproject-build-system)
35966 (native-inputs
35967 (list python-pytest
35968 python-setuptools
35969 python-wheel))
35970 (home-page "https://github.com/textX/Arpeggio")
35971 (synopsis "Packrat parser interpreter for Python")
35972 (description
35973 "This Python library provides a recursive descent parser with
35974backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35975based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35976for DSL development but it can be used for all sorts of general purpose
35977parsing.")
35978 (license license:expat)))
35979
35980(define-public python-flatten-json
35981 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35982 ;; the commit associated with 0.1.14 version.
35983 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35984 (revision "0"))
35985 (package
35986 (name "python-flatten-json")
35987 (version (git-version "0.1.14" revision commit))
35988 (source
35989 (origin
35990 (method git-fetch) ; no tests in PyPI release
35991 (uri (git-reference
35992 (url "https://github.com/amirziai/flatten")
35993 (commit commit)))
35994 (file-name (git-file-name name version))
35995 (sha256
35996 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35997 (build-system pyproject-build-system)
35998 (native-inputs
35999 (list python-pytest
36000 python-setuptools
36001 python-wheel))
36002 (propagated-inputs
36003 (list python-six))
36004 (home-page "https://github.com/amirziai/flatten")
36005 (synopsis "Flatten JSON objects")
36006 (description
36007 "The @code{flatten_json} Python library flattens the hierarchy in your
36008object, which can be useful if you want to force your objects into a table.")
36009 (license license:expat))))
36010
36011(define-public python-deepdiff
36012 (package
36013 (name "python-deepdiff")
36014 (version "8.6.1")
36015 (source (origin
36016 (method url-fetch)
36017 (uri (pypi-uri "deepdiff" version))
36018 (sha256
36019 (base32
36020 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
36021 (build-system pyproject-build-system)
36022 (arguments
36023 ;; tests: 1028 passed, 10 skipped, 1 deselected
36024 ;; Ignore Polars test (not packaged).
36025 (list #:test-flags #~(list "-k" "not test_polars")))
36026 (propagated-inputs (list python-click ; for CLI
36027 python-pyyaml ; for CLI
36028 python-orderly-set
36029 python-orjson)) ; for optimization
36030 (native-inputs
36031 (list python-flit-core
36032 python-jsonpickle
36033 python-numpy
36034 python-pandas
36035 python-pydantic
36036 python-pytest
36037 python-pytest-benchmark
36038 python-pytz
36039 python-uuid6
36040 python-tomli-w))
36041 (home-page "https://github.com/seperman/deepdiff")
36042 (synopsis "Deep difference and search of any Python object/data")
36043 (description
36044 "This package provides tools for computing deep differences and searching
36045of any Python object/data. Recreate objects by adding adding deltas to each
36046other.")
36047 (license license:expat)))
36048
36049(define-public python-deepmerge
36050 (package
36051 (name "python-deepmerge")
36052 (version "1.0.1")
36053 (source
36054 (origin
36055 (method url-fetch)
36056 (uri (pypi-uri "deepmerge" version))
36057 (sha256
36058 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
36059 (build-system pyproject-build-system)
36060 (native-inputs
36061 (list python-setuptools-scm
36062 python-pytest
36063 python-setuptools
36064 python-wheel))
36065 (home-page "https://deepmerge.readthedocs.io/en/latest/")
36066 (synopsis "Merge nested data structures")
36067 (description
36068 "The @code{deep-merge} Python library provides a toolset to deeply merge
36069nested data structures in Python like lists and dictionaries.")
36070 (license license:expat)))
36071
36072(define-public python-durationpy
36073 (package
36074 (name "python-durationpy")
36075 (version "0.10")
36076 (source
36077 (origin
36078 (method git-fetch)
36079 (uri (git-reference
36080 (url "https://github.com/icholy/durationpy")
36081 (commit version)))
36082 (file-name (git-file-name name version))
36083 (sha256
36084 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
36085 (build-system pyproject-build-system)
36086 (arguments
36087 (list #:test-backend #~'custom
36088 #:test-flags #~(list "test.py")))
36089 (native-inputs (list python-setuptools))
36090 (home-page "https://github.com/icholy/durationpy")
36091 (synopsis "Python <-> Golang time duration formats converter")
36092 (description
36093 "This package implements a functionality to convert between
36094Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
36095 (license license:expat)))
36096
36097(define-public python-murmurhash3
36098 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
36099 (revision "0"))
36100 (package
36101 (name "python-murmurhash3")
36102 (version (git-version "2.3.5" revision commit))
36103 (source
36104 (origin
36105 (method git-fetch)
36106 (uri (git-reference
36107 (url "https://github.com/veegee/mmh3")
36108 (commit commit)))
36109 (file-name (git-file-name name version))
36110 (sha256
36111 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
36112 (build-system pyproject-build-system)
36113 (arguments
36114 (list
36115 #:phases
36116 #~(modify-phases %standard-phases
36117 (add-after 'unpack 'fix-package
36118 (lambda _
36119 (substitute* "mmh3module.cpp"
36120 (("#include <stdio\\.h>")
36121 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
36122 (native-inputs
36123 (list python-cython python-pytest python-setuptools python-wheel))
36124 (home-page "https://github.com/veegee/mmh3")
36125 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
36126 (description
36127 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
36128of fast and robust hash functions. This library is a Python extension module
36129written in C.")
36130 (license license:public-domain))))
36131
36132(define-public python-scooby
36133 (package
36134 (name "python-scooby")
36135 (version "0.11.0")
36136 (source
36137 (origin
36138 (method git-fetch)
36139 (uri (git-reference
36140 (url "https://github.com/banesullivan/scooby")
36141 (commit (string-append "v" version))))
36142 (file-name (git-file-name name version))
36143 (sha256
36144 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
36145 (build-system pyproject-build-system)
36146 (arguments
36147 (list
36148 ;; tests: 19 passed, 5 deselected, 1 warning
36149 #:test-flags
36150 ;; AssertionError: assert 'Module not found' == '0.1.0'
36151 #~(list "--deselect=tests/test_scooby.py::test_get_version"
36152 ;; ModuleNotFoundError: No module named 'no_version'
36153 "--deselect=tests/test_scooby.py::test_tracking"
36154 ;; Failed: DID NOT RAISE <class 'OSError'>
36155 "--deselect=tests/test_scooby.py::test_import_os_error"
36156 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
36157 "--deselect=tests/test_scooby.py::test_import_time"
36158 ;; Errored
36159 "--deselect=tests/test_scooby.py::test_cli")))
36160 (native-inputs
36161 (list python-beautifulsoup4
36162 python-numpy
36163 python-pytest
36164 python-pyvips
36165 python-scipy
36166 python-setuptools
36167 python-setuptools-scm))
36168 (propagated-inputs
36169 (list python-psutil))
36170 (home-page "https://github.com/banesullivan/scooby")
36171 (synopsis "Report hardware information and Python package versions")
36172 (description
36173 "The Scooby package reports the following information about the currently
36174running system:
36175
36176@itemize
36177@item operating system name;
36178@item hardware information including machine type (e.g., @samp{i386},
36179@samp{x86_64}, etc.), CPU count and total RAM;
36180@item Python environment (e.g., Python, IPython, etc.);
36181@item file system name;
36182@item Python version;
36183@item versions of specified Python packages.
36184@end itemize
36185
36186It can generate reports as HTML tables or plain text lists.
36187
36188Scooby has no required dependencies, and only few optional dependencies.")
36189 (license license:expat)))
36190
36191(define-public python-cymem
36192 (package
36193 (name "python-cymem")
36194 (version "2.0.6")
36195 (source
36196 (origin
36197 (method git-fetch)
36198 (uri (git-reference
36199 (url "https://github.com/explosion/cymem")
36200 (commit (string-append "v" version))))
36201 (file-name (git-file-name name version))
36202 (sha256
36203 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
36204 (build-system pyproject-build-system)
36205 (native-inputs (list python-cython python-pytest python-setuptools))
36206 (inputs (list python))
36207 (home-page "https://github.com/explosion/cymem")
36208 (synopsis "Cython memory pool for RAII-style memory management")
36209 (description
36210 "Cymem provides two small memory-management helpers for Cython. They make it
36211easy to tie memory to a Python object's life-cycle, so that the memory is freed
36212when the object is garbage collected.")
36213 (license license:expat)))
36214
36215(define-public python-preshed
36216 (package
36217 (name "python-preshed")
36218 (version "3.0.6")
36219 (source
36220 (origin
36221 (method git-fetch)
36222 (uri (git-reference
36223 (url "https://github.com/explosion/preshed")
36224 (commit (string-append "v" version))))
36225 (file-name (git-file-name name version))
36226 (sha256
36227 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
36228 (build-system pyproject-build-system)
36229 (arguments
36230 (list
36231 #:phases
36232 #~(modify-phases %standard-phases
36233 (add-after 'unpack 'patch-msvccompiler
36234 (lambda _
36235 (substitute* "setup.py"
36236 (("from distutils import ccompiler, msvccompiler")
36237 "from distutils import ccompiler")
36238 (("and msvccompiler.*")
36239 ""))))
36240 (replace 'check
36241 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
36242 (with-directory-excursion (site-packages inputs outputs)
36243 (for-each delete-file (find-files "." "\\.pyx$"))
36244 (apply (assoc-ref %standard-phases 'check) args)
36245 (delete-file-recursively "preshed/tests")))))))
36246 (native-inputs
36247 (list python-cython python-cymem python-pytest python-setuptools))
36248 (inputs (list python python-cymem python-murmurhash))
36249 (home-page "https://github.com/explosion/preshed")
36250 (synopsis "Cython hash tables that assume keys are pre-hashed")
36251 (description
36252 "Simple but high performance Cython hash table mapping pre-randomized keys
36253to void* values.")
36254 (license license:expat)))
36255
36256(define-public python-catalogue
36257 (package
36258 (name "python-catalogue")
36259 (version "2.0.10")
36260 (source
36261 (origin
36262 (method git-fetch)
36263 (uri (git-reference
36264 (url "https://github.com/explosion/catalogue")
36265 (commit (string-append "v" version))))
36266 (file-name (git-file-name name version))
36267 (sha256
36268 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
36269 (build-system pyproject-build-system)
36270 (native-inputs (list python-pytest python-setuptools))
36271 (home-page "https://github.com/explosion/catalogue")
36272 (synopsis "Lightweight function registries for your library")
36273 (description
36274 "This package is a tiny, zero-dependencies library that makes it easy to
36275add function (or object) registries to your code. Function registries are
36276helpful when you have objects that need to be both easily serializable and
36277fully customizable. Instead of passing a function into your object, you pass
36278in an identifier name, which the object can use to lookup the function from
36279the registry. This makes the object easy to serialize, because the name is a
36280simple string. If you instead saved the function, you'd have to use Pickle
36281for serialization, which has many drawbacks.")
36282 (license license:expat)))
36283
36284(define-public python-gatt
36285 (package
36286 (name "python-gatt")
36287 (version "0.2.7")
36288 (source (origin
36289 (method url-fetch)
36290 (uri (pypi-uri "gatt" version))
36291 (sha256
36292 (base32
36293 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
36294 (build-system pyproject-build-system)
36295 (arguments (list #:tests? #f)) ; No tests upstream.
36296 (propagated-inputs (list python-dbus-1.2 python-pygobject))
36297 (native-inputs (list python-setuptools))
36298 (home-page "https://github.com/getsenic/gatt-python")
36299 (synopsis "Bluetooth GATT SDK for Python")
36300 (description
36301 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
36302Software Development Kit} for Python helps you implement and communicate with
36303any Bluetooth Low Energy device that has a GATT profile. It supports:
36304
36305@itemize @bullet
36306@item Discovering nearby Bluetooth Low Energy devices
36307@item Connecting and disconnecting devices
36308@item Implementing your custom GATT profile
36309@item Accessing all GATT services
36310@item Accessing all GATT characteristics
36311@item Reading characteristic values
36312@item Writing characteristic values
36313@item Subscribing for characteristic value change notifications
36314@end itemize
36315
36316Currently, Linux is the only platform supported by this library.")
36317 (license license:expat)))
36318
36319(define-public python-dbus-fast
36320 (package
36321 (name "python-dbus-fast")
36322 (version "2.44.3")
36323 (source
36324 (origin
36325 (method git-fetch) ;No tests in PyPI package.
36326 (uri (git-reference
36327 (url "https://github.com/Bluetooth-Devices/dbus-fast")
36328 (commit (string-append "v" version))))
36329 (file-name (git-file-name name version))
36330 (sha256
36331 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
36332 (build-system pyproject-build-system)
36333 (arguments
36334 (list
36335 #:test-flags
36336 '(list
36337 ;; These tests need pytest_codspeed.
36338 "--ignore-glob=tests/benchmarks/test_*marshall.py"
36339 ;; These tests all fail with:
36340 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
36341 ;; set and could not get DISPLAY environment variable to get bus address
36342 "-m" "not asyncio")))
36343 (native-inputs (list python-cython
36344 python-poetry-core
36345 python-setuptools
36346 python-pytest
36347 python-pytest-asyncio
36348 python-covdefaults))
36349 (home-page "https://github.com/bluetooth-devices/dbus-fast")
36350 (synopsis "Faster version of dbus-next")
36351 (description "This package provides a faster version of dbus-next.")
36352 (license license:expat)))
36353
36354(define-public python-bleak
36355 (package
36356 (name "python-bleak")
36357 (version "2.1.1")
36358 (source
36359 (origin
36360 (method git-fetch)
36361 (uri (git-reference
36362 (url "https://github.com/hbldh/bleak")
36363 (commit (string-append "v" version))))
36364 (file-name (git-file-name name version))
36365 (sha256
36366 (base32 "0vdzx6s5fsgnl3j2k0kn6w1v8mqhb2jjpmpq6vdk9i0bdp1456ff"))))
36367 (build-system pyproject-build-system)
36368 (arguments
36369 (list
36370 ;; Integration tests require unpackaged dependencies.
36371 #:test-flags #~(list "--ignore=tests/integration")))
36372 (propagated-inputs
36373 (list python-async-timeout
36374 python-dbus-fast
36375 python-typing-extensions))
36376 (native-inputs
36377 (list python-coverage
36378 python-packaging
36379 python-poetry-core
36380 python-pytest
36381 python-pytest-asyncio))
36382 (home-page "https://github.com/hbldh/bleak")
36383 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
36384 (description "This package provides a Bluetooth Low Energy platform-agnostic
36385client library.")
36386 (license license:expat)))
36387
36388(define-public python-ndeflib
36389 (package
36390 (name "python-ndeflib")
36391 (version "0.3.3")
36392 (source
36393 (origin
36394 (method url-fetch)
36395 (uri (pypi-uri "ndeflib" version))
36396 (sha256
36397 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
36398 (build-system pyproject-build-system)
36399 (arguments
36400 (list
36401 ;; tests: 1571 passed, 37 deselected, 1 warning
36402 ;;
36403 ;; Three test fail with assertion not equal:
36404 ;;
36405 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
36406 ;; bytes] - AssertionError
36407 ;;
36408 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
36409 ;; 1 bytes] - AssertionError
36410 ;;
36411 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
36412 ;; AssertionError
36413 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
36414 "test_encode_error"))))
36415 (native-inputs (list python-pytest-8 python-setuptools))
36416 (home-page "https://ndeflib.readthedocs.io/")
36417 (synopsis "NFC Data Exchange Format decoder and encoder.")
36418 (description "This package provides a NFC (Near-Field Communication)
36419Data Exchange Format decoder and encoder.")
36420 (license license:isc)))
36421
36422(define-public python-nfcpy
36423 (package
36424 (name "python-nfcpy")
36425 (version "1.0.4")
36426 (source
36427 (origin
36428 (method url-fetch)
36429 (uri (pypi-uri "nfcpy" version))
36430 (sha256
36431 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
36432 (build-system pyproject-build-system)
36433 (arguments
36434 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
36435 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
36436 python-pyserial))
36437 (native-inputs (list python-setuptools python-wheel))
36438 (home-page "https://github.com/nfcpy/nfcpy")
36439 (synopsis "Python module for Near-Field Communication.")
36440 (description "This package provides a Python module for Near-Field
36441Communication.")
36442 (license license:eupl1.1)))
36443
36444(define-public python-clrprint
36445 (package
36446 (name "python-clrprint")
36447 (version "2.0.1")
36448 (source (origin
36449 (method url-fetch)
36450 (uri (pypi-uri "clrprint" version))
36451 (sha256
36452 (base32
36453 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
36454 (build-system pyproject-build-system)
36455 (arguments '(#:tests? #f)) ;there are no tests
36456 (native-inputs
36457 (list python-setuptools))
36458 (propagated-inputs (list python-colorama python-termcolor))
36459 (home-page "https://github.com/AbhijithAJ/clrprint")
36460 (synopsis "Print colorful output in the terminal")
36461 (description "@code{clrprint} is developed to print colorful output in the
36462terminal. It has red, blue, green, yellow, purple and black/white (default)
36463colors.")
36464 (license license:expat)))
36465
36466(define-public python-mido
36467 (package
36468 (name "python-mido")
36469 (version "1.3.2")
36470 (source (origin
36471 (method url-fetch)
36472 (uri (pypi-uri "mido" version))
36473 (sha256
36474 (base32
36475 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
36476 (build-system pyproject-build-system)
36477 (arguments
36478 (list #:phases
36479 #~(modify-phases %standard-phases
36480 ;; This package requires python-packaging~=23.1 which is not yet
36481 ;; updated to. As per pyproject.toml, it is required to provide
36482 ;; a nice version_info object.
36483 ;; TODO: After updating python-packaging, fix this.
36484 (delete 'sanity-check))))
36485 (propagated-inputs (list python-importlib-metadata python-packaging))
36486 (native-inputs (list python-pytest python-setuptools python-wheel))
36487 (home-page "https://mido.readthedocs.io/en/stable/")
36488 (synopsis "MIDI Objects for Python")
36489 (description "This library is for working with MIDI 1.0 ports, messages and
36490files.")
36491 (license license:expat)))
36492
36493(define-public python-musical-scales
36494 (package
36495 (name "python-musical-scales")
36496 (version "1.0.1")
36497 (source (origin
36498 (method url-fetch)
36499 (uri (pypi-uri "musical-scales" version))
36500 (sha256
36501 (base32
36502 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
36503 (build-system pyproject-build-system)
36504 (arguments (list #:tests? #f)) ;no tests
36505 (native-inputs (list python-setuptools))
36506 (home-page "https://github.com/hmillerbakewell/musical-scales")
36507 (synopsis "Retrieve a scale based on a given mode and starting note")
36508 (description
36509 "Retrieve a scale based on a given mode and starting note.
36510Information about these scales can be
36511@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
36512Wikipedia}.")
36513 (license license:expat)))
36514
36515(define-public python-langcodes
36516 (package
36517 (name "python-langcodes")
36518 (version "3.5.0")
36519 (source (origin
36520 (method url-fetch)
36521 (uri (pypi-uri "langcodes" version))
36522 (sha256
36523 (base32
36524 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
36525 (build-system pyproject-build-system)
36526 (native-inputs
36527 (list python-pytest
36528 python-setuptools
36529 python-setuptools-scm))
36530 (propagated-inputs
36531 ;; [optional:data]
36532 (list python-language-data))
36533 (home-page "https://github.com/rspeer/langcodes")
36534 (synopsis "Python library for working with language codes")
36535 (description
36536 "This package provides a Python library for working with and comparing
36537language codes.
36538
36539@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3654047}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3654147 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
36542with it, and it also implements recommendations from the
36543@url{http://cldr.unicode.org/, Unicode CLDR}.
36544
36545@code{python-langcodes} can also refer to a database of language properties
36546and names, built from Unicode CLDR and the IANA subtag registry, if you
36547install @code{python-language-data}.")
36548 (license license:expat)))
36549
36550(define-public python-anyascii
36551 (package
36552 (name "python-anyascii")
36553 (version "0.3.3")
36554 (source (origin
36555 (method url-fetch)
36556 (uri (pypi-uri "anyascii" version))
36557 (sha256
36558 (base32
36559 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
36560 (build-system pyproject-build-system)
36561 (native-inputs (list python-pytest python-flit-core))
36562 (home-page "https://anyascii.com")
36563 (synopsis "Unicode to ASCII transliteration")
36564 (description "@code{anyascii} converts Unicode characters to their best
36565ASCII representation.")
36566 (license license:isc)))
36567
36568(define-public python-geomet
36569 (package
36570 (name "python-geomet")
36571 (version "1.1.0")
36572 (source
36573 (origin
36574 (method git-fetch)
36575 (uri (git-reference
36576 (url "https://github.com/geomet/geomet")
36577 (commit version)))
36578 (file-name (git-file-name name version))
36579 (sha256
36580 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
36581 (build-system pyproject-build-system)
36582 (native-inputs (list python-pytest python-setuptools))
36583 (propagated-inputs (list python-click python-six))
36584 (home-page "https://github.com/geomet/geomet")
36585 (synopsis
36586 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
36587 (description
36588 "This package provides utilities and functions for converting
36589GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
36590versa. Extended WKB/WKT are also supported.")
36591 (license license:asl2.0)))
36592
36593(define-public python-cogapp
36594 (package
36595 (name "python-cogapp")
36596 (version "3.3.0")
36597 (source (origin
36598 (method url-fetch)
36599 (uri (pypi-uri "cogapp" version))
36600 (sha256
36601 (base32
36602 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
36603 (build-system pyproject-build-system)
36604 (native-inputs (list python-pytest python-setuptools python-wheel))
36605 (home-page "https://nedbatchelder.com/code/cog")
36606 (synopsis "Content generation tool that leverages Python")
36607 (description "Cog is a file generation tool. It allows using pieces of
36608Python code as generators in your source files to generate arbitrary text.")
36609 (license license:expat)))
36610
36611(define-public python-cxxheaderparser
36612 (package
36613 (name "python-cxxheaderparser")
36614 (version "1.7.0")
36615 (source
36616 (origin
36617 (method git-fetch)
36618 (uri (git-reference
36619 (url "https://github.com/robotpy/cxxheaderparser")
36620 (commit version)))
36621 (file-name (git-file-name name version))
36622 (sha256
36623 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
36624 (build-system pyproject-build-system)
36625 (native-inputs
36626 (list python-hatch-vcs python-pytest))
36627 (home-page "https://github.com/robotpy/cxxheaderparser/")
36628 (synopsis "Python C++ header parser")
36629 (description "Pure python C++ header parser that parses C++ headers in a
36630mildly naive manner that allows it to handle many C constructs, including
36631many (C++11 and beyond) features.")
36632 (license license:bsd-3)))
36633
36634(define-public python-bsdiff4
36635 (package
36636 (name "python-bsdiff4")
36637 (version "1.2.6")
36638 (source
36639 (origin
36640 (method git-fetch)
36641 (uri (git-reference
36642 (url "https://github.com/ilanschnell/bsdiff4")
36643 (commit version)))
36644 (file-name (git-file-name name version))
36645 (sha256
36646 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
36647 (build-system pyproject-build-system)
36648 (arguments
36649 (list
36650 #:test-flags #~(list "--pyargs" "bsdiff4")))
36651 (native-inputs
36652 (list python-pytest
36653 python-setuptools
36654 python-wheel))
36655 (home-page "https://github.com/ilanschnell/bsdiff4")
36656 (synopsis "Binary diff and patch using the BSDIFF4 format")
36657 (description
36658 "This package provides a Python library for the @code{bsdiff} binary diff
36659utility. It also provides two command-line tools, @code{bsdiff4} and
36660@code{bspatch4}.")
36661 (license license:bsd-2)))
36662
36663(define-public python-mpv
36664 (package
36665 (name "python-mpv")
36666 (version "1.0.8")
36667 (source
36668 (origin
36669 (method git-fetch)
36670 (uri (git-reference
36671 (url "https://github.com/jaseg/python-mpv")
36672 (commit (string-append "v" version))))
36673 (file-name (git-file-name name version))
36674 (sha256
36675 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36676 (build-system pyproject-build-system)
36677 (arguments
36678 (list #:phases
36679 #~(modify-phases %standard-phases
36680 (add-before 'build 'patch-reference-to-mpv
36681 (lambda* (#:key inputs #:allow-other-keys)
36682 ;; Without an absolute path it is not able find and load libmpv.
36683 (substitute* "mpv.py"
36684 (("sofile = .*")
36685 (format #f "sofile = '~a/lib/libmpv.so'~%"
36686 #$(this-package-input "mpv"))))))
36687 (add-before 'check 'prepare-for-tests
36688 (lambda _
36689 ;; Fontconfig throws errors when it has no cache dir to use.
36690 (setenv "XDG_CACHE_HOME" (getcwd))
36691 ;; Some tests fail without a writable and readable HOME.
36692 (setenv "HOME" (getcwd))
36693 (setenv "PY_MPV_SKIP_TESTS"
36694 "test_wait_for_property_event_overflow"))))))
36695 (native-inputs
36696 (list python-pytest
36697 python-pyvirtualdisplay
36698 python-setuptools
36699 xorg-server-for-tests))
36700 (inputs (list mpv))
36701 (propagated-inputs (list python-pillow)) ;for raw screenshots
36702 (home-page "https://github.com/jaseg/python-mpv")
36703 (synopsis "Python interface to the mpv media player")
36704 (description
36705 "python-mpv is a ctypes-based python interface to the mpv media player.
36706It gives you more or less full control of all features of the player, just
36707as the lua interface does.")
36708 ;; From the project's README:
36709 ;; python-mpv inherits the underlying libmpv's license, which can be either
36710 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36711 ;; copyright page.
36712 (license license:gpl2+)))
36713
36714(define-public python-biblib
36715 (let ((upstream-version "0.1.0")
36716 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36717 (revision "1"))
36718 (package
36719 (name "python-biblib")
36720 (version (git-version upstream-version revision commit))
36721 (source
36722 (origin
36723 (method git-fetch)
36724 (uri (git-reference
36725 (url "https://github.com/aclements/biblib")
36726 (commit commit)))
36727 (sha256
36728 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36729 (file-name (git-file-name name version))))
36730 (build-system pyproject-build-system)
36731 (arguments (list #:tests? #f)) ; No tests upstream.
36732 (native-inputs (list python-setuptools))
36733 (home-page "https://github.com/aclements/biblib")
36734 (synopsis "BibTeX parsing and transformation library")
36735 (description
36736 "Biblib provides a simple, standalone Python 3 package for parsing
36737BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36738entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36739source code for BibTeX and hence (barring bugs in translation) should be fully
36740compatible with BibTeX's own parser.")
36741 ;; N.B. It seems the parser was translated from WEB by hand: this
36742 ;; package does not contain any generated files.
36743 (license license:expat))))
36744
36745(define-public python-cyclic
36746 (package
36747 (name "python-cyclic")
36748 (version "1.0.0")
36749 (source
36750 (origin
36751 (method git-fetch)
36752 (uri (git-reference
36753 (url "https://github.com/neurobin/cyclic")
36754 ;; Release is not tagged on github, see
36755 ;; https://github.com/neurobin/cyclic/issues/2
36756 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36757 (file-name (git-file-name name version))
36758 (sha256
36759 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36760 (build-system pyproject-build-system)
36761 (arguments (list #:test-backend #~'unittest))
36762 (native-inputs (list python-setuptools))
36763 (home-page "https://github.com/neurobin/cyclic")
36764 (synopsis "Handle cyclic relations")
36765 (description "This package handles cyclic relations compared by value.")
36766 (license license:bsd-3)))
36767
36768(define-public python-rcslice
36769 (package
36770 (name "python-rcslice")
36771 (version "1.1.0")
36772 (source
36773 (origin
36774 (method git-fetch)
36775 (uri (git-reference
36776 (url "https://github.com/neurobin/rcslice")
36777 ;; Releases are not tagged on github, see
36778 ;; https://github.com/neurobin/rcslice/issues/2
36779 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36780 (file-name (git-file-name name version))
36781 (sha256
36782 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36783 (build-system pyproject-build-system)
36784 (arguments (list #:test-backend #~'unittest))
36785 (native-inputs (list python-setuptools))
36786 (home-page "https://github.com/neurobin/rcslice")
36787 (synopsis "Slice a list of sliceables")
36788 (description
36789 "This package provides Python module to slice a list of sliceables (1
36790indexed, both start and end index are inclusive). Helps to slice file content
36791line by line or column by column or a combination of both.")
36792 (license license:bsd-3)))
36793
36794(define-public python-rpds-py
36795 (package
36796 (name "python-rpds-py")
36797 (version "0.10.6")
36798 (source (origin
36799 (method url-fetch)
36800 (uri (pypi-uri "rpds_py" version))
36801 (sha256
36802 (base32
36803 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36804 (build-system cargo-build-system)
36805 (arguments
36806 (list
36807 #:imported-modules `(,@%cargo-build-system-modules
36808 ,@%pyproject-build-system-modules)
36809 #:modules '((guix build cargo-build-system)
36810 ((guix build pyproject-build-system) #:prefix py:)
36811 (guix build utils))
36812 #:phases
36813 #~(modify-phases %standard-phases
36814 (add-after 'build 'build-python-module
36815 (assoc-ref py:%standard-phases 'build))
36816 (add-after 'build-python-module 'install-python-module
36817 (assoc-ref py:%standard-phases 'install)))
36818 #:install-source? #false))
36819 (inputs
36820 (cons maturin (cargo-inputs 'python-rpds-py)))
36821 (native-inputs
36822 (list python-wrapper))
36823 (home-page "https://github.com/crate-py/rpds")
36824 (synopsis "Bindings to Rust rpds for persistent data structures")
36825 (description "This package provides Python bindings to the Rust rpds crate
36826for persistent data structures. It was written initially to support replacing
36827@code{python-pyrsistent}.")
36828 (license license:expat)))
36829
36830(define-public python-nanoid
36831 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36832 (revision "0"))
36833 (package
36834 (name "python-nanoid")
36835 (version "2.0.0")
36836 (source
36837 (origin
36838 (method git-fetch)
36839 (uri
36840 (git-reference
36841 (url "https://github.com/puyuan/py-nanoid")
36842 (commit commit)))
36843 (file-name (git-file-name name commit))
36844 (sha256
36845 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36846 (build-system pyproject-build-system)
36847 (native-inputs (list python-pytest python-setuptools))
36848 (home-page "https://github.com/puyuan/py-nanoid")
36849 (synopsis "Unique string ID generator")
36850 (description
36851 "This package provides a tiny, secure, URL-friendly, unique string ID
36852generator for Python.")
36853 (license license:expat))))
36854
36855(define-public python-misc-utils
36856 (package
36857 (name "python-misc-utils")
36858 (version "0.28")
36859 (source
36860 (origin
36861 (method git-fetch)
36862 (uri (git-reference
36863 (url "https://github.com/davidel/py_misc_utils")
36864 (commit version)))
36865 (file-name (git-file-name name version))
36866 (sha256
36867 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
36868 (build-system pyproject-build-system)
36869 (arguments
36870 (list
36871 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
36872 #:test-backend #~'custom
36873 #:test-flags #~(list "test/test_runner.py")))
36874 (propagated-inputs
36875 (list python-numpy python-pandas python-psutil python-pyyaml))
36876 (native-inputs (list python-setuptools))
36877 (home-page "https://github.com/davidel/py_misc_utils")
36878 (synopsis "Collection of Python utilities")
36879 (description "This package provides a collection of Python miscellaneous
36880utility tools mainly used by other projects of the same author.")
36881 (license license:asl2.0)))
36882
36883(define-public python-misskey
36884 (package
36885 (name "python-misskey")
36886 (version "4.1.0")
36887 (source (origin
36888 (method git-fetch)
36889 (uri (git-reference
36890 (url "https://github.com/YuzuRyo61/Misskey.py")
36891 (commit (string-append "v" version))))
36892 (file-name (git-file-name name version))
36893 (sha256
36894 (base32
36895 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36896 (build-system pyproject-build-system)
36897 (arguments (list #:tests? #f)) ;needs network
36898 (native-inputs (list python-setuptools))
36899 (propagated-inputs (list python-requests))
36900 (home-page "https://misskeypy.readthedocs.io")
36901 (synopsis "Python bindings for Misskey's API")
36902 (description
36903 "This package provides access to Misskey's API. Misskey is a SNS
36904platform using the ActivityPub protocol.")
36905 (license license:expat)))
36906
36907(define-public python-lief
36908 (package
36909 (name "python-lief")
36910 (version "1.0.0")
36911 (source
36912 (origin
36913 (method git-fetch)
36914 (uri (git-reference
36915 (url "https://github.com/lief-project/LIEF")
36916 (commit version)))
36917 (file-name (git-file-name name version))
36918 (sha256
36919 (base32 "0yhs1x8nli5lhwiq383nnfv8ajgbdidcjckdls1j0zrmyf9kbfa2"))))
36920 (build-system pyproject-build-system)
36921 (arguments
36922 (list
36923 ;; TODO: Tests neeed some setup, see:
36924 ;; <.github/workflows/linux-x86-64.yml>.
36925 #:tests? #f
36926 #:phases
36927 #~(modify-phases %standard-phases
36928 (add-before 'build 'change-directory
36929 (lambda _
36930 (chdir "api/python"))))))
36931 (native-inputs
36932 (list ninja
36933 python-pydantic
36934 python-scikit-build-core
36935 python-tomli))
36936 (home-page "https://github.com/lief-project/LIEF")
36937 (synopsis "Library to instrument executable formats")
36938 (description
36939 "@code{python-lief} is a cross platform library which can parse, modify
36940and abstract ELF, PE and MachO formats.")
36941 (license license:asl2.0)))
36942
36943(define-public python-eris
36944 (package
36945 (name "python-eris")
36946 (version "1.0.0")
36947 (source
36948 (origin
36949 (method url-fetch)
36950 (uri (pypi-uri "eris" version))
36951 (sha256
36952 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36953 (build-system pyproject-build-system)
36954 (arguments
36955 ;; No tests in PyPI, tests miss data files in Git:
36956 ;; - tests/test-vectors/test_encode
36957 ;; - tests/test-vectors/test_decode
36958 (list #:tests? #f))
36959 (native-inputs
36960 (list python-setuptools
36961 python-wheel))
36962 (propagated-inputs
36963 (list python-aiocoap
36964 python-pycryptodome))
36965 (home-page "https://codeberg.org/eris/python-eris")
36966 (synopsis "Python implementation of ERIS")
36967 (description
36968 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36969Storage}.")
36970 (license license:lgpl3+)))
36971
36972(define-public python-pymonad
36973 (package
36974 (name "python-pymonad")
36975 (version "2.4.0")
36976 (source
36977 (origin
36978 (method git-fetch)
36979 (uri (git-reference
36980 (url "https://github.com/jasondelaat/pymonad")
36981 (commit (string-append "v" version))))
36982 (file-name (git-file-name name version))
36983 (sha256
36984 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36985 (build-system pyproject-build-system)
36986 (arguments
36987 (list
36988 #:phases
36989 #~(modify-phases %standard-phases
36990 (replace 'check
36991 (lambda* (#:key tests? #:allow-other-keys)
36992 (when tests?
36993 (invoke "./run_tests.sh")))))))
36994 (native-inputs (list python-setuptools))
36995 (home-page "https://github.com/jasondelaat/pymonad")
36996 (synopsis "Monadic style functional programming for Python")
36997 (description "@code{python-pymonad} implements data structures typically
36998available in purely functional or functional first programming languages such
36999as Haskell and F#. Included are
37000
37001@itemize
37002@item Monad and Monoid data types with several common monads such as Maybe and
37003State
37004@item Useful tools such as the @code{@@curry} decorator for defining curried
37005functions
37006@item Type annotations to help ensure correct usage
37007@end itemize")
37008 (license license:bsd-3)))
37009
37010(define-public python-markdown-strings
37011 (package
37012 (name "python-markdown-strings")
37013 (version "3.3.0")
37014 (source
37015 (origin
37016 (method git-fetch)
37017 (uri (git-reference
37018 (url "https://github.com/awesmubarak/markdown_strings.git")
37019 (commit (string-append "v" version))))
37020 (file-name (git-file-name name version))
37021 (sha256
37022 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
37023 (build-system pyproject-build-system)
37024 (arguments
37025 (list
37026 #:test-backend #~'custom
37027 #:test-flags #~(list "test.py")))
37028 (native-inputs (list python-setuptools))
37029 (propagated-inputs (list python-lxml python-six))
37030 (home-page "https://github.com/awesmubarak/markdown_strings")
37031 (synopsis "Python library to create markdown-formatted text")
37032 (description "This package allows the programmatic creation of
37033markdown-compliant strings.")
37034 (license license:expat)))
37035
37036(define-public python-icecream
37037 (package
37038 (name "python-icecream")
37039 (version "2.1.9")
37040 (source
37041 (origin
37042 (method git-fetch)
37043 (uri (git-reference
37044 (url "https://github.com/gruns/icecream")
37045 (commit (string-append "v" version))))
37046 (file-name (git-file-name name version))
37047 (sha256
37048 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
37049 (build-system pyproject-build-system)
37050 (native-inputs
37051 (list python-hypothesis
37052 python-pytest
37053 python-setuptools))
37054 (propagated-inputs
37055 (list python-asttokens
37056 python-colorama
37057 python-executing
37058 python-pygments))
37059 (home-page "https://github.com/gruns/icecream")
37060 (synopsis
37061 "Single function call to debug variables, expressions, and program execution")
37062 (description
37063 "This tool lets you debug variables, expressions, and program execution
37064with one function call. IceCream makes print debugging a little sweeter.")
37065 (license license:expat)))
37066
37067;; XXX: Deprecated on <2026-07-12>.
37068(define-deprecated/public-alias python-icegrams
37069 (@ (gnu packages language) python-icegrams))
37070
37071(define-public python-sbsv
37072 (package
37073 (name "python-sbsv")
37074 (version "0.2.3")
37075 (source
37076 (origin
37077 (method git-fetch)
37078 (uri (git-reference
37079 (url "https://github.com/hsh814/sbsv")
37080 (commit (string-append "v" version))))
37081 (file-name (git-file-name name version))
37082 (sha256
37083 (base32 "1xzx0xhikwqvmzdbhprzljfvnxznr3an3jf0v07hwkixvh80s4f5"))
37084 (modules '((guix build utils)))
37085 (snippet #~(delete-file-recursively "libsbsv")))) ;separate C library
37086 (build-system pyproject-build-system)
37087 (native-inputs (list python-hatchling python-pytest))
37088 (home-page "https://github.com/hsh814/sbsv")
37089 (synopsis "Square bracket separated values")
37090 (description
37091 "This Python package provides a schema-driven structured log data format
37092for the ease of writing and parsing.")
37093 (license license:expat)))
37094
37095(define-public python-sqlglot
37096 (package
37097 (name "python-sqlglot")
37098 (version "26.33.0")
37099 (source
37100 (origin
37101 (method url-fetch)
37102 (uri (pypi-uri "sqlglot" version))
37103 (sha256
37104 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
37105 (build-system pyproject-build-system)
37106 (arguments
37107 (list
37108 #:test-backend #~'unittest
37109 #:phases
37110 #~(modify-phases %standard-phases
37111 (add-before 'check 'pre-check
37112 (lambda _
37113 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
37114 (native-inputs
37115 (list python-duckdb
37116 python-pytz
37117 python-pandas
37118 python-setuptools
37119 python-setuptools-scm
37120 python-tzdata))
37121 (home-page "https://sqlglot.com/")
37122 (synopsis "Python SQL Parser and Transpiler")
37123 (description
37124 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
37125engine. It can be used to format SQL or translate between 31 different
37126dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
37127BigQuery. It aims to read a wide variety of SQL inputs and output
37128syntactically and semantically correct SQL in the targeted dialects.")
37129 (license license:expat)))
37130
37131(define-public python-sqlglotrs
37132 (package
37133 (inherit python-sqlglot)
37134 (name "python-sqlglotrs")
37135 (version "0.6.1")
37136 (source
37137 (origin
37138 (method url-fetch)
37139 (uri (pypi-uri "sqlglotrs" version))
37140 (sha256
37141 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
37142 (build-system cargo-build-system)
37143 (arguments
37144 (list
37145 #:install-source? #false
37146 #:tests? #f ;no tests
37147 #:imported-modules `(,@%cargo-build-system-modules
37148 ,@%pyproject-build-system-modules)
37149 #:modules '((guix build cargo-build-system)
37150 ((guix build pyproject-build-system) #:prefix py:)
37151 (guix build utils))
37152 #:phases
37153 #~(modify-phases %standard-phases
37154 (add-after 'build 'build-python-module
37155 (assoc-ref py:%standard-phases 'build))
37156 (add-after 'build-python-module 'install-python-module
37157 (assoc-ref py:%standard-phases 'install))
37158 (add-after 'install-python-module 'add-install-to-pythonpath
37159 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
37160 (native-inputs
37161 (list maturin
37162 python-wrapper))
37163 (inputs
37164 (cargo-inputs 'python-sqlglotrs))))
37165
37166(define-public python-sqltrie
37167 (package
37168 (name "python-sqltrie")
37169 (version "0.11.2")
37170 (home-page "https://github.com/iterative/sqltrie/")
37171 (source
37172 (origin
37173 (method url-fetch)
37174 (uri (pypi-uri "sqltrie" version))
37175 (sha256
37176 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
37177 (build-system pyproject-build-system)
37178 (arguments
37179 (list
37180 #:test-flags
37181 #~(list "--ignore=tests/benchmarks/"
37182 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
37183 ;; yet in Guix.
37184 "--ignore=src/sqltrie/__pyinstaller")))
37185 (native-inputs
37186 (list python-pytest
37187 python-pytest-mock
37188 python-pytest-sugar
37189 python-setuptools
37190 python-setuptools-scm))
37191 (propagated-inputs
37192 (list python-attrs
37193 python-orjson
37194 python-pygtrie))
37195 (synopsis "SQL-based prefix tree for Python")
37196 (description
37197 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
37198python-diskcache.")
37199 (license license:asl2.0)))
37200
37201(define-public python-socksipy-branch
37202 (package
37203 (name "python-socksipy-branch")
37204 (version "1.01")
37205 (source
37206 (origin
37207 (method url-fetch)
37208 (uri (pypi-uri "SocksiPy-branch" version))
37209 (sha256
37210 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
37211 (build-system pyproject-build-system)
37212 (arguments (list #:tests? #f)) ; There are no tests
37213 (native-inputs (list python-setuptools))
37214 (home-page "https://code.google.com/archive/p/socksipy-branch/")
37215 (synopsis "Python SOCKS module")
37216 (description
37217 "SocksiPy - A Python SOCKS client module. It provides a socket-like
37218interface that supports connections to any TCP service through the use of a
37219SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
37220this is a branch created by Mario Vilas to address some open issues,as the
37221original project seems to have been abandoned circa 2007.")
37222 (license license:bsd-3)))
37223
37224(define-public python-socksipychain
37225 (package
37226 (name "python-socksipychain")
37227 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
37228 (revision . "0")))
37229 (version (git-version "2.1.3"
37230 (assoc-ref properties 'revision)
37231 (assoc-ref properties 'commit)))
37232 (source
37233 (origin
37234 (method git-fetch)
37235 (uri (git-reference
37236 (url "https://github.com/pagekite/PySocksipyChain")
37237 (commit (assoc-ref properties 'commit))))
37238 (file-name (git-file-name name version))
37239 (sha256
37240 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
37241 (build-system pyproject-build-system)
37242 (arguments (list #:tests? #f)) ; Tests try to access the network.
37243 (native-inputs (list python-setuptools))
37244 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
37245 (synopsis "Python SOCKS module with chained proxies support")
37246 (description
37247 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
37248adds support for arbitrary chaining of proxy servers and various modes of
37249TLS/SSL encryption. It was developed for use in PageKite, and also includes
37250a simple netcat replacement with chaining support.")
37251 (license license:bsd-3)))
37252
37253(define-public python-sortedcollections
37254 (package
37255 (name "python-sortedcollections")
37256 (version "2.1.0")
37257 (source
37258 (origin
37259 (method git-fetch)
37260 (uri (git-reference
37261 (url "https://github.com/grantjenks/python-sortedcollections")
37262 (commit (string-append "v" version))))
37263 (file-name (git-file-name name version))
37264 (sha256
37265 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
37266 (build-system pyproject-build-system)
37267 (native-inputs (list python-setuptools python-pytest python-wheel))
37268 (propagated-inputs (list python-sortedcontainers))
37269 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
37270 (synopsis "Python Sorted Collections")
37271 (description "Sorted Collections is a Python sorted collections library.")
37272 (license license:asl2.0)))
37273
37274(define-public python-sortedcontainers
37275 (package
37276 (name "python-sortedcontainers")
37277 (version "2.4.0")
37278 (source
37279 (origin
37280 (method git-fetch) ;no tests in PyPI archive
37281 (uri (git-reference
37282 (url "https://github.com/grantjenks/python-sortedcontainers")
37283 (commit (string-append "v" version))))
37284 (file-name (git-file-name name version))
37285 (sha256
37286 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
37287 (build-system pyproject-build-system)
37288 (arguments
37289 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
37290 (native-inputs
37291 (list python-pytest-bootstrap python-setuptools))
37292 (home-page "https://grantjenks.com/docs/sortedcontainers/")
37293 (synopsis "Sorted List, Sorted Dict, Sorted Set")
37294 (description
37295 "This package provides a sorted collections library, written in
37296pure-Python.")
37297 (license license:asl2.0)))
37298
37299(define-public python-soupsieve
37300 (package
37301 (name "python-soupsieve")
37302 (version "2.7")
37303 (source
37304 (origin
37305 (method url-fetch)
37306 (uri (pypi-uri "soupsieve" version))
37307 (sha256
37308 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
37309 (build-system pyproject-build-system)
37310 (native-inputs
37311 (list python-beautifulsoup4-bootstrap
37312 python-hatchling
37313 python-pytest))
37314 (home-page "https://github.com/facelessuser/soupsieve")
37315 (synopsis "CSS selector library")
37316 (description
37317 "Soup Sieve is a CSS selector library designed to be used with Beautiful
37318Soup 4. It aims to provide selecting, matching, and filtering using modern
37319CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
37320specifications up through the latest CSS level 4 drafts and beyond (though
37321some are not yet implemented).")
37322 (license license:expat)))
37323
37324(define-public python-spectra
37325 (package
37326 (name "python-spectra")
37327 (version "0.1.0")
37328 (source
37329 (origin
37330 (method url-fetch)
37331 (uri (pypi-uri "spectra" version))
37332 (sha256
37333 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
37334 (build-system pyproject-build-system)
37335 (propagated-inputs
37336 (list python-colormath2))
37337 (native-inputs
37338 (list python-pytest python-setuptools python-wheel))
37339 (home-page "https://github.com/jsvine/spectra")
37340 (synopsis "Color scales and color conversion")
37341 (description
37342 "This package provides a Python library intended to make color math,
37343color scales, and color space conversion easy. It has support for:
37344
37345@enumerate
37346@item Color scales
37347@item Color ranges
37348@item Color blending
37349@item Brightening/darkening colors
37350@item Saturating/desaturating colors
37351@item Conversion to/from multiple color spaces.
37352@end enumerate\n")
37353 (license license:expat)))
37354
37355(define-public python-speedy-antlr-tool
37356 (package
37357 (name "python-speedy-antlr-tool")
37358 (version "1.4.3")
37359 (source
37360 (origin
37361 (method git-fetch)
37362 (uri (git-reference
37363 (url "https://github.com/amykyta3/speedy-antlr-tool")
37364 (commit (string-append "v" version))))
37365 (file-name (git-file-name name version))
37366 (sha256
37367 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
37368 (build-system pyproject-build-system)
37369 (arguments '(#:tests? #f)) ;no test
37370 (native-inputs (list python-setuptools python-setuptools-scm))
37371 (propagated-inputs (list python-antlr4-runtime python-jinja2))
37372 (home-page "https://speedy-antlr-tool.readthedocs.io")
37373 (synopsis "Generate ANTLR parser as Python extension module")
37374 (description
37375 "This tool generates a Python extension that runs your parser
37376using ANTLR's C++ target, and then translates the parsed tree
37377back into Python.")
37378 (license license:bsd-3)))
37379
37380(define-public python-speg
37381 (package
37382 (name "python-speg")
37383 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
37384 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
37385 (revision . "0")))
37386 (version (git-version "0.3"
37387 (assoc-ref properties 'revision)
37388 (assoc-ref properties 'commit)))
37389 (source
37390 (origin
37391 (method git-fetch)
37392 (uri (git-reference
37393 (url "https://github.com/avakar/speg")
37394 (commit (assoc-ref properties 'commit))))
37395 (file-name (git-file-name name version))
37396 (sha256
37397 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
37398 (build-system pyproject-build-system)
37399 (native-inputs
37400 (list python-pytest
37401 python-setuptools))
37402 (propagated-inputs
37403 (list python-six))
37404 (home-page "https://github.com/avakar/speg")
37405 (synopsis "PEG-based parser interpreter with memoization")
37406 (description "This package is a PEG-based parser and interpreter with
37407memoization.")
37408 (license license:expat)))
37409
37410(define-public python-spinners
37411 (package
37412 (name "python-spinners")
37413 (version "0.0.24")
37414 (source
37415 (origin
37416 (method url-fetch)
37417 (uri (pypi-uri "spinners" version))
37418 (sha256
37419 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
37420 (build-system pyproject-build-system)
37421 (arguments
37422 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
37423 (native-inputs
37424 (list python-setuptools))
37425 (home-page "https://github.com/manrajgrover/py-spinners")
37426 (synopsis "Python library with graphical spinners for the terminal")
37427 (description
37428 "Spinners is a Python library that contains graphical spinners that can
37429be displayed terminal.")
37430 (license license:expat)))
37431
37432(define-public python-sre-yield
37433 (package
37434 (name "python-sre-yield")
37435 (version "1.2")
37436 (source
37437 (origin
37438 (method url-fetch)
37439 (uri (pypi-uri "sre_yield" version))
37440 (sha256
37441 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
37442 (build-system pyproject-build-system)
37443 (arguments
37444 (list #:test-backend #~'unittest))
37445 (native-inputs
37446 (list python-setuptools))
37447 (home-page "https://github.com/google/sre_yield")
37448 (synopsis "Expands a regular expression to its possible matches")
37449 (description
37450 "The goal of sre_yield is to efficiently generate all values that can
37451match a given regular expression, or count possible matches efficiently. It
37452uses the parsed regular expression, so you get a much more accurate result
37453than trying to just split strings.")
37454 (license license:asl2.0)))
37455
37456(define-public python-srsly
37457 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
37458 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
37459 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
37460 (package
37461 (name "python-srsly")
37462 (version "2.5.3")
37463 (source
37464 (origin
37465 (method git-fetch)
37466 (uri (git-reference
37467 (url "https://github.com/explosion/srsly")
37468 (commit (string-append "release-v" version))))
37469 (file-name (git-file-name name version))
37470 (sha256
37471 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
37472 (build-system pyproject-build-system)
37473 (arguments
37474 (list
37475 ;; tests: 741 passed, 4 skipped, 22 xfailed
37476 #:test-flags
37477 #~(list "--pyargs" "srsly")
37478 #:phases
37479 #~(modify-phases %standard-phases
37480 (add-after 'unpack 'remove-broken-tests
37481 (lambda _
37482 ;; Tests depend on removed in 2.5.3 module
37483 ;; "srsly/cloudpickle/compat.py".
37484 ;; See: <https://github.com/explosion/srsly/issues/121>.
37485 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
37486 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
37487 (add-before 'check 'remove-local-source
37488 (lambda _
37489 (delete-file-recursively "srsly"))))))
37490 (native-inputs
37491 (list python-cython
37492 python-mock
37493 python-numpy
37494 python-psutil
37495 python-pytest
37496 python-pytest-timeout
37497 python-setuptools))
37498 (propagated-inputs
37499 (list python-catalogue))
37500 (home-page "https://github.com/explosion/srsly")
37501 (synopsis "Serialization utilities for Python")
37502 (description "This package bundles some of the best Python serialization
37503libraries into one standalone package, with a high-level API that makes it
37504easy to write code that's correct across platforms and Pythons.")
37505 (license license:expat)))
37506
37507(define-public python-srt
37508 (package
37509 (name "python-srt")
37510 (version "3.5.3")
37511 (source
37512 (origin
37513 (method url-fetch)
37514 (uri (pypi-uri "srt" version))
37515 (sha256
37516 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
37517 (build-system pyproject-build-system)
37518 (native-inputs
37519 (list python-pytest
37520 python-setuptools
37521 python-wheel))
37522 (home-page "https://github.com/cdown/srt")
37523 (synopsis "SRT parsing library")
37524 (description
37525 "This package provides a Python library for parsing, modifying, and
37526composing subtitles in the SRT file format.")
37527 (license license:expat)))
37528
37529(define-public python-sshpubkeys
37530 (package
37531 (name "python-sshpubkeys")
37532 (version "3.2.0")
37533 (source
37534 (origin
37535 (method git-fetch)
37536 (uri (git-reference
37537 (url "https://github.com/ojarva/python-sshpubkeys")
37538 (commit (string-append "v" version))))
37539 (file-name (git-file-name name version))
37540 (sha256
37541 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
37542 (build-system pyproject-build-system)
37543 (arguments
37544 (list #:tests? #f)) ; XXX: All tests fail
37545 (native-inputs
37546 (list python-setuptools
37547 python-wheel))
37548 (propagated-inputs
37549 (list python-cryptography
37550 python-ecdsa))
37551 (home-page "https://github.com/ojarva/python-sshpubkeys")
37552 (synopsis "OpenSSH public key parser")
37553 (description
37554 "This package provides a library for parsing and validating OpenSSH
37555public key files.")
37556 (license license:bsd-3)))
37557
37558(define-public python-sshtunnel
37559 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
37560 (revision "0"))
37561 (package
37562 (name "python-sshtunnel")
37563 (version (git-version "0.4.0" revision commit))
37564 (source
37565 (origin
37566 (method git-fetch)
37567 (uri (git-reference
37568 (url "https://github.com/pahaz/sshtunnel")
37569 (commit commit)))
37570 (file-name (git-file-name name version))
37571 (sha256
37572 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
37573 (patches (search-patches "python-sshtunnel-pep518.patch"))))
37574 (build-system pyproject-build-system)
37575 (arguments
37576 (list
37577 #:phases
37578 #~(modify-phases %standard-phases
37579 (add-after 'unpack 'remove-deprecated-dsskey
37580 (lambda _
37581 (substitute* "sshtunnel.py"
37582 (("'dsa': paramiko\\.DSSKey,")
37583 "")
37584 (("paramiko\\.DSSKey, ")
37585 "")))))))
37586 (propagated-inputs (list python-paramiko))
37587 (native-inputs
37588 (list openssh python-mock python-pytest python-setuptools))
37589 (home-page "https://github.com/pahaz/sshtunnel")
37590 (synopsis "Python SSH tunnels library")
37591 (description
37592 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
37593in the background, using Python.")
37594 (license license:expat))))
37595
37596(define-public python-stack-data
37597 (package
37598 (name "python-stack-data")
37599 (version "0.6.3")
37600 (source
37601 (origin
37602 (method url-fetch)
37603 (uri (pypi-uri "stack_data" version))
37604 (sha256
37605 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
37606 (build-system pyproject-build-system)
37607 (arguments
37608 (list
37609 #:test-flags
37610 #~(list "-k" (string-join
37611 ;; XXX: Tests fail with HTML diff.
37612 (list "not test_executing_style_defs"
37613 "test_pygments_example"
37614 "test_example")
37615 " and not "))
37616 #:phases
37617 #~(modify-phases %standard-phases
37618 (add-after 'unpack 'set-home-env
37619 (lambda _
37620 (setenv "HOME" "/tmp"))))))
37621 (native-inputs
37622 (list python-cython
37623 python-littleutils
37624 python-pygments
37625 python-pytest
37626 python-setuptools
37627 python-setuptools-scm
37628 python-typeguard
37629 python-wheel))
37630 (propagated-inputs
37631 (list python-asttokens
37632 python-executing
37633 python-pure-eval))
37634 (home-page "https://github.com/alexmojaki/stack_data")
37635 (synopsis "Python stack frame and traceback manipulation library")
37636 (description
37637 "The @code{stack_data} Python library extracts data from stack frames and
37638tracebacks. Is can be used to display more useful tracebacks
37639than the default.")
37640 (license license:expat)))
37641
37642;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
37643;; from the standard library, <https://peps.python.org/pep-0594/>.
37644(define %python-standard-pep-594-version "3.13.0")
37645(define %python-standard-pep-594-source
37646 (origin
37647 (method git-fetch)
37648 (uri (git-reference
37649 (url "https://github.com/youknowone/python-deadlib")
37650 (commit (string-append "v" %python-standard-pep-594-version))))
37651 (file-name (git-file-name "python-standard-pep-594"
37652 %python-standard-pep-594-version))
37653 (sha256
37654 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
37655
37656(define-public python-standard-asynchat
37657 (package
37658 (name "python-standard-asynchat")
37659 (version %python-standard-pep-594-version)
37660 (source %python-standard-pep-594-source)
37661 (build-system pyproject-build-system)
37662 (arguments
37663 (list
37664 #:phases
37665 #~(modify-phases %standard-phases
37666 (add-after 'unpack 'chdir
37667 (lambda _
37668 (chdir "asynchat"))))))
37669 (native-inputs
37670 (list python-setuptools))
37671 (propagated-inputs
37672 (list python-standard-asyncore))
37673 (home-page "https://github.com/youknowone/python-deadlib")
37674 (synopsis "Backport of asynchat from Python 3.11")
37675 (description
37676 "Standard library @code{asynchat} redistribution. Deprecated since
37677version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37678@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37679standard library}.")
37680 (license license:psfl)))
37681
37682(define-public python-standard-asyncore
37683 (package
37684 (name "python-standard-asyncore")
37685 (version %python-standard-pep-594-version)
37686 (source %python-standard-pep-594-source)
37687 (build-system pyproject-build-system)
37688 (arguments
37689 (list
37690 #:phases
37691 #~(modify-phases %standard-phases
37692 (add-after 'unpack 'chdir
37693 (lambda _
37694 (chdir "asyncore"))))))
37695 (native-inputs
37696 (list python-setuptools))
37697 (home-page "https://github.com/youknowone/python-deadlib")
37698 (synopsis "Backport of asyncore from Python 3.11")
37699 (description
37700 "Standard library @code{asyncore} redistribution. Deprecated since
37701version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
37702@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37703standard library}.")
37704 (license license:psfl)))
37705
37706(define-public python-standard-smtpd
37707 (package
37708 (name "python-standard-smtpd")
37709 (version %python-standard-pep-594-version)
37710 (source %python-standard-pep-594-source)
37711 (build-system pyproject-build-system)
37712 (arguments
37713 (list
37714 ;; ImportError: cannot import name 'mock_socket' from 'test'
37715 #:tests? #f
37716 #:phases
37717 #~(modify-phases %standard-phases
37718 (add-after 'unpack 'chdir
37719 (lambda _
37720 (chdir "smtpd"))))))
37721 (native-inputs
37722 (list python-setuptools))
37723 (propagated-inputs
37724 (list
37725 python-standard-asynchat
37726 python-standard-asyncore))
37727 (home-page "https://github.com/youknowone/python-deadlib")
37728 (synopsis "Backport of smtpd from Python 3.11")
37729 (description
37730 "Standard library @code{smtpd} redistribution. Deprecated since version
377313.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
37732replacement for this module, based on @code{asyncio}. See:
37733@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
37734standard library}.")
37735 (license license:psfl)))
37736
37737(define-public python-stdio-mgr
37738 (package
37739 (name "python-stdio-mgr")
37740 (version "1.0.1")
37741 (source
37742 (origin
37743 (method git-fetch)
37744 (uri (git-reference
37745 (url "https://github.com/bskinn/stdio-mgr")
37746 (commit (string-append "v" version))))
37747 (file-name (git-file-name name version))
37748 (sha256
37749 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
37750 (build-system pyproject-build-system)
37751 (arguments
37752 (list
37753 ;; Do not run doctests requiring sphinx.
37754 #:test-flags #~(list "--ignore=README.rst")))
37755 (native-inputs
37756 (list python-pytest
37757 python-setuptools
37758 python-wheel))
37759 (propagated-inputs
37760 (list python-attrs))
37761 (home-page "https://github.com/bskinn/stdio-mgr")
37762 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37763 (description
37764 "This package contains a context manager for mocking/wrapping
37765stdin/stdout/stderr.")
37766 (license license:expat)))
37767
37768;; TODO: This package is not necessary in Guix. It should be replaced by a
37769;; trivial python package providing the same functionality.
37770(define-public python-stdlib-list
37771 (package
37772 (name "python-stdlib-list")
37773 (version "0.11.1")
37774 (source
37775 (origin
37776 (method git-fetch)
37777 (uri (git-reference
37778 (url "https://github.com/jackmaney/python-stdlib-list")
37779 (commit (string-append "v" version))))
37780 (file-name (git-file-name name version))
37781 (sha256
37782 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
37783 (build-system pyproject-build-system)
37784 (native-inputs
37785 (list python-flit-core
37786 python-pytest
37787 python-sphinx))
37788 (home-page "https://github.com/jackmaney/python-stdlib-list")
37789 (synopsis "Python Standard Libraries")
37790 (description
37791 "This package contains a list of Python Standard Libraries.")
37792 (license license:expat)))
37793
37794(define-public python-stem
37795 ;; python-stem is mostly unmaintained, but still has occasional commits
37796 ;; added.
37797 (package
37798 (name "python-stem")
37799 (version "1.8.3")
37800 (source
37801 (origin
37802 (method git-fetch)
37803 (uri (git-reference
37804 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
37805 (commit version)))
37806 (file-name (git-file-name name version))
37807 (sha256
37808 (base32
37809 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
37810 (build-system pyproject-build-system)
37811 (arguments
37812 (list
37813 #:test-backend #~'custom
37814 #:test-flags #~(list "run_tests.py" "--unit")
37815 #:phases
37816 #~(modify-phases %standard-phases
37817 (add-after 'unpack 'fix-python-312
37818 (lambda _
37819 (substitute* (find-files "." "\\.py$")
37820 (("assertRaisesRegexp") "assertRaisesRegex")))))))
37821 (native-inputs
37822 (list python-setuptools
37823 python-wheel))
37824 (home-page "https://stem.torproject.org/")
37825 (synopsis
37826 "Python controller library that allows applications to interact with Tor")
37827 (description
37828 "Stem is a Python controller library for Tor. With it you can use Tor's
37829 control protocol to script against the Tor process and read descriptor data
37830 relays publish about themselves.")
37831 (license license:lgpl3)))
37832
37833(define-public python-stltools
37834 (package
37835 (name "python-stltools")
37836 (version "2022.01.20")
37837 (source
37838 (origin
37839 (method git-fetch)
37840 (uri (git-reference
37841 (url "https://github.com/rsmith-nl/stltools")
37842 (commit version)))
37843 (file-name (git-file-name name version))
37844 (sha256
37845 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
37846 (build-system pyproject-build-system)
37847 (arguments
37848 (list
37849 #:phases
37850 #~(modify-phases %standard-phases
37851 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
37852 (delete 'build)
37853 (replace 'install
37854 (lambda* (#:key inputs outputs #:allow-other-keys)
37855 (let ((moddir (string-append (site-packages inputs outputs)
37856 "/stltools"))
37857 (bindir (string-append #$output "/bin")))
37858 (copy-recursively "stltools" moddir)
37859 (mkdir-p bindir)
37860 (for-each
37861 (lambda (script)
37862 (let ((source (string-append script ".py"))
37863 (target (string-append bindir "/" script)))
37864 (copy-file source target)
37865 (chmod target #o555)))
37866 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
37867 (native-inputs
37868 (list python-pytest
37869 python-setuptools))
37870 (propagated-inputs
37871 (list python-pycairo))
37872 (home-page "https://github.com/rsmith-nl/stltools")
37873 (synopsis "Python modules and scripts for handling STL files")
37874 (description
37875 "This package consists of Python modules and scripts for manipulating
37876stereolithography (STL) files. It can convert STL files into POV-ray meshes,
37877PDF and PostScript. The Python modules allow for reading and writing STL
37878files. It supports both the text and binary forms of STL.")
37879 (license license:expat)))
37880
37881(define-public python-stone
37882 (package
37883 (name "python-stone")
37884 (version "3.3.9")
37885 (source
37886 (origin
37887 (method git-fetch)
37888 (uri (git-reference
37889 (url "https://github.com/dropbox/stone")
37890 (commit (string-append "v" version))))
37891 (file-name (git-file-name name version))
37892 (sha256
37893 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
37894 (build-system pyproject-build-system)
37895 (native-inputs
37896 (list python-pytest
37897 python-setuptools))
37898 (propagated-inputs
37899 (list python-jinja2
37900 python-packaging
37901 python-ply
37902 python-six)) ;hard requirement, still
37903 (home-page "https://github.com/dropbox/stone")
37904 (synopsis "Official Api Spec Language for Dropbox")
37905 (description
37906 "Stone is an interface description language (IDL) for APIs.")
37907 (license license:expat)))
37908
37909(define-public python-stopit
37910 (package
37911 (name "python-stopit")
37912 (version "1.1.2")
37913 (source
37914 (origin
37915 (method git-fetch)
37916 (uri (git-reference
37917 (url "https://github.com/glenfant/stopit")
37918 (commit version)))
37919 (file-name (git-file-name name version))
37920 (sha256
37921 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
37922 (build-system pyproject-build-system)
37923 (arguments
37924 (list #:test-backend #~'custom
37925 #:test-flags #~(list "tests.py")))
37926 (native-inputs (list python-setuptools))
37927 (home-page "https://pypi.python.org/pypi/stopit")
37928 (synopsis "Timeout control decorator and context managers")
37929 (description
37930 "Raise asynchronous exceptions in other threads, control the timeout of
37931blocks or callables with two context managers and two decorators.")
37932 (license license:expat)))
37933
37934(define-public python-straight-plugin
37935 (package
37936 (name "python-straight-plugin")
37937 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
37938 (revision . "0")))
37939 (version (git-version "1.4.1"
37940 (assoc-ref properties 'revision)
37941 (assoc-ref properties 'commit)))
37942 (source
37943 (origin
37944 (method git-fetch)
37945 (uri (git-reference
37946 (url "https://github.com/ironfroggy/straight.plugin")
37947 (commit (assoc-ref properties 'commit))))
37948 (file-name (git-file-name name version))
37949 (sha256
37950 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
37951 (build-system pyproject-build-system)
37952 (arguments
37953 (list
37954 ;; XXX: Some tests started failing with the move to [email protected].
37955 ;; Consider removing this leaf unmaintained package.
37956 #:tests? #f
37957 #:test-backend #~'custom
37958 #:test-flags #~(list "tests.py")
37959 #:phases
37960 #~(modify-phases %standard-phases
37961 (add-after 'unpack 'fix-python-3.12-incompatibility
37962 (lambda _
37963 (substitute* "straight/plugin/loaders.py"
37964 (("from imp import find_module")
37965 "")))))))
37966 (native-inputs (list python-mock python-setuptools))
37967 (home-page "https://github.com/ironfroggy/straight.plugin")
37968 (synopsis "Simple namespaced plugin facility")
37969 (description
37970 "Straight Plugin provides a type of plugin you can create from almost any
37971existing Python modules, and an easy way for outside developers to add
37972functionality and customization to your projects with their own plugins.")
37973 (license license:expat)))
37974
37975(define-public python-streamtracer
37976 (package
37977 (name "python-streamtracer")
37978 (version "2.4.0")
37979 (source
37980 (origin
37981 (method url-fetch)
37982 (uri (pypi-uri "streamtracer" version))
37983 (sha256
37984 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
37985 (build-system pyproject-build-system)
37986 (arguments
37987 (list
37988 #:imported-modules `(,@%cargo-build-system-modules
37989 ,@%pyproject-build-system-modules)
37990 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
37991 (guix build pyproject-build-system)
37992 (guix build utils))
37993 #:test-flags
37994 #~(list "--pyargs" "streamtracer")
37995 #:phases
37996 #~(modify-phases %standard-phases
37997 (add-after 'unpack 'prepare-cargo-build-system
37998 (lambda args
37999 (for-each (lambda (phase)
38000 (format #t "Running cargo phase: ~a~%" phase)
38001 (apply (assoc-ref cargo:%standard-phases phase)
38002 #:cargo-target #$(cargo-triplet)
38003 args))
38004 '(unpack-rust-crates
38005 configure
38006 check-for-pregenerated-files
38007 patch-cargo-checksums)))))))
38008 (native-inputs
38009 (append
38010 (list maturin
38011 python-pytest
38012 python-pytest-doctestplus
38013 rust
38014 `(,rust "cargo"))
38015 (or (and=> (%current-target-system)
38016 (compose list make-rust-sysroot))
38017 '())))
38018 (propagated-inputs
38019 (list python-numpy
38020 python-packaging))
38021 (inputs (cargo-inputs 'python-streamtracer))
38022 (home-page "https://github.com/sunpy/streamtracer")
38023 (synopsis "Rapid streamline tracing in Python")
38024 (description
38025 "streamtracer is a Python package for rapid streamline tracing on
38026regularly spaced grids. The actual streamline tracing is done at a low level
38027in Rust, with a nice Python API provided on top.")
38028 (license license:gpl3+)))
38029
38030(define-public python-strenum
38031 (package
38032 (name "python-strenum")
38033 (version "0.4.15")
38034 (source
38035 (origin
38036 (method git-fetch)
38037 (uri (git-reference
38038 (url "https://github.com/irgeek/StrEnum")
38039 (commit (string-append "v" version))))
38040 (file-name (git-file-name name version))
38041 (sha256
38042 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
38043 (snippet #~(delete-file "versioneer.py"))))
38044 (build-system pyproject-build-system)
38045 (arguments
38046 (list #:test-flags #~(list "tests")))
38047 (native-inputs
38048 (list python-pytest
38049 python-pytest-pylint
38050 python-setuptools
38051 python-versioneer))
38052 (home-page "https://github.com/irgeek/StrEnum")
38053 (synopsis "Enum that inherits from str")
38054 (description "StrEnum is a Python @code{enum.Enum} that inherits from
38055@code{str} to complement @code{enum.IntEnum} in the standard library.")
38056 (license license:expat)))
38057
38058(define-public python-structlog
38059 (package
38060 (name "python-structlog")
38061 (version "25.5.0")
38062 (source
38063 (origin
38064 (method url-fetch)
38065 (uri (pypi-uri "structlog" version))
38066 (sha256
38067 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
38068 (build-system pyproject-build-system)
38069 (native-inputs
38070 (list python-hatch-fancy-pypi-readme
38071 python-hatch-vcs
38072 python-hatchling
38073 python-pytest
38074 python-pytest-asyncio
38075 python-time-machine))
38076 (home-page "https://www.structlog.org/")
38077 (synopsis "Structured Logging for Python")
38078 (description "@code{structlog} changes logging in Python by adding structure
38079to your log entries.")
38080 (license (list license:asl2.0 license:expat))))
38081
38082(define-public python-style
38083 (package
38084 (name "python-style")
38085 (version "1.1.6")
38086 (source
38087 (origin
38088 (method url-fetch)
38089 (uri (pypi-uri "style" version))
38090 (sha256
38091 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
38092 (build-system pyproject-build-system)
38093 (arguments
38094 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
38095 (native-inputs
38096 (list python-setuptools))
38097 (home-page "https://github.com/lmittmann/style")
38098 (synopsis "Terminal string styling")
38099 (description
38100"@code{python-style} is a simple terminal string styling package. Its API is
38101a port of the chalk package for javascript.")
38102 (license license:expat)))
38103
38104(define-public python-svgelements
38105 (package
38106 (name "python-svgelements")
38107 (version "1.9.6")
38108 (source
38109 (origin
38110 (method git-fetch)
38111 (uri (git-reference
38112 (url "https://github.com/meerk40t/svgelements")
38113 (commit version)))
38114 (file-name (git-file-name name version))
38115 (sha256
38116 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
38117 (build-system pyproject-build-system)
38118 (arguments
38119 (list
38120 #:phases
38121 #~(modify-phases %standard-phases
38122 (add-after 'unpack 'fix-python-incompatibilities
38123 (lambda _
38124 (substitute* (find-files "test" "\\.py$")
38125 (("(assert(|NotAlmost)Equal)s" all out in)
38126 out)))))))
38127 (native-inputs
38128 (list python-anyio
38129 python-pytest
38130 python-numpy
38131 python-pillow
38132 python-scipy
38133 python-setuptools))
38134 (home-page "https://github.com/meerk40t/svgelements")
38135 (synopsis "SVG parsing for elements, paths, and other SVG objects")
38136 (description
38137 "This module does high fidelity SVG parsing and geometric rendering.
38138The goal is to successfully and correctly process SVG for use with any scripts
38139that may need or want to use SVG files as geometric data.")
38140 (license license:expat)))
38141
38142(define-public python-svgutils
38143 (package
38144 (name "python-svgutils")
38145 (version "0.3.4")
38146 (source
38147 (origin
38148 (method url-fetch)
38149 (uri (pypi-uri "svgutils" version))
38150 (sha256
38151 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
38152 (build-system pyproject-build-system)
38153 (arguments
38154 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
38155 (native-inputs
38156 (list python-setuptools))
38157 (propagated-inputs
38158 (list python-lxml))
38159 (home-page "https://svgutils.readthedocs.io")
38160 (synopsis "Python SVG editor")
38161 (description "This is an utility package that helps with editing and
38162concatenating SVG files. It is especially directed at scientists preparing
38163final figures for submission to journals. So far it supports arbitrary
38164placement and scaling of SVG figures and adding markers, such as labels.")
38165 (license license:expat)))
38166
38167(define-public python-svgwrite
38168 ;; XXX: Unmaintained since <2022-07-14>, used by python-qrbill.
38169 (package
38170 (name "python-svgwrite")
38171 (version "1.4.3")
38172 (source
38173 (origin
38174 (method git-fetch)
38175 (uri (git-reference
38176 (url "https://github.com/mozman/svgwrite")
38177 (commit (string-append "v" version))))
38178 (file-name (git-file-name name version))
38179 (sha256
38180 (base32 "14nvgsdhndpsgqlcp1vbmczd7rfyiddhjav2xja0a0rx2472psxq"))))
38181 (build-system pyproject-build-system)
38182 (arguments
38183 (list
38184 ;; Disable test which wants internet.
38185 #:test-flags
38186 #~(list "-k" "not test_embed_google_web_font")))
38187 (native-inputs (list python-pytest python-setuptools))
38188 (home-page "https://github.com/mozman/svgwrite")
38189 (synopsis "Python library to create SVG drawings")
38190 (description
38191 "This package provides a Python library to create SVG drawings.")
38192 (license license:expat)))
38193
38194(define-public python-swagger-spec-validator
38195 (package
38196 (name "python-swagger-spec-validator")
38197 (version "3.0.4")
38198 (source
38199 (origin
38200 (method git-fetch)
38201 (uri (git-reference
38202 (url "https://github.com/Yelp/swagger_spec_validator")
38203 (commit (string-append "v" version))))
38204 (file-name (git-file-name name version))
38205 (sha256
38206 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
38207 (build-system pyproject-build-system)
38208 (native-inputs
38209 (list python-pytest
38210 python-setuptools))
38211 (propagated-inputs
38212 (list python-importlib-resources
38213 python-jsonschema
38214 python-pyyaml
38215 python-typing-extensions))
38216 (home-page "https://github.com/Yelp/swagger_spec_validator")
38217 (synopsis "Validation of Swagger specifications")
38218 (description
38219 "@code{swagger_spec_validator} provides a library for validating Swagger
38220API specifications.")
38221 (license license:asl2.0)))
38222
38223(define-public python-syllables
38224 (package
38225 (name "python-syllables")
38226 (version "1.0.3")
38227 (source
38228 (origin
38229 (method git-fetch)
38230 (uri (git-reference
38231 (url "https://github.com/prosegrinder/python-syllables")
38232 (commit (string-append "v" version))))
38233 (file-name (git-file-name name version))
38234 (sha256
38235 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
38236 (build-system pyproject-build-system)
38237 (native-inputs
38238 (list python-cmudict
38239 python-pytest
38240 python-setuptools))
38241 (home-page "https://github.com/prosegrinder/python-syllables")
38242 (synopsis "Package for estimating the number of syllables in a word")
38243 (description
38244 "This package provides a Python package for estimating the number of
38245syllables in a word.")
38246 (license license:gpl3)))
38247
38248(define-public python-sympy
38249 (package
38250 (name "python-sympy")
38251 (version "1.13.3")
38252 (source
38253 (origin
38254 (method url-fetch)
38255 (uri (pypi-uri "sympy" version))
38256 (sha256
38257 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
38258 (build-system pyproject-build-system)
38259 (arguments
38260 '(#:phases
38261 (modify-phases %standard-phases
38262 (replace 'check
38263 (lambda* (#:key tests? #:allow-other-keys)
38264 (if tests?
38265 (invoke "python3" "-c"
38266 "import sympy; sympy.test(\"/core\")")))))))
38267 (propagated-inputs (list python-mpmath))
38268 (native-inputs
38269 (list python-hypothesis
38270 python-pytest
38271 python-setuptools
38272 python-wheel))
38273 (home-page "https://www.sympy.org/")
38274 (synopsis "Python library for symbolic mathematics")
38275 (description
38276 "SymPy is a Python library for symbolic mathematics. It aims to become a
38277full-featured computer algebra system (CAS) while keeping the code as simple
38278as possible in order to be comprehensible and easily extensible.")
38279 (license license:bsd-3)))
38280
38281(define-public python-tables
38282 (package
38283 (name "python-tables")
38284 ;; XXX: Compatibility fix for numexpr 2.13.0, see:
38285 ;; <https://github.com/PyTables/PyTables/pull/1256>.
38286 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
38287 (revision . "0")))
38288 (version (git-version "3.10.2"
38289 (assoc-ref properties 'revision)
38290 (assoc-ref properties 'commit)))
38291 (source
38292 (origin
38293 (method git-fetch)
38294 (uri (git-reference
38295 (url "https://github.com/PyTables/PyTables")
38296 (commit (assoc-ref properties 'commit))))
38297 (file-name (git-file-name name version))
38298 (sha256
38299 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
38300 (snippet '(begin
38301 (use-modules (guix build utils))
38302 (delete-file-recursively "hdf5-blosc")
38303 (delete-file-recursively "c-blosc")))))
38304 (build-system pyproject-build-system)
38305 (arguments
38306 (list
38307 #:phases
38308 #~(modify-phases %standard-phases
38309 (add-after 'unpack 'disable-tuning
38310 (lambda _
38311 (substitute* "setup.py"
38312 (("cpu_flags = .*")
38313 "cpu_flags = ['sse2']\n"))))
38314 (add-after 'unpack 'fix-reference-to-blosc2
38315 (lambda* (#:key inputs #:allow-other-keys)
38316 (substitute* "tables/__init__.py"
38317 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
38318 m indent)
38319 (string-append indent
38320 "\""
38321 (search-input-file inputs "/lib/libblosc2.so")
38322 "\",\n" m)))))
38323 (add-before 'build 'pre-build
38324 (lambda _
38325 (substitute* "setup.py"
38326 (("hdf5-blosc/src")
38327 (format #f "~a/src"
38328 #$(package-source (this-package-input "hdf5-blosc")))))
38329 (invoke "make" "distclean") ;Regenerate C code with Cython
38330 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
38331 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
38332 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
38333 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
38334 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
38335 (add-before 'check 'pre-check
38336 (lambda _
38337 (setenv "HOME" "/tmp")))
38338 (replace 'check
38339 (lambda* (#:key tests? #:allow-other-keys)
38340 (when tests?
38341 (with-directory-excursion "/tmp"
38342 ;; Performing only a light (yet comprehensive) subset of the
38343 ;; test suite. If you want a more complete test, try
38344 ;; passing the --heavy flag to this script (or set the
38345 ;; 'heavy' parameter in case you are using tables.test()
38346 ;; call). The whole suite will take more than 4 hours to
38347 ;; complete on a relatively modern CPU and around 512 MB of
38348 ;; main memory.
38349 (invoke "python" "-m" "tables.tests.test_all"))))))))
38350 (native-inputs
38351 (list pkg-config
38352 python-cython
38353 python-pytest
38354 python-setuptools
38355 python-sphinx))
38356 (inputs
38357 (list bzip2
38358 c-blosc
38359 c-blosc2
38360 hdf5
38361 hdf5-blosc
38362 lzo))
38363 (propagated-inputs
38364 (list python-blosc2
38365 python-numexpr
38366 python-numpy
38367 python-packaging
38368 python-py-cpuinfo
38369 python-typing-extensions))
38370 (home-page "https://www.pytables.org/")
38371 (synopsis "Hierarchical datasets for Python")
38372 (description "PyTables is a package for managing hierarchical datasets and
38373designed to efficiently cope with extremely large amounts of data.")
38374 (license license:bsd-3)))
38375
38376(define-public python-tablib
38377 (package
38378 (name "python-tablib")
38379 (version "3.9.0")
38380 (source
38381 (origin
38382 (method url-fetch)
38383 (uri (pypi-uri "tablib" version))
38384 (sha256
38385 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
38386 (build-system pyproject-build-system)
38387 (native-inputs
38388 (list python-pytest python-setuptools python-setuptools-scm))
38389 (inputs ;; [cli]
38390 (list python-tabulate))
38391 (propagated-inputs
38392 (list python-markuppy
38393 python-odfpy
38394 python-openpyxl
38395 python-pyyaml
38396 python-xlrd
38397 python-xlwt))
38398 (home-page "https://tablib.readthedocs.io")
38399 (synopsis "Format agnostic tabular data library")
38400 (description
38401 "@code{tablib} is a format-agnostic tabular dataset library,
38402written in Python. Supported output formats are Excel (Sets + Books),
38403JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
38404TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
38405
38406@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
38407quite huge, this Guix package doesn't depend on pandas. In case, just also
38408install @code{python-pandas}.")
38409 (license license:expat)))
38410
38411(define-public python-tabulate
38412 (package
38413 (name "python-tabulate")
38414 (version "0.9.0")
38415 (source
38416 (origin
38417 (method url-fetch)
38418 (uri (pypi-uri "tabulate" version))
38419 (sha256
38420 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
38421 (build-system pyproject-build-system)
38422 (native-inputs
38423 (list python-pytest
38424 python-setuptools-scm
38425 python-setuptools))
38426 (propagated-inputs
38427 (list python-wcwidth))
38428 (home-page "https://github.com/astanin/python-tabulate")
38429 (synopsis "Pretty-print tabular data")
38430 (description
38431 "Tabulate is a library and command-line utility to pretty-print tabular
38432data in Python.")
38433 (license license:expat)))
38434
38435(define-public python-takethetime
38436 (package
38437 (name "python-takethetime")
38438 (version "0.3.1")
38439 (source
38440 (origin
38441 (method url-fetch)
38442 (uri (pypi-uri "TakeTheTime" version))
38443 (sha256
38444 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
38445 (build-system pyproject-build-system)
38446 (arguments
38447 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
38448 (native-inputs
38449 (list python-setuptools
38450 python-wheel))
38451 (home-page "https://github.com/ErikBjare/TakeTheTime")
38452 (synopsis "Timing chunks of code")
38453 (description
38454 "This package implements a functionality for time taking using context
38455managers.")
38456 (license license:expat)))
38457
38458(define-public python-targ
38459 (package
38460 (name "python-targ")
38461 (version "0.6.0")
38462 (source
38463 (origin
38464 (method git-fetch)
38465 (uri (git-reference
38466 (url "https://github.com/piccolo-orm/targ/")
38467 (commit version)))
38468 (file-name (git-file-name name version))
38469 (sha256
38470 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
38471 (build-system pyproject-build-system)
38472 (native-inputs
38473 (list python-pytest
38474 python-setuptools))
38475 (propagated-inputs
38476 (list python-colorama
38477 python-docstring-parser))
38478 (home-page "https://github.com/piccolo-orm/targ/")
38479 (synopsis "Python CLI builder using type hints and docstrings")
38480 (description
38481 "Targ is a package to build a Python @acronym{Command Line Interface,
38482CLI} for applications by using type hints and docstrings.")
38483 (license license:expat)))
38484
38485(define-public python-tasklib
38486 (package
38487 (name "python-tasklib")
38488 (version "2.5.1")
38489 (source
38490 (origin
38491 (method git-fetch)
38492 (uri (git-reference
38493 (url "https://github.com/GothenburgBitFactory/tasklib")
38494 (commit version)))
38495 (file-name (git-file-name name version))
38496 (sha256
38497 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
38498 (build-system pyproject-build-system)
38499 (arguments
38500 (list
38501 #:test-backend
38502 #~'unittest))
38503 (inputs (list taskwarrior))
38504 (native-inputs (list python-setuptools tzdata-for-tests))
38505 (home-page "https://github.com/GothenburgBitFactory/tasklib")
38506 (synopsis "Official Taskwarrior library for Python")
38507 (description "@code{tasklib} is a Python library for interacting with
38508Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
38509 (license license:bsd-3)))
38510
38511(define-public python-tasklogger
38512 (package
38513 (name "python-tasklogger")
38514 (version "1.2.0")
38515 (source
38516 (origin
38517 (method url-fetch)
38518 (uri (pypi-uri "tasklogger" version))
38519 (sha256
38520 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
38521 (build-system pyproject-build-system)
38522 (native-inputs
38523 (list python-pytest
38524 python-numpy
38525 python-setuptools))
38526 (propagated-inputs
38527 (list python-deprecated))
38528 (home-page "https://github.com/scottgigante/tasklogger")
38529 (synopsis "Extension to the core Python logging library")
38530 (description "This package provides an extension to the core Python
38531logging library for logging the beginning and completion of tasks and
38532subtasks.")
38533 (license license:gpl2)))
38534
38535(define-public python-tatsu
38536 (package
38537 (name "python-tatsu")
38538 (version "5.13.2")
38539 (source
38540 (origin
38541 (method git-fetch)
38542 (uri (git-reference
38543 (url "https://github.com/neogeny/TatSu")
38544 (commit (string-append "v" version))))
38545 (file-name (git-file-name name version))
38546 (sha256
38547 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
38548 (build-system pyproject-build-system)
38549 (native-inputs
38550 (list python-pytest
38551 python-setuptools))
38552 (home-page "https://tatsu.readthedocs.io/en/stable/")
38553 (synopsis "PEG/Packrat Parser generator for Python")
38554 (description
38555 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
38556Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
38557or Packrat parser in Python.")
38558 (license license:bsd-2)))
38559
38560(define-public python-tblib
38561 (package
38562 (name "python-tblib")
38563 (version "3.1.0")
38564 (source
38565 (origin
38566 (method url-fetch)
38567 (uri (pypi-uri "tblib" version))
38568 (sha256
38569 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
38570 (build-system pyproject-build-system)
38571 (arguments
38572 (list
38573 ;; Don't run benchmark tests.
38574 #:test-flags #~(list "--ignore=tests/test_perf.py")
38575 #:phases
38576 #~(modify-phases %standard-phases
38577 (add-after 'unpack 'fix-pytest-config
38578 (lambda _
38579 (substitute* "pytest.ini"
38580 (("--benchmark-disable") "")))))))
38581 (native-inputs
38582 (list python-pytest
38583 python-setuptools))
38584 (home-page "https://github.com/ionelmc/python-tblib")
38585 (synopsis "Traceback serialization library")
38586 (description
38587 "Traceback serialization allows you to:
38588
38589@enumerate
38590@item Pickle tracebacks and raise exceptions with pickled tracebacks in
38591different processes. This allows better error handling when running code over
38592multiple processes (imagine multiprocessing, billiard, futures, celery etc).
38593
38594@item Parse traceback strings and raise with the parsed tracebacks.
38595@end enumerate\n")
38596 (license license:bsd-3)))
38597
38598(define-public python-tcolorpy
38599 (package
38600 (name "python-tcolorpy")
38601 (version "0.1.7")
38602 (source
38603 (origin
38604 (method git-fetch)
38605 (uri (git-reference
38606 (url "https://github.com/thombashi/tcolorpy")
38607 (commit (string-append "v" version))))
38608 (file-name (git-file-name name version))
38609 (sha256
38610 (base32 "18cck1s0w9i5llaaw9s37g61dqg3vpjjgd3ywc72n1i02k0yj1fh"))))
38611 (build-system pyproject-build-system)
38612 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
38613 (home-page "https://github.com/thombashi/tcolorpy")
38614 (synopsis "Apply true color for terminal text")
38615 (description
38616 "@code{tcolorpy} is a Python library to apply true color for terminal
38617text.
38618You can set the following @code{tcolor} arguments:
38619
38620@itemize
38621@item color
38622@item bgcolor
38623@item styles
38624@end itemize")
38625 (license license:expat)))
38626
38627(define-public python-telethon
38628 (package
38629 (name "python-telethon")
38630 (version "1.42.0")
38631 (source
38632 (origin
38633 (method git-fetch)
38634 (uri (git-reference
38635 (url "https://codeberg.org/Lonami/Telethon")
38636 (commit (string-append "v" version))))
38637 (file-name (git-file-name name version))
38638 (sha256
38639 (base32 "16xp5cwfv1ly25zcnnn0jgrmzpsl3yqzf92dfbnpyiy64j8wkh9l"))))
38640 (build-system pyproject-build-system)
38641 (native-inputs
38642 (list python-pytest
38643 python-pytest-asyncio
38644 python-pytest-trio
38645 python-setuptools))
38646 (propagated-inputs
38647 (list python-rsa python-pyaes))
38648 (home-page "https://docs.telethon.dev")
38649 (synopsis "Full-featured Telegram client library for Python 3")
38650 (description "This library is designed to make it easy to write Python
38651programs that can interact with Telegram.")
38652 (license license:expat)))
38653
38654(define-public python-tempdir
38655 (package
38656 (name "python-tempdir")
38657 (version "0.7.1")
38658 (source
38659 (origin
38660 (method url-fetch)
38661 (uri (pypi-uri "tempdir" version))
38662 (sha256
38663 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
38664 (build-system pyproject-build-system)
38665 (arguments (list #:tests? #f)) ; No tests.
38666 (native-inputs (list python-setuptools))
38667 (home-page "https://pypi.org/project/tempdir/")
38668 (synopsis "Python library for managing temporary directories")
38669 (description
38670 "This library manages temporary directories that are automatically
38671deleted with all their contents when they are no longer needed. It is
38672particularly convenient for use in tests.")
38673 (license license:expat)))
38674
38675(define-public python-tempora
38676 (package
38677 (name "python-tempora")
38678 (version "5.8.1")
38679 (source
38680 (origin
38681 (method url-fetch)
38682 (uri (pypi-uri "tempora" version))
38683 (sha256
38684 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
38685 (build-system pyproject-build-system)
38686 (arguments
38687 (list
38688 ;; Do not test the myproject.toml build as it tries to pull dependencies
38689 ;; from the Internet.
38690 #:test-flags #~(list "-k" "not project"
38691 "tests")))
38692 (native-inputs
38693 (list python-freezegun
38694 python-pytest
38695 python-setuptools
38696 python-setuptools-scm
38697 python-tzdata))
38698 (propagated-inputs (list python-dateutil python-jaraco-functools))
38699 (home-page "https://github.com/jaraco/tempora")
38700 (synopsis "Python date and time objects and routines")
38701 (description
38702 "The @code{tempora} Python library contains miscellaneous date and time
38703related utilities and constants, routines for measuring, profiling, and
38704getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
38705well as an event scheduler.")
38706 (license license:expat)))
38707
38708(define-public python-tenacity
38709 (package
38710 (name "python-tenacity")
38711 (version "9.0.0")
38712 (source
38713 (origin
38714 (method url-fetch)
38715 (uri (pypi-uri "tenacity" version))
38716 (sha256
38717 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
38718 (build-system pyproject-build-system)
38719 (native-inputs
38720 (list python-pytest
38721 python-setuptools
38722 python-setuptools-scm
38723 python-tornado
38724 python-typeguard
38725 python-wheel))
38726 (home-page "https://github.com/jd/tenacity")
38727 (synopsis "Retrying library for python")
38728 (description
38729 "Tenacity is a general-purpose python library to simplify the task of
38730adding retry behavior to just about anything.")
38731 (license license:asl2.0)))
38732
38733(define-public python-term-background
38734 (package
38735 (name "python-term-background")
38736 (version "1.0.2")
38737 (source
38738 (origin
38739 (method url-fetch)
38740 (uri (pypi-uri "term_background" version))
38741 (sha256
38742 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
38743 (arguments
38744 (list
38745 #:phases
38746 '(modify-phases %standard-phases
38747 (add-after 'unpack 'fix-build
38748 (lambda _ (delete-file "setup.py"))))))
38749 (build-system pyproject-build-system)
38750 (native-inputs
38751 (list python-pytest
38752 python-setuptools
38753 python-setuptools-scm
38754 python-wrapper
38755 python-wheel))
38756 (home-page "http://github.com/rocky/shell-term-background")
38757 (synopsis "Determine if shell has a light or dark background")
38758 (description "This package determines if shell has a light or dark
38759background.")
38760 (license license:gpl2+)))
38761
38762(define-public python-term-image
38763 (package
38764 (name "python-term-image")
38765 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
38766 (revision . "0")))
38767 (version (git-version "0.7.2"
38768 (assoc-ref properties 'revision)
38769 (assoc-ref properties 'commit)))
38770 (source
38771 (origin
38772 (method git-fetch)
38773 (uri (git-reference
38774 (url "https://github.com/AnonymouX47/term-image")
38775 (commit (assoc-ref properties 'commit))))
38776 (file-name (git-file-name name version))
38777 (sha256
38778 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
38779 (build-system pyproject-build-system)
38780 (arguments
38781 (list
38782 #:test-flags
38783 #~(list "tests"
38784 ;; These tests require network access.
38785 "-k" (string-append "not test_from_url"
38786 " and not test_source"
38787 " and not test_close"))
38788 #:phases
38789 #~(modify-phases %standard-phases
38790 (add-after 'unpack 'bump-pillow-requirement
38791 (lambda _
38792 (substitute* "src/term_image/image/common.py"
38793 (("\\.getdata")
38794 ".get_flattened_data"))
38795 (let* ((major #$(version-major
38796 (package-version
38797 (this-package-input "python-pillow"))))
38798 (next (number->string (+ 1 (string->number major)))))
38799 (substitute* "pyproject.toml"
38800 (("pillow>=9.1,<12")
38801 (string-append "pillow>=9.1,<" next)))))))))
38802 (propagated-inputs (list python-pillow python-requests))
38803 (native-inputs
38804 (list python-pytest
38805 python-setuptools
38806 python-urwid))
38807 (home-page "https://github.com/AnonymouX47/term-image")
38808 (synopsis "Display images in the terminal")
38809 (description "term-image is a library and program to display images on
38810compatible terminals.
38811
38812Features:
38813@enumerate
38814@item Multiple image formats (basically all formats supported by
38815@code{PIL.Image.open()})
38816@item Multiple image source types: PIL image instance, local file, URL
38817@item Multiple image render styles (with automatic support detection)
38818@item Support for multiple terminal graphics protocols, including Kitty
38819@item Transparency support (with multiple options)
38820@item Animated image support (including transparent ones)
38821@item Integration into various TUI / terminal-based output libraries
38822@item Terminal size awareness
38823@item Automatic and manual image sizing
38824@item Horizontal and vertical alignment
38825@item Automatic and manual font ratio adjustment (to preserve image aspect
38826ratio)
38827@end enumerate")
38828 (license license:expat)))
38829
38830(define-public python-termcolor
38831 (package
38832 (name "python-termcolor")
38833 (version "2.5.0")
38834 (source
38835 (origin
38836 (method url-fetch)
38837 (uri (pypi-uri "termcolor" version))
38838 (sha256
38839 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
38840 (build-system pyproject-build-system)
38841 (arguments
38842 (list
38843 #:phases
38844 #~(modify-phases %standard-phases
38845 (add-after 'unpack 'relax-coverage-requirements
38846 (lambda _
38847 (substitute* "pyproject.toml"
38848 ((".*coverage.*") "")))))))
38849 (native-inputs
38850 (list python-hatch-vcs python-hatchling python-pytest))
38851 (home-page "https://pypi.org/project/termcolor/")
38852 (synopsis "ANSII Color formatting for terminal output")
38853 (description
38854 "This package provides ANSII Color formatting for output in terminals.")
38855 (license license:expat)))
38856
38857(define-public python-termcolor-1
38858 (package
38859 (inherit python-termcolor)
38860 (version "1.1.0")
38861 (source
38862 (origin
38863 (method url-fetch)
38864 (uri (pypi-uri "termcolor" version))
38865 (sha256
38866 (base32
38867 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
38868 ;; There are no tests
38869 (arguments (list #:tests? #false))
38870 (native-inputs
38871 (list python-setuptools
38872 python-wheel))))
38873
38874(define-public python-termcolor-next
38875 (package
38876 (inherit python-termcolor)
38877 (name "python-termcolor-next")
38878 (version "3.1.0")
38879 (source
38880 (origin
38881 (method url-fetch)
38882 (uri (pypi-uri "termcolor" version))
38883 (sha256
38884 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
38885 (arguments '())))
38886
38887(define-public python-terminaltables
38888 (package
38889 (name "python-terminaltables")
38890 (version "3.1.0")
38891 (source
38892 (origin
38893 (method git-fetch)
38894 (uri (git-reference
38895 (url "https://github.com/Robpol86/terminaltables")
38896 (commit (string-append "v" version))))
38897 (file-name (git-file-name name version))
38898 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
38899 (build-system pyproject-build-system)
38900 ;; XXX: A lot of test fail with flaky behavior.
38901 (arguments (list #:tests? #f))
38902 (native-inputs
38903 (list python-colorclass
38904 python-colorama
38905 python-pytest
38906 python-setuptools
38907 python-termcolor))
38908 (home-page "https://github.com/Robpol86/terminaltables")
38909 (synopsis
38910 "Generate simple tables in terminals from a nested list of strings")
38911 (description
38912 "This package makes it easy to draw tables in terminal/console
38913applications from a list of lists of strings. It supports multi-line rows.")
38914 (license license:expat)))
38915
38916(define-public python-termstyle
38917 (package
38918 (name "python-termstyle")
38919 (version "0.1.11")
38920 (source
38921 (origin
38922 (method url-fetch)
38923 (uri (pypi-uri "termstyle" version))
38924 (sha256
38925 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
38926 (build-system pyproject-build-system)
38927 (arguments
38928 (list #:test-backend #~'custom
38929 #:test-flags #~(list "test3.py")))
38930 (native-inputs
38931 (list python-setuptools))
38932 (home-page "https://github.com/gfxmonk/termstyle")
38933 (synopsis "Console text coloring for Python")
38934 (description "This package provides console text coloring for Python.")
38935 (license license:bsd-3)))
38936
38937(define-public python-text-unidecode
38938 (package
38939 (name "python-text-unidecode")
38940 (version "1.3")
38941 (source
38942 (origin
38943 (method url-fetch)
38944 (uri (pypi-uri "text-unidecode" version))
38945 (sha256
38946 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
38947 (build-system pyproject-build-system)
38948 (native-inputs
38949 (list python-pytest
38950 python-setuptools))
38951 (home-page "https://github.com/kmike/text-unidecode/")
38952 (synopsis "Decode Unicode data")
38953 (description
38954 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
38955Perl library. It can create ASCII representations of Unicode data. In general
38956users should prefer the @code{python-unidecode} package which offers better
38957memory usage and transliteration quality.")
38958 ;; The user can choose either license.
38959 (license (list license:clarified-artistic license:gpl2+))))
38960
38961(define-public python-textdistance
38962 (package
38963 (name "python-textdistance")
38964 (version "4.6.3")
38965 (source
38966 (origin
38967 (method git-fetch)
38968 (uri (git-reference
38969 (url "https://github.com/life4/textdistance")
38970 (commit version)))
38971 (file-name (git-file-name name version))
38972 (sha256
38973 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
38974 (build-system pyproject-build-system)
38975 ;; tests: 430 passed, 1446 warnings
38976 (native-inputs
38977 (list python-numpy
38978 python-pytest
38979 python-setuptools))
38980 (propagated-inputs
38981 (list python-jellyfish
38982 python-distance
38983 python-levenshtein
38984 python-pylev
38985 python-pyxdameraulevenshtein
38986 python-rapidfuzz))
38987 (home-page "https://github.com/life4/textdistance")
38988 (synopsis "Compute distance between the two texts")
38989 (description "@code{textdistance} is a pure Python library for comparing
38990distance between two or more sequences by many algorithms.")
38991 (license license:expat)))
38992
38993(define-public python-textparser
38994 (package
38995 (name "python-textparser")
38996 (version "0.24.0")
38997 (source
38998 (origin
38999 (method url-fetch)
39000 (uri (pypi-uri "textparser" version))
39001 (sha256
39002 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
39003 (build-system pyproject-build-system)
39004 (arguments
39005 (list #:test-backend #~'unittest))
39006 (native-inputs (list python-setuptools))
39007 (home-page "https://github.com/eerimoq/textparser")
39008 (synopsis "Fast text parser for Python")
39009 (description "This library provides a text parser written in the Python
39010language. It aims to be fast.")
39011 (license license:expat)))
39012
39013(define-public python-texttable
39014 (package
39015 (name "python-texttable")
39016 (version "1.7.0")
39017 (source
39018 (origin
39019 (method git-fetch)
39020 (uri (git-reference
39021 (url "https://github.com/foutaise/texttable/")
39022 (commit (string-append "v" version))))
39023 (file-name (git-file-name name version))
39024 (sha256
39025 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
39026 (build-system pyproject-build-system)
39027 (arguments (list #:test-flags #~(list "tests.py")))
39028 (native-inputs (list python-pytest python-setuptools))
39029 (home-page "https://github.com/foutaise/texttable/")
39030 (synopsis "Create simple ASCII tables in Python")
39031 (description
39032 "This package provides a Python module for creating simple ASCII
39033tables.")
39034 (license license:expat)))
39035
39036(define-public python-textual
39037 (package
39038 (name "python-textual")
39039 (version "7.4.0")
39040 (source
39041 (origin
39042 (method git-fetch)
39043 (uri (git-reference
39044 (url "https://github.com/Textualize/textual")
39045 (commit (string-append "v" version))))
39046 (file-name (git-file-name name version))
39047 (sha256
39048 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
39049 (build-system pyproject-build-system)
39050 (arguments
39051 (list
39052 #:test-flags
39053 ;; Snapshot tests require python-pytest-textual-snapshot which
39054 ;; in turn depends on python-textual.
39055 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
39056 "-k" (string-append
39057 ;; Broken for unknown reason.
39058 "not test_textual_env_var"
39059 ;; Tests that require python-treesitter-languages.
39060 " and not test_widget_construct"
39061 " and not test_setting_builtin_language_via_constructor"
39062 " and not test_setting_builtin_language_via_attribute"
39063 " and not test_setting_language_to_none"
39064 " and not test_setting_unknown_language"
39065 " and not test_register_language"
39066 " and not test_update_highlight_query"
39067 " and not test_default_theme"
39068 " and not test_setting_builtin_themes"
39069 " and not test_setting_unknown_theme_raises_exception"
39070 " and not test_registering_and_setting_theme"
39071 " and not test_progress_bar_width_1fr"))
39072 #:phases
39073 #~(modify-phases %standard-phases
39074 (add-after 'unpack 'relax-requirements
39075 (lambda _
39076 (substitute* "pyproject.toml"
39077 (("pygments =.*")
39078 "pygments = \"*\"\n")))))))
39079 (propagated-inputs
39080 (list python-markdown-it-py
39081 python-mdit-py-plugins
39082 python-platformdirs
39083 python-rich
39084 python-tree-sitter
39085 ;; python-tree-sitter-languages ; optional, not packed yet
39086 python-typing-extensions))
39087 (native-inputs
39088 (list python-poetry-core
39089 python-pytest
39090 python-pytest-asyncio
39091 python-pytest-xdist))
39092 (home-page "https://github.com/Textualize/textual")
39093 (synopsis "Build text user interfaces in Python")
39094 (description "Textual is a @acronym{TUI, Text User Interface} framework
39095for Python inspired by modern web development.")
39096 (license license:expat)))
39097
39098(define-public python-tftpy
39099 (package
39100 (name "python-tftpy")
39101 (version "0.8.6")
39102 (source
39103 (origin
39104 (method git-fetch)
39105 (uri (git-reference
39106 (url "https://github.com/msoulier/tftpy")
39107 (commit version)))
39108 (file-name (git-file-name name version))
39109 (sha256
39110 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
39111 (build-system pyproject-build-system)
39112 (arguments
39113 (list
39114 #:test-backend #~'unittest
39115 #:test-flags #~(list "tests/test.py")
39116 #:phases
39117 #~(modify-phases %standard-phases
39118 (add-before 'check 'configure-tests
39119 (lambda* (#:key tests? #:allow-other-keys)
39120 (when tests?
39121 ;; The default DEBUG logging level is way too verbose.
39122 (substitute* "tests/test.py"
39123 (("logging\\.DEBUG")
39124 "logging.INFO"))))))))
39125 (native-inputs (list python-setuptools))
39126 (home-page "https://tftpy.sourceforge.net/")
39127 (synopsis "Python trivial file transfer protocol (TFTP) library")
39128 (description
39129 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
39130be used to act both as a TFTP client or TFTP server.")
39131 (license license:expat)))
39132
39133(define-public python-thefuzz
39134 (package
39135 (name "python-thefuzz")
39136 (version "0.22.1")
39137 (source
39138 (origin
39139 (method git-fetch)
39140 (uri (git-reference
39141 (url "https://github.com/seatgeek/thefuzz")
39142 (commit version)))
39143 (file-name (git-file-name name version))
39144 (sha256
39145 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
39146 (build-system pyproject-build-system)
39147 (arguments
39148 (list #:test-flags #~'("-k" "not TestCodeFormat")
39149 #:phases #~(modify-phases %standard-phases
39150 ;; pycodestyle is only used in TestCodeFormat.
39151 (add-after 'unpack 'unrequire-pycodestyle
39152 (lambda _
39153 (substitute* "test_thefuzz.py"
39154 (("import pycodestyle.*") "")))))))
39155 (propagated-inputs (list python-rapidfuzz))
39156 (native-inputs (list python-hypothesis
39157 python-pytest
39158 python-setuptools))
39159 (home-page "https://github.com/seatgeek/thefuzz")
39160 (synopsis "Fuzzy string matching in Python")
39161 (description
39162 "This Python package implements fuzzing string matching
39163using Levenshtein distance.")
39164 (license license:expat)))
39165
39166(define-public python-three-merge
39167 (package
39168 (name "python-three-merge")
39169 (version "0.1.1")
39170 (source
39171 (origin
39172 ;; There are no tests in the PyPI tarball.
39173 (method git-fetch)
39174 (uri (git-reference
39175 (url "https://github.com/spyder-ide/three-merge")
39176 (commit (string-append "v" version))))
39177 (file-name (git-file-name name version))
39178 (sha256
39179 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
39180 (build-system pyproject-build-system)
39181 (propagated-inputs
39182 (list python-diff-match-patch))
39183 (native-inputs
39184 (list python-pytest python-setuptools python-wheel))
39185 (home-page "https://github.com/spyder-ide/three-merge")
39186 (synopsis "Library for merging two strings with respect to a base one")
39187 (description
39188 "This package provides a Python library to perform a 3-way merge between
39189strings, based on @code{diff-match-patch}. This library performs merges at a
39190character level, as opposed to most VCS systems, which opt for a line-based
39191approach.")
39192 (license license:expat)))
39193
39194(define-public python-throttler
39195 (package
39196 (name "python-throttler")
39197 (version "1.2.2")
39198 (source
39199 (origin
39200 (method git-fetch)
39201 (uri (git-reference
39202 (url "https://github.com/uburuntu/throttler")
39203 (commit (string-append "v" version))))
39204 (sha256
39205 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
39206 (build-system pyproject-build-system)
39207 (native-inputs
39208 (list python-aiohttp
39209 python-codecov
39210 python-flake8
39211 python-pytest
39212 python-pytest-asyncio
39213 python-setuptools
39214 python-wheel))
39215 (home-page "https://github.com/uburuntu/throttler")
39216 (synopsis "Throttling with asyncio support")
39217 (description
39218 "This is a Python package for easy throttling with asyncio support.")
39219 (license license:expat)))
39220
39221(define-public python-tifffile
39222 (package
39223 (name "python-tifffile")
39224 (version "2025.10.4")
39225 (source
39226 (origin
39227 (method url-fetch)
39228 (uri (pypi-uri "tifffile" version))
39229 (sha256
39230 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
39231 (build-system pyproject-build-system)
39232 ;; Tests require lfdfiles, which depends on tifffile
39233 (arguments (list #:tests? #f))
39234 (propagated-inputs
39235 (list python-numpy))
39236 (native-inputs
39237 (list python-setuptools))
39238 (home-page "https://www.lfd.uci.edu/~gohlke/")
39239 (synopsis "Read and write TIFF(r) files")
39240 (description
39241 "This package lets you read image and metadata from many bio-scientific
39242formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
39243MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
39244to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
39245 (license license:bsd-3)))
39246
39247(define-public python-tiktoken
39248 (package
39249 (name "python-tiktoken")
39250 (version "0.9.0")
39251 (source
39252 (origin
39253 (method url-fetch)
39254 (uri (pypi-uri "tiktoken" version))
39255 (sha256
39256 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
39257 (build-system cargo-build-system)
39258 (arguments
39259 (list
39260 #:install-source? #false
39261 #:imported-modules
39262 (append %pyproject-build-system-modules
39263 %cargo-build-system-modules)
39264 #:modules
39265 '((guix build cargo-build-system)
39266 ((guix build pyproject-build-system) #:prefix py:)
39267 (guix build utils))
39268 #:phases
39269 #~(modify-phases %standard-phases
39270 (replace 'build
39271 (assoc-ref py:%standard-phases 'build))
39272 (add-after 'install 'wrap
39273 (lambda _
39274 ;; Collection of python- and pyproject-build-system phases
39275 ;; between 'install and 'check.
39276 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
39277 (assoc-ref py:%standard-phases 'add-install-to-path)
39278 (assoc-ref py:%standard-phases 'wrap)
39279 (assoc-ref py:%standard-phases 'create-entrypoints)
39280 (assoc-ref py:%standard-phases 'compile-bytecode)))
39281 (replace 'install
39282 (assoc-ref py:%standard-phases 'install)))))
39283 (propagated-inputs (list python-regex python-requests))
39284 (inputs (cargo-inputs 'python-tiktoken))
39285 (native-inputs
39286 (list python-setuptools
39287 python-setuptools-rust
39288 python-wheel
39289 python-wrapper))
39290 (home-page "https://github.com/openai/tiktoken/")
39291 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
39292 (description
39293 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
39294@code{OpenAI's} models.")
39295 (license license:expat)))
39296
39297(define-public python-timeout-decorator
39298 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
39299 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
39300 (package
39301 (name "python-timeout-decorator")
39302 (version "0.5.0")
39303 (source
39304 (origin
39305 (method url-fetch)
39306 (uri (pypi-uri "timeout-decorator" version))
39307 (sha256
39308 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
39309 (build-system pyproject-build-system)
39310 (arguments (list #:tests? #f))
39311 (native-inputs (list python-setuptools python-wheel))
39312 (home-page "https://github.com/pnpnpn/timeout-decorator")
39313 (synopsis "Timeout decorator")
39314 (description "This package provides a decorator that raises an error
39315when an operation takes longer than expected.")
39316 (license license:expat)))
39317
39318(define-public python-titlecase
39319 (package
39320 (name "python-titlecase")
39321 (version "2.4.1")
39322 (source
39323 (origin
39324 (method url-fetch)
39325 (uri (pypi-uri "titlecase" version))
39326 (sha256
39327 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
39328 (build-system pyproject-build-system)
39329 (arguments
39330 (list
39331 #:test-backend #~'unittest))
39332 (native-inputs
39333 (list python-setuptools))
39334 (home-page "https://github.com/ppannuto/python-titlecase")
39335 (synopsis "Capitalize strings similar to book titles")
39336 (description
39337 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
39338It capitalizes (predominantly English) strings in a way that is similar to
39339book titles, using the New York Times Manual of Style to leave certain words
39340lowercase.")
39341 (license license:expat)))
39342
39343(define-public python-tlsh
39344 (package
39345 (name "python-tlsh")
39346 (version "4.11.2")
39347 (home-page "https://github.com/trendmicro/tlsh")
39348 (source
39349 (origin
39350 (method git-fetch)
39351 (uri (git-reference (url home-page) (commit version)))
39352 (file-name (git-file-name name version))
39353 (sha256
39354 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
39355 (build-system pyproject-build-system)
39356 (arguments
39357 (list
39358 #:phases
39359 #~(modify-phases %standard-phases
39360 (add-before 'build 'configure
39361 (lambda _
39362 (invoke "cmake" "."))) ;to generate tlsh_version.h
39363 (add-after 'configure 'chdir
39364 (lambda _
39365 (chdir "py_ext")))
39366 (replace 'check
39367 (lambda* (#:key tests? #:allow-other-keys)
39368 (when tests?
39369 (with-directory-excursion "../Testing"
39370 (invoke "./python_test.sh"))))))))
39371 (native-inputs (list cmake-minimal python-setuptools))
39372 (synopsis "Fuzzy matching library for Python")
39373 (description
39374 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
39375Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
39376value which can be used for similarity comparisons. Similar objects have
39377similar hash values, which allows for the detection of similar objects by
39378comparing their hash values. The byte stream should have a sufficient amount
39379of complexity; for example, a byte stream of identical bytes will not generate
39380a hash value.")
39381 (license license:asl2.0)))
39382
39383(define-public python-tlv8
39384 (package
39385 (name "python-tlv8")
39386 (version "0.10.0")
39387 (source
39388 (origin
39389 (method git-fetch)
39390 (uri (git-reference
39391 (url "https://github.com/jlusiardi/tlv8_python")
39392 (commit (string-append "v" version))))
39393 (file-name (git-file-name name version))
39394 (sha256
39395 (base32 "0q25y5lz7cigfk7l30rdm2z8as8662pzd8ki5vvs1c0saqq72zhv"))))
39396 (build-system pyproject-build-system)
39397 (native-inputs (list python-setuptools python-pytest))
39398 (home-page "https://github.com/jlusiardi/tlv8_python")
39399 (synopsis
39400 "Python library for @acronym{TLV, type-length-value} encoded data")
39401 (description
39402 "Python library for @acronym{TLV, type-length-value} encoding and decoding.
39403Represents type and length by one byte each, hence the name @code{tlv8}.")
39404 (license license:asl2.0)))
39405
39406(define-public python-tokenize-rt
39407 (package
39408 (name "python-tokenize-rt")
39409 (version "6.2.0")
39410 (source
39411 (origin
39412 (method git-fetch)
39413 (uri (git-reference
39414 (url "https://github.com/asottile/tokenize-rt")
39415 (commit (string-append "v" version))))
39416 (file-name (git-file-name name version))
39417 (sha256
39418 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
39419 (build-system pyproject-build-system)
39420 (native-inputs (list python-pytest python-setuptools))
39421 (home-page "https://github.com/asottile/tokenize-rt")
39422 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
39423 (description
39424 "This Python library is a wrapper around @code{tokenize} from the Python
39425standard library. It provides two additional tokens @code{ESCAPED_NL} and
39426@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
39427and @code{tokens_to_src} to roundtrip.")
39428 (license license:expat)))
39429
39430(define-public python-tomlkit
39431 (package
39432 (name "python-tomlkit")
39433 (version "0.13.3")
39434 (source
39435 (origin
39436 (method url-fetch)
39437 (uri (pypi-uri "tomlkit" version))
39438 (sha256
39439 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
39440 (build-system pyproject-build-system)
39441 (native-inputs
39442 (list python-poetry-core
39443 python-pytest
39444 python-pyyaml))
39445 (home-page "https://github.com/sdispater/tomlkit")
39446 (synopsis "Style-preserving TOML library")
39447 (description
39448 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
39449preserves all comments, indentations, whitespace and internal element ordering,
39450and makes them accessible and editable via an intuitive API. It can also
39451create new TOML documents from scratch using the provided helpers. Part of the
39452implementation has been adapted, improved, and fixed from Molten.")
39453 (license license:expat)))
39454
39455(define-public python-toolrack
39456 (package
39457 (name "python-toolrack")
39458 (version "4.0.3")
39459 (source
39460 (origin
39461 (method git-fetch)
39462 (uri (git-reference
39463 (url "https://github.com/albertodonato/toolrack")
39464 (commit (string-append "v" version))))
39465 (file-name (git-file-name name version))
39466 (sha256
39467 (base32
39468 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
39469 (build-system pyproject-build-system)
39470 (arguments
39471 (list
39472 #:phases
39473 #~(modify-phases %standard-phases
39474 (add-after 'unpack 'patch-/bin/sh
39475 (lambda _
39476 (substitute* "tests/aio/process_test.py"
39477 (("/bin/sh")
39478 (which "sh"))))))))
39479 (native-inputs
39480 (list python-pytest
39481 python-pytest-asyncio
39482 python-pytest-mock
39483 python-setuptools))
39484 (home-page "https://github.com/albertodonato/toolrack")
39485 (synopsis "Collection of Python utility functions and classes")
39486 (description "This package provides a collection of miscellaneous utility
39487functions and classes.")
39488 (license license:lgpl3+)))
39489
39490(define-public python-toolshed
39491 (package
39492 (name "python-toolshed")
39493 (version "0.4.8")
39494 (source
39495 (origin
39496 (method git-fetch)
39497 (uri (git-reference
39498 (url "https://github.com/brentp/toolshed")
39499 (commit (string-append "v" version))))
39500 (file-name (git-file-name name version))
39501 (sha256
39502 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
39503 (build-system pyproject-build-system)
39504 (native-inputs
39505 (list python-pytest
39506 python-setuptools))
39507 (home-page "https://github.com/brentp/toolshed/")
39508 (synopsis "Collection of modules and functions for working with data")
39509 (description "This is a collection of well-tested, simple modules and
39510functions that aim to reduce boilerplate when working with data.")
39511 (license license:bsd-2)))
39512
39513(define-public python-toolz
39514 (package
39515 (name "python-toolz")
39516 (version "1.1.0")
39517 (source
39518 (origin
39519 (method git-fetch)
39520 (uri (git-reference
39521 (url "https://github.com/pytoolz/toolz")
39522 (commit version)))
39523 (file-name (git-file-name name version))
39524 (sha256
39525 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
39526 (build-system pyproject-build-system)
39527 (arguments
39528 (list
39529 #:phases
39530 #~(modify-phases %standard-phases
39531 (add-after 'unpack 'set-version
39532 (lambda _
39533 (substitute* "pyproject.toml"
39534 (("\\[tool.setuptools-git-versioning\\]" all)
39535 (string-append "[tool.setuptools_scm]\n"
39536 "write_to = \"toolz/_version.py\"\n"
39537 all))))))))
39538 (native-inputs
39539 (list python-pytest
39540 python-setuptools
39541 ;; Project expects setuptools-git-versioning to build version, but
39542 ;; it does not support envar override as seuptools-scm.
39543 python-setuptools-scm))
39544 (home-page "https://github.com/pytoolz/toolz/")
39545 (synopsis "List processing tools and functional utilities")
39546 (description
39547 "This package provides a set of utility functions for iterators,
39548functions, and dictionaries.")
39549 (license license:bsd-3)))
39550
39551(define-public python-toposort
39552 (package
39553 (name "python-toposort")
39554 (version "1.10")
39555 (source
39556 (origin
39557 (method url-fetch)
39558 (uri (pypi-uri "toposort" version))
39559 (sha256
39560 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
39561 (build-system pyproject-build-system)
39562 (arguments
39563 (list #:test-backend #~'custom
39564 #:test-flags #~(list "-m" "test.test_toposort")))
39565 (native-inputs (list python-setuptools))
39566 (home-page "https://gitlab.com/ericvsmith/toposort")
39567 (synopsis "Topological sort algorithm")
39568 (description
39569 "This package provides an implementation of a topological sort
39570algorithm.")
39571 (license license:asl2.0)))
39572
39573(define-public python-towncrier
39574 (package
39575 (name "python-towncrier")
39576 (version "25.8.0")
39577 (source
39578 (origin
39579 (method url-fetch)
39580 (uri (pypi-uri "towncrier" version))
39581 (sha256
39582 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
39583 (build-system pyproject-build-system)
39584 (native-inputs
39585 (list git-minimal/pinned ;tests create git repositories
39586 python-hatchling
39587 python-pytest
39588 python-twisted))
39589 (propagated-inputs
39590 (list python-click
39591 python-jinja2))
39592 (home-page "https://towncrier.readthedocs.io/en/stable/")
39593 (synopsis "Manage release notes")
39594 (description
39595 "@code{towncrier} is a utility to produce useful, summarized news files
39596 (also known as changelogs) for a project.")
39597 (license license:expat)))
39598
39599(define-public python-tqdm
39600 (package
39601 (name "python-tqdm")
39602 (version "4.67.1")
39603 (source
39604 (origin
39605 (method url-fetch)
39606 (uri (pypi-uri "tqdm" version))
39607 (sha256
39608 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
39609 (build-system pyproject-build-system)
39610 (arguments
39611 (list #:test-flags
39612 '(list "-o" "asyncio_mode=auto"
39613 "-k" "not perf and not test_rlock_creation")))
39614 (native-inputs
39615 (list python-pytest
39616 python-pytest-asyncio
39617 python-pytest-timeout
39618 python-setuptools
39619 python-setuptools-scm
39620 python-toml
39621 python-wheel))
39622 (home-page "https://github.com/tqdm/tqdm")
39623 (synopsis "Fast, extensible progress meter")
39624 (description
39625 "Make loops show a progress bar on the console by just wrapping any
39626iterable with @code{|tqdm(iterable)|}. Offers many options to define
39627design and layout.")
39628 (license (list license:mpl2.0 license:expat))))
39629
39630(define-public python-traitlets
39631 (package
39632 (name "python-traitlets")
39633 (version "5.14.3")
39634 (source
39635 (origin
39636 (method url-fetch)
39637 (uri (pypi-uri "traitlets" version))
39638 (sha256
39639 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
39640 (build-system pyproject-build-system)
39641 ;; tests: 566 passed, 3 skipped, 1 warning
39642 (native-inputs
39643 (list python-hatchling
39644 python-pytest))
39645 (home-page "https://ipython.org")
39646 (synopsis "Configuration system for Python applications")
39647 (description
39648 "Traitlets is a framework that lets Python classes have attributes with
39649type checking, dynamically calculated default values, and ‘on change’
39650callbacks. The package also includes a mechanism to use traitlets for
39651configuration, loading values from files or from command line arguments. This
39652is a distinct layer on top of traitlets, so you can use traitlets in your code
39653without using the configuration machinery.")
39654 (license license:bsd-3)))
39655
39656(define-public python-translate-toolkit
39657 (package
39658 (name "python-translate-toolkit")
39659 (version "3.15.6")
39660 (source
39661 (origin
39662 (method url-fetch)
39663 (uri (pypi-uri "translate_toolkit" version))
39664 (sha256
39665 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
39666 (build-system pyproject-build-system)
39667 (arguments
39668 (list
39669 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
39670 #:test-flags
39671 ;; TODO: Some of the optional inputs are not packaged yet.
39672 #~(list #$@(map (lambda (file) (string-append "--ignore="
39673 "tests/translate/"
39674 file))
39675 (list "convert/test_ini2po.py"
39676 "convert/test_php2po.py"
39677 "convert/test_po2ini.py"
39678 "convert/test_po2php.py"
39679 "storage/test_cpo.py"
39680 "storage/test_fluent.py"
39681 "storage/test_ini.py"
39682 "storage/test_php.py"
39683 "storage/test_po.py"
39684 "storage/test_pypo.py"
39685 "storage/test_subtitles.py"))
39686 #$@(map (lambda (test) (string-append "--deselect="
39687 "tests/translate/storage/"
39688 test))
39689 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
39690 ;; 0xff in position 0: invalid start byte
39691 (list "test_csvl10n.py::TestCSV::test_encoding_save"
39692 ;; FileNotFoundError: [Errno 2] No such file or
39693 ;; directory: 'msgfmt'
39694 "test_mo.py::TestMOFile::test_output"
39695 ;; assert 0 == -16200
39696 "test_poheader.py::test_timezones"))
39697 #$@(map (lambda (test) (string-append "--deselect="
39698 "tests/translate/tools/"
39699 test))
39700 ;; XXX: Some issues with XML parsing.
39701 (list "test_junitmsgfmt.py::test_output"
39702 "test_pocount.py::test_output"
39703 "test_pocount.py::test_cases"))
39704 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
39705 (native-inputs
39706 (list python-pytest
39707 python-setuptools
39708 python-setuptools-scm))
39709 (propagated-inputs
39710 (list python-cwcwidth
39711 python-cheroot
39712 ;; python-aeidon
39713 ;; python-fluent
39714 python-iniparse
39715 python-lxml
39716 python-mistletoe
39717 python-phply
39718 python-pyparsing
39719 python-ruamel.yaml
39720 python-vobject))
39721 (home-page "https://toolkit.translatehouse.org")
39722 (synopsis "Tools and API for translation and localization engineering")
39723 (description
39724 "Tools and API for translation and localization engineering. It contains
39725several utilities, as well as an API for building localization tools.")
39726 (license license:gpl2+)))
39727
39728;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
39729(define-public python-translate-toolkit-for-offlate
39730 (hidden-package
39731 (package
39732 (inherit python-translate-toolkit)
39733 (version "3.6.2")
39734 (source
39735 (origin
39736 (method url-fetch)
39737 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
39738 (sha256
39739 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
39740 (arguments
39741 (list #:tests? #f)))))
39742
39743(define-public python-translitcodec
39744 (package
39745 (name "python-translitcodec")
39746 (version "0.7.0")
39747 (source
39748 (origin
39749 (method git-fetch)
39750 (uri (git-reference
39751 (url "https://github.com/claudep/translitcodec")
39752 (commit (string-append "version-" version))))
39753 (file-name (git-file-name name version))
39754 (sha256
39755 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
39756 (build-system pyproject-build-system)
39757 (native-inputs (list python-pytest python-setuptools))
39758 (home-page "https://github.com/claudep/translitcodec")
39759 (synopsis "Unicode to 8-bit charset transliteration codec")
39760 (description
39761 "This package contains codecs for transliterating ISO 10646 texts into
39762best-effort representations using smaller coded character sets (ASCII,
39763ISO 8859, etc.).")
39764 (license license:expat)))
39765
39766(define-public python-treelib
39767 (package
39768 (name "python-treelib")
39769 (version "1.8.0")
39770 (source
39771 (origin
39772 (method git-fetch)
39773 (uri (git-reference
39774 (url "https://github.com/caesar0301/treelib")
39775 (commit (string-append "v" version))))
39776 (file-name (git-file-name name version))
39777 (sha256
39778 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
39779 (patches
39780 (search-patches "python-treelib-remove-python2-compat.patch"))))
39781 (build-system pyproject-build-system)
39782 (native-inputs (list python-poetry-core python-pytest))
39783 (home-page "https://github.com/caesar0301/treelib")
39784 (synopsis "Implementation of a tree structure in Python")
39785 (description
39786 "This package provides a Python implementation of a tree structure.")
39787 (license license:asl2.0)))
39788
39789(define-public python-trio
39790 (package
39791 (name "python-trio")
39792 (version "0.32.0")
39793 (source
39794 (origin
39795 (method url-fetch)
39796 (uri (pypi-uri "trio" version))
39797 (sha256
39798 (base32 "0sw04md83splkb0x37bmd1yj8rbf033p2k0x3qim3k9vjbn2j3qm"))))
39799 (build-system pyproject-build-system)
39800 (arguments
39801 (list
39802 #:test-flags
39803 #~(list
39804 #$@(if (package? (this-package-native-input "python-trustme"))
39805 #~()
39806 #~("--ignore=src/trio/_tests/test_dtls.py"
39807 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
39808 "--ignore=src/trio/_tests/test_ssl.py"))
39809 ;; Skip tests for the upstream repository's tooling.
39810 "--ignore=src/trio/_tests/tools"
39811 "-k" (string-join
39812 (list
39813 ;; Keyboard interrupts misbehave in the build sandbox.
39814 "not test_ki_in_repl"
39815 "test_KI_interrupts"
39816 "test_run_in_trio_thread_ki"
39817 ;; Somehow f'{check_errno_is_5!r}' evaluates
39818 ;; to "'check_errno_is_5'" instead of "<function ...>",
39819 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
39820 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
39821 ;; will probably be removed in version 0.35.
39822 "test_Matcher_check"
39823 "test_matcher_tostring"
39824 "test_raisesgroup_tostring"
39825 ;; Failure in name resolution.
39826 "test_SocketType_resolve"
39827 ;; OSError: protocol not found.
39828 "test_getprotobyname")
39829 " and not ")
39830 "src/trio/_tests")
39831 #:phases
39832 #~(modify-phases %standard-phases
39833 (add-after 'unpack 'patch-pthread-path
39834 (lambda* (#:key inputs #:allow-other-keys)
39835 (substitute* '("src/trio/_core/_thread_cache.py"
39836 "src/trio/_tests/test_threads.py")
39837 (("ctypes.util.find_library\\(\"pthread\"\\)")
39838 (simple-format #f "~s"
39839 (search-input-file inputs "lib/libpthread.so.0"))))))
39840 (add-before 'check 'set-env
39841 (lambda _
39842 ;; Tests require a writable home.
39843 (setenv "HOME" "/tmp"))))))
39844 (native-inputs
39845 (append
39846 (if (supported-package? python-pyopenssl)
39847 (list python-pyopenssl)
39848 '())
39849 (if (supported-package? python-trustme)
39850 (list python-trustme)
39851 '())
39852 (list python-async-generator)
39853 (if (supported-package? python-cryptography)
39854 (list python-cryptography)
39855 '())
39856 (list python-jedi
39857 python-pylint
39858 python-pytest
39859 python-setuptools)))
39860 (propagated-inputs
39861 (list python-attrs
39862 python-idna
39863 python-outcome
39864 python-sniffio
39865 python-sortedcontainers))
39866 (home-page "https://trio.readthedocs.io")
39867 (synopsis "Friendly Python library for async concurrency and I/O")
39868 (description
39869 "Trio strives to be a production-quality, async/await-native I/O library
39870for Python. Like all async libraries, its main purpose is to help you write
39871programs that do multiple things at the same time with parallelized I/O.")
39872 ;; Either license applies.
39873 (license (list license:expat license:asl2.0))))
39874
39875(define-public python-trio-typing
39876 (package
39877 (name "python-trio-typing")
39878 (version "0.10.0")
39879 (source
39880 (origin
39881 (method url-fetch)
39882 (uri (pypi-uri "trio-typing" version))
39883 (sha256
39884 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
39885 (build-system pyproject-build-system)
39886 (native-inputs (list python-pytest python-setuptools python-wheel))
39887 (propagated-inputs
39888 (list python-async-generator
39889 python-importlib-metadata
39890 python-mypy-extensions
39891 python-packaging
39892 python-trio
39893 python-typing-extensions))
39894 (home-page "https://github.com/python-trio/trio-typing")
39895 (synopsis "Static type checking support for Trio and related projects")
39896 (description
39897 "This package provides:
39898
39899@itemize
39900@item PEP 561 typing stubs packages for the Trio project packages:
39901
39902@itemize
39903@item trio (@code{trio-stubs})
39904@item outcome (@code{outcome-stubs})
39905@item async_generator (@code{async_generator-stubs})
39906@end itemize
39907
39908@item A package @code{trio_typing} containing types that Trio programs often
39909want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
39910a mypy plugin that smooths over some limitations in the basic type hints.
39911@end itemize")
39912 ;; Either license applies.
39913 (license (list license:expat license:asl2.0))))
39914
39915(define-public python-trubar
39916 (package
39917 (name "python-trubar")
39918 (version "0.3.4")
39919 (source
39920 (origin
39921 (method url-fetch)
39922 (uri (pypi-uri "trubar" version))
39923 (sha256
39924 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
39925 (build-system pyproject-build-system)
39926 (arguments
39927 (list
39928 #:test-flags
39929 #~(list "-k" (string-join
39930 ;; AttributeError: module 'libcst' has no attribute
39931 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
39932 (list "not test_import_from_future"
39933 "test_inport_after_docstring"
39934 ;; AssertionError: Items in the second set but not
39935 ;; the first
39936 "test_walk_files")
39937 " and not "))))
39938 (native-inputs
39939 (list python-pytest
39940 python-setuptools
39941 python-wheel))
39942 (propagated-inputs
39943 (list python-libcst
39944 python-pyyaml))
39945 (home-page "https://github.com/janezd/trubar")
39946 (synopsis "Utility for translation of Python sources")
39947 (description
39948 "This package provides a tool for translation and localization of Python
39949programs via modification of source files. Trubar supports f-strings and does
39950not require any changes to the original source code, such as marking strings
39951for translation.")
39952 (license license:expat)))
39953
39954(define-public python-twine
39955 (package
39956 (name "python-twine")
39957 (version "6.2.0")
39958 (source
39959 (origin
39960 (method url-fetch)
39961 (uri (pypi-uri "twine" version))
39962 (sha256
39963 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
39964 (build-system pyproject-build-system)
39965 (arguments
39966 (list
39967 ;; tests: 228 passed, 1 deselected
39968 #:test-flags
39969 ;; Assertion is not equal for one tests.
39970 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
39971 (native-inputs
39972 (list python-pretend
39973 python-pytest
39974 python-pytest-socket
39975 python-setuptools
39976 python-setuptools-scm))
39977 (propagated-inputs
39978 (list python-id
39979 python-keyring
39980 python-packaging
39981 python-readme-renderer
39982 python-requests
39983 python-requests-toolbelt
39984 python-rfc3986
39985 python-rich
39986 python-urllib3))
39987 (home-page "https://github.com/pypa/twine")
39988 (synopsis "Collection of utilities for interacting with PyPI")
39989 (description
39990 "@code{twine} currently supports registering projects and uploading
39991distributions. It authenticates the user over HTTPS, allows them to pre-sign
39992their files and supports any packaging format (including wheels).")
39993 (license license:asl2.0)))
39994
39995(define-public python-twisted
39996 (package
39997 (name "python-twisted")
39998 (version "25.5.0")
39999 (source
40000 (origin
40001 (method git-fetch)
40002 (uri (git-reference
40003 (url "https://github.com/twisted/twisted")
40004 (commit (string-append "twisted-" version))))
40005 (file-name (git-file-name name version))
40006 (sha256
40007 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
40008 (build-system pyproject-build-system)
40009 (arguments
40010 (list
40011 ;; tests: skips=638, successes=9759
40012 #:test-backend #~'custom
40013 #:test-flags
40014 #~(list "-m" "twisted.trial"
40015 "--temp-directory=/tmp/_trial_temp"
40016 (string-append "-j" (number->string (min 8 (parallel-job-count))))
40017 "twisted")
40018 #:phases
40019 #~(modify-phases %standard-phases
40020 (add-after 'unpack 'disable-broken-tests
40021 (lambda _
40022 (for-each delete-file
40023 (list
40024 ;; No idea why they fail
40025 "src/twisted/test/test_log.py"
40026 ;; Network tests
40027 "src/twisted/conch/test/test_cftp.py"
40028 "src/twisted/internet/test/test_endpoints.py"
40029 "src/twisted/protocols/test/test_tls.py"
40030 "src/twisted/test/test_sslverify.py"
40031 "src/twisted/web/test/test_agent.py"
40032 "src/twisted/web/test/test_tap.py"
40033 ;; These need a git executable
40034 "src/twisted/python/test/test_release.py"
40035 ;; These leave behind a socket file, which breaks the
40036 ;; build with "...has an unsupported type"
40037 "src/twisted/internet/test/test_unix.py"
40038 "src/twisted/test/test_unix.py"
40039 ;; These complain about missing test modules.
40040 "src/twisted/test/test_failure.py"
40041 "src/twisted/web/test/test_http2.py"
40042 "src/twisted/conch/test/test_forwarding.py")))))))
40043 (propagated-inputs
40044 (list python-attrs
40045 python-automat
40046 python-bcrypt
40047 python-constantly
40048 python-hyperlink
40049 python-incremental
40050 python-typing-extensions
40051 python-zope-interface
40052 ;; [conch]
40053 (list python "tk")
40054 python-appdirs
40055 python-bcrypt
40056 python-cryptography
40057 ;; [http2]
40058 python-h2
40059 python-priority
40060 ;; [tls]
40061 python-idna
40062 python-pyopenssl
40063 python-service-identity
40064 ;; [serial]
40065 python-pyserial))
40066 (native-inputs
40067 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
40068 python-hatch-fancy-pypi-readme
40069 python-hatchling
40070 python-httpx
40071 python-hypothesis
40072 python-incremental
40073 python-pyhamcrest
40074 python-pytest))
40075 (home-page "https://twistedmatrix.com/")
40076 (synopsis "Asynchronous networking framework written in Python")
40077 (description
40078 "Twisted is an extensible framework for Python programming, with special
40079focus on event-based network programming and multiprotocol integration.")
40080 (license license:expat)))
40081
40082(define-public python-txredisapi
40083 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
40084 ;; The latest version is 1.4.11, but it contains a bug:
40085 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
40086 ;; patched in commit d2259a3.
40087 (revision "0"))
40088 (package
40089 (name "python-txredisapi")
40090 (version (git-version "1.4.11" revision commit))
40091 (source
40092 (origin
40093 (method git-fetch)
40094 ;; The source distribution on PyPi is missing test files:
40095 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
40096 (uri (git-reference
40097 (url "https://github.com/IlyaSkriblovsky/txredisapi")
40098 (commit commit)))
40099 (file-name (git-file-name name version))
40100 (sha256
40101 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
40102 (build-system pyproject-build-system)
40103 (arguments
40104 (list #:test-backend #~'custom
40105 #:test-flags #~(list "-m" "twisted.trial" "tests")
40106 #:phases
40107 #~(modify-phases %standard-phases
40108 ;; The tests require a running Redis server.
40109 (add-before 'check 'start-redis
40110 (lambda _
40111 (invoke "redis-server" "--daemonize" "yes"))))))
40112 (propagated-inputs (list python-twisted))
40113 (native-inputs (list python-mock python-setuptools redis))
40114 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
40115 (synopsis "Non-blocking Redis client for Python")
40116 (description "txredisapi is a non-blocking client driver for the Redis
40117database, written in Python. It uses Twisted for asynchronous communication
40118with Redis.")
40119 (license license:asl2.0))))
40120
40121(define-public python-typeapi
40122 (package
40123 (name "python-typeapi")
40124 (version "2.2.4")
40125 (source
40126 (origin
40127 (method url-fetch)
40128 (uri (pypi-uri "typeapi" version))
40129 (sha256
40130 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
40131 (build-system pyproject-build-system)
40132 (arguments
40133 (list
40134 #:tests? #false)) ;there are none
40135 (propagated-inputs (list python-typing-extensions))
40136 (native-inputs (list python-hatchling))
40137 (home-page "https://pypi.org/project/typeapi/")
40138 (synopsis "Type hints")
40139 (description "The typeapi package provides an object-oriented interface
40140for introspecting PEP484 type hints at runtime, including forward references
40141that make use of the more recent PEP585 and PEP604 type hint features in
40142Python versions that don't natively support them.")
40143 (license license:expat)))
40144
40145(define-public python-typer
40146 (package
40147 (name "python-typer")
40148 (version "0.22.0")
40149 (source
40150 (origin
40151 (method git-fetch)
40152 (uri (git-reference
40153 (url "https://github.com/fastapi/typer")
40154 (commit version)))
40155 (file-name (git-file-name name version))
40156 (sha256
40157 (base32 "17gxqqiafrp5dvqfm6k39zbanvnwb8b9kr7dvnkah17js0rfy1sz"))))
40158 (build-system pyproject-build-system)
40159 (arguments
40160 (list
40161 #:phases
40162 #~(modify-phases %standard-phases
40163 (add-before 'check 'pre-check
40164 (lambda _
40165 (setenv "HOME" "/tmp"))))
40166 #:test-flags
40167 #~(list "-k" "not test_cli"
40168 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
40169 (native-inputs
40170 (list python-coverage ;this is required in tests
40171 python-pdm-backend
40172 python-pytest
40173 python-pytest-xdist))
40174 (propagated-inputs
40175 (list python-click
40176 python-typing-extensions
40177 python-annotated-doc
40178 ;; [optional]
40179 python-rich
40180 python-shellingham))
40181 (home-page "https://github.com/fastapi/typer")
40182 (synopsis "Typer builds CLI based on Python type hints")
40183 (description
40184 "Typer is a library for building CLI applications. It's based on Python
401853.6+ type hints.")
40186 (license license:expat)))
40187
40188(define-public python-types-aiofiles
40189 (package
40190 (name "python-types-aiofiles")
40191 (version "25.1.0.20251011")
40192 (source
40193 (origin
40194 (method url-fetch)
40195 (uri (pypi-uri "types_aiofiles" version))
40196 (sha256
40197 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
40198 (build-system pyproject-build-system)
40199 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40200 (native-inputs (list python-setuptools))
40201 (home-page "https://github.com/python/typeshed")
40202 (synopsis "Typing stubs for python-aiofiles")
40203 (description "This package providis typing stubs for python-aiofiles.")
40204 (license license:asl2.0)))
40205
40206(define-public python-types-colorama
40207 (package
40208 (name "python-types-colorama")
40209 (version "0.4.15.20250801")
40210 (source
40211 (origin
40212 (method url-fetch)
40213 (uri (pypi-uri "types_colorama" version))
40214 (sha256
40215 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
40216 (build-system pyproject-build-system)
40217 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40218 (native-inputs
40219 (list python-setuptools))
40220 (home-page "https://github.com/python/typeshed")
40221 (synopsis "Typing stubs for colorama")
40222 (description "This package provides typing stubs for colorama.")
40223 (license license:asl2.0)))
40224
40225(define-public python-types-dataclasses
40226 (package
40227 (name "python-types-dataclasses")
40228 (version "0.6.6")
40229 (source
40230 (origin
40231 (method url-fetch)
40232 (uri (pypi-uri "types-dataclasses" version))
40233 (sha256
40234 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
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 dataclasses")
40240 (description
40241 "This package provides a collection of library stubs for Python, with
40242static types.")
40243 (license license:asl2.0)))
40244
40245(define-public python-types-dateutil
40246 (package
40247 (name "python-types-dateutil")
40248 (version "2.9.0.20240316")
40249 (source
40250 (origin
40251 (method url-fetch)
40252 (uri (pypi-uri "types-python-dateutil" version))
40253 (sha256
40254 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
40255 (build-system pyproject-build-system)
40256 (arguments (list #:tests? #f)) ; no tests
40257 (native-inputs
40258 (list python-pytest python-setuptools python-wheel))
40259 (home-page "https://github.com/python/typeshed")
40260 (synopsis "Typing stubs for python-dateutil")
40261 (description
40262 "This is a PEP 561 type stub package for the @code{python-dateutil}
40263package.")
40264 (license license:asl2.0)))
40265
40266(define-public python-types-docutils
40267 (package
40268 (name "python-types-docutils")
40269 (version "0.22.2.20251006")
40270 (source
40271 (origin
40272 (method url-fetch)
40273 (uri (pypi-uri "types_docutils" version))
40274 (sha256
40275 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
40276 (build-system pyproject-build-system)
40277 (arguments (list #:tests? #f)) ;no tests
40278 (native-inputs (list python-setuptools))
40279 (home-page "https://github.com/python/typeshed")
40280 (synopsis "Typing stubs for docutils")
40281 (description "This package provides a collection of library stubs for
40282Python, with static types.")
40283 (license license:asl2.0)))
40284
40285(define-public python-types-freezegun
40286 (package
40287 (name "python-types-freezegun")
40288 (version "1.1.8")
40289 (source
40290 (origin
40291 (method url-fetch)
40292 (uri (pypi-uri "types-freezegun" version))
40293 (sha256
40294 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
40295 (build-system pyproject-build-system)
40296 (arguments
40297 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40298 ;; right files from source, so ignore them for now.
40299 (list #:tests? #f))
40300 (native-inputs (list python-setuptools python-wheel))
40301 (home-page "https://github.com/python/typeshed")
40302 (synopsis "Typing stubs for @code{freezegun}")
40303 (description "This package contains typing stubs for for @code{freezegun}, a
40304very small subset the Python stubs contained in the complete @code{typeshed}
40305collection.")
40306 (license license:asl2.0)))
40307
40308(define-public python-types-orjson
40309 (package
40310 (name "python-types-orjson")
40311 (version "3.6.2")
40312 (source
40313 (origin
40314 (method url-fetch)
40315 (uri (pypi-uri "types-orjson" version))
40316 (sha256
40317 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
40318 (build-system pyproject-build-system)
40319 (arguments (list #:tests? #f)) ;no tests
40320 (native-inputs (list python-setuptools))
40321 (home-page "https://github.com/python/typeshed")
40322 (synopsis "Typing stubs for orjson")
40323 (description "This is a PEP 561 type stub package for the @code{orjson}
40324package. It can be used by type-checking tools like mypy, PyCharm, pytype
40325etc. to check code that uses @code{orjson}.")
40326 (license license:asl2.0)))
40327
40328(define-public python-types-protobuf
40329 (package
40330 (name "python-types-protobuf")
40331 (version "3.20.1")
40332 (source (origin
40333 (method url-fetch)
40334 (uri (pypi-uri "types-protobuf" version))
40335 (sha256
40336 (base32
40337 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
40338 (build-system pyproject-build-system)
40339 (arguments
40340 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
40341 ;; right files from source, so ignore them for now.
40342 (list #:tests? #f))
40343 (native-inputs (list python-setuptools python-wheel))
40344 (home-page "https://github.com/python/typeshed")
40345 (synopsis "Typing stubs for @code{protobuf}")
40346 (description "This package contains typing stubs for @code{protobuf}, a
40347very small subset the Python stubs contained in the complete @code{typeshed}
40348collection.")
40349 (license license:asl2.0)))
40350
40351(define-public python-types-pyside6
40352 (package
40353 (name "python-types-pyside6")
40354 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
40355 ;; variant.
40356 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
40357 (revision . "0")))
40358 (version (git-version "6.10.1.1"
40359 (assoc-ref properties 'revision)
40360 (assoc-ref properties 'commit)))
40361 (source
40362 (origin
40363 (method git-fetch)
40364 (uri (git-reference
40365 (url "https://github.com/LumaPictures/cg-stubs")
40366 (commit (assoc-ref properties 'commit))))
40367 (file-name (git-file-name name version))
40368 (sha256
40369 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
40370 (build-system pyproject-build-system)
40371 (arguments
40372 (list
40373 #:tests? #f ;XXX: all tests failed
40374 #:phases
40375 #~(modify-phases %standard-phases
40376 (add-after 'unpack 'select-pyside6
40377 (lambda _
40378 (chdir "pyside6"))))))
40379 (native-inputs
40380 (list python-hatchling))
40381 (home-page "https://github.com/LumaPictures/cg-stubs")
40382 (synopsis "Accurate stubs for PySide6")
40383 (description
40384 "This package provides PySide6 stubs produced with @code{mypy}'s official
40385stubgen tool to directly generate stubs, with a set of corrections applied.")
40386 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
40387 ;; v2.1 . See file LICENSE for more details.
40388 ;;
40389 ;; MIT in pyproject.toml
40390 (license (list license:lgpl2.1+
40391 license:expat))))
40392
40393(define-public python-types-python-dateutil
40394 (package
40395 (name "python-types-python-dateutil")
40396 (version "2.9.0.20250708")
40397 (source
40398 (origin
40399 (method url-fetch)
40400 (uri (pypi-uri "types_python_dateutil" version))
40401 (sha256
40402 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
40403 (build-system pyproject-build-system)
40404 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40405 (native-inputs (list python-setuptools))
40406 (home-page "https://github.com/python/typeshed")
40407 (synopsis "Typing stubs for python-dateutil")
40408 (description "This package providis typing stubs for python-dateutil.")
40409 (license license:asl2.0)))
40410
40411(define-public python-types-pytz
40412 (package
40413 (name "python-types-pytz")
40414 (version "2025.2.0.20250809")
40415 (source
40416 (origin
40417 (method url-fetch)
40418 (uri (pypi-uri "types_pytz" version))
40419 (sha256
40420 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
40421 (build-system pyproject-build-system)
40422 (arguments
40423 (list #:tests? #f)) ;no tests provided
40424 (native-inputs (list python-setuptools))
40425 (home-page "https://github.com/python/typeshed")
40426 (synopsis "Typing stubs for pytz")
40427 (description "This package contains typing stubs for @code{pytz}, a very
40428small subset the Python stubs contained in the complete @code{typeshed}
40429collection.")
40430 (license license:asl2.0)))
40431
40432(define-public python-types-pyyaml
40433 (package
40434 (name "python-types-pyyaml")
40435 (version "6.0.12.20250915")
40436 (source
40437 (origin
40438 (method url-fetch)
40439 (uri (pypi-uri "types_pyyaml" version))
40440 (sha256
40441 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
40442 (build-system pyproject-build-system)
40443 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40444 (native-inputs
40445 (list python-setuptools))
40446 (home-page " https://github.com/python/typeshed")
40447 (synopsis "Typing stubs for PyYAML")
40448 (description "This package provides typing stubs for @code{PyYAML}.")
40449 (license license:asl2.0)))
40450
40451(define-public python-types-regex
40452 (package
40453 (name "python-types-regex")
40454 (version "2025.9.18.20250921")
40455 (source
40456 (origin
40457 (method url-fetch)
40458 (uri (pypi-uri "types_regex" version))
40459 (sha256
40460 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
40461 (build-system pyproject-build-system)
40462 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40463 (native-inputs (list python-setuptools))
40464 (home-page "https://github.com/python/typeshed")
40465 (synopsis "Typing stubs for regex")
40466 (description "This package provides typing stubs for regex.")
40467 (license license:asl2.0)))
40468
40469(define-public python-types-requests
40470 (package
40471 (name "python-types-requests")
40472 (version "2.32.4.20250611")
40473 (source
40474 (origin
40475 (method url-fetch)
40476 (uri (pypi-uri "types_requests" version))
40477 (sha256
40478 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
40479 (build-system pyproject-build-system)
40480 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40481 (native-inputs
40482 (list python-setuptools))
40483 (propagated-inputs
40484 (list python-urllib3))
40485 (home-page "https://github.com/python/typeshed")
40486 (synopsis "Typing stubs for requests")
40487 (description "This package provides typing stubs for requests.")
40488 (license license:asl2.0)))
40489
40490(define-public python-types-setuptools
40491 (package
40492 (name "python-types-setuptools")
40493 (version "80.9.0.20250529")
40494 (source
40495 (origin
40496 (method url-fetch)
40497 (uri (pypi-uri "types_setuptools" version))
40498 (sha256
40499 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
40500 (build-system pyproject-build-system)
40501 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40502 (native-inputs
40503 (list python-setuptools))
40504 (home-page "https://github.com/python/typeshed")
40505 (synopsis "Typing stubs for setuptools")
40506 (description "This package provides typing stubs for setuptools.")
40507 (license license:asl2.0)))
40508
40509(define-public python-types-simplejson
40510 (package
40511 (name "python-types-simplejson")
40512 (version "3.19.0.20241221")
40513 (source
40514 (origin
40515 (method url-fetch)
40516 (uri (pypi-uri "types_simplejson" version))
40517 (sha256
40518 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
40519 (build-system pyproject-build-system)
40520 (arguments
40521 (list
40522 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
40523 (native-inputs
40524 (list python-setuptools python-wheel))
40525 (home-page "https://github.com/python/typeshed")
40526 (synopsis "Typing stubs for simplejson")
40527 (description "Typing stubs for simplejson.")
40528 (license license:asl2.0)))
40529
40530(define-public python-types-toml
40531 (package
40532 (name "python-types-toml")
40533 (version "0.10.8.20240310")
40534 (source
40535 (origin
40536 (method url-fetch)
40537 (uri (pypi-uri "types-toml" version))
40538 (sha256
40539 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
40540 (build-system pyproject-build-system)
40541 (arguments
40542 (list #:tests? #f)) ;no tests provided
40543 (native-inputs (list python-setuptools))
40544 (home-page "https://github.com/python/typeshed")
40545 (synopsis "Typing stubs for TOML")
40546 (description
40547 "This package contains typing stubs for TOML, a very small subset the
40548Python stubs contained in the complete @code{typeshed} collection.")
40549 (license license:asl2.0)))
40550
40551(define-public python-types-tqdm
40552 (package
40553 (name "python-types-tqdm")
40554 (version "4.67.0.20250809")
40555 (source
40556 (origin
40557 (method url-fetch)
40558 (uri (pypi-uri "types_tqdm" version))
40559 (sha256
40560 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
40561 (build-system pyproject-build-system)
40562 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40563 (native-inputs (list python-setuptools))
40564 (propagated-inputs (list python-types-requests))
40565 (home-page "https://github.com/python/typeshed")
40566 (synopsis "Typing stubs for python-tqdm")
40567 (description "This package providis typing stubs for python-tqdm.")
40568 (license license:asl2.0)))
40569
40570(define-public python-types-ujson
40571 (package
40572 (name "python-types-ujson")
40573 (version "5.10.0.20250822")
40574 (source
40575 (origin
40576 (method url-fetch)
40577 (uri (pypi-uri "types_ujson" version))
40578 (sha256
40579 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
40580 (build-system pyproject-build-system)
40581 (arguments
40582 (list #:tests? #f)) ;no tests provided
40583 (native-inputs (list python-setuptools))
40584 (home-page "https://github.com/python/typeshed")
40585 (synopsis "Typing stubs for ujson")
40586 (description
40587 "This is a PEP 561 type stub package for the ujson package. It can be
40588used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
40589uses ujson.")
40590 (license license:asl2.0)))
40591
40592(define-public python-types-urllib3
40593 (package
40594 (name "python-types-urllib3")
40595 (version "1.26.25.14")
40596 (source
40597 (origin
40598 (method url-fetch)
40599 (uri (pypi-uri "types-urllib3" version))
40600 (sha256
40601 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
40602 (build-system pyproject-build-system)
40603 (arguments (list #:tests? #f)) ;no tests in PyPI archive
40604 (native-inputs
40605 (list python-setuptools))
40606 (home-page "https://github.com/python/typeshed")
40607 (synopsis "Typing stubs for urllib3")
40608 (description "This package provides typing stubs for urllib3.")
40609 (license license:asl2.0)))
40610
40611(define-public python-typeshed-client
40612 (package
40613 (name "python-typeshed-client")
40614 (version "2.8.2")
40615 (source
40616 (origin
40617 (method git-fetch)
40618 (uri (git-reference
40619 (url "https://github.com/JelleZijlstra/typeshed_client")
40620 (commit (string-append "v" version))))
40621 (file-name (git-file-name name version))
40622 (sha256
40623 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
40624 (build-system pyproject-build-system)
40625 (arguments
40626 (list #:test-backend #~'custom
40627 #:test-flags #~(list "tests/test.py")))
40628 (native-inputs
40629 (list python-setuptools))
40630 (propagated-inputs
40631 (list python-importlib-resources
40632 python-typing-extensions))
40633 (home-page "https://github.com/JelleZijlstra/typeshed_client")
40634 (synopsis "Library for accessing stubs in typeshed")
40635 (description
40636 "This package provides a library for accessing stubs in typeshed.")
40637 (license license:expat)))
40638
40639(define-public python-typing-inspect
40640 (package
40641 (name "python-typing-inspect")
40642 (version "0.9.0")
40643 (source
40644 (origin
40645 (method url-fetch)
40646 (uri (pypi-uri "typing_inspect" version))
40647 (sha256
40648 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
40649 (build-system pyproject-build-system)
40650 (native-inputs
40651 (list python-pytest
40652 python-setuptools
40653 python-wheel))
40654 (propagated-inputs
40655 (list python-mypy-extensions
40656 python-typing-extensions))
40657 (home-page "https://github.com/ilevkivskyi/typing_inspect")
40658 (synopsis "API for inspection of types in the Python @code{typing} module")
40659 (description
40660 "The @code{typing_inspect} module defines experimental API for runtime
40661inspection of types defined in the Python standard typing module.")
40662 (license license:expat)))
40663
40664(define-public python-typing-inspection
40665 (package
40666 (name "python-typing-inspection")
40667 (version "0.4.2")
40668 (source
40669 (origin
40670 (method git-fetch)
40671 (uri (git-reference
40672 (url "https://github.com/pydantic/typing-inspection")
40673 (commit (string-append "v" version))))
40674 (file-name (git-file-name name version))
40675 (sha256
40676 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
40677 (build-system pyproject-build-system)
40678 ;; tests: 89 passed, 3 skipped
40679 (native-inputs
40680 (list python-pytest
40681 python-hatchling))
40682 (propagated-inputs
40683 (list python-typing-extensions))
40684 (home-page "https://github.com/pydantic/typing-inspection")
40685 (synopsis "Runtime typing introspection tools")
40686 (description
40687 "@code{typing-inspection} provides tools to inspect type annotations at
40688runtime.")
40689 (license license:expat)))
40690
40691(define-public python-typogrify
40692 (package
40693 (name "python-typogrify")
40694 (version "2.1.0")
40695 (source
40696 (origin
40697 (method url-fetch)
40698 (uri (pypi-uri "typogrify" version))
40699 (sha256
40700 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
40701 (build-system pyproject-build-system)
40702 (arguments
40703 (list
40704 #:test-flags
40705 #~(list "--doctest-modules"
40706 "typogrify/filters.py"
40707 "typogrify/packages/titlecase/tests.py")))
40708 (native-inputs
40709 (list python-pytest
40710 python-hatchling))
40711 (propagated-inputs
40712 (list python-smartypants))
40713 (home-page "https://github.com/justinmayer/typogrify")
40714 (synopsis "Filters to transform text into typographically-improved HTML")
40715 (description
40716 "@code{typogrify} provides a set of custom filters that automatically
40717apply various transformations to plain text in order to yield
40718typographically-improved HTML. While often used in conjunction with Jinja and
40719Django template systems, the filters can be used in any environment.")
40720 (license license:bsd-3)))
40721
40722(define-public python-ua-parser
40723 (package
40724 (name "python-ua-parser")
40725 (version "0.10.0")
40726 (source
40727 (origin
40728 (method url-fetch)
40729 (uri (pypi-uri "ua-parser" version))
40730 (sha256
40731 (base32
40732 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
40733 (build-system pyproject-build-system)
40734 (arguments
40735 `(#:tests? #f)) ;no test suite in release
40736 (native-inputs
40737 (list python-pyyaml
40738 python-setuptools))
40739 (home-page "https://github.com/ua-parser/uap-python")
40740 (synopsis "User agent parser")
40741 (description
40742 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
40743 (license license:asl2.0)))
40744
40745(define-public python-ubelt
40746 (package
40747 (name "python-ubelt")
40748 (version "1.3.6")
40749 (source
40750 (origin
40751 (method git-fetch)
40752 (uri (git-reference
40753 (url "https://github.com/Erotemic/ubelt")
40754 (commit (string-append "v" version))))
40755 (file-name (git-file-name name version))
40756 (sha256
40757 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
40758 (build-system pyproject-build-system)
40759 (arguments
40760 (list
40761 ;; The builder user home doesn't match HOME, which causes this test to
40762 ;; fail.
40763 #:test-flags #~(list "-k" "not userhome")
40764 #:phases
40765 #~(modify-phases %standard-phases
40766 (add-before 'check 'pre-check
40767 (lambda _
40768 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
40769 (native-inputs
40770 (list python-pytest
40771 python-requests
40772 python-setuptools
40773 python-wheel
40774 python-xdoctest))
40775 (propagated-inputs
40776 (list python-ordered-set))
40777 (home-page "https://github.com/Erotemic/ubelt")
40778 (synopsis "Python library for hashing, caching, timing and more")
40779 (description
40780 "Ubelt is a small library of simple functions that extend the Python
40781standard library. It includes an @acronym{API, Application Programming
40782Interface} to simplify common problems such as caching, timing, computing
40783progress, among other things.")
40784 (license license:asl2.0)))
40785
40786(define-public python-uc-micro-py
40787 (package
40788 (name "python-uc-micro-py")
40789 (version "1.0.1")
40790 (source (origin
40791 (method git-fetch) ;for tests
40792 (uri (git-reference
40793 (url "https://github.com/tsutsu3/uc.micro-py")
40794 (commit (string-append "v" version))))
40795 (file-name (git-file-name name version))
40796 (sha256
40797 (base32
40798 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
40799 (build-system pyproject-build-system)
40800 (native-inputs (list python-pytest python-setuptools python-wheel))
40801 (home-page "https://github.com/tsutsu3/uc.micro-py")
40802 (synopsis "Unicode data files for linkify-it-py projects")
40803 (description "This package contains a micro subset of Unicode data files
40804for linkify-it-py projects.")
40805 (license license:expat)))
40806
40807(define-public python-udapi
40808 (package
40809 (name "python-udapi")
40810 (version "0.5.2")
40811 (source
40812 (origin
40813 (method git-fetch)
40814 (uri (git-reference
40815 (url "https://github.com/udapi/udapi-python")
40816 (commit version)))
40817 (file-name (git-file-name name version))
40818 (sha256
40819 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
40820 (build-system pyproject-build-system)
40821 (native-inputs
40822 (list python-pytest python-setuptools))
40823 (propagated-inputs
40824 (list python-colorama python-termcolor))
40825 (home-page "http://udapi.readthedocs.io")
40826 (synopsis "Framework for processing Universal Dependencies data")
40827 (description
40828 "This package is a Python library providing an API for processing
40829Universal Dependencies data.")
40830 (license license:gpl3+)))
40831
40832(define-public python-ujson
40833 (package
40834 (name "python-ujson")
40835 (version "5.10.0")
40836 (source
40837 (origin
40838 (method url-fetch)
40839 (uri (pypi-uri "ujson" version))
40840 (sha256
40841 (base32
40842 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
40843 (modules '((guix build utils)))
40844 (snippet
40845 #~(begin (delete-file-recursively "deps")))))
40846 (build-system pyproject-build-system)
40847 (arguments
40848 (list
40849 #:phases
40850 #~(modify-phases %standard-phases
40851 (add-after 'unpack 'link-to-system-double-conversion
40852 (lambda* (#:key inputs #:allow-other-keys)
40853 (let ((d-c (assoc-ref inputs "double-conversion")))
40854 (substitute* "setup.py"
40855 (("./deps/double-conversion/double-conversion\"")
40856 (string-append d-c "/include/double-conversion\""))
40857 (("-lstdc++" stdc)
40858 (string-append "-L" d-c "/lib\","
40859 " \"-ldouble-conversion\","
40860 " \"" stdc)))))))))
40861 (native-inputs
40862 (list double-conversion
40863 python-pytest
40864 python-setuptools
40865 python-setuptools-scm
40866 python-wheel))
40867 (home-page "https://github.com/ultrajson/ultrajson")
40868 (synopsis "Ultra fast JSON encoder and decoder for Python")
40869 (description
40870 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
40871bindings for Python 3.")
40872 (license license:bsd-3)))
40873
40874(define-public python-ukkonen
40875 (package
40876 (name "python-ukkonen")
40877 (version "1.0.1")
40878 (source
40879 (origin
40880 ;; There are no tests in the PyPI tarball.
40881 (method git-fetch)
40882 (uri (git-reference
40883 (url "https://github.com/asottile/ukkonen")
40884 (commit (string-append "v" version))))
40885 (file-name (git-file-name name version))
40886 (sha256
40887 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
40888 (build-system pyproject-build-system)
40889 (native-inputs (list python-pytest python-setuptools python-wheel))
40890 (propagated-inputs (list python-cffi))
40891 (home-page "https://github.com/asottile/ukkonen")
40892 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
40893 (description "This package is an implementation of of bounded Levenshtein
40894distance (Ukkonen).")
40895 (license license:expat)))
40896
40897(define-public python-ulid
40898 (package
40899 (name "python-ulid")
40900 (version "3.1.0")
40901 (source
40902 (origin
40903 (method git-fetch)
40904 (uri (git-reference
40905 (url "https://github.com/mdomke/python-ulid")
40906 (commit version)))
40907 (file-name (git-file-name name version))
40908 (sha256
40909 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
40910 (build-system pyproject-build-system)
40911 (arguments
40912 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
40913 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
40914 ;; 68 passed, 1 deselected in 2.55s
40915 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
40916 (native-inputs
40917 (list python-freezegun
40918 python-hatch-fancy-pypi-readme
40919 python-hatch-vcs
40920 python-hatchling
40921 python-pytest))
40922 (propagated-inputs
40923 (list python-pydantic))
40924 (home-page "https://github.com/mdomke/python-ulid")
40925 (synopsis "Universally unique lexicographically sortable identifier")
40926 (description
40927 "ULID is a universally unique lexicographically sortable identifier.
40928It is:
40929@itemize
40930@item 128-bit compatible with UUID
40931@item 1.21e+24 unique ULIDs per millisecond
40932@item lexicographically sortable!
40933@item canonically encoded as a 26 character string, as opposed to the 36
40934character UUID
40935@item uses Crockford's base32 for better efficiency and readability (5 bits
40936per character)
40937@item case insensitive
40938@item no special characters (URL safe)
40939@item monotonic sort order (correctly detects and handles the same
40940millisecond)
40941@end itemize")
40942 (license license:expat)))
40943
40944(define-public python-uncertainties
40945 (package
40946 (name "python-uncertainties")
40947 (version "3.2.3")
40948 (source
40949 (origin
40950 (method url-fetch)
40951 (uri (pypi-uri "uncertainties" version))
40952 (sha256
40953 (base32
40954 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
40955 (build-system pyproject-build-system)
40956 (native-inputs
40957 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
40958 (propagated-inputs (list python-numpy))
40959 (home-page "https://uncertainties.readthedocs.io/en/latest/")
40960 (synopsis "Calculations with uncertainties")
40961 (description
40962 "The uncertainties package transparently handles calculations with
40963numbers with uncertainties. It can also yield the derivatives of any
40964expression.")
40965 (license license:bsd-3)))
40966
40967(define-public python-unicode-linebreak
40968 (package
40969 (name "python-unicode-linebreak")
40970 (version "0.0.2")
40971 (source
40972 (origin
40973 (method git-fetch)
40974 (uri (git-reference
40975 (url "https://github.com/mondeja/py-unicode-linebreak")
40976 (commit (string-append "v" version))))
40977 (file-name (git-file-name name version))
40978 (sha256
40979 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
40980 (build-system pyproject-build-system)
40981 (arguments
40982 (list
40983 #:imported-modules `(,@%cargo-build-system-modules
40984 ,@%pyproject-build-system-modules)
40985 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40986 (guix build pyproject-build-system)
40987 (guix build utils))
40988 #:test-backend #~'unittest
40989 #:phases
40990 #~(modify-phases %standard-phases
40991 (add-after 'unpack 'prepare-cargo-build-system
40992 (lambda args
40993 (for-each
40994 (lambda (phase)
40995 (format #t "Running cargo phase: ~a~%" phase)
40996 (apply (assoc-ref cargo:%standard-phases phase)
40997 #:cargo-target #$(cargo-triplet)
40998 args))
40999 '(unpack-rust-crates
41000 configure
41001 check-for-pregenerated-files
41002 patch-cargo-checksums)))))))
41003 (native-inputs
41004 (append
41005 (list maturin
41006 rust
41007 `(,rust "cargo"))
41008 (or (and=> (%current-target-system)
41009 (compose list make-rust-sysroot))
41010 '())))
41011 (inputs (cargo-inputs 'unicode_linebreak))
41012 (home-page "https://github.com/mondeja/py-unicode-linebreak")
41013 (synopsis "Markdown paragraph wrapper")
41014 (description
41015 "This package provides a Markdown paragraph wrapper using Unicode Line
41016Breaking Algorithm written in Rust with Python bindings.")
41017 (license license:expat)))
41018
41019(define-public python-unicodedata2
41020 (package
41021 (name "python-unicodedata2")
41022 (version "16.0.0")
41023 (source
41024 (origin
41025 (method url-fetch)
41026 (uri (pypi-uri "unicodedata2" version))
41027 (sha256
41028 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
41029 (build-system pyproject-build-system)
41030 (native-inputs
41031 (list python-pytest
41032 python-setuptools))
41033 (home-page "https://github.com/fonttools/unicodedata2")
41034 (synopsis "Python unicodedata backport")
41035 (description "This package corresponds to the latest @code{unicodedata}
41036standard Python module.")
41037 (license license:asl2.0)))
41038
41039(define-public python-unicodeitplus
41040 (package
41041 (name "python-unicodeitplus")
41042 (version "0.3.1")
41043 (source
41044 (origin
41045 (method url-fetch)
41046 (uri (pypi-uri "unicodeitplus" version))
41047 (sha256
41048 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
41049 (build-system pyproject-build-system)
41050 (native-inputs
41051 (list python-pytest
41052 python-setuptools
41053 python-setuptools-scm))
41054 (propagated-inputs
41055 (list python-lark))
41056 (home-page "https://github.com/HDembinski/unicodeitplus")
41057 (synopsis "Convert simple LaTeX to an Unicode approximation")
41058 (description
41059 "This package provides a more complete LaTeX to Unicode converter than
41060@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
41061Backus-Naur Form} with the Lark library.")
41062 (license license:bsd-3)))
41063
41064(define-public python-unidecode
41065 (package
41066 (name "python-unidecode")
41067 (version "1.4.0")
41068 (source
41069 (origin
41070 (method url-fetch)
41071 (uri (pypi-uri "Unidecode" version))
41072 (sha256
41073 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
41074 (build-system pyproject-build-system)
41075 (native-inputs
41076 (list python-pytest python-setuptools))
41077 (home-page "https://pypi.org/project/Unidecode/")
41078 (synopsis "ASCII transliterations of Unicode text")
41079 (description
41080 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
41081useful when integrating with legacy code that doesn't support Unicode, or for
41082ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
41083machine identifiers from human-readable Unicode strings that should still be
41084somewhat intelligible.")
41085 (license license:gpl2+)))
41086
41087(define-public python-unique-log-filter
41088 (package
41089 (name "python-unique-log-filter")
41090 (version "0.1.0")
41091 (source
41092 (origin
41093 (method git-fetch)
41094 (uri (git-reference
41095 (url "https://github.com/twizmwazin/unique_log_filter")
41096 (commit (string-append "v" version))))
41097 (file-name (git-file-name name version))
41098 (sha256
41099 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
41100 (build-system pyproject-build-system)
41101 (arguments
41102 (list #:test-backend #~'custom
41103 #:test-flags #~(list "test_unique_log_filter.py")))
41104 (native-inputs (list python-flit-core))
41105 (home-page "https://github.com/twizmwazin/unique_log_filter")
41106 (synopsis "Log filter that removes duplicate log messages")
41107 (description
41108 "This library provides a filter for the @code{logging} module
41109from the Python standard library which allows removing duplicate log
41110messages.")
41111 (license license:bsd-2)))
41112
41113(define-public python-uniseg
41114 (package
41115 (name "python-uniseg")
41116 (version "0.10.0")
41117 (source
41118 (origin
41119 (method url-fetch)
41120 (uri (pypi-uri "uniseg" version))
41121 (sha256
41122 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
41123 (build-system pyproject-build-system)
41124 (native-inputs
41125 (list python-pytest
41126 python-setuptools
41127 python-setuptools-scm))
41128 (home-page "https://bitbucket.org/emptypage/uniseg-python")
41129 (synopsis "Python library to determine Unicode text segmentations")
41130 (description
41131 "Uniseg is a Python package used to determine Unicode text segmentations.
41132Supported segmentations include:
41133@enumerate
41134@item @dfn{Code point} (any value in the Unicode codespace)
41135@item @dfn{Grapheme cluster} (user-perceived character made of a single or
41136multiple Unicode code points, e.g. \"G\" + acute-accent)
41137@item Word break
41138@item Sentence break
41139@item Line break
41140@end enumerate")
41141 (license license:expat)))
41142
41143(define-public python-universal-pathlib
41144 (package
41145 (name "python-universal-pathlib")
41146 (version "0.2.6")
41147 (source
41148 (origin
41149 (method git-fetch)
41150 (uri (git-reference
41151 (url "https://github.com/fsspec/universal_pathlib")
41152 (commit (string-append "v" version))))
41153 (file-name (git-file-name name version))
41154 (sha256
41155 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
41156 (build-system pyproject-build-system)
41157 (arguments
41158 (list
41159 #:tests? #f)) ;requires network
41160 (native-inputs
41161 (list python-setuptools
41162 python-setuptools-scm))
41163 (propagated-inputs
41164 (list python-fsspec
41165 python-pathlib-abc))
41166 (home-page "https://github.com/fsspec/universal_pathlib")
41167 (synopsis
41168 "@code{pathlib} API extended to use @code{fsspec} backends")
41169 (description
41170 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
41171API to support a variety of backend filesystems via filesystem_spec.")
41172 (license license:expat)))
41173
41174(define-public python-unpaddedbase64
41175 (package
41176 (name "python-unpaddedbase64")
41177 (version "2.1.0")
41178 (source
41179 (origin
41180 (method git-fetch)
41181 (uri (git-reference
41182 (url "https://github.com/matrix-org/python-unpaddedbase64")
41183 (commit (string-append "v" version))))
41184 (file-name (git-file-name name version))
41185 (sha256
41186 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
41187 (build-system pyproject-build-system)
41188 (native-inputs (list python-poetry-core
41189 python-pytest
41190 python-setuptools
41191 python-wheel))
41192 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
41193 (synopsis "Encode and decode Base64 without “=” padding")
41194 (description
41195 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
41196using “=” characters. However this conveys no benefit so many protocols
41197choose to use Base64 without the “=” padding.")
41198 (license license:asl2.0)))
41199
41200(define-public python-update-checker
41201 (package
41202 (name "python-update-checker")
41203 (version "0.18.0")
41204 (source
41205 (origin
41206 (method url-fetch)
41207 (uri (pypi-uri "update-checker" version))
41208 (sha256
41209 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
41210 (build-system pyproject-build-system)
41211 (native-inputs
41212 (list python-pytest
41213 python-setuptools))
41214 (propagated-inputs
41215 (list python-requests))
41216 (home-page "https://github.com/bboe/update_checker")
41217 (synopsis "Python module that will check for package updates")
41218 (description "This package provides a Python module that will check for
41219package updates.")
41220 (license license:bsd-2)))
41221
41222(define-public python-uri-template
41223 (package
41224 (name "python-uri-template")
41225 (version "1.3.0")
41226 (source
41227 (origin
41228 (method url-fetch)
41229 (uri (pypi-uri "uri-template" version))
41230 (sha256
41231 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
41232 (build-system pyproject-build-system)
41233 (arguments
41234 (list
41235 #:phases
41236 '(modify-phases %standard-phases
41237 (replace 'check
41238 (lambda* (#:key tests? #:allow-other-keys)
41239 (when tests?
41240 (invoke "python3" "test.py")))))))
41241 (native-inputs
41242 (list python-setuptools
41243 python-setuptools-scm
41244 python-wheel))
41245 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
41246 (synopsis "RFC 6570 URI Template Processor")
41247 (description "This package implements URI Template expansion in strict
41248adherence to RFC 6570, but adds a few extensions.")
41249 (license license:expat)))
41250
41251(define-public python-uritools
41252 (package
41253 (name "python-uritools")
41254 (version "6.0.1")
41255 (source
41256 (origin
41257 (method git-fetch)
41258 (uri (git-reference
41259 (url "https://github.com/tkem/uritools/")
41260 (commit (string-append "v" version))))
41261 (file-name (git-file-name name version))
41262 (sha256
41263 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
41264 (build-system pyproject-build-system)
41265 (native-inputs
41266 (list python-pytest
41267 python-setuptools))
41268 (home-page "https://github.com/tkem/uritools/")
41269 (synopsis "URI parsing, classification and composition")
41270 (description
41271 "This package provides RFC 3986 compliant functions for parsing,
41272classifying and composing URIs and URI references, largely replacing the
41273Python Standard Library's urllib.parse module.")
41274 (license license:expat)))
41275
41276(define-public python-urwid
41277 (package
41278 (name "python-urwid")
41279 (version "3.0.3")
41280 (source
41281 (origin
41282 (method url-fetch)
41283 (uri (pypi-uri "urwid" version))
41284 (sha256
41285 (base32
41286 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
41287 (build-system pyproject-build-system)
41288 (arguments
41289 (list
41290 #:test-flags
41291 #~(list "tests"
41292 ;; According to Debian these tests are cursed.
41293 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
41294 "--ignore=tests/test_vterm.py")))
41295 (native-inputs
41296 (list python-pytest python-setuptools python-setuptools-scm))
41297 (propagated-inputs
41298 (list python-wcwidth
41299 ;; [optional]
41300 python-pygobject
41301 python-pyzmq
41302 python-tornado
41303 python-pyserial
41304 python-twisted))
41305 (home-page "https://urwid.org")
41306 (synopsis "Console user interface library for Python")
41307 (description
41308 "Urwid is a curses-based UI/widget library for Python. It includes many
41309features useful for text console applications.")
41310 (license license:lgpl2.1+)))
41311
41312(define-public python-urwid-2
41313 (package
41314 (inherit python-urwid)
41315 (name "python-urwid")
41316 (version "2.6.16")
41317 (source
41318 (origin
41319 (method url-fetch)
41320 (uri (pypi-uri "urwid" version))
41321 (sha256
41322 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
41323
41324(define-deprecated/public-alias python-urwid-3
41325 python-urwid) ;may be removed after 2025-11-12
41326
41327(define-public python-urwid-for-zulip-term
41328 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
41329 ;; to pass, remove when no longer required.
41330 (hidden-package
41331 (package
41332 (inherit python-urwid)
41333 (version "2.1.2")
41334 (source
41335 (origin
41336 (method url-fetch)
41337 (uri (pypi-uri "urwid" version))
41338 (sha256
41339 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
41340 (arguments
41341 (list #:tests? #f)))))
41342
41343(define-public python-urwid-readline
41344 (package
41345 (name "python-urwid-readline")
41346 (version "0.15.1")
41347 (source
41348 (origin
41349 (method git-fetch)
41350 (uri (git-reference
41351 (url "https://github.com/rr-/urwid_readline")
41352 (commit version)))
41353 (file-name (git-file-name name version))
41354 (sha256
41355 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
41356 (build-system pyproject-build-system)
41357 (native-inputs
41358 (list python-pytest
41359 python-setuptools))
41360 (propagated-inputs
41361 (list python-urwid))
41362 (home-page "https://github.com/rr-/urwid_readline")
41363 (synopsis "Text input widget for urwid that supports readline shortcuts")
41364 (description
41365 "This package provides a textbox edit widget for @code{python-urwid} that
41366supports @code{readline} shortcuts.")
41367 (license license:expat)))
41368
41369(define-public python-urwidgets
41370 (package
41371 (name "python-urwidgets")
41372 (version "0.2.1")
41373 (source
41374 (origin
41375 (method url-fetch)
41376 (uri (pypi-uri "urwidgets" version))
41377 (sha256
41378 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
41379 (build-system pyproject-build-system)
41380 (arguments
41381 (list #:tests? #f)) ;no tests
41382 (native-inputs
41383 (list python-setuptools))
41384 (propagated-inputs
41385 (list python-urwid-2))
41386 (home-page "https://github.com/AnonymouX47/urwidgets")
41387 (synopsis "Collection of widgets for urwid")
41388 (description
41389 "This package provides a collection of widgets for urwid.")
41390 (license license:expat)))
41391
41392(define-public python-urwidtrees
41393 (package
41394 (name "python-urwidtrees")
41395 (version "1.0.4")
41396 (source
41397 (origin
41398 (method git-fetch)
41399 ;; package author intends on distributing via github rather than pypi:
41400 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
41401 (uri (git-reference
41402 (url "https://github.com/pazz/urwidtrees")
41403 (commit version)))
41404 (file-name (git-file-name name version))
41405 (sha256
41406 (base32
41407 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
41408 (build-system pyproject-build-system)
41409 (arguments
41410 '(#:tests? #f)) ; no tests
41411 (propagated-inputs (list python-urwid))
41412 (native-inputs (list python-mock python-setuptools python-wheel))
41413 (home-page "https://github.com/pazz/urwidtrees")
41414 (synopsis "Tree widgets for urwid")
41415 (description "Urwidtrees is a Widget Container API for the @code{urwid}
41416toolkit. Use it to build trees of widgets.")
41417 (license license:gpl3+)))
41418
41419(define-public python-user-agents
41420 (package
41421 (name "python-user-agents")
41422 (version "2.2.0")
41423 (source
41424 (origin
41425 (method git-fetch)
41426 (uri (git-reference
41427 (url "https://github.com/selwin/python-user-agents")
41428 (commit (string-append "v" version))))
41429 (file-name (git-file-name name version))
41430 (sha256
41431 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
41432 (build-system pyproject-build-system)
41433 (arguments
41434 (list #:test-backend #~'unittest))
41435 (native-inputs
41436 (list python-setuptools))
41437 (propagated-inputs
41438 (list python-ua-parser))
41439 (home-page "https://github.com/selwin/python-user-agents")
41440 (synopsis "User Agent strings parsing library")
41441 (description
41442 "A library to identify devices (phones, tablets) and their capabilities by
41443parsing (browser/HTTP) user agent strings.")
41444 (license license:expat)))
41445
41446(define-public python-userpath
41447 (package
41448 (name "python-userpath")
41449 (version "1.9.2")
41450 (source
41451 (origin
41452 (method url-fetch)
41453 (uri (pypi-uri "userpath" version))
41454 (sha256
41455 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
41456 (build-system pyproject-build-system)
41457 (arguments
41458 ;; See https://github.com/ofek/userpath/issues/43.
41459 ;; In Guix, tests try to find the temporary build directory in PATH, but
41460 ;; only the store output is present.
41461 (list #:tests? #f))
41462 (native-inputs (list python-hatchling python-pytest))
41463 (propagated-inputs (list python-click))
41464 (home-page "https://github.com/ofek/userpath")
41465 (synopsis "Add locations to the user's PATH")
41466 (description "This package provides a tool for modifying a user's PATH.")
41467 (license license:expat)))
41468
41469(define-public python-userspacefs
41470 (package
41471 (name "python-userspacefs")
41472 (version "3.2.1")
41473 (source
41474 (origin
41475 (method url-fetch)
41476 (uri (pypi-uri "userspacefs" version))
41477 (sha256
41478 (base32 "0n3mp9y1xgkl292m44i6xrkha2ffja1zrf5yaykz0yyvm85cfip4"))))
41479 (build-system pyproject-build-system)
41480 (arguments
41481 (list #:tests? #f ;no tests
41482 #:phases
41483 #~(modify-phases %standard-phases
41484 (add-after 'unpack 'hardcode-libfuse
41485 (lambda* (#:key inputs #:allow-other-keys)
41486 (substitute* "userspacefs/fusepy.py"
41487 (("^_libfuse_path.*")
41488 (string-append "_libfuse_path = '"
41489 (search-input-file inputs "lib/libfuse3.so")
41490 "'\n"))))))))
41491 (inputs (list fuse))
41492 (native-inputs (list python-setuptools))
41493 (propagated-inputs (list python-aiohttp python-typing-extensions))
41494 (home-page "https://thelig.ht/code/userspacefs/readme.html")
41495 (synopsis "User-space file systems for Python")
41496 (description
41497 "@code{userspacefs} is a library that allows you to easily write
41498user-space file systems in Python.")
41499 (license license:gpl3+)))
41500
41501(define-public python-utils
41502 (package
41503 (name "python-utils")
41504 (version "3.9.1")
41505 (source
41506 (origin
41507 (method url-fetch)
41508 (uri (pypi-uri "python_utils" version))
41509 (sha256
41510 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
41511 (build-system pyproject-build-system)
41512 (native-inputs
41513 (list python-pytest
41514 python-pytest-asyncio
41515 python-setuptools))
41516 (propagated-inputs
41517 (list python-loguru
41518 python-typing-extensions))
41519 (home-page "https://github.com/WoLpH/python-utils")
41520 (synopsis "Convenient utilities not included with the standard Python install")
41521 (description
41522 "Python Utils is a collection of small Python functions and classes
41523which make common patterns shorter and easier.")
41524 (license license:bsd-2)))
41525
41526(define-public python-uuid6
41527 (package
41528 (name "python-uuid6")
41529 (version "2025.0.1")
41530 (source
41531 (origin
41532 (method git-fetch)
41533 (uri (git-reference
41534 (url "https://github.com/oittaa/uuid6-python")
41535 (commit version)))
41536 (file-name (git-file-name name version))
41537 (sha256
41538 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
41539 (build-system pyproject-build-system)
41540 (arguments
41541 (list
41542 #:test-flags
41543 ;; Test is time based: AssertionError: 13987034766.015247 !=
41544 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
41545 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
41546 (native-inputs
41547 (list python-pytest
41548 python-setuptools
41549 python-setuptools-scm))
41550 (home-page "https://github.com/oittaa/uuid6-python")
41551 (synopsis "Time-based UUID formats which are suited for use as a database key")
41552 (description
41553 "This module extends immutable UUID objects (the UUID class) with the
41554functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
41555@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
41556 (license license:expat)))
41557
41558(define-public python-validate-email
41559 (package
41560 (name "python-validate-email")
41561 (version "1.3")
41562 (source
41563 (origin
41564 (method url-fetch)
41565 (uri (pypi-uri "validate_email" version))
41566 (sha256
41567 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
41568 (build-system pyproject-build-system)
41569 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
41570 (native-inputs
41571 (list python-setuptools))
41572 (home-page "https://github.com/syrusakbary/validate_email")
41573 (synopsis "Verifies if an email address is valid and really exists")
41574 (description
41575 "@code{validate_email} can be used to verify if an email address is
41576valid and really exists.")
41577 (license license:lgpl3+)))
41578
41579(define-public python-validators
41580 (package
41581 (name "python-validators")
41582 (version "0.34.0")
41583 (source
41584 (origin
41585 (method url-fetch)
41586 (uri (pypi-uri "validators" version))
41587 (sha256
41588 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
41589 (build-system pyproject-build-system)
41590 (arguments
41591 (list
41592 ;; python-eth-hash is not packed yet.
41593 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
41594 (native-inputs
41595 (list python-pytest
41596 python-setuptools
41597 python-wheel))
41598 (propagated-inputs
41599 (list python-decorator
41600 ;; python-eth-hash ; optional, not packed yet.
41601 python-six))
41602 (home-page "https://github.com/kvesteri/validators")
41603 (synopsis "Data validation library")
41604 (description
41605 "This package contains validators for different things such as email
41606addresses, IP addresses, URLs, hashes and more. It has been designed to be
41607easy to use and not require defining a schema or form just to validate some
41608input.")
41609 (license license:expat)))
41610
41611(define-public python-valkey
41612 (package
41613 (name "python-valkey")
41614 (version "6.1.1")
41615 (source
41616 (origin
41617 (method git-fetch)
41618 (uri (git-reference
41619 (url "https://github.com/valkey-io/valkey-py")
41620 (commit (string-append "v" version))))
41621 (file-name (git-file-name name version))
41622 (sha256
41623 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
41624 (build-system pyproject-build-system)
41625 (arguments
41626 ;; XXX: A lot of tests fail with ConnectionError
41627 ;; Maybe we need to spawn a valkey server?
41628 (list #:tests? #f))
41629 (native-inputs
41630 (list python-setuptools))
41631 (home-page "https://github.com/valkey-io/valkey-py")
41632 (synopsis "Python client for Valkey")
41633 (description
41634 "This package provides a python client for the @code{Valkey} key-value
41635store, forked from redis-py.")
41636 (license license:expat)))
41637
41638;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
41639;; package.
41640(define-public python-vcversioner
41641 (package
41642 (name "python-vcversioner")
41643 (version "2.16.0.0")
41644 (source
41645 (origin
41646 (method url-fetch)
41647 (uri (pypi-uri "vcversioner" version))
41648 (sha256
41649 (base32
41650 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
41651 (build-system pyproject-build-system)
41652 (arguments
41653 (list #:tests? #f)) ;no tests in PyPI archive
41654 (native-inputs
41655 (list python-setuptools))
41656 (home-page "https://github.com/habnabit/vcversioner")
41657 (synopsis "Python library for version number discovery")
41658 (description
41659 "Vcversioner is a Python library that inspects tagging information in a
41660variety of version control systems in order to discover version numbers.")
41661 (license license:isc)))
41662
41663(define-public python-vdf
41664 (package
41665 (name "python-vdf")
41666 (version "3.4")
41667 (source
41668 (origin
41669 (method git-fetch) ; no tests in PyPI release
41670 (uri (git-reference
41671 (url "https://github.com/ValvePython/vdf")
41672 (commit (string-append "v" version))))
41673 (file-name (git-file-name name version))
41674 (sha256
41675 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
41676 (build-system pyproject-build-system)
41677 (native-inputs
41678 (list python-pytest python-setuptools))
41679 (home-page "https://github.com/ValvePython/vdf")
41680 (synopsis "Work with Valve's VDF text format")
41681 (description
41682 "This package provides @code{python-vdf}, a library for working with
41683 Valve's VDF text format.")
41684 (license license:expat)))
41685
41686(define-public python-vendetect
41687 (package
41688 (name "python-vendetect")
41689 (version "0.0.3")
41690 (source
41691 (origin
41692 (method url-fetch)
41693 (uri (pypi-uri "vendetect" version))
41694 (sha256
41695 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
41696 (build-system pyproject-build-system)
41697 (propagated-inputs (list python-copydetect python-rich))
41698 (native-inputs (list python-hatchling python-pytest))
41699 (home-page "https://github.com/trailofbits/vendetect")
41700 (synopsis "Detect vendored and copy-pasted code")
41701 (description
41702 "Vendetect helps identify copied or vendored code between repositories,
41703making it easier to detect when code has been copied with or without
41704attribution. It uses similarity detection algorithms to compare code files
41705and highlight matching sections.")
41706 (license license:agpl3+)))
41707
41708;; XXX: No updates since 2017.
41709(define-public python-verboselogs
41710 (package
41711 (name "python-verboselogs")
41712 (version "1.7")
41713 (source
41714 (origin
41715 (method url-fetch)
41716 (uri (pypi-uri "verboselogs" version))
41717 (sha256
41718 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
41719 (build-system pyproject-build-system)
41720 (arguments
41721 (list
41722 #:test-flags
41723 ;; Do not run pylint plugin test, as astroid is an old unsupported
41724 ;; version.
41725 #~(list "-k" "not test_pylint_plugin"
41726 "verboselogs/tests.py")))
41727 (native-inputs
41728 (list python-mock
41729 python-pytest
41730 python-setuptools))
41731 (home-page "https://verboselogs.readthedocs.io")
41732 (synopsis "Verbose logging level for Python's logging module")
41733 (description
41734 "The @code{verboselogs} package extends Python's @code{logging} module to
41735add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
41736 (license license:expat)))
41737
41738(define-public python-verlib2
41739 (package
41740 (name "python-verlib2")
41741 (version "0.3.1")
41742 (source
41743 (origin
41744 (method git-fetch)
41745 (uri (git-reference
41746 (url "https://github.com/pyveci/verlib2")
41747 (commit (string-append "v" version))))
41748 (file-name (git-file-name name version))
41749 (sha256
41750 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
41751 (build-system pyproject-build-system)
41752 (native-inputs
41753 (list python-pretend python-pytest python-setuptools))
41754 (home-page "https://github.com/pyveci/verlib2")
41755 (synopsis "Python versioning utilities")
41756 (description
41757 "This package provides a standalone variant of @code{distutils.version} and
41758@code{packaging.version}, without anything else.")
41759 (license license:bsd-2)))
41760
41761;; XXX: No updates since 2018, consider to remove when fails to build, it's a
41762;; leaf package.
41763(define-public python-version
41764 ;; No version tags available in the git repo; just using bare commit instead.
41765 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
41766 (revision "1"))
41767 (package
41768 (name "python-version")
41769 (version (git-version "0.0.2" revision commit))
41770 (source
41771 (origin
41772 (method git-fetch)
41773 (uri (git-reference
41774 (url "https://gitlab.com/halfak/python_version")
41775 (commit commit)))
41776 (file-name (git-file-name name version))
41777 (sha256
41778 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
41779 (build-system pyproject-build-system)
41780 (arguments
41781 (list #:tests? #f)) ;no tests
41782 (native-inputs
41783 (list python-setuptools))
41784 (home-page "https://gitlab.com/halfak/python_version")
41785 (synopsis "Python version checking utility")
41786 (description
41787 "This package provides a simple utility for checking the python version.")
41788 (license license:expat))))
41789
41790(define-public python-versioneer
41791 (package
41792 (name "python-versioneer")
41793 (version "0.29")
41794 (source
41795 (origin
41796 (method url-fetch)
41797 (uri (pypi-uri "versioneer" version))
41798 (sha256
41799 (base32
41800 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
41801 (patches (search-patches "python-versioneer-guix-support.patch"))))
41802 (build-system pyproject-build-system)
41803 (arguments
41804 (list
41805 ;; Minimize test requirements.
41806 #:test-flags
41807 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
41808 "--ignore=test/git/test_invocations.py"
41809 "--ignore=test/test_render.py")
41810 #:phases
41811 #~(modify-phases %standard-phases
41812 (add-before 'check 'pre-check
41813 (lambda _
41814 (invoke "python" "setup.py" "make_versioneer"
41815 "make_long_version_py_git"))))))
41816 (native-inputs
41817 (list git-minimal/pinned
41818 python-pytest
41819 python-setuptools
41820 python-wheel))
41821 (propagated-inputs
41822 (list python-tomli))
41823 (home-page "https://github.com/python-versioneer/python-versioneer")
41824 (synopsis "Version-string management for VCS-controlled trees")
41825 (description
41826 "@code{versioneer} is a tool for managing a recorded version number in
41827distutils-based python projects. The goal is to remove the tedious and
41828error-prone \"update the embedded version string\" step from your release
41829process.")
41830 (license license:unlicense)))
41831
41832(define-public python-verspec
41833 (package
41834 (name "python-verspec")
41835 (version "0.1.0")
41836 (source
41837 (origin
41838 (method url-fetch)
41839 (uri (pypi-uri "verspec" version))
41840 (sha256
41841 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
41842 (build-system pyproject-build-system)
41843 (arguments
41844 (list
41845 #:phases
41846 #~(modify-phases %standard-phases
41847 (add-before 'check 'pre-check
41848 (lambda _
41849 (invoke "touch" "test/__init__.py"))))))
41850 (native-inputs
41851 (list python-pretend
41852 python-pytest
41853 python-setuptools))
41854 (home-page "https://github.com/jimporter/verspec")
41855 (synopsis "Flexible version handling for Python")
41856 (description
41857 "This Python library handles software versions and specifiers. It is
41858adapted from the @code{packaging} package.")
41859 (license (list license:bsd-2 license:asl2.0))))
41860
41861(define-public python-vine
41862 (package
41863 (name "python-vine")
41864 (version "5.1.0")
41865 (source
41866 (origin
41867 (method url-fetch)
41868 (uri (pypi-uri "vine" version))
41869 (sha256
41870 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
41871 (build-system pyproject-build-system)
41872 (arguments
41873 (list
41874 #:test-flags
41875 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
41876 #~(list "-k" (string-join
41877 (list "not test_evaluate"
41878 "test_reverse"
41879 "test_cancel"
41880 "test_throw")
41881 " and not "))))
41882 (native-inputs
41883 (list python-pytest python-setuptools python-wheel))
41884 (home-page "https://github.com/celery/vine")
41885 (synopsis "Promises for Python")
41886 (description
41887 "@code{vine} provides a special implementation of promises in that it can
41888be used both for \"promise of a value\" and lazy evaluation. The biggest
41889upside for this is that everything in a promise can also be a promise,
41890e.g. filters, callbacks and errbacks can all be promises.")
41891 (license license:bsd-3)))
41892
41893(define-public python-virtualenv
41894 (package
41895 (name "python-virtualenv")
41896 (version "20.35.4")
41897 (source
41898 (origin
41899 (method git-fetch)
41900 (uri (git-reference
41901 (url "https://github.com/pypa/virtualenv")
41902 (commit version)))
41903 (file-name (git-file-name name version))
41904 (sha256
41905 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
41906 (build-system pyproject-build-system)
41907 (arguments
41908 (list
41909 ;; tests: 347 passed, 43 skipped, 8 deselected
41910 #:test-flags
41911 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
41912 (string-join ls "::")))
41913 '(("discovery/py_info/test_py_info.py"
41914 "test_fallback_existent_system_executable")
41915 ("discovery/test_discovery.py"
41916 "test_get_paths_no_path_env")
41917 ("create/via_global_ref/test_build_c_ext.py"
41918 "test_can_build_c_extensions[cpython3-posix]")
41919 ("create/via_global_ref/test_build_c_ext.py"
41920 "test_can_build_c_extensions[venv]")
41921 ("create/test_creator.py"
41922 "test_create_distutils_cfg[cpython3-posix]")
41923 ("create/test_creator.py"
41924 "test_create_distutils_cfg[venv]")
41925 ("seed/embed/test_bootstrap_link_via_app_data.py"
41926 "test_seed_link_via_app_data[True]")
41927 ("seed/embed/test_bootstrap_link_via_app_data.py"
41928 "test_seed_link_via_app_data[False]"))))))
41929 (native-inputs
41930 (list python-flaky
41931 python-hatch-vcs
41932 python-hatchling
41933 python-packaging
41934 python-pytest
41935 python-pytest-env
41936 python-pytest-freezer
41937 python-pytest-mock
41938 python-pytest-timeout
41939 python-setuptools
41940 python-time-machine))
41941 (propagated-inputs
41942 (list python-distlib
41943 python-filelock
41944 python-platformdirs))
41945 (home-page "https://virtualenv.pypa.io/")
41946 (synopsis "Virtual Python environment builder")
41947 (description
41948 "Virtualenv is a tool to create isolated Python environments.")
41949 (license license:expat)))
41950
41951(define-public python-vncdotool
41952 (package
41953 (name "python-vncdotool")
41954 (version "1.2.0")
41955 (source
41956 (origin
41957 (method git-fetch)
41958 (uri (git-reference
41959 (url "http://github.com/sibson/vncdotool")
41960 (commit (string-append "v" version))))
41961 (file-name (git-file-name name version))
41962 (sha256
41963 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
41964 (build-system pyproject-build-system)
41965 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
41966 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
41967 python-setuptools python-wheel))
41968 (home-page "http://github.com/sibson/vncdotool")
41969 (synopsis "Command line VNC client")
41970 (description
41971 "This package provides a Python command line VNC client. It can be
41972useful to automating interactions with virtual machines or hardware devices
41973that are otherwise difficult to control.")
41974 (license license:expat)))
41975
41976(define-public python-vncdotool-bootstrap
41977 (hidden-package
41978 (package/inherit python-vncdotool
41979 (arguments (list #:tests? #f))
41980 (native-inputs (list python-pexpect python-pytest python-setuptools
41981 python-wheel)))))
41982
41983(define-public python-vobject
41984 (package
41985 (name "python-vobject")
41986 (version "0.9.9")
41987 (source (origin
41988 (method url-fetch)
41989 (uri (pypi-uri "vobject" version))
41990 (sha256
41991 (base32
41992 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
41993 (build-system pyproject-build-system)
41994 (arguments
41995 '(;; The test suite relies on some non-portable Windows interfaces. Tests
41996 ;; are rewokred on master's HEAD.
41997 #:tests? #f))
41998 (native-inputs
41999 (list python-setuptools))
42000 (propagated-inputs
42001 (list python-dateutil
42002 python-pytz
42003 python-six)) ;it's dropped on master's HEAD
42004 (home-page "https://py-vobject.github.io/")
42005 (synopsis "Parse and generate vCard and vCalendar files")
42006 (description
42007 "Vobject is intended to be a full featured Python package for parsing
42008and generating vCard and vCalendar files. Currently, iCalendar files are
42009supported and well tested. vCard 3.0 files are supported, and all data should
42010be imported, but only a few components are understood in a sophisticated way.")
42011 (license license:asl2.0)))
42012
42013(define-public python-voluptuous
42014 (package
42015 (name "python-voluptuous")
42016 (version "0.15.2")
42017 (source
42018 (origin
42019 (method url-fetch)
42020 (uri (pypi-uri "voluptuous" version))
42021 (sha256
42022 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
42023 (build-system pyproject-build-system)
42024 (native-inputs
42025 (list python-pytest
42026 python-setuptools))
42027 (home-page "https://github.com/alecthomas/voluptuous")
42028 (synopsis "Python data validation library")
42029 (description
42030 "Voluptuous is a Python data validation library. It is primarily
42031intended for validating data coming into Python as JSON, YAML, etc.")
42032 (license license:bsd-3)))
42033
42034(define-public python-wadler-lindig
42035 (package
42036 (name "python-wadler-lindig")
42037 (version "0.1.7")
42038 (source
42039 (origin
42040 ;; GitHub includes the tests, unlike the PyPI tarball
42041 (method git-fetch)
42042 (uri (git-reference
42043 (url "https://github.com/patrick-kidger/wadler_lindig")
42044 (commit (string-append "v" version))))
42045 (file-name (git-file-name name version))
42046 (sha256
42047 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
42048 (build-system pyproject-build-system)
42049 (native-inputs (list python-hatchling python-pytest python-numpy))
42050 (home-page "https://docs.kidger.site/wadler_lindig")
42051 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
42052 (description
42053 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
42054library for Python that implements a simplified version of the Wadler-Lindig
42055algorithm. Designed to consume less horizontal space than Python's
42056built-in pprint.pprint, it produces compact, well-formatted representations
42057even for complex custom types.")
42058 (license license:asl2.0)))
42059
42060(define-public python-wait-for2
42061 (package
42062 (name "python-wait-for2")
42063 (version "0.4.1")
42064 (source
42065 (origin
42066 (method git-fetch)
42067 (uri (git-reference
42068 (url "https://github.com/Traktormaster/wait-for2")
42069 (commit (string-append "v" version))))
42070 (file-name (git-file-name name version))
42071 (sha256
42072 (base32 "08911yby18sw2y6njn1fqlwvf9j2aay0p5d3wykdlcj36nyxfv1w"))))
42073 (build-system pyproject-build-system)
42074 (native-inputs
42075 (list python-pytest
42076 python-pytest-asyncio
42077 python-setuptools))
42078 (home-page "https://github.com/Traktormaster/wait-for2")
42079 (synopsis "Asyncio wait_for handling simultaneous cancellation and future completion")
42080 (description
42081 "This package provide an alternate implementation of @code{asyncio.wait_for()}
42082introduced in Python 3.12. It handles several edge cases like simultaneous
42083cancellation of wait and completion of future differently and consistently
42084across Python versions 3.7+.")
42085 (license license:asl2.0)))
42086
42087(define-public python-wand
42088 (package
42089 (name "python-wand")
42090 (version "0.7.1")
42091 (source
42092 (origin
42093 (method git-fetch)
42094 (uri (git-reference
42095 (url "https://github.com/emcconville/wand")
42096 (commit version)))
42097 (file-name (git-file-name name version))
42098 (sha256
42099 (base32 "0yzv3jwbfg0h2n102718cw392gx2dkrbpj4b54khszrcgrsifa2a"))))
42100 (build-system pyproject-build-system)
42101 (arguments
42102 (list
42103 #:phases
42104 #~(modify-phases %standard-phases
42105 (add-after 'unpack 'hardcode-lib-path
42106 (lambda _
42107 (substitute* "wand/api.py"
42108 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
42109 (string-append "\"" #$(this-package-input "imagemagick") "\""))
42110 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
42111 "\".Q16\"")))))))
42112 (native-inputs
42113 (list python-setuptools python-pytest))
42114 (inputs
42115 (list imagemagick))
42116 (home-page "https://docs.wand-py.org/")
42117 (synopsis "MagickWand API binding for Python")
42118 (description
42119 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
42120 (license license:expat)))
42121
42122(define-public python-wasabi
42123 (package
42124 (name "python-wasabi")
42125 (version "1.1.3")
42126 (source
42127 (origin
42128 (method url-fetch)
42129 (uri (pypi-uri "wasabi" version))
42130 (sha256
42131 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
42132 (build-system pyproject-build-system)
42133 (arguments
42134 (list
42135 #:test-flags
42136 ;; Test requires nbconvert which is huge.
42137 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
42138 (native-inputs
42139 (list python-pytest
42140 python-setuptools))
42141 (propagated-inputs
42142 (list python-colorama))
42143 (home-page "https://github.com/ines/wasabi")
42144 (synopsis "Console printing and formatting toolkit")
42145 (description
42146 "This package provides a lightweight console printing and formatting
42147toolkit for Python.")
42148 (license license:expat)))
42149
42150(define-public python-watchdog
42151 (package
42152 (name "python-watchdog")
42153 (version "6.0.0")
42154 (source
42155 (origin
42156 (method url-fetch)
42157 (uri (pypi-uri "watchdog" version))
42158 (sha256
42159 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
42160 (build-system pyproject-build-system)
42161 (arguments
42162 (list
42163 #:test-flags
42164 #~(list "-k" (string-join
42165 (list "not test_kill_auto_restart"
42166 "test_auto_restart_on_file_change_debounce"
42167 ;; Fails with too many open files.
42168 "test_select_fd")
42169 " and not "))))
42170 (native-inputs
42171 (list python-pytest python-setuptools))
42172 (propagated-inputs
42173 (list python-pyyaml))
42174 (home-page "https://github.com/gorakhargosh/watchdog")
42175 (synopsis "File system events monitoring")
42176 (description
42177 "This package provides a way to monitor file system events such as a file
42178modification and trigger an action. This is similar to inotify, but
42179portable.")
42180 (license license:asl2.0)))
42181
42182(define-public python-watchfiles
42183 (package
42184 (name "python-watchfiles")
42185 (version "1.1.1")
42186 (source
42187 (origin
42188 (method git-fetch)
42189 (uri (git-reference
42190 (url "https://github.com/samuelcolvin/watchfiles")
42191 (commit (string-append "v" version))))
42192 (file-name (git-file-name name version))
42193 (sha256
42194 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
42195 (build-system pyproject-build-system)
42196 (arguments
42197 (list
42198 ;; Missing file in source.
42199 #:test-flags ''("-k" "not test_docs_examples")
42200 #:imported-modules `(,@%cargo-build-system-modules
42201 ,@%pyproject-build-system-modules)
42202 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
42203 (guix build pyproject-build-system)
42204 (guix build utils))
42205 #:phases
42206 #~(modify-phases %standard-phases
42207 (add-after 'unpack 'prepare-cargo-build-system
42208 (lambda args
42209 (for-each
42210 (lambda (phase)
42211 (format #t "Running cargo phase: ~a~%" phase)
42212 (apply (assoc-ref cargo:%standard-phases phase)
42213 #:cargo-target #$(cargo-triplet)
42214 args))
42215 '(unpack-rust-crates
42216 configure
42217 check-for-pregenerated-files
42218 patch-cargo-checksums))))
42219 (add-after 'build 'install-rust-library
42220 (lambda _
42221 (copy-file "target/release/lib_rust_notify.so"
42222 "watchfiles/_rust_notify.so"))))))
42223 (native-inputs
42224 (append
42225 (list maturin
42226 python-anyio
42227 python-dirty-equals
42228 python-pytest
42229 python-pytest-mock
42230 python-pytest-timeout
42231 rust
42232 `(,rust "cargo"))
42233 (or (and=> (%current-target-system)
42234 (compose list make-rust-sysroot))
42235 '())))
42236 (inputs
42237 (cargo-inputs 'python-watchfiles))
42238 (propagated-inputs
42239 (list python-anyio))
42240 (home-page "https://github.com/samuelcolvin/watchfiles")
42241 (synopsis "Simple, modern file watching and code reload in Python")
42242 (description
42243 "Simple, modern file watching and code reload in Python inspired by
42244@code{watchdog}. Among the differences are a unified approach for each
42245operating systems and an elegant approach to concurrency using threading.")
42246 (license license:expat)))
42247
42248(define-public python-wcmatch
42249 (package
42250 (name "python-wcmatch")
42251 (version "10.1")
42252 (source
42253 (origin
42254 (method git-fetch)
42255 (uri (git-reference
42256 (url "https://github.com/facelessuser/wcmatch")
42257 (commit version)))
42258 (file-name (git-file-name name version))
42259 (sha256
42260 (base32 "1pz6wyz2hlckl88y6z7v32sm5mfp2mqgar4z5f1kz7mixsdpmh41"))))
42261 (build-system pyproject-build-system)
42262 (arguments
42263 (list #:test-flags
42264 ;; ``test_glob_match_real_outside_curdir`` walks paths outside
42265 ;; the build directory which the sandbox does not permit.
42266 #~(list "-k" "not test_glob_match_real_outside_curdir")
42267 #:phases
42268 #~(modify-phases %standard-phases
42269 (add-before 'check 'set-home
42270 (lambda _
42271 (setenv "HOME" (getcwd)))))))
42272 (native-inputs
42273 (list python-hatchling
42274 python-pytest))
42275 (propagated-inputs
42276 (list python-bracex))
42277 (home-page "https://facelessuser.github.io/wcmatch/")
42278 (synopsis "Wildcard and glob file name matcher")
42279 (description
42280 "Wcmatch provides an enhanced @code{fnmatch}, @code{glob}, and
42281@code{pathlib} library. It adds features such as brace expansion,extended
42282glob patterns, and recursive globbing with configurable behavior.")
42283 (license license:expat)))
42284
42285(define-public python-wcwidth
42286 (package
42287 (name "python-wcwidth")
42288 (version "0.2.13")
42289 (source (origin
42290 (method url-fetch)
42291 (uri (pypi-uri "wcwidth" version))
42292 (sha256
42293 (base32
42294 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
42295 (build-system pyproject-build-system)
42296 (native-inputs (list python-pytest python-setuptools))
42297 (home-page "https://github.com/jquast/wcwidth")
42298 (synopsis "Measure number of terminal column cells of wide-character codes")
42299 (description
42300 "Wcwidth measures the number of terminal column cells of wide-character
42301codes. It is useful for those implementing a terminal emulator, or programs
42302that carefully produce output to be interpreted by one. It is a Python
42303implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
42304in POSIX.1-2001 and POSIX.1-2008.")
42305 (license license:expat)))
42306
42307(define-public python-whatever
42308 (package
42309 (name "python-whatever")
42310 (version "0.7")
42311 (source
42312 (origin
42313 (method git-fetch)
42314 (uri (git-reference
42315 (url "https://github.com/Suor/whatever")
42316 (commit version)))
42317 (file-name (git-file-name name version))
42318 (sha256
42319 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
42320 (build-system pyproject-build-system)
42321 (native-inputs
42322 (list python-pytest python-setuptools python-wheel))
42323 (home-page "https://github.com/Suor/whatever")
42324 (synopsis "Make anonymous functions by partial application of operators")
42325 (description "@code{whatever} provides an easy way to make anonymous
42326functions by partial application of operators.")
42327 (license license:bsd-3)))
42328
42329(define-public python-whatthepatch
42330 (package
42331 (name "python-whatthepatch")
42332 (version "1.0.7")
42333 (source
42334 (origin
42335 (method url-fetch)
42336 (uri (pypi-uri "whatthepatch" version))
42337 (sha256
42338 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
42339 (build-system pyproject-build-system)
42340 (native-inputs (list python-pytest python-setuptools))
42341 (home-page "https://github.com/cscorley/whatthepatch")
42342 (synopsis "Patch parsing and application library")
42343 (description
42344 "This package provides a patch parsing and application library.")
42345 (license license:expat)))
42346
42347(define-public python-wheel-filename
42348 (package
42349 (name "python-wheel-filename")
42350 (version "1.4.2")
42351 (source
42352 (origin
42353 (method url-fetch)
42354 (uri (pypi-uri "wheel_filename" version))
42355 (sha256
42356 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
42357 (build-system pyproject-build-system)
42358 (native-inputs (list python-hatchling python-pytest))
42359 (home-page "https://github.com/wheelodex/wheel-filename")
42360 (synopsis "Parse wheel filenames")
42361 (description
42362 "This software allows you to verify
42363@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
42364filenames and parse them into their component fields.
42365
42366This package adheres strictly to the standard, with the following
42367exceptions:
42368
42369@itemize @bullet
42370@item
42371Version components may be any sequence of the relevant set of
42372characters; they are not verified for PEP 440 compliance.
42373@item
42374The @file{.whl} file extension is matched case-insensitively.
42375@end itemize")
42376 (license license:expat)))
42377
42378(define-public python-whenever
42379 (package
42380 (name "python-whenever")
42381 (version "0.9.2")
42382 (source
42383 (origin
42384 (method url-fetch)
42385 (uri (pypi-uri "whenever" version))
42386 (sha256
42387 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
42388 (build-system pyproject-build-system)
42389 (arguments
42390 (list
42391 ;; tests: 2170 passed, 3 skipped, 2 warnings
42392 #:phases
42393 #~(modify-phases %standard-phases
42394 ;; Use the pure python version
42395 (add-before 'build 'setenv
42396 (lambda _
42397 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
42398 (add-before 'check 'set-check-environment
42399 (lambda* (#:key inputs #:allow-other-keys)
42400 (setenv "TZ" "UTC")
42401 (setenv "TZDIR"
42402 (search-input-directory inputs
42403 "share/zoneinfo")))))))
42404 (propagated-inputs
42405 (list python-time-machine python-tzdata python-tzlocal))
42406 (native-inputs
42407 (list python-pytest
42408 python-setuptools
42409 tzdata-for-tests))
42410 (home-page "https://whenever.readthedocs.io/")
42411 (synopsis "Modern datetime library for Python")
42412 (description "Modern datetime library for Python. Supports:
42413@itemize
42414@item DST-safe arithmetic
42415@item Nanosecond precision
42416@item Date arithmetic
42417@end itemize")
42418 (license license:expat)))
42419
42420;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
42421(define-public python-whichcraft
42422 (package
42423 (name "python-whichcraft")
42424 (version "0.6.1")
42425 (source
42426 (origin
42427 (method url-fetch)
42428 (uri (pypi-uri "whichcraft" version))
42429 (sha256
42430 (base32
42431 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
42432 (build-system pyproject-build-system)
42433 (native-inputs
42434 (list python-pytest python-setuptools))
42435 (home-page "https://github.com/pydanny/whichcraft")
42436 (synopsis "Cross-platform cross-python shutil.which functionality")
42437 (description
42438 "This package provides a shim of the shutil.which function that's
42439designed to work across multiple versions of Python.")
42440 (license license:bsd-3)))
42441
42442(define-public python-widgetsnbextension
42443 (package
42444 (name "python-widgetsnbextension")
42445 (version "4.0.14")
42446 (source
42447 (origin
42448 (method url-fetch)
42449 (uri (pypi-uri "widgetsnbextension" version))
42450 (sha256
42451 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
42452 (build-system pyproject-build-system)
42453 (arguments
42454 (list #:tests? #f)) ;no tests in PyPI or git
42455 (native-inputs
42456 (list python-jupyter-packaging
42457 python-setuptools))
42458 (home-page "https://ipython.org")
42459 (synopsis "IPython HTML widgets for Jupyter")
42460 (description "This package provides interactive HTML widgets for Jupyter
42461notebooks.")
42462 (license license:bsd-3)))
42463
42464(define-public python-wrapt
42465 (package
42466 (name "python-wrapt")
42467 (version "2.0.1")
42468 (source
42469 (origin
42470 (method url-fetch)
42471 (uri (pypi-uri "wrapt" version))
42472 (sha256
42473 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
42474 (build-system pyproject-build-system)
42475 (arguments
42476 (list
42477 ;; tests: 562 passed, 1 deselected
42478 #:test-flags
42479 ;; AssertionError: Output did not match expected for
42480 ;; mypy_function_wrapper_fn_t6.py
42481 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
42482 (native-inputs
42483 (list python-mypy-for-tests ;hard dependencies in tests
42484 python-pytest
42485 python-setuptools))
42486 (home-page "https://github.com/GrahamDumpleton/wrapt")
42487 (synopsis "Module for decorators, wrappers and monkey patching")
42488 (description
42489 "The aim of the wrapt module is to provide a transparent object proxy for
42490 Python, which can be used as the basis for the construction of function
42491 wrappers and decorator functions.")
42492 (license license:bsd-2)))
42493
42494(define-public python-wurlitzer
42495 (package
42496 (name "python-wurlitzer")
42497 (version "3.1.1")
42498 (source
42499 (origin
42500 (method url-fetch)
42501 (uri (pypi-uri "wurlitzer" version))
42502 (sha256
42503 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
42504 (build-system pyproject-build-system)
42505 (arguments
42506 (list #:test-flags #~(list "test.py")))
42507 (native-inputs
42508 (list python-pytest
42509 python-setuptools))
42510 (home-page "https://github.com/minrk/wurlitzer")
42511 (synopsis "Capture C-level output in context managers")
42512 (description
42513 "This library helps to redirect @code{sys.stdout} to a stream or a file
42514while executing some piece of code, including C code running within a Python
42515process.")
42516 (license license:expat)))
42517
42518(define-public python-xattr
42519 (package
42520 (name "python-xattr")
42521 (version "1.2.0")
42522 (source
42523 (origin
42524 (method url-fetch)
42525 (uri (pypi-uri "xattr" version))
42526 (sha256
42527 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
42528 (build-system pyproject-build-system)
42529 (native-inputs
42530 (list python-pytest
42531 python-setuptools))
42532 (propagated-inputs
42533 (list python-cffi))
42534 (home-page "https://github.com/xattr/xattr")
42535 (synopsis "Python wrapper for extended file system attributes")
42536 (description "This package provides a Python wrapper for using extended
42537file system attributes. Extended attributes extend the basic attributes of files
42538and directories in the file system. They are stored as name:data pairs
42539associated with file system objects (files, directories, symlinks, etc).")
42540 (license license:expat)))
42541
42542(define-public python-xdg-base-dirs
42543 (package
42544 (name "python-xdg-base-dirs")
42545 (version "6.0.2")
42546 (source
42547 (origin
42548 (method git-fetch)
42549 (uri (git-reference
42550 (url "https://github.com/srstevenson/xdg-base-dirs")
42551 (commit version)))
42552 (file-name (git-file-name name version))
42553 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
42554 (modules '((guix build utils)))
42555 ;; All pytest options are for coverage; remove snippet in next release:
42556 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
42557 (snippet #~(substitute* "pyproject.toml"
42558 (("^addopts = .*") "")))))
42559 (build-system pyproject-build-system)
42560 (native-inputs
42561 (list python-poetry-core python-pytest))
42562 (home-page "https://github.com/srstevenson/xdg-base-dirs")
42563 (synopsis "Variables defined by the XDG Base Directory Specification")
42564 (description "xdg-base-dirs is a Python module that provides functions to
42565return paths to the directories defined by the XDG Base Directory
42566Specification, to save you from duplicating the same snippet of logic in every
42567Python utility you write that deals with user cache, configuration, or data
42568files.")
42569 (license license:isc)))
42570
42571;; XXX: Deprecated on <2026-02-19>.
42572(define-deprecated-package python-xdg
42573 python-xdg-base-dirs)
42574
42575(define-public python-xkbcommon
42576 (package
42577 (name "python-xkbcommon")
42578 (version "1.0.1")
42579 (source
42580 (origin
42581 (method git-fetch)
42582 (uri (git-reference
42583 (url "https://github.com/sde1000/python-xkbcommon")
42584 (commit (string-append "v" version))))
42585 (file-name (git-file-name name version))
42586 (sha256
42587 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
42588 (build-system pyproject-build-system)
42589 (propagated-inputs (list python-cffi))
42590 (native-inputs (list libxkbcommon python-setuptools))
42591 (arguments
42592 (list
42593 #:test-backend
42594 #~'unittest
42595 #:phases
42596 #~(modify-phases %standard-phases
42597 (add-before 'check 'cleanup
42598 (lambda _
42599 (delete-file-recursively "xkbcommon"))))))
42600 (home-page "https://github.com/sde1000/python-xkbcommon")
42601 (synopsis "Bindings for libxkbcommon using cffi")
42602 (description "Bindings for libxkbcommon using cffi.")
42603 (license license:expat)))
42604
42605(define-public python-xlib
42606 (package
42607 (name "python-xlib")
42608 (version "0.33")
42609 (source
42610 (origin
42611 (method git-fetch)
42612 (uri (git-reference
42613 (url "https://github.com/python-xlib/python-xlib")
42614 (commit version)))
42615 (file-name (git-file-name name version))
42616 (sha256
42617 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
42618 (build-system pyproject-build-system)
42619 (arguments
42620 `(#:phases
42621 (modify-phases %standard-phases
42622 (add-before 'check 'start-xserver
42623 (lambda* (#:key inputs #:allow-other-keys)
42624 (let ((xorg-server (assoc-ref inputs "xorg-server")))
42625 ;; There must be a running X server and make check doesn't
42626 ;; start one. Therefore we must do it.
42627 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
42628 (setenv "DISPLAY" ":1")))))))
42629 (native-inputs
42630 (list python-mock
42631 python-pytest
42632 python-setuptools
42633 xorg-server))
42634 (propagated-inputs
42635 (list python-six))
42636 (home-page "https://github.com/python-xlib/python-xlib")
42637 (synopsis "Python X11 client library")
42638 (description
42639 "The Python X Library is intended to be a fully functional
42640X client library for Python programs. It is useful to implement
42641low-level X clients. It is written entirely in Python.")
42642 (license license:gpl2+)))
42643
42644(define-public python-xlrd
42645 (package
42646 (name "python-xlrd")
42647 (version "2.0.2")
42648 (source
42649 (origin
42650 (method git-fetch) ;no tests in PyPI archive
42651 (uri (git-reference
42652 (url "https://github.com/python-excel/xlrd")
42653 (commit version)))
42654 (file-name (git-file-name name version))
42655 (sha256
42656 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
42657 (build-system pyproject-build-system)
42658 (native-inputs
42659 (list python-pytest
42660 python-setuptools))
42661 (home-page "https://www.python-excel.org/")
42662 (synopsis "Library for extracting data from Excel files")
42663 (description "This package provides a library to extract data from
42664spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
42665@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
42666Unicode-aware. It is not intended as an end-user tool.")
42667 (license license:bsd-3)))
42668
42669(define-public python-xlsxwriter
42670 (package
42671 (name "python-xlsxwriter")
42672 (version "3.2.0")
42673 (source
42674 (origin
42675 ;; There are no tests in the PyPI tarball.
42676 (method git-fetch)
42677 (uri (git-reference
42678 (url "https://github.com/jmcnamara/XlsxWriter")
42679 (commit (string-append "RELEASE_" version))))
42680 (file-name (git-file-name name version))
42681 (sha256
42682 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
42683 (build-system pyproject-build-system)
42684 (native-inputs
42685 (list python-setuptools
42686 python-wheel))
42687 (home-page "https://github.com/jmcnamara/XlsxWriter")
42688 (synopsis "Python module for creating Excel XLSX files")
42689 (description
42690 "XlsxWriter is a Python module that can be used to write text, numbers,
42691formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
42692 (license license:bsd-2)))
42693
42694;;; Note: this package is unmaintained since 2018 (archived on GitHub).
42695(define-public python-xlwt
42696 (package
42697 (name "python-xlwt")
42698 (version "1.3.0")
42699 (source
42700 (origin
42701 (method url-fetch)
42702 (uri (pypi-uri "xlwt" version))
42703 (sha256
42704 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
42705 (build-system pyproject-build-system)
42706 (native-inputs (list python-pytest python-setuptools python-wheel))
42707 (home-page "https://www.python-excel.org/")
42708 (synopsis "Library for creating spreadsheet Excel files")
42709 (description
42710 "@code{xlwt} is a library for writing data and formatting information to
42711older Excel files (i.e. .xls). The package itself is pure Python with no
42712dependencies on modules or packages outside the standard Python distribution.
42713It is not intended as an end-user tool.")
42714 (license license:bsd-3)))
42715
42716(define-public python-xmldiff
42717 (package
42718 (name "python-xmldiff")
42719 (version "3.0b1")
42720 (source
42721 (origin
42722 (method git-fetch)
42723 (uri (git-reference
42724 (url "https://github.com/Shoobx/xmldiff")
42725 (commit version)))
42726 (file-name (git-file-name name version))
42727 (sha256
42728 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
42729 (build-system pyproject-build-system)
42730 (native-inputs (list python-pytest python-setuptools))
42731 (propagated-inputs (list python-lxml))
42732 (home-page "https://github.com/Shoobx/xmldiff")
42733 (synopsis "Creates diffs of XML files")
42734 (description "This Python tool figures out the differences between two
42735similar XML files, in the same way the @command{diff} utility does it.")
42736 (license license:expat)))
42737
42738(define-public python-xmlsec
42739 (package
42740 (name "python-xmlsec")
42741 (version "1.3.17")
42742 (source
42743 (origin
42744 (method git-fetch)
42745 (uri (git-reference
42746 (url "https://github.com/xmlsec/python-xmlsec")
42747 (commit version)))
42748 (file-name (git-file-name name version))
42749 (sha256
42750 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
42751 (build-system pyproject-build-system)
42752 (arguments
42753 (list
42754 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
42755 #:test-flags #~(list "-n" "1")))
42756 (inputs (list openssl libltdl libxslt libxml2))
42757 (propagated-inputs (list python-lxml xmlsec-openssl))
42758 (native-inputs (list pkg-config
42759 python-lxml
42760 python-pkgconfig
42761 python-pytest
42762 python-pytest-xdist
42763 python-setuptools
42764 python-setuptools-scm
42765 python-wheel))
42766 (home-page "https://github.com/xmlsec/python-xmlsec")
42767 (synopsis "Python bindings for the XML Security Library")
42768 (description "This package provides Python bindings for the XML Security
42769Library.")
42770 (license license:expat)))
42771
42772(define-public python-xmp-toolkit
42773 (package
42774 (name "python-xmp-toolkit")
42775 (version "2.1.0")
42776 (source
42777 (origin
42778 (method url-fetch)
42779 (uri (pypi-uri "python_xmp_toolkit" version))
42780 (sha256
42781 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
42782 (build-system pyproject-build-system)
42783 (arguments
42784 (list
42785 #:phases
42786 #~(modify-phases %standard-phases
42787 (add-after 'unpack 'patch-source
42788 (lambda* (#:key inputs #:allow-other-keys)
42789 (substitute* "libxmp/exempi.py"
42790 (("ctypes.util.find_library\\('exempi'\\)")
42791 (format #f "~s" (search-input-file
42792 inputs "lib/libexempi.so")))))))))
42793 (native-inputs
42794 (list python-pytest
42795 python-flit-core))
42796 (inputs
42797 (list exempi))
42798 (propagated-inputs
42799 (list python-pytz))
42800 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
42801 (synopsis "Python XMP Toolkit for working with metadata")
42802 (description "Python XMP Toolkit is a library for working with XMP
42803metadata, as well as reading/writing XMP metadata stored in many different
42804file formats.
42805
42806Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
42807based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
42808are easily incorporated into the library with a minimum amount of work.")
42809 (license license:bsd-3)))
42810
42811(define-public python-yamlcore
42812 (package
42813 (name "python-yamlcore")
42814 (version "0.0.4")
42815 (source
42816 (origin
42817 (method git-fetch)
42818 (uri (git-reference
42819 (url "https://github.com/perlpunk/pyyaml-core")
42820 (commit (string-append "v" version))))
42821 (file-name (git-file-name name version))
42822 (sha256
42823 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
42824 (build-system pyproject-build-system)
42825 (arguments
42826 (list
42827 #:phases
42828 #~(modify-phases %standard-phases
42829 (add-after 'unpack 'fix-test-file-names
42830 (lambda _
42831 (rename-file "tests/test-schema.py" "tests/test_schema.py")
42832 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
42833 (native-inputs (list python-pytest python-setuptools))
42834 (inputs (list python-pyyaml))
42835 (home-page "https://github.com/perlpunk/pyyaml-core")
42836 (synopsis "YAML 1.2 support for PyYAML")
42837 (description "This module can be used on top of PyYAML to load YAML 1.2
42838files.")
42839 (license license:expat)))
42840
42841(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
42842
42843(define-public python-yamllint
42844 (package
42845 (name "python-yamllint")
42846 (version "1.37.1")
42847 (source
42848 (origin
42849 (method url-fetch)
42850 (uri (pypi-uri "yamllint" version))
42851 (sha256
42852 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
42853 (build-system pyproject-build-system)
42854 (arguments
42855 (list #:test-backend #~'unittest))
42856 (native-inputs
42857 (list python-setuptools))
42858 (propagated-inputs
42859 (list python-pathspec python-pyyaml))
42860 (home-page "https://github.com/adrienverge/yamllint")
42861 (synopsis "Linter for YAML files")
42862 (description
42863 "Yamllint is a linter for YAML files. yamllint does not only check for
42864syntax validity, but for weirdnesses like key repetition and cosmetic problems
42865such as lines length, trailing spaces, indentation, etc.")
42866 (license license:gpl3+)))
42867
42868(define-public python-yamlloader
42869 (package
42870 (name "python-yamlloader")
42871 (version "1.6.0")
42872 (source
42873 (origin
42874 (method url-fetch)
42875 (uri (pypi-uri "yamlloader" version))
42876 (sha256
42877 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
42878 (build-system pyproject-build-system)
42879 (arguments
42880 (list #:test-backend #~'unittest
42881 #:test-flags #~(list "discover" "-v")))
42882 (native-inputs
42883 (list python-hatch-vcs
42884 python-hatchling
42885 python-hypothesis
42886 python-pytest))
42887 (propagated-inputs
42888 (list python-pyyaml))
42889 (home-page "https://github.com/Phynix/yamlloader")
42890 (synopsis "Ordered YAML loader and dumper for PyYAML")
42891 (description
42892 "This package provides loaders and dumpers for PyYAML. Currently, an
42893OrderedDict loader/dumper is implemented, allowing to keep items order when
42894loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
42895dicts are supported and are the default items to be loaded to. As of Python
428963.7 preservation of insertion order is a language feature of regular dicts.)
42897It was originally mirrored from
42898@url{https://github.com/fmenabe/python-yamlordereddictloader,
42899yamlordereddict}.")
42900 (license license:expat)))
42901
42902;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
42903;; an improved version of this library with unit tests, performance
42904;; improvements (by providing access to the C implementation of PyYAML) and is
42905;; more actively developed.
42906(define-public python-yamlordereddictloader
42907 (package
42908 (name "python-yamlordereddictloader")
42909 (version "0.4.2")
42910 (source
42911 (origin
42912 (method git-fetch)
42913 (uri (git-reference
42914 (url "https://github.com/fmenabe/python-yamlordereddictloader")
42915 (commit version)))
42916 (file-name (git-file-name name version))
42917 (sha256
42918 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
42919 (build-system pyproject-build-system)
42920 (arguments
42921 (list #:tests? #f)) ;no tests
42922 (native-inputs
42923 (list python-setuptools))
42924 (propagated-inputs
42925 (list python-pyyaml))
42926 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
42927 (synopsis "Loader and a dumper for PyYAML")
42928 (description
42929 "yamlordereddictloader is a Python package that provides a loader and a
42930dumper for PyYAML allowing to keep items order when loading a file (by putting
42931them in OrderedDict objects) and to manage OrderedDict objects when dumping to
42932a file.")
42933 (license license:expat)))
42934
42935(define-public python-yapf
42936 (package
42937 (name "python-yapf")
42938 (version "0.43.0")
42939 (source
42940 (origin
42941 (method url-fetch)
42942 (uri (pypi-uri "yapf" version))
42943 (sha256
42944 (base32
42945 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
42946 (build-system pyproject-build-system)
42947 (propagated-inputs
42948 (list python-platformdirs python-tomli))
42949 (native-inputs
42950 (list python-pytest python-setuptools python-wheel))
42951 (home-page "https://github.com/google/yapf")
42952 (synopsis "Formatter for Python code")
42953 (description "YAPF is a formatter for Python code. It's based off of
42954@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
42955takes the code and reformats it to the best formatting that conforms to the
42956style guide, even if the original code didn't violate the style guide.")
42957 (license license:asl2.0)))
42958
42959(define-public python-yapsy
42960 (package
42961 (name "python-yapsy")
42962 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
42963 ;; 3.12+; move back to git tag when released.
42964 (properties '((commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
42965 (revision . "0")))
42966 (version (git-version "1.12.2"
42967 (assoc-ref properties 'revision)
42968 (assoc-ref properties 'commit)))
42969 (source
42970 (origin
42971 (method git-fetch)
42972 (uri (git-reference
42973 (url "https://github.com/tibonihoo/yapsy")
42974 (commit (assoc-ref properties 'commit))))
42975 (file-name (git-file-name name version))
42976 (sha256
42977 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
42978 (build-system pyproject-build-system)
42979 (native-inputs
42980 (list python-pytest python-setuptools))
42981 (home-page "https://yapsy.sourceforge.net")
42982 (synopsis "Simple plugin system for Python applications")
42983 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
42984implementing the core mechanisms needed to build a plugin system into a wider
42985application.
42986
42987The main purpose is to depend only on Python's standard libraries and to
42988implement only the basic functionalities needed to detect, load and keep track
42989of several plugins.")
42990 (license license:bsd-3)))
42991
42992(define-public python-yaspin
42993 (package
42994 (name "python-yaspin")
42995 (version "3.2.0")
42996 (source
42997 (origin
42998 (method url-fetch)
42999 (uri
43000 (pypi-uri "yaspin" version))
43001 (sha256
43002 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
43003 (build-system pyproject-build-system)
43004 ;; tests: 3007 passed, 1758 skipped
43005 (native-inputs
43006 (list python-poetry-core
43007 python-pytest
43008 python-pytest-mock))
43009 (propagated-inputs
43010 (list python-termcolor-next))
43011 (home-page "https://github.com/pavdmyt/yaspin")
43012 (synopsis "Yet Another Terminal Spinner")
43013 (description "Yaspin provides a terminal spinner to indicate the progress
43014during long operations.")
43015 (license license:expat)))
43016
43017(define-public python-yattag
43018 (package
43019 (name "python-yattag")
43020 (version "1.16.1")
43021 (source
43022 (origin
43023 (method url-fetch)
43024 (uri (pypi-uri "yattag" version))
43025 (sha256
43026 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
43027 (build-system pyproject-build-system)
43028 (native-inputs
43029 (list python-pytest
43030 python-setuptools
43031 python-wheel))
43032 (home-page "https://www.yattag.org/")
43033 (synopsis "HTML or XML generator for Python")
43034 (description
43035 "Yattag is a Python library for generating HTML or XML in a pythonic
43036way.")
43037 (license license:lgpl2.1)))
43038
43039(define-public python-yq
43040 (package
43041 (name "python-yq")
43042 (version "3.4.3")
43043 (source
43044 (origin
43045 (method url-fetch)
43046 (uri (pypi-uri "yq" version))
43047 (sha256
43048 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
43049 (build-system pyproject-build-system)
43050 (arguments
43051 (list
43052 #:test-backend #~'custom
43053 #:test-flags #~(list "test/test.py" "-v")
43054 #:phases
43055 #~(modify-phases %standard-phases
43056 (add-after 'unpack 'patch
43057 (lambda _
43058 (substitute* "yq/__init__.py"
43059 (("Popen\\(\\[\"jq")
43060 (string-append
43061 "Popen([\""
43062 #$(this-package-input "jq") "/bin/jq"))))))))
43063 (native-inputs
43064 (list python-hatchling
43065 python-hatch-vcs))
43066 (inputs
43067 (list jq))
43068 (propagated-inputs
43069 (list python-argcomplete
43070 python-pyyaml
43071 python-tomlkit
43072 python-xmltodict))
43073 (home-page "https://github.com/kislyuk/yq")
43074 (synopsis "Command-line YAML/XML processor")
43075 (description
43076 "This package provides @command{yq} and @command{xq} for processing YAML
43077and XML respectively. The processing is done through @command{jq},
43078@command{jq} filters can be used to process the data as it passes through.")
43079 (license license:asl2.0)))
43080
43081(define-public python-yte
43082 (package
43083 (name "python-yte")
43084 (version "1.8.1") ;TODO higher versions depend on uv_build
43085 (source
43086 (origin
43087 (method git-fetch)
43088 (uri (git-reference
43089 (url "https://github.com/koesterlab/yte")
43090 (commit (string-append "v" version))))
43091 (sha256
43092 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
43093 (build-system pyproject-build-system)
43094 (arguments
43095 (list
43096 #:test-flags #~(list "tests.py")
43097 #:phases
43098 '(modify-phases %standard-phases
43099 (add-after 'unpack 'set-HOME
43100 (lambda _ (setenv "HOME" "/tmp"))))))
43101 (propagated-inputs (list python-dpath python-plac python-pyyaml))
43102 (native-inputs (list python-numpy python-poetry-core python-pytest))
43103 (home-page "https://github.com/koesterlab/yte")
43104 (synopsis "YAML template engine with Python expressions")
43105 (description
43106 "This package provides a YAML template engine with Python expressions.")
43107 (license license:expat)))
43108
43109(define-public python-zarr
43110 (package
43111 (name "python-zarr")
43112 (version "2.18.7")
43113 (source
43114 (origin
43115 (method url-fetch)
43116 (uri (pypi-uri "zarr" version))
43117 (sha256
43118 (base32
43119 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
43120 (build-system pyproject-build-system)
43121 (arguments
43122 (list
43123 #:test-flags
43124 #~(list "--numprocesses" (number->string (parallel-job-count))
43125 ;; This tests are flaky. The pass several times on my laptop
43126 ;; but occasionally fail. They fail pretty reliably on the
43127 ;; build farm.
43128 "-k" (string-append "not test_lazy_loader and not open_array"
43129 ;; File not found.
43130 " and not test_filesystem_path"))
43131 #:phases
43132 #~(modify-phases %standard-phases
43133 (add-before 'build 'set-version
43134 (lambda _
43135 (substitute* "pyproject.toml"
43136 (("^version_file.*") "")
43137 (("dynamic = \\[\"version\"\\]")
43138 (string-append "version = \"" #$version "\"")))))
43139 (add-after 'unpack 'disable-service-tests
43140 (lambda _
43141 (setenv "ZARR_TEST_ABS" "0")
43142 (setenv "ZARR_TEST_MONGO" "0")
43143 (setenv "ZARR_TEST_REDIS" "0"))))))
43144 (propagated-inputs
43145 (list python-asciitree
43146 python-fasteners
43147 python-numcodecs
43148 python-numpy))
43149 (native-inputs
43150 (list python-pytest
43151 python-pytest-xdist
43152 python-setuptools
43153 python-wheel))
43154 (home-page "https://github.com/zarr-developers/zarr-python")
43155 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
43156 (description
43157 "This package provides an implementation of chunked, compressed,
43158N-dimensional arrays for Python.")
43159 (license license:expat)))
43160
43161(define-public python-zeroc-ice
43162 (package
43163 (name "python-zeroc-ice")
43164 (version "3.7.10.1")
43165 (source (origin
43166 (method url-fetch)
43167 (uri (pypi-uri "zeroc-ice" version))
43168 (sha256
43169 (base32
43170 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
43171 (build-system pyproject-build-system)
43172 (arguments
43173 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
43174 ;; tag.
43175 ;;
43176 ;; See:
43177 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
43178 ;; - File: <ice/refs/heads/main/python/allTests.py>
43179 (list #:tests? #f))
43180 (inputs (list openssl))
43181 (native-inputs (list python-setuptools))
43182 (home-page "https://zeroc.com")
43183 (synopsis "RPC framework")
43184 (description
43185 "Ice is a comprehensive RPC framework. Ice helps you network your
43186software by taking care of all interactions with low-level network programming
43187interfaces.")
43188 (license license:gpl2)))
43189
43190;; Package variant to build [email protected]
43191(define-public python-zeroc-ice-3.6
43192 (package
43193 (inherit python-zeroc-ice)
43194 (version "3.6.5")
43195 (source (origin
43196 (method url-fetch)
43197 (uri (pypi-uri "zeroc-ice" version))
43198 (sha256
43199 (base32
43200 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
43201 (patches
43202 (search-patches
43203 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
43204 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
43205 (arguments
43206 (substitute-keyword-arguments arguments
43207 ((#:phases phases #~%standard-phases)
43208 #~(modify-phases #$phases
43209 (add-before 'build 'relax-gcc-14-strictness
43210 (lambda _
43211 (setenv "CFLAGS"
43212 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
43213
43214(define-public python-zeroconf
43215 (package
43216 (name "python-zeroconf")
43217 (version "0.38.1")
43218 (source
43219 (origin
43220 (method git-fetch)
43221 (uri (git-reference
43222 (url "https://github.com/jstasiak/python-zeroconf")
43223 (commit version)))
43224 (file-name (git-file-name name version))
43225 (sha256
43226 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
43227 (build-system pyproject-build-system)
43228 (arguments
43229 (list
43230 #:test-flags
43231 #~(list
43232 "-k" (string-append
43233 ;; XXX: Despite asyncio, this test fails.
43234 "not test_run_coro_with_timeout and not "
43235 ;; XXX: Networking isn't available.
43236 (string-join
43237 (list "test_integration_with_listener_ipv6"
43238 "test_launch_and_close_v4_v6"
43239 "test_launch_and_close_context_manager"
43240 "test_launch_and_close"
43241 "test_close_multiple_times")
43242 " and not ")))))
43243 (native-inputs
43244 (list python-pytest python-pytest-asyncio python-setuptools))
43245 (propagated-inputs
43246 (list python-ifaddr))
43247 (home-page "https://github.com/jstasiak/python-zeroconf")
43248 (synopsis "Pure Python mDNS service discovery")
43249 (description "Pure Python multicast DNS (mDNS) service discovery library
43250(Bonjour/Avahi compatible).")
43251 (license license:lgpl2.1+)))
43252
43253(define-public python-zict
43254 (package
43255 (name "python-zict")
43256 (version "3.0.0")
43257 (source
43258 (origin
43259 (method url-fetch)
43260 (uri (pypi-uri "zict" version))
43261 (sha256
43262 (base32
43263 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
43264 (build-system pyproject-build-system)
43265 (arguments
43266 (list
43267 #:test-flags
43268 ;; This uses "importorskip", but it won't skip.
43269 '(list "--ignore=tests/test_lmdb.py")))
43270 (propagated-inputs
43271 (list python-heapdict))
43272 (native-inputs
43273 (list python-pytest
43274 python-pytest-asyncio
43275 python-pytest-repeat
43276 python-pytest-timeout
43277 python-setuptools
43278 python-wheel))
43279 (home-page "https://zict.readthedocs.io/en/latest/")
43280 (synopsis "Composable mutable mapping tools")
43281 (description "This package provides abstract @code{MutableMapping} classes
43282that consume and build on other @code{MutableMappings}. Several of these can
43283be composed with one another to form intuitive interfaces over complex storage
43284systems policies.")
43285 (license license:bsd-3)))
43286
43287(define-public python-zipfly
43288 (package
43289 (name "python-zipfly")
43290 (version "6.0.5")
43291 (source
43292 (origin
43293 (method url-fetch)
43294 (uri (pypi-uri "zipfly" version))
43295 (sha256
43296 (base32
43297 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
43298 (build-system pyproject-build-system)
43299 (arguments
43300 (list #:test-backend #~'unittest))
43301 (native-inputs (list python-setuptools))
43302 (home-page "https://github.com/sandes/zipfly")
43303 (synopsis "Zip archive generator")
43304 (description "ZipFly is a zip archive generator. It was created to
43305generate very large zip archives for immediate sending out to clients, or
43306for writing large zip archives without memory inflation.")
43307 (license license:expat)))
43308
43309(define-public python-zipstream-new
43310 (package
43311 (name "python-zipstream-new")
43312 (version "1.1.8")
43313 (source
43314 (origin
43315 (method git-fetch) ; no tests in PyPI release
43316 (uri (git-reference
43317 (url "https://github.com/arjan-s/python-zipstream")
43318 (commit (string-append "v" version))))
43319 (file-name (git-file-name name version))
43320 (sha256
43321 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
43322 (build-system pyproject-build-system)
43323 (arguments
43324 (list #:test-backend #~'unittest))
43325 (native-inputs (list python-setuptools))
43326 (home-page "https://github.com/arjan-s/python-zipstream")
43327 (synopsis "Zipfile generator that takes input files as well as streams")
43328 (description "@code{zipstream.py} is a zip archive generator based on
43329@code{zipfile.py}. It was created to generate a zip file generator for
43330streaming. This is beneficial for when you want to provide a downloadable
43331archive of a large collection of regular files, which would be infeasible
43332to generate the archive prior to downloading or of a very large file that
43333you do not want to store entirely on disk or on memory.")
43334 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
43335 (license license:gpl3)))
43336
43337(define-public shrinkwrap
43338 (package
43339 (name "shrinkwrap")
43340 (version "0.1.0")
43341 (source
43342 (origin
43343 (method git-fetch)
43344 (uri (git-reference
43345 (url "https://github.com/fzakaria/shrinkwrap")
43346 (commit (string-append "v" version))))
43347 (file-name (git-file-name name version))
43348 (sha256
43349 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
43350 (build-system pyproject-build-system)
43351 (native-inputs
43352 (list python-click
43353 python-poetry-core
43354 python-pypa-build
43355 python-pytest))
43356 (inputs (list python-lief python-sh))
43357 (home-page "https://github.com/fzakaria/shrinkwrap")
43358 (synopsis "Emboss needed dependencies on the top level executable")
43359 (description
43360 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
43361shared objects, and lift them up to the executable referenced by absolute
43362path.")
43363 (license license:expat)))
43364
43365(define-public staticsite
43366 (package
43367 (name "staticsite")
43368 (version "2.5")
43369 (source
43370 (origin
43371 (method git-fetch)
43372 (uri (git-reference
43373 (url "https://github.com/spanezz/staticsite")
43374 (commit (string-append "v" version))))
43375 (file-name (git-file-name name version))
43376 (sha256
43377 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
43378 (build-system pyproject-build-system)
43379 (arguments
43380 (list
43381 #:phases
43382 #~(modify-phases %standard-phases
43383 (add-after 'unpack 'use-themes-in-output
43384 (lambda _
43385 (substitute* "staticsite/global_settings.py"
43386 (("/usr/share/staticsite") #$output))))
43387 (add-after 'install 'install-themes
43388 (lambda _
43389 (let ((themedir (string-append #$output "/themes")))
43390 (copy-recursively "themes" themedir)))))))
43391 (native-inputs
43392 (list python-hatchling
43393 python-pytest))
43394 (inputs
43395 (list perl-image-exiftool
43396 python-dateutil
43397 python-docutils
43398 python-jinja2
43399 python-markdown
43400 python-pillow
43401 python-pytz
43402 python-pyyaml
43403 python-ruamel.yaml
43404 python-slugify
43405 python-toml
43406 tzdata-for-tests))
43407 (home-page "https://github.com/spanezz/staticsite")
43408 (synopsis "Static site generator")
43409 (description
43410 "Statistic is a static site generator based on Markdown and Jinja2.")
43411 (license (list license:gpl3+ license:expat))))
43412
43413;;;
43414;;; Avoid adding new packages to the end of this file. To reduce the chances
43415;;; of a merge conflict, place them above in alphabetic order:
43416;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
43417;;;